[{"_id":"/docs/product-docs/FAQs","structured":{"contents":[{"heading":"how-to-upgrade-nocodb-","content":"Please see here"},{"heading":"what-is-available-in-free-version-","content":"Detailed comparison of NocoDB's generous CE compared to others is here."},{"heading":"what-is-available-in-free-version-","content":"NocoDB has just one community edition version which is free forever."},{"heading":"what-is-available-in-free-version-","content":"In it you will notice advanced features are all available for free."},{"heading":"what-is-available-in-free-version-","content":"ACL"},{"heading":"what-is-available-in-free-version-","content":"Collaboration"},{"heading":"what-is-available-in-free-version-","content":"Advanced Views : Form View, Gallery View & Kanban View"},{"heading":"what-is-available-in-free-version-","content":"Share View"},{"heading":"what-is-available-in-free-version-","content":"Embed View"},{"heading":"what-is-available-in-free-version-","content":"Password protected View"},{"heading":"what-is-available-in-free-version-","content":"Automations"},{"heading":"what-is-available-in-free-version-","content":"API Token Support"},{"heading":"what-is-available-in-free-version-","content":"And we would never move these features from free to an enterprise version of NocoDB."},{"heading":"what-is-available-in-free-version-","content":"There is no limitations to number of bases, records or fields either."},{"heading":"is-nocodb-available-on-the-cloud","content":"Yes! NocoDB is currently available in technical preview.\nYou can simply signup by clicking here."},{"heading":"why-is-the-feature-i-need-not-in-community-edition","content":"We know it can be disappointing when a feature you need isn’t available in community edition.\nBut before we react, let’s reflect: NocoDB community edition is empowering over 20,000 companies — for free without any cost."},{"heading":"why-is-the-feature-i-need-not-in-community-edition","content":"In the sector of software that often takes, we choose to give. Yet, to continue serving with integrity,\nsome capabilities are part of our paid plans — not as a barrier, but as a way to sustain the service for all.\nShould you need these features, you’re welcome to support us through the cloud or a self-hosted license."},{"heading":"scrollbar-disappears-how-should-i-make-it-visible-always","content":"NocoDB follows the system settings for scrollbars. If you have configured your system to always show scrollbars,\nNocoDB will respect that setting. If you want to change this behavior, you can adjust your system settings accordingly."},{"heading":"how-to-check-my-base-info-in-the-community-edition-","content":"You can open Base context menu and click Copy Base Info."},{"heading":"how-to-check-my-base-info-in-the-community-edition-","content":"You should see the similar result as below."},{"heading":"what-are-the-official-socials-for-nocodb","content":"Youtube: https://www.youtube.com/@nocodb"},{"heading":"what-are-the-official-socials-for-nocodb","content":"Twitter: https://twitter.com/nocodb"},{"heading":"what-are-the-official-socials-for-nocodb","content":"Discord: http://discord.nocodb.com/"},{"heading":"what-are-the-official-socials-for-nocodb","content":"GitHub: https://github.com/nocodb/nocodb"},{"heading":"what-are-the-official-socials-for-nocodb","content":"Community Forums: https://community.nocodb.com/"},{"heading":"what-are-the-official-socials-for-nocodb","content":"LinkedIn: https://www.linkedin.com/company/nocodb"},{"heading":"what-are-the-official-socials-for-nocodb","content":"Reddit: https://www.reddit.com/r/NocoDB/"},{"heading":"sso-single-sign-on-faqs","content":"For all questions related to SSO, please see the dedicated SSO FAQ section: SSO FAQs"}],"headings":[{"id":"how-to-upgrade-nocodb-","content":"How to upgrade NocoDB ?"},{"id":"what-is-available-in-free-version-","content":"What is available in free version ?"},{"id":"is-nocodb-available-on-the-cloud","content":"Is NocoDB available on the cloud?"},{"id":"why-is-the-feature-i-need-not-in-community-edition","content":"Why is the feature I need not in Community Edition?"},{"id":"scrollbar-disappears-how-should-i-make-it-visible-always","content":"Scrollbar disappears, how should I make it visible always?"},{"id":"how-to-check-my-base-info-in-the-community-edition-","content":"How to check my Base info in the community edition ?"},{"id":"what-are-the-official-socials-for-nocodb","content":"What are the official socials for NocoDB?"},{"id":"sso-single-sign-on-faqs","content":"SSO (Single Sign-On) FAQs"}]},"url":"/docs/product-docs/FAQs","title":"FAQs","description":"General FAQs"},{"_id":"/docs/product-docs","structured":{"contents":[{"content":"NocoDB is a no-code database platform that allows teams to collaborate and build processes with ease of a familiar and intuitive spreadsheet interface.\nThis allows even non-developers or business users to become software creators."},{"heading":"rich-spreadsheet-interface","content":"⚡  Basic Operations: Create, Read, Update and Delete on Tables, Fields, and Records"},{"heading":"rich-spreadsheet-interface","content":"⚡  Fields Operations: Sort, Filter, Hide / Un-hide Fields"},{"heading":"rich-spreadsheet-interface","content":"⚡  Multiple Views Types: Grid (By default), Gallery, Form View and Kanban View"},{"heading":"rich-spreadsheet-interface","content":"⚡  View Permissions Types: Collaborative Views & Locked Views"},{"heading":"rich-spreadsheet-interface","content":"⚡  Share Bases / Views: either Public or Private (with Password Protected)"},{"heading":"rich-spreadsheet-interface","content":"⚡  Variant Cell Types: ID, Links, Lookup, Rollup, SingleLineText, Attachment, Currency, Formula and etc"},{"heading":"rich-spreadsheet-interface","content":"⚡  Access Control with Roles : Fine-grained Access Control at different levels"},{"heading":"rich-spreadsheet-interface","content":"⚡  and more ..."},{"heading":"programmatic-access","content":"We provide the following ways to let users invoke actions in a programmatic way."},{"heading":"programmatic-access","content":"⚡  REST APIs"},{"heading":"programmatic-access","content":"⚡  NocoDB SDK"},{"heading":"why-are-we-building-this","content":"Most internet businesses equip themselves with either spreadsheet or a database to solve their business needs.\nSpreadsheets are used by a Billion+ humans collaboratively every single day.\nHowever, we are way off working at similar speeds on databases which are way more powerful tools when it comes to computing.\nAttempts to solve this with SaaS offerings has meant horrible access controls, vendor lockin, data lockin, abrupt price changes\n& most importantly a glass ceiling on what's possible in the future."},{"heading":"our-mission","content":"Our mission is to provide the most powerful no-code interface for databases, accessible to every internet business across the world. By making this capability broadly available under a fair and sustainable model, we aim to democratise access to powerful computing tools and enable a billion-plus people to develop radical tinkering and building abilities on the internet."},{"heading":"our-mission","content":"Follow us for updates, content, and other activities with our community:"},{"heading":"our-mission","content":"Youtube"},{"heading":"our-mission","content":"Twitter"},{"heading":"our-mission","content":"Discord"},{"heading":"our-mission","content":"GitHub"},{"heading":"our-mission","content":"Community Forums"},{"heading":"our-mission","content":"LinkedIn"},{"heading":"our-mission","content":"Reddit"}],"headings":[{"id":"features","content":"Features"},{"id":"rich-spreadsheet-interface","content":"Rich Spreadsheet Interface"},{"id":"programmatic-access","content":"Programmatic Access"},{"id":"why-are-we-building-this","content":"Why are we building this?"},{"id":"our-mission","content":"Our Mission"}]},"url":"/docs/product-docs","title":"Welcome","description":"NocoDB Documentation"},{"_id":"/docs/product-docs/mcp","structured":{"contents":[{"content":"The Model Context Protocol (MCP) Server lets you connect NocoDB with LLMs that support MCP, such as Claude, Cursor, or Windsurf. With this integration, LLMs can interact directly with your NocoDB base to create, query, update, and manage records."},{"heading":"desktop-llm-clients","content":"Each MCP endpoint in NocoDB provides a secure URL that can be linked to an MCP-compatible client.\nOnce configured, the LLM can execute database operations in your workspace through natural language prompts."},{"heading":"desktop-llm-clients","content":"MCP server exposes standard CRUD operations. These can be triggered conversationally, without writing SQL or scripts."},{"heading":"desktop-llm-clients","content":"Action"},{"heading":"desktop-llm-clients","content":"Purpose"},{"heading":"desktop-llm-clients","content":"Sample Prompt"},{"heading":"desktop-llm-clients","content":"Create"},{"heading":"desktop-llm-clients","content":"Add new records"},{"heading":"desktop-llm-clients","content":"Create a task named ‘Review Documentation’"},{"heading":"desktop-llm-clients","content":"Read"},{"heading":"desktop-llm-clients","content":"Look up information"},{"heading":"desktop-llm-clients","content":"Show me all projects with deadlines this week"},{"heading":"desktop-llm-clients","content":"Update"},{"heading":"desktop-llm-clients","content":"Change existing data"},{"heading":"desktop-llm-clients","content":"Mark the status of Project X as completed & re-assign to John"},{"heading":"desktop-llm-clients","content":"Delete"},{"heading":"desktop-llm-clients","content":"Remove records"},{"heading":"desktop-llm-clients","content":"Remove all tasks assigned to John"},{"heading":"desktop-llm-clients","content":"type: note"},{"heading":"server-configuration-nocodb","content":"Click on the Overview button in the left sidebar."},{"heading":"server-configuration-nocodb","content":"Select the Settings tab."},{"heading":"server-configuration-nocodb","content":"Select the Model Context Protocol"},{"heading":"server-configuration-nocodb","content":"Click on the New MCP Endpoint to create a new MCP config JSON for your base."},{"heading":"server-configuration-nocodb","content":"Provide a name for the MCP endpoint"},{"heading":"server-configuration-nocodb","content":"Click Create to generate the MCP Config JSON."},{"heading":"server-configuration-nocodb","content":"Copy the generated JSON configuration. This will be used in your LLM client configuration."},{"heading":"claude","content":"Open Claude Desktop Preferences (⌘+,)."},{"heading":"claude","content":"Under Develop, click Edit Config."},{"heading":"claude","content":"Insert the JSON block copied here as claude_desktop_config.json."},{"heading":"claude","content":"Save the file and restart Claude Desktop."},{"heading":"cursor","content":"Go to Cursor Settings (⇧+⌘+J)."},{"heading":"cursor","content":"Open the MCP tab and select Add Custom MCP."},{"heading":"cursor","content":"Paste the JSON block copied here. Save."},{"heading":"cursor","content":"type: info"},{"heading":"windsurf","content":"Open Windsurf Settings (⌘+,)."},{"heading":"windsurf","content":"In the Cascade section > Plugins (MCP Server) > Click Manage Plugins"},{"heading":"windsurf","content":"Paste the JSON block copied here. Save."},{"heading":"json-example","content":"type: warning"},{"heading":"web-based-llm-clients-oauth","content":"Connect NocoDB to web-based LLM applications using OAuth, enabling seamless database access directly from the browser without requiring desktop client setup. This approach grants granular permission controls and eliminates the need for manual JSON configuration."},{"heading":"claude-web","content":"OAuth-based integration allows Claude web users to access NocoDB databases through the connectors interface."},{"heading":"setup-steps","content":"Click here to open Claude Web Settings in a new tab."},{"heading":"setup-steps","content":"Alternatively, navigate to Settings > Connectors from the Claude Web app."},{"heading":"setup-steps","content":"Click Add custom connector."},{"heading":"setup-steps","content":"In the \"Add custom connector\" dialog:"},{"heading":"setup-steps","content":"Provide a connector name of your choice"},{"heading":"setup-steps","content":"Enter the MCP endpoint URL: https://app.nocodb.com/mcp"},{"heading":"setup-steps","content":"Click Add"},{"heading":"setup-steps","content":"NocoDB Connector will now be listed in \"Disconnected\" state. Click Connect to initiate the OAuth authorization flow (Opens in a new tab)."},{"heading":"setup-steps","content":"Authorize Access"},{"heading":"setup-steps","content":"You will be asked to log in to your NocoDB account (if not already logged in)"},{"heading":"setup-steps","content":"Select the workspace and base you want to connect"},{"heading":"setup-steps","content":"Confirm the permissions Claude will have"},{"heading":"setup-steps","content":"Access the selected base"},{"heading":"setup-steps","content":"Read / create / update / delete records in the selected base"},{"heading":"setup-steps","content":"Act on your behalf within the selected resources"},{"heading":"setup-steps","content":"Click Authorize to grant access"},{"heading":"setup-steps","content":"With this, the NocoDB connector will move to \"Connected\" state in Claude Web. You can now interact with your NocoDB data through Claude web application."},{"heading":"setup-steps","content":"type: note"},{"heading":"configure-tool-permissions","content":"By default, all tools are set to \"Always ask permission\" to ensure you have control over each operation Claude performs. You can modify these settings as needed."},{"heading":"configure-tool-permissions","content":"Click here to open Claude Web Settings in a new tab. Click Configure on the NocoDB connector to manage tool permissions. Set each tool's permission level using the dropdown menu:"},{"heading":"configure-tool-permissions","content":"Always ask permission — Your approval is required every time Claude uses this tool"},{"heading":"configure-tool-permissions","content":"Allow unsupervised — Claude can use this tool without requesting approval"},{"heading":"configure-tool-permissions","content":"To retrieve Workspace & Base information that this connector has access to, use the \"Get Base Info\" tool."},{"heading":"using-nocodb-tools-in-claude-web","content":"Once configured, you can interact with your NocoDB data conversationally. For example:"},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Show me all projects with deadlines this week\""},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Create a task named 'Review Documentation'\""},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Mark the status of Project X as completed and reassign to John\""},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Provide details of our top 3 sponsors\""},{"heading":"using-nocodb-tools-in-claude-web","content":"Claude will execute these requests using the enabled NocoDB tools, reading from and writing to your database based on the permissions you've granted."},{"heading":"using-nocodb-tools-in-claude-web","content":"type: warning"},{"heading":"chatgpt","content":"OAuth-based integration enables OpenAI web users (ChatGPT) to securely connect with NocoDB databases through the MCP connector, directly from their browser environment. This provides the same granular access control and eliminates the need for manual configuration or desktop client setup."},{"heading":"prerequisites","content":"Enable Developer Mode in ChatGPT settings to allow custom connector additions."},{"heading":"prerequisites","content":"Open ChatGPT Settings in a new tab."},{"heading":"prerequisites","content":"Alternatively, click your Profile Icon → Settings → Settings → Apps & Connectors)."},{"heading":"prerequisites","content":"Click Advanced Settings & enable Developer Mode."},{"heading":"setup-steps-1","content":"Open ChatGPT Settings in a new tab."},{"heading":"setup-steps-1","content":"Alternatively, click your Profile Icon → Settings → Settings → Apps & Connectors)."},{"heading":"setup-steps-1","content":"Click Create button in top right corner of the Connectors modal."},{"heading":"setup-steps-1","content":"In the \"New connector\" dialog:"},{"heading":"setup-steps-1","content":"Provide a connector name of your choice. Optionally, add a description / icon."},{"heading":"setup-steps-1","content":"Enter the MCP Server URL: https://app.nocodb.com/mcp"},{"heading":"setup-steps-1","content":"Check the box for I trust this application."},{"heading":"setup-steps-1","content":"Click Create"},{"heading":"setup-steps-1","content":"Authorize Access:"},{"heading":"setup-steps-1","content":"Log in to your NocoDB account if prompted"},{"heading":"setup-steps-1","content":"Select the workspace and base you want to connect"},{"heading":"setup-steps-1","content":"Review and confirm the permissions being requested:"},{"heading":"setup-steps-1","content":"Access to the selected base"},{"heading":"setup-steps-1","content":"Read / create / update / delete records"},{"heading":"setup-steps-1","content":"Act on your behalf within the selected resources"},{"heading":"setup-steps-1","content":"Click Authorize"},{"heading":"setup-steps-1","content":"Once authorization completes, you will see a confirmation message in ChatGPT Web indicating the NocoDB connector is now connected."},{"heading":"setup-steps-1","content":"type: note"},{"heading":"using-nocodb-tools-in-openai-web","content":"On the ChatGPT interface, start a new conversation and"},{"heading":"using-nocodb-tools-in-openai-web","content":"Click the + icon to open the \"Tools\" menu, enable Developer Mode if not already enabled."},{"heading":"using-nocodb-tools-in-openai-web","content":"Click More to find and select the NocoDB connector you created. Toggle to enable it."},{"heading":"using-nocodb-tools-in-openai-web","content":"Once configured, you can query or update your NocoDB data conversationally. For example:"},{"heading":"using-nocodb-tools-in-openai-web","content":"“List all open support tickets assigned to me”"},{"heading":"using-nocodb-tools-in-openai-web","content":"“Add a new contact named ‘Alice Chen’ to the CRM base”"},{"heading":"using-nocodb-tools-in-openai-web","content":"“Update the status of Order #2456 to ‘Shipped’”"},{"heading":"using-nocodb-tools-in-openai-web","content":"“Summarize total revenue by month from the Sales base”"},{"heading":"using-nocodb-tools-in-openai-web","content":"ChatGPT executes these actions using the connected NocoDB tools according to the permissions granted."},{"heading":"using-nocodb-tools-in-openai-web","content":"type: warning"}],"headings":[{"id":"desktop-llm-clients","content":"Desktop LLM Clients"},{"id":"server-configuration-nocodb","content":"Server Configuration (NocoDB)"},{"id":"client-configuration","content":"Client Configuration"},{"id":"claude","content":"Claude"},{"id":"cursor","content":"Cursor"},{"id":"windsurf","content":"Windsurf"},{"id":"json-example","content":"JSON Example"},{"id":"web-based-llm-clients-oauth","content":"Web based LLM Clients (OAuth)"},{"id":"claude-web","content":"Claude Web"},{"id":"setup-steps","content":"Setup Steps"},{"id":"configure-tool-permissions","content":"Configure Tool Permissions"},{"id":"using-nocodb-tools-in-claude-web","content":"Using NocoDB Tools in Claude Web"},{"id":"chatgpt","content":"ChatGPT"},{"id":"prerequisites","content":"Prerequisites"},{"id":"setup-steps-1","content":"Setup Steps"},{"id":"using-nocodb-tools-in-openai-web","content":"Using NocoDB Tools in OpenAI Web"}]},"url":"/docs/product-docs/mcp","title":"MCP Server","description":"Connect NocoDB to Large Language Models (LLMs) via the Model Context Protocol (MCP)."},{"_id":"/docs/product-docs/skills","structured":{"contents":[{"heading":"setup","content":"Download the NocoDB Skill"},{"heading":"setup","content":"Get your API token from NocoDB"},{"heading":"setup","content":"Upload the skill to Claude"},{"heading":"setup","content":"Configure environment variables"},{"heading":"usage","content":"Claude automatically uses the skill when relevant. Interact with your databases using natural language:"},{"heading":"usage","content":"Action"},{"heading":"usage","content":"Sample Prompt"},{"heading":"usage","content":"List workspaces"},{"heading":"usage","content":"\"Show me all my NocoDB workspaces\""},{"heading":"usage","content":"View tables"},{"heading":"usage","content":"\"List all tables in my Sales base\""},{"heading":"usage","content":"Query records"},{"heading":"usage","content":"\"Show me all customers from New York\""},{"heading":"usage","content":"Create records"},{"heading":"usage","content":"\"Add a new task called 'Review Documentation'\""},{"heading":"usage","content":"Update records"},{"heading":"usage","content":"\"Mark order #123 as shipped\""},{"heading":"usage","content":"Delete records"},{"heading":"usage","content":"\"Remove all completed tasks from last month\""},{"heading":"usage","content":"Filter data"},{"heading":"usage","content":"\"Find all high-priority tickets that are overdue\""},{"heading":"supported-operations","content":"Workspaces: List, create, update, delete, manage members"},{"heading":"supported-operations","content":"Bases: List, create, update, delete"},{"heading":"supported-operations","content":"Tables: List, create, update, delete"},{"heading":"supported-operations","content":"Fields: List, create, update, delete (all field types)"},{"heading":"supported-operations","content":"Views: List, create, update, delete (grid, gallery, kanban, calendar)"},{"heading":"supported-operations","content":"Records: List, get, create, update, delete, count with filtering"},{"heading":"supported-operations","content":"Linked Records: List, add, remove relationships"},{"heading":"supported-operations","content":"Filters & Sorts: Create view-level filters and sorts"},{"heading":"supported-operations","content":"Attachments: Upload files to records"},{"heading":"related","content":"MCP Server - Connect NocoDB to LLMs via Model Context Protocol"}],"headings":[{"id":"setup","content":"Setup"},{"id":"usage","content":"Usage"},{"id":"supported-operations","content":"Supported Operations"},{"id":"related","content":"Related"}]},"url":"/docs/product-docs/skills","title":"Skills","description":"Extend Claude's capabilities with the NocoDB skill for managing nocodb bases through natural language."},{"_id":"/docs/product-docs/table-details","structured":{"contents":[{"content":"Table Details helps creators manage table structure and integrate with external systems. Access it using the Data-Details toggle in the top navbar."},{"heading":"fields","content":"Manage all your fields in one place — add, edit, delete, or reorder using the multi-field editor.\nLearn more about the multi-field editor."},{"heading":"permissions","content":"Control who can add / delete records in your table & who can edit fields. Refer to the Table permissions and Field permissions documentation for more details."},{"heading":"relations","content":"Visualize and manage how tables connect using the Entity Relationship Diagram (ERD). This helps in:"},{"heading":"relations","content":"Designing your schema"},{"heading":"relations","content":"Ensuring data integrity"},{"heading":"relations","content":"Improving query performance"},{"heading":"relations","content":"type: note"},{"heading":"api-snippet","content":"Use prebuilt REST API examples to interact with your table programmatically — in Shell, JavaScript, Python, and more. Ideal for quickly connecting NocoDB to your applications."},{"heading":"supported-languages","content":"Shell: cURL, wget"},{"heading":"supported-languages","content":"JavaScript: Axios, Fetch, jQuery, XHR"},{"heading":"supported-languages","content":"Node: Axios, Fetch, Request, Native, Unirest"},{"heading":"supported-languages","content":"NocoDB SDK: JavaScript, Node"},{"heading":"supported-languages","content":"Python: http.client, requests"},{"heading":"supported-languages","content":"PHP, Ruby, Java, C"},{"heading":"webhooks","content":"Set up real-time triggers when records change. Use webhooks to:"},{"heading":"webhooks","content":"Send instant alerts"},{"heading":"webhooks","content":"Automate external workflows"},{"heading":"webhooks","content":"Sync data across platforms"},{"heading":"webhooks","content":"Handle batch updates efficiently"},{"heading":"webhooks","content":"type: note"}],"headings":[{"id":"fields","content":"Fields"},{"id":"permissions","content":"Permissions"},{"id":"relations","content":"Relations"},{"id":"api-snippet","content":"API Snippet"},{"id":"supported-languages","content":"Supported languages"},{"id":"webhooks","content":"Webhooks"}]},"url":"/docs/product-docs/table-details","title":"Table details","description":"Manage fields, relations, APIs, and webhooks for your table"},{"_id":"/docs/product-docs/account-settings/api-tokens","structured":{"contents":[{"heading":"create-api-token","content":"Open Account Settings page from the user menu in the bottom left corner of the sidebar."},{"heading":"create-api-token","content":"Click on User menu in the bottom left corner of the sidebar,"},{"heading":"create-api-token","content":"Select Account Settings from the dropdown"},{"heading":"create-api-token","content":"Follow the steps below to create API Token"},{"heading":"create-api-token","content":"Click on Tokens tab in the Account Settings page"},{"heading":"create-api-token","content":"Click on Add New API Token"},{"heading":"create-api-token","content":"Enter the name for the API Token"},{"heading":"create-api-token","content":"Click on Save button to save the changes"},{"heading":"create-api-token","content":"Copy the API Token by clicking on Copy button displayed under Actions menu"},{"heading":"create-api-token","content":"Use the API Token in the services that require it to authenticate. You can use either the xc-token header or the Authorization header with bearer token format."},{"heading":"create-api-token","content":"Option 1: Using xc-token header"},{"heading":"create-api-token","content":"Option 2: Using Authorization header (since v0.264.7)"},{"heading":"create-api-token","content":"type: info"},{"heading":"create-api-token","content":"API Token created will get added to the list. Copy API token by clicking on Copy button displayed under Actions menu"},{"heading":"authentication-methods","content":"NocoDB supports two methods for API token authentication:"},{"heading":"method-1-xc-token-header","content":"Use the xc-token header with your API token value directly:"},{"heading":"method-2-authorization-header-since-v02647","content":"Use the standard Authorization header with Bearer token format:"},{"heading":"method-2-authorization-header-since-v02647","content":"Both methods are equivalent and provide the same level of security. Choose the one that best fits your application's authentication patterns."},{"heading":"delete-api-token","content":"type: warn"},{"heading":"delete-api-token","content":"Note that, all the services using the API Token will stop working once the API Token is deleted."},{"heading":"delete-api-token","content":"Open Account Settings page from the user menu in the bottom left corner of the sidebar."},{"heading":"delete-api-token","content":"Click on User menu in the bottom left corner of the sidebar,"},{"heading":"delete-api-token","content":"Select Account Settings from the dropdown"},{"heading":"delete-api-token","content":"Click on Tokens tab in the Account Settings page"},{"heading":"delete-api-token","content":"From the Actions menu, click on Delete button associated with the API Token to be deleted"},{"heading":"api-token-access-with-sso-enabled-workspaces","content":"If a workspace is configured to enforce Single Sign-On (SSO), API access to that workspace is restricted to tokens that are created after authenticating via SSO."},{"heading":"api-token-access-with-sso-enabled-workspaces","content":"type: warn"},{"heading":"api-token-access-with-sso-enabled-workspaces","content":"To access an SSO-enforced workspace via API, users must:"},{"heading":"api-token-access-with-sso-enabled-workspaces","content":"Sign in using SSO."},{"heading":"api-token-access-with-sso-enabled-workspaces","content":"Generate a new API token from their authenticated session."},{"heading":"api-token-access-with-sso-enabled-workspaces","content":"type: info"},{"heading":"api-token-access-with-sso-enabled-workspaces","content":"For ease of identification, tokens created after SSO is enabled will have a badge indicating they were generated through SSO authentication."},{"heading":"what-happens-when-sso-is-disabled","content":"If SSO is later disabled for a workspace:"},{"heading":"what-happens-when-sso-is-disabled","content":"API tokens that were created via SSO authentication will continue to work as long as the user is still active and has the required permissions."},{"heading":"what-happens-when-sso-is-disabled","content":"Tokens created prior to enabling SSO will continue to function & can now access the workspace without SSO authentication."},{"heading":"what-happens-when-sso-is-disabled","content":"No tokens are automatically revoked when SSO is disabled."}],"headings":[{"id":"create-api-token","content":"Create API Token"},{"id":"authentication-methods","content":"Authentication Methods"},{"id":"method-1-xc-token-header","content":"Method 1: xc-token Header"},{"id":"method-2-authorization-header-since-v02647","content":"Method 2: Authorization Header (since v0.264.7)"},{"id":"delete-api-token","content":"Delete API Token"},{"id":"api-token-access-with-sso-enabled-workspaces","content":"API Token Access with SSO-Enabled Workspaces"},{"id":"what-happens-when-sso-is-disabled","content":"What Happens When SSO is Disabled?"}]},"url":"/docs/product-docs/account-settings/api-tokens","title":"API tokens","description":"This article explains how to create and work with API Tokens."},{"_id":"/docs/product-docs/account-settings/appearance","structured":{"contents":[{"content":"NocoDB allows you to customize the visual appearance of the interface to suit your working preferences and environment."},{"heading":"dark-mode","content":"Dark mode reduces screen glare and can be more comfortable for extended usage, especially in low-light environments."},{"heading":"switching-between-modes","content":"You can quickly switch between Light and Dark modes using the mode switch icon available in the left-side mini bar."},{"heading":"switching-between-modes","content":"Locate the Appearance (sun/moon) icon in the left mini bar."},{"heading":"switching-between-modes","content":"Click the icon to toggle between Light and Dark modes."},{"heading":"switching-between-modes","content":"type: info"}],"headings":[{"id":"dark-mode","content":"Dark mode"},{"id":"switching-between-modes","content":"Switching between modes"}]},"url":"/docs/product-docs/account-settings/appearance","title":"Appearance","description":"This article explains how to customize the appearance of the NocoDB interface, including switching between Light and Dark modes."},{"_id":"/docs/product-docs/account-settings/language","structured":{"contents":[{"content":"type: warning"},{"content":"NocoDB supports multiple languages for its user interface to help users work in their preferred language."},{"content":"You can change the language directly from the app:"},{"content":"Click on your profile picture in the bottom-left corner."},{"content":"Select Language from the dropdown menu."},{"content":"Choose from the list of available languages."},{"content":"type: info"},{"heading":"contribute-to-translations","content":"You can help improve translations or add support for new languages through our community translation platform on Crowdin."},{"heading":"contribute-to-translations","content":"NocoDB Project link: https://crowdin.com/project/nocodb"},{"heading":"contribute-to-translations","content":"To contribute:"},{"heading":"contribute-to-translations","content":"Sign up or log in to Crowdin."},{"heading":"contribute-to-translations","content":"Join the NocoDB project."},{"heading":"contribute-to-translations","content":"Select your language and start translating or reviewing existing translations."},{"heading":"contribute-to-translations","content":"For more details, refer here"},{"heading":"contribute-to-translations","content":"Every contribution helps make NocoDB more accessible across the world!"}],"headings":[{"id":"contribute-to-translations","content":"Contribute to Translations"}]},"url":"/docs/product-docs/account-settings/language","title":"Language settings","description":"This article explains how to change the language settings in NocoDB."},{"_id":"/docs/product-docs/account-settings/oss-specific-details","structured":{"contents":[{"content":"Some of the Account settings features are available only in Community Edition NocoDB. This article explains details about such specifics."},{"heading":"enable--disable-signup","content":"Signup without an invitation is disabled by default and can be managed from UI by a super admin."},{"heading":"app-store","content":"App store lists available integrations for NocoDB. You can install and configure these integrations from the App store."},{"heading":"app-store","content":"We provide different integrations in three main categories."},{"heading":"app-store","content":"Category"},{"heading":"app-store","content":"App Name"},{"heading":"app-store","content":"Chat"},{"heading":"app-store","content":"Microsoft Teams  Discord  Twilio  Whatsapp Twilio Mattermost Slack"},{"heading":"app-store","content":"Email"},{"heading":"app-store","content":"SMTP MailerSend AWS SES"},{"heading":"app-store","content":"Storage"},{"heading":"app-store","content":"AWS S3  Minio  Google Cloud Storage  Spaces  Backblaze B2  Vultr Object Storage  OvhCloud Object Storage  Linode Object Storage  UpCloud Object Storage  Scaleway Object Storage"}],"headings":[{"id":"enable--disable-signup","content":"Enable / Disable Signup"},{"id":"app-store","content":"App Store"}]},"url":"/docs/product-docs/account-settings/oss-specific-details","title":"In Community Edition","description":"This article explains Account settings specifics in Community Edition NocoDB."},{"_id":"/docs/product-docs/account-settings/profile-page","structured":{"contents":[{"content":"Profile page is the place where you can manage your profile information. Currently, only a custom username can be setup as part of profile configuration. To access your profile page,"},{"content":"Click on User menu in the bottom left corner of the sidebar,"},{"content":"Select Account Settings from the dropdown"},{"content":"Change Profile name"},{"content":"Click on Save button to save the changes"},{"heading":"delete-account","content":"This option is available currently only for the cloud users."},{"heading":"delete-account","content":"To delete your account permanently,"},{"heading":"delete-account","content":"Click on User menu in the bottom left corner of the sidebar,"},{"heading":"delete-account","content":"Select Account Settings from the dropdown"},{"heading":"delete-account","content":"In the section for delete account, click on Delete Account button"},{"heading":"delete-account","content":"Confirmation modal displays the Workspaces, Bases & Tokens that will be invalidated upon deletion. As a confirmation step, you will be asked to enter your email address associated with the account."},{"heading":"delete-account","content":"Click on Delete Account button to delete the account permanently."},{"heading":"delete-account","content":"type: warn"},{"heading":"delete-account","content":"Deleting the account is irreversible and all the data associated with the account will be lost permanently."},{"heading":"delete-account","content":"All the workspaces & bases for which you are the sole owner will be deleted. For all other workspaces & bases, you access permissions will be revoked."},{"heading":"delete-account","content":"All the tokens associated with the account will be invalidated."},{"heading":"delete-account","content":"You will be allowed to re-register with the same email address. However, you will require invite from the existing workspace owner to access the workspaces & bases."}],"headings":[{"id":"delete-account","content":"Delete Account"}]},"url":"/docs/product-docs/account-settings/profile-page","title":"Profile page","description":"This article explains how to manage your profile page."},{"_id":"/docs/product-docs/bases/actions-on-base","structured":{"contents":[{"heading":"base-context-menu","content":"The base context menu offers a selection of swift actions that can be executed on a base. To access this menu, click on the ellipsis symbol (...) located adjacent to the base name within the left sidebar."},{"heading":"rename-base","content":"Open Base context menu."},{"heading":"rename-base","content":"From dropdown, select Rename option."},{"heading":"rename-base","content":"Edit the name and press Enter to save."},{"heading":"star-base","content":"You can star a base by following simple steps below:"},{"heading":"star-base","content":"Open Base context menu."},{"heading":"star-base","content":"From dropdown, select Add to starred option."},{"heading":"star-base","content":"Subsequently, the base will be placed into the \"Starred\" section, conveniently positioned within the left sidebar."},{"heading":"remove-a-base-from-starred-list","content":"You can star a base by following simple steps below:"},{"heading":"remove-a-base-from-starred-list","content":"Open Base context menu."},{"heading":"remove-a-base-from-starred-list","content":"From dropdown, select Remove from starred option."},{"heading":"duplicate-base","content":"Open Base context menu."},{"heading":"duplicate-base","content":"From dropdown, select Duplicate base option."},{"heading":"duplicate-base","content":"Duplicate base optional configurations,"},{"heading":"duplicate-base","content":"Include records - disable to duplicate the base schema only, without any data."},{"heading":"duplicate-base","content":"Include comments - disable to duplicate the base without any comments."},{"heading":"duplicate-base","content":"Include scripts - disable to duplicate the base without any scripts."},{"heading":"duplicate-base","content":"You can select a workspace from the dropdown to duplicate the base into. By default, the base will be duplicated within its current workspace. Only workspaces where you have access will appear in the dropdown."},{"heading":"duplicate-base","content":"Click the Duplicate Base button to proceed with the duplication."},{"heading":"duplicate-base","content":"A new base will be created, mirroring the original base's schema and data and/or comments based on the configurations specified in step 3."},{"heading":"duplicate-base","content":"type: info"},{"heading":"delete-base","content":"If you determine that a base is no longer necessary, you have the option to permanently remove it from your workspace. Deleting a base will delete all the tables and data associated with it."},{"heading":"delete-base","content":"type: info"},{"heading":"delete-base","content":"To delete a base:"},{"heading":"delete-base","content":"Open Base context menu."},{"heading":"delete-base","content":"From dropdown, select Delete base option."},{"heading":"delete-base","content":"Select Delete base button on the confirmation dialog box."},{"heading":"find-base-id","content":"Each base in NocoDB has a unique ID (prefixed with p, short for project) that identifies it within a workspace.\nYou can find the base ID in the URL when viewing a base."},{"heading":"find-base-id","content":"Example:"},{"heading":"find-base-id","content":"In this example, the base ID is: pqh6trao813gar7"},{"heading":"base-settings","content":"Some general configurations are available for you to modify within the base settings."},{"heading":"base-settings","content":"Show M2M tables: Toggle this option to display/hide M2M tables within the left sidebar. Many-to-many relation is supported via a junction table & is hidden by default."},{"heading":"base-settings","content":"Show NULL in cells: Toggle this option to display/hide NULL values within the cells of the table. This helps differentiate against cells holding EMPTY string."},{"heading":"base-settings","content":"Show NULL & Empty in Filters: Enable 'additional' filters to differentiate fields containing NULL & Empty Strings. Default support for Blank treats both NULL & Empty strings alike."},{"heading":"base-settings","content":"To configure base settings, you can follow these steps:"},{"heading":"base-settings","content":"Open Base context menu."},{"heading":"base-settings","content":"From dropdown, select Settings option."},{"heading":"rest-apis","content":"NocoDB provides a Swagger UI for each base. To access the Swagger UI, follow these steps:"},{"heading":"rest-apis","content":"Open Base context menu."},{"heading":"rest-apis","content":"From dropdown, select REST APIs option."},{"heading":"relations","content":"NocoDB provides a visual representation of the relations between tables within a base. To access the relations diagram, follow these steps:"},{"heading":"relations","content":"Open Base context menu."},{"heading":"relations","content":"From dropdown, select Relations option."}],"headings":[{"id":"base-context-menu","content":"Base context menu"},{"id":"rename-base","content":"Rename base"},{"id":"star-base","content":"Star base"},{"id":"remove-a-base-from-starred-list","content":"Remove a base from starred list"},{"id":"duplicate-base","content":"Duplicate base"},{"id":"delete-base","content":"Delete base"},{"id":"find-base-id","content":"Find base ID"},{"id":"developer-features","content":"Developer features"},{"id":"base-settings","content":"Base settings"},{"id":"rest-apis","content":"REST APIs"},{"id":"relations","content":"Relations"}]},"url":"/docs/product-docs/bases/actions-on-base","title":"Actions on base","description":"Understand the structure, actions, and developer tools available in a base."},{"_id":"/docs/product-docs/bases/base-collaboration","structured":{"contents":[{"content":"type: info"},{"content":"type: info"},{"heading":"invite-members-to-base","content":"Base-level member management allows you to control granular access to specific bases within your workspace. You can invite individual members directly to a base with specific role assignments."},{"heading":"invite-members-to-base","content":"Navigate to the Overview > Members tab within your base."},{"heading":"invite-members-to-base","content":"Click Add Members."},{"heading":"invite-members-to-base","content":"Enter one or more email addresses (comma-separated)."},{"heading":"invite-members-to-base","content":"Select a role for the invited member(s) from the dropdown menu."},{"heading":"invite-members-to-base","content":"Click Invite to Base."},{"heading":"invite-members-to-base","content":"type: info"},{"heading":"invite-members-to-base","content":"type: info"},{"heading":"invite-members-to-base","content":"Members added to a workspace inherit the role assigned at the workspace level, unless a specific role is configured at the base level. Alternatively, you can invite users directly to a base with restricted workspace access. This allows you to grant access to a single base without exposing other workspace data — ideal for collaborating with external partners, clients, or temporary contributors in a controlled manner."},{"heading":"invite-teams-to-base-","content":"You can assign entire teams to a base for streamlined collaboration. Teams inherit the base-level role assigned to them, making it easier to manage access for department-wide or functional group permissions."},{"heading":"invite-teams-to-base-","content":"Navigate to the Overview > Members tab within your base."},{"heading":"invite-teams-to-base-","content":"Click on the Add Teams button."},{"heading":"invite-teams-to-base-","content":"From the dropdown, select one or multiple teams to add to the base. Teams already added to the base will be indicated as disabled in the dropdown."},{"heading":"invite-teams-to-base-","content":"Choose the appropriate base-level role from the dropdown menu. Note that:"},{"heading":"invite-teams-to-base-","content":"Similar to individual members, you can only assign roles that are at most equal to your own role on the base."},{"heading":"invite-teams-to-base-","content":"Teams can't be assigned the Owner role at the base level."},{"heading":"invite-teams-to-base-","content":"Click on the Add Teams button to complete the process."},{"heading":"invite-teams-to-base-","content":"type: info"},{"heading":"invite-teams-to-base-","content":"To learn more about creating and managing teams, refer to the Teams documentation."},{"heading":"invite-teams-to-base-","content":"Teams added to a workspace inherit the role assigned at the workspace level, unless a different role is configured at the base level. Alternatively, you can invite teams directly to a base with restricted workspace access. This allows team members to collaborate on a specific base without access to other workspace data — ideal for engaging external teams, partner organizations, or temporary project groups securely and efficiently."},{"heading":"list-base-members-and-teams","content":"The Members tab displays all users and teams that have access to the base."},{"heading":"list-base-members-and-teams","content":"Individual members appear with their email addresses and assigned base role."},{"heading":"list-base-members-and-teams","content":"Teams are listed with their name, member count, and assigned base role."},{"heading":"list-base-members-and-teams","content":"Inherited roles from workspace-level are displayed with workspace suffix to indicate their origin."},{"heading":"modify-roles-for-members-or-teams","content":"Access permissions for both members and teams can be updated directly from the Members tab."},{"heading":"modify-roles-for-members-or-teams","content":"Click on the role dropdown next to the member or team."},{"heading":"modify-roles-for-members-or-teams","content":"Select a new role from the list of available options."},{"heading":"modify-roles-for-members-or-teams","content":"The role change takes effect immediately."},{"heading":"modify-roles-for-members-or-teams","content":"type: info"},{"heading":"modify-roles-for-members-or-teams","content":"Learn more about roles and permissions."},{"heading":"role-precedence","content":"When a user has multiple role assignments through both team and individual access at the base level, NocoDB resolves the final permission using a clear precedence order."},{"heading":"role-precedence","content":"Individual explicit role takes precedence over team-assigned role."},{"heading":"role-precedence","content":"Base-level roles override workspace-level roles."},{"heading":"role-precedence","content":"In case of multiple team roles, the highest permission applies."},{"heading":"role-precedence","content":"Learn more about roles and permissions."},{"heading":"remove-or-revoke-base-access","content":"There are two ways to manage member or team access to a base:"},{"heading":"deny-access","content":"To prevent a user or team from accessing the base:"},{"heading":"deny-access","content":"Click on the role dropdown next to the member or team entry."},{"heading":"deny-access","content":"Select No Access from the available roles."},{"heading":"deny-access","content":"The member or team will be blocked from accessing this base, regardless of their workspace or team-level permissions."},{"heading":"revoke-explicit-assignment","content":"To remove an explicit base-level role assignment and allow the user to inherit their workspace or team-level role:"},{"heading":"revoke-explicit-assignment","content":"Click on the role dropdown next to the member or team entry."},{"heading":"revoke-explicit-assignment","content":"Select Inherit from the available roles."},{"heading":"revoke-explicit-assignment","content":"The member or team will now access the base based on their workspace-level or team-level permissions, rather than an explicit base-level assignment."},{"heading":"revoke-explicit-assignment","content":"type: info"},{"heading":"best-practice","content":"Use base-level permissions to restrict access to sensitive data while maintaining broader workspace access."},{"heading":"best-practice","content":"Assign teams to bases for departments or functional groups to manage access efficiently without individual invitations."},{"heading":"best-practice","content":"Start by inviting teams to bases when possible, then add individual members for exceptions."},{"heading":"best-practice","content":"Regularly audit base member lists to ensure access remains appropriate as team compositions change."},{"heading":"best-practice","content":"Learn more here."}],"headings":[{"id":"invite-members-to-base","content":"Invite Members to Base"},{"id":"invite-teams-to-base-","content":"Invite Teams to Base ☁"},{"id":"list-base-members-and-teams","content":"List Base Members and Teams"},{"id":"modify-roles-for-members-or-teams","content":"Modify Roles for Members or Teams"},{"id":"role-precedence","content":"Role Precedence"},{"id":"remove-or-revoke-base-access","content":"Remove or Revoke Base Access"},{"id":"deny-access","content":"Deny Access"},{"id":"revoke-explicit-assignment","content":"Revoke Explicit Assignment"},{"id":"best-practice","content":"Best Practice"}]},"url":"/docs/product-docs/bases/base-collaboration","title":"Base collaboration","description":"This article explains how to invite members or teams to your base, manage their roles, and remove them when needed."},{"_id":"/docs/product-docs/bases/create-base","structured":{"contents":[{"heading":"create-base-from-scratch","content":"To initiate the creation of a new database from the ground up, follow these steps:"},{"heading":"create-base-from-scratch","content":"Navigate to the left sidebar and click on the + Create Base button."},{"heading":"create-base-from-scratch","content":"Select Start from scratch from the modal that appears."},{"heading":"create-base-from-scratch","content":"Input the desired name for the database within the presented pop-up modal."},{"heading":"create-base-from-scratch","content":"Select Base Type : Default / Private."},{"heading":"create-base-from-scratch","content":"Default: This is the standard base type where access is governed by workspace roles."},{"heading":"create-base-from-scratch","content":"Private: This base type allows for granular control over access, independent of workspace roles. Only the base creator will have access by default, and other members must be explicitly granted access. Learn more about Private Base."},{"heading":"create-base-from-scratch","content":"Conclude the process by clicking on the Create Base button."},{"heading":"create-base-from-scratch","content":"type: info"},{"heading":"create-base-from-scratch","content":"On the successful creation of a base, you will be directed to the Base Dashboard, which serves as the primary landing page for the base."},{"heading":"create-base-from-scratch","content":"Find more details on adding tables to a base in the Tables section."},{"heading":"create-base-using-ai","content":"type: info"},{"heading":"create-base-using-ai","content":"NocoAI lets you instantly generate a complete base — including tables, views, fields, and relationships — just by describing your needs in natural language. Refer details here for more details on how to use this feature."}],"headings":[{"id":"create-base-from-scratch","content":"Create base from scratch"},{"id":"create-base-using-ai","content":"Create base using AI"}]},"url":"/docs/product-docs/bases/create-base","title":"Create base","description":"Learn how to create a base in NocoDB."},{"_id":"/docs/product-docs/bases/import-base-from-airtable","structured":{"contents":[{"content":"type: info"},{"content":"type: info"},{"heading":"access-import-modal","content":"Open the Import from Airtable modal to begin the import process"},{"heading":"access-import-modal","content":"Hover over the base name in the left sidebar, click on the ... icon to open base context menu"},{"heading":"access-import-modal","content":"Select Import Data from the base context menu"},{"heading":"access-import-modal","content":"Select Airtable"},{"heading":"access-import-modal","content":"Alternatively, you can also access this modal from the Base dashboard"},{"heading":"access-import-modal","content":"Go to your Base dashboard, click on Import Data"},{"heading":"access-import-modal","content":"Select Airtable"},{"heading":"configure-details","content":"Continue with the following steps on Import from Airtable modal to complete the import process:"},{"heading":"configure-details","content":"Input Personal Access Token"},{"heading":"configure-details","content":"Input shared Base ID / URL"},{"heading":"configure-details","content":"Use Advanced settings to configure import options  (Optional)"},{"heading":"configure-details","content":"Click Import Base"},{"heading":"configure-details","content":"type: info"},{"heading":"advanced-settings","content":"Import Data: If you disable this option, only tables and views will be created (schema), excluding actual data records."},{"heading":"advanced-settings","content":"Import Secondary Views: If you disable this option, only the primary grid view for each table will be imported, omitting any secondary views."},{"heading":"advanced-settings","content":"Import Rollup Fields: If you disable this option, you can skip the import of Rollup fields."},{"heading":"advanced-settings","content":"Import Lookup Fields: If you disable this option, you can skip the import of Lookup fields."},{"heading":"advanced-settings","content":"Import Attachments Fields: If you disable this option, you can skip the import of Attachment fields, which typically store file attachments associated with records."},{"heading":"advanced-settings","content":"Import Formula Fields: Please be aware that import of formula fields from Airtable is currently not supported."},{"heading":"create-personal-access-token","content":"Here are the steps to generate an Airtable Personal Access Token:"},{"heading":"create-personal-access-token","content":"Visit the Airtable Create Tokens page and click the \"Create token\" button."},{"heading":"create-personal-access-token","content":"Provide a meaningful name for your token in the Token name field."},{"heading":"create-personal-access-token","content":"Choose the necessary access scopes, with a minimum requirement of data.records:read."},{"heading":"create-personal-access-token","content":"Select the specific Base you wish to access with this token."},{"heading":"create-personal-access-token","content":"Confirm your choices by clicking the Create token button."},{"heading":"create-personal-access-token","content":"Copy the newly generated Personal Access Token for your use."},{"heading":"create-personal-access-token","content":"For detailed information, you can refer to the Airtable Personal Access Token guide."},{"heading":"retrieve-share-base-id--url","content":"See here for detailed procedures."},{"heading":"retrieve-share-base-id--url","content":"Open Share menu in your Project / Base"},{"heading":"retrieve-share-base-id--url","content":"Open tab Share Publicly"},{"heading":"retrieve-share-base-id--url","content":"Enable Turn on full base access"},{"heading":"retrieve-share-base-id--url","content":"Copy generated shared base URL"}],"headings":[{"id":"access-import-modal","content":"Access import modal"},{"id":"configure-details","content":"Configure details"},{"id":"advanced-settings","content":"Advanced settings"},{"id":"get-airtable-credentials","content":"Get Airtable Credentials"},{"id":"create-personal-access-token","content":"Create Personal Access Token"},{"id":"retrieve-share-base-id--url","content":"Retrieve Share Base ID / URL"}]},"url":"/docs/product-docs/bases/import-base-from-airtable","title":"Import Airtable to NocoDB","description":"A complete import of your Airtable base to NocoDB within minutes"},{"_id":"/docs/product-docs/bases","structured":{"contents":[{"content":"In NocoDB, a base is the core structure where your data lives. It contains tables, views, forms, webhooks, and more—offering a complete environment for organizing and collaborating on data. Each base belongs to a specific workspace and cannot be moved across workspaces."},{"content":"The person who creates a base becomes its owner, and a base must always have at least one owner. Ownership can be shared, with multiple owners having full control over base settings and permissions."},{"heading":"base-level-permissions","content":"Each base has its own set of members and permissions, independent of workspace-level access. This allows fine-grained control over who can view or edit content within a base."},{"heading":"base-level-permissions","content":"You can invite unlimited members."},{"heading":"base-level-permissions","content":"Each base can contain unlimited tables."},{"heading":"base-level-permissions","content":"Base owners can override inherited workspace permissions."},{"heading":"base-level-permissions","content":"To get started:"},{"heading":"base-level-permissions","content":"Create an empty base to build from scratch."},{"heading":"base-level-permissions","content":"Import an Airtable base if you're migrating."},{"heading":"base-level-permissions","content":"Invite your team to collaborate."},{"heading":"base-level-permissions","content":"Share your base publicly if needed."},{"heading":"base-level-permissions","content":"Rename, bookmark, or delete it as required."},{"heading":"base-dashboard","content":"The Base Dashboard is your landing page for each base, giving you a quick overview and access to its core features. To open it, click on the Overview button in the left sidebar."},{"heading":"base-dashboard","content":"The dashboard has the following sections:"},{"heading":"overview","content":"Provides quick access buttons to essential base features:"},{"heading":"overview","content":"Create Table - Start building a table from scratch."},{"heading":"overview","content":"Import Data - Upload CSV, Excel, or other supported formats."},{"heading":"overview","content":"Connect External Data - Link to external databases like MySQL or PostgreSQL"},{"heading":"overview","content":"Create Empty Script – Write custom JavaScript to automate workflows."},{"heading":"overview","content":"Scripts by NocoDB – Access a library of prebuilt scripts."},{"heading":"overview","content":"Create Empty Dashboard (coming soon)– Build custom dashboards with charts and widgets to visualize data."},{"heading":"members","content":"Manage who has access to the base. You can invite members, assign them roles, and view existing collaborators."},{"heading":"members","content":"Workspace members automatically inherit base access."},{"heading":"members","content":"Base owners can adjust these permissions as needed.\nSee Base Collaboration for more details."},{"heading":"permissions","content":"Control fine-grained access to tables and fields. See Table Permissions and Field Permissions for more details."},{"heading":"data-sources","content":"Displays all external connections linked to the base. You can view, add, or remove connections to external databases from here. These external sources are treated like native tables and enhance the base's flexibility. See Data Sources for more details."},{"heading":"settings","content":"Some general base configurations are available for you to modify. See Base Settings for more details."}],"headings":[{"id":"base-level-permissions","content":"Base-level Permissions"},{"id":"base-dashboard","content":"Base Dashboard"},{"id":"overview","content":"Overview"},{"id":"members","content":"Members"},{"id":"permissions","content":"Permissions"},{"id":"data-sources","content":"Data Sources"},{"id":"settings","content":"Settings"}]},"url":"/docs/product-docs/bases","title":"Bases","description":"Overview of bases in NocoDB and how they help organize data and collaboration."},{"_id":"/docs/product-docs/bases/private-base","structured":{"contents":[{"content":"type: warning"},{"content":"A Private Base in NocoDB allows base owners to fully control access at the base level, independently of workspace-level roles. This feature is ideal for projects that require confidentiality, restricted visibility, or selective collaboration within a workspace."},{"heading":"how-private-base-works","content":"When a base is marked as private:"},{"heading":"how-private-base-works","content":"Workspace role inheritance is disabled — users with roles like Owner, Editor, or Viewer at the workspace level will not automatically gain access."},{"heading":"how-private-base-works","content":"By default, only the base creator (Owner) can access the base."},{"heading":"how-private-base-works","content":"Access must be explicitly granted to other members by assigning a base-specific role (Owner, Creator, Editor, Commenter, or Viewer)."},{"heading":"how-private-base-works","content":"type: info"},{"heading":"creating-a-private-base","content":"To create a new private base:"},{"heading":"creating-a-private-base","content":"Navigate to the left sidebar and click on the + Create Base button."},{"heading":"creating-a-private-base","content":"Select Start from scratch from the modal that appears."},{"heading":"creating-a-private-base","content":"Input the desired name for the database within the presented pop-up modal."},{"heading":"creating-a-private-base","content":"Select Base Type as \"Private\"."},{"heading":"creating-a-private-base","content":"Conclude the process by clicking on the Create Base button."},{"heading":"creating-a-private-base","content":"type: info"},{"heading":"creating-a-private-base","content":"type: info"},{"heading":"converting-an-existing-base-to-private","content":"As a base Owner, you can change any of your existing base type to private:"},{"heading":"converting-an-existing-base-to-private","content":"Navigate to the base and click Overview in the left sidebar."},{"heading":"converting-an-existing-base-to-private","content":"Go to the Settings tab and select Base Type."},{"heading":"converting-an-existing-base-to-private","content":"Toggle the access setting to Private."},{"heading":"converting-an-existing-base-to-private","content":"type: info"},{"heading":"converting-an-existing-base-to-private","content":"type: info"},{"heading":"disabling-private-access","content":"To switch a private base back to default (workspace-inherited) type:"},{"heading":"disabling-private-access","content":"Navigate to the base and click Overview in the left sidebar."},{"heading":"disabling-private-access","content":"Go to the Settings tab and select Base Type."},{"heading":"disabling-private-access","content":"Toggle the access setting to Default."},{"heading":"disabling-private-access","content":"type: info"},{"heading":"disabling-private-access","content":"type: info"},{"heading":"managing-access-in-a-private-base","content":"Managing user access in a private base follows the same process as any other base. You can invite workspace members and assign them roles explicitly at the base level. Role changes at the workspace level will not affect access to a private base unless the base type itself is set back to default access."},{"heading":"managing-access-in-a-private-base","content":"For detailed steps, refer to the Base Collaboration Guide."}],"headings":[{"id":"how-private-base-works","content":"How Private Base Works"},{"id":"creating-a-private-base","content":"Creating a Private Base"},{"id":"converting-an-existing-base-to-private","content":"Converting an Existing Base to Private"},{"id":"disabling-private-access","content":"Disabling Private Access"},{"id":"managing-access-in-a-private-base","content":"Managing Access in a Private Base"}]},"url":"/docs/product-docs/bases/private-base","title":"Private Base ☁","description":"Learn how to configure and manage access to Private Bases in NocoDB."},{"_id":"/docs/product-docs/bases/share-base","structured":{"contents":[{"heading":"enable-public-access","content":"To share a base, follow the steps below:"},{"heading":"enable-public-access","content":"Navigate to the top right corner and click on the Share button."},{"heading":"enable-public-access","content":"In the Shared base section, toggle the Enable public access switch to activate public sharing."},{"heading":"enable-public-access","content":"A shareable link will be generated. Click the Copy URL option to copy it."},{"heading":"modify-share-base","content":"Updating (regenerating) the shared base configuration will invalidate the previously generated link and generate a new one. To do this:"},{"heading":"modify-share-base","content":"Click the Share button in the top right corner."},{"heading":"modify-share-base","content":"Toggle Enable public access off to disable sharing."},{"heading":"modify-share-base","content":"Toggle it on again to reactivate sharing, which will generate a new link."},{"heading":"disable-share-base","content":"To disable the shared link:"},{"heading":"disable-share-base","content":"Click the Share button in the top right corner."},{"heading":"disable-share-base","content":"Toggle off the Enable public access option."},{"heading":"disable-share-base","content":"This will deactivate the current share link."},{"heading":"custom-url","content":"You can personalize the shared base URL by setting a custom identifier. The custom URL must be unique and should not contain special characters like /, ?, or #."},{"heading":"custom-url","content":"To set a custom URL:"},{"heading":"custom-url","content":"Toggle the Custom URL option."},{"heading":"custom-url","content":"Enter a custom value in the input field. If the custom URL entered is already in use, you will be prompted to choose a different one."},{"heading":"custom-url","content":"Click Save to apply the changes."},{"heading":"custom-url","content":"type: info"},{"heading":"custom-url","content":"type: info"},{"heading":"embeddable-frame","content":"You can embed the shared base into another application using an HTML IFRAME."},{"heading":"embeddable-frame","content":"To generate an embeddable iframe code:"},{"heading":"embeddable-frame","content":"Click the Share button in the top right corner."},{"heading":"embeddable-frame","content":"In the Shared base section, click <> to copy the Embeddable IFrame code."},{"heading":"embeddable-frame","content":"Example:"},{"heading":"embeddable-frame","content":"Here’s an example of a complete HTML document embedding the base:"}],"headings":[{"id":"enable-public-access","content":"Enable public access"},{"id":"modify-share-base","content":"Modify Share base"},{"id":"disable-share-base","content":"Disable Share base"},{"id":"custom-url","content":"Custom URL"},{"id":"embeddable-frame","content":"Embeddable Frame"}]},"url":"/docs/product-docs/bases/share-base","title":"Share base","description":"Procedures to share a base & generating embedded iframe"},{"_id":"/docs/product-docs/bases/snapshots","structured":{"contents":[{"content":"Snapshots are a powerful feature that allows users to create a point-in-time backup of their base. Whether you’re preparing for major changes or safeguarding against accidental data loss, this feature ensures your data is secure and retrievable."},{"content":"type: info"},{"heading":"key-notes","content":"Snapshots do not include audit log data (global audits & records revision history)."},{"heading":"key-notes","content":"Restoring a snapshot does not modify the current base. Instead, it creates a new base within the same workspace."},{"heading":"key-notes","content":"Base-specific user permissions are not restored. Restored bases inherit default workspace permissions. Any custom base-level permissions must be re-applied manually."},{"heading":"key-notes","content":"Shared base or shared view settings from the source base are not restored. These need to be reconfigured in the restored base."},{"heading":"key-notes","content":"The number of snapshots allowed per base depends on your plan."},{"heading":"key-notes","content":"A minimum gap of three hours is required between creating two snapshots. You can delete all existing snapshots and immediately create a new one if needed."},{"heading":"key-notes","content":"Only Base Owners can access the snapshot feature."},{"heading":"access-snapshots","content":"To access snapshots, follow the steps below:"},{"heading":"access-snapshots","content":"Click Overview button in left sidebar to access base home page."},{"heading":"access-snapshots","content":"Go to the Settings tab."},{"heading":"access-snapshots","content":"Select the Snapshots tab."},{"heading":"create-a-snapshot","content":"To create a snapshot, access snapshots tab and follow the steps below:"},{"heading":"create-a-snapshot","content":"Click on the New Snapshot button."},{"heading":"create-a-snapshot","content":"Enter a name for the snapshot (Optional). By default, the name will be set to the current date and time."},{"heading":"create-a-snapshot","content":"Click Save."},{"heading":"create-a-snapshot","content":"The snapshot thus created will be displayed in the Snapshots tab."},{"heading":"restore-a-snapshot","content":"To restore a snapshot, access snapshots tab and follow the steps below:"},{"heading":"restore-a-snapshot","content":"Click on the Restore button next to the snapshot you wish to restore."},{"heading":"restore-a-snapshot","content":"A confirmation dialog will appear. Click the Confirm Restore button to proceed."}],"headings":[{"id":"key-notes","content":"Key Notes"},{"id":"access-snapshots","content":"Access Snapshots"},{"id":"create-a-snapshot","content":"Create a Snapshot"},{"id":"restore-a-snapshot","content":"Restore a Snapshot"}]},"url":"/docs/product-docs/bases/snapshots","title":"Base Snapshots ☁","description":"Procedures to create and manage snapshots"},{"_id":"/docs/product-docs/cloud-enterprise-edition/admin-panel","structured":{"contents":[{"content":"The Admin Panel in NocoDB provides organization-level oversight and control. It allows administrators to monitor usage metrics, manage workspaces and bases, provision and track users, configure Single Sign-On (SSO), and update branding settings. This guide walks through each section available within the Admin Panel to help administrators maintain governance, enforce security, and keep user and workspace configurations aligned with organizational standards."},{"heading":"navigation-overview","content":"Admin panel is accessible for users with administrative privileges. To access the Admin Panel, click on the Admin Panel option located in the user menu in the bottom-left corner of the NocoDB interface."},{"heading":"navigation-overview","content":"The Admin Panel interface includes a sidebar menu with persistent access to the following sections:"},{"heading":"navigation-overview","content":"Dashboard"},{"heading":"navigation-overview","content":"Workspaces"},{"heading":"navigation-overview","content":"Bases"},{"heading":"navigation-overview","content":"Members"},{"heading":"navigation-overview","content":"Single Sign-On (SSO)"},{"heading":"navigation-overview","content":"Settings"},{"heading":"navigation-overview","content":"Use the Back button in the top-left corner to return to the main NocoDB application interface."},{"heading":"dashboard","content":"The Dashboard offers a high-level overview of key metrics across your NocoDB deployment. It acts as a basic control center for admins to monitor system usage and understand the scale of their organization’s data and user base. While the current functionality is limited, the visual summaries make it easy to track a few critical numbers at a glance."},{"heading":"dashboard","content":"Displayed Metrics:"},{"heading":"dashboard","content":"Total Workspaces – Number of workspaces created within the organization."},{"heading":"dashboard","content":"Total Members – Count of unique users who are part of at least one workspace."},{"heading":"dashboard","content":"Total Bases – Total number of bases created across all workspaces."},{"heading":"dashboard","content":"As the platform evolves, this area will expand to include deeper analytics and customizable reports."},{"heading":"workspaces","content":"The Workspaces section lists all active workspaces within your organization. This view helps admins monitor workspace-level ownership, participation, and data volume."},{"heading":"workspaces","content":"Actions:"},{"heading":"workspaces","content":"Add Member – Invite new users to the workspace directly."},{"heading":"workspaces","content":"Rename – Edit the name of the workspace."},{"heading":"workspaces","content":"Manage Users – Modify user roles or remove users from the workspace."},{"heading":"bases","content":"The Bases section displays all databases across the organization, regardless of the workspace they belong to. It provides a centralized list to help admins manage data structures, maintain visibility over base creation, and enforce naming or ownership standards."},{"heading":"bases","content":"Actions:"},{"heading":"bases","content":"Rename – Update the base name if needed."},{"heading":"bases","content":"Manage Users – Add or remove collaborators, or change their roles."},{"heading":"members","content":"The Members section lists all users who have access to at least one workspace in the organization. It enables admins to monitor user activity, manage memberships across multiple workspaces, and ensure the right people have the right access."},{"heading":"members","content":"Actions:"},{"heading":"members","content":"Invite to Workspace – Add the user to one or more additional workspaces."},{"heading":"members","content":"Bulk Actions – Select multiple users for batch workspace invite."},{"heading":"single-sign-on-sso","content":"The Single Sign-On (SSO) section allows organizations to configure centralized authentication for their users. SSO reduces the burden of managing individual credentials and ensures that user authentication adheres to enterprise security policies."},{"heading":"single-sign-on-sso","content":"Refer to the SSO documentation for detailed setup instructions."},{"heading":"settings","content":"The Settings section allows administrators to define the visual identity and branding of their NocoDB instance."},{"heading":"settings","content":"Editable Fields:"},{"heading":"settings","content":"Organisation Name – The display name for the organisation."},{"heading":"settings","content":"Organisation Logo – Upload or update the logo for the organisation."},{"heading":"additional-notes","content":"Only users with administrative privileges can access the Admin Panel."},{"heading":"additional-notes","content":"Actions in the Admin Panel are scoped at the organization level, affecting all workspaces and bases."},{"heading":"additional-notes","content":"Any updates made in this panel reflect immediately and globally across your NocoDB deployment."}],"headings":[{"id":"navigation-overview","content":"Navigation Overview"},{"id":"dashboard","content":"Dashboard"},{"id":"workspaces","content":"Workspaces"},{"id":"bases","content":"Bases"},{"id":"members","content":"Members"},{"id":"single-sign-on-sso","content":"Single Sign-On (SSO)"},{"id":"settings","content":"Settings"},{"id":"additional-notes","content":"Additional Notes"}]},"url":"/docs/product-docs/cloud-enterprise-edition/admin-panel","title":"Admin Panel","description":"This article explains how to use the Admin Panel in Cloud & Self hosted Enterprise Edition."},{"_id":"/docs/product-docs/cloud-enterprise-edition/community-vs-paid-editions","structured":{"contents":[{"content":"Section"},{"content":"Sub-section"},{"content":"Community Edition"},{"content":"Paid Edition"},{"content":"Comments"},{"content":"Usage"},{"content":"Workspaces"},{"content":"Only one"},{"content":"Unlimited"},{"content":"Bases"},{"content":"Unlimited"},{"content":"Unlimited"},{"content":"Audit: Workspace-level"},{"content":"❌"},{"content":"✅"},{"content":"Base snapshots"},{"content":"❌"},{"content":"✅"},{"content":"Views"},{"content":"Grid"},{"content":"✅"},{"content":"✅"},{"content":"Gallery"},{"content":"✅"},{"content":"✅"},{"content":"Form"},{"content":"✅"},{"content":"✅"},{"content":"Calendar"},{"content":"✅"},{"content":"✅"},{"content":"Kanban"},{"content":"✅"},{"content":"✅"},{"content":"Timeline"},{"content":"✅"},{"content":"✅"},{"content":"Q1 2026"},{"content":"Expanded Record"},{"content":"Field layout"},{"content":"✅"},{"content":"✅"},{"content":"Files layout"},{"content":"❌"},{"content":"✅"},{"content":"Discussion layout"},{"content":"❌"},{"content":"✅"},{"content":"Form View"},{"content":"Background theme"},{"content":"✅"},{"content":"✅"},{"content":"Forms"},{"content":"✅"},{"content":"✅"},{"content":"Email responses"},{"content":"✅"},{"content":"✅"},{"content":"Prefilled forms"},{"content":"✅"},{"content":"✅"},{"content":"Custom logo & banner"},{"content":"❌"},{"content":"✅"},{"content":"Hide NocoDB branding"},{"content":"❌"},{"content":"✅"},{"content":"Form redirection"},{"content":"❌"},{"content":"✅"},{"content":"Customize & shorten shared URL"},{"content":"❌"},{"content":"✅"},{"content":"Field input validation"},{"content":"❌"},{"content":"✅"},{"content":"Conditional field display"},{"content":"❌"},{"content":"✅"},{"content":"Fields"},{"content":"AI button (Action)"},{"content":"❌"},{"content":"✅"},{"content":"Available on-prem; Cloud: Q1 2026"},{"content":"AI prompt (Field)"},{"content":"❌"},{"content":"✅"},{"content":"Available on-prem; Cloud: Q1 2026"},{"content":"Single line text"},{"content":"✅"},{"content":"✅"},{"content":"Long text"},{"content":"✅"},{"content":"✅"},{"content":"Rich text"},{"content":"✅"},{"content":"✅"},{"content":"URL"},{"content":"✅"},{"content":"✅"},{"content":"Email"},{"content":"✅"},{"content":"✅"},{"content":"Phone"},{"content":"✅"},{"content":"✅"},{"content":"Single select"},{"content":"✅"},{"content":"✅"},{"content":"Multiple select"},{"content":"✅"},{"content":"✅"},{"content":"Number"},{"content":"✅"},{"content":"✅"},{"content":"Decimal"},{"content":"✅"},{"content":"✅"},{"content":"Currency"},{"content":"✅"},{"content":"✅"},{"content":"Duration"},{"content":"✅"},{"content":"✅"},{"content":"Percent"},{"content":"✅"},{"content":"✅"},{"content":"Progress bar (Percent)"},{"content":"✅"},{"content":"✅"},{"content":"Date"},{"content":"✅"},{"content":"✅"},{"content":"Time"},{"content":"✅"},{"content":"✅"},{"content":"DateTime"},{"content":"✅"},{"content":"✅"},{"content":"Year"},{"content":"✅"},{"content":"✅"},{"content":"Links"},{"content":"✅"},{"content":"✅"},{"content":"Link to another record"},{"content":"✅"},{"content":"✅"},{"content":"Lookup"},{"content":"✅"},{"content":"✅"},{"content":"Rollup"},{"content":"✅"},{"content":"✅"},{"content":"Attachment"},{"content":"✅"},{"content":"✅"},{"content":"Rating"},{"content":"✅"},{"content":"✅"},{"content":"Checkbox"},{"content":"✅"},{"content":"✅"},{"content":"User"},{"content":"✅"},{"content":"✅"},{"content":"QR code"},{"content":"✅"},{"content":"✅"},{"content":"Barcode"},{"content":"✅"},{"content":"✅"},{"content":"Button"},{"content":"✅"},{"content":"✅"},{"content":"Formula"},{"content":"✅"},{"content":"✅"},{"content":"Created at"},{"content":"✅"},{"content":"✅"},{"content":"Last modified at"},{"content":"✅"},{"content":"✅"},{"content":"Created by"},{"content":"✅"},{"content":"✅"},{"content":"Last modified by"},{"content":"✅"},{"content":"✅"},{"content":"UUID"},{"content":"❌"},{"content":"✅"},{"content":"PostgreSQL only"},{"content":"Features"},{"content":"Filter"},{"content":"✅"},{"content":"✅"},{"content":"Filter groups"},{"content":"✅"},{"content":"✅"},{"content":"Sort"},{"content":"✅"},{"content":"✅"},{"content":"Group by"},{"content":"✅"},{"content":"✅"},{"content":"Row height"},{"content":"✅"},{"content":"✅"},{"content":"Footer aggregations"},{"content":"✅"},{"content":"✅"},{"content":"Group by aggregations"},{"content":"✅"},{"content":"✅"},{"content":"Table & field description"},{"content":"✅"},{"content":"✅"},{"content":"Undo / Redo"},{"content":"✅"},{"content":"✅"},{"content":"Quick navigation (Cmd + K)"},{"content":"✅"},{"content":"✅"},{"content":"Search"},{"content":"Limited"},{"content":"Coming soon"},{"content":"Templates"},{"content":"Limited"},{"content":"Coming soon"},{"content":"API snippets"},{"content":"✅"},{"content":"✅"},{"content":"Field manager (bulk edit)"},{"content":"✅"},{"content":"✅"},{"content":"Filter, Sort & Group re-order"},{"content":"❌"},{"content":"✅"},{"content":"Base relationship diagram (ERD)"},{"content":"✅"},{"content":"✅"},{"content":"Link field : Limit to view"},{"content":"✅"},{"content":"✅"},{"content":"Link field : Limit by filter"},{"content":"❌"},{"content":"✅"},{"content":"Conditional lookup"},{"content":"❌"},{"content":"✅"},{"content":"Conditional rollup"},{"content":"❌"},{"content":"✅"},{"content":"Locked views"},{"content":"✅"},{"content":"✅"},{"content":"Personal views"},{"content":"❌"},{"content":"✅"},{"content":"View sections"},{"content":"❌"},{"content":"✅"},{"content":"Business plan and higher"},{"content":"Calendar view with end date"},{"content":"❌"},{"content":"✅"},{"content":"Copy another view config"},{"content":"❌"},{"content":"✅"},{"content":"Hide field labels"},{"content":"❌"},{"content":"✅"},{"content":"Applicable for Gallery & Kanban views"},{"content":"Row colouring"},{"content":"❌"},{"content":"✅"},{"content":"Plus plan and higher"},{"content":"Cell colouring"},{"content":"❌"},{"content":"✅"},{"content":"Business plan and higher"},{"content":"Dashboards"},{"content":"❌"},{"content":"✅"},{"content":"Private Bases"},{"content":"❌"},{"content":"✅"},{"content":"Available with Business+ plans in cloud & Full 'Enterprise' plan in on-premises plans."},{"content":"Extensions"},{"content":"❌"},{"content":"✅"},{"content":"MCP Server (desktop)"},{"content":"✅"},{"content":"✅"},{"content":"Desktop apps for Claude, Cursor, Windsurf"},{"content":"MCP OAuth"},{"content":"❌"},{"content":"✅"},{"content":"ChatGPT, Claude"},{"content":"Extensions"},{"content":"Bulk update"},{"content":"❌"},{"content":"✅"},{"content":"Data exporter"},{"content":"❌"},{"content":"✅"},{"content":"URL preview"},{"content":"❌"},{"content":"✅"},{"content":"World clock"},{"content":"❌"},{"content":"✅"},{"content":"Upload CSV with upsert"},{"content":"❌"},{"content":"✅"},{"content":"Org chart"},{"content":"❌"},{"content":"✅"},{"content":"Available on-prem; Cloud: Q1 2026"},{"content":"Page designer"},{"content":"❌"},{"content":"✅"},{"content":"Import/Export"},{"content":"Export: CSV, XLS"},{"content":"✅"},{"content":"✅"},{"content":"Import to new table: CSV, XLS, JSON"},{"content":"✅"},{"content":"✅"},{"content":"Import: Airtable"},{"content":"✅"},{"content":"✅"},{"content":"Import to existing table"},{"content":"✅"},{"content":"✅"},{"content":"Developers"},{"content":"Core REST API"},{"content":"✅"},{"content":"✅"},{"content":"Advanced REST API"},{"content":"❌"},{"content":"✅"},{"content":"View, Script & Collaboration APIs"},{"content":"Swagger specification"},{"content":"✅"},{"content":"✅"},{"content":"API tokens"},{"content":"✅"},{"content":"✅"},{"content":"API token permissions"},{"content":"❌"},{"content":"Coming soon"},{"content":"Q1 2026"},{"content":"Public Sharing"},{"content":"Public view sharing"},{"content":"✅"},{"content":"✅"},{"content":"Public view sharing with password"},{"content":"✅"},{"content":"✅"},{"content":"Public view custom URL"},{"content":"❌"},{"content":"✅"},{"content":"Public base custom URL"},{"content":"❌"},{"content":"✅"},{"content":"Automations"},{"content":"Webhooks"},{"content":"✅"},{"content":"✅"},{"content":"Webhooks with conditions"},{"content":"✅"},{"content":"✅"},{"content":"Webhooks with custom payload"},{"content":"✅"},{"content":"✅"},{"content":"Webhooks on specific field changes"},{"content":"❌"},{"content":"✅"},{"content":"Webhooks view & field specific triggers"},{"content":"❌"},{"content":"✅"},{"content":"Webhook logs"},{"content":"❌"},{"content":"✅"},{"content":"Scripts (Custom JS code)"},{"content":"❌"},{"content":"✅"},{"content":"Run scripts via Button field"},{"content":"❌"},{"content":"✅"},{"content":"Collaboration"},{"content":"Workspace collaboration"},{"content":"✅"},{"content":"✅"},{"content":"Community Edition supports 1 workspace"},{"content":"Base collaboration"},{"content":"✅"},{"content":"✅"},{"content":"Role-based permissions"},{"content":"✅"},{"content":"✅"},{"content":"Notifications"},{"content":"✅"},{"content":"✅"},{"content":"Row comments"},{"content":"✅"},{"content":"✅"},{"content":"Row comments resolve"},{"content":"❌"},{"content":"✅"},{"content":"@Mentions in comments fields"},{"content":"❌"},{"content":"✅"},{"content":"Realtime collaboration"},{"content":"❌"},{"content":"✅"},{"content":"Integrations"},{"content":"PostgreSQL"},{"content":"✅"},{"content":"✅"},{"content":"MySQL"},{"content":"✅"},{"content":"✅"},{"content":"SQLite"},{"content":"✅"},{"content":"❌"},{"content":"OpenAI"},{"content":"❌"},{"content":"✅"},{"content":"Claude"},{"content":"❌"},{"content":"✅"},{"content":"Ollama"},{"content":"❌"},{"content":"✅"},{"content":"Groq"},{"content":"❌"},{"content":"✅"},{"content":"Private integrations"},{"content":"❌"},{"content":"✅"},{"content":"Admin"},{"content":"Admin panel"},{"content":"❌"},{"content":"✅"},{"content":"SSO"},{"content":"❌"},{"content":"✅"},{"content":"Audit logs"},{"content":"❌"},{"content":"✅"},{"content":"Co-branding"},{"content":"❌"},{"content":"✅"},{"content":"2FA"},{"content":"❌"},{"content":"Coming soon"},{"content":"Q1 2026"},{"content":"Support"},{"content":"Community support"},{"content":"✅"},{"content":"✅"},{"content":"Priority support"},{"content":"❌"},{"content":"✅"},{"content":"SLA-based support"},{"content":"❌"},{"content":"✅"}],"headings":[]},"url":"/docs/product-docs/cloud-enterprise-edition/community-vs-paid-editions","title":"Community Edition vs Enterprise Edition","description":"Complete overview of the differences between NocoDBs Community vs Enterprise Edition."},{"_id":"/docs/product-docs/cloud-enterprise-edition/oss-to-enterprise-migration","structured":{"contents":[{"content":"This guide outlines the steps to migrate from the OSS version of NocoDB to the Enterprise Edition. Migration is supported for both on-prem and cloud deployments."},{"heading":"prerequisites","content":"Before you begin, ensure the following:"},{"heading":"prerequisites","content":"The OSS version of NocoDB (Instance-1) is accessible."},{"heading":"prerequisites","content":"You have access to the Enterprise Edition of NocoDB (Instance-2) — either self-hosted (on-prem) or provisioned via a cloud subscription on NocoDB."},{"heading":"prerequisites","content":"If using the self-hosted (on-prem) Enterprise Edition, it must be running version v0.262.2 or higher."},{"heading":"prerequisites","content":"You have administrative access to both instances."},{"heading":"steps","content":"The migration process consists of two parts:"},{"heading":"part-1-generate-migration-url","content":"On the Enterprise Edition (Instance-2)"},{"heading":"part-1-generate-migration-url","content":"On the base homepage, click Import Data."},{"heading":"part-1-generate-migration-url","content":"Choose NocoDB as the data source."},{"heading":"part-1-generate-migration-url","content":"Click Generate & Copy URL."},{"heading":"part-1-generate-migration-url","content":"The URL will be copied to your clipboard. The modal will now enter listening mode, waiting for a migration request from the OSS instance."},{"heading":"part-2-migrate-base-from-self-hosted-instance","content":"On the OSS instance (Instance-1):"},{"heading":"part-2-migrate-base-from-self-hosted-instance","content":"Open the base context menu and select Settings."},{"heading":"part-2-migrate-base-from-self-hosted-instance","content":"Navigate to the Migrate tab."},{"heading":"part-2-migrate-base-from-self-hosted-instance","content":"Paste the migration URL copied from Instance-2."},{"heading":"part-2-migrate-base-from-self-hosted-instance","content":"Click Migrate."},{"heading":"part-2-migrate-base-from-self-hosted-instance","content":"Once the migration is triggered, a status popup will appear on the OSS instance (Instance-1). Upon successful completion, a confirmation message will be displayed on the Enterprise Edition (Instance-2)."},{"heading":"part-2-migrate-base-from-self-hosted-instance","content":"Click Go to Base to access the migrated base."}],"headings":[{"id":"prerequisites","content":"Prerequisites"},{"id":"steps","content":"Steps"},{"id":"part-1-generate-migration-url","content":"Part 1: Generate Migration URL"},{"id":"part-2-migrate-base-from-self-hosted-instance","content":"Part 2: Migrate Base from Self hosted instance"}]},"url":"/docs/product-docs/cloud-enterprise-edition/oss-to-enterprise-migration","title":"OSS to Enterprise Migration"},{"_id":"/docs/product-docs/cloud-enterprise-edition/understanding-pricing","structured":{"contents":[{"heading":"executive-summary","content":"NocoDB's pricing model is designed with growing businesses in mind. Our unique \"pay for 9, get unlimited\" approach means you'll never pay for more than 9 editor seats, regardless of your team size. This creates predictable costs and exceptional value as your organization scales."},{"heading":"executive-summary","content":"Key Benefits:"},{"heading":"executive-summary","content":"Predictable costs - Your bill caps at 9 editor seats automatically"},{"heading":"executive-summary","content":"Unlimited scale - Add as many team members as needed without additional cost"},{"heading":"executive-summary","content":"Immediate value - Start small and grow without pricing penalties"},{"heading":"executive-summary","content":"No surprises - Transparent billing with no hidden fees"},{"heading":"billable-vs-non-billable-users","content":"Billable Users (Editors): Team members who can create, modify, or delete data"},{"heading":"billable-vs-non-billable-users","content":"Owner: Full administrative control"},{"heading":"billable-vs-non-billable-users","content":"Creator: Can create new bases and modify data"},{"heading":"billable-vs-non-billable-users","content":"Editor: Can modify existing data and records"},{"heading":"billable-vs-non-billable-users","content":"Non-Billable Users (Always Free): Team members with view-only or limited access"},{"heading":"billable-vs-non-billable-users","content":"Commenter: Can view records and add comments, but cannot edit data"},{"heading":"billable-vs-non-billable-users","content":"Viewer: Read-only access to data and dashboards"},{"heading":"billable-vs-non-billable-users","content":"💡 Pro Tip: Maximize your investment by assigning Commenter or Viewer roles to stakeholders who only need to review data, not edit it."},{"heading":"the-pay-for-9-get-unlimited-model","content":"How It Works"},{"heading":"the-pay-for-9-get-unlimited-model","content":"You pay for only the first 9 editor seats - regardless of your actual number of editors"},{"heading":"the-pay-for-9-get-unlimited-model","content":"Every editor beyond the 9th is completely free - no limits, no restrictions"},{"heading":"the-pay-for-9-get-unlimited-model","content":"Start with any number - begin with 1-2 users and grow naturally"},{"heading":"the-pay-for-9-get-unlimited-model","content":"Automatic billing cap - NocoDB stops charging after the 9th editor"},{"heading":"real-world-example","content":"Scenario: Your company has 45 total users across different departments"},{"heading":"real-world-example","content":"25 editors (Sales, Operations, Product teams who need to update data)"},{"heading":"real-world-example","content":"20 commenters/viewers (Executives, stakeholders who review reports)"},{"heading":"real-world-example","content":"What you pay for:"},{"heading":"real-world-example","content":"Only 9 editor seats (not all 25 editors)"},{"heading":"real-world-example","content":"0 seats for commenters/viewers"},{"heading":"real-world-example","content":"Your cost: Same as a 9-person team, but with 45 people using the platform."},{"heading":"plus-plan","content":"Price: $12 per editor/month (Annual)"},{"heading":"plus-plan","content":"Best for: Growing teams and departments"},{"heading":"plus-plan","content":"Team Size (Editors)"},{"heading":"plus-plan","content":"Monthly Cost"},{"heading":"plus-plan","content":"Annual Cost"},{"heading":"plus-plan","content":"Cost Per User/Month"},{"heading":"plus-plan","content":"5 editors"},{"heading":"plus-plan","content":"$60"},{"heading":"plus-plan","content":"$720"},{"heading":"plus-plan","content":"$12.00"},{"heading":"plus-plan","content":"10 editors"},{"heading":"plus-plan","content":"$108"},{"heading":"plus-plan","content":"$1,296"},{"heading":"plus-plan","content":"$10.80"},{"heading":"plus-plan","content":"25 editors"},{"heading":"plus-plan","content":"$108"},{"heading":"plus-plan","content":"$1,296"},{"heading":"plus-plan","content":"$4.32"},{"heading":"plus-plan","content":"50 editors"},{"heading":"plus-plan","content":"$108"},{"heading":"plus-plan","content":"$1,296"},{"heading":"plus-plan","content":"$2.16"},{"heading":"plus-plan","content":"100 editors"},{"heading":"plus-plan","content":"$108"},{"heading":"plus-plan","content":"$1,296"},{"heading":"plus-plan","content":"$1.08"},{"heading":"business-plan","content":"Price: $24 per editor/month (Annual)"},{"heading":"business-plan","content":"Best for: Enterprise teams requiring advanced features"},{"heading":"business-plan","content":"Team Size (Editors)"},{"heading":"business-plan","content":"Monthly Cost"},{"heading":"business-plan","content":"Annual Cost"},{"heading":"business-plan","content":"Cost Per User/Month"},{"heading":"business-plan","content":"5 editors"},{"heading":"business-plan","content":"$120"},{"heading":"business-plan","content":"$1,440"},{"heading":"business-plan","content":"$24.00"},{"heading":"business-plan","content":"10 editors"},{"heading":"business-plan","content":"$216"},{"heading":"business-plan","content":"$2,592"},{"heading":"business-plan","content":"$21.60"},{"heading":"business-plan","content":"25 editors"},{"heading":"business-plan","content":"$216"},{"heading":"business-plan","content":"$2,592"},{"heading":"business-plan","content":"$8.64"},{"heading":"business-plan","content":"50 editors"},{"heading":"business-plan","content":"$216"},{"heading":"business-plan","content":"$2,592"},{"heading":"business-plan","content":"$4.32"},{"heading":"business-plan","content":"100 editors"},{"heading":"business-plan","content":"$216"},{"heading":"business-plan","content":"$2,592"},{"heading":"business-plan","content":"$2.16"},{"heading":"roi-calculator","content":"Traditional Per-Seat Pricing vs. NocoDB"},{"heading":"roi-calculator","content":"Example: 40-person team needing editing access"},{"heading":"roi-calculator","content":"Pricing Model"},{"heading":"roi-calculator","content":"Monthly Cost"},{"heading":"roi-calculator","content":"Annual Cost"},{"heading":"roi-calculator","content":"Savings with NocoDB"},{"heading":"roi-calculator","content":"Traditional SaaS ($15/user)"},{"heading":"roi-calculator","content":"$600"},{"heading":"roi-calculator","content":"$7,200"},{"heading":"roi-calculator","content":"-"},{"heading":"roi-calculator","content":"NocoDB Plus"},{"heading":"roi-calculator","content":"$108"},{"heading":"roi-calculator","content":"$1,296"},{"heading":"roi-calculator","content":"$5,904 saved"},{"heading":"roi-calculator","content":"NocoDB Business"},{"heading":"roi-calculator","content":"$216"},{"heading":"roi-calculator","content":"$2,592"},{"heading":"roi-calculator","content":"$4,608 saved"},{"heading":"roi-calculator","content":"The larger your team, the greater your savings."},{"heading":"changing-plans","content":"Note that, you can change your plan at any time from the billing dashboard. Upgrades take effect immediately, and you'll be billed on a prorated basis. Downgrades take effect at the end of your current billing cycle."},{"heading":"changing-plans","content":"type: warning"},{"heading":"changing-plans","content":"The detailed steps for change plan are captured here."},{"heading":"access-your-invoices","content":"To view and download your invoices, go to the Billing tab in your workspace settings. You can access past invoices, their statuses, and download them for your records. Find more details here."},{"heading":"cancel-your-plan","content":"You can cancel your paid plan anytime from the billing dashboard. Upon cancellation, your workspace remains on the current plan until the end of the billing period. After that, it automatically moves to the Free plan, and no further charges are made."},{"heading":"cancel-your-plan","content":"type: warning"},{"heading":"cancel-your-plan","content":"Follow the detailed steps here."},{"heading":"can-i-change-user-roles-after-setup","content":"Yes, you can promote Commenters to Editors or vice versa at any time. Billing adjusts automatically based on your current editor count (up to 9 paid seats)."},{"heading":"what-happens-if-i-temporarily-need-more-than-9-editors","content":"Nothing changes with your billing. Add as many editors as needed - you'll still only pay for 9 seats."},{"heading":"do-i-need-to-commit-to-9-seats-upfront","content":"No. Start with the number of editors you need today. You'll only pay for active editor seats until you reach 9."},{"heading":"how-does-annual-vs-monthly-billing-work","content":"Annual billing provides the pricing shown above and helps you save 20% compared to monthly billing."},{"heading":"questions-about-pricing","content":"Our sales team is here to help you understand how NocoDB's pricing model works for your specific situation. Book a consultation call →"}],"headings":[{"id":"executive-summary","content":"Executive Summary"},{"id":"understanding-user-roles-and-billing","content":"Understanding User Roles and Billing"},{"id":"billable-vs-non-billable-users","content":"Billable vs. Non-Billable Users"},{"id":"the-pay-for-9-get-unlimited-model","content":"The \"Pay for 9, Get Unlimited\" Model"},{"id":"real-world-example","content":"Real-World Example"},{"id":"pricing-plans-comparison","content":"Pricing Plans Comparison"},{"id":"plus-plan","content":"Plus Plan"},{"id":"business-plan","content":"Business Plan"},{"id":"roi-calculator","content":"ROI Calculator"},{"id":"changing-plans","content":"Changing plans"},{"id":"access-your-invoices","content":"Access your invoices"},{"id":"cancel-your-plan","content":"Cancel your plan"},{"id":"frequently-asked-questions","content":"Frequently Asked Questions"},{"id":"can-i-change-user-roles-after-setup","content":"Can I change user roles after setup?"},{"id":"what-happens-if-i-temporarily-need-more-than-9-editors","content":"What happens if I temporarily need more than 9 editors?"},{"id":"do-i-need-to-commit-to-9-seats-upfront","content":"Do I need to commit to 9 seats upfront?"},{"id":"how-does-annual-vs-monthly-billing-work","content":"How does annual vs. monthly billing work?"},{"id":"questions-about-pricing","content":"Questions About Pricing?"}]},"url":"/docs/product-docs/cloud-enterprise-edition/understanding-pricing","title":"NocoDB Pricing Guide","description":"Transparent, Scalable, and Business-Friendly"},{"_id":"/docs/product-docs/collaboration/base-collaboration","structured":{"contents":[{"content":"type: info"},{"content":"type: info"},{"heading":"invite-members-to-base","content":"Base-level member management allows you to control granular access to specific bases within your workspace. You can invite individual members directly to a base with specific role assignments."},{"heading":"invite-members-to-base","content":"Navigate to the Overview > Members tab within your base."},{"heading":"invite-members-to-base","content":"Click Add Members."},{"heading":"invite-members-to-base","content":"Enter one or more email addresses (comma-separated)."},{"heading":"invite-members-to-base","content":"Select a role for the invited member(s) from the dropdown menu."},{"heading":"invite-members-to-base","content":"Click Invite to Base."},{"heading":"invite-members-to-base","content":"type: info"},{"heading":"invite-members-to-base","content":"type: info"},{"heading":"invite-members-to-base","content":"Members added to a workspace inherit the role assigned at the workspace level, unless a specific role is configured at the base level. Alternatively, you can invite users directly to a base with restricted workspace access. This allows you to grant access to a single base without exposing other workspace data — ideal for collaborating with external partners, clients, or temporary contributors in a controlled manner."},{"heading":"invite-teams-to-base-","content":"You can assign entire teams to a base for streamlined collaboration. Teams inherit the base-level role assigned to them, making it easier to manage access for department-wide or functional group permissions."},{"heading":"invite-teams-to-base-","content":"Navigate to the Overview > Members tab within your base."},{"heading":"invite-teams-to-base-","content":"Click on the Add Teams button."},{"heading":"invite-teams-to-base-","content":"From the dropdown, select one or multiple teams to add to the base. Teams already added to the base will be indicated as disabled in the dropdown."},{"heading":"invite-teams-to-base-","content":"Choose the appropriate base-level role from the dropdown menu. Note that:"},{"heading":"invite-teams-to-base-","content":"Similar to individual members, you can only assign roles that are at most equal to your own role on the base."},{"heading":"invite-teams-to-base-","content":"Teams can't be assigned the Owner role at the base level."},{"heading":"invite-teams-to-base-","content":"Click on the Add Teams button to complete the process."},{"heading":"invite-teams-to-base-","content":"type: info"},{"heading":"invite-teams-to-base-","content":"To learn more about creating and managing teams, refer to the Teams documentation."},{"heading":"invite-teams-to-base-","content":"Teams added to a workspace inherit the role assigned at the workspace level, unless a different role is configured at the base level. Alternatively, you can invite teams directly to a base with restricted workspace access. This allows team members to collaborate on a specific base without access to other workspace data — ideal for engaging external teams, partner organizations, or temporary project groups securely and efficiently."},{"heading":"list-base-members-and-teams","content":"The Members tab displays all users and teams that have access to the base."},{"heading":"list-base-members-and-teams","content":"Individual members appear with their email addresses and assigned base role."},{"heading":"list-base-members-and-teams","content":"Teams are listed with their name, member count, and assigned base role."},{"heading":"list-base-members-and-teams","content":"Inherited roles from workspace-level are displayed with workspace suffix to indicate their origin."},{"heading":"modify-roles-for-members-or-teams","content":"Access permissions for both members and teams can be updated directly from the Members tab."},{"heading":"modify-roles-for-members-or-teams","content":"Click on the role dropdown next to the member or team."},{"heading":"modify-roles-for-members-or-teams","content":"Select a new role from the list of available options."},{"heading":"modify-roles-for-members-or-teams","content":"The role change takes effect immediately."},{"heading":"modify-roles-for-members-or-teams","content":"type: info"},{"heading":"modify-roles-for-members-or-teams","content":"Learn more about roles and permissions."},{"heading":"role-precedence","content":"When a user has multiple role assignments through both team and individual access at the base level, NocoDB resolves the final permission using a clear precedence order."},{"heading":"role-precedence","content":"Individual explicit role takes precedence over team-assigned role."},{"heading":"role-precedence","content":"Base-level roles override workspace-level roles."},{"heading":"role-precedence","content":"In case of multiple team roles, the highest permission applies."},{"heading":"role-precedence","content":"Learn more about roles and permissions."},{"heading":"remove-or-revoke-base-access","content":"There are two ways to manage member or team access to a base:"},{"heading":"deny-access","content":"To prevent a user or team from accessing the base:"},{"heading":"deny-access","content":"Click on the role dropdown next to the member or team entry."},{"heading":"deny-access","content":"Select No Access from the available roles."},{"heading":"deny-access","content":"The member or team will be blocked from accessing this base, regardless of their workspace or team-level permissions."},{"heading":"revoke-explicit-assignment","content":"To remove an explicit base-level role assignment and allow the user to inherit their workspace or team-level role:"},{"heading":"revoke-explicit-assignment","content":"Click on the role dropdown next to the member or team entry."},{"heading":"revoke-explicit-assignment","content":"Select Inherit from the available roles."},{"heading":"revoke-explicit-assignment","content":"The member or team will now access the base based on their workspace-level or team-level permissions, rather than an explicit base-level assignment."},{"heading":"revoke-explicit-assignment","content":"type: info"},{"heading":"best-practice","content":"Use base-level permissions to restrict access to sensitive data while maintaining broader workspace access."},{"heading":"best-practice","content":"Assign teams to bases for departments or functional groups to manage access efficiently without individual invitations."},{"heading":"best-practice","content":"Start by inviting teams to bases when possible, then add individual members for exceptions."},{"heading":"best-practice","content":"Regularly audit base member lists to ensure access remains appropriate as team compositions change."},{"heading":"best-practice","content":"Learn more here."}],"headings":[{"id":"invite-members-to-base","content":"Invite Members to Base"},{"id":"invite-teams-to-base-","content":"Invite Teams to Base ☁"},{"id":"list-base-members-and-teams","content":"List Base Members and Teams"},{"id":"modify-roles-for-members-or-teams","content":"Modify Roles for Members or Teams"},{"id":"role-precedence","content":"Role Precedence"},{"id":"remove-or-revoke-base-access","content":"Remove or Revoke Base Access"},{"id":"deny-access","content":"Deny Access"},{"id":"revoke-explicit-assignment","content":"Revoke Explicit Assignment"},{"id":"best-practice","content":"Best Practice"}]},"url":"/docs/product-docs/collaboration/base-collaboration","title":"Base collaboration","description":"This article explains how to invite members or teams to your base, manage their roles, and remove them when needed."},{"_id":"/docs/product-docs/collaboration","structured":{"contents":[{"content":"At NocoDB, teamwork is at the core of what we do. Our collaboration features make it easy to share work, assign tasks, and communicate effectively with your team."},{"content":"In this section, we’ll explore the different collaboration tools available in NocoDB."},{"content":"Workspace collaborationBase collaborationShare baseShare view"}],"headings":[]},"url":"/docs/product-docs/collaboration","title":"Collaboration","description":"This article explains various collaboration features that NocoDB offers."},{"_id":"/docs/product-docs/collaboration/notifications","structured":{"contents":[{"content":"The Notifications feature in NocoDB helps you stay informed about important updates, invitations, and activities within your bases and workspaces. This feature allows you to easily manage and keep track of all your notifications in one place."},{"heading":"notification-center","content":"The Notification Center is accessible via the bell icon located at the bottom of the sidebar in your NocoDB interface. Clicking on this icon opens a menu that displays all your recent notifications. Whenever someone mentions you in the comments or invites you to a workspace, you will receive a notification."},{"heading":"notification-center","content":"type: info"},{"heading":"unread-and-read-notifications","content":"Notifications are categorized into two sections:"},{"heading":"unread-and-read-notifications","content":"Unread: Displays all notifications that you haven't viewed yet."},{"heading":"unread-and-read-notifications","content":"Read: Displays notifications that you have already seen."},{"heading":"mark-as-readunread","content":"You can easily change the status of your notifications:"},{"heading":"mark-as-readunread","content":"Mark as Read: Hover over any unread notification and click the checkmark to mark it as read. Alternatively, you can click the \"Mark all as read\" option at the top of the menu to mark all notifications as read."},{"heading":"mark-as-readunread","content":"Mark as Unread: If you need to revisit a notification later, simply hover over a read notification, click on the ⋮ menu, and select 'Mark as Unread'. This will move it back to the 'Unread' section."},{"heading":"delete-notifications","content":"Read notifications can be deleted individually by clicking on the ⋮ menu and selecting 'Delete'. Once deleted, the notification will no longer appear in your list, ensuring that you only keep relevant information."},{"heading":"related-articles","content":"Workspace Collaboration"},{"heading":"related-articles","content":"Base Collaboration"},{"heading":"related-articles","content":"Expanded Records"}],"headings":[{"id":"notification-center","content":"Notification Center"},{"id":"unread-and-read-notifications","content":"Unread and Read Notifications"},{"id":"mark-as-readunread","content":"Mark as Read/Unread"},{"id":"delete-notifications","content":"Delete Notifications"},{"id":"related-articles","content":"Related Articles"}]},"url":"/docs/product-docs/collaboration/notifications","title":"Notifications","description":"This article explains specifics of Notifications."},{"_id":"/docs/product-docs/collaboration/oss-specific-details","structured":{"contents":[{"content":"Community Edition of NocoDB includes a default workspace, and it does not allow the creation of additional workspaces. And hence, the user management on community edition is different from Cloud hosted solutions. This article details the specifics of User management in the Community Edition."}],"headings":[]},"url":"/docs/product-docs/collaboration/oss-specific-details","title":"In Community Edition","description":"This article explains specifics of User management in Community Edition."},{"_id":"/docs/product-docs/collaboration/share-base","structured":{"contents":[{"content":"To share a base, follow the steps below:"},{"content":"Navigate to the top right corner of the top navigation bar and click on the Share button."},{"content":"In the Shared base section, toggle the switch to Enable public access in order to activate the shared base feature."},{"content":"The generated link for the shared base will be displayed above and can be utilized to share this base with others. To copy the URL, simply click on the Copy Link option."},{"heading":"copy-base","content":"The Copy base feature allows users to create a copy of the base (import base) into their own Workspace. This feature is also useful for users who wish to utilize a base as a template for future bases. To copy a base, follow the steps below:"},{"heading":"copy-base","content":"Access shared base URL that you wish to copy."},{"heading":"copy-base","content":"Click on the Copy base button located in the top right corner of the toolbar."},{"heading":"copy-base","content":"A modal will appear, prompting you to select the Workspace you wish to copy the base to. Select the desired Workspace"},{"heading":"copy-base","content":"Configure if you wish to copy the base with or without data / views."},{"heading":"copy-base","content":"Click on the Copy base button to complete the process."},{"heading":"modify-share-base","content":"Amending the Share base setting will render the previously generated Share base link invalid and generate a new link in its place.\nHere are the steps to modify it:"},{"heading":"modify-share-base","content":"Click on the Share button located in the top right corner of the toolbar."},{"heading":"modify-share-base","content":"Toggle the option labeled Enable public access to deactivate the base share."},{"heading":"modify-share-base","content":"Toggle the same option, Enable public access, to reactivate the base share, subsequently generating a new link."},{"heading":"disable-share-base","content":"Disabling Share base will render the previously generated Share base link invalid\nHere are the steps to disable it:"},{"heading":"disable-share-base","content":"Click on the 'Share' button located in the top right corner of the toolbar."},{"heading":"disable-share-base","content":"Toggle the option labeled Enable public access to deactivate the base share."},{"heading":"share-base-access-permissions","content":"The \"Shared base\" can be configured in two modes:"},{"heading":"share-base-access-permissions","content":"Viewer - Users with the provided link will have read-only access to the base data."},{"heading":"share-base-access-permissions","content":"Editor - Users with the provided link will have read and write access to the base data."},{"heading":"share-base-access-permissions","content":"type: note"},{"heading":"share-base-access-permissions","content":"The default access permission is set to Viewer"},{"heading":"share-base-access-permissions","content":"Shared base with Editor access permission is only available in Self-hosted version currently"},{"heading":"share-base-access-permissions","content":"Toggle Enable Editor Access button to configure permissions as desired"},{"heading":"embeddable-frame","content":"The NocoDB interface can be seamlessly integrated into existing applications through the utilization of the HTML IFRAME attribute. This feature empowers users to embed the NocoDB interface into their applications, allowing for a unified user experience. To generate the embeddable HTML code, follow these steps:"},{"heading":"embeddable-frame","content":"To Generate Embeddable HTML Code:"},{"heading":"embeddable-frame","content":"Click the Share button located in the top right corner of the toolbar."},{"heading":"embeddable-frame","content":"Within the Shared base link tab, select the button to copy the Embeddable HTML code to your clipboard."},{"heading":"embeddable-frame","content":"Example:"},{"heading":"embed-into-applications-html-body","content":"Sample code with embedded iframe generated above"}],"headings":[{"id":"copy-base","content":"Copy base"},{"id":"modify-share-base","content":"Modify Share base"},{"id":"disable-share-base","content":"Disable Share base"},{"id":"share-base-access-permissions","content":"Share base Access Permissions"},{"id":"embeddable-frame","content":"Embeddable Frame"},{"id":"embed-into-applications-html-body","content":"Embed into application's HTML Body"}]},"url":"/docs/product-docs/collaboration/share-base","title":"Share base","description":"Procedures to share a base publicly & generating embedded iframe"},{"_id":"/docs/product-docs/collaboration/share-view","structured":{"contents":[{"heading":"generate-share-view","content":"Click Share button on the top right of the toolbar"},{"heading":"generate-share-view","content":"Toggle Enable public viewing to create shared view link"},{"heading":"generate-share-view","content":"Click Copy button to copy the link to clipboard"},{"heading":"password-protection","content":"You can enable Restrict access with a password if you want a password-protected view"},{"heading":"download-options","content":"You can toggle Allow Download button to enable or disable download CSV/XLSX options in the shared view link"},{"heading":"share-form-view-options","content":"Form view has additional customizations for shared view. You can enable/disable the following options for shared form view:"},{"heading":"share-form-view-options","content":"Survey mode: This option when enabled, will display the form in survey mode."},{"heading":"share-form-view-options","content":"RTL Orientation: This option when enabled, will display the form in RTL orientation."},{"heading":"share-form-view-options","content":"Themes: You can select a theme for the form from the dropdown."},{"heading":"access-share-view","content":"To access the shared view, please follow the steps below:\nClick on the Shared View URL. If the URL is password-protected, you will be prompted to enter the password to unlock it. Please input the required password to proceed."},{"heading":"access-share-view","content":"Once the password is successfully entered and authenticated, you will gain access to the shared view.\nIn the event that the URL is not password-protected, you will be directed to the shared view directly, without the need for a password."},{"heading":"access-share-view","content":"Users with the shared view link can only view the data and cannot make any changes to the view or its content. Records and fields in the shared view will be updated in real-time as changes are made to the original view. Users accessing shared view can apply filters and sort records as per their requirements."},{"heading":"access-share-view","content":":::info\nNote that, filters & sorts applied to shared view will not be persisted. These filters & sorts will be reset when the shared view is accessed again.\n:::"}],"headings":[{"id":"generate-share-view","content":"Generate Share View"},{"id":"share-view-options","content":"Share view options"},{"id":"password-protection","content":"Password protection"},{"id":"download-options","content":"Download options"},{"id":"share-form-view-options","content":"Share Form View Options"},{"id":"access-share-view","content":"Access Share View"}]},"url":"/docs/product-docs/collaboration/share-view","title":"Share view","description":"Procedures to share a view publicly"},{"_id":"/docs/product-docs/collaboration/teams","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"Teams let you group existing workspace members, so you can assign and manage permissions at scale. Instead of configuring the same role for each person on every base, add users to a team and grant that team a role on one or more bases."},{"heading":"overview","content":"Teams help you to"},{"heading":"overview","content":"Organize members by department, project, or function"},{"heading":"overview","content":"Manage permissions efficiently by assigning roles to teams instead of individuals"},{"heading":"overview","content":"Scale access control without managing individual user permissions"},{"heading":"overview","content":"Maintain flexibility with inheritance and override capabilities"},{"heading":"create-team","content":"Navigate to Workspace Settings > Teams tab."},{"heading":"create-team","content":"Click New Team."},{"heading":"create-team","content":"Enter a team name (Optional)."},{"heading":"create-team","content":"Click Create Team."},{"heading":"create-team","content":"When a team is created, the creator is automatically added as its first member and designated as the Team Owner. Team Owners have full administrative privileges, including adding or removing members, renaming the team, and deleting it when necessary. Multiple owners can be assigned to a team, but each team must always have at least one owner."},{"heading":"add-members-to-a-team","content":"In the Teams tab, select the team you want to manage, then follow these steps:"},{"heading":"add-members-to-a-team","content":"Click Add Members."},{"heading":"add-members-to-a-team","content":"Use the toggle buttons to select existing workspace members to add. Members already part of the team are clearly indicated."},{"heading":"add-members-to-a-team","content":"Click Add Members again to confirm your selection."},{"heading":"add-members-to-a-team","content":"You can search by name or email to quickly locate users. Existing team members have their toggles disabled to avoid duplicate additions. Each member’s workspace role is displayed beside their name for better context."},{"heading":"remove-members-from-a-team","content":"In the Teams tab, select the team you want to manage, then follow these steps:"},{"heading":"remove-members-from-a-team","content":"Locate the member you want to remove. Use the search bar if needed and open the Actions (three dots) menu beside their name."},{"heading":"remove-members-from-a-team","content":"Select Remove Member."},{"heading":"remove-members-from-a-team","content":"Confirm the action when prompted."},{"heading":"remove-members-from-a-team","content":"To remove multiple members at once:"},{"heading":"remove-members-from-a-team","content":"Use the checkboxes to select the members you want to remove."},{"heading":"remove-members-from-a-team","content":"Click Actions > Remove from Team at the top of the member list."},{"heading":"remove-members-from-a-team","content":"Confirm the action when prompted."},{"heading":"manage-team-owners","content":"A team can have multiple owners, but it must always have at least one."},{"heading":"manage-team-owners","content":"To add or remove team owners:"},{"heading":"manage-team-owners","content":"In the Teams tab, select the team you want to manage."},{"heading":"manage-team-owners","content":"Locate the member whose ownership status you want to change. Use the search bar if necessary and open the Actions (three dots) menu beside their name."},{"heading":"manage-team-owners","content":"To grant ownership, select Assign as Team Owner. To revoke ownership, select Remove as Team Owner."},{"heading":"leave-team","content":"Members can leave team on their own if they no longer wish to be part of it (any team member can leave, not just owners -- as long as at least one owner remains)."},{"heading":"leave-team","content":"To leave a team you are a member of:"},{"heading":"leave-team","content":"In the Teams tab, open team context menu by clicking the Actions (three dots) button beside the team name."},{"heading":"leave-team","content":"Click the Leave Team button from the dropdown menu."},{"heading":"leave-team","content":"Confirm the action when prompted."},{"heading":"rename-team","content":"In the Teams tab, select the team you want to rename. Edit team name as needed, and your changes will be saved automatically."},{"heading":"delete-team","content":"type: warning"},{"heading":"delete-team","content":"To delete a team:"},{"heading":"delete-team","content":"In the Teams tab, open team context menu by clicking the Actions (three dots) button beside the team name."},{"heading":"delete-team","content":"Click the Delete Team button from the dropdown menu."},{"heading":"delete-team","content":"Confirm the action when prompted."},{"heading":"assign-roles-to-teams","content":"You can assign roles to teams at both the workspace and base levels, similar to how you assign roles to individual users. When a team is granted a role, all its members inherit that role according to the effective role resolution rules detailed below."},{"heading":"effective-role-resolution","content":"Effective permissions for a user at base level are determined by combining explicit (individual) assignments and team-derived assignments using the following precedence rules:"},{"heading":"effective-role-resolution","content":"Explicit individual role at Base (highest precedence)"},{"heading":"effective-role-resolution","content":"Best (most permissive) role among Team roles assigned at Base"},{"heading":"effective-role-resolution","content":"Explicit individual role at Workspace level other than \"Inherit\""},{"heading":"effective-role-resolution","content":"Best (most permissive) role among Team roles assigned at Workspace"},{"heading":"effective-role-resolution","content":"No-access (default)"},{"heading":"effective-role-resolution","content":"Notes"},{"heading":"effective-role-resolution","content":"An explicit individual assignment always overrides any team-derived role at the same level."},{"heading":"effective-role-resolution","content":"Lower-level roles (Base) override higher-level roles (Workspace) when an explicit assignment exists at the lower level."},{"heading":"effective-role-resolution","content":"When multiple team roles apply, the system chooses the most permissive role (for example, between Viewer and Editor it will choose Editor)."},{"heading":"best-practices","content":"Invite all users to the workspace with the Inherit role. This grants no direct permissions but allows users to be included in teams. Note that assigning a No Access role at the workspace level overrides and blocks all team-derived permissions."},{"heading":"best-practices","content":"Organize teams based on your company’s structure — for example, by departments or project groups."},{"heading":"best-practices","content":"Assign roles to teams at the workspace or base level according to access needs."},{"heading":"best-practices","content":"Use explicit individual roles only for special cases or exceptions to maintain consistent access control."},{"heading":"best-practices","content":"Maintain clear naming conventions for teams (e.g., Eng - Backend, Ops - HR) to simplify management and improve visibility across large workspaces."},{"heading":"best-practices","content":"Review team membership regularly to ensure only active users retain access. Remove members who have left the organization or changed roles."},{"heading":"best-practices","content":"Assign multiple team owners to avoid administrative bottlenecks in case one owner is unavailable."}],"headings":[{"id":"overview","content":"Overview"},{"id":"create-team","content":"Create Team"},{"id":"add-members-to-a-team","content":"Add Members to a Team"},{"id":"remove-members-from-a-team","content":"Remove Members from a Team"},{"id":"manage-team-owners","content":"Manage Team Owners"},{"id":"leave-team","content":"Leave Team"},{"id":"rename-team","content":"Rename Team"},{"id":"delete-team","content":"Delete Team"},{"id":"assign-roles-to-teams","content":"Assign Roles to Teams"},{"id":"effective-role-resolution","content":"Effective Role Resolution"},{"id":"best-practices","content":"Best Practices"}]},"url":"/docs/product-docs/collaboration/teams","title":"Teams","description":"Manage groups of users with role-based access to workspaces & bases"},{"_id":"/docs/product-docs/collaboration/workspace-collaboration","structured":{"contents":[{"content":"type: info"},{"content":"type: info"},{"heading":"invite-members-to-workspace","content":"Go to Team & Settings in the left minibar."},{"heading":"invite-members-to-workspace","content":"Open the Members tab."},{"heading":"invite-members-to-workspace","content":"Click Add Member."},{"heading":"invite-members-to-workspace","content":"Enter one or more email addresses (comma-separated)."},{"heading":"invite-members-to-workspace","content":"Select a role for the invited member(s)."},{"heading":"invite-members-to-workspace","content":"Click Invite to Workspace."},{"heading":"invite-members-to-workspace","content":"type: info"},{"heading":"invite-members-to-workspace","content":"type: info"},{"heading":"invite-teams-to-workspace-","content":"NocoDB now allows inviting Teams to the workspace for simplified collaboration. Teams can be assigned workspace-level access roles, streamlining permissions for all their members."},{"heading":"invite-teams-to-workspace-","content":"Navigate to the Team & Settings page and open the Members tab."},{"heading":"invite-teams-to-workspace-","content":"Click on the Add Teams button."},{"heading":"invite-teams-to-workspace-","content":"From the dropdown, select one or multiple teams to add."},{"heading":"invite-teams-to-workspace-","content":"Choose the appropriate access role from the dropdown menu. Note that,"},{"heading":"invite-teams-to-workspace-","content":"Similar to individual members, you can only assign roles that are at most equal to your own role in the workspace."},{"heading":"invite-teams-to-workspace-","content":"Teams can't be assigned the Owner role."},{"heading":"invite-teams-to-workspace-","content":"Click on the Add Teams button to complete the process."},{"heading":"invite-teams-to-workspace-","content":"type: info"},{"heading":"invite-teams-to-workspace-","content":"To learn more about creating and managing teams, refer to the Teams documentation."},{"heading":"list-workspace-members-and-teams","content":"The Members tab displays all users and teams that have access to the workspace."},{"heading":"list-workspace-members-and-teams","content":"Individual members appear with their email addresses."},{"heading":"list-workspace-members-and-teams","content":"Teams are listed with their name and member count."},{"heading":"list-workspace-members-and-teams","content":"type: info"},{"heading":"modify-roles-for-members-or-teams","content":"Access permissions for both members and teams can be updated directly from the Members tab."},{"heading":"modify-roles-for-members-or-teams","content":"Click on the access dropdown next to the member or team."},{"heading":"modify-roles-for-members-or-teams","content":"Select a new role from the list of available options."},{"heading":"modify-roles-for-members-or-teams","content":"type: info"},{"heading":"role-precedence","content":"When a user has multiple role assignments through both team and individual access, NocoDB resolves the final permission using a clear precedence order."},{"heading":"role-precedence","content":"Individual explicit role takes precedence over team-assigned role."},{"heading":"role-precedence","content":"Base-level roles override workspace-level roles."},{"heading":"role-precedence","content":"In case of multiple team roles, the highest permission applies."},{"heading":"role-precedence","content":"type: info"},{"heading":"role-precedence","content":"To learn more about effective role resolution, refer to the Teams effective role resolution documentation."},{"heading":"remove-members-or-teams-from-workspace","content":"You can remove both members and teams from the workspace using the context menu."},{"heading":"remove-members-or-teams-from-workspace","content":"Click on the vertical ellipses ⋮ beside the member or team entry."},{"heading":"remove-members-or-teams-from-workspace","content":"Select the appropriate removal option — Remove User or Remove Team."},{"heading":"remove-members-or-teams-from-workspace","content":"type: info"},{"heading":"best-practice","content":"Invite all users to the workspace first with the Inherit role. This will allow them to access workspaces based on their team or base-level roles."},{"heading":"best-practice","content":"Use teams for departments or functional groups to manage roles efficiently."},{"heading":"best-practice","content":"Adjust team-level permissions instead of managing roles individually for large workspaces."},{"heading":"best-practice","content":"Learn more here."}],"headings":[{"id":"invite-members-to-workspace","content":"Invite Members to Workspace"},{"id":"invite-teams-to-workspace-","content":"Invite Teams to Workspace ☁"},{"id":"list-workspace-members-and-teams","content":"List Workspace Members and Teams"},{"id":"modify-roles-for-members-or-teams","content":"Modify Roles for Members or Teams"},{"id":"role-precedence","content":"Role Precedence"},{"id":"remove-members-or-teams-from-workspace","content":"Remove Members or Teams from Workspace"},{"id":"best-practice","content":"Best Practice"}]},"url":"/docs/product-docs/collaboration/workspace-collaboration","title":"Workspace collaboration","description":"This article explains how to invite members or teams to your workspace, manage their roles, and remove them when needed."},{"_id":"/docs/product-docs/dashboards","structured":{"contents":[{"content":"The Dashboard feature in NocoDB enables you to visualize data from your tables using charts, graphs, and metric widgets. Dashboards help present key insights to stakeholders through an interactive, configurable interface."},{"content":"type: info"},{"heading":"creating-a-dashboard","content":"Click on Create New in the left sidebar."},{"heading":"creating-a-dashboard","content":"Select Dashboard from the dropdown."},{"heading":"creating-a-dashboard","content":"Enter a name for your dashboard. (Optional, Defaults to \"Dashboard\")"},{"heading":"creating-a-dashboard","content":"Click Create Dashboard to open the dashboard editor."},{"heading":"creating-a-dashboard","content":"Click on Edit Dashboard to start adding widgets."},{"heading":"managing-dashboards","content":"Use the dashboard context menu to perform actions like:"},{"heading":"managing-dashboards","content":"Rename dashboard: Change the dashboard name"},{"heading":"managing-dashboards","content":"Edit description: Add or update the dashboard description. This description will appear on hover over the i icon in the dashboard header."},{"heading":"managing-dashboards","content":"Duplicate dashboard: Create a copy of the dashboard"},{"heading":"managing-dashboards","content":"Delete dashboard: Remove the dashboard"},{"heading":"sharing-dashboards","content":"To share a dashboard publicly, click the Share button in the top navigation bar, enable the Enable Public Viewing option, and copy the generated link. Anyone with this link will be able to view the dashboard without requiring a NocoDB account."},{"heading":"sharing-dashboards","content":"Additional options include:"},{"heading":"sharing-dashboards","content":"Configuring a custom URL for your dashboard."},{"heading":"sharing-dashboards","content":"Setting a password to control access."},{"heading":"sharing-dashboards","content":"Dashboard sharing works similarly to view sharing. Learn more about sharing views."},{"heading":"dashboard-layout","content":"Top Navigation Bar: Navigation breadcrumbs and dashboard-level actions. Toggle between dashboard View and Edit modes. You can also Share the dashboard with team members."},{"heading":"dashboard-layout","content":"Widget Bar: Toolbar at the top with available widget types to add to the dashboard."},{"heading":"dashboard-layout","content":"Dashboard Canvas: Main area where widgets are arranged. NocoDB supports a flexible grid layout, allowing you to drag and drop widgets to position them as needed."},{"heading":"dashboard-layout","content":"Widget Configuration Panel: Right panel for configuring selected widget properties."},{"heading":"widgets","content":"NocoDB dashboards support various widget types to visualize data effectively. You can add widgets from the widget bar at the top of the dashboard editor."},{"heading":"widgets","content":"The following widget types are available:"},{"heading":"widgets","content":"Widget Type"},{"heading":"widgets","content":"Description"},{"heading":"widgets","content":"Number"},{"heading":"widgets","content":"Displays KPIs and metric summaries"},{"heading":"widgets","content":"Pie Chart"},{"heading":"widgets","content":"Visualizes parts of a whole"},{"heading":"widgets","content":"Donut Chart"},{"heading":"widgets","content":"Pie chart variant with a hollow center"},{"heading":"widgets","content":"Text"},{"heading":"widgets","content":"Displays static text"},{"heading":"widgets","content":"iFrame"},{"heading":"widgets","content":"Embeds external web content"},{"heading":"widgets","content":"Bar Chart"},{"heading":"widgets","content":"Bar chart variant with a hollow center"},{"heading":"widgets","content":"Line Chart"},{"heading":"widgets","content":"Line chart variant with a hollow center"}],"headings":[{"id":"getting-started","content":"Getting Started"},{"id":"creating-a-dashboard","content":"Creating a Dashboard"},{"id":"managing-dashboards","content":"Managing Dashboards"},{"id":"sharing-dashboards","content":"Sharing Dashboards"},{"id":"dashboard-layout","content":"Dashboard Layout"},{"id":"widgets","content":"Widgets"}]},"url":"/docs/product-docs/dashboards","title":"Dashboards ☁","description":"Create and share dashboards with your team"},{"_id":"/docs/product-docs/data-sources/actions-on-data-sources","structured":{"contents":[{"heading":"edit-data-source-parameters","content":"Open Data Sources tab in the Base Settings homepage"},{"heading":"edit-data-source-parameters","content":"Click on the data source that you wish to edit"},{"heading":"edit-data-source-parameters","content":"Re-configure data source parameters as required. The following parameters can be edited:"},{"heading":"edit-data-source-parameters","content":"Data source name"},{"heading":"edit-data-source-parameters","content":"Database & Schema"},{"heading":"edit-data-source-parameters","content":"Data source access permissions"},{"heading":"edit-data-source-parameters","content":"Click on Submit button to save the changes"},{"heading":"edit-data-source-parameters","content":"type: info"},{"heading":"remove-data-source","content":"Open Data Sources tab in the Base Settings homepage"},{"heading":"remove-data-source","content":"Click on Actions button (three dots) against the data source that you wish to remove"},{"heading":"remove-data-source","content":"Select Remove option from the dropdown"},{"heading":"remove-data-source","content":"type: info"},{"heading":"data-source-visibility","content":"Open Data Sources tab in the Base Settings homepage"},{"heading":"data-source-visibility","content":"Toggle radio button listed under Visibility column for the data source that you wish to hide/un-hide"},{"heading":"view-visibility","content":"type: info"},{"heading":"view-visibility","content":"Open Data Sources tab in the Base Settings homepage, select the data source that you wish to configure view visibility for and follow the steps below:"},{"heading":"view-visibility","content":"Select View visibility tab"},{"heading":"view-visibility","content":"You can see the list of views & tables available in the data source as rows & roles available as columns. Toggle checkboxes to enable/disable access to tables for specific roles."},{"heading":"view-visibility","content":"Click on Save button to save the changes"},{"heading":"relations","content":"Open Data Sources tab in the Base Settings homepage"},{"heading":"relations","content":"Select the data source that you wish to access ERD (Relations view) for"},{"heading":"relations","content":"Click on ERD View tab"}],"headings":[{"id":"edit-data-source-parameters","content":"Edit Data Source parameters"},{"id":"remove-data-source","content":"Remove data source"},{"id":"data-source-visibility","content":"Data source visibility"},{"id":"view-visibility","content":"View visibility"},{"id":"relations","content":"Relations"}]},"url":"/docs/product-docs/data-sources/actions-on-data-sources","title":"Actions on Data sources","description":"Learn more about actions that can be performed on data sources in NocoDB."},{"_id":"/docs/product-docs/data-sources/connect-to-data-source","structured":{"contents":[{"content":"type: info"},{"content":"To connect an external Database as a new Data Source for NocoDB, follow the steps below:"},{"content":"Click on the Base name in the left sidebar to access the Base homepage"},{"content":"Click Connect External Data button"},{"content":"Provide a name to the data source"},{"content":"Select connection to pick credentials for the database\n(a) Select connection from the list of available connections in the dropdown(b) Click on + New connection button to create a new connection instead"},{"content":"Configure / Change database & schema details as required. If default database & schema details were provided during connection creation, these details will be pre-filled."},{"content":"Configure permissions for the data source"},{"content":"Click on Test Database Connection button to verify the connection"},{"content":"Click on Add Source button to save the data source"},{"content":"type: info"},{"heading":"configuring-permissions","content":"This section covers the settings available when configuring data source permissions. These settings determine the level of access and modifications allowed on the connected database."},{"heading":"configuring-permissions","content":"NocoDB provides the following options for schema and data permissions:"},{"heading":"allow-data-edit","content":"This option when enabled, users can insert, update, and delete records from the tables. This provides the flexibility to manage the data directly from the NocoDB UI but should be used with caution to avoid unintentional changes to the records in the external data source. This level of access is ideal for administrative users who need to modify data directly."},{"heading":"allow-data-edit","content":"By default, data editing is enabled"},{"heading":"allow-data-edit","content":"When data editing is disabled, users can still view the data and perform read-only operations such as filtering, sorting, and grouping. This ensures that users can access the data for analysis and reporting purposes without the risk of modifying the records."},{"heading":"allow-data-edit","content":"type: info"},{"heading":"allow-schema-edit","content":"This option enables users to modify the structure of the database schema. When enabled, users can create, modify, and delete tables, fields and relationships (links) within the connected datasource from NocoDB UI. This provides flexibility to adjust the database schema design as needed from UI."},{"heading":"allow-schema-edit","content":"type: warn"},{"heading":"allow-schema-edit","content":"NocoDB strongly advises against enabling the schema editing option unless absolutely necessary. Use with extreme caution, as improper changes can severely impact the data integrity and functionality of the connected data source."},{"heading":"allow-schema-edit","content":"By default, schema editing is disabled."},{"heading":"allow-schema-edit","content":"Even when schema editing is disabled, users can still"},{"heading":"allow-schema-edit","content":"add (augment) virtual columns such as Lookup, Rollup and Formula. These virtual columns do not alter the underlying schema of the connected data source."},{"heading":"allow-schema-edit","content":"create views to customize the data presentation without modifying the original tables."},{"heading":"allow-schema-edit","content":"create webhooks to trigger external actions based on specific events within the connected datasource."},{"heading":"allow-schema-edit","content":"collaborate with other users by explicitly inviting them to the base or by sharing views."}],"headings":[{"id":"configuring-permissions","content":"Configuring Permissions"},{"id":"allow-data-edit","content":"Allow Data Edit"},{"id":"allow-schema-edit","content":"Allow Schema Edit"}]},"url":"/docs/product-docs/data-sources/connect-to-data-source","title":"Connect to a Data source","description":"Learn how to connect to an external data-source (PG/MySQL) in NocoDB."},{"_id":"/docs/product-docs/data-sources","structured":{"contents":[{"heading":"overview","content":"NocoDB allows you to connect to external data sources and get a unified spreadsheet view of your data. Activities related to external data sources can be managed from Data Sources tab in Base dashboard."},{"heading":"overview","content":"Data Sources tab includes following functionalities"},{"heading":"overview","content":"Connect / manage external data source"},{"heading":"overview","content":"UI Access Control"},{"heading":"overview","content":"Relations (ERD View)"},{"heading":"overview","content":"Meta Sync"},{"heading":"accessing-data-sources","content":"Click on Base name in the left sidebar to access Base homepage"},{"heading":"accessing-data-sources","content":"Select Data Sources tab"},{"heading":"accessing-data-sources","content":"Learn more about working with Data sources in the following sections:"},{"heading":"accessing-data-sources","content":"Connect to a Data source"},{"heading":"accessing-data-sources","content":"Sync changes externally made to data source"},{"heading":"accessing-data-sources","content":"Edit external database configuration parameters"},{"heading":"accessing-data-sources","content":"Remove Data source"},{"heading":"accessing-data-sources","content":"Hide Data source"},{"heading":"accessing-data-sources","content":"Relations within a data source"},{"heading":"accessing-data-sources","content":"View visibility"}],"headings":[{"id":"overview","content":"Overview"},{"id":"accessing-data-sources","content":"Accessing Data Sources"}]},"url":"/docs/product-docs/data-sources","title":"Data sources","description":"NocoDB Data-Source sync, access control & re-config"},{"_id":"/docs/product-docs/data-sources/sync-with-data-source","structured":{"contents":[{"content":"To sync changes done in the external data source with NocoDB, Open Data Sources tab in the Base Settings, select the data source you wish to sync metadata for, and follow the steps below:"},{"content":"Click on the Meta Sync tab"},{"content":"Click on the Reload button to refresh Sync state (Optional)"},{"content":"Any changes to the metadata identified will be listed in the Sync State column"},{"content":"Click on Sync Now button to sync the metadata changes"},{"content":"Once the sync is complete, you can see the updated state in the Sync State column"},{"content":"After the sync is complete, you can see the updated state in the Sync State column.Sync modal also marks Tables metadata is in Sync in the header."}],"headings":[]},"url":"/docs/product-docs/data-sources/sync-with-data-source","title":"Sync with Data source","description":"Learn how to sync changes done in external data source with NocoDB."},{"_id":"/docs/product-docs/data-sources/updating-secret","structured":{"contents":[{"heading":"updating-secrets","content":"To update a secret in NocoDB, you can use the nc-secret-mgr package. Follow the steps below to update a secret:"},{"heading":"using-the-command-line-interface-cli","content":"Install the nc-secret-mgr package if you haven't already. You can do this by running the following command in your terminal:"},{"heading":"using-the-command-line-interface-cli","content":"Once the package is installed, you can update a secret by running the following command:"},{"heading":"using-the-command-line-interface-cli","content":"OR"},{"heading":"using-the-command-line-interface-cli","content":"Replace <previous-secret> with the name of the secret you used previously, and <new-secret> with the new value of the secret."},{"heading":"using-the-command-line-interface-cli","content":"After running the command, the secret will be updated in NocoDB."},{"heading":"using-executables","content":"Alternatively, you can use the nc-secret-mgr executable to update secrets."},{"heading":"using-executables","content":"Download the nc-secret-mgr executable from the NocoDB Github."},{"heading":"using-executables","content":"Run the executable using the following command:"},{"heading":"using-executables","content":"Replace <previous-secret> with the name of the secret you used previously, and <new-secret> with the new value of the secret."},{"heading":"using-executables","content":"After running the command, the secret will be updated in NocoDB."},{"heading":"using-executables","content":"Note: All environment variables are supported, including NC_DB, NC_DB_JSON, NC_DB_JSON_FILE, DATABASE_URL, and DATABASE_URL_FILE. You can use any of these variables to specify your database connection. Alternatively, you can use the following equivalent parameters."},{"heading":"using-executables","content":"Environment Variable"},{"heading":"using-executables","content":"CLI Parameter"},{"heading":"using-executables","content":"NC_DB"},{"heading":"using-executables","content":"--nc-db"},{"heading":"using-executables","content":"NC_DB_JSON"},{"heading":"using-executables","content":"--nc-db-json"},{"heading":"using-executables","content":"NC_DB_JSON_FILE"},{"heading":"using-executables","content":"--nc-db-json-file"},{"heading":"using-executables","content":"DATABASE_URL"},{"heading":"using-executables","content":"--database-url"},{"heading":"using-executables","content":"DATABASE_URL_FILE"},{"heading":"using-executables","content":"--database-url-file"}],"headings":[{"id":"updating-secrets","content":"Updating Secrets"},{"id":"using-the-command-line-interface-cli","content":"Using the Command Line Interface (CLI)"},{"id":"using-executables","content":"Using Executables"}]},"url":"/docs/product-docs/data-sources/updating-secret","title":"Updating Secrets","description":"Learn how to update secrets in NocoDB using the nc-secret-mgr package."},{"_id":"/docs/product-docs/developer-resources/mcp","structured":{"contents":[{"content":"The Model Context Protocol (MCP) Server lets you connect NocoDB with LLMs that support MCP, such as Claude, Cursor, or Windsurf. With this integration, LLMs can interact directly with your NocoDB base to create, query, update, and manage records."},{"heading":"desktop-llm-clients","content":"Each MCP endpoint in NocoDB provides a secure URL that can be linked to an MCP-compatible client.\nOnce configured, the LLM can execute database operations in your workspace through natural language prompts."},{"heading":"desktop-llm-clients","content":"MCP server exposes standard CRUD operations. These can be triggered conversationally, without writing SQL or scripts."},{"heading":"desktop-llm-clients","content":"Action"},{"heading":"desktop-llm-clients","content":"Purpose"},{"heading":"desktop-llm-clients","content":"Sample Prompt"},{"heading":"desktop-llm-clients","content":"Create"},{"heading":"desktop-llm-clients","content":"Add new records"},{"heading":"desktop-llm-clients","content":"Create a task named ‘Review Documentation’"},{"heading":"desktop-llm-clients","content":"Read"},{"heading":"desktop-llm-clients","content":"Look up information"},{"heading":"desktop-llm-clients","content":"Show me all projects with deadlines this week"},{"heading":"desktop-llm-clients","content":"Update"},{"heading":"desktop-llm-clients","content":"Change existing data"},{"heading":"desktop-llm-clients","content":"Mark the status of Project X as completed & re-assign to John"},{"heading":"desktop-llm-clients","content":"Delete"},{"heading":"desktop-llm-clients","content":"Remove records"},{"heading":"desktop-llm-clients","content":"Remove all tasks assigned to John"},{"heading":"desktop-llm-clients","content":"type: note"},{"heading":"server-configuration-nocodb","content":"Click on the Overview button in the left sidebar."},{"heading":"server-configuration-nocodb","content":"Select the Settings tab."},{"heading":"server-configuration-nocodb","content":"Select the Model Context Protocol"},{"heading":"server-configuration-nocodb","content":"Click on the New MCP Endpoint to create a new MCP config JSON for your base."},{"heading":"server-configuration-nocodb","content":"Provide a name for the MCP endpoint"},{"heading":"server-configuration-nocodb","content":"Click Create to generate the MCP Config JSON."},{"heading":"server-configuration-nocodb","content":"Copy the generated JSON configuration. This will be used in your LLM client configuration."},{"heading":"claude","content":"Open Claude Desktop Preferences (⌘+,)."},{"heading":"claude","content":"Under Develop, click Edit Config."},{"heading":"claude","content":"Insert the JSON block copied here as claude_desktop_config.json."},{"heading":"claude","content":"Save the file and restart Claude Desktop."},{"heading":"cursor","content":"Go to Cursor Settings (⇧+⌘+J)."},{"heading":"cursor","content":"Open the MCP tab and select Add Custom MCP."},{"heading":"cursor","content":"Paste the JSON block copied here. Save."},{"heading":"cursor","content":"type: info"},{"heading":"windsurf","content":"Open Windsurf Settings (⌘+,)."},{"heading":"windsurf","content":"In the Cascade section > Plugins (MCP Server) > Click Manage Plugins"},{"heading":"windsurf","content":"Paste the JSON block copied here. Save."},{"heading":"json-example","content":"type: warning"},{"heading":"web-based-llm-clients-oauth","content":"Connect NocoDB to web-based LLM applications using OAuth, enabling seamless database access directly from the browser without requiring desktop client setup. This approach grants granular permission controls and eliminates the need for manual JSON configuration."},{"heading":"claude-web","content":"OAuth-based integration allows Claude web users to access NocoDB databases through the connectors interface."},{"heading":"setup-steps","content":"Click here to open Claude Web Settings in a new tab."},{"heading":"setup-steps","content":"Alternatively, navigate to Settings > Connectors from the Claude Web app."},{"heading":"setup-steps","content":"Click Add custom connector."},{"heading":"setup-steps","content":"In the \"Add custom connector\" dialog:"},{"heading":"setup-steps","content":"Provide a connector name of your choice"},{"heading":"setup-steps","content":"Enter the MCP endpoint URL: https://app.nocodb.com/mcp"},{"heading":"setup-steps","content":"Click Add"},{"heading":"setup-steps","content":"NocoDB Connector will now be listed in \"Disconnected\" state. Click Connect to initiate the OAuth authorization flow (Opens in a new tab)."},{"heading":"setup-steps","content":"Authorize Access"},{"heading":"setup-steps","content":"You will be asked to log in to your NocoDB account (if not already logged in)"},{"heading":"setup-steps","content":"Select the workspace and base you want to connect"},{"heading":"setup-steps","content":"Confirm the permissions Claude will have"},{"heading":"setup-steps","content":"Access the selected base"},{"heading":"setup-steps","content":"Read / create / update / delete records in the selected base"},{"heading":"setup-steps","content":"Act on your behalf within the selected resources"},{"heading":"setup-steps","content":"Click Authorize to grant access"},{"heading":"setup-steps","content":"With this, the NocoDB connector will move to \"Connected\" state in Claude Web. You can now interact with your NocoDB data through Claude web application."},{"heading":"setup-steps","content":"type: note"},{"heading":"configure-tool-permissions","content":"By default, all tools are set to \"Always ask permission\" to ensure you have control over each operation Claude performs. You can modify these settings as needed."},{"heading":"configure-tool-permissions","content":"Click here to open Claude Web Settings in a new tab. Click Configure on the NocoDB connector to manage tool permissions. Set each tool's permission level using the dropdown menu:"},{"heading":"configure-tool-permissions","content":"Always ask permission — Your approval is required every time Claude uses this tool"},{"heading":"configure-tool-permissions","content":"Allow unsupervised — Claude can use this tool without requesting approval"},{"heading":"configure-tool-permissions","content":"To retrieve Workspace & Base information that this connector has access to, use the \"Get Base Info\" tool."},{"heading":"using-nocodb-tools-in-claude-web","content":"Once configured, you can interact with your NocoDB data conversationally. For example:"},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Show me all projects with deadlines this week\""},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Create a task named 'Review Documentation'\""},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Mark the status of Project X as completed and reassign to John\""},{"heading":"using-nocodb-tools-in-claude-web","content":"\"Provide details of our top 3 sponsors\""},{"heading":"using-nocodb-tools-in-claude-web","content":"Claude will execute these requests using the enabled NocoDB tools, reading from and writing to your database based on the permissions you've granted."},{"heading":"using-nocodb-tools-in-claude-web","content":"type: warning"},{"heading":"chatgpt","content":"OAuth-based integration enables OpenAI web users (ChatGPT) to securely connect with NocoDB databases through the MCP connector, directly from their browser environment. This provides the same granular access control and eliminates the need for manual configuration or desktop client setup."},{"heading":"prerequisites","content":"Enable Developer Mode in ChatGPT settings to allow custom connector additions."},{"heading":"prerequisites","content":"Open ChatGPT Settings in a new tab."},{"heading":"prerequisites","content":"Alternatively, click your Profile Icon → Settings → Settings → Apps & Connectors)."},{"heading":"prerequisites","content":"Click Advanced Settings & enable Developer Mode."},{"heading":"setup-steps-1","content":"Open ChatGPT Settings in a new tab."},{"heading":"setup-steps-1","content":"Alternatively, click your Profile Icon → Settings → Settings → Apps & Connectors)."},{"heading":"setup-steps-1","content":"Click Create button in top right corner of the Connectors modal."},{"heading":"setup-steps-1","content":"In the \"New connector\" dialog:"},{"heading":"setup-steps-1","content":"Provide a connector name of your choice. Optionally, add a description / icon."},{"heading":"setup-steps-1","content":"Enter the MCP Server URL: https://app.nocodb.com/mcp"},{"heading":"setup-steps-1","content":"Check the box for I trust this application."},{"heading":"setup-steps-1","content":"Click Create"},{"heading":"setup-steps-1","content":"Authorize Access:"},{"heading":"setup-steps-1","content":"Log in to your NocoDB account if prompted"},{"heading":"setup-steps-1","content":"Select the workspace and base you want to connect"},{"heading":"setup-steps-1","content":"Review and confirm the permissions being requested:"},{"heading":"setup-steps-1","content":"Access to the selected base"},{"heading":"setup-steps-1","content":"Read / create / update / delete records"},{"heading":"setup-steps-1","content":"Act on your behalf within the selected resources"},{"heading":"setup-steps-1","content":"Click Authorize"},{"heading":"setup-steps-1","content":"Once authorization completes, you will see a confirmation message in ChatGPT Web indicating the NocoDB connector is now connected."},{"heading":"setup-steps-1","content":"type: note"},{"heading":"using-nocodb-tools-in-openai-web","content":"On the ChatGPT interface, start a new conversation and"},{"heading":"using-nocodb-tools-in-openai-web","content":"Click the + icon to open the \"Tools\" menu, enable Developer Mode if not already enabled."},{"heading":"using-nocodb-tools-in-openai-web","content":"Click More to find and select the NocoDB connector you created. Toggle to enable it."},{"heading":"using-nocodb-tools-in-openai-web","content":"Once configured, you can query or update your NocoDB data conversationally. For example:"},{"heading":"using-nocodb-tools-in-openai-web","content":"“List all open support tickets assigned to me”"},{"heading":"using-nocodb-tools-in-openai-web","content":"“Add a new contact named ‘Alice Chen’ to the CRM base”"},{"heading":"using-nocodb-tools-in-openai-web","content":"“Update the status of Order #2456 to ‘Shipped’”"},{"heading":"using-nocodb-tools-in-openai-web","content":"“Summarize total revenue by month from the Sales base”"},{"heading":"using-nocodb-tools-in-openai-web","content":"ChatGPT executes these actions using the connected NocoDB tools according to the permissions granted."},{"heading":"using-nocodb-tools-in-openai-web","content":"type: warning"}],"headings":[{"id":"desktop-llm-clients","content":"Desktop LLM Clients"},{"id":"server-configuration-nocodb","content":"Server Configuration (NocoDB)"},{"id":"client-configuration","content":"Client Configuration"},{"id":"claude","content":"Claude"},{"id":"cursor","content":"Cursor"},{"id":"windsurf","content":"Windsurf"},{"id":"json-example","content":"JSON Example"},{"id":"web-based-llm-clients-oauth","content":"Web based LLM Clients (OAuth)"},{"id":"claude-web","content":"Claude Web"},{"id":"setup-steps","content":"Setup Steps"},{"id":"configure-tool-permissions","content":"Configure Tool Permissions"},{"id":"using-nocodb-tools-in-claude-web","content":"Using NocoDB Tools in Claude Web"},{"id":"chatgpt","content":"ChatGPT"},{"id":"prerequisites","content":"Prerequisites"},{"id":"setup-steps-1","content":"Setup Steps"},{"id":"using-nocodb-tools-in-openai-web","content":"Using NocoDB Tools in OpenAI Web"}]},"url":"/docs/product-docs/developer-resources/mcp","title":"MCP Server","description":"Connect NocoDB to Large Language Models (LLMs) via the Model Context Protocol (MCP)."},{"_id":"/docs/product-docs/engineering/architecture","structured":{"contents":[{"content":"By default, if NC_DB is not specified, then SQLite will be used to store your metadata. We suggest users to separate the metadata and user data in different databases."},{"content":"Project Type"},{"content":"Metadata stored in"},{"content":"Data stored in"},{"content":"Create new base"},{"content":"NC_DB"},{"content":"NC_DB"},{"content":"Create new base with External Database"},{"content":"NC_DB"},{"content":"External Database"},{"content":"Create new base from Excel"},{"content":"NC_DB"},{"content":"NC_DB"}],"headings":[]},"url":"/docs/product-docs/engineering/architecture","title":"Architecture overview","description":"Simple overview of NocoDB architecture"},{"_id":"/docs/product-docs/engineering/builds-and-releases","structured":{"contents":[{"heading":"builds-of-nocodb","content":"There are 3 kinds of docker builds in NocoDB"},{"heading":"builds-of-nocodb","content":"Release builds nocodb/nocodb : built during NocoDB release."},{"heading":"builds-of-nocodb","content":"Daily builds nocodb/nocodb-daily : built every 6 hours from Develop branch."},{"heading":"builds-of-nocodb","content":"Timely builds nocodb/nocodb-timely: built for every PR and manually triggered PRs."},{"heading":"builds-of-nocodb","content":"Below is an overview of how to make these builds and what happens behind the scenes."},{"heading":"how-to-make-a-release-build--","content":"Click NocoDB release action"},{"heading":"how-to-make-a-release-build--","content":"You should see the below screen"},{"heading":"how-to-make-a-release-build--","content":"Change Use workflow from to Branch: master. If you choose the wrong branch, the workflow will be ended."},{"heading":"how-to-make-a-release-build--","content":"Then there would be two cases - you can either leave target tag and pervious tag blank or manually input some values"},{"heading":"how-to-make-a-release-build--","content":"Target Tag means the target deployment version, while Previous Tag means the latest version as of now. Previous Tag is used for Release Note only - showing the file / commit differences between two tags."},{"heading":"tagging","content":"The naming convention would be following given the actual release tag is 0.100.0"},{"heading":"tagging","content":"0.100.0-beta.0 (first version of pre-release)"},{"heading":"tagging","content":"0.100.0-beta.1 (include bug fix changes on top of the previous version)"},{"heading":"tagging","content":"0.100.0-beta.2(include bug fix changes on top of the previous version)"},{"heading":"tagging","content":"and so on ..."},{"heading":"tagging","content":"0.100.0 (actual release)"},{"heading":"tagging","content":"0.100.1 (minor bug fix release)"},{"heading":"tagging","content":"0.100.2 (minor bug fix release)"},{"heading":"case-1-leaving-inputs-blank","content":"If Previous Tag is blank, then the value will be fetched from latest"},{"heading":"case-1-leaving-inputs-blank","content":"If Target Tag is blank, then the value will be Previous Tag plus one. Example: 0.90.11 (Previous Tag) + 0.0.1 = 0.90.12 (Target Tag)"},{"heading":"case-2-manually-input","content":"Why? Sometimes we may mess up in NPM deployment. As NPM doesn't allow us to redeploy to the same tag again, in this case we cannot just use the previous tag + 1. Therefore, we need to use previous tag + 2 instead and we manually configure it."},{"heading":"case-2-manually-input","content":"After that, click Run workflow to start"},{"heading":"case-2-manually-input","content":"You can see Summary for the overall job status."},{"heading":"case-2-manually-input","content":"Once release-draft-note and release-executables is finished, then go to releases, edit the draft note and save as draft for time being."},{"heading":"case-2-manually-input","content":"Example: Adding header, update content if necessary, and click Auto-generate release notes to include more info."},{"heading":"case-2-manually-input","content":"Once release-docker is finished, then test it locally first. You'll be expected to see Upgrade Available notification in UI as we haven't published the release note. (the version is retrieved from there)"},{"heading":"case-2-manually-input","content":"Once everything is finished, then publish the release note and the deployment is considered as DONE."},{"heading":"validate-branch","content":"To check if github.ref is master. Otherwise, other branches will be not accepted."},{"heading":"process-input","content":"To enrich target tag or previous tag if necessary."},{"heading":"pr-to-master","content":"Automate a PR from develop to master branch so that we know the actual differences between the previous tag and the current tag. We choose master branch for a deployment base."},{"heading":"release-npm","content":"Build frontend and backend and release them to NPM. The changes during built such as version bumping will be committed and pushed to a temporary branch and an automated PR will be created and merged to master branch."},{"heading":"release-npm","content":"Note that once you publish with a certain tag, you cannot publish with the same tag again."},{"heading":"release-draft-note","content":"Generate a draft release note. Some actions need to be done after this step."},{"heading":"release-docker","content":"Build docker image and publish it to Docker Hub. It may take around 15 - 30 mins."},{"heading":"close-issues","content":"Open issues marked with label Status: Fixed and Status: Resolved will be closed by bot automatically with comment mentioning the fix is included in which version."},{"heading":"close-issues","content":"Example:"},{"heading":"publish-docs","content":"Publish Documentations"},{"heading":"update-sdk-path","content":"nocodb-sdk is used in frontend and backend. However, in develop branch, the value would be file:../nocodb-sdk for development purpose (so that the changes done in nocodb-sdk in develop will be included in frontend and backend). During the deployment, the value will be changed to the target tag. This job is to update them back."},{"heading":"sync-to-develop","content":"Once the deployment is finished, there would be some new changes being pushed to master branch. This job is to sync the changes back to develop so that both branch won't have any difference."},{"heading":"what-are-daily-builds-","content":"NocoDB creates every 6 hours from develop branches and publishes as nocodb/nocodb-daily"},{"heading":"what-are-daily-builds-","content":"This is so that we can easily try what is in the develop branch easily."},{"heading":"docker-images","content":"The docker images will be built and pushed to Docker Hub (See nocodb/nocodb-daily for the full list)."},{"heading":"what-are-timely-builds-","content":"NocoDB has github actions which creates docker and binaries for each PR! And these can be found as a comment on the last commit of the PR."},{"heading":"what-are-timely-builds-","content":"Example shown below"},{"heading":"what-are-timely-builds-","content":"Go to a PR and click on the comment."},{"heading":"what-are-timely-builds-","content":"Click on the link to copy the docker image and run it locally."},{"heading":"what-are-timely-builds-","content":"This is to"},{"heading":"what-are-timely-builds-","content":"reduce pull request cycle time"},{"heading":"what-are-timely-builds-","content":"allow issue reporters / reviewers to verify the fix without setting up their local machines"},{"heading":"docker-images-1","content":"When a non-draft Pull Request is created, reopened or synchronized, a timely build for Docker would be triggered for the changes only included in the following paths."},{"heading":"docker-images-1","content":"packages/nocodb-sdk/**"},{"heading":"docker-images-1","content":"packages/nc-gui/**"},{"heading":"docker-images-1","content":"packages/nocodb/**"},{"heading":"docker-images-1","content":"The docker images will be built and pushed to Docker Hub (See nocodb/nocodb-timely for the full list). Once the image is ready, GitHub bot will add a comment with the command in the pull request. The tag would be <NOCODB_CURRENT_VERSION>-pr-<PR_NUMBER>-<YYYYMMDD>-<HHMM>."},{"heading":"executables-or-binaries","content":"Similarly, we provide a timely build for executables for non-docker users. The source code will be built, packaged as binary files, and pushed to GitHub (See nocodb/nocodb-timely for the full list)."},{"heading":"executables-or-binaries","content":"Currently, we only support the following targets:"},{"heading":"executables-or-binaries","content":"node16-linux-arm64"},{"heading":"executables-or-binaries","content":"node16-macos-arm64"},{"heading":"executables-or-binaries","content":"node16-win-arm64"},{"heading":"executables-or-binaries","content":"node16-linux-x64"},{"heading":"executables-or-binaries","content":"node16-macos-x64"},{"heading":"executables-or-binaries","content":"node16-win-x64"},{"heading":"executables-or-binaries","content":"Once the executables are ready, GitHub bot will add a comment with the commands in the pull request."},{"heading":"executables-or-binaries","content":"NocoDB creates Docker and Binaries for each PR."},{"heading":"executables-or-binaries","content":"This is to"},{"heading":"executables-or-binaries","content":"reduce pull request cycle time"},{"heading":"executables-or-binaries","content":"allow issue reporters / reviewers to verify the fix without setting up their local machines"}],"headings":[{"id":"builds-of-nocodb","content":"Builds of NocoDB"},{"id":"release-builds","content":"Release builds"},{"id":"how-to-make-a-release-build--","content":"How to make a release build  ?"},{"id":"tagging","content":"Tagging"},{"id":"case-1-leaving-inputs-blank","content":"Case 1: Leaving inputs blank"},{"id":"case-2-manually-input","content":"Case 2: Manually Input"},{"id":"how-does-release-action-work-","content":"How does release action work ?"},{"id":"validate-branch","content":"validate-branch"},{"id":"process-input","content":"process-input"},{"id":"pr-to-master","content":"pr-to-master"},{"id":"release-npm","content":"release-npm"},{"id":"release-draft-note","content":"release-draft-note"},{"id":"release-docker","content":"release-docker"},{"id":"close-issues","content":"close-issues"},{"id":"publish-docs","content":"publish-docs"},{"id":"update-sdk-path","content":"update-sdk-path"},{"id":"sync-to-develop","content":"sync-to-develop"},{"id":"daily-builds","content":"Daily builds"},{"id":"what-are-daily-builds-","content":"What are daily builds ?"},{"id":"docker-images","content":"Docker images"},{"id":"timely-builds","content":"Timely builds"},{"id":"what-are-timely-builds-","content":"What are timely builds ?"},{"id":"docker-images-1","content":"Docker images"},{"id":"executables-or-binaries","content":"Executables or Binaries"}]},"url":"/docs/product-docs/engineering/builds-and-releases","title":"Releases & builds","description":"NocoDB creates Docker and Binaries for each PR"},{"_id":"/docs/product-docs/engineering/development-setup","structured":{"contents":[{"heading":"start-backend","content":"Any changes made to frontend and backend will be automatically reflected in the browser."},{"heading":"enabling-ci-cd-for-draft-pr","content":"CI-CD will be triggered on moving a PR from draft state to Ready for review state & on pushing changes to Develop. To verify CI-CD before requesting for review, add label trigger-CI on Draft PR."},{"heading":"accessing-ci-cd-failure-screenshots","content":"For Playwright tests, screenshots are captured on the tests. These will provide vital clues for debugging possible issues observed in CI-CD. To access screenshots, Open link associated with CI-CD run & click on Artifacts"}],"headings":[{"id":"clone-the-repo","content":"Clone the repo"},{"id":"install-dependencies","content":"Install dependencies"},{"id":"start-frontend","content":"Start Frontend"},{"id":"start-backend","content":"Start Backend"},{"id":"enabling-ci-cd-for-draft-pr","content":"Enabling CI-CD for Draft PR"},{"id":"accessing-ci-cd-failure-screenshots","content":"Accessing CI-CD Failure Screenshots"}]},"url":"/docs/product-docs/engineering/development-setup","title":"Development Setup","description":"How to set-up your development environment"},{"_id":"/docs/product-docs/engineering/playwright","structured":{"contents":[{"heading":"how-to-run-tests","content":"All the tests reside in tests/playwright folder."},{"heading":"how-to-run-tests","content":"Make sure to install the dependencies (in the playwright folder):"},{"heading":"run-test-server","content":"Start the backend test server (in packages/nocodb folder):"},{"heading":"run-test-server","content":"Start the frontend test server (in packages/nc-gui folder):"},{"heading":"running-all-tests","content":"For selecting db type, rename .env.example to .env and set E2E_DEV_DB_TYPE to  sqlite(default), mysql or pg."},{"heading":"running-all-tests","content":"headless mode(without opening browser):"},{"heading":"running-all-tests","content":"with browser:"},{"heading":"running-all-tests","content":"For setting up mysql(sakila):"},{"heading":"running-all-tests","content":"For setting up postgres(sakila):"},{"heading":"running-individual-tests","content":"Add .only to the test you want to run:"},{"heading":"independent-tests","content":"All tests are independent of each other."},{"heading":"independent-tests","content":"Each test starts with a fresh project with a fresh sakila database(option to not use sakila db is also there)."},{"heading":"independent-tests","content":"Each test creates a new user(email as user@nocodb.com) and logs in with that user to the dashboard."},{"heading":"independent-tests","content":"Caveats:"},{"heading":"independent-tests","content":"Some stuffs are shared i.e, users, plugins etc. So be catious while writing tests touching that. A fix for this is in the works."},{"heading":"independent-tests","content":"In test, we prefix email and project with the test id, which will be deleted after the test is done."},{"heading":"what-to-test","content":"UI verification. This includes verifying the state of the UI element, i.e if the element is visible, if the element has a particular text etc."},{"heading":"what-to-test","content":"Test should verify all user flow. A test has a default timeout of 60 seconds. If a test is taking more than 60 seconds, it is a sign that the test should be broken down into smaller tests."},{"heading":"what-to-test","content":"Test should also verify all the side effects the feature(i.e. On adding a new field type, should verify field deletion as well) will have, and also error cases."},{"heading":"what-to-test","content":"Test name should be descriptive. It should be easy to understand what the test is doing by just reading the test name."},{"heading":"playwright","content":"Playwright is a nodejs library for automating chromium, firefox and webkit."},{"heading":"playwright","content":"For each test, a new browser context is created. This means that each test runs in a new incognito window."},{"heading":"playwright","content":"For assertion always use expect from @playwright/test library. This library provides a lot of useful assertions, which also has retry logic built in."},{"heading":"page-objects","content":"Page objects are used to abstract over the components/page. This makes the tests more readable and maintainable."},{"heading":"page-objects","content":"All page objects are in tests/playwright/pages folder."},{"heading":"page-objects","content":"All the test related code should be in page objects."},{"heading":"page-objects","content":"Methods should be as thin as possible and its better to have multiple methods than one big method, which improves reusability."},{"heading":"page-objects","content":"The methods of a page object can be classified into 2 categories:"},{"heading":"page-objects","content":"Actions: Performs an UI actions like click, type, select etc. Is also responsible for waiting for the element to be ready and the action to be performed. This included waiting for API calls to complete."},{"heading":"page-objects","content":"Assertions: Asserts the state of the UI element, i.e if the element is visible, if the element has a particular text etc. Use expect from @playwright/test and if not use expect.poll to wait for the assertion to pass."},{"heading":"writing-a-test","content":"Let's write a test for testing filter functionality."},{"heading":"writing-a-test","content":"For simplicity, we will have DashboardPage implemented, which will have all the methods related to dashboard page and also its child components like Grid, etc."},{"heading":"create-a-test-suite","content":"Create a new file filter.spec.ts in tests/playwright/tests folder and use setup method to create a new project and user."},{"heading":"create-a-page-object","content":"Since filter is UI wise scoped to a Toolbar , we will add filter page object to ToolbarPage page object."},{"heading":"create-a-page-object","content":"We will create ToolbarFilterPage page object, which will have all the methods related to filter."},{"heading":"create-a-page-object","content":"Here BasePage is an abstract class, which used to enforce structure for all page objects. Thus all page object should inherit BasePage."},{"heading":"create-a-page-object","content":"Helper methods like waitForResponse and getClipboardText (this can be access on any page object, with this.waitForResponse)"},{"heading":"create-a-page-object","content":"Provides structure for page objects, enforces all Page objects to have rootPage property, which is the page object created in the test setup."},{"heading":"create-a-page-object","content":"Enforces all pages to have a get method which will return the locator of the main container of that page, hence we can have focused dom selection, i.e."},{"heading":"writing-an-action-method","content":"This a method which will reset/clear all the filters. Since this is an action method, it will also wait for the delete filter API to return. Ignoring this API call will cause flakiness in the test, down the line."},{"heading":"writing-an-assertionverification-method","content":"Here we use expect from @playwright/test library, which has retry logic built in."},{"heading":"tips-to-avoid-flakiness","content":"If an UI action, causes an API call or the UI state change, then wait for that API call to complete or the UI state to change."},{"heading":"tips-to-avoid-flakiness","content":"What to wait out can be situation specific, but in general, is best to wait for the final state to be reached, i.e. in the case of creating filter, while it seems like waiting for the filter API to complete is enough, but after its return the table records are reloaded and the UI state changes, so its better to wait for the table records to be reloaded."},{"heading":"accessing-playwright-report-in-the-ci","content":"Open Summary tab in the CI workflow in github actions."},{"heading":"accessing-playwright-report-in-the-ci","content":"Scroll down to Artifacts section."},{"heading":"accessing-playwright-report-in-the-ci","content":"Access reports which suffixed with the db type and shard number(corresponding to the CI workerflow name). i.e playwright-report-mysql-2 is for playwright-mysql-2 workflow."},{"heading":"accessing-playwright-report-in-the-ci","content":"Download it and run pnpm install -D @playwright/test && npx playwright show-report ./ inside the downloaded folder."}],"headings":[{"id":"how-to-run-tests","content":"How to run tests"},{"id":"run-test-server","content":"Run Test Server"},{"id":"running-all-tests","content":"Running all tests"},{"id":"running-individual-tests","content":"Running individual tests"},{"id":"concepts","content":"Concepts"},{"id":"independent-tests","content":"Independent tests"},{"id":"what-to-test","content":"What to test"},{"id":"playwright","content":"Playwright"},{"id":"page-objects","content":"Page Objects"},{"id":"writing-a-test","content":"Writing a test"},{"id":"create-a-test-suite","content":"Create a test suite"},{"id":"create-a-page-object","content":"Create a page object"},{"id":"writing-an-action-method","content":"Writing an action method"},{"id":"writing-an-assertionverification-method","content":"Writing an assertion/verification method"},{"id":"tips-to-avoid-flakiness","content":"Tips to avoid flakiness"},{"id":"accessing-playwright-report-in-the-ci","content":"Accessing playwright report in the CI"}]},"url":"/docs/product-docs/engineering/playwright","title":"Playwright E2E testing","description":"Overview to playwright based e2e tests"},{"_id":"/docs/product-docs/engineering/repository-structure","structured":{"contents":[{"content":"We use Lerna to manage multi-packages. We have the following packages."},{"content":"packages/nocodb-sdk: API client sdk of nocodb."},{"content":"packages/nc-gui: NocoDB Frontend."},{"content":"packages/nc-lib-gui: The build version of nc-gui which will be used in packages/nocodb."},{"content":"packages/nocodb: NocoDB Backend, hosted in NPM."}],"headings":[]},"url":"/docs/product-docs/engineering/repository-structure","title":"Repository structure","description":"Repository Structure"},{"_id":"/docs/product-docs/engineering/translation","structured":{"contents":[{"content":"NocoDB supports 30+ foreign languages & community contributions are now simplified via Crowdin."},{"heading":"using-github","content":"For English, make changes directly to en.json & commit to develop"},{"heading":"using-github","content":"For any other language, use crowdin option."},{"heading":"using-crowdin","content":"Setup Crowdin account"},{"heading":"using-crowdin","content":"Join NocoDB project"},{"heading":"using-crowdin","content":"Click the language that you wish to contribute"},{"heading":"using-crowdin","content":"Click the Translate button; this opens up Crowdin Online Editor"},{"heading":"using-crowdin","content":"Select string in English on the left-hand menu bar [1]"},{"heading":"using-crowdin","content":"Propose changes [2]"},{"heading":"using-crowdin","content":"Save [3]\nNote: Crowdin provides translation recommendation's as in [4]. Click directly if it's apt"},{"heading":"using-crowdin","content":"A GitHub Pull Request will be automatically triggered (periodicity- 6 hours). We will follow up on remaining integration work items."},{"heading":"reference","content":"Refer following articles to get additional details about Crowdin Portal usage"},{"heading":"reference","content":"Translator Introduction"},{"heading":"reference","content":"Volunteer Translation Introduction"},{"heading":"reference","content":"Online Editor"},{"heading":"github-changes","content":"Update enumeration in enums.ts [packages/nc-gui/lib/enums.ts]"},{"heading":"github-changes","content":"Map JSON path in a.i18n.ts [packages/nc-gui/plugins/a.i18n.ts]"},{"heading":"crowdin-changes-admin-only","content":"Open NocoDB project"},{"heading":"crowdin-changes-admin-only","content":"Click on Language on the home tab"},{"heading":"crowdin-changes-admin-only","content":"Select target language, Update"},{"heading":"crowdin-changes-admin-only","content":"Update array in tests/playwright/tests/language.spec.ts"},{"heading":"string-categories","content":"General: simple & common tokens (save, cancel, submit, open, close, home, and such)"},{"heading":"string-categories","content":"Objects: objects from NocoDB POV (project, table, field, view, page, and such)"},{"heading":"string-categories","content":"Title: screen headers (compact) (menu headers, modal headers)"},{"heading":"string-categories","content":"Lables: text box/ radio/ field headers (few words) (Labels over textbox, radio buttons, and such)"},{"heading":"string-categories","content":"Activity/ actions: work items (few words) (Create Project, Delete Table, Add Record, and such)"},{"heading":"string-categories","content":"Tooltip: additional information associated with work items (usually lengthy) (Additional information provided for activity)"},{"heading":"string-categories","content":"Placeholder: placeholders associated with various textboxes (Text placeholders)"},{"heading":"string-categories","content":"Msg"},{"heading":"string-categories","content":"Info: general/success category for everything"},{"heading":"string-categories","content":"Error: warnings & errors"},{"heading":"string-categories","content":"Toast: pop-up toast messages"},{"heading":"string-categories","content":"Note: string name should be in camelCase. Use above list as priority order in case of ambiguity."}],"headings":[{"id":"how-to-add--edit-translations-","content":"How to add / edit translations ?"},{"id":"using-github","content":"Using GitHub"},{"id":"using-crowdin","content":"Using Crowdin"},{"id":"reference","content":"Reference"},{"id":"how-to-add-a-new-language-","content":"How to add a new language ?"},{"id":"github-changes","content":"GitHub changes"},{"id":"crowdin-changes-admin-only","content":"Crowdin changes [admin only]"},{"id":"string-categories","content":"String Categories"}]},"url":"/docs/product-docs/engineering/translation","title":"i18n translation","description":"Contribute to NocoDB's i18n translation"},{"_id":"/docs/product-docs/engineering/unit-testing","structured":{"contents":[{"heading":"unit-tests","content":"All individual unit tests are independent of each other. We don't use any shared state between tests."},{"heading":"unit-tests","content":"Test environment includes sakila sample database and any change to it by a test is reverted before running other tests."},{"heading":"unit-tests","content":"While running unit tests, it tries to connect to mysql server running on localhost:3306 with username root and password password (which can be configured) and if not found, it will use sqlite as a fallback, hence no requirement of any sql server to run tests."},{"heading":"pre-requisites","content":"MySQL is preferred - however tests can fallback on SQLite too"},{"heading":"setup","content":"Configure the following variables"},{"heading":"setup","content":"DB_HOST : host\nDB_PORT : port\nDB_USER : username\nDB_PASSWORD : password"},{"heading":"folder-structure","content":"The root folder for unit tests is packages/nocodb/tests/unit"},{"heading":"folder-structure","content":"rest folder contains all the test suites for rest apis."},{"heading":"folder-structure","content":"model folder contains all the test suites for models."},{"heading":"folder-structure","content":"factory folder contains all the helper functions to create test data."},{"heading":"folder-structure","content":"init folder contains helper functions to configure test environment."},{"heading":"folder-structure","content":"index.test.ts is the root test suite file which imports all the test suites."},{"heading":"folder-structure","content":"TestDbMngr.ts is a helper class to manage test databases (i.e. creating, dropping, etc.)."},{"heading":"factory-pattern","content":"Use factories for create/update/delete data. No data should be directly create/updated/deleted in the test."},{"heading":"factory-pattern","content":"While writing a factory make sure that it can be used with as less parameters as possible and use default values for other parameters."},{"heading":"factory-pattern","content":"Use named parameters for factories."},{"heading":"factory-pattern","content":"Use one file per factory."},{"heading":"walk-through-of-writing-a-unit-test","content":"We will create an Table test suite as an example."},{"heading":"configure-test","content":"We will configure beforeEach which is called before each test is executed. We will use init function from nocodb/packages/nocodb/tests/unit/init/index.ts, which is a helper function which configures the test environment(i.e resetting state, etc.)."},{"heading":"configure-test","content":"init does the following things -"},{"heading":"configure-test","content":"It initializes a Noco instance(reused in all tests)."},{"heading":"configure-test","content":"Restores meta and sakila database to its initial state."},{"heading":"configure-test","content":"Creates the root user."},{"heading":"configure-test","content":"Returns context which has auth token for the created user, node server instance(app), and dbConfig."},{"heading":"configure-test","content":"We will use createProject and createProject factories to create a project and a table."},{"heading":"test-case","content":"We will use it function to create a test case. We will use supertest to make a request to the server. We use expect(chai) to assert the response."},{"heading":"test-case","content":"type: info"},{"heading":"test-case","content":"We can also run individual test by using .only in describe or it function and the running the test command."},{"heading":"integrating-the-new-test-suite","content":"We create a new file table.test.ts in packages/nocodb/tests/unit/rest/tests directory."},{"heading":"integrating-the-new-test-suite","content":"We can then import the Table test suite to Rest test suite in packages/nocodb/tests/unit/rest/index.test.ts file(Rest test suite is imported in the root test suite file which is packages/nocodb/tests/unit/index.test.ts)."}],"headings":[{"id":"unit-tests","content":"Unit Tests"},{"id":"pre-requisites","content":"Pre-requisites"},{"id":"setup","content":"Setup"},{"id":"run-tests","content":"Run Tests"},{"id":"folder-structure","content":"Folder Structure"},{"id":"factory-pattern","content":"Factory Pattern"},{"id":"walk-through-of-writing-a-unit-test","content":"Walk through of writing a Unit Test"},{"id":"configure-test","content":"Configure test"},{"id":"test-case","content":"Test case"},{"id":"integrating-the-new-test-suite","content":"Integrating the New Test Suite"},{"id":"seeding-sample-db-sakila","content":"Seeding Sample DB (Sakila)"}]},"url":"/docs/product-docs/engineering/unit-testing","title":"Writing unit tests","description":"Overview to Unit Testing"},{"_id":"/docs/product-docs/engineering/writing-docs","structured":{"contents":[{"content":"This article discusses some of the protocol and conventions to be followed while writing docs."},{"heading":"folder-structure","content":"Docs follow object-oriented approach. Each folder represents an object and each file represents procedures associated with that object."},{"heading":"folder-structure","content":"Each folder contains an meta.json file which contains the metadata for that object."},{"heading":"file-structure","content":"Add following metadata to the top of each file."},{"heading":"file-structure","content":"title is the title of the article that appears on the sidebar and on the top of the article."},{"heading":"file-structure","content":"description is the description of the article that appears in search results."},{"heading":"file-structure","content":"tags are the tags associated with the article. Tags are used to group articles together. For example, all articles with the tag Workspaces will be grouped together."},{"heading":"file-structure","content":"keywords are the keywords associated with the article. Keywords are used to improve search results. For example, if the user searches for Create workspace, then the article with the keyword Create workspace will be displayed in the search results."},{"heading":"nomenclature","content":"Folder names & file name are"},{"heading":"nomenclature","content":"in kebab-case."},{"heading":"nomenclature","content":"For example, account-settings."},{"heading":"nomenclature","content":"Only first letter of the folder/file name is capitalized. Second letter onwards, first letter is capitalized only if it is a proper noun."},{"heading":"tags","content":"First letter of each tag is capitalized."},{"heading":"tags","content":"Tags usually are Objects or Actions. Add a tag only if we are sure that the tag will be used in multiple places. Example: 'Create' - we can have Create project, Create user, Create API token etc."},{"heading":"active-tags","content":"Tags that are currently being used in the docs are listed below. See if you can reuse any of these tags before adding a new tag."},{"heading":"description","content":"Description should be crisp and to the point. Preferably one line."},{"heading":"description","content":"Refer to the description associated with the tag to get an idea of how the description should be."},{"heading":"description","content":"Descriptions appear in the search results (when searched by tags). So, it should be descriptive enough to give the user an idea of what the article is about."},{"heading":"images","content":"Annotated images should be placed in img/v2 folder."},{"heading":"images","content":"For every annotated image, there should be a corresponding unannotated image in the img/v2-unannotated folder."},{"heading":"images","content":"Images are kept in the same folder structure as the docs."},{"heading":"images","content":"Use Skitch for annotations."},{"heading":"before-you-commit","content":"Use pnpm run build to build the docs."},{"heading":"before-you-commit","content":"Ensure that the build is successful & there are no errors/warnings related to missing links, images, etc."}],"headings":[{"id":"folder-structure","content":"Folder Structure"},{"id":"file-structure","content":"File Structure"},{"id":"nomenclature","content":"Nomenclature"},{"id":"tags","content":"Tags"},{"id":"active-tags","content":"Active Tags"},{"id":"description","content":"Description"},{"id":"images","content":"Images"},{"id":"before-you-commit","content":"Before you commit"}]},"url":"/docs/product-docs/engineering/writing-docs","title":"Writing docs","description":"Overview to writing docs"},{"_id":"/docs/product-docs/extensions/bulk-update","structured":{"contents":[{"heading":"overview","content":"The Bulk Update extension empowers users to modify multiple records across a selected table view simultaneously. Instead of editing each row one by one, you can define field-level updates and apply them to all visible records with a single action—saving time and reducing manual errors."},{"heading":"overview","content":"type: warning"},{"heading":"updating-records","content":"Follow these steps to update multiple records in a table:"},{"heading":"updating-records","content":"Select the table and associated view you wish to update."},{"heading":"updating-records","content":"Click the New Action button."},{"heading":"updating-records","content":"Choose the Field you want to update."},{"heading":"updating-records","content":"Select an Update Type:"},{"heading":"updating-records","content":"Set Value: Set a specific value for the field."},{"heading":"updating-records","content":"Clear Value: Clear the field value."},{"heading":"updating-records","content":"If you selected Set Value, provide the Value to be applied."},{"heading":"updating-records","content":"Click the Update Records button to apply the changes."},{"heading":"updating-records","content":"A confirmation dialog will display the number of fields and records to be updated. Review the details and click Confirm Update to proceed."},{"heading":"updating-records","content":"You can add multiple actions to update different fields in the table."},{"heading":"updating-records","content":"Bulk updates affect all records within the current view, including those not visible on the screen. Since views are just filtered representations of the same underlying data, any record that appears in multiple views will also reflect the update. These updates apply only to records in the selected view and do not impact records outside of it or in unrelated views."},{"heading":"managing-actions","content":"The Update work items added are listed in the Actions section. You can:"},{"heading":"managing-actions","content":"Edit an action by clicking on the action item in the list & making the necessary changes."},{"heading":"managing-actions","content":"Delete an action by clicking on the delete icon next to the action item."},{"heading":"managing-actions","content":"Disable an action by toggling the switch next to the action item. Disabling an action will prevent it from being applied to the records."},{"heading":"managing-actions","content":"For any configured bulk update extension, you can reuse the Update Records button to repeat the batch update process. This is particularly useful when you need to apply the same changes across multiple records in the future."}],"headings":[{"id":"overview","content":"Overview"},{"id":"updating-records","content":"Updating Records"},{"id":"managing-actions","content":"Managing Actions"}]},"url":"/docs/product-docs/extensions/bulk-update","title":"Bulk Update","description":"Update multiple records in a table at once"},{"_id":"/docs/product-docs/extensions/data-exporter","structured":{"contents":[{"heading":"overview","content":"The Data Exporter extension is designed to simplify the process of exporting data from your NocoDB tables. With just a few clicks, you can effortlessly download CSV files for any specific table and view within your base. The download process is handled asynchronously in the background, ensuring that your application usage remains uninterrupted. Once your file is ready, you’ll receive a notification, allowing you to download the CSV into your local machine at your convenience."},{"heading":"exporting-data","content":"Follow these steps to export data from your NocoDB tables:"},{"heading":"exporting-data","content":"Select the table and associated view you wish to export."},{"heading":"exporting-data","content":"Configure optional settings for Separator and Encoding:"},{"heading":"exporting-data","content":"Default separator: Comma ,"},{"heading":"exporting-data","content":"Other options: Semicolon ;, Pipe | and Tab"},{"heading":"exporting-data","content":"Click the Export button."},{"heading":"exporting-data","content":"Once the export is complete, the file will be listed in the Recent Exports section."},{"heading":"exporting-data","content":"Click the Download button to save the CSV file to your local device."},{"heading":"exporting-data","content":"type: note"},{"heading":"exporting-data","content":"Separator and Encoding configurations are only accessible from the expanded extension panel."},{"heading":"managing-exports","content":"The files exported have a limited lifespan and are automatically removed after 6 hours. The files listed under the Recent Exports section are only visible to you and are not shared with other users. You can manage your exports by downloading or removing them as needed."},{"heading":"downloading-exports","content":"In the Recent Exports section, locate the desired file."},{"heading":"downloading-exports","content":"Click the Download icon next to the file to save it to your device."},{"heading":"removing-exports","content":"Locate it in the Recent Exports section."},{"heading":"removing-exports","content":"Click the x icon to remove it from the list."}],"headings":[{"id":"overview","content":"Overview"},{"id":"exporting-data","content":"Exporting Data"},{"id":"managing-exports","content":"Managing Exports"},{"id":"downloading-exports","content":"Downloading Exports"},{"id":"removing-exports","content":"Removing Exports"}]},"url":"/docs/product-docs/extensions/data-exporter","title":"Data Exporter","description":"Export data from NocoDB in various formats"},{"_id":"/docs/product-docs/extensions/dedupe","structured":{"contents":[{"heading":"overview","content":"The Dedupe extension helps you identify and merge duplicate records in a table using one or more fields for grouping. Instead of manually scanning and comparing records, Dedupe detects groups of records with matching values across the selected fields and provides a guided interface to review, select, and merge them into a single primary record."},{"heading":"overview","content":"This extension is especially useful for maintaining clean datasets such as contacts, leads, or inventories where duplicate entries are common."},{"heading":"overview","content":"type: warning"},{"heading":"finding-duplicate-records","content":"Follow these steps to detect duplicate records:"},{"heading":"finding-duplicate-records","content":"Select the Table you want to scan for duplicates. Optionally, you can also select a specific View within that table to limit the scope of the records being analyzed."},{"heading":"finding-duplicate-records","content":"Select one or more Field(s) to group records by. You can choose multiple fields from the dropdown to define more granular deduplication criteria."},{"heading":"finding-duplicate-records","content":"Dedupe identifies groups where two or more records share the same values across all the selected fields."},{"heading":"finding-duplicate-records","content":"Each group is presented for review one at a time."},{"heading":"resolving-duplicate-records","content":"For each duplicate group, review and merge records as follows:"},{"heading":"resolving-duplicate-records","content":"Select one primary record to keep."},{"heading":"resolving-duplicate-records","content":"If a record shown in the group is not actually a duplicate, exclude it. Excluded records are not merged and not deleted."},{"heading":"resolving-duplicate-records","content":"Optionally, for each field - click a value from any record to copy it into the primary record."},{"heading":"resolving-duplicate-records","content":"Once satisfied, proceed to merge the group."},{"heading":"resolving-duplicate-records","content":"When the merge is completed:"},{"heading":"resolving-duplicate-records","content":"The primary record is retained with its original primary key."},{"heading":"resolving-duplicate-records","content":"Selected field values are copied into the primary record."},{"heading":"resolving-duplicate-records","content":"All non-excluded duplicate records in the group are permanently deleted."},{"heading":"field-behavior-during-merge","content":"All editable fields are displayed except the grouping field(s) & system fields (e.g. id, created_at, updated_at). Virtual fields (Formula, Lookup, Rollup) are shown for reference as these cannot be edited directly. Record ID of the primary record is always retained. Modified timestamps are updated automatically."},{"heading":"field-behavior-during-merge","content":"When merging, field values are handled as follows:"},{"heading":"field-behavior-during-merge","content":"If you select a value from any record for a field, that value is copied into the primary record."},{"heading":"field-behavior-during-merge","content":"If no value is selected for a field, the primary record's existing value remains unchanged."},{"heading":"group-review-actions","content":"While reviewing duplicate groups, you can:"},{"heading":"group-review-actions","content":"Skip group\nMove to the next duplicate group without making any changes."},{"heading":"group-review-actions","content":"Reset\nClear all selections for the current group (primary record, field selections, exclusions) and start over."},{"heading":"group-review-actions","content":"You can skip a group before selecting a primary record, or reset even after making selections."},{"heading":"supported-field-types","content":"Supported for duplicate detection"},{"heading":"supported-field-types","content":"Text, LongText, SingleLineText"},{"heading":"supported-field-types","content":"Number, Decimal, Currency, Percent, Duration, Rating"},{"heading":"supported-field-types","content":"Date, DateTime, Time, Year"},{"heading":"supported-field-types","content":"Phone, Email, URL"},{"heading":"supported-field-types","content":"SingleSelect, MultiSelect"},{"heading":"supported-field-types","content":"Checkbox"},{"heading":"supported-field-types","content":"Attachment"},{"heading":"supported-field-types","content":"JSON, Geometry"},{"heading":"supported-field-types","content":"User"},{"heading":"supported-field-types","content":"Links & LinkToAnotherRecord (LTAR): many-to-many, belongs-to-one"},{"heading":"supported-field-types","content":"Not supported"},{"heading":"supported-field-types","content":"Links & LinkToAnotherRecord (LTAR): has-many, one-to-one"},{"heading":"key-notes","content":"Duplicate detection supports single-field or multi-field grouping"},{"heading":"key-notes","content":"When multiple fields are selected, records must match on all selected fields to be grouped as duplicates"},{"heading":"key-notes","content":"At least two matching records are required per group"},{"heading":"key-notes","content":"Undo / Redo is not supported"},{"heading":"key-notes","content":"Deleted records cannot be restored"},{"heading":"key-notes","content":"The Dedupe extension provides a controlled and efficient way to clean up duplicate data while giving you full visibility and control over what gets merged and removed."}],"headings":[{"id":"overview","content":"Overview"},{"id":"finding-duplicate-records","content":"Finding Duplicate Records"},{"id":"resolving-duplicate-records","content":"Resolving Duplicate Records"},{"id":"field-behavior-during-merge","content":"Field Behavior During Merge"},{"id":"group-review-actions","content":"Group Review Actions"},{"id":"supported-field-types","content":"Supported Field Types"},{"id":"key-notes","content":"Key Notes"}]},"url":"/docs/product-docs/extensions/dedupe","title":"Dedupe","description":"Identify and merge duplicate records in a table"},{"_id":"/docs/product-docs/extensions","structured":{"contents":[{"content":"type: note"},{"content":"The Extensions feature is available on NocoDB cloud and on-premise licensed deployments."},{"content":"Extensions are modular components designed to expand and customize your experience with NocoDB. Functioning like plugins, extensions introduce new features and functionalities beyond the platform's core capabilities, allowing users to adapt NocoDB to suit unique requirements and workflows."},{"content":"This section provides an overview of the Extensions framework, detailing how to install, manage, and utilize extensions to optimize your NocoDB base."},{"content":"Extension Marketplace"},{"content":"Adding Extensions"},{"content":"Managing Extensions"},{"content":"Extensions can be developed using JavaScript and Vue.js, offering a flexible approach to adding new features to your NocoDB instance. The ability to develop custom extensions will be available soon, allowing you to tailor NocoDB to meet specific needs and workflows. Stay tuned for more updates!"},{"content":"The Extensions side panel can be toggled using the Extensions button located in the top-right corner of the NocoDB interface."},{"heading":"extensions-marketplace","content":"The Extensions Marketplace is a centralized hub where you can explore, discover, and install extensions to enhance your NocoDB experience."},{"heading":"extensions-marketplace","content":"The following extensions are currently available in the marketplace:"},{"heading":"extensions-marketplace","content":"Data Exporter"},{"heading":"extensions-marketplace","content":"Upload Data from CSV"},{"heading":"extensions-marketplace","content":"URL Preview"},{"heading":"extensions-marketplace","content":"World Clock"},{"heading":"extensions-marketplace","content":"Page Designer"},{"heading":"extensions-marketplace","content":"Bulk Update"},{"heading":"extensions-marketplace","content":"Note that, the ability to develop custom extensions is not supported currently."},{"heading":"adding-extensions","content":"To add an extension to your NocoDB instance, open extensions side panel and follow these steps:"},{"heading":"adding-extensions","content":"Click the Add Extension button in the Extensions side panel."},{"heading":"adding-extensions","content":"Click the Add button to add the extension to your NocoDB instance. You can also click on the extension card to view more details about the extension."},{"heading":"adding-extensions","content":"type: info"},{"heading":"adding-extensions","content":"The extensions installed are specific to the base and are not shared across workspace."},{"heading":"adding-extensions","content":"Multiple instances of the same extension can be added to a base."},{"heading":"managing-extensions","content":"After installing an extension, you can manage it using the following options:"},{"heading":"1-adjust-visibility","content":"Use the expand icon to view the extension in full screen mode."},{"heading":"2-reorder-extensions","content":"Use the drag-drop icon to reorder the extensions in the side panel."},{"heading":"3-additional-actions","content":"Use the More button to perform the following actions:"},{"heading":"3-additional-actions","content":"Rename extension"},{"heading":"3-additional-actions","content":"Duplicate extension"},{"heading":"3-additional-actions","content":"Clear data"},{"heading":"3-additional-actions","content":"Delete extension"}],"headings":[{"id":"extensions-marketplace","content":"Extensions Marketplace"},{"id":"adding-extensions","content":"Adding Extensions"},{"id":"managing-extensions","content":"Managing Extensions"},{"id":"1-adjust-visibility","content":"1. Adjust Visibility"},{"id":"2-reorder-extensions","content":"2. Reorder Extensions"},{"id":"3-additional-actions","content":"3. Additional Actions"}]},"url":"/docs/product-docs/extensions","title":"Extensions ☁","description":"Overview of the extensions available in NocoDB"},{"_id":"/docs/product-docs/extensions/org-chart","structured":{"contents":[{"heading":"overview","content":"The Org Chart extension in NocoDB allows you to visualize hierarchical data in the form of an organization chart. This extension is particularly useful for displaying relationships within teams, departments, or any other hierarchical structure based on your data."}],"headings":[{"id":"overview","content":"Overview"}]},"url":"/docs/product-docs/extensions/org-chart","title":"Org Chart","description":"Display an organization chart based on your data"},{"_id":"/docs/product-docs/extensions/page-designer","structured":{"contents":[{"heading":"overview","content":"The Page Designer extension allows users to create printable and shareable (PDF) visual layouts from their database records. Common use cases include generating invoices, reports, certificates, and summaries—by combining text, images, and dynamic field data in a freeform design canvas."},{"heading":"overview","content":"This feature is ideal for teams who want to convert structured table data into branded, formatted documents directly within NocoDB."},{"heading":"key-features","content":"Drag-and-drop Builder: Add text, images, tables, and dividers to customize your page layout."},{"heading":"key-features","content":"Record-specific Rendering: Auto-populates fields dynamically from the selected record."},{"heading":"key-features","content":"Supports Linked Records: Render data from related tables in a tabular, list, or inline format."},{"heading":"key-features","content":"Full Design Control: Modify font, alignment, borders, colors, and more for each element."},{"heading":"key-features","content":"Print & PDF Export: Preview your design and export directly to PDF."},{"heading":"how-to-access","content":"To get started:"},{"heading":"how-to-access","content":"Open Page Designer from the Extensions menu in your NocoDB instance."},{"heading":"how-to-access","content":"Choose the target table and view from which records will be pulled."},{"heading":"how-to-access","content":"Select a specific record to preview and design the layout interactively."},{"heading":"designing-your-page","content":"The canvas on the left shows a preview of your document layout. Use the sidebar on the right to add and arrange elements."},{"heading":"add-elements","content":"Add components to your layout by dragging them onto the canvas:"},{"heading":"add-elements","content":"Element"},{"heading":"add-elements","content":"Description"},{"heading":"add-elements","content":"🅰️ Text"},{"heading":"add-elements","content":"Add static or dynamic text (linked to table fields)."},{"heading":"add-elements","content":"🖼️ Image"},{"heading":"add-elements","content":"Add image blocks, such as logos or banners."},{"heading":"add-elements","content":"➖ Divider"},{"heading":"add-elements","content":"Insert horizontal lines for visual separation."},{"heading":"bind-field-data","content":"Under Field Elements, you can drag and drop database fields onto the canvas. Once dropped into the canvas, these fields will auto-populate with values from the selected record. You can also format these fields using the sidebar options (font size, color, alignment, etc.)."},{"heading":"field-configuration","content":"For most field types, you can configure:"},{"heading":"field-configuration","content":"Setting"},{"heading":"field-configuration","content":"Description"},{"heading":"field-configuration","content":"Font settings"},{"heading":"field-configuration","content":"Customize font family, size, line height, and color"},{"heading":"field-configuration","content":"Alignment"},{"heading":"field-configuration","content":"Set horizontal and vertical alignment"},{"heading":"field-configuration","content":"Border & Radius"},{"heading":"field-configuration","content":"Add borders and set corner radius"},{"heading":"field-configuration","content":"Background color"},{"heading":"field-configuration","content":"Set background color for the field"},{"heading":"linked-records","content":"The Linked Records section allows you to display related table data using three formats:"},{"heading":"linked-records","content":"Inline: Display as plain text."},{"heading":"linked-records","content":"List: Show entries in a vertical list."},{"heading":"linked-records","content":"Table : Render fields from the related table as a structured table with columns and rows."},{"heading":"linked-records","content":"For linked records displayed in tabluar format, you can choose which fields to display and customize their visibility."},{"heading":"table-configuration","content":"Column"},{"heading":"table-configuration","content":"Options"},{"heading":"table-configuration","content":"Enable/Disable fields"},{"heading":"table-configuration","content":"Toggle visibility per field"},{"heading":"table-configuration","content":"Font settings"},{"heading":"table-configuration","content":"Customize font family, size, line height, and color"},{"heading":"table-configuration","content":"Table Header styling"},{"heading":"table-configuration","content":"Set separate font size and line height for headers"},{"heading":"table-configuration","content":"Background color"},{"heading":"table-configuration","content":"Set background color for the table"},{"heading":"record-preview","content":"Use the Record selector in the sidebar to toggle between different records and preview how the design looks with real data."},{"heading":"page-settings","content":"Page Name: Customize the name of your page for easy reference. This name will be used when exporting or printing."},{"heading":"page-settings","content":"Print / Export: Use the print icon in the top-right corner to generate PDFs or physical printouts."},{"heading":"key-use-cases","content":"🧾 Invoices & Quotes"},{"heading":"key-use-cases","content":"📄 Client Reports & Status Sheets"},{"heading":"key-use-cases","content":"🎓 Certificates & Badges"},{"heading":"key-use-cases","content":"📊 Internal Summaries for review meetings"},{"heading":"limitations-beta","content":"The Page Designer is currently in Beta—minor rendering issues may occur in some browsers. Help us improve by reporting any bugs you encounter and any suggestions you have to improve the experience."}],"headings":[{"id":"overview","content":"Overview"},{"id":"key-features","content":"Key Features"},{"id":"how-to-access","content":"How to Access"},{"id":"designing-your-page","content":"Designing Your Page"},{"id":"add-elements","content":"Add Elements"},{"id":"bind-field-data","content":"Bind Field Data"},{"id":"field-configuration","content":"Field Configuration"},{"id":"linked-records","content":"Linked Records"},{"id":"table-configuration","content":"Table Configuration"},{"id":"record-preview","content":"Record Preview"},{"id":"page-settings","content":"Page Settings"},{"id":"key-use-cases","content":"Key Use Cases"},{"id":"limitations-beta","content":"Limitations (Beta)"}]},"url":"/docs/product-docs/extensions/page-designer","title":"Page Designer","description":"Create printable and shareable layouts from your database records"},{"_id":"/docs/product-docs/extensions/upload-data-from-csv","structured":{"contents":[{"heading":"overview","content":"The Upload data from CSV extension in NocoDB allows users to import data from CSV files directly into existing tables. This tool enables you to efficiently add new records, update existing ones, and map CSV columns to NocoDB fields with precision."},{"heading":"modes-of-import","content":"The Import CSV Extension supports two modes of data import:"},{"heading":"modes-of-import","content":"1. Add Records: Import all records from the CSV file as new entries in the selected table. No existing records are modified."},{"heading":"modes-of-import","content":"2. Merge Records: Update existing records based on a designated merge field (a unique field used for matching) while optionally adding new records. The available options under this mode are:"},{"heading":"modes-of-import","content":"Create New Records Only"},{"heading":"modes-of-import","content":"Only adds new records from the CSV. Existing records are not updated. New records are identified based on the merge field specified."},{"heading":"modes-of-import","content":"Update Existing Records Only"},{"heading":"modes-of-import","content":"Only updates records that already exist in the table based on the merge field. New records are not added."},{"heading":"modes-of-import","content":"Create and Update Records"},{"heading":"modes-of-import","content":"Adds new records and updates existing ones as needed, based on the merge field."},{"heading":"modes-of-import","content":"Merge Field: The merge field is the key field used to match records in the CSV file with those in the NocoDB table for updating purposes. Typically, this is the Primary Key or another unique identifier. Composite keys are not supported."},{"heading":"modes-of-import","content":"Field Mapping: Easily map CSV columns to corresponding fields in the NocoDB table. You have the flexibility to import only the fields you need."},{"heading":"steps-to-import","content":"Follow these steps to import data from a CSV file into NocoDB:"},{"heading":"steps-to-import","content":"Drag and drop or upload your CSV file into the Import CSV Extension area."},{"heading":"steps-to-import","content":"Select the table you want to import the data into. By default, current active table is selected."},{"heading":"steps-to-import","content":"Choose the mode of import:"},{"heading":"steps-to-import","content":"Add Records or"},{"heading":"steps-to-import","content":"Merge Records with one of the following Import Types:"},{"heading":"steps-to-import","content":"Create New Records Only"},{"heading":"steps-to-import","content":"Update Existing Records Only"},{"heading":"steps-to-import","content":"Create and Update Records"},{"heading":"steps-to-import","content":"Set the Merge Field (for Merge Records mode): Select the field that will be used to match CSV records with existing table records."},{"heading":"steps-to-import","content":"Use first record as header: If the first row of the CSV file contains the column headers, enable this option to use them as the field names."},{"heading":"steps-to-import","content":"Map the columns from the CSV file to the corresponding fields in the NocoDB table."},{"heading":"steps-to-import","content":"Click the Import button to start the import process."},{"heading":"post-import-summary","content":"Once the import is complete, NocoDB will display a summary detailing:"},{"heading":"post-import-summary","content":"The number of new records added"},{"heading":"post-import-summary","content":"The number of existing records updated"},{"heading":"post-import-summary","content":"Any records left unchanged"},{"heading":"post-import-summary","content":"This streamlined process ensures your data is imported accurately and efficiently."}],"headings":[{"id":"overview","content":"Overview"},{"id":"importing-data","content":"Importing Data"},{"id":"modes-of-import","content":"Modes of Import"},{"id":"steps-to-import","content":"Steps to Import"},{"id":"post-import-summary","content":"Post-Import Summary"}]},"url":"/docs/product-docs/extensions/upload-data-from-csv","title":"Upload data from CSV","description":"Import data from CSV files into NocoDB"},{"_id":"/docs/product-docs/extensions/url-preview","structured":{"contents":[{"heading":"overview","content":"The URL Preview extension in NocoDB allows you to preview URLs directly within your NocoDB instance. This feature is particularly useful when you need to quickly view the content of a URL without leaving your workspace. This extension enhances the data visualization capabilities of NocoDB by providing rich, contextual previews for supported online platforms and services."},{"heading":"previewing-urls","content":"To preview a URL in NocoDB, just select a cell from the URL field. A preview of the URL content will be displayed in the extension sub-panel, allowing you to view the content without navigating away from your workspace."},{"heading":"supported-platforms","content":"The URL Preview Extension currently supports the following platforms:"},{"heading":"️-media--social","content":"YouTube"},{"heading":"️-media--social","content":"Vimeo"},{"heading":"️-media--social","content":"SoundCloud"},{"heading":"️-media--social","content":"Spotify"},{"heading":"️-media--social","content":"Twitter"},{"heading":"️-media--social","content":"Dailymotion"},{"heading":"️-media--social","content":"Behance"},{"heading":"️-media--social","content":"TED"},{"heading":"-productivity--collaboration","content":"Google Docs"},{"heading":"-productivity--collaboration","content":"Google Sheets"},{"heading":"-productivity--collaboration","content":"Google Slides"},{"heading":"-productivity--collaboration","content":"Google Drive share links"},{"heading":"-productivity--collaboration","content":"Loom share links"},{"heading":"-design--development","content":"GitHub (Gists)"},{"heading":"-design--development","content":"CodePen"},{"heading":"-design--development","content":"CodeSandbox (Embed url)"},{"heading":"-design--development","content":"JSFiddle"},{"heading":"-design--development","content":"StackBlitz"},{"heading":"-design--development","content":"Figma"},{"heading":"-design--development","content":"Notion"}],"headings":[{"id":"overview","content":"Overview"},{"id":"previewing-urls","content":"Previewing URLs"},{"id":"supported-platforms","content":"Supported Platforms"},{"id":"️-media--social","content":"📽️ Media & Social"},{"id":"-productivity--collaboration","content":"💼 Productivity & Collaboration"},{"id":"-design--development","content":"🧑‍💻 Design & Development"}]},"url":"/docs/product-docs/extensions/url-preview","title":"URL Preview","description":"Preview URLs in NocoDB"},{"_id":"/docs/product-docs/extensions/world-clock","structured":{"contents":[{"heading":"overview","content":"The World Clock extension in NocoDB allows you to display multiple time zone clocks within your NocoDB instance. This feature is particularly useful when you need to track time across different regions or collaborate with team members in different time zones. The extension enhances the user experience by providing a visual representation of time zones, making it easier to manage global operations and schedules."},{"heading":"adding-clock","content":"To add a clock, expand World clock extension, click + Add City and select City from the dropdown available. You can add a maximum of 4 clocks per instance of an extension."},{"heading":"adding-clock","content":"Clock Name: Enter a name for the clock to identify it easily. It defaults to the selected City name."},{"heading":"adding-clock","content":"Theme: Choose one amongst the available themes for the clock display."},{"heading":"clock-display-settings","content":"The following are the global settings that will be applied to all the clocks configured."},{"heading":"clock-display-settings","content":"Clock Type: Choose between Analog, Digital, or Both for the display format."},{"heading":"clock-display-settings","content":"Show Numbers: For analog clocks, you can additionally configure if hour numbers are to be displayed on the clock dial."},{"heading":"clock-display-settings","content":"Time Format: Choose between 12H and 24H format for the clock display."}],"headings":[{"id":"overview","content":"Overview"},{"id":"adding-clock","content":"Adding Clock"},{"id":"clock-display-settings","content":"Clock Display Settings"}]},"url":"/docs/product-docs/extensions/world-clock","title":"World Clock","description":"Display multiple time zone clocks with in NocoDB"},{"_id":"/docs/product-docs/fields/actions-on-field","structured":{"contents":[{"heading":"fields-context-menu","content":"Fields context menu can be accessed by clicking on the dropdown icon (🔽) next to the field name."},{"heading":"rename-field","content":"Open the field context menu"},{"heading":"rename-field","content":"Click on Edit option."},{"heading":"rename-field","content":"Enter new field name as required in the Field Name field."},{"heading":"rename-field","content":"Click on Save Field button."},{"heading":"change-field-type","content":"Open the field context menu"},{"heading":"change-field-type","content":"Click on Edit option."},{"heading":"change-field-type","content":"Select new field type from the Field Type dropdown."},{"heading":"change-field-type","content":"Click on Save Field button."},{"heading":"change-default-value","content":"Open the field context menu"},{"heading":"change-default-value","content":"Click on Edit option."},{"heading":"change-default-value","content":"Enter new default value in the Default Value field. To disable, click on x icon."},{"heading":"change-default-value","content":"Click on Save Field button."},{"heading":"change-field-width","content":"To adjust the width of the field, hover over the field edge and drag to adjust the width."},{"heading":"hide-field","content":"Open the field context menu"},{"heading":"hide-field","content":"Click on Hide Field option"},{"heading":"hide-field","content":"type: note"},{"heading":"hide-field","content":"Hidden fields are not visible in the table view, but will still be accessible for Formulas, Sort, Filter, etc."},{"heading":"hide-field","content":"To un hide a field, use Toolbar > Fields menu"},{"heading":"hide-field","content":"Fields can also be marked as hidden from Toolbar > Fields menu"},{"heading":"set-as-display-value","content":"Open the field context menu"},{"heading":"set-as-display-value","content":"Click on Set as Display Value option."},{"heading":"set-as-display-value","content":"Refer to Display Value for more details."},{"heading":"sort-ascending","content":"Open the field context menu"},{"heading":"sort-ascending","content":"Click on Sort Ascending option."},{"heading":"sort-descending","content":"Open the field context menu"},{"heading":"sort-descending","content":"Click on Sort Descending option."},{"heading":"duplicate-field","content":"Open the field context menu"},{"heading":"duplicate-field","content":"Click on Duplicate option."},{"heading":"duplicate-field","content":"Duplicated field sans the data will be created with suffix _copy in its name & will be placed to the right of the original field."},{"heading":"insert-after-a-field","content":"Open the field context menu"},{"heading":"insert-after-a-field","content":"Click on Insert after option."},{"heading":"insert-after-a-field","content":"New field will be created to the right of the original field."},{"heading":"insert-before-a-field","content":"Open the field context menu"},{"heading":"insert-before-a-field","content":"Click on Insert before option."},{"heading":"insert-before-a-field","content":"New field will be created to the left of the original field."},{"heading":"delete-field","content":"type: info"},{"heading":"delete-field","content":"To delete a field, follow the steps below:"},{"heading":"delete-field","content":"Open the field context menu by clicking on dropdown icon (🔽) ."},{"heading":"delete-field","content":"Click on Delete."},{"heading":"delete-field","content":"Confirm the deletion by clicking on Delete Field on the confirmation modal."},{"heading":"add--edit-field-description","content":"Field description can be added by clicking on the Add Description button on the field creation modal or by clicking on the Edit Description button from the field context menu."},{"heading":"add--edit-field-description","content":"Description for a field will be visible as a tooltip when hovering over the info icon next to the field name."},{"heading":"set-field-as-unique","content":"To set a field as unique, follow the steps below:"},{"heading":"set-field-as-unique","content":"Open the field context menu by clicking on dropdown icon (🔽) ."},{"heading":"set-field-as-unique","content":"Click on Edit field."},{"heading":"set-field-as-unique","content":"Toggle on the Unique values only option."},{"heading":"set-field-as-unique","content":"Click on Save Field button."},{"heading":"set-field-as-unique","content":"Note that, this feature is only available for certain field types like Single line text, Email, Number, etc. Find more details on setting a field as unique in Unique Fields article."}],"headings":[{"id":"fields-context-menu","content":"Fields context menu"},{"id":"edit","content":"Edit"},{"id":"rename-field","content":"Rename field"},{"id":"change-field-type","content":"Change field type"},{"id":"change-default-value","content":"Change default value"},{"id":"change-field-width","content":"Change field width"},{"id":"hide-field","content":"Hide field"},{"id":"set-as-display-value","content":"Set as Display value"},{"id":"sort-ascending","content":"Sort Ascending"},{"id":"sort-descending","content":"Sort Descending"},{"id":"duplicate-field","content":"Duplicate field"},{"id":"insert-after-a-field","content":"Insert after a field"},{"id":"insert-before-a-field","content":"Insert before a field"},{"id":"delete-field","content":"Delete field"},{"id":"add--edit-field-description","content":"Add / edit field description"},{"id":"set-field-as-unique","content":"Set field as unique"}]},"url":"/docs/product-docs/fields/actions-on-field","title":"Actions on field","description":"This article explains how to perform various actions on a field- like rename, change field type, default, field width, record height, show/hide."},{"_id":"/docs/product-docs/fields/display-value","structured":{"contents":[{"content":"The Display Value serves as the primary visual identifier for a record within a table. It helps users quickly recognize and associate records across views and linked tables. While it is often recommended to set a display value based on a field with unique identifiers (like a primary key), uniqueness is not enforced at the database level."},{"heading":"use-of-display-value","content":"In the spreadsheet view, the display value is visually emphasized to make it easier to identify the record you’re working with."},{"heading":"use-of-display-value","content":"When creating Links between tables, the display value is shown in the Linked Records modal, making cross-table relationships more readable and intuitive."},{"heading":"use-of-display-value","content":"Example: Display Value highlighted in the Actor table"},{"heading":"use-of-display-value","content":"Example: Display Value shown in a Links field.\nThe value shown in the Link Records modal is pulled from the related table's display value."},{"heading":"set-display-value","content":"To set a field as the display value:"},{"heading":"set-display-value","content":"Click the dropdown icon (🔽) next to the desired field."},{"heading":"set-display-value","content":"Select Set as display value from the menu."},{"heading":"faq","content":"How is the Display Value determined for existing database tables?\nFor tables connected from external databases, NocoDB automatically selects the display value based on the table structure. By default, it picks the first non-numeric field after the primary key. If no non-numeric field is found, it selects the next field after the primary key."},{"heading":"faq","content":"Can I change the Display Value later?\nYes. You can change the display value at any time by using the context menu on the target field. Learn more →"}],"headings":[{"id":"use-of-display-value","content":"Use of Display Value"},{"id":"set-display-value","content":"Set Display Value"},{"id":"faq","content":"FAQ"}]},"url":"/docs/product-docs/fields/display-value","title":"Display Value","description":"This article explains how to set the display value for a table and its significance."},{"_id":"/docs/product-docs/fields/field-summary-footer","structured":{"contents":[{"content":"The \"Field Summary\" provides quick calculations for chosen fields displayed in the footer of a table's grid view. These calculations offer quick insights into your data, such as total sums, averages, minimum, and maximum values. This section explains how to use & configure field summary to accurately compute these values."},{"heading":"overview","content":"Field Summary is aggregated value computed by considering all the rows present in a grid view. The resulting values are displayed in the summary cells at the bottom of the field for easy reference. Filters configured on the grid, if any will affect the rows displayed & hence the summary as well."},{"heading":"overview","content":"Please note that it is not possible to reference these aggregated values directly in other parts of the table."},{"heading":"overview","content":"When a grid view is shared publicly, the summary  is also visible to the viewers. Viewers of shared view can also modify the field summary configuration to suit their needs, but the changes are not saved (revert upon page refresh)."},{"heading":"overview","content":"Summary configurations are grid view specific. Multiple grid views can be created for a table, and each grid view can have its own summary configuration."},{"heading":"configuring-field-summary","content":"By default, the summary is disabled for all fields. To enable the summary for a field, follow these steps:"},{"heading":"configuring-field-summary","content":"Navigate to the grid view of the table you wish to configure the field summary for."},{"heading":"configuring-field-summary","content":"Click on the cell of the field you wish to configure the summary for."},{"heading":"configuring-field-summary","content":"Select the desired summary type from the dropdown list."},{"heading":"configuring-field-summary","content":"Changes to the grid view immediately update the values displayed in the footer cells. To disable the summary for a field, click on the summary cell and select \"None\" from the dropdown list."},{"heading":"summary-types","content":"Summary function types available for configuration depend on the field type. General functions listed below are available for most of the field types:"},{"heading":"general","content":"Empty: Count of empty cells in the field."},{"heading":"general","content":"Filled: Count of non-empty cells in the field."},{"heading":"general","content":"Unique: Count of unique values in the field."},{"heading":"general","content":"Percent Empty: Percentage of empty cells in the field."},{"heading":"general","content":"Percent Filled: Percentage of non-empty cells in the field."},{"heading":"general","content":"Percent Unique: Percentage of unique values in the field."},{"heading":"general","content":"Apart from these general functions, specific functions are available for different field types:"},{"heading":"numeric","content":"Sum: Sum of all numeric values in the field."},{"heading":"numeric","content":"Minimum: Minimum value in the field."},{"heading":"numeric","content":"Maximum: Maximum value in the field."},{"heading":"numeric","content":"Average: Average of all numeric values in the field."},{"heading":"numeric","content":"Median: Median of all numeric values in the field."},{"heading":"numeric","content":"Standard Deviation: Standard deviation of all numeric values in the field."},{"heading":"numeric","content":"Range: Range of all numeric values in the field."},{"heading":"date","content":"Earliest Date: Earliest date in the field."},{"heading":"date","content":"Latest Date: Latest date in the field."},{"heading":"date","content":"Date Range: Range of dates in the field."},{"heading":"date","content":"Month Range: Range of months in the field."},{"heading":"checkbox","content":"Checked: Count of checked checkboxes in the field."},{"heading":"checkbox","content":"Unchecked: Count of unchecked checkboxes in the field."},{"heading":"checkbox","content":"Percent Checked: Percentage of checked checkboxes in the field."},{"heading":"checkbox","content":"Percent Unchecked: Percentage of unchecked checkboxes in the field."},{"heading":"attachment","content":"Attachment Size: Total size of attachments in the field."},{"heading":"attachment","content":"type: note"},{"heading":"attachment","content":"Summary configuration is not available for DB specific field types."}],"headings":[{"id":"overview","content":"Overview"},{"id":"configuring-field-summary","content":"Configuring Field Summary"},{"id":"summary-types","content":"Summary Types"},{"id":"general","content":"General"},{"id":"numeric","content":"Numeric"},{"id":"date","content":"Date"},{"id":"checkbox","content":"Checkbox"},{"id":"attachment","content":"Attachment"}]},"url":"/docs/product-docs/fields/field-summary-footer","title":"Field summary","description":"Understanding the field summary bar in NocoDB!"},{"_id":"/docs/product-docs/fields","structured":{"contents":[{"content":"Fields define the structure and type of data stored in each record of a table. They are the building blocks of your database, determining how information is entered, displayed, and interpreted. Whether you're capturing names, numbers, dates, selections, or calculated values—fields provide the necessary flexibility to model your data accurately."},{"content":"This section will guide you through the different types of fields available, their configurations, and best practices for choosing the right field type based on your use case. By understanding how fields work, you can design more effective tables and ensure consistent, meaningful data across your workspace."},{"content":"Among all fields in a table, two hold special significance: the primary key and the display value. The primary key is a technical identifier that uniquely distinguishes each record and is essential for backend operations like updates, deletions, and maintaining data integrity. It is always unique and typically hidden from end users. On the other hand, the display value is a human-readable label—such as a name or title—used in the interface to help users quickly identify and associate records. While it’s recommended to use a field with unique values as the display value, strict uniqueness is not enforced. In essence, the primary key ensures consistent record management, while the display value improves usability and context."},{"heading":"create-a-field","content":"To add a new field to your table:"},{"heading":"create-a-field","content":"Click on the ➕ icon in the table header where you'd like to insert the new field."},{"heading":"create-a-field","content":"In the New Field panel:"},{"heading":"create-a-field","content":"Enter the field name (optional at first)."},{"heading":"create-a-field","content":"Select the appropriate field type from the list (e.g., Single line text, Number, Lookup, etc.)."},{"heading":"create-a-field","content":"Configure additional settings such as default value and description as needed."},{"heading":"create-a-field","content":"Unique constraints can be enabled for supported field types by checking the Unique values only option. More details can be found in the Unique Fields section below."},{"heading":"create-a-field","content":"Click Save Field to finalize the creation."},{"heading":"create-a-field","content":"type: note"},{"heading":"create-a-field","content":"Depending on the field type selected, additional options or configurations may be required—such as allowed values, precision, formulas, or linked table settings. Refer to the documentation for each field type for detailed guidance."},{"heading":"field-default-value","content":"You can set a default value when creating a field. This value is automatically applied to new records created after the field is set. It does not affect existing records. The default can be a fixed value (e.g., \"N/A\", \"Unknown\") or, for some field types, a dynamic value such as the current date, time, or user ID. Refer Set default value for more details on how to configure default values."},{"heading":"field-description","content":"Adding a description to a field provides context and guidance for users interacting with the table. This is especially useful in collaborative environments where multiple users may access the same data. The description can include details about the field's purpose, expected values, or any specific instructions for data entry. It appears as a tooltip when users hover over i icon next to the field name in the table header. For more details, refer to Add/Edit Field Description."},{"heading":"field-description","content":"type: info"},{"heading":"field-types","content":"NocoDB offers a wide range of field types to help you structure your data effectively. From basic text and numeric fields to more advanced options like linked records, formulas, and custom types, each field serves a specific purpose. The table below provides an overview of all available field types along with brief descriptions to help you choose the right one for your use case."},{"heading":"field-types","content":"Field Type"},{"heading":"field-types","content":"Name"},{"heading":"field-types","content":"Description"},{"heading":"field-types","content":"Text based"},{"heading":"field-types","content":"Single line text"},{"heading":"field-types","content":"For short text entries like names or titles."},{"heading":"field-types","content":"Long text"},{"heading":"field-types","content":"Suitable for paragraphs or detailed notes."},{"heading":"field-types","content":"Email"},{"heading":"field-types","content":"Stores and validates email addresses."},{"heading":"field-types","content":"Phone"},{"heading":"field-types","content":"For storing phone numbers."},{"heading":"field-types","content":"URL"},{"heading":"field-types","content":"Stores website or web resource links."},{"heading":"field-types","content":"Numerical"},{"heading":"field-types","content":"Number"},{"heading":"field-types","content":"Whole numbers, positive or negative."},{"heading":"field-types","content":"Decimal"},{"heading":"field-types","content":"Numbers with decimal precision."},{"heading":"field-types","content":"Percentage"},{"heading":"field-types","content":"Represents numeric values as percentages."},{"heading":"field-types","content":"Currency"},{"heading":"field-types","content":"Stores monetary values with currency symbol."},{"heading":"field-types","content":"Date & Time"},{"heading":"field-types","content":"Date"},{"heading":"field-types","content":"Captures calendar dates."},{"heading":"field-types","content":"Time"},{"heading":"field-types","content":"Stores time of day."},{"heading":"field-types","content":"Date and time"},{"heading":"field-types","content":"Stores both date and time in one field."},{"heading":"field-types","content":"Duration"},{"heading":"field-types","content":"Measures length of time (e.g., hours or days)."},{"heading":"field-types","content":"Select based"},{"heading":"field-types","content":"Single select"},{"heading":"field-types","content":"Allows choosing one option from a list."},{"heading":"field-types","content":"Multi select"},{"heading":"field-types","content":"Allows selecting multiple options from a list."},{"heading":"field-types","content":"Link based"},{"heading":"field-types","content":"Links"},{"heading":"field-types","content":"Creates relationships between tables."},{"heading":"field-types","content":"Lookup"},{"heading":"field-types","content":"Pulls data from linked records."},{"heading":"field-types","content":"Rollup"},{"heading":"field-types","content":"Aggregates values from related records."},{"heading":"field-types","content":"Custom types"},{"heading":"field-types","content":"Attachment"},{"heading":"field-types","content":"Upload and store files or images."},{"heading":"field-types","content":"Barcode"},{"heading":"field-types","content":"Stores and displays barcodes."},{"heading":"field-types","content":"QR-code"},{"heading":"field-types","content":"Stores and displays QR codes."},{"heading":"field-types","content":"Geometry"},{"heading":"field-types","content":"For geographic or spatial data."},{"heading":"field-types","content":"JSON"},{"heading":"field-types","content":"Stores structured data in JSON format."},{"heading":"field-types","content":"Checkbox"},{"heading":"field-types","content":"Boolean toggle for true/false values."},{"heading":"field-types","content":"Rating"},{"heading":"field-types","content":"Displays star-based or numeric rating."},{"heading":"field-types","content":"Colour"},{"heading":"field-types","content":"Displays colour swatch & corresponding Hex code."},{"heading":"field-types","content":"Identifier"},{"heading":"field-types","content":"UUID"},{"heading":"field-types","content":"Auto-generates globally unique identifiers (UUID v4)."},{"heading":"field-types","content":"Formula"},{"heading":"field-types","content":"Formula"},{"heading":"field-types","content":"Computes values using expressions based on other fields."},{"heading":"unique-fields-","content":"type: info"},{"heading":"unique-fields-","content":"Certain field types in NocoDB can be configured to enforce uniqueness, ensuring that no two records contain the same non-empty value for that field. This is especially useful for fields such as email addresses, usernames, or other identifiers that must remain distinct across records. When enabled, empty cells are permitted, while duplicate non-empty values are prevented. You can enable this behavior by selecting the Unique values only option in the field settings during field creation or editing. Once configured, NocoDB validates all new entries and updates to enforce the uniqueness constraint."},{"heading":"unique-fields-","content":"When a user attempts to enter a duplicate value in a unique field, NocoDB will display an error message and prevent the record from being saved until a unique value is provided."},{"heading":"unique-fields-","content":"Supported field types for uniqueness enforcement include:"},{"heading":"unique-fields-","content":"Single line text"},{"heading":"unique-fields-","content":"Email"},{"heading":"unique-fields-","content":"Phone number"},{"heading":"unique-fields-","content":"URL"},{"heading":"unique-fields-","content":"Number"},{"heading":"unique-fields-","content":"Decimal"},{"heading":"unique-fields-","content":"Currency"},{"heading":"unique-fields-","content":"Percent"},{"heading":"unique-fields-","content":"DateTime"},{"heading":"unique-fields-","content":"Date"},{"heading":"unique-fields-","content":"Time"},{"heading":"unique-fields-","content":"type: note"},{"heading":"unique-fields-","content":"Enforcing uniqueness can impact performance on large datasets. Enable this option only when required by your application."},{"heading":"unique-fields-","content":"Uniqueness constraints are supported only for tables created within NocoDB (NC-DB). Fields from external database tables do not support uniqueness constraints via NocoDB."},{"heading":"unique-fields-","content":"When converting an existing field to a unique field, all existing values must already be unique; otherwise, the conversion will fail."},{"heading":"unique-fields-","content":"Default values and uniqueness constraints are mutually exclusive. A field marked as unique cannot have a default value."},{"heading":"unique-fields-","content":"Empty values are allowed in unique fields and do not violate the uniqueness constraint."},{"heading":"field-actions","content":"Beyond selecting the right field type, you can also perform various actions to customize how fields behave and appear in your tables. These actions are accessible from the field’s context menu & toolbar menu and include:"},{"heading":"field-actions","content":"Rename a field"},{"heading":"field-actions","content":"Change field type"},{"heading":"field-actions","content":"Set default value"},{"heading":"field-actions","content":"Adjust field width"},{"heading":"field-actions","content":"Hide or unhide fields"},{"heading":"field-actions","content":"Set as display value"},{"heading":"field-actions","content":"Sort by field (ascending/descending)"},{"heading":"field-actions","content":"Duplicate a field"},{"heading":"field-actions","content":"Insert new field before or after"},{"heading":"field-actions","content":"Delete a field"},{"heading":"field-actions","content":"Add or edit field description"},{"heading":"field-actions","content":"For step-by-step instructions and visuals, refer to the full guide on Actions on Field."}],"headings":[{"id":"create-a-field","content":"Create a Field"},{"id":"field-default-value","content":"Field Default Value"},{"id":"field-description","content":"Field Description"},{"id":"field-types","content":"Field Types"},{"id":"unique-fields-","content":"Unique Fields ☁"},{"id":"field-actions","content":"Field Actions"}]},"url":"/docs/product-docs/fields","title":"Fields","description":"This article discusses various field types that NocoDB offers."},{"_id":"/docs/product-docs/fields/multi-fields-editor","structured":{"contents":[{"content":"NocoDB offers a handy tool for easily managing the fields within a table. With this tool, you can add, modify, rename, arrange, or hide fields efficiently. It's particularly useful when creating a new table structure or making changes to an existing one."},{"heading":"accessing-the-multi-field-editor","content":"Navigate to the table you wish to edit"},{"heading":"accessing-the-multi-field-editor","content":"Click on Details in the navbar"},{"heading":"accessing-the-multi-field-editor","content":"Select Fields tab"},{"heading":"adding-fields","content":"On the Multi-field editor page,"},{"heading":"adding-fields","content":"Click on Add Field button to add a new field."},{"heading":"adding-fields","content":"Enter the field name and select the field type; configure default value (optional)."},{"heading":"adding-fields","content":"Field will be added to the end of the list. You can reorder the fields as needed. You can add / update multiple fields in one go & save all at once."},{"heading":"adding-fields","content":"Click Save changes button to save the changes."},{"heading":"adding-fields","content":"type: tip"},{"heading":"adding-fields","content":"You can add / update/ delete multiple fields & save changes in one go."},{"heading":"adding-fields","content":"Use Restore to discard edits to a particular field. Use Reset to discard all active changes on multi-field editor."},{"heading":"editing-fields","content":"On the Multi-field editor page,"},{"heading":"editing-fields","content":"Click on the field you wish to edit."},{"heading":"editing-fields","content":"Make the necessary changes in the Edit Field modal. You can update the field name, type, default value, and other attributes."},{"heading":"editing-fields","content":"Updates to the field are recorded in the fields list view. You can add / update multiple fields in one go & save all at once."},{"heading":"editing-fields","content":"Click Save changes button to save the changes."},{"heading":"editing-fields","content":"type: tip"},{"heading":"editing-fields","content":"You can add / update/ delete multiple fields & save changes in one go."},{"heading":"editing-fields","content":"Use Restore to discard edits to a particular field. Use Reset to discard all active changes on multi-field editor."},{"heading":"deleting-fields","content":"On the Multi-field editor page,"},{"heading":"deleting-fields","content":"Hover over the field you wish to delete, select ... icon to open context menu"},{"heading":"deleting-fields","content":"Click on Delete option to delete the field."},{"heading":"deleting-fields","content":"Deletions in the table are recorded in the fields list view. You can delete multiple fields in one go & save all at once."},{"heading":"deleting-fields","content":"Click Save changes button to save the changes."},{"heading":"deleting-fields","content":"After all the changes are made, click Save changes button to save the changes."},{"heading":"deleting-fields","content":"type: tip"},{"heading":"deleting-fields","content":"You can add / update/ delete multiple fields & save changes in one go."},{"heading":"deleting-fields","content":"Use Restore to discard edits to a particular field. Use Reset to discard all active changes on multi-field editor."},{"heading":"reordering-fields","content":"On the Multi-field editor page, use drag-drop handle to drag and drop the fields to reorder them."},{"heading":"reordering-fields","content":"type: note"},{"heading":"reordering-fields","content":"The changes will only be saved when you click Save changes button."},{"heading":"show--hide-fields","content":"On the Multi-field editor page, use the toggle button next to the fields to show or hide them."},{"heading":"show--hide-fields","content":"type: note"},{"heading":"show--hide-fields","content":"The changes will only be saved when you click Save changes button."}],"headings":[{"id":"accessing-the-multi-field-editor","content":"Accessing the Multi-Field Editor"},{"id":"adding-fields","content":"Adding fields"},{"id":"editing-fields","content":"Editing fields"},{"id":"deleting-fields","content":"Deleting fields"},{"id":"reordering-fields","content":"Reordering fields"},{"id":"show--hide-fields","content":"Show / Hide fields"}]},"url":"/docs/product-docs/fields/multi-fields-editor","title":"Multi-field editor","description":"Understanding use of multi-field editor in NocoDB!"},{"_id":"/docs/product-docs/fields/primary-key","structured":{"contents":[{"content":"A primary key is a special database table field designated to uniquely identify each table record. As it uniquely identifies an individual record of a table, it is used internally by NocoDB for all operations associated with a record"},{"heading":"primary-key-in-nocodb","content":"Primary Key that gets defined / used in NocoDB depends on how underlying table was created. Summary is captured below"},{"heading":"primary-key-in-nocodb","content":"From UI, Create new table / Import from Excel / Import from CSV"},{"heading":"primary-key-in-nocodb","content":"An ID [datatype: Integer] system field created by default during table creation is used as primary key"},{"heading":"primary-key-in-nocodb","content":"Additional system fields created-at, updated-at are inserted by default"},{"heading":"primary-key-in-nocodb","content":"Connect to existing external database"},{"heading":"primary-key-in-nocodb","content":"Existing primary key field defined for a table is retained as is; NocoDB doesn't insert a new ID field"},{"heading":"primary-key-in-nocodb","content":"Additional system fields created-at, updated-at are not inserted by default"},{"heading":"primary-key-in-nocodb","content":"Import from Airtable"},{"heading":"primary-key-in-nocodb","content":"Airtable record ID is marked as primary key for imported records, and is mapped to field ncRecordId  [datatype: varchar]"},{"heading":"primary-key-in-nocodb","content":"If a new record is inserted after migration & if ncRecordId field was omitted during record insertion - auto generated string will be inserted by NocoDB"},{"heading":"primary-key-in-nocodb","content":"Computed hash value for the entire record is stored in system field ncRecordHash"},{"heading":"primary-key-in-nocodb","content":"Additional system fields created-at, updated-at are not inserted by default"},{"heading":"primary-key-in-nocodb","content":"Create new table using SDK / API"},{"heading":"primary-key-in-nocodb","content":"No default primary key field is introduced by NocoDB. It has to be explicitly specified during table creation (using attribute pk: true)"},{"heading":"faq","content":"What if Primary Key was missing?"},{"heading":"faq","content":"In NocoDB, it's possible for a table to have no primary key—this can happen if the table is created externally or through the SDK/API without specifying one. While new records can still be added to such tables, updating or deleting them won’t be possible since there's no unique identifier to reference each record."},{"heading":"faq","content":"Can I change the Primary Key to another field within tables?"},{"heading":"faq","content":"You can't update Primary Key from NocoDB UI. You can reconfigure it at database level directly & trigger meta sync explicitly."}],"headings":[{"id":"primary-key-in-nocodb","content":"Primary Key in NocoDB"},{"id":"faq","content":"FAQ"}]},"url":"/docs/product-docs/fields/primary-key","title":"Primary key","description":"This article explains what a primary key is and how it is used in NocoDB."},{"_id":"/docs/product-docs/getting-started","structured":{"contents":[{"content":"NocoDB offers you the flexibility of two distinct variants: self-hosted and SaaS (cloud-hosted). In this section, we'll walk you through the initial steps to embark on your NocoDB journey, whether you choose to set it up on your own infrastructure or opt for the convenience of our cloud-hosted service. Let's dive in and unlock the potential of NocoDB for your data management needs."},{"content":"type: tip"},{"heading":"self-hosted","content":"When you opt for self-hosting, you gain the advantage of running an application on a server that you have direct control over. This grants you the flexibility to choose whether to host the database on your premises or within a server leased from a data center. In this self-administered arrangement, typically found on-premises, you assume full responsibility for the management and upkeep of your server. This level of control ensures that you have complete authority over all aspects of your data and services, eliminating any reliance on third-party service providers. This option is ideal for organizations that require a high degree of control over their data and services, but it does necessitate a higher level of technical expertise."},{"heading":"self-hosted","content":"Setting up NocoDB on your own server is a straightforward process & the articles below will guide you through the steps to get started."},{"heading":"self-hosted","content":"Installation"},{"heading":"self-hosted","content":"Environment Variables"},{"heading":"self-hosted","content":"Upgrading"},{"heading":"sign-up-for-a-nocodb-account","content":"To get started with NocoDB's cloud-hosted service, follow these steps to sign up for an account:"},{"heading":"sign-up-for-a-nocodb-account","content":"Visit the NocoDB website."},{"heading":"sign-up-for-a-nocodb-account","content":"Click on the \"Start For Free\" button located in the top right corner."},{"heading":"sign-up-for-a-nocodb-account","content":"Sign Up using Google account. Alternatively, you can also sign up using your email address."},{"heading":"sign-up-for-a-nocodb-account","content":"Check your email for a verification link and follow the instructions to verify your account."},{"heading":"sign-up-for-a-nocodb-account","content":"Once you've successfully signed up, you will land on the NocoDB dashboard with a default workspace created for you."},{"heading":"create-another-workspace","content":"After signing up and logging in to your NocoDB account, a default workspace is automatically created for you. You can use this workspace or create a new one"},{"heading":"create-another-workspace","content":"Your new workspace is now ready, and you can start building your base within it."},{"heading":"build-a-base","content":"Building a base in NocoDB is where you define the structure of your database, create tables to store your data, add fields to those tables, and establish relationships between tables using Links. This relational approach helps you organize and manage your data effectively, making it easier to work with complex datasets and build powerful applications. Add a new Base. Alternatively, you can also import existing base from Airtable as a NocoDB base in minutes."},{"heading":"create-tables","content":"Tables are where you store your data like a spreadsheet grid, with data arranged in rows & columns. Once the base is created, you can start adding new tables to it. You can also import existing structure data from a CSV, Excel, or JSON file to populate your tables."},{"heading":"add-fields","content":"Within each table, define the fields that will hold your data. Fields are columnar data containers that hold a specific type of data. Fields can represent various types of information, such as text, numbers, dates, and more. You can find complete list of supported field types here."},{"heading":"add-fields","content":"Use multi-fields editor to manage fields in bulk quickly - add fields, edit them, reorder, change visibility, reconfigure - all from one single window. Read more."},{"heading":"establish-relationships-with-links","content":"One of NocoDB's powerful features is the ability to establish relationships between tables using Links. Links enable you to connect related data across tables. For example, you can link \"Tasks\" to a specific \"Project\" by creating a Link field in the \"Projects\" table that points to the \"Tasks\" table."},{"heading":"add-records","content":"Once you have created tables and defined the necessary fields, it's time to start adding records to your base tables. Records are individual entries or rows within your tables, and they contain the actual data you want to store and manage. You can add records manually or upload existing data sets from CSV files."},{"heading":"create-views","content":"Views are customized ways of displaying your data. You can create multiple views for each table in your base, and each view can have its own set of fields, filters, and layouts. NocoDB offers a variety of view types for custom display, including Grid, Kanban, Gallery and Calendar. If you are collecting data from a form, you can also create a Form view to display the data in a form format."},{"heading":"connect-your-data-sources","content":"Not just creating base & tables from the scratch, NocoDB also allows you to get started quickly by connecting to your existing data sources & bring the comfort of spreadsheet UI to your data source."},{"heading":"collaborate-with-your-team","content":"NocoDB makes it easy to collaborate with your team members on your workspaces and bases. You can invite team members to your workspace and share your bases with them. You can also assign roles and permissions to your team members to control their access to your bases."},{"heading":"collaborate-with-your-team","content":"Want to share information publicly? You can create a public link to your base and share it with anyone. You can also embed your base on your website or blog."},{"heading":"collaborate-with-your-team","content":"That's it! You're now ready to harness the power of NocoDB for your data management needs."}],"headings":[{"id":"self-hosted","content":"Self Hosted"},{"id":"saas-cloud-hosted","content":"SaaS (Cloud Hosted)"},{"id":"sign-up-for-a-nocodb-account","content":"Sign up for a NocoDB account"},{"id":"create-another-workspace","content":"Create another workspace"},{"id":"build-a-base","content":"Build a Base"},{"id":"create-tables","content":"Create Tables"},{"id":"add-fields","content":"Add Fields"},{"id":"establish-relationships-with-links","content":"Establish Relationships with Links"},{"id":"add-records","content":"Add Records"},{"id":"create-views","content":"Create views"},{"id":"connect-your-data-sources","content":"Connect your data sources"},{"id":"collaborate-with-your-team","content":"Collaborate with your team"}]},"url":"/docs/product-docs/getting-started","title":"Getting started"},{"_id":"/docs/product-docs/getting-started/keyboard-shortcuts","structured":{"contents":[{"heading":"quick-actions","content":"⌘ + K (or Ctrl + K on Windows) is a keyboard shortcut to quickly navigate between different workspace, table, view, or a menu items. For example, if you want to quickly navigate to the \"API Tokens\" page, you can open Quick Actions menu using ⌘+K, type \"Token\" in the search box and press enter."},{"heading":"quick-actions","content":"This shortcut is often referred to as \"Command-K\". It's a great way to save time when you're navigating around NocoDB."},{"heading":"quick-actions","content":"Command-K menu can also be accessed via the \"Quick Actions\" button in the top left corner of the screen."},{"heading":"quick-actions","content":"To navigate within ⌘+K menu,"},{"heading":"quick-actions","content":"Use ↑ ↓ to navigate between listed items"},{"heading":"quick-actions","content":"Use Enter to select an item"},{"heading":"quick-actions","content":"Use Backspace to move to parent menu"},{"heading":"quick-actions","content":"Use Esc to close the menu"},{"heading":"recent-views","content":"Access recently visited views quickly using ⌘ + L (or Ctrl + L on Windows). Search results will be displayed in a modal window; click on the result to open the view."},{"heading":"recent-views","content":"To navigate within ⌘+L menu,"},{"heading":"recent-views","content":"Use ↑ ↓ to navigate between listed items"},{"heading":"recent-views","content":"Use Enter to select an item"},{"heading":"recent-views","content":"Use Backspace to move to parent menu"},{"heading":"recent-views","content":"Use Esc to close the menu"},{"heading":"search-in-docs","content":"Quickly search through docs from within NocoDB UI using ⌘ + J (or Ctrl + J on Windows). Search results will be displayed in a modal window; click on the result to open the page in a new tab."},{"heading":"search-in-docs","content":"To navigate within ⌘+J menu,"},{"heading":"search-in-docs","content":"Use ↑ ↓ to navigate between listed items"},{"heading":"search-in-docs","content":"Use Enter to select an item"},{"heading":"search-in-docs","content":"Use Backspace to move to parent menu"},{"heading":"search-in-docs","content":"Use Esc to close the menu"},{"heading":"general-shortcuts","content":"Key"},{"heading":"general-shortcuts","content":"Behaviour"},{"heading":"general-shortcuts","content":"alt + t"},{"heading":"general-shortcuts","content":"Opens new table modal"},{"heading":"general-shortcuts","content":"alt + c"},{"heading":"general-shortcuts","content":"Opens new field modal"},{"heading":"general-shortcuts","content":"alt + f"},{"heading":"general-shortcuts","content":"Toggles fullscreen mode"},{"heading":"general-shortcuts","content":"alt + i"},{"heading":"general-shortcuts","content":"Opens share button modal"},{"heading":"general-shortcuts","content":"⌘ + k"},{"heading":"general-shortcuts","content":"Opens Quick Actions modal"},{"heading":"general-shortcuts","content":"⌘ + l"},{"heading":"general-shortcuts","content":"Opens Recent Views modal"},{"heading":"general-shortcuts","content":"⌘ + j"},{"heading":"general-shortcuts","content":"Opens Search in Docs modal"},{"heading":"general-shortcuts","content":"⌘ + /"},{"heading":"general-shortcuts","content":"Opens Keyboard shortcut modal"},{"heading":"grid-view-shortcuts","content":"Key"},{"heading":"grid-view-shortcuts","content":"Behaviour"},{"heading":"grid-view-shortcuts","content":"← → ↑ ↓"},{"heading":"grid-view-shortcuts","content":"General cell navigation"},{"heading":"grid-view-shortcuts","content":"Delete"},{"heading":"grid-view-shortcuts","content":"Clear cell"},{"heading":"grid-view-shortcuts","content":"Space"},{"heading":"grid-view-shortcuts","content":"Expand current record"},{"heading":"grid-view-shortcuts","content":"Shift + Space"},{"heading":"grid-view-shortcuts","content":"Expand current cell"},{"heading":"grid-view-shortcuts","content":"Tab"},{"heading":"grid-view-shortcuts","content":"Move to next cell horizontally; if on last cell, move to beginning of next record"},{"heading":"grid-view-shortcuts","content":"Esc"},{"heading":"grid-view-shortcuts","content":"Exit cell EDIT mode"},{"heading":"grid-view-shortcuts","content":"Enter"},{"heading":"grid-view-shortcuts","content":"Switch cell in focus to EDIT mode; opens modal/picker if cell is associated with one"},{"heading":"grid-view-shortcuts","content":"⌘ + ↑"},{"heading":"grid-view-shortcuts","content":"Jump to first record in this field (in same page)"},{"heading":"grid-view-shortcuts","content":"⌘ + ↓"},{"heading":"grid-view-shortcuts","content":"Jump to last record in this field (in same page)"},{"heading":"grid-view-shortcuts","content":"⌘ + ←"},{"heading":"grid-view-shortcuts","content":"Jump to first field in this record"},{"heading":"grid-view-shortcuts","content":"⌘ + →"},{"heading":"grid-view-shortcuts","content":"Jump to last field in this record"},{"heading":"grid-view-shortcuts","content":"⌘ + c"},{"heading":"grid-view-shortcuts","content":"Copy cell contents"},{"heading":"grid-view-shortcuts","content":"⌘ + v"},{"heading":"grid-view-shortcuts","content":"Paste copied contents"},{"heading":"grid-view-shortcuts","content":"alt + r"},{"heading":"grid-view-shortcuts","content":"Inserts new record in grid view"},{"heading":"grid-view-shortcuts","content":"alt + ↑"},{"heading":"grid-view-shortcuts","content":"Jump to last page in this view (obsolete)"},{"heading":"grid-view-shortcuts","content":"alt + ↓"},{"heading":"grid-view-shortcuts","content":"Jump to first page in this view (obsolete)"},{"heading":"grid-view-shortcuts","content":"alt + ←"},{"heading":"grid-view-shortcuts","content":"Jump to previous page in this view (obsolete)"},{"heading":"grid-view-shortcuts","content":"alt + →"},{"heading":"grid-view-shortcuts","content":"Jump to next page in this view (obsolete)"},{"heading":"field-type-specific-shortcuts","content":"Datatype"},{"heading":"field-type-specific-shortcuts","content":"Key"},{"heading":"field-type-specific-shortcuts","content":"Behaviour"},{"heading":"field-type-specific-shortcuts","content":"Text & Numerical cells"},{"heading":"field-type-specific-shortcuts","content":"← →"},{"heading":"field-type-specific-shortcuts","content":"Move cursor to the left / right"},{"heading":"field-type-specific-shortcuts","content":"↑ ↓"},{"heading":"field-type-specific-shortcuts","content":"Move cursor to the beginning / end"},{"heading":"field-type-specific-shortcuts","content":"Single Select"},{"heading":"field-type-specific-shortcuts","content":"↑ ↓"},{"heading":"field-type-specific-shortcuts","content":"Move between options"},{"heading":"field-type-specific-shortcuts","content":"Enter"},{"heading":"field-type-specific-shortcuts","content":"Select option"},{"heading":"field-type-specific-shortcuts","content":"Multi Select"},{"heading":"field-type-specific-shortcuts","content":"↑ ↓"},{"heading":"field-type-specific-shortcuts","content":"Move between options"},{"heading":"field-type-specific-shortcuts","content":"Enter"},{"heading":"field-type-specific-shortcuts","content":"Select / deselect option"},{"heading":"field-type-specific-shortcuts","content":"Link"},{"heading":"field-type-specific-shortcuts","content":"↑ ↓"},{"heading":"field-type-specific-shortcuts","content":"Move between options"},{"heading":"field-type-specific-shortcuts","content":"Enter"},{"heading":"field-type-specific-shortcuts","content":"Link current selection"},{"heading":"field-type-specific-shortcuts","content":"Checkbox"},{"heading":"field-type-specific-shortcuts","content":"Enter"},{"heading":"field-type-specific-shortcuts","content":"Toggle"},{"heading":"field-type-specific-shortcuts","content":"Rating"},{"heading":"field-type-specific-shortcuts","content":"<0 ~ Max>"},{"heading":"field-type-specific-shortcuts","content":"Enter number to toggle rating"},{"heading":"field-type-specific-shortcuts","content":"Date / Time / DateTime / Year"},{"heading":"field-type-specific-shortcuts","content":"⌘ + ;"},{"heading":"field-type-specific-shortcuts","content":"Select today's date"},{"heading":"expanded-form-shortcuts","content":"Key"},{"heading":"expanded-form-shortcuts","content":"Behaviour"},{"heading":"expanded-form-shortcuts","content":"⌘ + Enter"},{"heading":"expanded-form-shortcuts","content":"Save current expanded form item"},{"heading":"expanded-form-shortcuts","content":"alt + →"},{"heading":"expanded-form-shortcuts","content":"Switch to next record"},{"heading":"expanded-form-shortcuts","content":"alt + ←"},{"heading":"expanded-form-shortcuts","content":"Switch to previous record"},{"heading":"expanded-form-shortcuts","content":"alt + S"},{"heading":"expanded-form-shortcuts","content":"Save current expanded form record"},{"heading":"expanded-form-shortcuts","content":"alt + N"},{"heading":"expanded-form-shortcuts","content":"Create a new record"}],"headings":[{"id":"quick-actions","content":"Quick Actions"},{"id":"recent-views","content":"Recent Views"},{"id":"search-in-docs","content":"Search in Docs"},{"id":"general-shortcuts","content":"General shortcuts"},{"id":"grid-view-shortcuts","content":"Grid view shortcuts"},{"id":"field-type-specific-shortcuts","content":"Field type specific shortcuts"},{"id":"expanded-form-shortcuts","content":"Expanded form shortcuts"}]},"url":"/docs/product-docs/getting-started/keyboard-shortcuts","title":"Keyboard shortcuts"},{"_id":"/docs/product-docs/getting-started/license","structured":{"contents":[{"content":"As of January 09, 2026 - NocoDB is transitioning from AGPL-3.0 to a Sustainable Use License (SUL), based on Fair-Code principles."},{"content":"👉 View the full license terms here"},{"content":"This change is intended to:"},{"content":"Keep NocoDB open and accessible"},{"content":"Protect the work of maintainers and contributors"},{"content":"Ensure long-term sustainability of the project"},{"content":"Provide clear and predictable rules for commercial usage"},{"heading":"fair-code-philosophy","content":"Fair-Code is a licensing philosophy that balances:"},{"heading":"fair-code-philosophy","content":"Open access to source code"},{"heading":"fair-code-philosophy","content":"Freedom to use, modify, and self-host"},{"heading":"fair-code-philosophy","content":"Fair compensation when the software itself is monetized"},{"heading":"fair-code-philosophy","content":"Fair-code does not aim to restrict usage. Its goal is to prevent large-scale commercial exploitation where the software is monetized without supporting the people building it."},{"heading":"sustainable-use-license-sul","content":"The Sustainable Use License is one implementation of fair-code principles."},{"heading":"sul-allows","content":"Free use for individuals and organizations"},{"heading":"sul-allows","content":"Full access to source code"},{"heading":"sul-allows","content":"Self-hosting without restrictions"},{"heading":"sul-allows","content":"Modification for internal or product use"},{"heading":"sul-restricts","content":"Offering NocoDB itself as a paid or managed service"},{"heading":"sul-restricts","content":"Redistributing NocoDB as part of a commercial platform without a license"},{"heading":"sustainability","content":"AGPL-3.0 permits commercial reuse at scale without ensuring ongoing support for maintainers. SUL enables continued investment in development, documentation, and support."},{"heading":"community-protection","content":"The license protects contributors by ensuring that commercial value derived directly from NocoDB supports the ecosystem."},{"heading":"clear-commercial-boundaries","content":"SUL clearly defines when commercial licensing is required, reducing ambiguity around SaaS and redistribution scenarios."},{"heading":"free-use-no-commercial-license-required","content":"You may use NocoDB freely if you are:"},{"heading":"free-use-no-commercial-license-required","content":"An individual developer"},{"heading":"free-use-no-commercial-license-required","content":"A startup or enterprise using NocoDB internally"},{"heading":"free-use-no-commercial-license-required","content":"Self-hosting NocoDB for internal tools or workflows"},{"heading":"free-use-no-commercial-license-required","content":"Building an application or product that uses NocoDB internally"},{"heading":"free-use-no-commercial-license-required","content":"Using NocoDB for education, research, or non-commercial purposes"},{"heading":"free-use-no-commercial-license-required","content":"Internal usage is permitted regardless of organization size."},{"heading":"commercial-license-required","content":"A commercial license is required if you:"},{"heading":"commercial-license-required","content":"Offer NocoDB as a hosted or managed service"},{"heading":"commercial-license-required","content":"Provide direct NocoDB access to external customers"},{"heading":"commercial-license-required","content":"Resell or redistribute NocoDB as part of a paid offering"},{"heading":"commercial-license-required","content":"Embed NocoDB in a platform where customers interact with NocoDB itself"},{"heading":"commercial-license-required","content":"If your business model monetizes access to NocoDB, a commercial license is required. If you need assistance determining your licensing needs, please contact the NocoDB team. Details here"},{"heading":"what-remains-unchanged","content":"Source code remains available"},{"heading":"what-remains-unchanged","content":"Self-hosting remains supported"},{"heading":"what-remains-unchanged","content":"Community contributions remain welcome"},{"heading":"what-remains-unchanged","content":"APIs, integrations, and extensions remain open"},{"heading":"what-remains-unchanged","content":"This is not a move to closed source."},{"heading":"is-nocodb-still-open-source","content":"NocoDB is source-available under fair-code principles. While SUL is not OSI-approved, it preserves transparency, extensibility, and community access."},{"heading":"can-i-self-host-nocodb-for-my-company","content":"Yes. Internal self-hosting does not require a commercial license."},{"heading":"can-i-modify-nocodbs-source-code","content":"Yes. You may modify NocoDB for internal use or as part of your product."},{"heading":"what-licenses-are-considered-fair-code-compatible","content":"The following licenses meet fair-code requirements and are commonly referenced in the ecosystem:"},{"heading":"what-licenses-are-considered-fair-code-compatible","content":"Sustainable Use License (SUL)"},{"heading":"what-licenses-are-considered-fair-code-compatible","content":"Business Source License (BSL)"},{"heading":"what-licenses-are-considered-fair-code-compatible","content":"Commons Clause (with an OSI-approved license)"},{"heading":"what-licenses-are-considered-fair-code-compatible","content":"Confluent Community License"},{"heading":"what-licenses-are-considered-fair-code-compatible","content":"Elastic License 2.0 (ELv2)"},{"heading":"what-licenses-are-considered-fair-code-compatible","content":"Server Side Public License (SSPL)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"Several well-known infrastructure and developer-tool projects use licenses aligned with fair-code principles, including:"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"Airbyte (Elastic License 2.0)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"CockroachDB (Business Source License)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"Elastic (Elastic License 2.0)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"HashiCorp (Business Source License)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"MongoDB (Server Side Public License)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"n8n (Sustainable Use License)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"Sentry (Business Source License)"},{"heading":"which-projects-follow-fair-code-compatible-licenses","content":"These projects follow a similar approach: open access for builders, with licensing required when the software itself is monetized."},{"heading":"why-move-away-from-agpl-30","content":"AGPL-3.0 does not sufficiently address large-scale commercial redistribution. SUL provides clearer, more predictable rules while preserving openness and community access."},{"heading":"how-do-i-obtain-a-commercial-license","content":"Contact the NocoDB team through official channels to discuss commercial licensing options."},{"heading":"how-do-i-obtain-a-commercial-license","content":"Use in-product support chat for inquiries."},{"heading":"how-do-i-obtain-a-commercial-license","content":"Request details over Email (cs@nocodb.com)."},{"heading":"how-do-i-obtain-a-commercial-license","content":"Book a meeting via Cal."},{"heading":"summary","content":"The Sustainable Use License ensures that NocoDB remains:"},{"heading":"summary","content":"Open and accessible for builders"},{"heading":"summary","content":"Fair to contributors and maintainers"},{"heading":"summary","content":"Sustainable for long-term development"},{"heading":"summary","content":"For most users, nothing changes. For commercial redistribution, licensing ensures fairness and continued innovation."}],"headings":[{"id":"fair-code-philosophy","content":"Fair-Code Philosophy"},{"id":"sustainable-use-license-sul","content":"Sustainable Use License (SUL)"},{"id":"sul-allows","content":"SUL allows"},{"id":"sul-restricts","content":"SUL restricts"},{"id":"why-this-change","content":"Why This Change"},{"id":"sustainability","content":"Sustainability"},{"id":"community-protection","content":"Community Protection"},{"id":"clear-commercial-boundaries","content":"Clear Commercial Boundaries"},{"id":"usage-rights","content":"Usage Rights"},{"id":"free-use-no-commercial-license-required","content":"Free Use (No Commercial License Required)"},{"id":"commercial-license-required","content":"Commercial License Required"},{"id":"what-remains-unchanged","content":"What Remains Unchanged"},{"id":"frequently-asked-questions","content":"Frequently Asked Questions"},{"id":"is-nocodb-still-open-source","content":"Is NocoDB still open source?"},{"id":"can-i-self-host-nocodb-for-my-company","content":"Can I self-host NocoDB for my company?"},{"id":"can-i-modify-nocodbs-source-code","content":"Can I modify NocoDB’s source code?"},{"id":"what-licenses-are-considered-fair-code-compatible","content":"What licenses are considered fair-code compatible?"},{"id":"which-projects-follow-fair-code-compatible-licenses","content":"Which projects follow fair-code-compatible licenses?"},{"id":"why-move-away-from-agpl-30","content":"Why move away from AGPL-3.0?"},{"id":"how-do-i-obtain-a-commercial-license","content":"How do I obtain a commercial license?"},{"id":"summary","content":"Summary"}]},"url":"/docs/product-docs/getting-started/license","title":"License","description":"Understanding NocoDB’s Sustainable Use License (SUL) and Fair-Code principles."},{"_id":"/docs/product-docs/getting-started/terminologies","structured":{"contents":[{"content":"To maximize your use of NocoDB, it's beneficial to become familiar with some common terms."},{"content":"Within this section, we've provided straightforward explanations for keywords and phrases that are relevant to NocoDB's functionality and capabilities. This resource is designed to assist you in gaining a deeper understanding of NocoDB as you embark on the process of setting up workspaces, bases, tables, and various other elements within the platform."},{"heading":"layout","content":"The layout below shows the main parts of NocoDB's user interface."},{"heading":"layout","content":"Minibar: The Minibar is a compact vertical bar that provides quick access to essential features like the search bar, notifications, and user profile settings."},{"heading":"layout","content":"Sidebar: This component provides quick access to workspaces, bases, tables, and views, facilitating easy navigation within NocoDB."},{"heading":"layout","content":"Navbar: In the Navbar, you'll find essential tools like the Switcher, allowing users to switch between data mode and details mode, and the Share button for collaborative workspace and view sharing."},{"heading":"layout","content":"Toolbar: The Toolbar equips users with various tools to manage records within tables and views effectively. It includes features for sorting, filtering, and editing data, enhancing your control over information."},{"heading":"layout","content":"View Area: The central workspace where data can be viewed in multiple formats - Grid, Gallery, Kanban or Form."},{"heading":"layout","content":"Footbar: Displays record / group count. Additionally, if field aggregation is enabled, it shows the aggregated values for the selected fields."},{"heading":"terminologies","content":"Term"},{"heading":"terminologies","content":"Description"},{"heading":"terminologies","content":"Base (aka Project)"},{"heading":"terminologies","content":"A base is a container for one or more related data sources, each comprising multiple tables. These tables can be linked to represent relationships between datasets. Think of a base as a project workspace for organizing structured data."},{"heading":"terminologies","content":"Base Owner"},{"heading":"terminologies","content":"A base owner is the member who initially creates the base. Ownership can be extended to other members by assigning them the owner role within the base. Owners have full administrative privileges over the base."},{"heading":"terminologies","content":"Base Member"},{"heading":"terminologies","content":"A base member is any user with access to a base, assigned a specific role that defines their permissions such as read-only, editor, creator, or owner."},{"heading":"terminologies","content":"Cell"},{"heading":"terminologies","content":"A cell is the intersection of a row and a column in a table. It holds the actual value of a field in a specific record and represents the most granular unit of data in the grid view."},{"heading":"terminologies","content":"Field (aka Column)"},{"heading":"terminologies","content":"A field is a named data container within a table that holds values of a specific type (e.g., text, number, date). All records in a table share the same set of fields."},{"heading":"terminologies","content":"Record (aka Row)"},{"heading":"terminologies","content":"A record is a single entry in a table, represented as a row. It contains values across multiple fields and is used to store individual data instances."},{"heading":"terminologies","content":"Table (aka Model)"},{"heading":"terminologies","content":"A table organizes data into rows (records) and columns (fields). Each table can represent a distinct entity and can be linked to other tables through relationships."},{"heading":"terminologies","content":"View"},{"heading":"terminologies","content":"A view defines how records in a table are displayed and interacted with. NocoDB supports multiple view types including Grid, Form, Gallery, Calendar, and Kanban views."},{"heading":"terminologies","content":"Modal"},{"heading":"terminologies","content":"A modal is a UI overlay that captures user attention for a specific task or interaction, such as editing a record or confirming an action. It temporarily blocks access to the rest of the interface until dismissed."},{"heading":"terminologies","content":"Webhook"},{"heading":"terminologies","content":"A webhook enables real-time communication between NocoDB and external services. It automatically sends data to a specified URL when a configured event occurs, facilitating integrations and automations."},{"heading":"terminologies","content":"Workspace"},{"heading":"terminologies","content":"A workspace is a top-level organizational unit that contains one or more bases. It facilitates collaboration by managing user access and permissions across multiple bases and tables."},{"heading":"terminologies","content":"Workspace Owner"},{"heading":"terminologies","content":"A workspace owner is the user who created the workspace. Additional members can be assigned owner privileges to manage users, roles, and other workspace-level settings."},{"heading":"terminologies","content":"Workspace Member"},{"heading":"terminologies","content":"A workspace member is a user who has access to the workspace with defined permissions. Members can be assigned roles such as viewer, editor, or admin depending on their responsibilities."}],"headings":[{"id":"layout","content":"Layout"},{"id":"terminologies","content":"Terminologies"}]},"url":"/docs/product-docs/getting-started/terminologies","title":"NocoDB terminologies"},{"_id":"/docs/product-docs/integrations/actions-on-connection","structured":{"contents":[{"heading":"list","content":"To list all the connections in NocoDB, follow the steps below:"},{"heading":"list","content":"Select the Integrations menu in the left sidebar."},{"heading":"list","content":"Click on the Connections tab"},{"heading":"list","content":"Connections list provides a consolidated view of all the connections in this workspace. The details include"},{"heading":"list","content":"Connection name, as specified during creation"},{"heading":"list","content":"Connection type, i.e., the integration type [Example: PG, MySQL]"},{"heading":"list","content":"Date added, specifies the date when this connection was created"},{"heading":"list","content":"Added by, specifies the user who created this connection"},{"heading":"list","content":"Usage, depends on the type of the integration"},{"heading":"list","content":"for database type integrations, this would specify the number of data sources using this connection"},{"heading":"list","content":"type: info"},{"heading":"list","content":"Note that, there is no ownership concept for connections in NocoDB. All the connections created in a workspace are accessible to all eligible users in that workspace."},{"heading":"list","content":"Users with Workspace Creator+ permissions can create, edit, duplicate, and delete connections"},{"heading":"list","content":"Users with Base Creator+ permissions can create data sources using these connections"},{"heading":"edit","content":"To edit a connection in NocoDB, Open the Connections list and follow the steps below:"},{"heading":"edit","content":"Click on the Connection you want to edit"},{"heading":"edit","content":"Modify the required details in the subsequent modal"},{"heading":"edit","content":"Test connection if applicable"},{"heading":"edit","content":"Applicable if you have updated the connection details for a database integration"},{"heading":"edit","content":"Click on the Update connection button to save the changes"},{"heading":"duplicate","content":"To duplicate a connection in NocoDB, Open the Connections list and follow the steps below:"},{"heading":"duplicate","content":"Click on the Action menu (three dots) against the Connection you want to duplicate"},{"heading":"duplicate","content":"Select the Duplicate option from the dropdown"},{"heading":"duplicate","content":"Duplicated base will be created with the same connection details as the original connection - with connection name for the duplicated entry suffixed with _copy."},{"heading":"delete","content":"To delete a connection in NocoDB, Open the Connections list and follow the steps below:"},{"heading":"delete","content":"Click on the Action menu (three dots) against the Connection you want to delete"},{"heading":"delete","content":"Select the Delete option from the dropdown"},{"heading":"delete","content":"Click on the Delete button in the subsequent modal to confirm deletion"},{"heading":"delete","content":"type: warn"},{"heading":"delete","content":"Note that, deleting a database connection will remove all the associated data sources using this connection from all the bases in this workspace."}],"headings":[{"id":"list","content":"List"},{"id":"edit","content":"Edit"},{"id":"duplicate","content":"Duplicate"},{"id":"delete","content":"Delete"}]},"url":"/docs/product-docs/integrations/actions-on-connection","title":"Actions on connection","description":"Learn how to perform actions (edit, duplicate, delete) on a connection in NocoDB."},{"_id":"/docs/product-docs/integrations/create-connection","structured":{"contents":[{"content":"Users with Workspace Owner or Workspace Creator roles can create a new connection in NocoDB. To create a new connection, follow the steps below:"},{"content":"Click on the Integrations menu in the left minibar."},{"content":"From the list, click on the integration you want to connect to"},{"content":"In the subsequent modal, provide required details. Please refer to the integration-specific documentation for more details."},{"content":"PostgreSQL"},{"content":"MySQL"},{"content":"Connection to an integration thus created will be listed in the Connections tab under the Integrations menu."},{"content":"type: info"},{"content":"Note that, there is no ownership concept for connections in NocoDB. All the connections created in a workspace are accessible to all eligible users in that workspace."},{"content":"Users with Workspace Creator+ permissions can create, edit, duplicate, and delete connections"},{"content":"Users with Base Creator+ permissions can create data sources using database connections"},{"heading":"postgresql","content":"This section covers the details required to create a new PostgreSQL connection in NocoDB."},{"heading":"postgresql","content":"Connection Name: Name for this connection for display on NocoDB UI"},{"heading":"postgresql","content":"Key in following database connection configuration details"},{"heading":"postgresql","content":"Host Address: Hostname of the PostgreSQL server"},{"heading":"postgresql","content":"Port Number: Port number of the PostgreSQL server, default is 5432"},{"heading":"postgresql","content":"Username: Username to connect to the PostgreSQL server, default is \"postgres\""},{"heading":"postgresql","content":"Password: Password to connect to the PostgreSQL server"},{"heading":"postgresql","content":"[Optional] Database: Name of the PostgreSQL database to connect to"},{"heading":"postgresql","content":"[Optional] Schema Name: Name of the schema to connect to\n:::info\nNote, Database name & Schema name are optional fields when creating a connection. If provided, these details will be filled in by default when creating a new data source using this connection.\n:::"},{"heading":"postgresql","content":"Connection parameters: required if any, can be added as Key-Value pairs"},{"heading":"postgresql","content":"SSL Mode: This step is required if the connection required is TLS/MTLS for MITM protection. Toggle to enable SSL for the connection & select the SSL mode"},{"heading":"postgresql","content":"Client Certificate: Upload the client certificate file"},{"heading":"postgresql","content":"Client Key: Upload the client key file"},{"heading":"postgresql","content":"Root CA: Upload the Root CA file"},{"heading":"postgresql","content":"Test Database Connection: Click to verify the connection"},{"heading":"postgresql","content":"Create Connection: Click to save the data source"},{"heading":"postgresql","content":"The connection thus created will be listed in the Connections tab under the Integrations menu."},{"heading":"postgresql","content":"type: info"},{"heading":"postgresql","content":"You can autofill the connection details if you have a connection URL."},{"heading":"postgresql","content":"type: info"},{"heading":"postgresql","content":"The entire connection parameters can be viewed in JSON form by clicking on the Advanced Options and edited as required by database server type."},{"heading":"postgresql","content":"Example: When SSL mode set to \"Required-Identity,\" if the server certificate's common name (cname) differs from the actual DNS/IP used for connection, the connection will fail. To resolve, add \"servername\" property with same cname value under the SSL section. Additional details are available at knex configuration options."},{"heading":"mysql","content":"This section covers the details required to create a new MySQL connection in NocoDB."},{"heading":"mysql","content":"Connection Name: Name for this connection for display on NocoDB UI"},{"heading":"mysql","content":"Key in following database connection configuration details"},{"heading":"mysql","content":"Host Address: Hostname of the MySQL server"},{"heading":"mysql","content":"Port Number: Port number of the MySQL server, default is 3306"},{"heading":"mysql","content":"Username: Username to connect to the MySQL server, default is \"root\""},{"heading":"mysql","content":"Password: Password to connect to the MySQL server"},{"heading":"mysql","content":"[Optional] Database: Name of the MySQL database to connect to"},{"heading":"mysql","content":"type: info"},{"heading":"mysql","content":"Connection parameters: required if any, can be added as Key-Value pairs"},{"heading":"mysql","content":"SSL Mode: This step is required if the connection required is TLS/MTLS for MITM protection. Toggle to enable SSL for the connection & select the SSL mode"},{"heading":"mysql","content":"Client Certificate: Upload the client certificate file"},{"heading":"mysql","content":"Client Key: Upload the client key file"},{"heading":"mysql","content":"Root CA: Upload the Root CA file"},{"heading":"mysql","content":"Test Database Connection: Click to verify the connection"},{"heading":"mysql","content":"Create Connection: Click to save the data source"},{"heading":"mysql","content":"The connection thus created will be listed in the Connections tab under the Integrations menu."},{"heading":"mysql","content":"type: info"},{"heading":"mysql","content":"You can autofill the connection details if you have a connection URL."},{"heading":"mysql","content":"type: info"},{"heading":"mysql","content":"The entire connection parameters can be viewed in JSON form by clicking on the Advanced Options and edited as required by database server type."},{"heading":"mysql","content":"Example: When SSL mode set to \"Required-Identity,\" if the server certificate's common name (cname) differs from the actual DNS/IP used for connection, the connection will fail. To resolve, add \"servername\" property with same cname value under the SSL section. Additional details are available at knex configuration options."},{"heading":"twilio","content":"This section covers the details required to create a new Twilio integration in NocoDB."},{"heading":"twilio","content":"Integration Name:\nEnter a name for this integration as it should appear in the NocoDB UI"},{"heading":"twilio","content":"Authentication Type:\nSelect API credentials as the authentication method."},{"heading":"twilio","content":"Account SID:\nEnter your Twilio Account SID.\nThis can be obtained from the Twilio Console under Account Info."},{"heading":"twilio","content":"Auth Token\nEnter your Twilio Auth Token, available in the Twilio Console under Account Info.\nEnsure this value is stored securely."},{"heading":"twilio","content":"Test Connection\nClick Test connection to verify that the provided credentials are valid and that NocoDB can connect to Twilio."},{"heading":"twilio","content":"Create Integration\nClick Create integration to save the connection."},{"heading":"twilio","content":"Once created, the Twilio integration will be listed in the Connections tab under the Integrations menu and can be used across eligible features that support Twilio."},{"heading":"twilio","content":"type: info"},{"heading":"twilio","content":"References"},{"heading":"twilio","content":"Twilio Console"},{"heading":"twilio","content":"Twilio Documentation"}],"headings":[{"id":"database-integrations","content":"Database Integrations"},{"id":"postgresql","content":"PostgreSQL"},{"id":"mysql","content":"MySQL"},{"id":"communication-integrations","content":"Communication Integrations"},{"id":"twilio","content":"Twilio"}]},"url":"/docs/product-docs/integrations/create-connection","title":"Connect to an Integration","description":"Learn how to create a new connection in NocoDB."},{"_id":"/docs/product-docs/integrations","structured":{"contents":[{"content":"Integrations enable seamless connectivity between NocoDB and external platforms. This helps consolidate your data scattered across multiple silos into one common platform."},{"content":"You can add multiple instances of an integration within a single workspace, with each instance referred to as a Connection. Once established, these connections allow you to utilize data from the integrated platforms in your NocoDB base. If applicable, changes made in NocoDB can also be synchronized back to the external platforms."},{"content":"Currently, NocoDB supports integrations with databases such as MySQL and PostgreSQL, with additional integrations planned for the future. If you have a specific integration in mind, please let us know by submitting your request using \"Request Integration\" option in the Integrations menu."},{"content":"type: info"},{"content":"In Cloud hosted solutions, Integrations menu will be accessible for Workspace Owners & Workspace Creators."},{"content":"In Self-hosted solutions (OSS), Integrations menu will be accessible for Organization Admins & Organization Creators."},{"content":"All activities related to integrations and their connections can be efficiently managed from the Integrations menu, conveniently located in the left sidebar."},{"content":"Learn more about working with integrations in the following sections:"},{"content":"Create a new connection"},{"content":"Edit connection"},{"content":"Delete connection"}],"headings":[]},"url":"/docs/product-docs/integrations","title":"Integrations","description":"Overview of the integrations available in NocoDB"},{"_id":"/docs/product-docs/noco-ai/create-base","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"NocoAI lets you instantly generate a complete base — including tables, views, fields, and relationships — just by describing your needs in natural language. Perfect for non-technical users, fast prototyping, and workflow automation."},{"heading":"steps-to-create-a-base-using-ai","content":"Click Create Base"},{"heading":"steps-to-create-a-base-using-ai","content":"From the left sidebar, click + Create Base."},{"heading":"steps-to-create-a-base-using-ai","content":"Choose Build Base with AI"},{"heading":"steps-to-create-a-base-using-ai","content":"In the dialog, select ✨ Build Base with AI to use AI-powered base generation."},{"heading":"steps-to-create-a-base-using-ai","content":"Select a Use Case (Optional)"},{"heading":"steps-to-create-a-base-using-ai","content":"Choose a predefined use case to auto-fill a sample prompt."},{"heading":"steps-to-create-a-base-using-ai","content":"OR Write Your Own Prompt"},{"heading":"steps-to-create-a-base-using-ai","content":"You can edit the suggested prompt or enter your own.\nFor example:"},{"heading":"steps-to-create-a-base-using-ai","content":"Streamline the hiring process by managing candidate applications, scheduling interviews, and tracking hiring outcomes."},{"heading":"steps-to-create-a-base-using-ai","content":"Add Additional Context (Optional)"},{"heading":"steps-to-create-a-base-using-ai","content":"Provide more details like organization name, industry, and audience to help tailor AI results."},{"heading":"steps-to-create-a-base-using-ai","content":"Click Suggest Tables & Views"},{"heading":"steps-to-create-a-base-using-ai","content":"NocoAI will analyze your prompt and generate the recommended schema."},{"heading":"steps-to-create-a-base-using-ai","content":"Review Tables and Views"},{"heading":"steps-to-create-a-base-using-ai","content":"You’ll see all suggested tables and their associated views."},{"heading":"steps-to-create-a-base-using-ai","content":"Review Relationships using ERD"},{"heading":"steps-to-create-a-base-using-ai","content":"Switch to the Relationship Diagram tab to view an auto-generated ERD (Entity Relationship Diagram)."},{"heading":"steps-to-create-a-base-using-ai","content":"Click Create Base"},{"heading":"steps-to-create-a-base-using-ai","content":"Once you’re happy with the structure, click Create Base to finalize and start using it."},{"heading":"tips-for-better-ai-suggestions","content":"Be clear and specificAvoid vague descriptions like “make a project tracker.” Instead, try:"},{"heading":"tips-for-better-ai-suggestions","content":"Track multiple projects with assigned team members, tasks, deadlines, and project status updates."},{"heading":"tips-for-better-ai-suggestions","content":"Mention key entities and relationshipsInclude what you want to manage and how they relate."},{"heading":"tips-for-better-ai-suggestions","content":"Each candidate can apply to multiple job openings and be scheduled for multiple interviews."},{"heading":"tips-for-better-ai-suggestions","content":"Add extra contextUse fields like Industry or Audience to help guide the AI."},{"heading":"tips-for-better-ai-suggestions","content":"Start simple, refine laterYou can edit the prompt and regenerate suggestions if needed."},{"heading":"next-steps","content":"Now that your base is created, explore additional NocoAI capabilities:"},{"heading":"next-steps","content":"AI-assisted View Suggestions"},{"heading":"next-steps","content":"AI-assisted Field Suggestions"},{"heading":"next-steps","content":"Prompt-based Formula Generation"},{"heading":"next-steps","content":"Smart Select Option predictions"},{"heading":"next-steps","content":"Let AI do the heavy lifting, so you can focus on what matters."}],"headings":[{"id":"overview","content":"Overview"},{"id":"steps-to-create-a-base-using-ai","content":"Steps to Create a Base Using AI"},{"id":"tips-for-better-ai-suggestions","content":"Tips for Better AI Suggestions"},{"id":"next-steps","content":"Next Steps"}]},"url":"/docs/product-docs/noco-ai/create-base","title":"Create Base using AI","description":"Quickly generate a fully-structured base using natural language prompts with NocoAI"},{"_id":"/docs/product-docs/noco-ai/create-field","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"With NocoAI, you can instantly generate a set of fields for your table by describing the kind of data you want to manage. Whether you're setting up a simple list or a complex workflow, NocoAI helps you get started with the right fields in seconds."},{"heading":"steps-to-create-fields-using-ai","content":"Open any existing table where you want to add fields."},{"heading":"steps-to-create-fields-using-ai","content":"Open + Add Field modal"},{"heading":"steps-to-create-fields-using-ai","content":"In the table header, click the + button to the right of the field list."},{"heading":"steps-to-create-fields-using-ai","content":"Use NocoAI Suggestions"},{"heading":"steps-to-create-fields-using-ai","content":"In the field creation dialog, select ✨ Use NocoAI to get AI-powered suggestions."},{"heading":"steps-to-create-fields-using-ai","content":"Choose from Suggested Fields"},{"heading":"steps-to-create-fields-using-ai","content":"NocoAI will analyze your table name, existing fields, and related context to recommend relevant fields. You can edit field names, types, and options as needed."},{"heading":"steps-to-create-fields-using-ai","content":"Click Create [X] Fields"},{"heading":"steps-to-create-fields-using-ai","content":"Select the ones you need and confirm to add them to your table."},{"heading":"tips-for-better-ai-suggestions","content":"Name your table clearly\nFor example, use \"Job Applications\" instead of \"Table 1\" to help NocoAI make better field recommendations."},{"heading":"tips-for-better-ai-suggestions","content":"Think in terms of attributes\nConsider what information each record should store.\nExample: A “Candidate” table may need Full Name, Email, Phone, Resume, Status, and Applied Date."},{"heading":"tips-for-better-ai-suggestions","content":"Leverage existing fields\nNocoAI takes into account your current setup to avoid duplicates and suggest only what's missing."},{"heading":"tips-for-better-ai-suggestions","content":"Use it iteratively\nYou can always run field suggestions multiple times as your table evolves."},{"heading":"example-scenarios","content":"Here are examples of what NocoAI might suggest based on table name:"},{"heading":"example-scenarios","content":"Table Name"},{"heading":"example-scenarios","content":"Suggested Fields"},{"heading":"example-scenarios","content":"Leads"},{"heading":"example-scenarios","content":"Name, Email, Source, Status, Last Contacted"},{"heading":"example-scenarios","content":"Tasks"},{"heading":"example-scenarios","content":"Title, Due Date, Priority, Assigned To, Status"},{"heading":"example-scenarios","content":"Job Applications"},{"heading":"example-scenarios","content":"Candidate Name, Resume, Email, Phone, Application Date"},{"heading":"whats-next","content":"Now that your fields are ready, you can:"},{"heading":"whats-next","content":"Use NocoAI View Suggestions to visualize data more effectively"},{"heading":"whats-next","content":"Create Formulas using AI to automate calculations and logic"},{"heading":"whats-next","content":"Let NocoAI take care of the structure — so you can focus on your workflow."}],"headings":[{"id":"overview","content":"Overview"},{"id":"steps-to-create-fields-using-ai","content":"Steps to Create Fields Using AI"},{"id":"tips-for-better-ai-suggestions","content":"Tips for Better AI Suggestions"},{"id":"example-scenarios","content":"Example Scenarios"},{"id":"whats-next","content":"What's Next"}]},"url":"/docs/product-docs/noco-ai/create-field","title":"Create Fields using AI","description":"Automatically generate relevant fields for your tables using NocoAI."},{"_id":"/docs/product-docs/noco-ai/create-filter","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"With NocoAI, you can now describe what data you want to see in plain English, and have the right filter conditions applied automatically. Instead of manually configuring filter operators, values, and conditions, simply type a description like \"Show high priority tasks due this week\" and NocoAI will set up the filters for you."},{"heading":"overview","content":"This is perfect for quickly narrowing down records, exploring data without remembering filter syntax, or letting non-technical users build complex filter conditions effortlessly."},{"heading":"steps-to-filter-records-using-ai","content":"Open the Filter menu"},{"heading":"steps-to-filter-records-using-ai","content":"Click the Filter button in the toolbar above your table to open the filter panel."},{"heading":"steps-to-filter-records-using-ai","content":"Describe what you want to see"},{"heading":"steps-to-filter-records-using-ai","content":"At the top of the filter panel, you'll see an AI-powered text input with a ✨ icon. Type a natural-language description of the records you want to see."},{"heading":"steps-to-filter-records-using-ai","content":"Example:"},{"heading":"steps-to-filter-records-using-ai","content":"Show high priority tasks that are due this week"},{"heading":"steps-to-filter-records-using-ai","content":"Press Enter or click Send"},{"heading":"steps-to-filter-records-using-ai","content":"NocoAI will analyze your table's structure and generate the appropriate filter conditions."},{"heading":"steps-to-filter-records-using-ai","content":"Filters are applied automatically"},{"heading":"steps-to-filter-records-using-ai","content":"The generated filters appear in the filter panel and are applied to your view immediately — no extra confirmation needed."},{"heading":"supported-actions","content":"NocoAI understands your intent and can perform three types of filter actions:"},{"heading":"supported-actions","content":"Action"},{"heading":"supported-actions","content":"When it's used"},{"heading":"supported-actions","content":"Example prompt"},{"heading":"supported-actions","content":"Add"},{"heading":"supported-actions","content":"Append new filters to existing ones"},{"heading":"supported-actions","content":"\"Also show rows where Status is Done\""},{"heading":"supported-actions","content":"Replace"},{"heading":"supported-actions","content":"Remove all current filters and apply new ones"},{"heading":"supported-actions","content":"\"Show only rows where Score is above 80\""},{"heading":"supported-actions","content":"Clear"},{"heading":"supported-actions","content":"Remove all existing filters"},{"heading":"supported-actions","content":"\"Remove all filters\" or \"Show everything\""},{"heading":"supported-filter-types","content":"NocoAI can generate filters for a wide range of field types:"},{"heading":"supported-filter-types","content":"Field Type"},{"heading":"supported-filter-types","content":"Example Prompts"},{"heading":"supported-filter-types","content":"Text (SingleLineText, Email, URL)"},{"heading":"supported-filter-types","content":"\"Title contains meeting\", \"Title is either A or B\""},{"heading":"supported-filter-types","content":"Number (Number, Decimal, Currency, Percent)"},{"heading":"supported-filter-types","content":"\"Price is greater than 100\", \"Score between 50 and 80\""},{"heading":"supported-filter-types","content":"SingleSelect / MultiSelect"},{"heading":"supported-filter-types","content":"\"Status is either Todo or In progress\", \"Tags include urgent\""},{"heading":"supported-filter-types","content":"Date / DateTime"},{"heading":"supported-filter-types","content":"\"Due this week\", \"Created after 2025-01-01\", \"Modified today\""},{"heading":"supported-filter-types","content":"Checkbox"},{"heading":"supported-filter-types","content":"\"Show only checked items\", \"Where completed is unchecked\""},{"heading":"supported-filter-types","content":"Rating"},{"heading":"supported-filter-types","content":"\"Rating is 4 or above\""},{"heading":"supported-filter-types","content":"NocoAI also understands AND vs OR logic:"},{"heading":"supported-filter-types","content":"\"Priority is High and Status is not Done\" → AND conditions"},{"heading":"supported-filter-types","content":"\"Title is either Alpha or Beta\" → OR conditions"},{"heading":"tips-for-better-ai-filters","content":"Use exact field names when possible"},{"heading":"tips-for-better-ai-filters","content":"NocoAI matches against your table's column names. Using exact names produces more accurate results.\nExample: If your column is called \"Due Date\", say \"Due Date is this week\" instead of \"due soon\"."},{"heading":"tips-for-better-ai-filters","content":"Be specific about values"},{"heading":"tips-for-better-ai-filters","content":"For select fields, use exact option values.\nExample: \"Status is In progress\" works better than \"status is active\" if your options are Todo, In progress, Done."},{"heading":"tips-for-better-ai-filters","content":"Use keywords for clear/replace"},{"heading":"tips-for-better-ai-filters","content":"To remove filters, say \"clear filters\", \"remove all filters\", \"show everything\", or \"reset\".\nTo replace existing filters entirely, start with \"show only ...\" or \"instead show ...\"."},{"heading":"tips-for-better-ai-filters","content":"Start simple, then refine"},{"heading":"tips-for-better-ai-filters","content":"You can add filters incrementally. Start with \"Status is Todo\", then follow up with \"also where Priority is High\"."},{"heading":"tips-for-better-ai-filters","content":"Match filter type with field type"},{"heading":"tips-for-better-ai-filters","content":"Make sure your condition aligns with the field type. Example: Using a filter like \"Price < 50\" will not work if the Price field is a text field. Numeric comparisons only work on number-based fields."},{"heading":"example-prompts-and-outcomes","content":"Prompt"},{"heading":"example-prompts-and-outcomes","content":"Generated Filters"},{"heading":"example-prompts-and-outcomes","content":"\"Show high priority tasks\""},{"heading":"example-prompts-and-outcomes","content":"Priority is equal High"},{"heading":"example-prompts-and-outcomes","content":"\"Title is either Alpha or Beta\""},{"heading":"example-prompts-and-outcomes","content":"Title is equal Alpha OR Title is equal Beta"},{"heading":"example-prompts-and-outcomes","content":"\"Status is Todo or In progress\""},{"heading":"example-prompts-and-outcomes","content":"Status is any of Todo, In progress"},{"heading":"example-prompts-and-outcomes","content":"\"Due this week\""},{"heading":"example-prompts-and-outcomes","content":"Due Date is within next week"},{"heading":"example-prompts-and-outcomes","content":"\"Items with no status\""},{"heading":"example-prompts-and-outcomes","content":"Status is blank"},{"heading":"example-prompts-and-outcomes","content":"\"Remove all filters\""},{"heading":"example-prompts-and-outcomes","content":"All existing filters cleared"},{"heading":"example-prompts-and-outcomes","content":"\"Show only rows where Score > 80\""},{"heading":"example-prompts-and-outcomes","content":"Existing filters replaced with Score > 80"},{"heading":"whats-next","content":"Now that you can filter records with AI, explore more NocoAI capabilities:"},{"heading":"whats-next","content":"Create Views using AI to set up useful views for your data"},{"heading":"whats-next","content":"Create Fields using AI to auto-generate relevant columns"},{"heading":"whats-next","content":"Generate Formulas using AI to automate calculations"},{"heading":"whats-next","content":"Let NocoAI handle the filter logic while you focus on your data."}],"headings":[{"id":"overview","content":"Overview"},{"id":"steps-to-filter-records-using-ai","content":"Steps to Filter Records Using AI"},{"id":"supported-actions","content":"Supported Actions"},{"id":"supported-filter-types","content":"Supported Filter Types"},{"id":"tips-for-better-ai-filters","content":"Tips for Better AI Filters"},{"id":"example-prompts-and-outcomes","content":"Example Prompts and Outcomes"},{"id":"whats-next","content":"What's Next"}]},"url":"/docs/product-docs/noco-ai/create-filter","title":"Filter Records using AI","description":"Use natural language to filter your table data with NocoAI."},{"_id":"/docs/product-docs/noco-ai/create-formula","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"Writing formulas can be complex and time-consuming. With NocoAI, you can now describe the logic you need in plain English, and have a formula generated for you automatically."},{"heading":"overview","content":"This is perfect for non-technical users, power users who want to speed up formula creation, or anyone looking to avoid syntax errors."},{"heading":"steps-to-generate-formulas-using-ai","content":"Add a Formula Field"},{"heading":"steps-to-generate-formulas-using-ai","content":"In your table, add field and select Formula as the type."},{"heading":"steps-to-generate-formulas-using-ai","content":"Click Formula Helper"},{"heading":"steps-to-generate-formulas-using-ai","content":"Inside the formula editor, click ✨ Formula Helper to open the prompt-based generation interface."},{"heading":"steps-to-generate-formulas-using-ai","content":"Describe the Logic in Natural Language"},{"heading":"steps-to-generate-formulas-using-ai","content":"Write a simple prompt explaining what the formula should do.\nExample:"},{"heading":"steps-to-generate-formulas-using-ai","content":"Show \"✅ Done\" if Status is \"Completed\", else show \"⏳ In Progress\"."},{"heading":"steps-to-generate-formulas-using-ai","content":"Review and click Generate"},{"heading":"steps-to-generate-formulas-using-ai","content":"NocoAI will generate the formula based on your prompt in the formula editor. You can review and modify if needed."},{"heading":"steps-to-generate-formulas-using-ai","content":"Click Save"},{"heading":"steps-to-generate-formulas-using-ai","content":"Once you're happy with the result, save the field."},{"heading":"tips-for-better-formula-suggestions","content":"Be precise in your prompt"},{"heading":"tips-for-better-formula-suggestions","content":"Mention exact field names and values where possible.\nExample:"},{"heading":"tips-for-better-formula-suggestions","content":"Calculate number of days between Start Date and End Date."},{"heading":"tips-for-better-formula-suggestions","content":"Use conditional phrases"},{"heading":"tips-for-better-formula-suggestions","content":"Help the AI understand intent.\nExample:"},{"heading":"tips-for-better-formula-suggestions","content":"If Priority is \"High\" and Status is not \"Completed\", show \"⚠️ Urgent\"."},{"heading":"tips-for-better-formula-suggestions","content":"Refer to data types clearly"},{"heading":"tips-for-better-formula-suggestions","content":"Indicate if you’re working with dates, numbers, checkboxes, or text.\nExample:"},{"heading":"tips-for-better-formula-suggestions","content":"Add 7 days to the Created Date."},{"heading":"example-prompts-and-outcomes","content":"Prompt"},{"heading":"example-prompts-and-outcomes","content":"Resulting Formula (Example)"},{"heading":"example-prompts-and-outcomes","content":"If Status is \"Done\", show \"✅\", else show \"⏳\""},{"heading":"example-prompts-and-outcomes","content":"IF({Status} = \"Done\", \"✅\", \"⏳\")"},{"heading":"example-prompts-and-outcomes","content":"Show the number of days between Start and End Date"},{"heading":"example-prompts-and-outcomes","content":"DATETIME_DIFF({End Date}, {Start Date}, \"days\")"},{"heading":"example-prompts-and-outcomes","content":"If Due Date is past today, mark as \"Overdue\""},{"heading":"example-prompts-and-outcomes","content":"IF({Due Date} < TODAY(), \"Overdue\", \"\")"},{"heading":"example-prompts-and-outcomes","content":"Combine First Name and Last Name into one field"},{"heading":"example-prompts-and-outcomes","content":"CONCAT({First Name}, \" \", {Last Name})"},{"heading":"whats-next","content":"Once your formula field is ready, you can:"},{"heading":"whats-next","content":"Use NocoAI View Suggestions to visualize data based on these formulas"},{"heading":"whats-next","content":"Create Fields using AI to automatically generate relevant fields for your table"},{"heading":"whats-next","content":"NocoAI simplifies complex logic so you can stay focused on building great workflows!"}],"headings":[{"id":"overview","content":"Overview"},{"id":"steps-to-generate-formulas-using-ai","content":"Steps to Generate Formulas Using AI"},{"id":"tips-for-better-formula-suggestions","content":"Tips for Better Formula Suggestions"},{"id":"example-prompts-and-outcomes","content":"Example Prompts and Outcomes"},{"id":"whats-next","content":"What’s Next"}]},"url":"/docs/product-docs/noco-ai/create-formula","title":"Generate Formulas using AI","description":"Use natural language prompts to generate formulas with NocoAI."},{"_id":"/docs/product-docs/noco-ai/create-options","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"When working with Single Select or Multi Select fields, you can now let NocoAI suggest relevant options based on your field name and table context. This helps reduce manual work and ensures meaningful, consistent values."},{"heading":"steps-to-create-options-using-ai","content":"Add a Single Select or Multi Select Field"},{"heading":"steps-to-create-options-using-ai","content":"Click the + icon in the top-right corner of the field header in your table, then select either 'Single Select' or 'Multi Select'. Provide a clear and descriptive field name that reflects the type of options required."},{"heading":"steps-to-create-options-using-ai","content":"Click Auto Suggest"},{"heading":"steps-to-create-options-using-ai","content":"Inside the field configuration modal, click the ✨ Auto Suggest button to fetch option suggestions."},{"heading":"steps-to-create-options-using-ai","content":"Review Suggested options"},{"heading":"steps-to-create-options-using-ai","content":"NocoAI will analyze your field name and table context to generate a list of relevant options. You can add, remove, or edit the suggested values before saving."},{"heading":"steps-to-create-options-using-ai","content":"Click Save Field"},{"heading":"steps-to-create-options-using-ai","content":"Finalize your configuration to add the field and its options to your table."},{"heading":"tips-for-better-ai-suggestions","content":"Use a descriptive field name\nExample: Instead of \"Type\", use \"Application Status\" or \"Task Priority\"."},{"heading":"tips-for-better-ai-suggestions","content":"Set table context\nThe more specific your table name and existing fields are, the better the suggestions.\nExample: In a table named “Tasks”, a field called “Priority” will likely suggest: Low, Medium, High."},{"heading":"tips-for-better-ai-suggestions","content":"Apply business terms\nUse industry-appropriate terminology in your field name to guide the AI.\nExample: For a field called “Candidate Stage”, suggestions might include: Applied, Screened, Interviewed, Hired."},{"heading":"example-use-cases","content":"Table"},{"heading":"example-use-cases","content":"Field Name"},{"heading":"example-use-cases","content":"Suggested Options"},{"heading":"example-use-cases","content":"Tasks"},{"heading":"example-use-cases","content":"Priority"},{"heading":"example-use-cases","content":"Low, Medium, High, Critical"},{"heading":"example-use-cases","content":"Candidates"},{"heading":"example-use-cases","content":"Application Status"},{"heading":"example-use-cases","content":"Applied, Shortlisted, Interviewed, Hired, Rejected"},{"heading":"example-use-cases","content":"Projects"},{"heading":"example-use-cases","content":"Phase"},{"heading":"example-use-cases","content":"Initiation, Planning, Execution, Closure"},{"heading":"example-use-cases","content":"Feedback"},{"heading":"example-use-cases","content":"Sentiment"},{"heading":"example-use-cases","content":"Positive, Neutral, Negative"},{"heading":"whats-next","content":"Now that your select fields are powered with meaningful options, you can:"},{"heading":"whats-next","content":"Create Views using AI to visualize data based on these options"},{"heading":"whats-next","content":"Use Formulas using AI to derive insights based on selected values"},{"heading":"whats-next","content":"Let NocoAI handle the heavy lifting while you focus on building smarter workflows."}],"headings":[{"id":"overview","content":"Overview"},{"id":"steps-to-create-options-using-ai","content":"Steps to Create Options Using AI"},{"id":"tips-for-better-ai-suggestions","content":"Tips for Better AI Suggestions"},{"id":"example-use-cases","content":"Example Use Cases"},{"id":"whats-next","content":"What’s Next"}]},"url":"/docs/product-docs/noco-ai/create-options","title":"Create Options using AI","description":"Automatically generate field options for select fields using NocoAI."},{"_id":"/docs/product-docs/noco-ai/create-table","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"With NocoAI, you can automatically generate tables — including their fields and relationships — just by describing your system in plain language. Ideal for getting started quickly with a new database structure or adding new modules to an existing base."},{"heading":"steps-to-create-tables-using-ai","content":"Open ** Create Table** modal\nFrom the left sidebar, Click + Create New, select Table"},{"heading":"steps-to-create-tables-using-ai","content":"Select Use NocoAIIn the dialog, click on ✨ Use NocoAI to begin the AI-assisted process."},{"heading":"steps-to-create-tables-using-ai","content":"Choose a Suggestion Mode"},{"heading":"steps-to-create-tables-using-ai","content":"Auto Suggested: NocoAI provides a set of suggested tables based on your current schema and context."},{"heading":"steps-to-create-tables-using-ai","content":"Use Prompt: (Coming Soon) Describe what tables you want in your own words."},{"heading":"steps-to-create-tables-using-ai","content":"Click Create [X] TablesSelect the tables you want from the list and click Create."},{"heading":"tips-for-better-ai-suggestions","content":"Use meaningful table names in your baseThe AI looks at existing names and structures to recommend relevant tables."},{"heading":"tips-for-better-ai-suggestions","content":"Think in entitiesImagine the business objects you want to manage (e.g., Candidates, Applications, Feedback, Agencies) and how they connect."},{"heading":"tips-for-better-ai-suggestions","content":"Preview and refineIf the suggestions aren't accurate, use the Suggest More button to regenerate."},{"heading":"tips-for-better-ai-suggestions","content":"Add new modules incrementallyYou can trigger NocoAI for different parts of your app — e.g., one time for recruiting, another for feedback — to build your schema progressively."},{"heading":"whats-next","content":"Once your tables are created:"},{"heading":"whats-next","content":"Use NocoAI View Suggestions to generate meaningful views"},{"heading":"whats-next","content":"Create Fields using AI to automatically generate relevant fields for each table"},{"heading":"whats-next","content":"NocoAI gives you a head start — you can customize everything further to meet your needs."}],"headings":[{"id":"overview","content":"Overview"},{"id":"steps-to-create-tables-using-ai","content":"Steps to Create Tables Using AI"},{"id":"tips-for-better-ai-suggestions","content":"Tips for Better AI Suggestions"},{"id":"whats-next","content":"What's Next"}]},"url":"/docs/product-docs/noco-ai/create-table","title":"Create Tables using AI","description":"Use NocoAI to auto-generate tables and relationships based on natural language prompts."},{"_id":"/docs/product-docs/noco-ai/create-view","structured":{"contents":[{"content":"type: info"},{"heading":"overview","content":"You can now let NocoAI intelligently suggest useful views for your table, helping you get started faster and more efficiently."},{"heading":"steps-to-create-views-using-ai","content":"Click on + Create View in the left sidebar."},{"heading":"steps-to-create-views-using-ai","content":"Select Use NocoAI from the dropdown."},{"heading":"steps-to-create-views-using-ai","content":"In the popup, go with:"},{"heading":"steps-to-create-views-using-ai","content":"Auto Suggested: Choose from automatically generated view suggestions."},{"heading":"steps-to-create-views-using-ai","content":"Use Prompt: Manually describe what kind of views you need. (Coming soon!)"},{"heading":"steps-to-create-views-using-ai","content":"Click Create [X] views to add them to your table."},{"heading":"steps-to-create-views-using-ai","content":"You can also access this feature from the Use NocoAI button in the view creation modal."},{"heading":"tips-for-better-ai-suggestions","content":"When using the Auto Suggested option, NocoAI analyzes your table's data and structure to provide relevant view suggestions. Here are some tips to get the most out of this feature:"},{"heading":"tips-for-better-ai-suggestions","content":"Be descriptive: Clearly state how you want the data grouped or filtered.\nExample: “Show candidates grouped by status” or “Create a gallery view of job listings.”"},{"heading":"tips-for-better-ai-suggestions","content":"Mention layout preferences: Indicate the desired layout if any — Grid, Kanban, Calendar, etc."},{"heading":"tips-for-better-ai-suggestions","content":"Use data cues: Reference field names or data patterns.\nExample: “List interviews scheduled this week” or “Show recently updated resumes.”"},{"heading":"example-prompts-for-use-prompt-tab","content":"\"Show candidates grouped by status in a Kanban view.\""},{"heading":"example-prompts-for-use-prompt-tab","content":"\"Create a calendar view for upcoming interviews.\""},{"heading":"example-prompts-for-use-prompt-tab","content":"\"List job openings that have more than 5 applicants.\""},{"heading":"example-prompts-for-use-prompt-tab","content":"\"Gallery of candidate profiles with photos and resumes.\""},{"heading":"example-prompts-for-use-prompt-tab","content":"Start leveraging NocoAI to create powerful views in just a few clicks!"}],"headings":[{"id":"overview","content":"Overview"},{"id":"steps-to-create-views-using-ai","content":"Steps to Create Views using AI"},{"id":"tips-for-better-ai-suggestions","content":"Tips for Better AI Suggestions"},{"id":"example-prompts-for-use-prompt-tab","content":"Example Prompts for \"Use Prompt\" Tab"}]},"url":"/docs/product-docs/noco-ai/create-view","title":"Create Views using AI","description":"Learn how to auto-generate useful views for your table using NocoAI."},{"_id":"/docs/product-docs/noco-ai","structured":{"contents":[{"content":"type: info"},{"content":"NocoAI brings intelligent automation and AI-powered assistance to the heart of NocoDB. Designed to reduce manual setup and enhance productivity, NocoAI helps you build, extend, and manage your bases using natural language — no technical expertise required."},{"heading":"key-features","content":"Prompt-Based Schema Generation : Build a complete base — including tables, fields, and views — by describing your needs in plain language."},{"heading":"key-features","content":"Table Recommendations : Get suggestions for additional tables that align with your existing schema and use case."},{"heading":"key-features","content":"Field Recommendations : Receive relevant field suggestions based on the context of the table you're editing."},{"heading":"key-features","content":"View Recommendations\nEnhance visibility with recommended views tailored to your table’s content."},{"heading":"key-features","content":"Select Options Recommendations : When creating single or multi-select fields, NocoAI suggests logical values based on the field name."},{"heading":"key-features","content":"Prompt-Based Formula Generation : Generate complex formulas by describing the logic you need."},{"heading":"use-cases","content":"NocoAI is designed for teams of all sizes and skill levels:"},{"heading":"use-cases","content":"Non-technical users can create databases without needing schema knowledge or coding."},{"heading":"use-cases","content":"Product teams accelerate prototyping and iteration with AI-assisted schema suggestions."},{"heading":"use-cases","content":"Operations managers get instant view recommendations to streamline workflows."},{"heading":"use-cases","content":"Data teams automate calculated fields and reduce setup time."},{"heading":"use-cases","content":"Whether you're building a CRM, project tracker, or content calendar — NocoAI helps you go from idea to working database in seconds."},{"heading":"roadmap","content":"NocoAI is just getting started. Upcoming enhancements will include:"},{"heading":"roadmap","content":"Natural language querying"},{"heading":"roadmap","content":"AI-driven automations"},{"heading":"roadmap","content":"Text generation"},{"heading":"roadmap","content":"Advanced recommendations across records and apps"},{"heading":"get-started","content":"To explore NocoAI, open any base or start a new one in NocoDB and look for the NocoAI features in the sidebar, table settings, or formula editor."},{"heading":"get-started","content":"Have feedback or ideas? Share them with the NocoDB team using support chat to help shape the future of AI-powered databases."}],"headings":[{"id":"key-features","content":"Key Features"},{"id":"use-cases","content":"Use Cases"},{"id":"roadmap","content":"Roadmap"},{"id":"get-started","content":"Get Started"}]},"url":"/docs/product-docs/noco-ai","title":"NocoAI ☁","description":"Smarter Apps, Instantly Built with AI"},{"_id":"/docs/product-docs/noco-sync","structured":{"contents":[{"content":"type: info"},{"content":"NocoSync is a built-in integration layer in NocoDB that allows you to bring data from external systems directly into your workspace. It keeps your NocoDB tables continuously updated by syncing records from third-party platforms, eliminating the need for manual imports or custom scripts."},{"content":"Current release introduces support for the Ticketing category, enabling you to connect with platforms such as GitHub, GitLab, Bitbucket, Zendesk, Linear, Freshdesk, and Chatwoot. Once connected, NocoSync pulls tickets, issues, conversations and related metadata into NocoDB, allowing teams to centralize reporting, automate workflows, and unlock insights across tools."},{"content":"Additional sync categories—such as CRM (Customer Relationship Management), HRIS (Human Resources Information System, Accounting), Accounting, ATS (Application Tracking System) and File Storage—will be added in future releases, expanding the types of systems you can bring into NocoDB."},{"content":"NocoSync runs on a simple setup, supports scheduled syncs, and ensures high reliability, so your workspace always reflects the most recent data from your external sources. It is designed to be flexible, scalable, and accessible to both technical and non-technical users."},{"heading":"how-sync-works","content":"NocoSync is designed around predefined schemas for each category, such as Ticketing, ensuring a consistent structure across all supported sources. When a sync is configured, NocoSync automatically creates multiple tables (such as Ticket, User, Comment, and Team in case of Ticketing). All required relationships between these tables are generated automatically, mirroring the hierarchy and linkages of the connected source system."},{"heading":"how-sync-works","content":"Sync table fields created by NocoSync are read-only, as the sync operates strictly one-way—from the source system into NocoDB. Fields that originate from the external source are marked with a flash icon (⚡) and cannot be removed, and sync tables themselves cannot be deleted. While schemas for each sync category are predefined, the actual fields available may vary by source. Different platforms use different naming conventions or may not expose all fields. NocoSync intelligently maps available fields from the source to the predefined schema to maintain consistency."},{"heading":"how-sync-works","content":"Users can extend sync tables by adding their own custom fields as needed. Beyond the read-only limitations on synced fields, sync tables behave like regular NocoDB tables. They can be shared with collaborators, used in views, and linked to other tables."},{"heading":"how-sync-works","content":"Currently, each sync category supports one external source at a time. When multi-source support is introduced, NocoDB will act as a Unified API layer across all connected systems, allowing you to query, analyze, and build on top of data coming from multiple platforms through a single, consistent interface. This will significantly simplify integrations and expand the power of NocoSync across complex environments."},{"heading":"how-sync-works","content":"Standard operations on Sync fields such as filtering, sorting, grouping, and searching are fully supported. You can create views, dashboards, and reports using synced data just like with any other NocoDB table."},{"heading":"sync-types","content":"NocoSync provides two sync modes to manage how data is fetched from external platforms. These modes help you balance performance, accuracy, and API usage based on your operational needs."},{"heading":"incremental-sync","content":"Incremental sync fetches only the records that have been created or updated since the last successful sync. This ensures faster sync cycles, minimal load on the external source, and reduced API consumption—making it the recommended option for routine, scheduled syncs. Incremental sync works by tracking timestamps or version markers provided by the source system."},{"heading":"full-sync","content":"Full sync re-imports the entire dataset from the external source during each run. This mode is helpful in scenarios where historical data needs correction, or the source system does not reliably provide incremental change information. While full sync ensures complete data accuracy, it requires more time and can be resource-intensive—especially for large datasets. It is best used occasionally or in combination with incremental sync."},{"heading":"sync-trigger","content":"NocoSync allows you to control when data synchronization should occur through two trigger modes: manual and scheduled."},{"heading":"manual-sync","content":"Manual sync lets you trigger the synchronization process on demand. This option is useful when you want immediate updates—such as after making configuration changes, testing a new integration, or verifying data after modifying fields or relationships. Manual sync gives you full control without waiting for the next scheduled run."},{"heading":"scheduled-sync","content":"Scheduled sync automates data updates at regular intervals, ensuring your NocoDB tables stay current without manual intervention. Scheduled sync currently supports two frequencies:"},{"heading":"scheduled-sync","content":"Hourly – Runs once every hour, suitable for active systems where data changes frequently."},{"heading":"scheduled-sync","content":"Daily – Runs once every 24 hours, ideal for less dynamic datasets or reporting-focused use cases."},{"heading":"source-record-delete-handling","content":"NocoSync provides control over how record deletions from the external source are reflected inside NocoDB. This setting helps you decide whether to maintain records for historical visibility or keep your tables strictly aligned with the source system."},{"heading":"ignore","content":"When set to Ignore, NocoDB retains the record even if it is deleted at the source. Instead of removing it, NocoSync marks the record to indicate that it has been deleted in the external system. This mode is useful when you want to preserve full history, maintain reporting continuity, or avoid breaking dependencies with linked records."},{"heading":"delete","content":"When set to Delete, NocoDB removes records in sync tables when they are deleted at the source. This option keeps your NocoDB tables fully synchronized and consistent with the external platform."},{"heading":"add-new-sync","content":"To add a new NocoSync integration to your base, follow these steps:"},{"heading":"add-new-sync","content":"Open Sync tab from base overview page."},{"heading":"add-new-sync","content":"Click on the + New Sync button."},{"heading":"add-new-sync","content":"Sync Setup : General configurations"},{"heading":"add-new-sync","content":"Sync name: Provide a name for your sync integration."},{"heading":"add-new-sync","content":"Sync type: Choose between Incremental or Full sync modes."},{"heading":"add-new-sync","content":"Sync trigger: Select either Manual or Scheduled sync. If scheduled, choose the desired frequency."},{"heading":"add-new-sync","content":"On delete: Choose between Ignore or Delete to define how deletions from the source are managed."},{"heading":"add-new-sync","content":"Sync Setup : Category & Sync scope"},{"heading":"add-new-sync","content":"Select the Ticketing category."},{"heading":"add-new-sync","content":"Choose to sync All Tables or Select Tables from the predefined schema. For Ticketing, essential tables like Ticket and User are always included."},{"heading":"add-new-sync","content":"Click on the Next button."},{"heading":"add-new-sync","content":"Sync Source"},{"heading":"add-new-sync","content":"Select the external platform you want to connect with."},{"heading":"add-new-sync","content":"Optionally, provide a suitable name for the integration."},{"heading":"add-new-sync","content":"Authenticate and authorize NocoDB to access your data on the selected platform. This involves creating a new connection or selecting an existing one for the integration source. Generate API tokens or OAuth credentials as required by the platform."},{"heading":"add-new-sync","content":"Additional configuration options may appear based on the selected source, such as specifying repositories for Git-based platforms or selecting specific projects for ticketing systems."},{"heading":"add-new-sync","content":"Click on the Next button."},{"heading":"add-new-sync","content":"Sync Review"},{"heading":"add-new-sync","content":"Review all configurations made in the previous steps."},{"heading":"add-new-sync","content":"If everything looks good, click on the Create Sync button to finalize the setup."},{"heading":"add-new-sync","content":"Logs appear displaying progress of the initial sync. Once complete, the sync tables will be available in your base."},{"heading":"add-new-sync","content":"type: info"},{"heading":"add-new-sync","content":"type: info"},{"heading":"edit-sync","content":"To edit an existing NocoSync integration, open sync tab from base overview page and follow these steps:"},{"heading":"edit-sync","content":"Click on the sync you want to edit."},{"heading":"edit-sync","content":"Modify the desired configurations in the sync setup or sync source steps. Note that, some fields like Sync category & Sync scope cannot be changed after creation."},{"heading":"edit-sync","content":"Click on the Update Sync button to apply the changes."},{"heading":"delete-sync","content":"To delete an existing NocoSync integration, open sync tab from base overview page and follow these steps:"},{"heading":"delete-sync","content":"Click on Actions button corresponding to the sync you want to delete."},{"heading":"delete-sync","content":"Select Delete Sync from the dropdown menu."},{"heading":"delete-sync","content":"Confirm the deletion in the prompt. This will remove the sync integration and all associated sync tables from your base."},{"heading":"delete-sync","content":"type: warning"}],"headings":[{"id":"how-sync-works","content":"How Sync Works"},{"id":"sync-types","content":"Sync Types"},{"id":"incremental-sync","content":"Incremental Sync"},{"id":"full-sync","content":"Full Sync"},{"id":"sync-trigger","content":"Sync Trigger"},{"id":"manual-sync","content":"Manual Sync"},{"id":"scheduled-sync","content":"Scheduled Sync"},{"id":"source-record-delete-handling","content":"Source Record Delete Handling"},{"id":"ignore","content":"Ignore"},{"id":"delete","content":"Delete"},{"id":"add-new-sync","content":"Add new Sync"},{"id":"edit-sync","content":"Edit Sync"},{"id":"delete-sync","content":"Delete Sync"}]},"url":"/docs/product-docs/noco-sync","title":"NocoSync ☁","description":"Bring external data into NocoDB effortlessly with automated syncs from tools your teams already use."},{"_id":"/docs/product-docs/noco-sync/ticketing","structured":{"contents":[{"content":"type: info"},{"content":"Ticketing Sync enables you to import issues, tickets, comments, users, and team information from external platforms. It follows a predefined schema that standardizes ticketing data across systems, ensuring consistency even when naming conventions or field availability differ between sources."},{"content":"Current supported sources include:"},{"content":"GitHub"},{"content":"GitLab"},{"content":"Zendesk"},{"content":"Linear"},{"content":"Freshdesk"},{"content":"Bitbucket"},{"content":"Chatwoot"},{"content":"You may choose to sync all tables in the Ticketing schema or only specific tables. Syncing all tables provides full context and complete relationships, while syncing selected tables helps reduce sync time and resource usage based on your workflow needs."},{"heading":"available-tables","content":"Each table is mapped to a well-defined set of fields to maintain a unified structure. NocoSync also includes relational fields that connect these tables as required. Ticket and User tables are essential and always included, while Comment and Team tables are optional."},{"heading":"ticket","content":"Represents a ticket, issue, case, or task from the source platform.\nKey fields include:"},{"heading":"ticket","content":"Description – Summary or full content of the ticket."},{"heading":"ticket","content":"Ticket Number – Unique identifier from the source system."},{"heading":"ticket","content":"Due Date – Target completion date."},{"heading":"ticket","content":"Priority – Indicates urgency such as Low, Medium, High, or platform-specific values."},{"heading":"ticket","content":"Status – Current stage (Open, In Progress, Closed, etc.)."},{"heading":"ticket","content":"Tags – Labels or metadata applied to the ticket."},{"heading":"ticket","content":"Ticket Type – Category such as Bug, Feature, Task, Case, etc."},{"heading":"ticket","content":"URL – Direct link to the ticket in the source app."},{"heading":"ticket","content":"Is Active? – Indicates whether the ticket is currently active."},{"heading":"ticket","content":"Completed At – Timestamp when the ticket was closed or resolved."},{"heading":"ticket","content":"This table includes links to Users, Teams, and Comments, depending on the structure available in the connected source."},{"heading":"user","content":"Represents individuals associated with the ticketing system—such as creators, reporters, agents, assignees, or contributors.\nKey fields include:"},{"heading":"user","content":"Email – Email associated with the user."},{"heading":"user","content":"URL – Profile link to the user in the external system."},{"heading":"user","content":"Users are linked to Tickets and Comments where applicable."},{"heading":"comment","content":"Stores discussion entries, updates, or notes related to Tickets.\nKey fields include:"},{"heading":"comment","content":"Body – Full comment text."},{"heading":"comment","content":"URL – Link to the comment in the source system."},{"heading":"comment","content":"Comments are relationally connected to both Tickets and Users."},{"heading":"team","content":"Represents groups, departments, or squads defined in the external platform.\nKey fields include:"},{"heading":"team","content":"Description – Summary or name of the team."},{"heading":"team","content":"Members – Users associated with the team."},{"heading":"team","content":"Teams may be associated with Tickets or Users, depending on source capabilities."},{"heading":"metadata-fields","content":"Each synced table in the Ticketing category includes a set of metadata fields that track the lifecycle, state, and origin of every record. These fields provide transparency into how data flows from the external source into NocoDB and play an essential role in traceability, debugging, and audit requirements."},{"heading":"metadata-fields","content":"These metadata fields are automatically managed by NocoSync and are read-only."},{"heading":"metadata-fields","content":"RemoteID\nUnique identifier of the record in the external source system."},{"heading":"metadata-fields","content":"RemoteCreatedAt\nTimestamp of when the record was originally created in the source."},{"heading":"metadata-fields","content":"RemoteUpdatedAt\nTimestamp of the most recent update made in the source."},{"heading":"metadata-fields","content":"RemoteDeleted\nIndicates whether the record has been deleted in the source platform.\nThis is used especially when the delete behaviour is set to Ignore."},{"heading":"metadata-fields","content":"RemoteDeletedTime\nTimestamp of when the record was deleted in the source, if applicable."},{"heading":"metadata-fields","content":"RemoteRaw\nStores the raw payload received from the provider for that record.\nUseful for troubleshooting, verification, or advanced integrations."},{"heading":"metadata-fields","content":"RemoteNamespace\nIdentifies the origin project, workspace, or repository depending on the provider.\nThis is valuable for multi-project setups in GitHub, GitLab, Bitbucket, Zendesk groups, etc."},{"heading":"metadata-fields","content":"RemoteSynchedAt\nLast timestamp when NocoDB synced this specific record."},{"heading":"metadata-fields","content":"SyncConfigID\nInternal reference to the sync configuration used for this record."},{"heading":"metadata-fields","content":"SyncRunID\nIdentifies the specific sync execution run that last updated this record."},{"heading":"metadata-fields","content":"SyncProvider\nIndicates which external service (GitHub, GitLab, Zendesk, etc.) the record originated from."},{"heading":"source-specific-details","content":"Each supported ticketing platform has unique characteristics and field mappings. Below are some source-specific details to consider when configuring your Ticketing sync."},{"heading":"github","content":"GitHub integration lets you bring issues, pull requests, and related project activity directly into your NocoDB workspace. Connect your GitHub account, pick the repositories you want to track, and NocoSync keeps your tables updated with the latest data."},{"heading":"github","content":"After selecting GitHub as the sync source, you can:"},{"heading":"github","content":"Connect using an existing GitHub integration\nAuthenticate once and reuse the connection across multiple syncs. Both OAuth and Personal Access Token methods are supported."},{"heading":"github","content":"Choose one or more repositories\nPull data from any repo you manage or collaborate on. You can select multiple repositories to consolidate issues and PRs in a single NocoDB base."},{"heading":"github","content":"Include closed issues (optional)\nSync both open and closed issues to maintain a complete project history. Closed issues are marked accordingly in the Ticket table."},{"heading":"github","content":"Sync pull requests (optional)\nBring in PRs alongside issues to track code reviews, merges, and engineering workflows. PRs are represented as tickets with a distinct type."},{"heading":"gitlab","content":"GitLab integration lets you sync project activity—issues, merge requests, comments, and more—directly into your NocoDB workspace."},{"heading":"gitlab","content":"After selecting GitLab as your sync source, you can:"},{"heading":"gitlab","content":"Connect using an existing GitLab integration\nAuthenticate once and reuse the connection across multiple projects and syncs. Alternatively, you can set up a new connection using OAuth or Personal Access Token methods."},{"heading":"gitlab","content":"Provide a GitLab Project ID\nPoint the sync to any GitLab project you manage or contribute to. NocoDB validates and fetches data from that project automatically."},{"heading":"gitlab","content":"Find the Project ID"},{"heading":"gitlab","content":"Include closed issues (optional)\nSync both open and closed issues to maintain a complete historical record of progress, decisions, and resolutions."},{"heading":"gitlab","content":"Include merge requests (optional)\nPull in merge requests alongside issues to track reviews, approvals, and code changes within your workspace."},{"heading":"zendesk","content":"Zendesk integration brings your support operations into NocoDB, enabling teams to analyze tickets, measure response trends, and connect customer support data with internal workflows. With NocoSync, your Zendesk tickets stay continuously updated in a structured, queryable format."},{"heading":"zendesk","content":"Once you select Zendesk as your sync source, you can:"},{"heading":"zendesk","content":"Connect using an existing Zendesk integration\nAuthenticate once and reuse the connection for multiple sync configurations."},{"heading":"zendesk","content":"Define your integration name\nLabel the sync clearly for your workspace, especially when managing multiple Zendesk accounts or environments."},{"heading":"zendesk","content":"Include closed tickets (optional)\nSync both open and closed tickets to maintain a complete historical view of customer conversations, resolutions, and team performance."},{"heading":"zendesk","content":"Zendesk as a source helps centralize customer support insights—making it easier to audit ticket history, build dashboards, correlate support patterns with product issues, and drive proactive decision-making across teams."},{"heading":"linear","content":"Linear sync brings your product, engineering, and project workflows directly into NocoDB—making it easy to analyze issues, track delivery patterns, and build custom reporting on top of your Linear data."},{"heading":"linear","content":"When setting up a Linear sync, you can:"},{"heading":"linear","content":"Select your Linear connection\nAuthenticate once and reuse the connection across different sync configurations."},{"heading":"linear","content":"Specify a team key\nProvide the Linear team identifier (e.g., ENG) to pull issues from a specific team. This helps maintain clear separation of data when working across multiple teams or departments. To find your team key, go to Linear → Settings → Teams → select your team → copy the Team Identifier (e.g., ENG)."},{"heading":"linear","content":"Configure issue inclusion options"},{"heading":"linear","content":"Include canceled issues\nSync canceled issues to maintain a complete historical timeline of project changes and prioritization decisions."},{"heading":"linear","content":"Include completed issues\nSync completed issues for richer analytics on delivery timelines, resolutions, and sprint outcomes."},{"heading":"linear","content":"Linear as a source helps centralize product and engineering operations—allowing teams to correlate progress with other tools, audit issue lifecycle data, and build custom dashboards that reflect true project execution."},{"heading":"freshdesk","content":"Freshdesk integration allows you to sync your customer support tickets, agents, and conversations directly into NocoDB. This enables your team to analyze support trends, measure performance, and connect customer data with internal workflows."},{"heading":"freshdesk","content":"When configuring a Freshdesk sync, you can:"},{"heading":"freshdesk","content":"Connect using an existing Freshdesk integration\nAuthenticate once and reuse the connection for multiple sync configurations. You can also set up a new connection using your Freshdesk domain and API key."},{"heading":"freshdesk","content":"Include closed tickets (optional)\nSync both open and closed tickets to maintain a complete historical view of customer interactions and resolutions."},{"heading":"bitbucket","content":"Bitbucket integration enables you to sync issues, pull requests, and related project activity directly into your NocoDB workspace. This allows your team to track development progress, analyze issue trends, and build custom reports."},{"heading":"bitbucket","content":"When setting up a Bitbucket sync, you can:"},{"heading":"bitbucket","content":"Connect using an existing Bitbucket integration\nAuthenticate once and reuse the connection across multiple syncs. Both OAuth and App Password methods are supported."},{"heading":"bitbucket","content":"Choose one or more repositories\nPull data from any repository you manage or collaborate on. You can select multiple repositories to consolidate issues and pull requests in a single NocoDB base."},{"heading":"bitbucket","content":"Include closed issues (optional)\nSync both open and closed issues to maintain a complete project history. Closed issues are marked accordingly in the Ticket table."},{"heading":"bitbucket","content":"Sync pull requests (optional)\nBring in pull requests alongside issues to track code reviews, merges, and engineering workflows. Pull requests are represented as tickets with a distinct type."},{"heading":"chatwoot","content":"Chatwoot integration allows you to sync conversations, messages, users, and teams directly into NocoDB. This enables your team to analyze customer interactions, measure response trends, and connect communication data with internal workflows."},{"heading":"chatwoot","content":"When configuring a Chatwoot sync, you can:"},{"heading":"chatwoot","content":"Connect using an existing Chatwoot integration\nAuthenticate once and reuse the connection for multiple sync configurations. You can also set up a new connection using your Chatwoot instance URL and API key."},{"heading":"chatwoot","content":"Include resolved conversations (optional)\nSync both open and resolved conversations to maintain a complete historical view of customer interactions and resolutions."}],"headings":[{"id":"available-tables","content":"Available Tables"},{"id":"ticket","content":"Ticket"},{"id":"user","content":"User"},{"id":"comment","content":"Comment"},{"id":"team","content":"Team"},{"id":"metadata-fields","content":"Metadata Fields"},{"id":"source-specific-details","content":"Source Specific Details"},{"id":"github","content":"GitHub"},{"id":"gitlab","content":"GitLab"},{"id":"zendesk","content":"Zendesk"},{"id":"linear","content":"Linear"},{"id":"freshdesk","content":"Freshdesk"},{"id":"bitbucket","content":"Bitbucket"},{"id":"chatwoot","content":"Chatwoot"}]},"url":"/docs/product-docs/noco-sync/ticketing","title":"Ticketing","description":"Bring ticketing data from popular platforms into NocoDB with automated syncs."},{"_id":"/docs/product-docs/records/actions-on-record","structured":{"contents":[{"heading":"keyboard-navigation-within-grid-view","content":"A selected cell can be in one of the following states:"},{"heading":"keyboard-navigation-within-grid-view","content":"Select state : A single click on the cell selects the cell. When in this state, arrow keys can be used to navigate to adjacent cells."},{"heading":"keyboard-navigation-within-grid-view","content":"Edit state : A double click on the cell puts the cell in edit state. Cursor can be moved within the cell using arrow keys."},{"heading":"keyboard-navigation-within-grid-view","content":"type: note"},{"heading":"keyboard-navigation-within-grid-view","content":"Double-click on a cell to put it in edit state directly."},{"heading":"keyboard-navigation-within-grid-view","content":"From Select state, press Enter key to enter edit state."},{"heading":"keyboard-navigation-within-grid-view","content":"Press Esc key to exit edit state."},{"heading":"keyboard-navigation-within-grid-view","content":"From Edit state, press Enter key to save the changes."},{"heading":"keyboard-navigation-within-grid-view","content":"Edit state for some cells will be a picker. For example, a cell with Single Select field type will have a picker with options to choose from. In such cases, arrow keys can be used to navigate between options."},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Key"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Behaviour"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"⌘ ↑"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Jump to first record in this field (in same page)"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"⌘ ↓"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Jump to last record in this field (in same page)"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"⌘ C"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Copy cell contents to clipboard"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"⌘ V"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Paste clipboard contents to cell"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Enter"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Switch cell in focus to EDIT mode; opens modal/picker if cell is associated with one"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Esc"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Exit cell EDIT mode"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Delete"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Clear cell"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Space"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Expand current record"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"← → ↑ ↓"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"General cell navigation : left, right, top, bottom"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Tab"},{"heading":"keyboard-shortcuts-for-cell-navigation","content":"Move to next cell horizontally; if on last cell, move to beginning of next record"},{"heading":"update-record","content":"You can start editing by any of the following methods"},{"heading":"update-record","content":"Double-click on cell to edit"},{"heading":"update-record","content":"Click on cell and start typing (this way it will clear the previous content)"},{"heading":"update-record","content":"Click on cell and press enter to start editing"},{"heading":"update-record","content":"And it will automatically save on blur event or if inactive."},{"heading":"bulk-update-records--","content":"You can bulk update records by"},{"heading":"bulk-update-records--","content":"Selecting multiple records that you wish to update together and then"},{"heading":"bulk-update-records--","content":"Right-click on the index field area (first column on the grid view) and then select Bulk Update records option from the context menu. This will open Bulk update modal.\nOn the bulk update modal,"},{"heading":"bulk-update-records--","content":"Fields area : Select the fields that you want to update."},{"heading":"bulk-update-records--","content":"Selected fields area : Enter the new value for the selected fields."},{"heading":"bulk-update-records--","content":"Click on the Bulk Update all button"},{"heading":"bulk-update-records--","content":"A confirmation dialog will be displayed. Click on Confirm to update the records."},{"heading":"bulk-update-records--","content":"type: info"},{"heading":"bulk-update-records--","content":"type: info"},{"heading":"delete-record-single","content":"Right-click on record and then from the cell context menu, select Delete Record option."},{"heading":"delete-record-bulk","content":"Select multiple records by using the checkbox in first column and then Delete Selected Records options from the right click context menu."},{"heading":"drag-and-drop-to-reorder-records","content":"You can reorder records by dragging and dropping them to the desired position. Use the drag icon on the left side of the record to drag and drop."},{"heading":"drag-and-drop-to-reorder-records","content":"type: note"},{"heading":"drag-and-drop-to-reorder-records","content":"Bulk record drag-drop reordering is not supported currently."},{"heading":"drag-and-drop-to-reorder-records","content":"Drag-drop is not supported in Group-by view currently."}],"headings":[{"id":"keyboard-navigation-within-grid-view","content":"Keyboard navigation within Grid view"},{"id":"keyboard-shortcuts-for-cell-navigation","content":"Keyboard shortcuts for cell navigation"},{"id":"update-record","content":"Update Record"},{"id":"bulk-update-records--","content":"Bulk Update Records  ☁"},{"id":"delete-record-single","content":"Delete Record (Single)"},{"id":"delete-record-bulk","content":"Delete Record (Bulk)"},{"id":"drag-and-drop-to-reorder-records","content":"Drag and Drop to reorder records"}]},"url":"/docs/product-docs/records/actions-on-record","title":"Actions on record","description":"Learn how to perform actions (edit, duplicate, delete, etc) on a record in NocoDB."},{"_id":"/docs/product-docs/records/create-record","structured":{"contents":[{"content":"A new record can be added by using the New Record button in the bottom left corner of the grid view. Default behaviour of this button is to add a new empty record at the end of the grid view. Fields for a record can be populated by clicking on the cell and entering the value."},{"content":"type: note"},{"content":"An empty record can also be added by using + icon in the last record of the grid view."},{"content":"When on last record, Enter key can be used to add a new empty record to the grid view."},{"content":"NocoDB also provides convenience of a form to populate fields in a record. To add a new record using a form,"},{"content":"Click on the up-arrow in New Record button; this expands options for adding a new record."},{"content":"Select New Record - Form option. This will reconfigure default behaviour of New Record button to add a new record using a form."},{"content":"type: info"},{"heading":"insert-anywhere","content":"You can insert a new record anywhere in the grid view by using right-click context menu. Click on any record and select from Insert above or Insert below options. A new empty record will be added above or below the selected record."},{"heading":"related-topics","content":"Expanded record view"}],"headings":[{"id":"insert-anywhere","content":"Insert Anywhere"},{"id":"related-topics","content":"Related topics"}]},"url":"/docs/product-docs/records/create-record","title":"Create record","description":"Learn how to create a record in NocoDB."},{"_id":"/docs/product-docs/records/expand-record","structured":{"contents":[{"heading":"overview","content":"Expanded record allows you to edit a record data using a form layout. Apart from record information, it also consists of the activity feed such as user comments or record revision history (audit)."},{"heading":"expanding-a-record","content":"To expand a record in a grid view, click on expand icon that appears on the first column (index column) on hover over a record."},{"heading":"expanding-a-record","content":"type: tip"},{"heading":"expanding-a-record","content":"Shortcut : Use space bar on any cell to expand associated record."},{"heading":"edit-record","content":"Expanded form displays all the fields of a record enabled for display in a form layout."},{"heading":"edit-record","content":"You can edit the record data by clicking on the field and entering the value."},{"heading":"edit-record","content":"Show hidden fields: Click on Show hidden fields button to display all the fields of a record."},{"heading":"edit-record","content":"Click on Save button to save the changes. Close the expanded form by clicking on X button in the top right corner of the form to discard the changes."},{"heading":"edit-record","content":"Navigate to next/previous record using Next/Previous button in the top left corner of the form."},{"heading":"edit-record","content":"type: info"},{"heading":"record-audit","content":"In an expanded form,"},{"heading":"record-audit","content":"Click on Audit tab"},{"heading":"record-audit","content":"A list of all the changes made to the record will be displayed"},{"heading":"record-audit","content":"type: info"},{"heading":"record-audit","content":"You can only view the audit log. You cannot edit or delete the audit log."},{"heading":"record-audit","content":"Audit log is only available in Self-hosted version currently"},{"heading":"record-comment","content":"The Comments feature allows you to collaborate directly within records by leaving comments, making it easier to discuss and track changes. You can also receive notifications for updates, ensuring everyone stays informed in real time."},{"heading":"record-comment","content":"type: info"},{"heading":"add-comment","content":"In an expanded form,"},{"heading":"add-comment","content":"Click on Comments tab"},{"heading":"add-comment","content":"A list of all the comments made to the record will be displayed"},{"heading":"add-comment","content":"Click on input box at the bottom to add a new comment, and press Enter to save"},{"heading":"edit-comment","content":"In comments list of an expanded form,"},{"heading":"edit-comment","content":"Click on Edit icon on the right side of the comment"},{"heading":"edit-comment","content":"Edit the comment and"},{"heading":"edit-comment","content":"Click on Save icon  OR Press Enter to save the changes"},{"heading":"edit-comment","content":"type: note"},{"heading":"edit-comment","content":"You can only edit your own comments. Changes to comments are also recorded in the audit log."},{"heading":"copy-record-url","content":"In an expanded form, click Copy Record URL to share the record form to other authorized users."},{"heading":"duplicate-record","content":"Using context menu (...) in the top right corner of the expanded form, you can duplicate the record. Duplicated record will not be saved by default. You can edit the record and save it."},{"heading":"delete-record","content":"Using context menu (...) in the top right corner of the expanded form, you can delete the record."},{"heading":"delete-record","content":"On the confirmation dialog, click on Delete button to delete the record."},{"heading":"record-view-modes","content":"Modern data collaboration requires more than just viewing and editing records—it demands flexible interfaces tailored to specific tasks. Whether you're entering structured data, reviewing files, or engaging in team discussions, having the right record view enhances both productivity and clarity."},{"heading":"record-view-modes","content":"This article introduces three powerful modes for interacting with individual records:"},{"heading":"record-view-modes","content":"Field Mode for structured data entry and editing"},{"heading":"record-view-modes","content":"File Preview Mode for visually inspecting attachments"},{"heading":"record-view-modes","content":"Discussion Mode for seamless collaboration and context-rich conversations"},{"heading":"record-view-modes","content":"Each mode is purpose-built to help you focus on what matters most, ensuring your workflows remain efficient, intuitive, and collaborative."},{"heading":"field-mode","content":"Field Mode is designed for editing and viewing all field values of a record. It provides a structured, form-like layout where each field is displayed clearly with its label and value."},{"heading":"file-preview-mode--","content":"type: info"},{"heading":"file-preview-mode--","content":"File Preview Mode prioritizes visual file content by displaying attachments front and center. It’s perfect for image-heavy or document-centric records."},{"heading":"file-preview-mode--","content":"Configure attachment field : File preview mode by default uses first attachment field in the table to display the file. If there are multiple attachment fields, you can choose which one to display by selecting the desired field from the dropdown in the top left corner of the record viewer panel."},{"heading":"file-preview-mode--","content":"Navigate through files : File preview mode picks up the first file attachment in the record and displays it prominently. If there are multiple attachments, you can hover over left side panel to see a list of all files. Clicking on any file will open it."},{"heading":"file-preview-mode--","content":"Add more files : You can also add new files directly from this view. Just click on the + Add file icon in the bottom left corner of the file preview panel to upload a new file."},{"heading":"supported-files","content":"File Preview Mode supports a wide range of media types:"},{"heading":"discussion-mode--","content":"type: info"},{"heading":"discussion-mode--","content":"Discussion Mode brings conversations into context. It shows all comments and threads related to a specific record, fostering collaboration and communication."},{"heading":"switching-between-modes","content":"To switch between modes, select a record and look for the mode switcher in the top-right corner of the record viewer panel. Click the icons to toggle between views."}],"headings":[{"id":"overview","content":"Overview"},{"id":"expanding-a-record","content":"Expanding a Record"},{"id":"edit-record","content":"Edit record"},{"id":"record-audit","content":"Record Audit"},{"id":"record-comment","content":"Record Comment"},{"id":"add-comment","content":"Add Comment"},{"id":"edit-comment","content":"Edit Comment"},{"id":"record-actions","content":"Record Actions"},{"id":"copy-record-url","content":"Copy Record URL"},{"id":"duplicate-record","content":"Duplicate record"},{"id":"delete-record","content":"Delete record"},{"id":"record-view-modes","content":"Record view modes"},{"id":"field-mode","content":"Field Mode"},{"id":"file-preview-mode--","content":"File Preview Mode  ☁"},{"id":"supported-files","content":"Supported files"},{"id":"-pdf","content":"📄 Pdf"},{"id":"️-image-files","content":"🖼️ Image Files"},{"id":"-audio-files","content":"🔊 Audio Files"},{"id":"️-video-files","content":"🎞️ Video Files"},{"id":"discussion-mode--","content":"Discussion mode  ☁"},{"id":"switching-between-modes","content":"Switching between modes"}]},"url":"/docs/product-docs/records/expand-record","title":"Expanded record","description":"Learn how to expand a record & work with it in NocoDB."},{"_id":"/docs/product-docs/records","structured":{"contents":[{"content":"Records in NocoDB are fundamental components within a database, serving as individual entries or data points within a table. Each default table in NocoDB is meticulously organized into a structured grid of records, fields (columns), and cells. These records constitute the backbone of data storage and retrieval within NocoDB, encapsulating a diverse range of information types, including text, numerical values, dates, file attachments, and even links to other records, either within the same table or across different tables. This versatile approach allows users to create highly customizable databases tailored to their specific data management needs, all centered around the concept of records."},{"content":"In essence, a record can be envisaged as a horizontal collection of data within a NocoDB table, each record representing a distinct piece of information. These records play a pivotal role in organizing, categorizing, and presenting data in a comprehensible and efficient manner, offering users a structured and organized platform for data management."},{"content":"You can perform a variety of actions to efficiently manage your data. To get started, you can create a new record to input essential information. If you need to make updates to an existing record, you can modify it or even perform a bulk update for multiple records simultaneously. For records that are no longer needed, you have the option to delete or duplicate them with ease. When you're working with records, you can also benefit from our expanded form for a more detailed view, complete with a record change log to track all modifications and a feature to write comments for more context and collaboration. Additionally, you can share records quickly by generating a shareable URL."},{"content":"In this section, we'll explore the various aspects of records in NocoDB, equipping you with the knowledge to effectively manage your own data."},{"heading":"related-topics","content":"Create Record"},{"heading":"related-topics","content":"Modify an existing Record"},{"heading":"related-topics","content":"Bulk Update Records"},{"heading":"related-topics","content":"Delete Record"},{"heading":"related-topics","content":"Duplicate Record"},{"heading":"related-topics","content":"Working with records using an expanded form"},{"heading":"related-topics","content":"Record change log"},{"heading":"related-topics","content":"Writing comments for a record"},{"heading":"related-topics","content":"Share Record"}],"headings":[{"id":"related-topics","content":"Related topics"}]},"url":"/docs/product-docs/records","title":"Records","description":"Learn how to create, import, and manage records in NocoDB."},{"_id":"/docs/product-docs/roles-and-permissions/field-permissions","structured":{"contents":[{"content":"type: info"},{"content":"Field permissions in NocoDB allow you to control who can edit values in specific fields in a table. This feature is particularly useful for managing sensitive data or ensuring that only authorized users can modify certain information."},{"heading":"enabling-field-permissions","content":"To configure field permissions for a specific table:"},{"heading":"enabling-field-permissions","content":"Access field context menu from the field header."},{"heading":"enabling-field-permissions","content":"Select Edit field permissions."},{"heading":"enabling-field-permissions","content":"Use the dropdowns to control who can edit the field."},{"heading":"permission-levels","content":"You can assign different levels of access to each field. The available options are:"},{"heading":"permission-levels","content":"Option"},{"heading":"permission-levels","content":"Who gets access"},{"heading":"permission-levels","content":"Editors & up"},{"heading":"permission-levels","content":"Members with Editor, Creator, or Owner roles (default)"},{"heading":"permission-levels","content":"Creators & up"},{"heading":"permission-levels","content":"Members with Creator or Owner roles"},{"heading":"permission-levels","content":"Specific users"},{"heading":"permission-levels","content":"Selected members or teams"},{"heading":"permission-levels","content":"Nobody"},{"heading":"permission-levels","content":"No one can edit this field"},{"heading":"permission-levels","content":"By default, users with Editor role and above can edit data in all fields in a table."},{"heading":"permission-levels","content":"Select Creators & up to prevent editors from editing values in this field."},{"heading":"permission-levels","content":"Select Nobody to disable editing values for all users in this field."},{"heading":"permission-levels","content":"Choose Specific users to allow only selected members or teams to edit this field."},{"heading":"permission-levels","content":"type: info"},{"heading":"additional-notes-on-field-permissions","content":"Field permissions do not control field visibility — users with access can still view all field data, but their ability to edit values in specific fields depends on the configured permissions."},{"heading":"additional-notes-on-field-permissions","content":"Permissions are applied at the field level, affecting all records in the table for that specific field. They cannot be configured for individual or selected records."},{"heading":"additional-notes-on-field-permissions","content":"Field permissions operate independently of table permissions. You can configure field permissions without enabling table permissions, and vice versa."},{"heading":"additional-notes-on-field-permissions","content":"Field permissions also apply to API calls and shared forms, restricting the ability to modify field values through these interfaces."},{"heading":"additional-notes-on-field-permissions","content":"Field permissions can be set for all field types except the following, as these are calculated or system fields and cannot be edited directly:"},{"heading":"additional-notes-on-field-permissions","content":"Formula, Rollup, Lookup, Created By, Last Updated By, Created At, Last Updated At, Button, QR Code, Barcode"},{"heading":"additional-notes-on-field-permissions","content":"For Link to Another Record (LTAR) fields, only the source table’s LTAR field permission determines editability (add/remove links). The related table’s LTAR permissions are not considered."},{"heading":"additional-notes-on-field-permissions","content":"Example: If Country has many Cities, and a user has permission to edit the LTAR field in the Country table, they can add or remove links to City records from the Country table — even if they lack edit permission for the City table’s corresponding LTAR field."},{"heading":"permissions-overview","content":"Permissions overview provides a quick summary of the current table & field permissions in a consolidated tabular view."},{"heading":"permissions-overview","content":"To access the permissions overview:"},{"heading":"permissions-overview","content":"Go to base homepage (Click Overview in the sidebar)."},{"heading":"permissions-overview","content":"Click the Permissions tab."},{"heading":"permissions-overview","content":"Subsequently, you can select the table for which you want to view the permissions overview. The overview will display field permissions in addition to table permissions, allowing you to see who can create or delete records in each table, as well as which fields are editable and by whom."},{"heading":"permissions-overview","content":"Permissions overview can also be accessed from the table / field permission configuration modal."}],"headings":[{"id":"enabling-field-permissions","content":"Enabling Field Permissions"},{"id":"permission-levels","content":"Permission Levels"},{"id":"additional-notes-on-field-permissions","content":"Additional Notes on Field Permissions"},{"id":"permissions-overview","content":"Permissions Overview"}]},"url":"/docs/product-docs/roles-and-permissions/field-permissions","title":"Field Permissions","description":"Learn about working with field permissions in NocoDB."},{"_id":"/docs/product-docs/roles-and-permissions","structured":{"contents":[{"content":"In NocoDB, roles define what users or teams can do within a Workspace or a Base.\nThey govern access control, ensuring that members and teams have appropriate privileges based on their responsibilities."},{"content":"type: info"},{"content":"You can assign the following roles:"},{"content":"Owner"},{"content":"Creator"},{"content":"Editor"},{"content":"Commenter"},{"content":"Viewer"},{"content":"No Access"},{"content":"& a special role \"Inherit\" discussed below."},{"content":"If a role is assigned at the base level, it takes precedence over the workspace-level role. Roles are hierarchical — higher roles include all permissions of the roles below them, allowing flexibility and clarity in managing access across your workspace and bases. Details about each role and their permissions are provided below."},{"heading":"roles","content":"Roles define access privileges in NocoDB and can be assigned at two levels — Workspace and Base."},{"heading":"roles","content":"When a member or team is invited to a workspace with a specific role (for example, Editor), they automatically receive that level of access across all bases within the workspace, unless overridden at the base level.\nBase owners or creators can further refine permissions at the base level to meet specific collaboration needs."},{"heading":"roles","content":"This dual-level role structure provides granular control, balancing workspace-wide consistency with base-specific customization."},{"heading":"roles","content":"Workspace-level roles do not automatically grant access to Private Bases. Members must be explicitly invited to a Private Base to gain access, regardless of their workspace role. Learn more about Priavte Bases in the Private Bases documentation."},{"heading":"roles","content":"The following sections detail each role and its associated permissions."},{"heading":"owner","content":"Assigned automatically to the person who creates a workspace or base."},{"heading":"owner","content":"Has full administrative privileges, including the ability to delete the workspace or base."},{"heading":"owner","content":"Only individual members can be assigned the Owner role. Teams cannot be assigned this role."},{"heading":"creator","content":"Has full control over the workspace or base except for deletion privileges, which are exclusive to the Owner."},{"heading":"creator","content":"Can manage users, schema, automations, and all data operations."},{"heading":"creator","content":"Suitable for administrators and key project leads."},{"heading":"editor","content":"Can add, edit, and delete records within tables."},{"heading":"editor","content":"Cannot modify the schema, such as adding or removing tables, fields, or relationships."},{"heading":"editor","content":"Has access to toolbar features like Filter, Sort, and Group By for managing data views."},{"heading":"editor","content":"Ideal for contributors responsible for day-to-day data management."},{"heading":"commenter","content":"Can view records and leave comments on existing entries."},{"heading":"commenter","content":"Cannot edit, delete, or add records."},{"heading":"commenter","content":"Toolbar access (Filter, Sort, Group By) is not available."},{"heading":"commenter","content":"Best suited for reviewers or collaborators providing feedback."},{"heading":"viewer","content":"Has read-only access to records and comments."},{"heading":"viewer","content":"Cannot make any data changes or leave comments."},{"heading":"viewer","content":"Toolbar access (Filter, Sort, Group By) is not available."},{"heading":"viewer","content":"Ideal for external stakeholders who need view-only access."},{"heading":"no-access","content":"Revokes access entirely to a workspace or base."},{"heading":"no-access","content":"When applied at the workspace level, the user or team cannot access any bases within it."},{"heading":"no-access","content":"When applied at the base level, it restricts access to that base only."},{"heading":"inherit","content":"\"Inherit\" is a special role that allows users to derive their permissions based on team assignments within a workspace. It functions as follows:"},{"heading":"inherit","content":"At the workspace level, allows users to derive their role from team assignments within the workspace."},{"heading":"inherit","content":"At the base level, adopts the role defined at the workspace level."},{"heading":"inherit","content":"Offers flexibility in managing roles across multiple bases within a workspace."},{"heading":"inherit","content":"Note: The Inherit role cannot be directly assigned at the workspace level."},{"heading":"inherit","content":"If a user is invited to a workspace with the Inherit role and then added to a team with the Viewer role, the user will have Viewer access across all bases within that workspace.\nIf the user is invited to the workspace with the No Access role and later added to a team with the Editor role, the user will still have No Access in all bases within that workspace."},{"heading":"inherit","content":"The Inherit role is the only explicit role that allows role derivation from team assignments. For all other roles, explicit workspace roles take precedence over corresponding team roles."},{"heading":"inherit","content":"At base level, if a user is assigned the Inherit role, their effective role will be determined by their workspace-level role or team-derived role, following the effective role resolution rules outlined below."},{"heading":"effective-role-resolution","content":"Effective permissions for a user at base level are determined by combining explicit (individual) assignments and team-derived assignments using the following precedence rules:"},{"heading":"effective-role-resolution","content":"Explicit individual role at Base (highest precedence)"},{"heading":"effective-role-resolution","content":"Best (most permissive) role among Team roles assigned at Base"},{"heading":"effective-role-resolution","content":"Explicit individual role at Workspace level other than \"Inherit\""},{"heading":"effective-role-resolution","content":"Best (most permissive) role among Team roles assigned at Workspace"},{"heading":"effective-role-resolution","content":"No-access (default)"},{"heading":"effective-role-resolution","content":"Notes"},{"heading":"effective-role-resolution","content":"An explicit individual assignment always overrides any team-derived role at the same level."},{"heading":"effective-role-resolution","content":"Lower-level roles (Base) override higher-level roles (Workspace) when an explicit assignment exists at the lower level."},{"heading":"effective-role-resolution","content":"When multiple team roles apply, the system chooses the most permissive role (for example, between Viewer and Editor it will choose Editor)."},{"heading":"effective-role-resolution","content":"Base hierarchy:"},{"heading":"effective-role-resolution","content":"Individual Base role > Team Base role > Individual Workspace role > Team Workspace role > No Access"},{"heading":"effective-role-resolution","content":"Workspace hierarchy:"},{"heading":"effective-role-resolution","content":"Individual Workspace role > Team Workspace role > No Access"},{"heading":"effective-role-resolution","content":"When a user belongs to multiple teams, their Team role is determined by the highest (most permissive) role among all their team assignments."},{"heading":"roles-for-teams","content":"Teams function as a collective access unit for easier management. When a team is assigned a workspace or base role:"},{"heading":"roles-for-teams","content":"All team members inherit that role automatically."},{"heading":"roles-for-teams","content":"Individual user roles can override team-assigned roles if explicitly set."},{"heading":"roles-for-teams","content":"A team can be invited at both workspace and base levels for broader or limited access."},{"heading":"roles-for-teams","content":"Teams cannot be assigned the Owner role."},{"heading":"roles-for-teams","content":"Teams cannot be assigned the Inherit role at the workspace level."},{"heading":"roles-for-teams","content":"type: info"},{"heading":"roles-for-teams","content":"Learn more about Teams & Collaboration here"},{"heading":"roles-for-teams","content":"Teams documentation"},{"heading":"roles-for-teams","content":"Workspace collaboration"},{"heading":"roles-for-teams","content":"Base collaboration"},{"heading":"workspace-level-permissions","content":"The individual who creates the workspace is automatically designated as a Workspace owner.\nA workspace can have only one Owner. Access to bases within that workspace is granted to members based on their roles\nwithin the parent workspace. When a member becomes part of a workspace, the role at the workspace level is\nautomatically applied to them for all bases in that workspace, unless a specific exception is configured\nto override at base level."},{"heading":"workspace-level-permissions","content":"Task"},{"heading":"workspace-level-permissions","content":"Owner"},{"heading":"workspace-level-permissions","content":"Creator"},{"heading":"workspace-level-permissions","content":"Editor"},{"heading":"workspace-level-permissions","content":"Commenter"},{"heading":"workspace-level-permissions","content":"Viewer"},{"heading":"workspace-level-permissions","content":"Invite member to workspace (*1)"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"Manage member access to workspace  (*2)"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"Remove member access from workspace  (*3)"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"View members in workspace"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"Create a new base"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"Access existing bases at assigned roles"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"Delete Workspace"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"️"},{"heading":"workspace-level-permissions","content":"Billing & upgrade options"},{"heading":"workspace-level-permissions","content":"✔️"},{"heading":"workspace-level-permissions","content":"️"},{"heading":"workspace-level-permissions","content":"(*1) Members can invite others at or below their own role."},{"heading":"workspace-level-permissions","content":"(*2) Members can manage access for others at or below their own role."},{"heading":"workspace-level-permissions","content":"(*3) Members can remove others at or below their own role."},{"heading":"collaboration","content":"Task"},{"heading":"collaboration","content":"Owner"},{"heading":"collaboration","content":"Creator"},{"heading":"collaboration","content":"Editor"},{"heading":"collaboration","content":"Commenter"},{"heading":"collaboration","content":"Viewer"},{"heading":"collaboration","content":"Invite member to base (*1)"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"Manage member access to base  (*2)"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"Remove member access from base  (*3)"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"View members in a base"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"Share base"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"Share view"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"✔️"},{"heading":"collaboration","content":"(*1) Members can invite others at or below their own role."},{"heading":"collaboration","content":"(*2) Members can manage access for others at or below their own role."},{"heading":"collaboration","content":"(*3) Members can remove others at or below their own role."},{"heading":"table--view-operations","content":"Task"},{"heading":"table--view-operations","content":"Owner"},{"heading":"table--view-operations","content":"Creator"},{"heading":"table--view-operations","content":"Editor"},{"heading":"table--view-operations","content":"Commenter"},{"heading":"table--view-operations","content":"Viewer"},{"heading":"table--view-operations","content":"Add / modify / delete table"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"Add / modify / delete fields"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"Add / modify / delete views"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"Add / modify / delete view sections"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"Hide / un-hide / reorder fields"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"Add / modify / delete sort"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"Add / modify / delete filters"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"Add / modify / delete group-by"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"Add / modify / delete row colour"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"Add / modify / delete cell colour"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"✔️"},{"heading":"table--view-operations","content":"️"},{"heading":"table--view-operations","content":"️"},{"heading":"record-operations","content":"Task"},{"heading":"record-operations","content":"Owner"},{"heading":"record-operations","content":"Creator"},{"heading":"record-operations","content":"Editor"},{"heading":"record-operations","content":"Commenter"},{"heading":"record-operations","content":"Viewer"},{"heading":"record-operations","content":"Add / modify / delete record"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"View & add comment on a record"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"View record"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"record-operations","content":"✔️"},{"heading":"automations--advanced","content":"Task"},{"heading":"automations--advanced","content":"Owner"},{"heading":"automations--advanced","content":"Creator"},{"heading":"automations--advanced","content":"Editor"},{"heading":"automations--advanced","content":"Commenter"},{"heading":"automations--advanced","content":"Viewer"},{"heading":"automations--advanced","content":"Add / modify / delete Webhook"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"ERD (Project & Table relations)"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"API Snippet"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"API Token"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"},{"heading":"automations--advanced","content":"✔️"}],"headings":[{"id":"roles","content":"Roles"},{"id":"owner","content":"Owner"},{"id":"creator","content":"Creator"},{"id":"editor","content":"Editor"},{"id":"commenter","content":"Commenter"},{"id":"viewer","content":"Viewer"},{"id":"no-access","content":"No Access"},{"id":"inherit","content":"Inherit"},{"id":"effective-role-resolution","content":"Effective Role Resolution"},{"id":"roles-for-teams","content":"Roles for Teams"},{"id":"workspace-level-permissions","content":"Workspace level permissions"},{"id":"base-level-permissions","content":"Base level permissions"},{"id":"collaboration","content":"Collaboration"},{"id":"table--view-operations","content":"Table & view operations"},{"id":"record-operations","content":"Record operations"},{"id":"automations--advanced","content":"Automations & advanced"}]},"url":"/docs/product-docs/roles-and-permissions","title":"Roles & permissions","description":"Learn about roles and permissions in NocoDB."},{"_id":"/docs/product-docs/roles-and-permissions/table-permissions","structured":{"contents":[{"content":"Table permissions in NocoDB allow you to control what users can see and what actions they can perform within a table. Visibility determines whether a table exists for a user, while record permissions allow you to define who can create or delete records in that table."},{"content":"type: info"},{"heading":"table-visibility","content":"Table Visibility determines whether a table and its views are discoverable and accessible to a user within a base. When a table is visible, the user can access and interact with it according to their assigned roles & permissions. When a table is not visible, it is treated as non-existent for that user."},{"heading":"table-visibility","content":"type: note"},{"heading":"table-visibility","content":"Information below lists down various visibility options:"},{"heading":"table-visibility","content":"Option"},{"heading":"table-visibility","content":"Who can see the table"},{"heading":"table-visibility","content":"Creators & up"},{"heading":"table-visibility","content":"Members with Creator or Owner roles"},{"heading":"table-visibility","content":"Editors & up"},{"heading":"table-visibility","content":"Members with Editor, Creator, or Owner roles"},{"heading":"table-visibility","content":"Specific users or teams"},{"heading":"table-visibility","content":"Only selected members or teams"},{"heading":"table-visibility","content":"Everyone"},{"heading":"table-visibility","content":"All members of the base (default)"},{"heading":"table-visibility","content":"type: note"},{"heading":"table-visibility","content":"Note:"},{"heading":"table-visibility","content":"By default, all tables are visible to everyone in the base."},{"heading":"table-visibility","content":"Table visibility is evaluated before checking record permissions. If a table is not visible to a user, they cannot access it or perform any actions within it, regardless of their record permissions."},{"heading":"table-visibility","content":"Hidden tables will be excluded from APIs, Automations, Scripts & Extensions that list or access tables."},{"heading":"configuring-visibility","content":"To configure the visibility of a specific table:"},{"heading":"configuring-visibility","content":"Click the ⋯ icon next to the table name in the sidebar."},{"heading":"configuring-visibility","content":"Select Edit table permissions."},{"heading":"configuring-visibility","content":"Use the dropdown menus against Who can see this table? to define visibility."},{"heading":"configuring-visibility","content":"If you select Specific users or teams, choose the members or teams who should have access to the table."},{"heading":"configuring-visibility","content":"Note that, only Base Owners can modify table visibility settings. Other members will not see this option in the menu."},{"heading":"visibility-notes","content":"Shared bases and shared views\nTable visibility affects shared access. Only tables with the visibility option set to Everyone are accessible in a shared base or shared view."},{"heading":"visibility-notes","content":"Relational fields\nWhen a table is hidden from a user, relational fields linking to that table will list only the display values of the linked records. Based on their role (Editor+), the user may still link or unlink records from the source table, but cannot open or access the linked records themselves. Lookup and Rollup fields continue to function and display values from the hidden table, without granting visibility or access to that table."},{"heading":"visibility-notes","content":"Edit modal for relational fields linking to hidden tables would display table & view names as \"Private Table\" and \"Private View\" respectively."},{"heading":"visibility-notes","content":"Duplicating bases\nWhen duplicating a base, only the tables visible to the duplicating user are copied to the new base. Tables hidden from that user are excluded from the duplicated base. Hence, relational fields linking to hidden tables will also be excluded. Formula fields referencing such relational fields may display errors due to missing references."},{"heading":"table-record-permissions","content":"Table Record Permissions determine what actions a user can perform on records within a table. When permissions are granted, users can create or delete records according to their assigned roles and configured access levels. When permissions are restricted, those actions are disabled, while the table and its records may still remain visible to the user."},{"heading":"configuring-record-permissions","content":"To configure record access permissions for a specific table:"},{"heading":"configuring-record-permissions","content":"Click the ⋯ icon next to the table name in the sidebar."},{"heading":"configuring-record-permissions","content":"Select Edit table permissions."},{"heading":"configuring-record-permissions","content":"Use the dropdown menus to define who can:"},{"heading":"configuring-record-permissions","content":"Create records"},{"heading":"configuring-record-permissions","content":"Delete records"},{"heading":"permission-levels","content":"You can assign different access levels for each action (create or delete record). The available options are:"},{"heading":"permission-levels","content":"Option"},{"heading":"permission-levels","content":"Who gets access"},{"heading":"permission-levels","content":"Editors & up"},{"heading":"permission-levels","content":"Members with Editor, Creator, or Owner roles (default)"},{"heading":"permission-levels","content":"Creators & up"},{"heading":"permission-levels","content":"Members with Creator or Owner roles"},{"heading":"permission-levels","content":"Specific users or teams"},{"heading":"permission-levels","content":"Selected members or teams"},{"heading":"permission-levels","content":"Nobody"},{"heading":"permission-levels","content":"No one can perform this action"},{"heading":"permission-levels","content":"By default, members with the Editor role and above can create and delete records in a table."},{"heading":"permission-levels","content":"Choose Creators & up to restrict these actions to creators and owners."},{"heading":"permission-levels","content":"Choose Nobody to disable record creation or deletion entirely."},{"heading":"permission-levels","content":"Choose Specific users or teams to grant access only to selected members or teams."},{"heading":"permission-levels","content":"type: info"},{"heading":"record-permission-notes","content":"Table permissions do not control record visibility — users with access can still view all records. However, their ability to create or delete records depends on the configured permissions."},{"heading":"record-permission-notes","content":"Permissions are applied at the table level and affect all records within that table. They cannot be defined for individual records or specific subsets."},{"heading":"record-permission-notes","content":"Table permissions function independently of field permissions; each can be configured separately."},{"heading":"record-permission-notes","content":"Table permissions also apply to:"},{"heading":"record-permission-notes","content":"Record creation or deletion via APIs, and"},{"heading":"record-permission-notes","content":"Record creation through shared forms."},{"heading":"permissions-overview","content":"The permissions overview provides a consolidated summary of table and field permissions across the base."},{"heading":"permissions-overview","content":"To access the permissions overview:"},{"heading":"permissions-overview","content":"Go to the base homepage (click Overview in the sidebar)."},{"heading":"permissions-overview","content":"Click the Permissions tab."},{"heading":"permissions-overview","content":"Select the table you want to review. The overview displays both table and field permissions, showing who can see the table, create records, delete records, and the visibility of each field within that table."},{"heading":"permissions-overview","content":"You can also open the Permissions overview directly from the table or field permission configuration modal."}],"headings":[{"id":"table-visibility","content":"Table Visibility"},{"id":"configuring-visibility","content":"Configuring Visibility"},{"id":"visibility-notes","content":"Visibility Notes"},{"id":"table-record-permissions","content":"Table Record Permissions"},{"id":"configuring-record-permissions","content":"Configuring Record Permissions"},{"id":"permission-levels","content":"Permission Levels"},{"id":"record-permission-notes","content":"Record Permission Notes"},{"id":"permissions-overview","content":"Permissions Overview"}]},"url":"/docs/product-docs/roles-and-permissions/table-permissions","title":"Table Permissions","description":"Learn about working with table permissions in NocoDB."},{"_id":"/docs/product-docs/table-operations/download","structured":{"contents":[{"content":"NocoDB offers users the ability to export data from the spreadsheet grid in a variety of formats. This feature can be used in conjunction with the Filter and Sort feature to further refine your data."},{"heading":"download-data","content":"To export data as CSV from NocoDB, follow these steps:"},{"heading":"download-data","content":"Click : icon in the toolbar to access the table additional operation's menu."},{"heading":"download-data","content":"Choose the Download option."},{"heading":"download-data","content":"Select the CSV as file format."},{"heading":"upload-data","content":"To upload data into NocoDB, you can import CSV files directly into your tables. For more information on how to upload data, refer here."},{"heading":"faq","content":"I'm having trouble exporting data—it says the pop-up window is blocked."},{"heading":"faq","content":"This is a browser-specific issue, not related to NocoDB. If you're using Chrome, follow these instructions to unblock pop-ups."}],"headings":[{"id":"download-data","content":"Download Data"},{"id":"upload-data","content":"Upload Data"},{"id":"faq","content":"FAQ"}]},"url":"/docs/product-docs/table-operations/download","title":"Upload & Download"},{"_id":"/docs/product-docs/table-operations/field-operations","structured":{"contents":[{"content":"Use the Fields button in the toolbar to manage"},{"content":"field visibility"},{"content":"field order"},{"content":"cover image in Gallery and Kanban views."},{"content":"show / hide system fields"},{"content":"add new field"},{"content":"add lookup field using existing relational fields"},{"heading":"show--hide-fields","content":"To show or hide fields, open the Fields menu and toggle the switch next to each field name."},{"heading":"show--hide-fields","content":"type: tip"},{"heading":"rearranging-fields","content":"To rearrange field positions, open the Fields menu and drag fields using the ⋮⋮ (drag icon) next to each field name."},{"heading":"show--hide-system-fields","content":"By default, system fields are hidden — you can enable them by selecting Show system fields."},{"heading":"show--hide-system-fields","content":"type: info"},{"heading":"change-cover-field","content":"In Gallery and Kanban views, you can change the cover field by clicking Cover image field in the Edit Cards menu. Only fields of type Attachment can be used as cover fields. You can also use the Settings button in the same menu to adjust image display properties like Fit image or Cover image."},{"heading":"add-new-field","content":"To add a new field, click the + New Field button at the bottom of the Fields menu. This opens the field creation modal where you can select the field type and configure its properties."},{"heading":"add-lookup-field-using-existing-relational-fields","content":"To add a lookup field based on an existing relational field, click relational field in the Fields menu. This opens a modal where you can select the target field to create a lookup field. Click Add n lookup field(s) to complete the process."},{"heading":"hide-field-labels-","content":"type: new"},{"heading":"hide-field-labels-","content":"In Gallery and Kanban views, you can hide field labels (headers) shown inside each record tile/card. This helps create a cleaner, more compact card layout—especially useful when cards are used for visual scanning."},{"heading":"hide-field-labels-","content":"Steps"},{"heading":"hide-field-labels-","content":"Open the Gallery or Kanban view."},{"heading":"hide-field-labels-","content":"Click the More options (⋮) menu in the view toolbar."},{"heading":"hide-field-labels-","content":"Select Hide field header / Show field header to toggle the setting."},{"heading":"hide-field-labels-","content":"Once enabled, field names (labels) are hidden and only field values are shown on the record tiles/cards."},{"heading":"hide-field-labels-","content":"type: info"},{"heading":"hide-field-labels-","content":"type: tip"}],"headings":[{"id":"show--hide-fields","content":"Show / hide fields"},{"id":"rearranging-fields","content":"Rearranging fields"},{"id":"show--hide-system-fields","content":"Show / hide system fields"},{"id":"change-cover-field","content":"Change cover field"},{"id":"add-new-field","content":"Add new field"},{"id":"add-lookup-field-using-existing-relational-fields","content":"Add lookup field using existing relational fields"},{"id":"hide-field-labels-","content":"Hide field labels ☁"}]},"url":"/docs/product-docs/table-operations/field-operations","title":"Hide & reorder fields","description":"Learn how to hide and reorder fields in NocoDB."},{"_id":"/docs/product-docs/table-operations/filter","structured":{"contents":[{"content":"Filters help you narrow down and organize data based on specific conditions. NocoDB supports:"},{"content":"Nested filters: Combine multiple conditions across different fields."},{"content":"AND / OR logic: Choose how filters are grouped."},{"content":"Use filters to focus only on the records that matter to you."},{"heading":"add-or-edit-filters","content":"Click the Filter button in the toolbar."},{"heading":"add-or-edit-filters","content":"Choose Add filter or Add filter group."},{"heading":"add-or-edit-filters","content":"Set up each filter by selecting a Field, Operation, and (if needed) a Value."},{"heading":"add-or-edit-filters","content":"To refine results further, combine multiple filters using AND or OR logic."},{"heading":"group-filters","content":"You can group multiple filters together using a Filter Group to build complex, nested conditions. This allows you to combine filters using either AND or OR logic, enabling more precise control over your data. To create a filter group, click the Filter button in the toolbar and choose + Add filter group. Within a group, you can add individual filters or even nest additional groups."},{"heading":"delete-filters","content":"type: info"},{"heading":"delete-filters","content":"To remove a filter, click on the trash / bin icon located to the right of the respective filter."},{"heading":"filter-by-current-user-","content":"type: info"},{"heading":"filter-by-current-user-","content":"You can filter records based on the currently logged-in user using the Current User option when configuring filters on User fields and their derivatives (such as createdBy and updatedBy). This is especially useful for creating views that show only the records relevant to the user viewing them."},{"heading":"filter-by-current-user-","content":"When a dynamic Current User filter is applied, the toolbar shows an @ icon next to the filter count as an indicator."},{"heading":"filter-by-current-user-","content":"type: warning"},{"heading":"toggle-filters-","content":"type: info"},{"heading":"toggle-filters-","content":"Toggle filters let you temporarily enable or disable individual filters without deleting them. This is useful when you want to quickly compare filtered and unfiltered views, or try different combinations of conditions without rebuilding them each time."},{"heading":"toggle-filters-","content":"Each filter row includes a checkbox on the left side. Unchecking it disables the filter — the condition is preserved but no longer applied to the view. The toolbar badge shows a count in the format enabled/total (e.g., 2/5) when some filters are disabled, so you always know how many are active."},{"heading":"toggle-filters-","content":"Toggle filters work with both individual filters and filter groups. When a filter group is disabled, all filters within that group are also disabled. Disabled filters remain saved in the view and can be re-enabled at any time."},{"heading":"pinned-filters-","content":"type: info"},{"heading":"pinned-filters-","content":"Pinned filters give you quick, one-click access to frequently used filters directly from the toolbar — without needing to open the filter menu. A pinned filter appears as a compact pill in the toolbar showing the field name and current value. Clicking the pill opens a dropdown where you can search and change the value instantly."},{"heading":"pin-a-filter","content":"Click the Filter button in the toolbar and locate the filter you want to pin."},{"heading":"pin-a-filter","content":"Click the Pin icon to the right of the filter row."},{"heading":"pin-a-filter","content":"The filter appears as a pill in the toolbar, ready for quick access."},{"heading":"pin-a-filter","content":"To unpin a filter, click the Pin icon again on the filter row — it will be highlighted for pinned filters."},{"heading":"using-pinned-filters","content":"Clicking a pinned filter pill opens a dropdown panel directly in the toolbar. From here you can search for values, select or deselect options, and changes are applied to the view immediately. The dropdown also includes a Clear value option to reset the filter."},{"heading":"using-pinned-filters","content":"Each pill includes a toggle icon to quickly enable or disable the filter without opening the filter menu."},{"heading":"negated-operators","content":"When a pinned filter uses a negated operator (e.g., is not, is not any of), the pill displays a diagonal strikethrough line over the selected values. This visual cue makes it easy to distinguish between inclusive and exclusive filters at a glance."},{"heading":"supported-field-types","content":"Pinned filters are supported for the following field types:"},{"heading":"supported-field-types","content":"Single Select"},{"heading":"supported-field-types","content":"Multi Select"},{"heading":"supported-field-types","content":"User"},{"heading":"supported-field-types","content":"Created By"},{"heading":"supported-field-types","content":"Last Modified By"},{"heading":"limitations","content":"type: info"},{"heading":"limitations","content":"Only one filter per field can be pinned at a time — if a field already has a pinned filter, additional filters on the same field cannot be pinned. Filter groups cannot be pinned; only individual filters support pinning."},{"heading":"limitations","content":"Pinned filters are not available for editor roles in collaborative or locked views. In personal views, editors have full access to pin and interact with pinned filters."},{"heading":"filters-for-editor-role","content":"In collaborative and locked views, editors have limited control over filters. Filters configured by creators are displayed as read-only — editors can see them but cannot modify, delete, toggle, or pin them. Editors can add their own filters, but these are temporary and do not persist across page refreshes. The toolbar badge reflects the combined count of both persisted (creator) and temporary (editor) filters."},{"heading":"filters-for-editor-role","content":"In personal views, editors have full control — they can create, edit, delete, toggle, and pin filters just like creators."},{"heading":"enabling-null-and-empty-filters","content":"By default, filters like is null, is not null, is empty, and is not empty are hidden in the filter menu. To use them explicitly, go to Base settings and enable Show NULL and EMPTY filter."},{"heading":"enabling-null-and-empty-filters","content":"Before enabling the setting:"},{"heading":"enabling-null-and-empty-filters","content":"After enabling it, you’ll see additional options like is null and is empty, which let you filter out cells with NULL or empty values."},{"heading":"enabling-null-and-empty-filters","content":"Alternatively, you can use is blank and is not blank filters to handle both NULL and EMPTY values in a simplified way."}],"headings":[{"id":"add-or-edit-filters","content":"Add or edit filters"},{"id":"group-filters","content":"Group filters"},{"id":"delete-filters","content":"Delete filters"},{"id":"filter-by-current-user-","content":"Filter by current user ☁"},{"id":"toggle-filters-","content":"Toggle filters ☁"},{"id":"pinned-filters-","content":"Pinned filters ☁"},{"id":"pin-a-filter","content":"Pin a filter"},{"id":"using-pinned-filters","content":"Using pinned filters"},{"id":"negated-operators","content":"Negated operators"},{"id":"supported-field-types","content":"Supported field types"},{"id":"limitations","content":"Limitations"},{"id":"filters-for-editor-role","content":"Filters for editor role"},{"id":"enabling-null-and-empty-filters","content":"Enabling NULL and EMPTY filters"}]},"url":"/docs/product-docs/table-operations/filter","title":"Filtering records","description":"Learn how to filter records in NocoDB."},{"_id":"/docs/product-docs/table-operations/full-screen","structured":{"contents":[{"content":"The Fullscreen Mode button, available in the toolbar, allows you to expand any view area to occupy the entire screen. This helps you focus on your data by hiding navigation menus and other interface elements."},{"heading":"enable-fullscreen-mode","content":"To enable fullscreen, click the Enter Fullscreen button on the toolbar."},{"heading":"enable-fullscreen-mode","content":"Once activated, the grid view will stretch to cover the entire workspace area."},{"heading":"exit-fullscreen-mode","content":"To exit fullscreen, click the Exit Fullscreen button that appears in the same position."},{"heading":"exit-fullscreen-mode","content":"This feature is especially useful when working with large datasets, as it maximizes screen space for better visibility and navigation."}],"headings":[{"id":"enable-fullscreen-mode","content":"Enable Fullscreen Mode"},{"id":"exit-fullscreen-mode","content":"Exit Fullscreen Mode"}]},"url":"/docs/product-docs/table-operations/full-screen","title":"Full Screen","description":"Learn how to use the Full Screen mode in NocoDB for an enhanced data viewing experience."},{"_id":"/docs/product-docs/table-operations/group-by","structured":{"contents":[{"content":"Grouping records in NocoDB helps you organize data by categories using Groups and Subgroups. You can group records by up to three levels, making it easier to analyze and navigate complex datasets."},{"heading":"add-or-edit-groups","content":"Click Group By in the toolbar."},{"heading":"add-or-edit-groups","content":"Select the field to group records by."},{"heading":"add-or-edit-groups","content":"(Optional) Sort the groups in ascending or descending order."},{"heading":"add-or-edit-groups","content":"(Optional) Use + New Subgroup to create a subgroup within the selected group."},{"heading":"add-or-edit-groups","content":"type: info"},{"heading":"delete-groups","content":"Click Group By in the toolbar."},{"heading":"delete-groups","content":"Click the 🗑 icon next to the group you want to remove."},{"heading":"delete-groups","content":"type: info"},{"heading":"group-level-field-aggregations","content":"You can perform aggregations on fields at each group level. This allows you to summarize data within each group, such as calculating totals or averages."}],"headings":[{"id":"add-or-edit-groups","content":"Add or edit groups"},{"id":"delete-groups","content":"Delete groups"},{"id":"group-level-field-aggregations","content":"Group level field aggregations"}]},"url":"/docs/product-docs/table-operations/group-by","title":"Grouping records","description":"Learn how to group records in NocoDB."},{"_id":"/docs/product-docs/table-operations","structured":{"contents":[{"content":"The toolbar provides a set of tools to interact with the data in the table. The toolbar is located at the top of the view area."},{"heading":"available-tools","content":"Hide & Reorder Fields"},{"heading":"available-tools","content":"Filter"},{"heading":"available-tools","content":"Sort"},{"heading":"available-tools","content":"GroupBy"},{"heading":"available-tools","content":"Row height"},{"heading":"available-tools","content":"Quick Search"},{"heading":"available-tools","content":"Full Screen"},{"heading":"available-tools","content":"Download"},{"heading":"available-tools","content":"For a visual guide on how to use the toolbar and its features, check out this video:"}],"headings":[{"id":"available-tools","content":"Available Tools"}]},"url":"/docs/product-docs/table-operations","title":"Table operations","description":"Learn how to work with filters, sort, group by, and more in NocoDB."},{"_id":"/docs/product-docs/table-operations/record-colouring","structured":{"contents":[{"content":"type: info"},{"content":"In NocoDB, you can apply colours to records in a table to visually distinguish them based on specific criteria. This feature is particularly useful for highlighting important information or categorizing records. Record colouring is available for Grid, Gallery, Kanban & Calendar views."},{"content":"When using conditions-based colouring, you can choose between two colouring modes:"},{"content":"Row colouring — applies colour to the entire record (available on Plus plan and higher)"},{"content":"Cell colouring — applies colour to a specific field within the record (available on Business plan and higher)"},{"content":"Colouring is applied at view level; hence, configuring colour in one view will not affect the same record in another view."},{"heading":"add-record-colour","content":"You can access the record colouring options by clicking the Colour button in the toolbar of any table view."},{"heading":"add-record-colour","content":"You can colour your records based on"},{"heading":"add-record-colour","content":"Single select field"},{"heading":"add-record-colour","content":"Conditions"},{"heading":"based-on-single-select-field","content":"To colour records based on a single select field, follow these steps:"},{"heading":"based-on-single-select-field","content":"Click the Colour button in the toolbar."},{"heading":"based-on-single-select-field","content":"Select the Using Single select field option."},{"heading":"based-on-single-select-field","content":"Choose the single select field you want to use for colouring records from the dropdown menu."},{"heading":"based-on-single-select-field","content":"When colouring records using a single select field, each record inherits the colour associated with its selected option in that field. Records without a value in the selected field will not be coloured. This behaviour is predefined and cannot be customized."},{"heading":"based-on-single-select-field","content":"Row colouring by default applies a left border to the records in the table view. You can additionally apply background colour to the records by toggling the Background colour option."},{"heading":"based-on-conditions","content":"To colour records based on conditions, follow these steps:"},{"heading":"based-on-conditions","content":"Click the Colour button in the toolbar."},{"heading":"based-on-conditions","content":"Select the Using Conditions option."},{"heading":"based-on-conditions","content":"Choose the colour you want to apply from the colour picker."},{"heading":"based-on-conditions","content":"Select the colouring mode — Row or Cell — from the dropdown next to the colour picker."},{"heading":"based-on-conditions","content":"If you selected Cell, choose the target field from the field dropdown that appears."},{"heading":"based-on-conditions","content":"Configure the conditions for colouring as required."},{"heading":"based-on-conditions","content":"You can add multiple conditions to colour records based on different criteria. The conditions are evaluated in the order they are added, and the first matching condition will determine the colour applied to the record or cell."},{"heading":"row-colouring","content":"When the colouring mode is set to Row, the colour is applied to the entire record. This is the default mode."},{"heading":"row-colouring","content":"Row colouring by default applies a left border to the records in the table view. You can additionally apply background colour to the records by toggling the Background colour option."},{"heading":"cell-colouring","content":"type: info"},{"heading":"cell-colouring","content":"When the colouring mode is set to Cell, the colour is applied only to the specific field you select. This is useful when you want to draw attention to a particular field value without colouring the entire row."},{"heading":"cell-colouring","content":"To configure cell colouring:"},{"heading":"cell-colouring","content":"Select Cell from the colouring mode dropdown next to the colour picker."},{"heading":"cell-colouring","content":"Choose the target field from the field selector that appears."},{"heading":"cell-colouring","content":"Configure the conditions and toggle the Background colour option as needed."},{"heading":"cell-colouring","content":"When background colour is enabled, the selected field's cell is highlighted with the chosen colour. When background colour is disabled, a vertical colour indicator bar appears on the left edge of the field."},{"heading":"cell-colouring","content":"type: note"},{"heading":"combining-row-and-cell-colouring","content":"You can configure both row and cell colouring conditions within the same view. Each condition can independently be set to either Row or Cell mode. When both row and cell colouring apply to the same record, the cell colour takes precedence over the row colour for the targeted field, while the remaining fields display the row colour."},{"heading":"modify-record-colour","content":"For record colouring based on single select field, you can modify the colour associated with each option in the single select field by using edit-field option."},{"heading":"modify-record-colour","content":"For record colouring based on conditions, you can modify the conditions, colouring mode (Row or Cell), target field, and the associated colours as required from the dropdown menu that appears when you click the Colour button in the toolbar."},{"heading":"modify-record-colour","content":"Note that, it's not possible to have different colour for single select field options in different views. The colour associated with each option in the single select field is consistent across all views where that field is used for colouring records."},{"heading":"remove-record-colour","content":"You can remove the colouring applied to records in a table view by following these steps:"},{"heading":"single-select-field-case","content":"Click the Colour button in the toolbar."},{"heading":"single-select-field-case","content":"Remove conditions one by one by clicking the delete button next to each condition."},{"heading":"conditions-case","content":"Click the Colour button in the toolbar."},{"heading":"conditions-case","content":"Click \"Remove colouring\" button from the dropdown."}],"headings":[{"id":"add-record-colour","content":"Add record colour"},{"id":"based-on-single-select-field","content":"Based on single select field"},{"id":"based-on-conditions","content":"Based on conditions"},{"id":"row-colouring","content":"Row colouring"},{"id":"cell-colouring","content":"Cell colouring"},{"id":"combining-row-and-cell-colouring","content":"Combining row and cell colouring"},{"id":"modify-record-colour","content":"Modify record colour"},{"id":"remove-record-colour","content":"Remove record colour"},{"id":"single-select-field-case","content":"Single select field case"},{"id":"conditions-case","content":"Conditions case"}]},"url":"/docs/product-docs/table-operations/record-colouring","title":"Colouring records ☁","description":"Learn how to colour records and individual fields in NocoDB."},{"_id":"/docs/product-docs/table-operations/row-height","structured":{"contents":[{"content":"NocoDB offers users the flexibility to adjust the display height of records within the spreadsheet grid to four distinct levels: Short (the default setting), Medium, Tall, and Extra. This feature proves valuable when working with extensive text fields and multi-select fields, as it enables users to present a greater amount of content within each cell."}],"headings":[{"id":"short","content":"Short"},{"id":"medium","content":"Medium"},{"id":"tall","content":"Tall"},{"id":"extra","content":"Extra"}]},"url":"/docs/product-docs/table-operations/row-height","title":"Record height","description":"Learn how to adjust the height of records in NocoDB."},{"_id":"/docs/product-docs/table-operations/search","structured":{"contents":[{"content":"NocoDB provides a quick search feature in the toolbar that helps you locate records efficiently across large datasets. You can search by a specific field or across all fields, and combine this with filters to narrow down the results further."},{"content":"To use search:"},{"content":"Click the Search button in the toolbar."},{"content":"(Optional) Select the Field to search within."},{"content":"Enter your search term in the search bar."}],"headings":[]},"url":"/docs/product-docs/table-operations/search","title":"Search","description":"Learn how to search for records in NocoDB."},{"_id":"/docs/product-docs/table-operations/sort","structured":{"contents":[{"content":"Sorting enables you to arrange your data alphabetically (A → Z) or (Z → A) for text based types and in ascending or descending order for numerical types. NocoDB supports nested sorting, allowing you to select fields and the order in which to apply nested sorting."},{"heading":"add-or-edit-sort","content":"Click the Sort button in the toolbar menu."},{"heading":"add-or-edit-sort","content":"Choose the Field to sort by."},{"heading":"add-or-edit-sort","content":"Configure the sorting Direction : ascending or descending"},{"heading":"add-or-edit-sort","content":"Use + Add Sort Option to add additional fields for sorting."},{"heading":"add-or-edit-sort","content":"type: info"},{"heading":"delete-sort","content":"Click the Sort button in the toolbar."},{"heading":"delete-sort","content":"Click on the trash / bin icon to the right of the sort you wish to delete."}],"headings":[{"id":"add-or-edit-sort","content":"Add or edit sort"},{"id":"delete-sort","content":"Delete sort"}]},"url":"/docs/product-docs/table-operations/sort","title":"Sorting records","description":"Learn how to sort records in NocoDB."},{"_id":"/docs/product-docs/tables/actions-on-table","structured":{"contents":[{"heading":"rename-table","content":"Click the ... (ellipsis) next to the table name in the left sidebar and select Rename table from the context menu."},{"heading":"rename-table","content":"Alternatively, double-click on the table name in the left sidebar to make it editable."},{"heading":"rename-table","content":"Enter the new name for the table in the input field that appears. Use the Enter key to confirm the new name or click outside the input field to save changes."},{"heading":"change-table-icon","content":"Click the current table icon next to the table name in the left sidebar."},{"heading":"change-table-icon","content":"Choose a new icon from the available options."},{"heading":"duplicate-table","content":"Click the ... (ellipsis) next to the table name in the left sidebar and select Duplicate table."},{"heading":"duplicate-table","content":"(Optional) In the dialog:"},{"heading":"duplicate-table","content":"Use Include data to copy the table with or without its records."},{"heading":"duplicate-table","content":"Use Include views to copy it with or without its saved views."},{"heading":"duplicate-table","content":"Click Duplicate Table."},{"heading":"duplicate-table","content":"A new table will be created based on your selected options."},{"heading":"duplicate-table","content":"Additional notes"},{"heading":"duplicate-table","content":"Duplicate table will be created in the same base as the original table"},{"heading":"duplicate-table","content":"Duplicate table will carry suffix  Copy in its name."},{"heading":"duplicate-table","content":"Duplicate table option is not available for External DB bases"},{"heading":"delete-table","content":"type: info"},{"heading":"delete-table","content":"Click the ... (ellipsis) next to the table name in the left sidebar and select Delete table."},{"heading":"delete-table","content":"In the confirmation dialog, click Delete Table to confirm."},{"heading":"add--edit-table-description","content":"Table description can be added by clicking on the Add Description button on the table creation modal or by clicking on the Edit Description button from the table context menu. Description for a table will be visible as a tooltip when hovering over the info icon next to the table name in the left sidebar."},{"heading":"table-permissions","content":"type: info"},{"heading":"table-permissions","content":"Table permissions in NocoDB let you control who can create or delete records in each table. Find more details here"},{"heading":"find-table-id","content":"Each table in NocoDB has a unique ID (prefixed with m, short for model) that identifies it within a base."},{"heading":"find-table-id","content":"You can find the table ID in the URL when viewing a table."},{"heading":"find-table-id","content":"Example:"},{"heading":"find-table-id","content":"In this example, the table ID is: mxo5v3uj1l1xjpz"},{"heading":"find-table-id","content":"You can also copy the table ID by clicking the ... (ellipsis) next to the table name and selecting Copy Table ID."},{"heading":"find-table-id","content":"Usage: Table IDs are commonly used in API calls, scripting, and integrations where you need to reference a specific table."}],"headings":[{"id":"rename-table","content":"Rename table"},{"id":"change-table-icon","content":"Change table icon"},{"id":"duplicate-table","content":"Duplicate table"},{"id":"delete-table","content":"Delete table"},{"id":"add--edit-table-description","content":"Add / edit table description"},{"id":"table-permissions","content":"Table permissions"},{"id":"find-table-id","content":"Find table ID"}]},"url":"/docs/product-docs/tables/actions-on-table","title":"Actions on table","description":"Learn how to rename, duplicate, and delete a table in NocoDB."},{"_id":"/docs/product-docs/tables/create-table-via-import","structured":{"contents":[{"heading":"accessing-import-modal","content":"There are two ways to access import modal:"},{"heading":"importing-file","content":"To import a file, follow the steps below:"},{"heading":"importing-file","content":"There are two ways to upload source file:"},{"heading":"importing-file","content":"Upload : Upload from local directory. Either click 'browse file' or drag and drop file."},{"heading":"importing-file","content":"Add from URL : Specify the URL of the file."},{"heading":"importing-file","content":"(optional) Select character encoding. By default, it is set to UTF-8."},{"heading":"importing-file","content":"(optional) Configure Advance Settings"},{"heading":"importing-file","content":"Click on Import button."},{"heading":"importing-file","content":"(optional) Specify the table name. By default, the file name will be used as the table name."},{"heading":"importing-file","content":"(optional) Select the columns from the CSV to be included in the table. By default, all fields are included."},{"heading":"importing-file","content":"(optional) Modify the field name. By default, the field name is the same as the column name in the CSV."},{"heading":"importing-file","content":"Click on Import button to start importing the file."},{"heading":"importing-file","content":"Additional notes"},{"heading":"importing-file","content":"Multiple files can be imported at once."},{"heading":"importing-file","content":"Supported file formats: CSV, Excel, JSON"},{"heading":"importing-file","content":"Maximum file size: 5 MB"},{"heading":"importing-file","content":"All fields are imported by default as Single line text. Field type as required can be changed after file is imported."},{"heading":"importing-file","content":"By default, the first field will be chosen as Display Value."},{"heading":"advanced-settings","content":"Use first record as header: Enabled by default. If selected, the first record in the spreadsheet will be treated as the header record and its contents will be used as field names."},{"heading":"advanced-settings","content":"Import data: Enabled by default. If selected, all data will be imported; otherwise, only the table will be created."}],"headings":[{"id":"import-table-from-csv--excel--json","content":"Import table from CSV / Excel / JSON"},{"id":"accessing-import-modal","content":"Accessing import modal"},{"id":"1-from-the-base-dashboard","content":"1. From the base dashboard"},{"id":"2-from-the-base-context-menu","content":"2. From the base context menu"},{"id":"importing-file","content":"Importing file"},{"id":"advanced-settings","content":"Advanced Settings"}]},"url":"/docs/product-docs/tables/create-table-via-import","title":"Create table via import","description":"Learn how to create a table in NocoDB via import from CSV, Excel or JSON."},{"_id":"/docs/product-docs/tables/create-table","structured":{"contents":[{"heading":"create-a-new-table","content":"To create a table from scratch:"},{"heading":"create-a-new-table","content":"Click + Create New in the left sidebar."},{"heading":"create-a-new-table","content":"From the dropdown, select Table."},{"heading":"create-a-new-table","content":"(Optional) Provide a name for the table in the modal that appears."},{"heading":"create-a-new-table","content":"(Optional) Use Add Description to include additional context or details."},{"heading":"create-a-new-table","content":"Click Create Table to complete the setup."},{"heading":"creating-table-using-ai","content":"type: info"},{"heading":"creating-table-using-ai","content":"NocoAI can provide a set of suggested tables based on your current schema and context. The tables thus created will include relevant fields and will be linked to existing tables where applicable. This allows you to quickly expand your database structure without manually defining each table and its relationships."},{"heading":"creating-table-using-ai","content":"For more details on how to use this feature, refer to the NocoAI documentation."}],"headings":[{"id":"create-a-new-table","content":"Create a new table"},{"id":"creating-table-using-ai","content":"Creating table Using AI"}]},"url":"/docs/product-docs/tables/create-table","title":"Create table","description":"Learn how to create a table in NocoDB."},{"_id":"/docs/product-docs/tables/import-data-into-existing-table","structured":{"contents":[{"heading":"accessing-import-modal","content":"Click on ⋮ context menu from the toolbar."},{"heading":"accessing-import-modal","content":"Select Upload from the dropdown menu."},{"heading":"accessing-import-modal","content":"Select CSV / Excel option."},{"heading":"importing-file-data","content":"Select file to upload"},{"heading":"importing-file-data","content":"There are two ways to upload source file:"},{"heading":"importing-file-data","content":"Upload : Upload from local directory. Either click 'browse file' or drag and drop file."},{"heading":"importing-file-data","content":"Add from URL : Specify the URL of the file."},{"heading":"importing-file-data","content":"(optional) Select character encoding. By default, it is set to UTF-8."},{"heading":"importing-file-data","content":"Advanced Settings : Use first record as header"},{"heading":"importing-file-data","content":"Enabled by default. If selected, the first record in the spreadsheet will be treated as the header record and its contents will be used as field names."},{"heading":"importing-file-data","content":"Click on Upload files button."},{"heading":"importing-file-data","content":"Mapping Fields (Optional)"},{"heading":"importing-file-data","content":"You can reconfigure the mapping by utilizing the dropdown menu that appears when you click on the destination field."},{"heading":"importing-file-data","content":"Existing field names are listed under NocoDB field (column to the right), while new fields identified from the import file are listed under Field (column to the left)."},{"heading":"importing-file-data","content":"NocoDB automatically maps field names in the import file based on the NocoDB field names."},{"heading":"importing-file-data","content":"Exclude fields (Optional)"},{"heading":"importing-file-data","content":"Uncheck checkbox to exclude a field from being imported."},{"heading":"importing-file-data","content":"Allow create missing select field options (Optional)"},{"heading":"importing-file-data","content":"If enabled, NocoDB will create new options for select fields that are not already present in the table."},{"heading":"importing-file-data","content":"Initiate Import"},{"heading":"importing-file-data","content":"Click on the Upload button to commence the file import process."},{"heading":"importing-file-data","content":"On completion, the imported data will be appended to the existing table."}],"headings":[{"id":"import-data-from-csv--excel","content":"Import data from CSV / Excel"},{"id":"accessing-import-modal","content":"Accessing import modal"},{"id":"importing-file-data","content":"Importing file data"}]},"url":"/docs/product-docs/tables/import-data-into-existing-table","title":"Upload data into a table","description":"Learn how to upload data into an existing table in NocoDB."},{"_id":"/docs/product-docs/tables","structured":{"contents":[{"content":"Tables are where your data lives in NocoDB — made up of records (rows) and fields (columns). Each base can have multiple tables, and you can link them to create relationships between datasets."},{"content":"NocoDB tables function like spreadsheets, with added flexibility:"},{"content":"View data as a grid, kanban board, gallery, or calendar."},{"content":"Perform operations like sorting, filtering, and aggregation."},{"content":"You can:"},{"content":"Create a new table"},{"content":"Import a table from CSV, Excel, or JSON"},{"content":"Import data into an existing table"},{"content":"Rename, duplicate, or delete a table"},{"content":"Use tables to organize your data your way — flexible, powerful, and easy to manage."}],"headings":[]},"url":"/docs/product-docs/tables","title":"Tables","description":"Learn how to create, import, and manage tables in NocoDB."},{"_id":"/docs/product-docs/views/actions-on-view","structured":{"contents":[{"heading":"view-context-menu","content":"The view context menu provides a set of tools to interact with the view. The view context menu can be accessed by clicking on the ellipsis symbol (...) located next to view in the left sidebar."},{"heading":"rename-view","content":"Click on the ellipsis symbol (...) next to view name located in the left sidebar."},{"heading":"rename-view","content":"Click on the Rename option from the view context menu."},{"heading":"rename-view","content":"Enter the desired new view name into the provided field."},{"heading":"rename-view","content":"Use Enter key to finalize the renaming process."},{"heading":"change-view-icon","content":"Click on the existing view icon to the left of the view name in the left sidebar."},{"heading":"change-view-icon","content":"Select the desired icon from the list of available options."},{"heading":"duplicate-view","content":"Click on the ellipsis symbol (...) next to view name located in the left sidebar."},{"heading":"duplicate-view","content":"Click on the Duplicate option from the view context menu."},{"heading":"duplicate-view","content":"Enter the desired new view name into the provided field."},{"heading":"duplicate-view","content":"Click on the Duplicate View button in the confirmation dialog."},{"heading":"delete-view","content":"type: info"},{"heading":"delete-view","content":"Click on the ellipsis symbol (...) next to view name located in the left sidebar."},{"heading":"delete-view","content":"Click on the Delete option from the view context menu."},{"heading":"delete-view","content":"Click on the Delete View button in the confirmation dialog."},{"heading":"lock--unlock-view","content":"Locked views prevent members from modifying view configurations. To lock a view, change the permission type to Locked from the view context menu. To unlock a view, change the permission type back to Collaborative."},{"heading":"lock--unlock-view","content":"You can also add a custom message to inform members why the view is locked. This message is visible to all members when they attempt to unlock the view."},{"heading":"lock--unlock-view","content":"Locked views in sidebar appears with a lock icon next to the view name."},{"heading":"personal-views-","content":"type: note"},{"heading":"personal-views-","content":"Personal Views give exclusive control over view configurations to the owner, while other members have read-only access to view configurations. To assign a view as Personal View, change the permission type to Personal from the view context menu. To revert back to Collaborative or Locked view, change the permission type accordingly."},{"heading":"personal-views-","content":"You can also assign or change the owner of a Personal View from the left sidebar view context menu."},{"heading":"personal-views-","content":"Personal view in sidebar appears with a user icon next to the view name."},{"heading":"add--edit-view-description","content":"View description can be added by clicking on the Add Description button on the view creation modal or by clicking on the Edit Description button from the view context menu."},{"heading":"add--edit-view-description","content":"Description for a view will be visible as a tooltip when hovering over the info icon next to the view name."},{"heading":"copy-another-views-configuration-","content":"type: info"},{"heading":"copy-another-views-configuration-","content":"You can copy view configurations from another view to quickly apply the same settings to your current view. This is useful when you want to replicate filters, sorting, field visibility, and other configurations across multiple views."},{"heading":"copy-another-views-configuration-","content":"Steps to copy view configuration"},{"heading":"copy-another-views-configuration-","content":"Click on the vertical ellipsis symbol ⋮ in the toolbar."},{"heading":"copy-another-views-configuration-","content":"Select \"Copy another view's configuration\" from the view context menu."},{"heading":"copy-another-views-configuration-","content":"In the modal dialog, select the source view from the Select view to copy from dropdown. All the views available in the current table will be listed here."},{"heading":"copy-another-views-configuration-","content":"Check the configuration(s) you want to copy:"},{"heading":"copy-another-views-configuration-","content":"Field visibility - Copy which fields are visible/hidden"},{"heading":"copy-another-views-configuration-","content":"Field order - Copy the column arrangement"},{"heading":"copy-another-views-configuration-","content":"Column width - Copy column width settings"},{"heading":"copy-another-views-configuration-","content":"Row height - Copy row height settings"},{"heading":"copy-another-views-configuration-","content":"Filter condition - Copy applied filters"},{"heading":"copy-another-views-configuration-","content":"Group - Copy grouping settings"},{"heading":"copy-another-views-configuration-","content":"Sort - Copy sorting settings"},{"heading":"copy-another-views-configuration-","content":"Row coloring - Copy row color settings"},{"heading":"copy-another-views-configuration-","content":"Click \"Copy configuration\" to apply the selected settings to your current view."},{"heading":"copy-another-views-configuration-","content":"Selective \"Copy from another view\" menu option is also available for various toolbar items like Filter, Group and Sort. This opens up the same copy configuration modal with the respective configuration option pre-selected. You can then choose to copy additional configurations as needed."},{"heading":"copy-another-views-configuration-","content":"Note that,"},{"heading":"copy-another-views-configuration-","content":"When copying configurations, the system will only apply settings that are compatible with the current view type. Incompatible settings will be disabled in the copy configuration modal."},{"heading":"copy-another-views-configuration-","content":"Only views from the same table can be selected as source views for copying configurations."},{"heading":"views-filtered-by-current-user-","content":"NocoDB allows you to filter views based on the currently logged-in user. This is particularly useful for creating personalized views that display records relevant to the user currently logged in. Find more details on how to filter by current user in the Filtering records by current user section."},{"heading":"url-based-record-filtering","content":"NocoDB enables users to dynamically filter records using query parameters directly in the URL. This is useful when creating sharable views or automating filtered data access in embedded dashboards or internal workflows."},{"heading":"url-based-record-filtering","content":"Basic Syntax"},{"heading":"url-based-record-filtering","content":"Filtering is controlled using the where query parameter in the following format:"},{"heading":"url-based-record-filtering","content":"Example"},{"heading":"url-based-record-filtering","content":"This filters records where the field country is equal to France."},{"heading":"supported-operators","content":"List of supported operators for filtering across various data types are listed below"},{"heading":"supported-operators","content":"Comparison Operators"},{"heading":"supported-operators","content":"Comparison Sub Operators"},{"heading":"supported-operators","content":"Logical Operators"},{"heading":"combining-filters","content":"Multiple conditions can be joined using logical operators:"},{"heading":"combining-filters","content":"~and → logical AND"},{"heading":"combining-filters","content":"~or → logical OR"},{"heading":"combining-filters","content":"Example"},{"heading":"combining-filters","content":"This retrieves records where country is either France or Germany."},{"heading":"combining-filters","content":"This retrieves records where both conditions are true."},{"heading":"combining-filters","content":"Conditions can be grouped using nested parentheses to form complex logic:"},{"heading":"filter-precedence-toolbar-vs-url","content":"type: info"},{"heading":"filter-precedence-toolbar-vs-url","content":"This means:"},{"heading":"filter-precedence-toolbar-vs-url","content":"Filters applied manually via the Filter menu are evaluated first."},{"heading":"filter-precedence-toolbar-vs-url","content":"Then, the URL query parameter filters (?where=...) are applied on top of the results."},{"heading":"filter-precedence-toolbar-vs-url","content":"Visual Indicator: As shown in the screenshot below, the toolbar clearly lists both types of filters:"},{"heading":"filter-precedence-toolbar-vs-url","content":"The user-applied filter: Segment is equal to Government"},{"heading":"filter-precedence-toolbar-vs-url","content":"The URL-applied filter: Country is equal to France (listed under URL Filters)"},{"heading":"additional-notes","content":"Field names must be exact (case-sensitive)."},{"heading":"additional-notes","content":"URL values must be URL-encoded if they include spaces or special characters."}],"headings":[{"id":"view-context-menu","content":"View context menu"},{"id":"rename-view","content":"Rename view"},{"id":"change-view-icon","content":"Change view icon"},{"id":"duplicate-view","content":"Duplicate view"},{"id":"delete-view","content":"Delete view"},{"id":"lock--unlock-view","content":"Lock / Unlock view"},{"id":"personal-views-","content":"Personal Views ☁"},{"id":"add--edit-view-description","content":"Add / edit view description"},{"id":"copy-another-views-configuration-","content":"Copy another view's configuration ☁"},{"id":"views-filtered-by-current-user-","content":"Views filtered by Current User ☁"},{"id":"url-based-record-filtering","content":"URL based record filtering"},{"id":"supported-operators","content":"Supported Operators"},{"id":"combining-filters","content":"Combining Filters"},{"id":"filter-precedence-toolbar-vs-url","content":"Filter Precedence: Toolbar vs URL"},{"id":"additional-notes","content":"Additional Notes"}]},"url":"/docs/product-docs/views/actions-on-view","title":"Actions on view","description":"Learn how to delete, rename, duplicate a a view in NocoDB."},{"_id":"/docs/product-docs/views/create-view","structured":{"contents":[{"heading":"create-new-view","content":"Click on + New View button below table name."},{"heading":"create-new-view","content":"Select view type from the dropdown modal."},{"heading":"create-new-view","content":"Fill view name in the pop-up modal."},{"heading":"create-new-view","content":"For Kanban view, select the Single select field to be used as the Kanban field."},{"heading":"create-new-view","content":"For Calendar view, select the Date OR DateTime field to be used as the Calendar field."},{"heading":"create-new-view","content":"Click on Create View button."}],"headings":[{"id":"create-new-view","content":"Create new view"}]},"url":"/docs/product-docs/views/create-view","title":"Create view","description":"Learn how to create a new view in NocoDB."},{"_id":"/docs/product-docs/views","structured":{"contents":[{"content":"Views in NocoDB allow you to customize how your data is displayed while maintaining independent control over sorting, filtering, and field visibility. Each view retains its own configuration, ensuring that changes made to one view do not affect any others."},{"content":"This flexibility enables users to organize and visualize data efficiently, providing tailored perspectives for different workflows or team members."},{"content":"type: info"},{"heading":"supported-view-types","content":"Grid View"},{"heading":"supported-view-types","content":"Form View"},{"heading":"supported-view-types","content":"Gallery View"},{"heading":"supported-view-types","content":"Kanban View"},{"heading":"supported-view-types","content":"Calendar View"},{"heading":"supported-view-types","content":"View the video below for a quick overview of NocoDB Views:"},{"heading":"view-permission-types","content":"Permissions can be applied to each view. By default, all views are Collaborative. To view or modify a view’s permission type, open the View Toolbar Menu as shown below."},{"heading":"view-permission-types","content":"type: info"},{"heading":"view-permission-types","content":"View configurations include the following items in the toolbar:"},{"heading":"view-permission-types","content":"Field visibility"},{"heading":"view-permission-types","content":"Field order"},{"heading":"view-permission-types","content":"Field width"},{"heading":"view-permission-types","content":"Filters"},{"heading":"view-permission-types","content":"Sorts"},{"heading":"view-permission-types","content":"Groups"},{"heading":"view-permission-types","content":"Row Colors"},{"heading":"view-permission-types","content":"Row Height"},{"heading":"view-permission-types","content":"Toolbar access is determined by the member's role. Members with Editor, Creator, or Owner roles have toolbar access by default. Members with Commenter or Viewer roles do not have toolbar access."},{"heading":"collaborative-views-default","content":"By default, views are set to Collaborative, allowing members with edit permissions or higher to modify view configurations. In this mode, all members with toolbar access can modify view configurations such as field visibility, order, filters, sorts, groups, colors, and row height."},{"heading":"locked-views","content":"In a Locked View, view configurations cannot be edited until the view is unlocked. Members can read data but cannot modify view settings or content. This mode is ideal for sharing consistent data presentations with others while preventing accidental changes."},{"heading":"locked-views","content":"Learn more about Locking and Unlocking Views."},{"heading":"personal-views-","content":"type: note"},{"heading":"personal-views-","content":"Personal Views give exclusive control over view configurations to the owner, while other members have read-only access to view configurations. This mode is similar to Locked Views but allows only the view owner to make configuration changes."},{"heading":"personal-views-","content":"The owner can reassign ownership or convert the view to Collaborative or Locked."},{"heading":"personal-views-","content":"The base owner or creator also retains the ability to manage ownership and lock status."},{"heading":"personal-views-","content":"For older views without an assigned owner, ownership defaults to the base owner."},{"heading":"personal-views-","content":"Learn more about Personal Views."},{"heading":"organizing-views-with-sections-","content":"As the number of views in a table grows, you can group related views into collapsible View Sections in the left sidebar. Sections act as folders — they help you organize views by purpose (e.g., \"Reports\", \"Data Entry\", \"Team Views\") without affecting the data or configuration of the views inside them."},{"heading":"organizing-views-with-sections-","content":"type: note"},{"heading":"general-notes","content":"When a table is opened, the default view displayed is the first common (non-personal) view, which can be either Collaborative or Locked."},{"heading":"general-notes","content":"Each table must contain at least one common (non-personal) grid view. The last remaining common view cannot be deleted or converted into a personal view."},{"heading":"general-notes","content":"The field display order for linked records is determined by the first common (non-personal) grid view of the source table."}],"headings":[{"id":"supported-view-types","content":"Supported View Types"},{"id":"view-permission-types","content":"View Permission Types"},{"id":"collaborative-views-default","content":"Collaborative Views (Default)"},{"id":"locked-views","content":"Locked Views"},{"id":"personal-views-","content":"Personal Views ☁"},{"id":"organizing-views-with-sections-","content":"Organizing Views with Sections ☁"},{"id":"general-notes","content":"General Notes"}]},"url":"/docs/product-docs/views","title":"View","description":"Learn about Views in NocoDB."},{"_id":"/docs/product-docs/views/share-view","structured":{"contents":[{"content":"Sharing a specific view of a table becomes highly valuable when you need to collaborate with individuals outside your organization who need access to specific sections of your database. This shared view provides a read-only perspective, accessible to anyone, regardless of their workspace affiliation. You have control over which data fields and records are visible to these external viewers, ensuring that any sensitive data remains hidden. Furthermore, if you decide to make changes to the visible fields or records within the view, the shared link will promptly reflect these adjustments, updating in real-time."},{"heading":"generate-share-view","content":"Click Share button on the top right of the toolbar"},{"heading":"generate-share-view","content":"Toggle Enable public viewing to create shared view link"},{"heading":"generate-share-view","content":"Click Copy button to copy the link to clipboard"},{"heading":"custom-url","content":"You can customize the URL of the shared view by entering a custom URL in the input field. The custom URL should be unique and should not contain special characters from the set (/, ?, #). If the custom URL is already taken, you will be prompted to enter a different custom URL."},{"heading":"custom-url","content":"To enable custom URL,"},{"heading":"custom-url","content":"Click on the Custom URL toggle"},{"heading":"custom-url","content":"Enter the custom URL in the input field"},{"heading":"custom-url","content":"Click on the Save button to save the changes"},{"heading":"custom-url","content":"type: info"},{"heading":"password-protection","content":"You can enable Restrict access with a password if you want a password-protected view"},{"heading":"download-options","content":"You can toggle Allow Download button to enable or disable download CSV/XLSX options in the shared view link"},{"heading":"share-form-view-options","content":"Form view has additional customizations for shared view. You can enable/disable the following options for shared form view:"},{"heading":"share-form-view-options","content":"Survey mode: This option when enabled, will display the form in survey mode."},{"heading":"share-form-view-options","content":"RTL Orientation: This option when enabled, will display the form in RTL orientation."},{"heading":"share-form-view-options","content":"Themes: You can select a theme for the form from the dropdown."},{"heading":"access-share-view","content":"To access the shared view, please follow the steps below:\nClick on the Shared View URL. If the URL is password-protected, you will be prompted to enter the password to unlock it. Please input the required password to proceed."},{"heading":"access-share-view","content":"Once the password is successfully entered and authenticated, you will gain access to the shared view.\nIn the event that the URL is not password-protected, you will be directed to the shared view directly, without the need for a password."},{"heading":"access-share-view","content":"Users with the shared view link can only view the data and cannot make any changes to the view or its content. Records and fields in the shared view will be updated in real-time as changes are made to the original view. Users accessing shared view can apply filters and sort records as per their requirements."},{"heading":"access-share-view","content":"type: info"}],"headings":[{"id":"generate-share-view","content":"Generate Share View"},{"id":"share-view-options","content":"Share view options"},{"id":"custom-url","content":"Custom URL"},{"id":"password-protection","content":"Password protection"},{"id":"download-options","content":"Download options"},{"id":"share-form-view-options","content":"Share Form View Options"},{"id":"access-share-view","content":"Access Share View"}]},"url":"/docs/product-docs/views/share-view","title":"Share view","description":"Learn how to share a view publicly in NocoDB."},{"_id":"/docs/product-docs/views/view-sections","structured":{"contents":[{"content":"type: note"},{"content":"View Sections allow you to organize your views into collapsible folders within the left sidebar. As the number of views in a table grows, sections help you group related views together, making it easier to navigate and manage your workspace. For example, you could create sections like \"Reports\", \"Data Entry\", or \"Team Views\" to keep things tidy."},{"heading":"create-a-section","content":"There are two ways to create a new section:"},{"heading":"from-the-create-view-menu","content":"Click the + Create View button in the left sidebar, below the table name."},{"heading":"from-the-create-view-menu","content":"Click the Section option at the bottom of the dropdown menu."},{"heading":"from-the-create-view-menu","content":"A new section is created with a default name (e.g., \"View section\"). You can immediately rename it by double-clicking on the section name."},{"heading":"from-the-move-to-menu","content":"Right-click on a view or click the ellipsis symbol (...) next to a view name to open the view context menu."},{"heading":"from-the-move-to-menu","content":"Hover over Move to... to open the submenu."},{"heading":"from-the-move-to-menu","content":"Click New section to create a new section and automatically move the selected view into it."},{"heading":"from-the-move-to-menu","content":"type: info"},{"heading":"rename-a-section","content":"Double-click on the section name in the left sidebar to enter edit mode."},{"heading":"rename-a-section","content":"Type the new name."},{"heading":"rename-a-section","content":"Press Enter to save, or press Escape to cancel."},{"heading":"rename-a-section","content":"Alternatively, you can rename a section from the context menu:"},{"heading":"rename-a-section","content":"Click the ellipsis symbol (...) on the section header."},{"heading":"rename-a-section","content":"Select Rename section."},{"heading":"rename-a-section","content":"Type the new name and press Enter."},{"heading":"rename-a-section","content":"type: info"},{"heading":"move-views-into-a-section","content":"Click the ellipsis symbol (...) next to the view you want to move, or right-click on the view name."},{"heading":"move-views-into-a-section","content":"Hover over Move to... in the context menu."},{"heading":"move-views-into-a-section","content":"Select the target section from the submenu."},{"heading":"move-views-into-a-section","content":"The submenu displays all existing sections. You can also:"},{"heading":"move-views-into-a-section","content":"Click New section to create a new section and move the view into it in a single step."},{"heading":"move-views-into-a-section","content":"Click Remove from section (visible only when the view is already in a section) to move the view back to the top level."},{"heading":"remove-a-view-from-a-section","content":"Click the ellipsis symbol (...) next to the view name inside a section."},{"heading":"remove-a-view-from-a-section","content":"Hover over Move to... in the context menu."},{"heading":"remove-a-view-from-a-section","content":"Click Remove from section."},{"heading":"remove-a-view-from-a-section","content":"The view is moved back to the top-level view list, outside of any section."},{"heading":"expand-and-collapse-sections","content":"Sections are collapsible, allowing you to hide views you are not currently working with."},{"heading":"expand-and-collapse-sections","content":"Click on a section header to toggle it between expanded and collapsed states."},{"heading":"expand-and-collapse-sections","content":"When collapsed, views inside the section are hidden from the sidebar (except the currently active view, which always remains visible)."},{"heading":"expand-all--collapse-all","content":"To quickly expand or collapse every section at once:"},{"heading":"expand-all--collapse-all","content":"Click the ellipsis symbol (...) on any section header."},{"heading":"expand-all--collapse-all","content":"Select Expand all or Collapse all."},{"heading":"expand-all--collapse-all","content":"type: info"},{"heading":"change-section-icon-colour","content":"Each section displays a folder icon whose colour can be customized."},{"heading":"change-section-icon-colour","content":"Click the ellipsis symbol (...) on the section header to open the context menu."},{"heading":"change-section-icon-colour","content":"A colour palette is displayed under Icon colour."},{"heading":"change-section-icon-colour","content":"Click on any colour to apply it, or click the More colours option to pick a custom colour."},{"heading":"reorder-sections","content":"You can drag and drop sections to rearrange their order in the sidebar."},{"heading":"reorder-sections","content":"Click and hold a section header."},{"heading":"reorder-sections","content":"Drag it to the desired position among other sections."},{"heading":"reorder-sections","content":"Release to drop it in place."},{"heading":"delete-a-section","content":"type: info"},{"heading":"delete-a-section","content":"Click the ellipsis symbol (...) on the section header."},{"heading":"delete-a-section","content":"Click Delete section."},{"heading":"delete-a-section","content":"A confirmation dialog appears, informing you that views inside the section will be moved to the top level."},{"heading":"delete-a-section","content":"Click Delete to confirm."},{"heading":"delete-a-section","content":"type: info"},{"heading":"default-section","content":"When at least one section exists in a table, a virtual Default section is automatically displayed at the bottom of the section list. This section contains all views that have not been assigned to any section. The Default section cannot be renamed, deleted, or reordered, but it can be expanded and collapsed like any other section."},{"heading":"notes","content":"View Sections are an organizational tool — they do not affect the data or configuration of the views inside them."},{"heading":"notes","content":"Sections are scoped to individual tables. Each table has its own independent set of sections."},{"heading":"notes","content":"All members of a workspace can see sections. Only members with Editor permissions or above can create, rename, reorder, or delete sections."},{"heading":"notes","content":"When a section is collapsed, the currently active view remains visible in the sidebar regardless of which section it belongs to."}],"headings":[{"id":"create-a-section","content":"Create a section"},{"id":"from-the-create-view-menu","content":"From the Create View menu"},{"id":"from-the-move-to-menu","content":"From the Move to menu"},{"id":"rename-a-section","content":"Rename a section"},{"id":"move-views-into-a-section","content":"Move views into a section"},{"id":"remove-a-view-from-a-section","content":"Remove a view from a section"},{"id":"expand-and-collapse-sections","content":"Expand and collapse sections"},{"id":"expand-all--collapse-all","content":"Expand all / Collapse all"},{"id":"change-section-icon-colour","content":"Change section icon colour"},{"id":"reorder-sections","content":"Reorder sections"},{"id":"delete-a-section","content":"Delete a section"},{"id":"default-section","content":"Default section"},{"id":"notes","content":"Notes"}]},"url":"/docs/product-docs/views/view-sections","title":"View sections","description":"Learn how to organize views into collapsible sections in NocoDB."},{"_id":"/docs/product-docs/workspaces/actions-on-workspace","structured":{"contents":[{"heading":"rename-workspace","content":"Go to Team & Settings in the left minibar."},{"heading":"rename-workspace","content":"Open the Settings tab."},{"heading":"rename-workspace","content":"Update the Name field with the new workspace name."},{"heading":"rename-workspace","content":"Click Save to apply changes."},{"heading":"delete-workspace","content":"If a workspace is no longer needed, you can permanently delete it. This action will remove all associated bases and data."},{"heading":"delete-workspace","content":"type: warning"},{"heading":"delete-workspace","content":"type: info"},{"heading":"delete-workspace","content":"To delete a workspace:"},{"heading":"delete-workspace","content":"Go to Team & Settings → Settings tab."},{"heading":"delete-workspace","content":"Click Delete Workspace."},{"heading":"delete-workspace","content":"Confirm by entering the workspace name."},{"heading":"delete-workspace","content":"Click Delete Workspace again in the confirmation dialog."},{"heading":"find-workspace-id","content":"Each workspace in NocoDB has a unique ID (prefixed with w, short for workspace) that identifies it within the system. You can find the workspace ID in the URL when you are in the workspace."},{"heading":"find-workspace-id","content":"Example"},{"heading":"find-workspace-id","content":"In this example, the workspace ID is: w1234567890"}],"headings":[{"id":"rename-workspace","content":"Rename workspace"},{"id":"delete-workspace","content":"Delete workspace"},{"id":"find-workspace-id","content":"Find workspace ID"}]},"url":"/docs/product-docs/workspaces/actions-on-workspace","title":"Actions on workspace","description":"Learn how to rename or delete a workspace in NocoDB."},{"_id":"/docs/product-docs/workspaces/billing","structured":{"contents":[{"content":"NocoDB offers flexible pricing and simple subscription management through a modern billing dashboard powered by Stripe."},{"heading":"billing-dashboard","content":"Stay on top of your usage and billing at a glance. Billing dashboard is accessible from your Workspace settings > Billing tab."},{"heading":"billing-dashboard","content":"The dashboard shows:"},{"heading":"billing-dashboard","content":"Your current plan and renewal date"},{"heading":"billing-dashboard","content":"Number of paid users"},{"heading":"billing-dashboard","content":"Usage breakdown (records, storage, webhook/API calls)"},{"heading":"billing-dashboard","content":"Past invoices and their statuses"},{"heading":"change-your-plan","content":"You can upgrade or downgrade your plan directly from the app."},{"heading":"change-your-plan","content":"To change your plan:"},{"heading":"change-your-plan","content":"Go to your Workspace settings."},{"heading":"change-your-plan","content":"Navigate to Billing tab."},{"heading":"change-your-plan","content":"Click Upgrade Workspace"},{"heading":"change-your-plan","content":"Select the desired plan (Free, Plus, Business), follow prompts to confirm."},{"heading":"change-your-plan","content":"type: info"},{"heading":"change-payment-method","content":"All subscription management actions, including payment methods and billing frequency, are handled via Stripe. Click on Manage Subscription from billing dashboard to access your Stripe billing portal."},{"heading":"change-payment-method","content":"From the Manage Subscription view:"},{"heading":"change-payment-method","content":"Update your card details"},{"heading":"change-payment-method","content":"View upcoming payments"},{"heading":"change-payment-method","content":"See estimated renewal amounts"},{"heading":"change-payment-method","content":"Add or change your payment method"},{"heading":"change-payment-method","content":"Cancel your subscription"},{"heading":"download-invoices","content":"To download an invoice:"},{"heading":"download-invoices","content":"Scroll to the Past Invoices section in your billing dashboard."},{"heading":"download-invoices","content":"Click View invoice next to the one you want to download."},{"heading":"download-invoices","content":"A PDF copy will open in a new tab."},{"heading":"cancel-plan","content":"If you no longer wish to continue your paid plan, you can cancel your subscription anytime through the Stripe billing portal."},{"heading":"cancel-plan","content":"To cancel:"},{"heading":"cancel-plan","content":"Go to your Workspace settings → Billing tab."},{"heading":"cancel-plan","content":"Click Manage Subscription to open your Stripe billing portal."},{"heading":"cancel-plan","content":"Click Cancel subscription."},{"heading":"cancel-plan","content":"Confirm cancellation when prompted."},{"heading":"cancel-plan","content":"type: info"},{"heading":"cancel-plan","content":"If you do not see the \"Cancel Subscription\" button on Stripe, please follow the steps listed below:"},{"heading":"cancel-plan","content":"From the Billing tab, select \"Upgrade Workspace\"."},{"heading":"cancel-plan","content":"Select \"Choose Free\"."},{"heading":"cancel-plan","content":"Click \"Proceed\" Follow the prompts to confirm the downgrade to the Free plan."},{"heading":"cancel-plan","content":"Please reach out to Support team if you need any assistance."}],"headings":[{"id":"billing-dashboard","content":"Billing dashboard"},{"id":"change-your-plan","content":"Change your plan"},{"id":"change-payment-method","content":"Change payment method"},{"id":"download-invoices","content":"Download invoices"},{"id":"cancel-plan","content":"Cancel plan"}]},"url":"/docs/product-docs/workspaces/billing","title":"Subscription & billing","description":"Manage your NocoDB subscription, change plans, and access billing information easily."},{"_id":"/docs/product-docs/workspaces/create-workspace","structured":{"contents":[{"content":"When you sign up for NocoDB, a default workspace is automatically created for you. You can choose to rename this workspace or create a new one as needed."},{"content":"This guide walks you through the process of creating a new workspace."},{"heading":"create-a-workspace","content":"Hover over the Workspace icon in the top-left corner of the minibar to open the Workspace context menu."},{"heading":"create-a-workspace","content":"Click Create workspace."},{"heading":"create-a-workspace","content":"Enter a name for your workspace."},{"heading":"create-a-workspace","content":"Click Create Workspace to complete the process."},{"heading":"create-a-workspace","content":"Once created, you become the owner of the workspace. From here, you can create tables and invite collaborators to work with you."},{"heading":"create-a-workspace","content":"Workspaces support unlimited tables and members."},{"heading":"create-a-workspace","content":"Workspace ownership is transferable, but at least one owner must always remain."},{"heading":"create-a-workspace","content":"type: info"},{"heading":"related-articles","content":"Workspace overview"},{"heading":"related-articles","content":"Invite team members"},{"heading":"related-articles","content":"Rename workspace"},{"heading":"related-articles","content":"Delete workspace"}],"headings":[{"id":"create-a-workspace","content":"Create a workspace"},{"id":"related-articles","content":"Related articles"}]},"url":"/docs/product-docs/workspaces/create-workspace","title":"Create workspace","description":"Learn how to create a workspace in NocoDB"},{"_id":"/docs/product-docs/workspaces","structured":{"contents":[{"content":"Workspaces in NocoDB help organize and manage your data collaboratively. Each workspace can contain one or more bases, bringing together related tables, views, and other elements under a unified structure. You can control access by assigning roles to workspace members, enabling secure and efficient teamwork."},{"content":"Start by creating a workspace, then invite team members to collaborate. You can change member roles or remove members as needed. To keep things organized, you can rename or delete a workspace at any time."},{"content":"type: info"},{"heading":"workspace-context-menu","content":"Located at the top of the minibar, the workspace menu lists all available workspaces. Click a workspace name to switch between them."},{"heading":"related-articles","content":"Create workspace"},{"heading":"related-articles","content":"Invite team members"},{"heading":"related-articles","content":"Change member role"},{"heading":"related-articles","content":"Remove team member"},{"heading":"related-articles","content":"Rename workspace"},{"heading":"related-articles","content":"Delete workspace"}],"headings":[{"id":"workspace-context-menu","content":"Workspace context menu"},{"id":"related-articles","content":"Related articles"}]},"url":"/docs/product-docs/workspaces","title":"Workspaces ☁","description":"Overview of workspaces in NocoDB."},{"_id":"/docs/product-docs/workspaces/workspace-audit","structured":{"contents":[{"content":"type: warning"},{"content":"type: info"},{"content":"The Audit Logs feature in NocoDB provides a comprehensive, time-stamped record of user activity across your workspace. It enables workspace owners to monitor key actions, ensuring transparency, traceability, and accountability."},{"heading":"accessing-audit-logs","content":"Only workspace owners can access audit logs."},{"heading":"accessing-audit-logs","content":"To view them:"},{"heading":"accessing-audit-logs","content":"Navigate to Team & Settings from the left minibar."},{"heading":"accessing-audit-logs","content":"Select the Audits tab."},{"heading":"audit-log-details","content":"Each entry includes:"},{"heading":"audit-log-details","content":"User: Name (if set) and email of the user who performed the action"},{"heading":"audit-log-details","content":"Timestamp: Time of the event (e.g., “35s ago”, “1h ago”)"},{"heading":"audit-log-details","content":"Base: Name and ID of the base involved"},{"heading":"audit-log-details","content":"Event: Type of action performed (e.g., Field Create, Table Delete)"},{"heading":"audit-log-details","content":"IP Address: IP of the user who performed the action"},{"heading":"audit-log-details","content":"Device Info: Operating system and browser used"},{"heading":"audit-log-details","content":"Click a log entry to expand it and view additional metadata, including the full event payload in JSON format."},{"heading":"logged-events","content":"NocoDB audit logs cover a wide range of system events, including:"},{"heading":"user-actions","content":"Sign Up, Sign In, Sign Out, Invite, Email Verify, Profile Update"},{"heading":"user-actions","content":"Password: Change, Reset, Forgot"},{"heading":"workspace","content":"Create, Update, Delete, Rename"},{"heading":"workspace","content":"Member: Invite, Update, Remove"},{"heading":"base","content":"Create, Update, Delete, Rename, Duplicate"},{"heading":"base","content":"Member: Invite, Update, Remove"},{"heading":"table","content":"Create, Update, Delete, Rename, Duplicate"},{"heading":"field","content":"Create, Update, Rename, Delete"},{"heading":"view","content":"Create, Update, Delete, Rename, Duplicate"},{"heading":"view","content":"Filter: Create, Update, Delete"},{"heading":"view","content":"Sort: Create, Update, Delete"},{"heading":"webhook","content":"Create, Update, Delete"},{"heading":"webhook","content":"Filter: Create, Update, Delete"},{"heading":"source","content":"Create, Update, Delete, Rename"},{"heading":"shared-view","content":"Create, Update, Delete"},{"heading":"api-tokens","content":"Create, Delete"},{"heading":"integration","content":"Create, Update, Delete"},{"heading":"snapshots","content":"Create, Delete, Restore"},{"heading":"org-users-self-hosted-only","content":"Invite, Resend Invite"},{"heading":"filtering-logs","content":"Use the toolbar at the top of the Audits tab to filter logs by:"},{"heading":"filtering-logs","content":"User"},{"heading":"filtering-logs","content":"Base"},{"heading":"filtering-logs","content":"Event Type"},{"heading":"filtering-logs","content":"Time Range"},{"heading":"filtering-logs","content":"This helps you quickly locate relevant actions or investigate specific activities."}],"headings":[{"id":"accessing-audit-logs","content":"Accessing audit logs"},{"id":"audit-log-details","content":"Audit log details"},{"id":"logged-events","content":"Logged events"},{"id":"user-actions","content":"User Actions"},{"id":"workspace","content":"Workspace"},{"id":"base","content":"Base"},{"id":"table","content":"Table"},{"id":"field","content":"Field"},{"id":"view","content":"View"},{"id":"webhook","content":"Webhook"},{"id":"source","content":"Source"},{"id":"shared-view","content":"Shared View"},{"id":"api-tokens","content":"API Tokens"},{"id":"integration","content":"Integration"},{"id":"snapshots","content":"Snapshots"},{"id":"org-users-self-hosted-only","content":"Org Users (Self-hosted only)"},{"id":"filtering-logs","content":"Filtering logs"}]},"url":"/docs/product-docs/workspaces/workspace-audit","title":"Workspace audit logs","description":"Learn how to access and use audit logs to track workspace activity in NocoDB."},{"_id":"/docs/product-docs/workspaces/workspace-collaboration","structured":{"contents":[{"content":"type: info"},{"content":"type: info"},{"heading":"invite-members-to-workspace","content":"Go to Team & Settings in the left minibar."},{"heading":"invite-members-to-workspace","content":"Open the Members tab."},{"heading":"invite-members-to-workspace","content":"Click Add Member."},{"heading":"invite-members-to-workspace","content":"Enter one or more email addresses (comma-separated)."},{"heading":"invite-members-to-workspace","content":"Select a role for the invited member(s)."},{"heading":"invite-members-to-workspace","content":"Click Invite to Workspace."},{"heading":"invite-members-to-workspace","content":"type: info"},{"heading":"invite-members-to-workspace","content":"type: info"},{"heading":"invite-teams-to-workspace-","content":"NocoDB now allows inviting Teams to the workspace for simplified collaboration. Teams can be assigned workspace-level access roles, streamlining permissions for all their members."},{"heading":"invite-teams-to-workspace-","content":"Navigate to the Team & Settings page and open the Members tab."},{"heading":"invite-teams-to-workspace-","content":"Click on the Add Teams button."},{"heading":"invite-teams-to-workspace-","content":"From the dropdown, select one or multiple teams to add."},{"heading":"invite-teams-to-workspace-","content":"Choose the appropriate access role from the dropdown menu. Note that,"},{"heading":"invite-teams-to-workspace-","content":"Similar to individual members, you can only assign roles that are at most equal to your own role in the workspace."},{"heading":"invite-teams-to-workspace-","content":"Teams can't be assigned the Owner role."},{"heading":"invite-teams-to-workspace-","content":"Click on the Add Teams button to complete the process."},{"heading":"invite-teams-to-workspace-","content":"type: info"},{"heading":"invite-teams-to-workspace-","content":"To learn more about creating and managing teams, refer to the Teams documentation."},{"heading":"list-workspace-members-and-teams","content":"The Members tab displays all users and teams that have access to the workspace."},{"heading":"list-workspace-members-and-teams","content":"Individual members appear with their email addresses."},{"heading":"list-workspace-members-and-teams","content":"Teams are listed with their name and member count."},{"heading":"list-workspace-members-and-teams","content":"type: info"},{"heading":"modify-roles-for-members-or-teams","content":"Access permissions for both members and teams can be updated directly from the Members tab."},{"heading":"modify-roles-for-members-or-teams","content":"Click on the access dropdown next to the member or team."},{"heading":"modify-roles-for-members-or-teams","content":"Select a new role from the list of available options."},{"heading":"modify-roles-for-members-or-teams","content":"type: info"},{"heading":"role-precedence","content":"When a user has multiple role assignments through both team and individual access, NocoDB resolves the final permission using a clear precedence order."},{"heading":"role-precedence","content":"Individual explicit role takes precedence over team-assigned role."},{"heading":"role-precedence","content":"Base-level roles override workspace-level roles."},{"heading":"role-precedence","content":"In case of multiple team roles, the highest permission applies."},{"heading":"role-precedence","content":"type: info"},{"heading":"role-precedence","content":"To learn more about effective role resolution, refer to the Teams effective role resolution documentation."},{"heading":"remove-members-or-teams-from-workspace","content":"You can remove both members and teams from the workspace using the context menu."},{"heading":"remove-members-or-teams-from-workspace","content":"Click on the vertical ellipses ⋮ beside the member or team entry."},{"heading":"remove-members-or-teams-from-workspace","content":"Select the appropriate removal option — Remove User or Remove Team."},{"heading":"remove-members-or-teams-from-workspace","content":"type: info"},{"heading":"best-practice","content":"Invite all users to the workspace first with the Inherit role. This will allow them to access workspaces based on their team or base-level roles."},{"heading":"best-practice","content":"Use teams for departments or functional groups to manage roles efficiently."},{"heading":"best-practice","content":"Adjust team-level permissions instead of managing roles individually for large workspaces."},{"heading":"best-practice","content":"Learn more here."}],"headings":[{"id":"invite-members-to-workspace","content":"Invite Members to Workspace"},{"id":"invite-teams-to-workspace-","content":"Invite Teams to Workspace ☁"},{"id":"list-workspace-members-and-teams","content":"List Workspace Members and Teams"},{"id":"modify-roles-for-members-or-teams","content":"Modify Roles for Members or Teams"},{"id":"role-precedence","content":"Role Precedence"},{"id":"remove-members-or-teams-from-workspace","content":"Remove Members or Teams from Workspace"},{"id":"best-practice","content":"Best Practice"}]},"url":"/docs/product-docs/workspaces/workspace-collaboration","title":"Workspace collaboration","description":"This article explains how to invite members or teams to your workspace, manage their roles, and remove them when needed."},{"_id":"/docs/product-docs/account-settings/authentication/FAQs","structured":{"contents":[{"heading":"why-do-i-see-the-error-sso-is-not-configured-for-this-domain-when-trying-to-sign-in","content":"This error means that the email address you are using does not belong to a domain that has been verified and configured for SSO in your workspace settings. Only users with email addresses under your verified domain(s) can sign in via SSO. For example, if you've verified example.com, only users with emails like user@example.com will be allowed to sign in through the SSO page."},{"heading":"how-do-i-verify-my-domain-for-sso","content":"For NocoDB Cloud (Both Business and Enterprise Plans):"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Access the domain verification section:"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Business Plan: Navigate to Workspace Settings > Authentication > Domain Verification"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Enterprise Plan: Navigate to Account Settings > Authentication > Domain Verification"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Enter your domain (e.g., example.com)"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Copy the TXT record provided by NocoDB"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Add the TXT record to your domain’s DNS via your registrar/DNS provider."},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Wait for DNS propagation (this may take a few minutes to several hours)"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"Click Verify button in NocoDB to confirm domain ownership"},{"heading":"how-do-i-verify-my-domain-for-sso","content":"For NocoDB Self-hosted/On-prem: Domain verification is not required. Configure SSO providers directly without DNS verification."},{"heading":"do-i-need-to-verify-my-domain-when-setting-up-sso-eg-google-oauth","content":"For NocoDB Cloud (Both Business and Enterprise Plans): Yes. In addition to configuring Google OAuth or other SSO providers, you must also verify your domain in the SSO settings. This is done by adding your domain and verifying it by adding the provided TXT record to your DNS. Only after domain verification will users from that domain be able to sign in via SSO."},{"heading":"do-i-need-to-verify-my-domain-when-setting-up-sso-eg-google-oauth","content":"For NocoDB Self-hosted/On-prem: Domain verification is not required. You can configure SSO providers without verifying your domain via DNS."},{"heading":"when-should-i-verify-my-domain","content":"Domain verification should be completed before configuring any SSO providers (Google OAuth, SAML, OIDC) for Cloud users (both Business and Enterprise plans). This ensures that:"},{"heading":"when-should-i-verify-my-domain","content":"Only users with email addresses from your verified domain can access the workspace"},{"heading":"when-should-i-verify-my-domain","content":"SSO providers are properly configured with domain restrictions"},{"heading":"when-should-i-verify-my-domain","content":"The authentication flow works correctly for your organization's users"},{"heading":"when-should-i-verify-my-domain","content":"If you try to configure SSO without domain verification, you may encounter errors or users from unverified domains may not be able to sign in."},{"heading":"why-does-domain-verification-fail-even-after-adding-the-txt-record","content":"DNS propagation can take time to complete. After adding the TXT record to your domain's DNS settings:"},{"heading":"why-does-domain-verification-fail-even-after-adding-the-txt-record","content":"Typical propagation time: 5-30 minutes"},{"heading":"why-does-domain-verification-fail-even-after-adding-the-txt-record","content":"Maximum propagation time: Up to 24-48 hours (rare)"},{"heading":"why-does-domain-verification-fail-even-after-adding-the-txt-record","content":"Check propagation: Use online DNS lookup tools to verify the TXT record is visible"},{"heading":"why-does-domain-verification-fail-even-after-adding-the-txt-record","content":"Retry verification: If verification fails, wait a few minutes and try again"},{"heading":"why-does-domain-verification-fail-even-after-adding-the-txt-record","content":"If verification fails after 24 hours, ensure the TXT record was added correctly. If issues persist, contact your DNS provider."},{"heading":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"This error usually means that the Redirect URL (sometimes called Callback URL or Redirect URI) configured in your identity provider does not exactly match the one provided by NocoDB. Common reasons include:"},{"heading":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"Typo or extra spaces in the URL/URI"},{"heading":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"Using HTTP instead of HTTPS (or vice versa)"},{"heading":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"Not including the full path as required"},{"heading":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"Registering the wrong environment (e.g., using a local URL for production)"},{"heading":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"Forgetting to update the Redirect URL after changing your NocoDB domain"},{"heading":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"Solution: Always copy and paste the exact Redirect URL/URI provided by NocoDB into your identity provider's configuration. Any mismatch will result in an error during authentication."},{"heading":"how-do-api-tokens-work-with-sso-enabled-workspaces","content":"When a workspace is configured to enforce Single Sign-On (SSO), API access is restricted to tokens generated through an authenticated SSO session. Please find additional details here: API Tokens with SSO."}],"headings":[{"id":"why-do-i-see-the-error-sso-is-not-configured-for-this-domain-when-trying-to-sign-in","content":"Why do I see the error \"SSO is not configured for this domain\" when trying to sign in?"},{"id":"how-do-i-verify-my-domain-for-sso","content":"How do I verify my domain for SSO?"},{"id":"do-i-need-to-verify-my-domain-when-setting-up-sso-eg-google-oauth","content":"Do I need to verify my domain when setting up SSO (e.g., Google OAuth)?"},{"id":"when-should-i-verify-my-domain","content":"When should I verify my domain?"},{"id":"why-does-domain-verification-fail-even-after-adding-the-txt-record","content":"Why does domain verification fail even after adding the TXT record?"},{"id":"why-do-i-get-a-redirectioncallback-url-or-uri-error-when-setting-up-sso","content":"Why do I get a redirection/callback URL or URI error when setting up SSO?"},{"id":"how-do-api-tokens-work-with-sso-enabled-workspaces","content":"How do API tokens work with SSO-enabled workspaces?"}]},"url":"/docs/product-docs/account-settings/authentication/FAQs","title":"SSO FAQs","description":"Frequently asked questions about Single Sign-On (SSO) in NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/google-oauth","structured":{"contents":[{"content":"NocoDB offers a functionality that allows users to connect with Google OAuth 2.0, enabling them to log into their NocoDB accounts using their Google authentication credentials. This article provides a step-by-step guide to integrating Google OAuth 2.0 with NocoDB."},{"content":"type: info"},{"content":"type: warning"},{"heading":"accessing-google-oauth-settings","content":"Accessing NocoDB Google OAuth section depends on your plan:"},{"heading":"accessing-google-oauth-settings","content":"Cloud version: Go to Workspace Settings > Authentication > Google OAuth"},{"heading":"accessing-google-oauth-settings","content":"On-prem version: Go to Account Settings > Authentication > Google OAuth"},{"heading":"steps-to-configure-google-oauth","content":"Verify your domain (Cloud plans only) :"},{"heading":"steps-to-configure-google-oauth","content":"See Domain Verification."},{"heading":"steps-to-configure-google-oauth","content":"Copy Redirect URL from NocoDB Google OAuth section"},{"heading":"steps-to-configure-google-oauth","content":"Go to Google Cloud Console and create a new project."},{"heading":"steps-to-configure-google-oauth","content":"Configure the OAuth consent screen"},{"heading":"steps-to-configure-google-oauth","content":"Navigate to APIs & Services > OAuth consent screen"},{"heading":"steps-to-configure-google-oauth","content":"Provide app details and select user access type"},{"heading":"steps-to-configure-google-oauth","content":"Add authorized domains where NocoDB is hosted"},{"heading":"steps-to-configure-google-oauth","content":"Click Create"},{"heading":"steps-to-configure-google-oauth","content":"Generate OAuth credentials"},{"heading":"steps-to-configure-google-oauth","content":"Go to APIs & Services > Credentials"},{"heading":"steps-to-configure-google-oauth","content":"Click Create Credentials > OAuth Client ID"},{"heading":"steps-to-configure-google-oauth","content":"Select Web application as the application type"},{"heading":"steps-to-configure-google-oauth","content":"Set up application details"},{"heading":"steps-to-configure-google-oauth","content":"Authorized JavaScript origins: Enter your app domain (e.g., https://app.nocodb.com)"},{"heading":"steps-to-configure-google-oauth","content":"Authorized Redirect URIs: Paste the Redirect URL copied from step 2"},{"heading":"steps-to-configure-google-oauth","content":"Create credentials and copy values"},{"heading":"steps-to-configure-google-oauth","content":"Click Create"},{"heading":"steps-to-configure-google-oauth","content":"Copy the Client ID and Client Secret from the generated OAuth 2.0 Client ID"},{"heading":"steps-to-configure-google-oauth","content":"Add credentials to NocoDB"},{"heading":"steps-to-configure-google-oauth","content":"Paste the Client ID and Client Secret into the respective fields in NocoDB Google OAuth section"},{"heading":"steps-to-configure-google-oauth","content":"type: info"}],"headings":[{"id":"accessing-google-oauth-settings","content":"Accessing Google OAuth Settings"},{"id":"steps-to-configure-google-oauth","content":"Steps to Configure Google OAuth"}]},"url":"/docs/product-docs/account-settings/authentication/google-oauth","title":"Google OAuth","description":"Learn about different methods available for authentication with NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication","structured":{"contents":[{"content":"This section provides an overview about different mechanisms available for authentication in NocoDB."},{"heading":"email-and-password-based","content":"This is the default form based authentication mechanism available in NocoDB. Users can sign up using email and password and then login using the same credentials."},{"heading":"single-sign-on-sso","content":"type: info"},{"heading":"single-sign-on-sso","content":"SSO is a session and user authentication service that permits a user to use one set of login credentials to access multiple applications. The service authenticates the end user for all the applications the user has been given rights to and eliminates further prompts when the user switches applications during the same session."},{"heading":"single-sign-on-sso","content":"SSO functionality is achieved by establishing a connection with an identity provider (IdP), which serves as a repository for managing users digital identities within the digital or cloud-based ecosystem. Through the use of protocols like the Security Assertion Markup Language (SAML 2.0), such as in the case of NocoDB, SSO facilitates the secure exchange of authentication data between the identity provider and the service providers."},{"heading":"single-sign-on-sso","content":"type: warning"},{"heading":"google-oauth","content":"Google OAuth, short for Open Authorization, is a widely used and standardized protocol that facilitates secure authentication and authorization processes, particularly in the context of web and mobile applications. Developed by Google, OAuth enables users to grant third-party applications limited access to their resources without exposing their credentials. This authorization framework is based on token-based authentication, where users can log in using their Google credentials, and developers can obtain an access token to interact with Google APIs on the user's behalf."},{"heading":"google-oauth","content":"Please follow the details in the article to integrate with Google OAuth"},{"heading":"security-assertion-markup-language-saml","content":"The Security Assertion Markup Language (SAML) stands as a critical protocol in the realm of secure authentication and authorization processes. Developed to enable Single Sign-On (SSO) functionality, SAML facilitates the exchange of authentication and authorization data between an identity provider (IdP) and a service provider (SP). This XML-based protocol ensures the secure transfer of user identity information, allowing individuals to access multiple applications and services with a single set of credentials. SAML operates on a trust model, wherein the identity provider asserts the user's identity to the service provider, which, in turn, grants or denies access based on the provided assertions."},{"heading":"security-assertion-markup-language-saml","content":"Please follow the details in the article below to integrate with various popular SAML providers."},{"heading":"security-assertion-markup-language-saml","content":"Okta"},{"heading":"security-assertion-markup-language-saml","content":"Auth0"},{"heading":"security-assertion-markup-language-saml","content":"Ping Identity"},{"heading":"security-assertion-markup-language-saml","content":"Active Directory"},{"heading":"security-assertion-markup-language-saml","content":"Keycloak"},{"heading":"openid-connect-oidc","content":"The OpenID Connect (OIDC) protocol is a modern authentication layer built on top of the OAuth 2.0 framework, designed to address user authentication and authorization challenges in web and mobile applications. OIDC provides a standardized and secure way for applications to verify the identity of end-users. Leveraging JSON Web Tokens (JWTs), OIDC enables the exchange of user identity information between the identity provider (IdP) and the Service provider, typically a web application."},{"heading":"openid-connect-oidc","content":"Please follow the details in the article below to integrate with various popular OIDC providers."},{"heading":"openid-connect-oidc","content":"Okta"},{"heading":"openid-connect-oidc","content":"Auth0"},{"heading":"openid-connect-oidc","content":"Ping Identity"},{"heading":"openid-connect-oidc","content":"Active Directory"},{"heading":"accessing-the-sso-configuration-menu","content":"The location of the SSO configuration menu varies depending on your plan."},{"heading":"accessing-the-sso-configuration-menu","content":"If you're on the Business plan, you can access SSO settings from the Workspace Settings."},{"heading":"accessing-the-sso-configuration-menu","content":"For Enterprise plan users, the SSO menu is available under the Admin Panel."},{"heading":"accessing-the-sso-configuration-menu","content":"Please follow the steps relevant to your plan to locate and configure SSO."},{"heading":"business-plan","content":"To access the SSO configuration menu in the Business plan, navigate to the Workspace Settings. Here, you can manage your SSO settings, including adding new identity providers and configuring existing ones."},{"heading":"business-plan","content":"Alternatively, you can directly access the SSO configuration screen using the URL:\nhttps://app.nocodb.com/#/workspaceID/settings?tab=sso"},{"heading":"enterprise-plan","content":"For users on the Enterprise plan, the SSO configuration menu is located in the Account Settings. This allows for more advanced SSO configurations and management options across the entire organization."},{"heading":"enterprise-plan","content":"Click on the user icon in the bottom left corner of the NocoDB interface."},{"heading":"enterprise-plan","content":"Select Account Settings from the menu."},{"heading":"enterprise-plan","content":"Navigate to the Single Sign-on (SSO) tab."},{"heading":"enterprise-plan","content":"Alternatively, you can directly access the SSO configuration screen using the URL:\nhttps://your-domain/#/account/authentication"},{"heading":"domain-verification","content":"For NocoDB Cloud users (both Business and Enterprise plans), domain verification is required before configuring SSO providers. This ensures that only users with email addresses from your verified domain can access the workspace through SSO."},{"heading":"domain-verification","content":"Domain Verification Process:"},{"heading":"domain-verification","content":"Access the domain verification section:"},{"heading":"domain-verification","content":"Business Plan: Navigate to Workspace Settings > Authentication > Domain Verification"},{"heading":"domain-verification","content":"Enterprise Plan: Navigate to Account Settings > Authentication > Domain Verification"},{"heading":"domain-verification","content":"Enter your domain (e.g., example.com)"},{"heading":"domain-verification","content":"Copy the TXT record provided by NocoDB"},{"heading":"domain-verification","content":"Add the TXT record to your domain’s DNS via your registrar/DNS provider."},{"heading":"domain-verification","content":"Wait for DNS propagation (this may take a few minutes to several hours)"},{"heading":"domain-verification","content":"Click Verify button in NocoDB to confirm domain ownership"},{"heading":"domain-verification","content":"Once verified, only users with email addresses under your verified domain(s) will be able to sign in via SSO. For example, if you've verified example.com, only users with emails like user@example.com will be allowed to sign in through the SSO page."},{"heading":"domain-verification","content":"type: info"}],"headings":[{"id":"email-and-password-based","content":"Email and password based"},{"id":"single-sign-on-sso","content":"Single Sign On (SSO)"},{"id":"google-oauth","content":"Google OAuth"},{"id":"security-assertion-markup-language-saml","content":"Security Assertion Markup Language (SAML)"},{"id":"openid-connect-oidc","content":"OpenID Connect (OIDC)"},{"id":"accessing-the-sso-configuration-menu","content":"Accessing the SSO Configuration Menu"},{"id":"business-plan","content":"Business Plan"},{"id":"enterprise-plan","content":"Enterprise Plan"},{"id":"domain-verification","content":"Domain Verification"}]},"url":"/docs/product-docs/account-settings/authentication","title":"Authentication & SSO","description":"Learn about different methods available for authentication with NocoDB."},{"_id":"/docs/product-docs/automation/scripts/actions-on-script","structured":{"contents":[{"heading":"rename-script","content":"To duplicate a Script"},{"heading":"rename-script","content":"Use ... actions button to the right of the script name in the Scripts list"},{"heading":"rename-script","content":"Select Renamne"},{"heading":"duplicate-script","content":"To duplicate a Script"},{"heading":"duplicate-script","content":"Use ... actions button to the right of the script name in the Scripts list"},{"heading":"duplicate-script","content":"Select Duplicate"},{"heading":"duplicate-script","content":"A copy of the script will be created with a suffix  - Copy"},{"heading":"delete-script","content":"To delete a Script"},{"heading":"delete-script","content":"Use ... actions button to the right of the script name in the Scripts list"},{"heading":"delete-script","content":"Select Delete"},{"heading":"printexport-script-logs-to-pdf","content":"Export your script execution results to PDF."},{"heading":"printexport-script-logs-to-pdf","content":"To export:"},{"heading":"printexport-script-logs-to-pdf","content":"Run your script to generate output"},{"heading":"printexport-script-logs-to-pdf","content":"Click the Print button in the toolbar"},{"heading":"printexport-script-logs-to-pdf","content":"Select page size (Letter, Legal, or A4) and orientation (Portrait or Landscape)"},{"heading":"printexport-script-logs-to-pdf","content":"Click Generate PDF"},{"heading":"printexport-script-logs-to-pdf","content":"Save as PDF or print from the browser dialog"},{"heading":"printexport-script-logs-to-pdf","content":"Note: The Print button is disabled until you run the script at least once."},{"heading":"additional-resources","content":"The following resources can help you get started with NocoDB scripts:"},{"heading":"additional-resources","content":"Script Documentation"},{"heading":"additional-resources","content":"Script Examples"},{"heading":"additional-resources","content":"Script API Reference"}],"headings":[{"id":"rename-script","content":"Rename Script"},{"id":"duplicate-script","content":"Duplicate Script"},{"id":"delete-script","content":"Delete Script"},{"id":"printexport-script-logs-to-pdf","content":"Print/Export Script Logs to PDF"},{"id":"additional-resources","content":"Additional Resources"}]},"url":"/docs/product-docs/automation/scripts/actions-on-script","title":"Actions on script","description":"Learn how to rename, duplicate and delete a script in NocoDB."},{"_id":"/docs/product-docs/automation/scripts/create-script","structured":{"contents":[{"content":"To create your first script, you can either"},{"content":"From the sidebar, click on the Create New button and select New Script"},{"content":"From the base homepage, select All Scripts tab and click on the + Create Empty Script button"},{"heading":"layout","content":"All scripts are listed in the Automations section accessible from the left sidebar. You can also view the scripts in the All Scripts tab on the base homepage."},{"heading":"layout","content":"Central area is the script editor where you can write and run your JavaScript code."},{"heading":"layout","content":"The right sidebar is the execution area where you can see the output of your script, view logs, and manage script settings."},{"heading":"layout","content":"Use the settings icon in the top-right corner to configure script settings. Use the Run button to execute your script. Use the Print button to export script output to PDF."},{"heading":"layout","content":"Access quick links to documentation, support, and settings from the bottom-right corner."},{"heading":"additional-resources","content":"The following resources can help you get started with NocoDB scripts:"},{"heading":"additional-resources","content":"Script Documentation"},{"heading":"additional-resources","content":"Script Examples"},{"heading":"additional-resources","content":"Script API Reference"}],"headings":[{"id":"layout","content":"Layout"},{"id":"additional-resources","content":"Additional Resources"}]},"url":"/docs/product-docs/automation/scripts/create-script","title":"Create script","description":"Learn how to create a script in NocoDB."},{"_id":"/docs/product-docs/automation/scripts","structured":{"contents":[{"content":"type: note"},{"content":"The Scripts feature is currently in beta release & is available on NocoDB cloud and on-premise licensed deployments."},{"content":"NocoDB Scripts is a powerful automation engine that allows you to write JavaScript code to interact with your NocoDB bases. Scripts enable you to automate workflows, perform complex operations, transform data, and integrate with external services - all without leaving the NocoDB interface."},{"heading":"key-features","content":"JavaScript Environment: Write and run JavaScript code directly in NocoDB"},{"heading":"key-features","content":"Database Access: Query tables and views, create, update, and delete records"},{"heading":"key-features","content":"User Interaction: Collect input from users with interactive prompts"},{"heading":"key-features","content":"External Integration: Connect to third-party services via HTTP requests"},{"heading":"key-features","content":"Visual Output: Display results in formatted tables, markdown, and more"},{"heading":"key-features","content":"TypeScript Support: Enjoy code completion and type checking in the script editor"},{"heading":"additional-resources","content":"The following resources can help you get started with NocoDB scripts:"},{"heading":"additional-resources","content":"Script Documentation"},{"heading":"additional-resources","content":"Script Examples"},{"heading":"additional-resources","content":"Script API Reference"}],"headings":[{"id":"key-features","content":"Key Features"},{"id":"additional-resources","content":"Additional Resources"}]},"url":"/docs/product-docs/automation/scripts","title":"Scripts ☁","description":"Overview of the scripts feature in NocoDB"},{"_id":"/docs/product-docs/automation/webhook/actions-on-webhook","structured":{"contents":[{"heading":"enabledisable-webhook","content":"To disable a Webhook"},{"heading":"enabledisable-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"enabledisable-webhook","content":"Toggle Activate button to enable/disable"},{"heading":"edit-webhook","content":"To edit a Webhook"},{"heading":"edit-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"edit-webhook","content":"Click on webhook to be edited"},{"heading":"edit-webhook","content":"This will open up the webhook configuration page, which is similar to the page used for creating webhook. Reconfigure the webhook as required"},{"heading":"edit-webhook","content":"Click on Save button to save the changes"},{"heading":"duplicate-webhook","content":"To duplicate a Webhook"},{"heading":"duplicate-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"duplicate-webhook","content":"Click on ... actions button associated with the webhook to be duplicate"},{"heading":"duplicate-webhook","content":"Select Duplicate"},{"heading":"duplicate-webhook","content":"A copy of the webhook will be created (disabled by default) with a suffix copy"},{"heading":"delete-webhook","content":"To delete a Webhook"},{"heading":"delete-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"delete-webhook","content":"Click on ... actions button associated with the webhook to be deleted"},{"heading":"delete-webhook","content":"Select Delete"},{"heading":"webhook-logs-","content":"type: note"},{"heading":"webhook-logs-","content":"This feature is only available in the paid plans, in both cloud & self-hosted."},{"heading":"webhook-logs-","content":"Webhook logs in NocoDB provide a detailed record of webhook execution attempts, including request payloads, response status, and error messages (if any). These logs help in monitoring webhook activity, debugging failures, and verifying successful deliveries. Logs can be accessed from the webhook configuration panel for each webhook."}],"headings":[{"id":"enabledisable-webhook","content":"Enable/disable Webhook"},{"id":"edit-webhook","content":"Edit Webhook"},{"id":"duplicate-webhook","content":"Duplicate Webhook"},{"id":"delete-webhook","content":"Delete Webhook"},{"id":"webhook-logs-","content":"Webhook Logs ☁"}]},"url":"/docs/product-docs/automation/webhook/actions-on-webhook","title":"Actions on webhook","description":"Learn how to enable/disable, duplicate and delete webhooks."},{"_id":"/docs/product-docs/automation/webhook/create-webhook","structured":{"contents":[{"heading":"accessing-webhook-page","content":"Click on table for which webhook needs to be configured on the left sidebar"},{"heading":"accessing-webhook-page","content":"Open Details tab in topbar,"},{"heading":"accessing-webhook-page","content":"Click on Webhooks tab"},{"heading":"accessing-webhook-page","content":"Click Add New Webhook"},{"heading":"configuring-webhook","content":"Name the webhook - Give a clear & descriptive name."},{"heading":"configuring-webhook","content":"Select the Trigger Source type :Trigger Source type View and Field are only available in the cloud & self-hosted enterprise plans."},{"heading":"configuring-webhook","content":"Record - Triggers when a record is inserted, updated, or deleted, or for all actions if “Send me everything” is selected."},{"heading":"configuring-webhook","content":"View - Triggers when a view is created, updated, or deleted, or for all actions if “Send me everything” is selected."},{"heading":"configuring-webhook","content":"Field - Triggers when a field is created, updated, or deleted, or for all actions if “Send me everything” is selected."},{"heading":"configuring-webhook","content":"Manual Trigger / Button Trigger  - Trigger runs when a user manually clicks a webhook configured button."},{"heading":"configuring-webhook","content":"Select Trigger Event type : Refer table here for available events for each source"},{"heading":"configuring-webhook","content":"[Optional] Trigger based on condition : details here\nConditions are only applicable for Record trigger source events"},{"heading":"configuring-webhook","content":"Specify the condition for which webhook should be triggered"},{"heading":"configuring-webhook","content":"You can select multiple conditions"},{"heading":"configuring-webhook","content":"If no condition is selected, webhook will be triggered for all records"},{"heading":"configuring-webhook","content":"[Optional] Trigger for updates in specific fields : details here\nThis is only applicable for Record After Update event."},{"heading":"configuring-webhook","content":"Select the fields for which webhook should be triggered."},{"heading":"configuring-webhook","content":"If no field is selected, any field update will trigger webhook"},{"heading":"configuring-webhook","content":"[Optional] Trigger only when specific form submitted: details here\nThis is only applicable for Record After Insert event."},{"heading":"configuring-webhook","content":"Select the form for which webhook should be triggered."},{"heading":"configuring-webhook","content":"Webhook Action : Select the action to be performed when webhook is triggered. Action can be one of the following:"},{"heading":"configuring-webhook","content":"HTTP Request : Send an HTTP request to a specified URL. You can configure the HTTP method, headers, parameters, and body of the request."},{"heading":"configuring-webhook","content":"Method & URL : Specify the endpoint that the webhook will call when triggered. You can choose from the following HTTP methods: GET, POST, PUT, DELETE, PATCH, and HEAD."},{"heading":"configuring-webhook","content":"Headers & Parameters : Configure Request headers & parameters"},{"heading":"configuring-webhook","content":"Body : Configure request body. You can use handlebar syntax to access and manipulate the data easily. For example, {{ json event }} will give you the complete event data (default behaviour if body not configured)."},{"heading":"configuring-webhook","content":"Run Script : Run a custom script using NocoDB's built-in scripting engine. You can write JavaScript code to perform various actions when the webhook is triggered."},{"heading":"configuring-webhook","content":"Script : Select the script to be executed when the webhook is triggered. You can create and manage scripts in the Scripts tab in the left sidebar."},{"heading":"configuring-webhook","content":"[Optional] Click Test webhook button to verify if parameter are configured appropriately (with sample payload)"},{"heading":"configuring-webhook","content":"Click Create Webhook button to complete webhook creation"},{"heading":"trigger-source-and-event","content":"Webhooks in NocoDB can be configured based on the source of the trigger and the type of event. The table below outlines the available combinations:"},{"heading":"trigger-source-and-event","content":"type: info"},{"heading":"trigger-source-and-event","content":"Trigger Source"},{"heading":"trigger-source-and-event","content":"Trigger Event"},{"heading":"trigger-source-and-event","content":"Description"},{"heading":"trigger-source-and-event","content":"Record"},{"heading":"trigger-source-and-event","content":"Send Me Everything"},{"heading":"trigger-source-and-event","content":"Triggers on any record insert, update, or delete operation"},{"heading":"trigger-source-and-event","content":"After Insert"},{"heading":"trigger-source-and-event","content":"Triggers after one or more records are inserted"},{"heading":"trigger-source-and-event","content":"After Update"},{"heading":"trigger-source-and-event","content":"Triggers after one or more records are updated"},{"heading":"trigger-source-and-event","content":"After Delete"},{"heading":"trigger-source-and-event","content":"Triggers after one or more records are deleted"},{"heading":"trigger-source-and-event","content":"View"},{"heading":"trigger-source-and-event","content":"Send Me Everything"},{"heading":"trigger-source-and-event","content":"Triggers on any view create, update, or delete operation"},{"heading":"trigger-source-and-event","content":"After Create"},{"heading":"trigger-source-and-event","content":"Triggers after a view is created"},{"heading":"trigger-source-and-event","content":"After Update"},{"heading":"trigger-source-and-event","content":"Triggers after a view is updated"},{"heading":"trigger-source-and-event","content":"After Delete"},{"heading":"trigger-source-and-event","content":"Triggers after a view is deleted"},{"heading":"trigger-source-and-event","content":"Field"},{"heading":"trigger-source-and-event","content":"Send Me Everything"},{"heading":"trigger-source-and-event","content":"Triggers on any field create, update, or delete operation"},{"heading":"trigger-source-and-event","content":"After Create"},{"heading":"trigger-source-and-event","content":"Triggers after a field is created"},{"heading":"trigger-source-and-event","content":"After Update"},{"heading":"trigger-source-and-event","content":"Triggers after a field is updated"},{"heading":"trigger-source-and-event","content":"After Delete"},{"heading":"trigger-source-and-event","content":"Triggers after a field is deleted"},{"heading":"trigger-source-and-event","content":"Button Trigger"},{"heading":"trigger-source-and-event","content":"—"},{"heading":"trigger-source-and-event","content":"Triggers when a button field is clicked"},{"heading":"trigger-source-and-event","content":"For more details on using Button Trigger webhooks with the Button field, see the Button field documentation."},{"heading":"run-script-action-","content":"type: note"},{"heading":"run-script-action-","content":"The Run Script action enables you to execute custom JavaScript code directly within NocoDB whenever a webhook is triggered. It is ideal for use cases where data needs to be processed or transformed internally. When triggered, the associated script runs within NocoDB’s secure scripting engine and automatically receives an event object (see example below) containing the webhook context, such as record creation, update, or deletion details."},{"heading":"run-script-action-","content":"Refer to the Scripts documentation for detailed guide on creating and managing scripts. Note that, scripts that seek explicit user input (such as input.textAsync()) cannot be used in webhook context, since webhooks run in the background without user interaction."},{"heading":"webhook-with-conditions","content":"Webhooks (record trigger related) in NocoDB can be configured to trigger only when specific conditions are met. For example, you may choose to trigger a webhook only when the Status field is set to Complete. You can define multiple conditions using logical operators like AND or OR—such as triggering the webhook on record update only when Status is Complete and Priority is High."},{"heading":"webhook-with-conditions","content":"A webhook will only be triggered if the condition transitions from not met to met during a record event. For instance (for above example), if the original record has Status = Complete and Priority = Low, and you update it to Priority = High, the webhook will trigger—since the condition was not met before but is met after the update. However, if a record already satisfies the condition (Status = Complete and Priority = High) and you update unrelated fields, the webhook will not be triggered."},{"heading":"webhook-with-conditions","content":"In short, a webhook is triggered only when the condition changes from false (old record) to true (new record)."},{"heading":"webhook-with-conditions","content":"type: note"},{"heading":"webhook-on-field-changes-","content":"type: note"},{"heading":"webhook-on-field-changes-","content":"For After Update event, you can configure webhook to trigger only when certain fields are updated. For example, trigger webhook only when Status is updated. You can also configure multiple fields."},{"heading":"webhook-on-specific-form-submission-","content":"type: note"},{"heading":"webhook-on-specific-form-submission-","content":"For After Insert event, you can configure webhook to trigger only when a specific form is submitted. For example, if you have multiple forms for a table, you can choose to trigger webhook only when Form A is submitted."},{"heading":"webhook-with-custom-payload","content":"Custom payload lets you fully control the body a webhook sends when an event is triggered. You can send the entire event object, a specific field, a compact row summary, or transform rows into arrays/objects that downstream services expect."},{"heading":"webhook-with-custom-payload","content":"NocoDB exposes the current event as event inside custom payload. These are processed with Handlebars-like expressions and a built-in json helper (examples below)."},{"heading":"example-event-object","content":"This is the sample event generated by NocoDB after a record is inserted."},{"heading":"example-event-object","content":"In custom payload, you will typically access paths such as event.data.table_name or event.data.rows.[0].Tags."},{"heading":"adding-a-custom-payload","content":"To add a custom payload, open your webhook in NocoDB's UI and follow these steps:"},{"heading":"adding-a-custom-payload","content":"Click on the Body tab"},{"heading":"adding-a-custom-payload","content":"Enter your template using Handlebars expressions and the json helper."},{"heading":"adding-a-custom-payload","content":"Create/update Webhook or use the Test Webhook action to verify rendering."},{"heading":"adding-a-custom-payload","content":"type: info"},{"heading":"adding-a-custom-payload","content":"The json helper is used to safely serialize values into valid JSON, whether they’re strings, objects, or arrays. It ensures proper quoting and escaping, preventing common errors with quotes, newlines, or special characters. For example, {{ json event }} outputs the full event object, while {{ json event.data.rows.[0].Title }} safely inserts a single field as a JSON string. This makes it the most reliable way to embed dynamic values in webhook payloads."},{"heading":"adding-a-custom-payload","content":"Handlebars expressions allow you to dynamically access and manipulate data within templates, similar to how the json helper works for serialization. You can reference fields using dot or bracket notation, iterate over arrays with {{#each ...}}, and conditionally include content with {{#if ...}}. Learn more about using Handlebars expressions in Handlebars documentation."},{"heading":"examples","content":"Here are some common payload templates you can use as a starting point:"},{"heading":"examples","content":"Full event object:\nSends the complete event data as JSON"},{"heading":"examples","content":"Single field value:\nSends just the Title field of the first row"},{"heading":"examples","content":"Compact row summary:\nSends all fields of the first row as a JSON object"},{"heading":"examples","content":"All rows as array:\nSends all rows in the event as a JSON array"},{"heading":"examples","content":"Custom object with metadata:\nSends an object with table name, row count, and all rows"},{"heading":"examples","content":"Custom text with field value:\nSends a simple message including the Title field"},{"heading":"examples","content":"Handlebar logic example:\nSends different payloads based on whether rows exist"},{"heading":"examples","content":"Multiple rows with formatting:\nSends all rows with only Id and Title, formatted as a JSON array"},{"heading":"discord-webhook","content":"Discord webhook can be configured to send messages to a Discord channel. Discord request body should contain content, embeds or attachments, otherwise request will fail. Below is an example of Discord webhook payload. More details can be found here"},{"heading":"discord-webhook","content":"To send complete event data to Discord, use below payload"},{"heading":"discord-webhook","content":"One can also customize the payload as per the requirement. For example, to send only the Title field to Discord, use below payload. Note that, the value of content is what that will get displayed in the Discord channel."},{"heading":"environment-variables","content":"In self-hosted version, you can configure the following environment variables to customize the webhook behavior."},{"heading":"environment-variables","content":"NC_ALLOW_LOCAL_HOOKS: Allow localhost based links to be triggered. Default: false"},{"heading":"environment-variables","content":"Find more about environment variables here"}],"headings":[{"id":"accessing-webhook-page","content":"Accessing webhook page"},{"id":"configuring-webhook","content":"Configuring webhook"},{"id":"trigger-source-and-event","content":"Trigger Source and Event"},{"id":"run-script-action-","content":"Run Script action ☁"},{"id":"webhook-with-conditions","content":"Webhook with conditions"},{"id":"webhook-on-field-changes-","content":"Webhook on field changes ☁"},{"id":"webhook-on-specific-form-submission-","content":"Webhook on specific form submission ☁"},{"id":"webhook-with-custom-payload","content":"Webhook with custom payload"},{"id":"example-event-object","content":"Example event object"},{"id":"adding-a-custom-payload","content":"Adding a custom payload"},{"id":"examples","content":"Examples"},{"id":"webhook-response-sample","content":"Webhook response sample"},{"id":"record-trigger","content":"Record trigger"},{"id":"view-trigger","content":"View trigger"},{"id":"field-trigger","content":"Field trigger"},{"id":"manual-trigger","content":"Manual trigger"},{"id":"discord-webhook","content":"Discord Webhook"},{"id":"environment-variables","content":"Environment Variables"}]},"url":"/docs/product-docs/automation/webhook/create-webhook","title":"Create webhook","description":"Learn how to create a webhook in NocoDB."},{"_id":"/docs/product-docs/automation/webhook","structured":{"contents":[{"content":"NocoDB supports webhooks to notify external systems in real time whenever records are created, updated, or deleted within a table. This allows seamless integration with third-party services by triggering automated workflows or syncing data changes as they happen."},{"content":"Webhooks in NocoDB are configured per table and can be tailored with custom payloads, headers, and event-specific triggers to fit diverse automation needs."},{"content":"This article discusses Webhook v3, which is the latest version of webhooks in NocoDB. It includes a new user interface and additional features compared to the previous version. For more information on the differences between webhook v2 and v3, please refer to the Webhook v2 vs v3 article."},{"content":"type: note"},{"heading":"related-topics","content":"Create Webhook"},{"heading":"related-topics","content":"Disable Webhook"},{"heading":"related-topics","content":"Modify Webhook"},{"heading":"related-topics","content":"Duplicate Webhook"},{"heading":"related-topics","content":"Delete Webhook"},{"heading":"related-topics","content":"Webhook Logs"},{"heading":"related-topics","content":"Webhook v2 vs v3"},{"heading":"related-topics","content":"Upgrade to v3"}],"headings":[{"id":"related-topics","content":"Related Topics"}]},"url":"/docs/product-docs/automation/webhook","title":"Webhook","description":"Learn how to create, modify and delete webhooks."},{"_id":"/docs/product-docs/automation/webhook/webhook-v2-vs-v3","structured":{"contents":[{"content":"NocoDB’s webhook system has evolved significantly in version 3, introducing a more streamlined structure, richer payloads, and enhanced configuration capabilities. This update reflects feedback from real-world usage and aims to simplify integration while giving users more control over what triggers a webhook."},{"content":"Below is a detailed comparison of key changes between webhook v2 and v3."},{"heading":"unified-event-model-for-record-operations","content":"In webhook v2, separate events were defined for individual and bulk operations—such as"},{"heading":"unified-event-model-for-record-operations","content":"record.create, records.bulkCreate,"},{"heading":"unified-event-model-for-record-operations","content":"record.update, records.bulkUpdate, and"},{"heading":"unified-event-model-for-record-operations","content":"record.delete, records.bulkDelete."},{"heading":"unified-event-model-for-record-operations","content":"This added complexity for consumers who needed to handle multiple event types for similar actions. Webhook v3 consolidates these into a simplified event model: after insert, after update and after delete. These events now apply uniformly to both single and bulk record operations."},{"heading":"versioning-in-webhook-payloads","content":"Starting with v3, the webhook response includes a version identifier in the payload. This enables client systems to reliably parse and process webhook data based on the expected schema, and future-proof integrations as NocoDB continues to evolve its webhook capabilities."},{"heading":"enhanced-payload-for-bulk-insert-operation","content":"Previously in webhook v2, the payload for bulk insert operations contained only the count of records that were inserted. This limited the ability to audit or react to specific insertions."},{"heading":"enhanced-payload-for-bulk-insert-operation","content":"In v3, \"After insert\" webhook payload (unified for single insertion & bulk) includes the actual inserted records as an array. This enhancement allows integrators to trace exactly which records were inserted and take action accordingly—such as syncing insertions with external systems or logging for compliance."},{"heading":"new-send-everything-trigger-option","content":"Webhook v3 introduces a \"Send everything\" trigger in the UI. This option allows users to configure a webhook that triggers on any change to records within a table—without having to specify individual event types. It's particularly useful when external systems need to stay in sync with all changes, regardless of whether they are inserts, updates, or deletes."},{"heading":"field-level-change-monitoring","content":"Another key improvement in webhook v3 is the ability to configure field-specific triggers. This feature enables webhooks to fire only when certain fields are changed. For example, a webhook can be set to trigger only when the Status or Priority field is updated—helping reduce noise and streamline automation logic."},{"heading":"summary","content":"Feature"},{"heading":"summary","content":"Webhook v2"},{"heading":"summary","content":"Webhook v3"},{"heading":"summary","content":"Event Model"},{"heading":"summary","content":"Separate events for bulk & single"},{"heading":"summary","content":"Unified after insert/update/delete"},{"heading":"summary","content":"Payload Version"},{"heading":"summary","content":"Not available"},{"heading":"summary","content":"Included in every webhook payload"},{"heading":"summary","content":"Bulk Insert Payload"},{"heading":"summary","content":"Only count of records"},{"heading":"summary","content":"Full array of inserted records"},{"heading":"summary","content":"Send Everything Trigger"},{"heading":"summary","content":"Not available"},{"heading":"summary","content":"Supported"},{"heading":"summary","content":"Field Change Monitoring"},{"heading":"summary","content":"Not supported"},{"heading":"summary","content":"Supported"},{"heading":"upgrade-to-webhook-v3","content":"If there are webhook v2 webhooks in your NocoDB instance, you will see a notification in the webhook list view. You can select the webhook that you want to upgrade to v3 and click on the Upgrade button. This will take you to the upgrade page where you can see the differences between the v2 and v3 webhook response. You can then click on the Upgrade button to upgrade the webhook to v3."}],"headings":[{"id":"unified-event-model-for-record-operations","content":"Unified Event Model for Record Operations"},{"id":"versioning-in-webhook-payloads","content":"Versioning in Webhook Payloads"},{"id":"enhanced-payload-for-bulk-insert-operation","content":"Enhanced Payload for Bulk Insert Operation"},{"id":"new-send-everything-trigger-option","content":"New \"Send Everything\" Trigger Option"},{"id":"field-level-change-monitoring","content":"Field-Level Change Monitoring"},{"id":"summary","content":"Summary"},{"id":"upgrade-to-webhook-v3","content":"Upgrade to webhook v3"}]},"url":"/docs/product-docs/automation/webhook/webhook-v2-vs-v3","title":"Webhook v2 vs v3","description":"Discover the key differences between webhook v2 and v3 in NocoDB, including event model, payload enhancements, and new features."},{"_id":"/docs/product-docs/automation/webhook-v2-deprecated/actions-on-webhook","structured":{"contents":[{"content":"type: note"},{"content":"This article refers to the legacy version of webhooks in NocoDB. Refer to Webhook v3 for the latest features and improvements."},{"heading":"enabledisable-webhook","content":"To disable a Webhook"},{"heading":"enabledisable-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"enabledisable-webhook","content":"Toggle Activate button to enable/disable"},{"heading":"edit-webhook","content":"To edit a Webhook"},{"heading":"edit-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"edit-webhook","content":"Click on webhook to be edited"},{"heading":"edit-webhook","content":"This will open up the webhook configuration page, which is similar to the page used for creating webhook. Reconfigure the webhook as required"},{"heading":"edit-webhook","content":"Click on Save button to save the changes"},{"heading":"duplicate-webhook","content":"To duplicate a Webhook"},{"heading":"duplicate-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"duplicate-webhook","content":"Click on ... actions button associated with the webhook to be duplicate"},{"heading":"duplicate-webhook","content":"Select Duplicate"},{"heading":"duplicate-webhook","content":"A copy of the webhook will be created (disabled by default) with a suffix  - Copy"},{"heading":"delete-webhook","content":"To delete a Webhook"},{"heading":"delete-webhook","content":"Open Webhook tab to find list of webhooks created"},{"heading":"delete-webhook","content":"Click on ... actions button associated with the webhook to be deleted"},{"heading":"delete-webhook","content":"Select Delete"}],"headings":[{"id":"enabledisable-webhook","content":"Enable/disable Webhook"},{"id":"edit-webhook","content":"Edit Webhook"},{"id":"duplicate-webhook","content":"Duplicate Webhook"},{"id":"delete-webhook","content":"Delete Webhook"}]},"url":"/docs/product-docs/automation/webhook-v2-deprecated/actions-on-webhook","title":"Actions on webhook","description":"Learn how to enable/disable, duplicate and delete webhooks."},{"_id":"/docs/product-docs/automation/webhook-v2-deprecated/create-webhook","structured":{"contents":[{"content":"type: note"},{"content":"This article refers to the legacy version of webhooks in NocoDB. Refer to Webhook v3 for the latest features and improvements."},{"heading":"accessing-webhook-page","content":"Click on table for which webhook needs to be configured on the left sidebar"},{"heading":"accessing-webhook-page","content":"Open Details tab in topbar,"},{"heading":"accessing-webhook-page","content":"Click on Webhooks tab"},{"heading":"accessing-webhook-page","content":"Click Add New Webhook"},{"heading":"configuring-webhook","content":"Name of the webhook"},{"heading":"configuring-webhook","content":"Select the event for which webhook needs to be triggered"},{"heading":"configuring-webhook","content":"Trigger"},{"heading":"configuring-webhook","content":"Details"},{"heading":"configuring-webhook","content":"After Record Insert"},{"heading":"configuring-webhook","content":"After a single record is inserted"},{"heading":"configuring-webhook","content":"After Record Update"},{"heading":"configuring-webhook","content":"After a single record is updated"},{"heading":"configuring-webhook","content":"After Record Delete"},{"heading":"configuring-webhook","content":"After a single record is deleted"},{"heading":"configuring-webhook","content":"After Multiple Record Insert"},{"heading":"configuring-webhook","content":"After bulk records are inserted"},{"heading":"configuring-webhook","content":"After Multiple Record Update"},{"heading":"configuring-webhook","content":"After bulk records are updated"},{"heading":"configuring-webhook","content":"After Multiple Record Delete"},{"heading":"configuring-webhook","content":"After bulk records are deleted"},{"heading":"configuring-webhook","content":"Manual Trigger"},{"heading":"configuring-webhook","content":"Manually trigger webhook using button field"},{"heading":"configuring-webhook","content":"Method & URL: Configure the endpoint to which webhook needs to be triggered. Supported methods are GET, POST, DELETE, PUT, HEAD, PATCH"},{"heading":"configuring-webhook","content":"Headers & Parameters: Configure Request headers & parameters (optional)"},{"heading":"configuring-webhook","content":"Condition: Only records meeting the configured criteria will trigger webhook (optional)"},{"heading":"configuring-webhook","content":"Test webhook (with sample payload) to verify if parameter are configured appropriately (optional)"},{"heading":"configuring-webhook","content":"Save the webhook"},{"heading":"configuring-webhook","content":"For more information on Manual Trigger webhook & its use with Button field, refer here"},{"heading":"webhook-with-conditions","content":"In case of webhook with conditions, only records meeting the configured criteria will trigger webhook. For example, trigger webhook only when Status is Complete. You can also configure multiple conditions using AND or OR operators. For example, trigger webhook only when Status is Complete and Priority is High."},{"heading":"webhook-with-conditions","content":"Webhook will be triggered only when the configured condition wasn't met before the record was updated. For example, if you have configured webhook with condition Status is Complete and Priority is High and you update the record with Status Complete and Priority Low to High, webhook will be triggered. However, if you update any other fields of the record with Status Complete and Priority High, webhook won't be triggered."},{"heading":"webhook-with-conditions","content":"In summary, webhook will be triggered only when Condition(old-record) = false and Condition(new-record) = true."},{"heading":"webhook-with-conditions","content":"type: info"},{"heading":"webhook-with-custom-payload-","content":"type: info"},{"heading":"webhook-with-custom-payload-","content":"In the enterprise edition, you can set up a personalized payload for your webhook. Just head to the Body tab to make the necessary configurations. Users can utilize handlebar syntax, which allows them to access and manipulate the data easily."},{"heading":"webhook-with-custom-payload-","content":"Use {{ json event }} to access the event data. Sample response is as follows"},{"heading":"webhook-with-custom-payload-","content":"type: info"},{"heading":"discord-webhook","content":"Discord webhook can be configured to send messages to a Discord channel. Discord request body should contain content, embeds or attachments, otherwise request will fail. Below is an example of Discord webhook payload. More details can be found here"},{"heading":"discord-webhook","content":"To send complete event data to Discord, use below payload"},{"heading":"discord-webhook","content":"One can also customize the payload as per the requirement. For example, to send only the Title field to Discord, use below payload. Note that, the value of content is what that will get displayed in the Discord channel."},{"heading":"environment-variables","content":"In self-hosted version, you can configure the following environment variables to customize the webhook behavior."},{"heading":"environment-variables","content":"NC_ALLOW_LOCAL_HOOKS: Allow localhost based links to be triggered. Default: false"},{"heading":"environment-variables","content":"Find more about environment variables here"}],"headings":[{"id":"create-webhook","content":"Create Webhook"},{"id":"accessing-webhook-page","content":"Accessing webhook page"},{"id":"configuring-webhook","content":"Configuring webhook"},{"id":"webhook-with-conditions","content":"Webhook with conditions"},{"id":"webhook-response-sample","content":"Webhook response sample"},{"id":"webhook-with-custom-payload-","content":"Webhook with custom payload ☁"},{"id":"discord-webhook","content":"Discord Webhook"},{"id":"environment-variables","content":"Environment Variables"}]},"url":"/docs/product-docs/automation/webhook-v2-deprecated/create-webhook","title":"Create webhook","description":"Learn how to create a webhook in NocoDB."},{"_id":"/docs/product-docs/automation/webhook-v2-deprecated","structured":{"contents":[{"content":"type: note"},{"content":"This article refers to the legacy version of webhooks in NocoDB. Refer to Webhook v3 for the latest features and improvements."},{"content":"You can employ webhooks to notify external systems whenever there are additions, updates, or removals of records within NocoDB. This feature allows you to receive instantaneous notifications for any changes made to your database through NocoDB. NocoDB also offers webhooks for bulk endpoints for creating, updating, or deleting multiple records simultaneously."},{"content":"Note that, Webhooks currently are specific to associated table."},{"content":"Create Webhook"},{"content":"Disable Webhook"},{"content":"Modify Webhook"},{"content":"Duplicate Webhook"},{"content":"Delete Webhook"}],"headings":[]},"url":"/docs/product-docs/automation/webhook-v2-deprecated","title":"Webhook v2 (deprecated)","description":"Learn how to create, modify and delete webhooks."},{"_id":"/docs/product-docs/automation/workflow/actions-on-workflow","structured":{"contents":[{"heading":"rename-workflow","content":"To rename a workflow:"},{"heading":"rename-workflow","content":"Use ... actions button next to the workflow name in the Workflows list"},{"heading":"rename-workflow","content":"Select Rename workflow"},{"heading":"rename-workflow","content":"Enter a new name and confirm"},{"heading":"duplicate-workflow","content":"To duplicate a workflow:"},{"heading":"duplicate-workflow","content":"Use ... actions button next to the workflow name in the Workflows list"},{"heading":"duplicate-workflow","content":"Select Duplicate workflow"},{"heading":"duplicate-workflow","content":"A copy of the workflow is created with a prefix Copy of."},{"heading":"delete-workflow","content":"To delete a workflow:"},{"heading":"delete-workflow","content":"Use ... actions button next to the workflow name in the Workflows list"},{"heading":"delete-workflow","content":"Select Delete workflow"},{"heading":"delete-workflow","content":"Confirm deletion"},{"heading":"delete-workflow","content":"Deleted workflows cannot be restored."},{"heading":"enable-or-disable-workflow","content":"A workflow when enabled will execute its triggers and actions as configured. Workflow can be enabled or disabled as needed using the toggle button in the workflow toolbar."},{"heading":"execution-logs","content":"NocoDB provides detailed logs for each workflow execution to help monitor and debug workflows."},{"heading":"execution-logs","content":"To view logs:"},{"heading":"execution-logs","content":"Open the workflow"},{"heading":"execution-logs","content":"On the toolbar, click on the Logs tab"},{"heading":"execution-logs","content":"Select a run to view trigger input, node execution status, and outputs"},{"heading":"execution-logs","content":"Execution list: View all workflow runs with status and timestamps."},{"heading":"execution-logs","content":"Execution summary: Overview of selected run with trigger details and overall status."},{"heading":"execution-logs","content":"Node execution details: View input, output, and status for each node in the workflow. Select a node to see detailed information."}],"headings":[{"id":"rename-workflow","content":"Rename Workflow"},{"id":"duplicate-workflow","content":"Duplicate Workflow"},{"id":"delete-workflow","content":"Delete Workflow"},{"id":"enable-or-disable-workflow","content":"Enable or Disable Workflow"},{"id":"execution-logs","content":"Execution Logs"}]},"url":"/docs/product-docs/automation/workflow/actions-on-workflow","title":"Actions on workflow","description":"Learn how to rename, duplicate and delete a workflow in NocoDB."},{"_id":"/docs/product-docs/automation/workflow/create-workflow","structured":{"contents":[{"heading":"accessing-workflow-page","content":"Workflow's in NocoDB are base specific. To create a new workflow, open the desired base and"},{"heading":"accessing-workflow-page","content":"From base Overview page, click on the Create Empty Workflow button."},{"heading":"accessing-workflow-page","content":"Alternatively, Click Create New in the left sidebar and select Workflow."},{"heading":"accessing-workflow-page","content":"Specify a name for the workflow and click Create Workflow."},{"heading":"accessing-workflow-page","content":"Optionally, provide a description to explain the workflow's purpose."},{"heading":"accessing-workflow-page","content":"You will land on the workflow editor page to configure the workflow."},{"heading":"accessing-workflow-page","content":"Workflow list : View all workflows in the base in the left sidebar"},{"heading":"accessing-workflow-page","content":"Toolbar : Access workflow actions and settings"},{"heading":"accessing-workflow-page","content":"Editor canvas : Design the workflow by adding and connecting nodes"},{"heading":"accessing-workflow-page","content":"Sidebar : Configure selected node properties"},{"heading":"configuring-workflow","content":"NocoDB Workflow builder provides a visual interface to design automation logic using interconnected nodes. To configure a workflow, follow these steps:"},{"heading":"configuring-workflow","content":"Name the workflow:\nProvide a clear and descriptive name to identify the workflow easily. Optionally, add a description to explain its purpose."},{"heading":"configuring-workflow","content":"Select Trigger:\nChoose how the workflow should be initiated & configure additional node specific settings (resource & conditions) as required. There can be only one trigger node per workflow. Supported trigger types include:"},{"heading":"configuring-workflow","content":"Record trigger – Runs when a record is created, updated, or deleted"},{"heading":"configuring-workflow","content":"Manual trigger – Runs when triggered manually by a user"},{"heading":"configuring-workflow","content":"Scheduled trigger – Runs at specified time intervals"},{"heading":"configuring-workflow","content":"Add Action nodes:\nDefine what happens when the workflow is triggered. You can chain multiple action nodes to perform sequential operations. Common action nodes include:"},{"heading":"configuring-workflow","content":"Create / Update Record – Modify data in a table"},{"heading":"configuring-workflow","content":"Send Notification – Notify users via supported channels"},{"heading":"configuring-workflow","content":"Include Flow control nodes:\n[Optional] Add flow control nodes to manage execution logic, such as:"},{"heading":"configuring-workflow","content":"If / else – Conditional branching based on field values or runtime data"},{"heading":"configuring-workflow","content":"Iterate – Loop through a list of items and perform actions for each item"},{"heading":"configuring-workflow","content":"Test workflow:\nUse Test Step to validate individual nodes to verify correct configuration and expected behavior."},{"heading":"configuring-workflow","content":"Publish workflow:\nOnce satisfied with the configuration, use toggle button in the toolbar to enable the workflow & click Publish to save changes. An enabled workflow will run automatically when triggered."}],"headings":[{"id":"accessing-workflow-page","content":"Accessing workflow page"},{"id":"configuring-workflow","content":"Configuring workflow"}]},"url":"/docs/product-docs/automation/workflow/create-workflow","title":"Create workflow","description":"Learn how to create a workflow in NocoDB."},{"_id":"/docs/product-docs/automation/workflow","structured":{"contents":[{"content":"Workflows in NocoDB enable you to automate repetitive tasks and streamline your processes. By setting up workflows, you can trigger actions based on specific events or conditions within your base. Each automation starts with a trigger and executes one or more actions, optionally controlled by flow logic such as if / else condition or an iteration."},{"content":"type: note"},{"content":"A workflow consists of the following building blocks:"},{"content":"Trigger node – Defines when the automation runs"},{"content":"Action nodes – Defines what happens when the automation runs"},{"content":"Flow nodes – Defines how actions are executed (conditional logic, iteration)"},{"heading":"trigger-node","content":"A Trigger determines when an automation starts. Each automation must have exactly one trigger."},{"heading":"when-manually-triggered","content":"Runs the automation only when triggered manually by a user.\nUseful for testing workflows or running one-off operations."},{"heading":"at-scheduled-time","content":"Runs the automation on a fixed schedule."},{"heading":"at-scheduled-time","content":"Use cases"},{"heading":"at-scheduled-time","content":"Daily or weekly reports"},{"heading":"at-scheduled-time","content":"Periodic data cleanup"},{"heading":"at-scheduled-time","content":"Scheduled reminders"},{"heading":"when-record-created","content":"Triggers when a new record is added to a selected table."},{"heading":"when-record-created","content":"Use cases"},{"heading":"when-record-created","content":"Send notifications for new entries"},{"heading":"when-record-created","content":"Auto-create related records"},{"heading":"when-record-created","content":"Initialize default values"},{"heading":"when-record-updated","content":"Triggers when an existing record is modified."},{"heading":"when-record-updated","content":"Use cases"},{"heading":"when-record-updated","content":"React to status changes"},{"heading":"when-record-updated","content":"Sync updates across tables"},{"heading":"when-record-updated","content":"Notify stakeholders on field changes"},{"heading":"when-record-deleted","content":"Triggers when a record is removed from a table."},{"heading":"when-record-deleted","content":"Use cases"},{"heading":"when-record-deleted","content":"Cleanup dependent records"},{"heading":"when-record-deleted","content":"Log deletions"},{"heading":"when-record-deleted","content":"Notify administrators"},{"heading":"when-form-submitted","content":"Triggers when a form view connected to a table is submitted."},{"heading":"when-form-submitted","content":"Use cases"},{"heading":"when-form-submitted","content":"Lead capture workflows"},{"heading":"when-form-submitted","content":"Support request handling"},{"heading":"when-form-submitted","content":"Survey response processing"},{"heading":"when-record-enters-a-view","content":"Triggers when a record appears in a specific view for the first time. The view’s filters define the trigger condition."},{"heading":"when-record-enters-a-view","content":"Use cases"},{"heading":"when-record-enters-a-view","content":"Workflow stages"},{"heading":"when-record-enters-a-view","content":"Approval pipelines"},{"heading":"when-record-enters-a-view","content":"Task readiness detection"},{"heading":"when-record-matches-conditions","content":"Triggers when a record meets defined conditions. The conditions can be based on any field values in the record."},{"heading":"when-record-matches-conditions","content":"Use cases"},{"heading":"when-record-matches-conditions","content":"Rule-based automations"},{"heading":"when-record-matches-conditions","content":"SLA breaches"},{"heading":"when-record-matches-conditions","content":"Conditional alerts"},{"heading":"action-nodes","content":"Actions define what the automation does after the trigger fires. Multiple actions can be chained together. Actions execute sequentially in the order they are connected."},{"heading":"create-record","content":"Creates a new record in a specified table. The fields of the new record can be set using static values or data from previous actions."},{"heading":"create-record","content":"Use cases"},{"heading":"create-record","content":"Create follow-up tasks"},{"heading":"create-record","content":"Insert audit logs"},{"heading":"create-record","content":"Sync data across tables"},{"heading":"update-record","content":"Updates one or more fields in an existing record. The fields to update can be set using static values or data from previous actions."},{"heading":"update-record","content":"Use cases"},{"heading":"update-record","content":"Change status fields"},{"heading":"update-record","content":"Set computed values"},{"heading":"update-record","content":"Mark records as processed"},{"heading":"find-record","content":"Finds a single record matching specified criteria. The found record or its ID can be used in subsequent actions."},{"heading":"find-record","content":"Use cases"},{"heading":"find-record","content":"Locate related records"},{"heading":"find-record","content":"Fetch data for later actions"},{"heading":"list-records","content":"Retrieves multiple records that match defined filters. The resulting list can be used in flow nodes like Iterate."},{"heading":"list-records","content":"Use cases"},{"heading":"list-records","content":"Batch operations"},{"heading":"list-records","content":"Iteration using flow nodes"},{"heading":"delete-record","content":"Deletes a record from a table. ID of the record to delete can be specified using static values or data from previous actions."},{"heading":"delete-record","content":"Use cases"},{"heading":"delete-record","content":"Data cleanup"},{"heading":"delete-record","content":"Lifecycle enforcement"},{"heading":"send-an-email","content":"Sends an email using configured email settings."},{"heading":"send-an-email","content":"Use cases"},{"heading":"send-an-email","content":"Notifications"},{"heading":"send-an-email","content":"Alerts"},{"heading":"send-an-email","content":"User confirmations"},{"heading":"send-message","content":"Sends a message to an external messaging service (for example, Slack)."},{"heading":"send-message","content":"Use cases"},{"heading":"send-message","content":"Team notifications"},{"heading":"send-message","content":"Operational alerts"},{"heading":"send-message","content":"Workflow updates"},{"heading":"flow-nodes","content":"Flow nodes control how actions are executed within an automation. They enable conditional branching and iteration over records."},{"heading":"if--else","content":"Adds conditional branching to the workflow. Based on the evaluation of a condition, it directs execution to either the If branch or the Else branch. The condition can be based on data from previous actions."},{"heading":"if--else","content":"Behavior"},{"heading":"if--else","content":"Evaluates a condition"},{"heading":"if--else","content":"Executes actions in the If branch when condition is true"},{"heading":"if--else","content":"Executes actions in the Else branch when condition is false"},{"heading":"if--else","content":"Use cases"},{"heading":"if--else","content":"Approval logic"},{"heading":"if--else","content":"Conditional notifications"},{"heading":"if--else","content":"Business rule enforcement"},{"heading":"iterate","content":"Repeats a set of actions for each item in specified list data (for example, records from List records action)."},{"heading":"iterate","content":"Behavior"},{"heading":"iterate","content":"Accepts array output from previous action"},{"heading":"iterate","content":"Executes child actions once per array item"},{"heading":"iterate","content":"Use cases"},{"heading":"iterate","content":"Bulk updates"},{"heading":"iterate","content":"Batch notifications"},{"heading":"iterate","content":"Record-by-record processing"},{"heading":"execution-order","content":"Trigger fires"},{"heading":"execution-order","content":"Actions execute top-to-bottom"},{"heading":"execution-order","content":"Flow nodes control branching or repetition"},{"heading":"execution-order","content":"Automation completes once all paths finish execution"},{"heading":"execution-order","content":"Logs are recorded for auditing"}],"headings":[{"id":"trigger-node","content":"Trigger Node"},{"id":"when-manually-triggered","content":"When manually triggered"},{"id":"at-scheduled-time","content":"At scheduled time"},{"id":"when-record-created","content":"When record created"},{"id":"when-record-updated","content":"When record updated"},{"id":"when-record-deleted","content":"When record deleted"},{"id":"when-form-submitted","content":"When form submitted"},{"id":"when-record-enters-a-view","content":"When record enters a view"},{"id":"when-record-matches-conditions","content":"When record matches conditions"},{"id":"action-nodes","content":"Action Nodes"},{"id":"record-actions","content":"Record Actions"},{"id":"create-record","content":"Create record"},{"id":"update-record","content":"Update record"},{"id":"find-record","content":"Find record"},{"id":"list-records","content":"List records"},{"id":"delete-record","content":"Delete record"},{"id":"communication-actions","content":"Communication Actions"},{"id":"send-an-email","content":"Send an email"},{"id":"send-message","content":"Send message"},{"id":"flow-nodes","content":"Flow Nodes"},{"id":"if--else","content":"If / else"},{"id":"iterate","content":"Iterate"},{"id":"execution-order","content":"Execution Order"}]},"url":"/docs/product-docs/automation/workflow","title":"Workflow ☁","description":"Learn about automation workflows in NocoDB."},{"_id":"/docs/product-docs/dashboards/widgets/bar-chart","structured":{"contents":[{"content":"The Bar Chart widget in NocoDB dashboards allows you to compare values across different categories. It is especially useful for highlighting trends, distributions, or comparisons between groups."},{"heading":"title--description","content":"Title: Enter a title for the bar chart widget. This will be displayed prominently at the top of the widget."},{"heading":"title--description","content":"Description: Optionally, add a description to provide context or details about the data being visualized. This will appear below the title."},{"heading":"data-source","content":"Table: Select the table from which you want to pull data for the bar chart."},{"heading":"data-source","content":"Records: Choose which records to include:"},{"heading":"data-source","content":"All Records: Displays all records from the selected table."},{"heading":"data-source","content":"Records from a view: Uses records from a specific view, allowing you to apply existing filters and sorts."},{"heading":"data-source","content":"Specific Records: Apply custom filters to select only certain records."},{"heading":"x-axis","content":"Field: Select the field whose values will be shown as categories along the X-axis (e.g., Product, Region, Status)."},{"heading":"x-axis","content":"Sort By: Choose the criteria to sort categories:"},{"heading":"x-axis","content":"xAxis Value: Sorts based on the label values."},{"heading":"x-axis","content":"yAxis Value: Sorts based on the numeric values plotted."},{"heading":"x-axis","content":"Order: Select Default, Ascending, or Descending order."},{"heading":"x-axis","content":"Include empty records: Optionally, include categories that do not have values."},{"heading":"x-axis","content":"Include others: Toggle to combine small or excess categories into an “Others” group for better readability."},{"heading":"y-axis","content":"Fields: Choose the field(s) that determine the bar lengths. You can add multiple fields for comparison."},{"heading":"y-axis","content":"Field Summary: Displays the Sum, Average, Min, or Max of a numeric field."},{"heading":"y-axis","content":"Start at zero: Ensures the Y-axis always begins at zero, which improves accuracy in comparing bar heights."},{"heading":"appearance","content":"Customize the look of the chart to improve readability and alignment with your dashboard:"},{"heading":"appearance","content":"Size: Choose the chart size (Small, Medium)."},{"heading":"appearance","content":"Show value in chart: Displays numeric values directly on the bars."},{"heading":"appearance","content":"Show count in legend: Adds record counts in the legend alongside category names."}],"headings":[{"id":"title--description","content":"Title & Description"},{"id":"data-source","content":"Data Source"},{"id":"display","content":"Display"},{"id":"x-axis","content":"X-axis"},{"id":"y-axis","content":"Y-axis"},{"id":"appearance","content":"Appearance"}]},"url":"/docs/product-docs/dashboards/widgets/bar-chart","title":"Bar Chart","description":"Configure bar chart widgets to compare values across categories in your dashboard"},{"_id":"/docs/product-docs/dashboards/widgets/donut-chart","structured":{"contents":[{"content":"The Donut Chart widget in NocoDB dashboards is a variant of the pie chart that features a hollow center, allowing for additional information or metrics to be displayed. It is particularly useful for showing how different segments contribute to a whole while providing space for supplementary details."},{"heading":"title--description","content":"Title: Enter a title for the donut chart widget. This will be displayed prominently at the top of the widget."},{"heading":"title--description","content":"Description: Optionally, add a description to provide context or details about the data being visualized. This will appear below the title."},{"heading":"data-source","content":"Table: Select the table from which you want to pull data for the donut chart. This is the primary source of records for the visualization."},{"heading":"data-source","content":"Record: Select records from the chosen table to be included in the donut chart. You can choose from:"},{"heading":"data-source","content":"All Records: Displays all records in the selected table."},{"heading":"data-source","content":"Records from a view: Allows you to filter records based on a specific view, enabling focused visualizations. You need to select a view from the dropdown."},{"heading":"data-source","content":"Specific Records: Apply filters to select specific records for the donut chart. This is useful for showing data based on certain criteria. You can add multiple filters to refine the selection."},{"heading":"display","content":"Category Field: Select the field that will be used to determine the segments of the donut chart. This field should contain categorical data that you want to visualize."},{"heading":"display","content":"Order: Choose how the segments are ordered in the donut chart. You can order them by:"},{"heading":"display","content":"Default: Segments are displayed in the order they appear in the data."},{"heading":"display","content":"Ascending: Segments are sorted in ascending order based on their values."},{"heading":"display","content":"Descending: Segments are sorted in descending order based on their values."},{"heading":"display","content":"Include empty records: Optionally, you can choose to include records that do not have a value for the selected category field. This can help in visualizing segments that may otherwise be omitted due to missing data."},{"heading":"display","content":"Value Field: Choose the field that will determine the size of each segment in the donut chart. This field should contain numerical data that represents the value for each category."},{"heading":"display","content":"Record Count: Displays the count of records for each category."},{"heading":"display","content":"Field Summary: Shows the sum, average, minimum, maximum, or count of a specific field across the selected records. Available options vary based on the field type."},{"heading":"appearance","content":"You can customize the appearance of the donut chart to enhance its visual appeal and clarity. The following options are available:"},{"heading":"appearance","content":"Size: Adjust the size of the donut chart to fit your dashboard layout. You can choose from small or medium sizes."},{"heading":"appearance","content":"Legend Orientation: Choose the orientation of the legend that displays the category names and their corresponding colors. Options include:"},{"heading":"appearance","content":"Right: Places the legend to the right of the donut chart."},{"heading":"appearance","content":"Bottom: Places the legend below the donut chart."},{"heading":"appearance","content":"Left: Places the legend to the left of the donut chart."},{"heading":"appearance","content":"Top: Places the legend above the donut chart."},{"heading":"appearance","content":"Show Percentage in chart: Enable this option to display the percentage contribution of each segment within the donut chart. This provides additional context for understanding the data distribution."},{"heading":"appearance","content":"Show Count in Legend: Enable this option to display the count of records for each category in the legend. This helps in understanding the number of records represented by each segment."}],"headings":[{"id":"title--description","content":"Title & Description"},{"id":"data-source","content":"Data Source"},{"id":"display","content":"Display"},{"id":"appearance","content":"Appearance"}]},"url":"/docs/product-docs/dashboards/widgets/donut-chart","title":"Donut Chart","description":"Configure donut chart widgets to visualize data distribution in your dashboard"},{"_id":"/docs/product-docs/dashboards/widgets/iframe","structured":{"contents":[{"content":"The iFrame widget in NocoDB allows you to embed external web pages, applications, or dashboards directly inside your NocoDB dashboard. This is useful for integrating third-party tools, live reports, charts, or any web resource you want to monitor alongside your database data."},{"heading":"configuration","content":"URL\nEnter the web page URL you want to embed."},{"heading":"configuration","content":"⚠️ Only a limited set of whitelisted domains are supported. If the URL does not belong to a whitelisted domain, it cannot be embedded."},{"heading":"configuration","content":"Parameters\nYou can pass query parameters to control the embedded page. For example:"},{"heading":"nocodb-iframe-whitelist","content":"The following domains are whitelisted for embedding in NocoDB iFrames."},{"heading":"nocodb-iframe-whitelist","content":"Analytics & Business Intelligence"},{"heading":"nocodb-iframe-whitelist","content":"Automation & Workflow"},{"heading":"nocodb-iframe-whitelist","content":"Calendar & Scheduling"},{"heading":"nocodb-iframe-whitelist","content":"datawrapper.de"},{"heading":"nocodb-iframe-whitelist","content":"make.com"},{"heading":"nocodb-iframe-whitelist","content":"cal.com"},{"heading":"nocodb-iframe-whitelist","content":"looker.com"},{"heading":"nocodb-iframe-whitelist","content":"n8n.io"},{"heading":"nocodb-iframe-whitelist","content":"calendly.com"},{"heading":"nocodb-iframe-whitelist","content":"metabase.com"},{"heading":"nocodb-iframe-whitelist","content":"zapier.com"},{"heading":"nocodb-iframe-whitelist","content":"tidycal.com"},{"heading":"nocodb-iframe-whitelist","content":"powerbi.microsoft.com"},{"heading":"nocodb-iframe-whitelist","content":"tableau.com"},{"heading":"nocodb-iframe-whitelist","content":"Cloud Storage & File Sharing"},{"heading":"nocodb-iframe-whitelist","content":"Communication & Collaboration"},{"heading":"nocodb-iframe-whitelist","content":"Database & Data Management"},{"heading":"nocodb-iframe-whitelist","content":"dropbox.com"},{"heading":"nocodb-iframe-whitelist","content":"loom.com"},{"heading":"nocodb-iframe-whitelist","content":"airtable.com"},{"heading":"nocodb-iframe-whitelist","content":"google.com"},{"heading":"nocodb-iframe-whitelist","content":"mural.co"},{"heading":"nocodb-iframe-whitelist","content":"getgrist.com"},{"heading":"nocodb-iframe-whitelist","content":"pitch.com"},{"heading":"nocodb-iframe-whitelist","content":"nocodb.com"},{"heading":"nocodb-iframe-whitelist","content":"sli.do"},{"heading":"nocodb-iframe-whitelist","content":"slido.com"},{"heading":"nocodb-iframe-whitelist","content":"Design & Prototyping"},{"heading":"nocodb-iframe-whitelist","content":"Developer Tools & Code"},{"heading":"nocodb-iframe-whitelist","content":"Diagramming & Mind Mapping"},{"heading":"nocodb-iframe-whitelist","content":"canva.com"},{"heading":"nocodb-iframe-whitelist","content":"codepen.io"},{"heading":"nocodb-iframe-whitelist","content":"dbdiagram.io"},{"heading":"nocodb-iframe-whitelist","content":"figma.com"},{"heading":"nocodb-iframe-whitelist","content":"codesandbox.io"},{"heading":"nocodb-iframe-whitelist","content":"diagrams.net"},{"heading":"nocodb-iframe-whitelist","content":"framer.com"},{"heading":"nocodb-iframe-whitelist","content":"gist.github.com"},{"heading":"nocodb-iframe-whitelist","content":"draw.io"},{"heading":"nocodb-iframe-whitelist","content":"invisionapp.com"},{"heading":"nocodb-iframe-whitelist","content":"github.com"},{"heading":"nocodb-iframe-whitelist","content":"gliffy.com"},{"heading":"nocodb-iframe-whitelist","content":"marvelapp.com"},{"heading":"nocodb-iframe-whitelist","content":"gitlab.com"},{"heading":"nocodb-iframe-whitelist","content":"lucid.co"},{"heading":"nocodb-iframe-whitelist","content":"penpot.app"},{"heading":"nocodb-iframe-whitelist","content":"jsfiddle.net"},{"heading":"nocodb-iframe-whitelist","content":"lucidchart.com"},{"heading":"nocodb-iframe-whitelist","content":"sketch.com"},{"heading":"nocodb-iframe-whitelist","content":"postman.com"},{"heading":"nocodb-iframe-whitelist","content":"mindmeister.com"},{"heading":"nocodb-iframe-whitelist","content":"zeplin.io"},{"heading":"nocodb-iframe-whitelist","content":"replit.com"},{"heading":"nocodb-iframe-whitelist","content":"miro.com"},{"heading":"nocodb-iframe-whitelist","content":"swagger.io"},{"heading":"nocodb-iframe-whitelist","content":"tldraw.com"},{"heading":"nocodb-iframe-whitelist","content":"val.town"},{"heading":"nocodb-iframe-whitelist","content":"whimsical.com"},{"heading":"nocodb-iframe-whitelist","content":"Documentation & Knowledge Management"},{"heading":"nocodb-iframe-whitelist","content":"Forms & Surveys"},{"heading":"nocodb-iframe-whitelist","content":"Media & Entertainment"},{"heading":"nocodb-iframe-whitelist","content":"atlassian.com"},{"heading":"nocodb-iframe-whitelist","content":"forms.gle"},{"heading":"nocodb-iframe-whitelist","content":"instagram.com"},{"heading":"nocodb-iframe-whitelist","content":"descript.com"},{"heading":"nocodb-iframe-whitelist","content":"jotform.com"},{"heading":"nocodb-iframe-whitelist","content":"pinterest.com"},{"heading":"nocodb-iframe-whitelist","content":"gitbook.com"},{"heading":"nocodb-iframe-whitelist","content":"surveymonkey.com"},{"heading":"nocodb-iframe-whitelist","content":"spotify.com"},{"heading":"nocodb-iframe-whitelist","content":"notion.so"},{"heading":"nocodb-iframe-whitelist","content":"tally.so"},{"heading":"nocodb-iframe-whitelist","content":"vimeo.com"},{"heading":"nocodb-iframe-whitelist","content":"obsidian.md"},{"heading":"nocodb-iframe-whitelist","content":"typeform.com"},{"heading":"nocodb-iframe-whitelist","content":"youtu.be"},{"heading":"nocodb-iframe-whitelist","content":"scribehow.com"},{"heading":"nocodb-iframe-whitelist","content":"youtube.com"},{"heading":"nocodb-iframe-whitelist","content":"slab.com"},{"heading":"nocodb-iframe-whitelist","content":"Project Management"},{"heading":"nocodb-iframe-whitelist","content":"asana.com"},{"heading":"nocodb-iframe-whitelist","content":"basecamp.com"},{"heading":"nocodb-iframe-whitelist","content":"clickup.com"},{"heading":"nocodb-iframe-whitelist","content":"coda.io"},{"heading":"nocodb-iframe-whitelist","content":"linear.app"},{"heading":"nocodb-iframe-whitelist","content":"monday.com"},{"heading":"nocodb-iframe-whitelist","content":"trello.com"},{"heading":"nocodb-iframe-whitelist","content":"Note: All domains include both the root domain and wildcard subdomains (e.g., example.com and *.example.com) in the whitelist configuration."},{"heading":"use-cases","content":"Embedding analytics dashboards (e.g., Metabase, Grafana, Superset)."},{"heading":"use-cases","content":"Displaying Google Docs, Sheets, or Slides within NocoDB."},{"heading":"use-cases","content":"Showing interactive charts or visualizations from allowed external apps."},{"heading":"use-cases","content":"Integrating custom internal tools from whitelisted domains."}],"headings":[{"id":"configuration","content":"Configuration"},{"id":"nocodb-iframe-whitelist","content":"NocoDB iFrame Whitelist"},{"id":"use-cases","content":"Use Cases"}]},"url":"/docs/product-docs/dashboards/widgets/iframe","title":"iFrame","description":"Embed external content securely inside your dashboard using the iFrame widget"},{"_id":"/docs/product-docs/dashboards/widgets","structured":{"contents":[{"content":"The dashboard editor provides a flexible canvas where you can arrange widgets. You can drag and drop widgets to position them as needed."},{"content":"NocoDB dashboards support the following widget types:"},{"content":"Widget Type"},{"content":"Description"},{"content":"Number"},{"content":"Displays KPIs and metric summaries"},{"content":"Bar Chart"},{"content":"Compares values across categories"},{"content":"Line Chart"},{"content":"Shows trends over time"},{"content":"Pie Chart"},{"content":"Visualizes parts of a whole"},{"content":"Donut Chart"},{"content":"Pie chart variant with a hollow center"},{"content":"Text"},{"content":"Displays static information"},{"content":"iFrame"},{"content":"Embeds external web content"},{"heading":"adding-widgets","content":"Click on Edit Dashboard to enter the dashboard editor. Then, use the widget toolbar at the top to add widgets. You can either click on the widget type in the toolbar or drag and drop it onto the dashboard canvas."},{"heading":"configuring-widgets","content":"Once a widget is added, you can configure its properties using the right panel. Each widget type has specific configuration options, such as:"},{"heading":"configuring-widgets","content":"Data Source: Select the table and records to visualize."},{"heading":"configuring-widgets","content":"Display Options: Customize labels, colors, and formatting."},{"heading":"configuring-widgets","content":"Refer to widget specific notes to learn more about available options for widget configuration."},{"heading":"arranging-widgets","content":"You can drag and drop widgets to rearrange them on the dashboard canvas. NocoDB supports a flexible grid layout, allowing you to position widgets as needed."},{"heading":"resizing-widgets","content":"To resize a widget, hover over its right-corner until the resize cursor appears. Click and drag to adjust the widget size. Widget specific restrictions apply. Some widgets can be only resized horizontally."},{"heading":"deleting-widgets","content":"To remove a widget, click on 3-dot menu in the widget header and select Delete widget."},{"heading":"duplicating-widgets","content":"To create a copy of a widget, click on the 3-dot menu in the widget header and select Duplicate widget. This is useful for creating similar widgets with minor variations."}],"headings":[{"id":"adding-widgets","content":"Adding Widgets"},{"id":"configuring-widgets","content":"Configuring Widgets"},{"id":"arranging-widgets","content":"Arranging Widgets"},{"id":"resizing-widgets","content":"Resizing Widgets"},{"id":"deleting-widgets","content":"Deleting Widgets"},{"id":"duplicating-widgets","content":"Duplicating Widgets"}]},"url":"/docs/product-docs/dashboards/widgets","title":"Widgets","description":"Add and configure widgets to visualize data in your dashboard"},{"_id":"/docs/product-docs/dashboards/widgets/line-chart","structured":{"contents":[{"content":"The Line Chart widget in NocoDB dashboards allows you to visualize trends and comparisons across categories or time. It is especially useful for tracking changes, identifying patterns, and comparing multiple metrics simultaneously."},{"heading":"title--description","content":"Title: Enter a title for the line chart widget. This will be displayed prominently at the top of the widget."},{"heading":"title--description","content":"Description: Optionally, add a description to provide context or details about the data being visualized. This will appear below the title."},{"heading":"data-source","content":"Table: Select the table from which you want to pull data for the line chart."},{"heading":"data-source","content":"Records: Choose which records to include:"},{"heading":"data-source","content":"All Records: Displays all records from the selected table."},{"heading":"data-source","content":"Records from a view: Uses records from a specific view, allowing you to apply filters and sorts."},{"heading":"data-source","content":"Specific Records: Apply custom filters to select only certain records."},{"heading":"x-axis","content":"Field: Select the field whose values will be shown along the X-axis (e.g., Date, Product, Category)."},{"heading":"x-axis","content":"Sort By: Choose how categories are sorted:"},{"heading":"x-axis","content":"xAxis Value: Sorts based on the label values."},{"heading":"x-axis","content":"yAxis Value: Sorts based on the numeric values plotted."},{"heading":"x-axis","content":"Order: Select Default, Ascending, or Descending."},{"heading":"x-axis","content":"Include empty records: Optionally include categories that have no values."},{"heading":"x-axis","content":"Include others: Toggle to group smaller categories into an “Others” bucket."},{"heading":"y-axis","content":"Fields: Choose the field(s) to plot on the Y-axis. You can add multiple fields to display multiple lines in the chart."},{"heading":"y-axis","content":"Record Count: Shows the number of records for each category."},{"heading":"y-axis","content":"Field Summary: Displays the Sum, Average, Min, or Max of a numeric field."},{"heading":"y-axis","content":"Start at zero: Ensures the Y-axis always begins at zero for consistency."},{"heading":"appearance","content":"Customize how the chart is displayed for clarity and readability:"},{"heading":"appearance","content":"Size: Adjust the chart size (Small, Medium)."},{"heading":"appearance","content":"Legend Orientation: Choose where to display the legend (Top, Bottom, Left, Right)."},{"heading":"appearance","content":"Show count in legend: Enable to display record counts in the legend."},{"heading":"appearance","content":"Plot data points: Enable to highlight data points on the line."},{"heading":"appearance","content":"Smooth lines: Enable to display smoothed curves instead of jagged lines."}],"headings":[{"id":"title--description","content":"Title & Description"},{"id":"data-source","content":"Data Source"},{"id":"display","content":"Display"},{"id":"x-axis","content":"X-axis"},{"id":"y-axis","content":"Y-axis"},{"id":"appearance","content":"Appearance"}]},"url":"/docs/product-docs/dashboards/widgets/line-chart","title":"Line Chart","description":"Configure line chart widgets to visualize trends and comparisons over time or categories in your dashboard"},{"_id":"/docs/product-docs/dashboards/widgets/number","structured":{"contents":[{"content":"The section here details various configuration options available for the Number widget in NocoDB dashboards. This widget is designed to display key performance indicators (KPIs) and metric summaries in a clear, concise format."},{"heading":"title--description","content":"Title: Enter a title for the number widget. This will be displayed prominently at the top of the widget."},{"heading":"title--description","content":"Description: Optionally, add a description to provide context or details about the metric being displayed. This will appear below the title."},{"heading":"data-source","content":"Table: Select the table from which you want to pull data for the number widget. This is the primary source of records for the metric."},{"heading":"data-source","content":"Record: Select records from the chosen table to be included in the metric calculation. You can choose from:"},{"heading":"data-source","content":"All Records: Displays the total count of records in the selected table."},{"heading":"data-source","content":"Records from a view: Allows you to filter records based on a specific view, enabling focused metrics. You need to select a view from the dropdown."},{"heading":"data-source","content":"Specific Records: Apply filters to select specific records for the metric. This is useful for showing metrics based on certain criteria. You can add multiple filters to refine the selection."},{"heading":"display","content":"Record Count: Displays the total number of records in the selected source."},{"heading":"display","content":"Field Summary: Shows the sum, average, minimum, maximum, or count of a specific field across the selected records. Available options vary based on the field type."},{"heading":"appearance","content":"Number Format: Choose how the number is displayed, such as:"},{"heading":"appearance","content":"Default: Standard numeric format."},{"heading":"appearance","content":"Filled: Displays the number with a filled background."},{"heading":"appearance","content":"Coloured Text: Uses color to highlight the number, making it stand out."}],"headings":[{"id":"title--description","content":"Title & description"},{"id":"data-source","content":"Data source"},{"id":"display","content":"Display"},{"id":"appearance","content":"Appearance"}]},"url":"/docs/product-docs/dashboards/widgets/number","title":"Number","description":"Configure number widgets to display key metrics in your dashboard"},{"_id":"/docs/product-docs/dashboards/widgets/pie-chart","structured":{"contents":[{"content":"The Pie Chart widget in NocoDB dashboards allows you to visualize data distribution across categories. It is particularly useful for showing how different segments contribute to a whole."},{"heading":"title--description","content":"Title: Enter a title for the pie chart widget. This will be displayed prominently at the top of the widget."},{"heading":"title--description","content":"Description: Optionally, add a description to provide context or details about the data being visualized. This will appear below the title."},{"heading":"data-source","content":"Table: Select the table from which you want to pull data for the pie chart. This is the primary source of records for the visualization."},{"heading":"data-source","content":"Record: Select records from the chosen table to be included in the pie chart. You can choose from:"},{"heading":"data-source","content":"All Records: Displays all records in the selected table."},{"heading":"data-source","content":"Records from a view: Allows you to filter records based on a specific view, enabling focused visualizations. You need to select a view from the dropdown."},{"heading":"data-source","content":"Specific Records: Apply filters to select specific records for the pie chart. This is useful for showing data based on certain criteria. You can add multiple filters to refine the selection."},{"heading":"display","content":"Category Field: Select the field that will be used to determine the segments of the pie chart. This field should contain categorical data that you want to visualize."},{"heading":"display","content":"Order: Choose how the segments are ordered in the pie chart. You can order them by:"},{"heading":"display","content":"Default: Segments are displayed in the order they appear in the data."},{"heading":"display","content":"Ascending: Segments are sorted in ascending order based on their values."},{"heading":"display","content":"Descending: Segments are sorted in descending order based on their values."},{"heading":"display","content":"Include empty records: Optionally, you can choose to include records that do not have a value for the selected category field. This can help in visualizing segments that may otherwise be omitted due to missing data."},{"heading":"display","content":"Value Field: Choose the field that will determine the size of each segment in the pie chart. This field should contain numerical data that represents the value for each category."},{"heading":"display","content":"Record Count: Displays the count of records for each category."},{"heading":"display","content":"Field Summary: Shows the sum, average, minimum, maximum, or count of a specific field across the selected records. Available options vary based on the field type."},{"heading":"appearance","content":"You can customize the appearance of the pie chart to enhance its visual appeal and clarity. The following options are available:"},{"heading":"appearance","content":"Size: Adjust the size of the pie chart to fit your dashboard layout. You can choose from small or medium sizes."},{"heading":"appearance","content":"Legend Orientation: Choose the orientation of the legend that displays the category names and their corresponding colors. Options include:"},{"heading":"appearance","content":"Right: Places the legend to the right of the pie chart."},{"heading":"appearance","content":"Bottom: Places the legend below the pie chart."},{"heading":"appearance","content":"Left: Places the legend to the left of the pie chart."},{"heading":"appearance","content":"Top: Places the legend above the pie chart."},{"heading":"appearance","content":"Show Percentage in chart: Enable this option to display the percentage contribution of each segment within the pie chart. This provides additional context for understanding the data distribution."},{"heading":"appearance","content":"Show Count in Legend: Enable this option to display the count of records for each category in the legend. This helps in understanding the number of records represented by each segment."}],"headings":[{"id":"title--description","content":"Title & Description"},{"id":"data-source","content":"Data Source"},{"id":"display","content":"Display"},{"id":"appearance","content":"Appearance"}]},"url":"/docs/product-docs/dashboards/widgets/pie-chart","title":"Pie Chart","description":"Configure pie chart widgets to visualize data distribution in your dashboard"},{"_id":"/docs/product-docs/dashboards/widgets/text","structured":{"contents":[{"content":"The section here details various configuration options available for the Text widget in NocoDB dashboards. This widget is designed to display descriptive content, instructions, notes, or disclaimers, helping you add context or guidance alongside your data visualizations."},{"heading":"content","content":"Type the text you want to display. This can be:"},{"heading":"content","content":"Instructions for dashboard users"},{"heading":"content","content":"Explanatory notes for data insights"},{"heading":"content","content":"Compliance or legal disclaimers"},{"heading":"content","content":"Motivational or status updates for teams"},{"heading":"content","content":"You can choose between two content modes:"},{"heading":"content","content":"Markdown: Write using markdown syntax for headings, lists, links, images, blockquotes, code, and tables. Find more details about supported markdown syntax in the Markdown Guide."},{"heading":"content","content":"Text: Use the inline editor for direct styling."},{"heading":"formatting","content":"Use the inline editor to style your text:"},{"heading":"formatting","content":"Bold, Italic, and underline for emphasis."},{"heading":"formatting","content":"Horizontal alignment (left, center, right)."},{"heading":"formatting","content":"Vertical alignment (top, middle, bottom)."},{"heading":"appearance","content":"Customize how the text is presented in the widget:"},{"heading":"appearance","content":"type: info"},{"heading":"appearance","content":"Appearance options are available only when the content mode is set to Text."},{"heading":"appearance","content":"Font: Choose from available font families."},{"heading":"appearance","content":"Weight: Set text thickness (e.g., Light, Medium, Bold)."},{"heading":"appearance","content":"Size: Adjust the font size to suit your layout."},{"heading":"appearance","content":"Line Height: Control spacing between lines for better readability."},{"heading":"appearance","content":"Text Color: Select any color to highlight your content."}],"headings":[{"id":"content","content":"Content"},{"id":"formatting","content":"Formatting"},{"id":"appearance","content":"Appearance"}]},"url":"/docs/product-docs/dashboards/widgets/text","title":"Text","description":"Configure text widgets to add static textual content to your dashboard"},{"_id":"/docs/product-docs/developer-resources/rest-apis/accessing-apis","structured":{"contents":[{"heading":"api-tokens","content":"NocoDB APIs can be authorized by using API Tokens. API tokens allow us to integrate seamlessly with 3rd party apps. See API Tokens Management for more."},{"heading":"swagger-ui","content":"You can interact with the API's resources via the Swagger UI. For more details, see Swagger APIs Doc"}],"headings":[{"id":"api-tokens","content":"API Tokens"},{"id":"swagger-ui","content":"Swagger UI"}]},"url":"/docs/product-docs/developer-resources/rest-apis/accessing-apis","title":"Accessing APIs","description":"How to access NocoDB APIs with Auth or API token?"},{"_id":"/docs/product-docs/developer-resources/rest-apis","structured":{"contents":[{"content":"NocoDB provides a comprehensive set of REST APIs that allow you to interact programmatically with your data, metadata, and workspace resources. These APIs make it possible to integrate NocoDB with external applications, automate workflows, build custom tools, or manage your bases at scale."},{"content":"Whether you want to query records, update fields, manage tables, or retrieve metadata, NocoDB exposes clear and consistent API surfaces designed for both simple and advanced use cases. This document outlines the available API types, explains how to construct endpoints, and guides you through locating the required IDs for making requests."},{"content":"Use this reference as your starting point for building reliable, API-driven integrations with NocoDB."},{"content":"Data APIs"},{"content":"Meta APIs"},{"content":"type: info"},{"content":"When querying using v3 apis, see v3 Where Clause for a slight difference between the two version's where clause."},{"heading":"finding-your-api-ids","content":"Before making API calls, you'll need to identify and copy the relevant IDs required for constructing your endpoints. This section walks you through locating each essential identifier."},{"heading":"workspace-id","content":"Workspace ID is an alphanumeric identifier prefixed with w (representing workspace) that uniquely identifies your workspace in NocoDB. It appears in the URL bar when viewing any base within the workspace."},{"heading":"workspace-id","content":"You can also find it in the workspace context menu (accessible by clicking the workspace icon in the minibar). Click the ID to copy it to your clipboard."},{"heading":"workspace-id","content":"Workspace ID can also be retrieved from Workspace settings page."},{"heading":"base-id","content":"Base ID is required for metadata APIs and administrative operations. It uniquely identifies a specific database (or base) within your workspace."},{"heading":"base-id","content":"The Base ID is an alphanumeric identifier prefixed with p (representing project), visible in the URL when accessing any table or base-level settings. You can also find it in the base context menu (chevron next to the base name) in the left sidebar, where you can click the ID to copy it to your clipboard."},{"heading":"table-id","content":"Table ID is the most commonly used identifier and is required for all data API calls. It uniquely identifies a specific table within your base."},{"heading":"table-id","content":"The Table ID is an alphanumeric string prefixed with m (representing model), visible in the URL immediately after the Base ID when viewing a table. You can also find it in the table context menu (three dots next to the table name) in the left sidebar. Click the ID to copy it to your clipboard."},{"heading":"view-id","content":"View ID is used for view-specific API operations, such as fetching records from a particular view. It uniquely identifies a specific view within a table."},{"heading":"view-id","content":"The View ID is an alphanumeric string prefixed with v (representing view), visible in the URL when a specific view is open. You can also find it in the view context menu (three dots next to the view name) in the left sidebar. Click the ID to copy it to your clipboard."},{"heading":"view-id","content":"View ID can also be retrieved from view toolbar > more actions (3 dots) menu"},{"heading":"field-id","content":"Field ID is used for field-specific API operations, such as updating field properties. It uniquely identifies a specific column within a table."},{"heading":"field-id","content":"The Field ID is an alphanumeric string prefixed with c (representing column), visible in the URL when viewing or editing a field’s settings. You can also find it in the field context menu (chevron next to the field name) in the field header bar. Click the ID to copy it to your clipboard."},{"heading":"field-id","content":"Field ID can also be retrieved from Details > Fields editor"},{"heading":"record-id","content":"Record ID is used for record-specific API operations, such as retrieving or updating an individual record. It uniquely identifies a specific row within a table."},{"heading":"record-id","content":"By default, the Record ID is a numeric value starting from 1. You can display the ID field (which corresponds to the Record ID) by opening the Fields menu in the toolbar and enabling Show System Fields."},{"heading":"record-id","content":"You can also find it in the URL when viewing a specific record (expanded record view)."},{"heading":"record-id","content":"You can also access the Record ID in formulas by selecting ID from the list of available fields in the formula editor or by using the RECORD_ID() function."},{"heading":"user-id","content":"User ID is used for user-specific API operations, such as retrieving user details. It uniquely identifies a specific user within your workspace or organization."},{"heading":"user-id","content":"The User ID is an alphanumeric string prefixed with u (representing user). You can find it on either the Workspace Members page or the Base Members page by clicking the three dots menu next to a user’s name. Click the ID to copy it to your clipboard."},{"heading":"data-source-id","content":"For external data sources connected to NocoDB (such as Postgres or MySQL), the Data Source ID is additionally required to perform data API operations."},{"heading":"data-source-id","content":"The Data Source ID is an alphanumeric string that uniquely identifies the connected data source. You can find it in the context menu by clicking the three dots next to the data source name in the left sidebar. Click the ID to copy it to your clipboard."},{"heading":"data-source-id","content":"You can also find it in the Data Source settings page."},{"heading":"rate-limits","content":"NocoDB APIs are rate-limited to ensure fair usage and optimal performance for all users. The default rate limit is set to 5 requests per second per user. These limits are the same across all plans."},{"heading":"rate-limits","content":"If these limits are exceeded, the API will return a 429 status code (Too Many Requests). You’ll need to wait 30 seconds before sending additional requests."},{"heading":"rate-limits","content":"NocoDB may adjust these limits or introduce additional rate tiers based on pricing plans to maintain optimal service performance."},{"heading":"query-params","content":"Name"},{"heading":"query-params","content":"Alias"},{"heading":"query-params","content":"Use case"},{"heading":"query-params","content":"Default value"},{"heading":"query-params","content":"Example value"},{"heading":"query-params","content":"where"},{"heading":"query-params","content":"w"},{"heading":"query-params","content":"Complicated where conditions"},{"heading":"query-params","content":"(colName,eq,colValue)~or(colName2,gt,colValue2) Usage: Comparison operators Usage: Logical operators"},{"heading":"query-params","content":"limit"},{"heading":"query-params","content":"l"},{"heading":"query-params","content":"Number of rows to get (SQL limit value)"},{"heading":"query-params","content":"10"},{"heading":"query-params","content":"20"},{"heading":"query-params","content":"offset"},{"heading":"query-params","content":"o"},{"heading":"query-params","content":"Offset for pagination (SQL offset value)"},{"heading":"query-params","content":"0"},{"heading":"query-params","content":"20"},{"heading":"query-params","content":"sort"},{"heading":"query-params","content":"s"},{"heading":"query-params","content":"Sort by column name, Use - as a prefix for descending sort"},{"heading":"query-params","content":"column_name"},{"heading":"query-params","content":"fields"},{"heading":"query-params","content":"f"},{"heading":"query-params","content":"Required column names in result"},{"heading":"query-params","content":"*"},{"heading":"query-params","content":"column_name1,column_name2"},{"heading":"query-params","content":"shuffle"},{"heading":"query-params","content":"r"},{"heading":"query-params","content":"Shuffle the result for pagination"},{"heading":"query-params","content":"0"},{"heading":"query-params","content":"1 (Only allow 0 or 1. Other values would see it as 0)"},{"heading":"comparison-operators","content":"Operation"},{"heading":"comparison-operators","content":"Meaning"},{"heading":"comparison-operators","content":"Example"},{"heading":"comparison-operators","content":"eq"},{"heading":"comparison-operators","content":"equal"},{"heading":"comparison-operators","content":"(colName,eq,colValue)"},{"heading":"comparison-operators","content":"neq"},{"heading":"comparison-operators","content":"not equal"},{"heading":"comparison-operators","content":"(colName,neq,colValue)"},{"heading":"comparison-operators","content":"not"},{"heading":"comparison-operators","content":"not equal (alias of neq)"},{"heading":"comparison-operators","content":"(colName,not,colValue)"},{"heading":"comparison-operators","content":"gt"},{"heading":"comparison-operators","content":"greater than"},{"heading":"comparison-operators","content":"(colName,gt,colValue)"},{"heading":"comparison-operators","content":"ge"},{"heading":"comparison-operators","content":"greater or equal"},{"heading":"comparison-operators","content":"(colName,ge,colValue)"},{"heading":"comparison-operators","content":"lt"},{"heading":"comparison-operators","content":"less than"},{"heading":"comparison-operators","content":"(colName,lt,colValue)"},{"heading":"comparison-operators","content":"le"},{"heading":"comparison-operators","content":"less or equal"},{"heading":"comparison-operators","content":"(colName,le,colValue)"},{"heading":"comparison-operators","content":"is"},{"heading":"comparison-operators","content":"is"},{"heading":"comparison-operators","content":"(colName,is,true/false/null)"},{"heading":"comparison-operators","content":"isnot"},{"heading":"comparison-operators","content":"is not"},{"heading":"comparison-operators","content":"(colName,isnot,true/false/null)"},{"heading":"comparison-operators","content":"in"},{"heading":"comparison-operators","content":"in"},{"heading":"comparison-operators","content":"(colName,in,val1,val2,val3,val4)"},{"heading":"comparison-operators","content":"btw"},{"heading":"comparison-operators","content":"between"},{"heading":"comparison-operators","content":"(colName,btw,val1,val2)"},{"heading":"comparison-operators","content":"nbtw"},{"heading":"comparison-operators","content":"not between"},{"heading":"comparison-operators","content":"(colName,nbtw,val1,val2)"},{"heading":"comparison-operators","content":"like"},{"heading":"comparison-operators","content":"like"},{"heading":"comparison-operators","content":"(colName,like,%name)"},{"heading":"comparison-operators","content":"nlike"},{"heading":"comparison-operators","content":"not like"},{"heading":"comparison-operators","content":"(colName,nlike,%name)"},{"heading":"comparison-operators","content":"isWithin"},{"heading":"comparison-operators","content":"is Within (Available in Date and DateTime only)"},{"heading":"comparison-operators","content":"(colName,isWithin,sub_op)"},{"heading":"comparison-operators","content":"allof"},{"heading":"comparison-operators","content":"includes all of"},{"heading":"comparison-operators","content":"(colName,allof,val1,val2,...)"},{"heading":"comparison-operators","content":"anyof"},{"heading":"comparison-operators","content":"includes any of"},{"heading":"comparison-operators","content":"(colName,anyof,val1,val2,...)"},{"heading":"comparison-operators","content":"nallof"},{"heading":"comparison-operators","content":"does not include all of (includes none or some, but not all of)"},{"heading":"comparison-operators","content":"(colName,nallof,val1,val2,...)"},{"heading":"comparison-operators","content":"nanyof"},{"heading":"comparison-operators","content":"does not include any of (includes none of)"},{"heading":"comparison-operators","content":"(colName,nanyof,val1,val2,...)"},{"heading":"comparison-sub-operators","content":"The following sub-operators are available in the Date and DateTime columns."},{"heading":"comparison-sub-operators","content":"Operation"},{"heading":"comparison-sub-operators","content":"Meaning"},{"heading":"comparison-sub-operators","content":"Example"},{"heading":"comparison-sub-operators","content":"today"},{"heading":"comparison-sub-operators","content":"today"},{"heading":"comparison-sub-operators","content":"(colName,eq,today)"},{"heading":"comparison-sub-operators","content":"tomorrow"},{"heading":"comparison-sub-operators","content":"tomorrow"},{"heading":"comparison-sub-operators","content":"(colName,eq,tomorrow)"},{"heading":"comparison-sub-operators","content":"yesterday"},{"heading":"comparison-sub-operators","content":"yesterday"},{"heading":"comparison-sub-operators","content":"(colName,eq,yesterday)"},{"heading":"comparison-sub-operators","content":"oneWeekAgo"},{"heading":"comparison-sub-operators","content":"one week ago"},{"heading":"comparison-sub-operators","content":"(colName,eq,oneWeekAgo)"},{"heading":"comparison-sub-operators","content":"oneWeekFromNow"},{"heading":"comparison-sub-operators","content":"one week from now"},{"heading":"comparison-sub-operators","content":"(colName,eq,oneWeekFromNow)"},{"heading":"comparison-sub-operators","content":"oneMonthAgo"},{"heading":"comparison-sub-operators","content":"one month ago"},{"heading":"comparison-sub-operators","content":"(colName,eq,oneMonthAgo)"},{"heading":"comparison-sub-operators","content":"oneMonthFromNow"},{"heading":"comparison-sub-operators","content":"one month from now"},{"heading":"comparison-sub-operators","content":"(colName,eq,oneMonthFromNow)"},{"heading":"comparison-sub-operators","content":"daysAgo"},{"heading":"comparison-sub-operators","content":"number of days ago"},{"heading":"comparison-sub-operators","content":"(colName,eq,daysAgo,10)"},{"heading":"comparison-sub-operators","content":"daysFromNow"},{"heading":"comparison-sub-operators","content":"number of days from now"},{"heading":"comparison-sub-operators","content":"(colName,eq,daysFromNow,10)"},{"heading":"comparison-sub-operators","content":"exactDate"},{"heading":"comparison-sub-operators","content":"exact date"},{"heading":"comparison-sub-operators","content":"(colName,eq,exactDate,2022-02-02)"},{"heading":"comparison-sub-operators","content":"For isWithin in Date and DateTime columns, the different set of sub-operators are used."},{"heading":"comparison-sub-operators","content":"Operation"},{"heading":"comparison-sub-operators","content":"Meaning"},{"heading":"comparison-sub-operators","content":"Example"},{"heading":"comparison-sub-operators","content":"pastWeek"},{"heading":"comparison-sub-operators","content":"the past week"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,pastWeek)"},{"heading":"comparison-sub-operators","content":"pastMonth"},{"heading":"comparison-sub-operators","content":"the past month"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,pastMonth)"},{"heading":"comparison-sub-operators","content":"pastYear"},{"heading":"comparison-sub-operators","content":"the past year"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,pastYear)"},{"heading":"comparison-sub-operators","content":"nextWeek"},{"heading":"comparison-sub-operators","content":"the next week"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,nextWeek)"},{"heading":"comparison-sub-operators","content":"nextMonth"},{"heading":"comparison-sub-operators","content":"the next month"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,nextMonth)"},{"heading":"comparison-sub-operators","content":"nextYear"},{"heading":"comparison-sub-operators","content":"the next year"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,nextYear)"},{"heading":"comparison-sub-operators","content":"nextNumberOfDays"},{"heading":"comparison-sub-operators","content":"the next number of days"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,nextNumberOfDays,10)"},{"heading":"comparison-sub-operators","content":"pastNumberOfDays"},{"heading":"comparison-sub-operators","content":"the past number of days"},{"heading":"comparison-sub-operators","content":"(colName,isWithin,pastNumberOfDays,10)"},{"heading":"logical-operators","content":"Operation"},{"heading":"logical-operators","content":"Example"},{"heading":"logical-operators","content":"~or"},{"heading":"logical-operators","content":"(checkNumber,eq,JM555205)~or((amount,gt,200)~and(amount,lt,2000))"},{"heading":"logical-operators","content":"~and"},{"heading":"logical-operators","content":"(checkNumber,eq,JM555205)~and((amount,gt,200)~and(amount,lt,2000))"},{"heading":"logical-operators","content":"~not"},{"heading":"logical-operators","content":"~not(checkNumber,eq,JM555205)"},{"heading":"v3-where-query-parameter","content":"When calling v3 data api, the where clause has a slight difference with the previous versions. It allows values to be wrapped with quotes (double quotes, single quotes, or backticks) to safely use special characters that might otherwise break older version where clauses. This is particularly useful for strings containing commas, parentheses, or other delimiters."},{"heading":"v3-where-query-parameter","content":"Example: Searching for a phrase with special characters:\n(\"My Field\", like, \"Let's come home, and go straight to bed\")"},{"heading":"v3-where-query-parameter","content":"Another Example: Searching for a value that includes a comma:\n(\"Product Name\", eq, \"Laptop, 15-inch\")"},{"heading":"v3-where-query-parameter","content":"Example: Using single quotes for a value:\n(City, eq, 'New York')"},{"heading":"usage-on-v2-api","content":"The v3 where clause can also be utilized when using the v2 API by prepending the where clause with an @ sign. This allows you to leverage the advanced capabilities of the v3 where clause even in v2 API calls."},{"heading":"usage-on-v2-api","content":"Example: Using a v3 where clause to check for non-blank titles in a v2 API call:\n@(\"Title\", not, blank)"},{"heading":"usage-on-v2-api","content":"Another Example: Combining multiple conditions with special characters in a v2 API call:\n@(\"Description\", like, \"High-performance, water-resistant\")"}],"headings":[{"id":"finding-your-api-ids","content":"Finding Your API IDs"},{"id":"workspace-id","content":"Workspace ID"},{"id":"base-id","content":"Base ID"},{"id":"table-id","content":"Table ID"},{"id":"view-id","content":"View ID"},{"id":"field-id","content":"Field ID"},{"id":"record-id","content":"Record ID"},{"id":"user-id","content":"User ID"},{"id":"data-source-id","content":"Data Source ID"},{"id":"rate-limits","content":"Rate Limits"},{"id":"query-params","content":"Query params"},{"id":"comparison-operators","content":"Comparison Operators"},{"id":"comparison-sub-operators","content":"Comparison Sub-Operators"},{"id":"logical-operators","content":"Logical Operators"},{"id":"v3-where-query-parameter","content":"v3 Where Query Parameter"},{"id":"usage-on-v2-api","content":"Usage on v2 API"}]},"url":"/docs/product-docs/developer-resources/rest-apis","title":"REST APIs","description":"NocoDB REST API Overview"},{"_id":"/docs/product-docs/developer-resources/rest-apis/upload-via-api","structured":{"contents":[{"content":"Sample code to upload files via API is listed below.\nAssumes http://localhost:8080/ as the base URL for the API calls."},{"heading":"bash","content":"📝 Instructions"},{"heading":"bash","content":"Save the file as upload-and-insert.sh"},{"heading":"bash","content":"Make it executable:"},{"heading":"bash","content":"Update the following variables:"},{"heading":"bash","content":"API_TOKEN"},{"heading":"bash","content":"TABLE_ID"},{"heading":"bash","content":"FILE_PATH"},{"heading":"bash","content":"Field names (file, Title, etc.)"},{"heading":"bash","content":"Run the script:"},{"heading":"typescript","content":"📝 Instructions"},{"heading":"typescript","content":"Install required packages:"},{"heading":"typescript","content":"If using Node.js with TypeScript, also install:"},{"heading":"typescript","content":"Make sure your TypeScript tsconfig.json includes \"esModuleInterop\": true to support default imports from CommonJS libraries like axios, form-data, and fs."},{"heading":"python","content":"📝 Instructions"},{"heading":"python","content":"Make sure you have requests installed:"},{"heading":"ruby","content":"📝 Instructions"},{"heading":"ruby","content":"You’ll need the multipart-post and mime-types gems:"},{"heading":"ruby","content":"Add at the top if needed:"}],"headings":[{"id":"upload-local-file-single","content":"Upload local file (single)"},{"id":"javascript","content":"Javascript"},{"id":"bash","content":"Bash"},{"id":"typescript","content":"Typescript"},{"id":"python","content":"Python"},{"id":"ruby","content":"Ruby"},{"id":"java","content":"JAVA"},{"id":"upload-local-files-batch","content":"Upload local files (batch)"},{"id":"javascript-1","content":"Javascript"}]},"url":"/docs/product-docs/developer-resources/rest-apis/upload-via-api","title":"Upload via API","description":"Upload files locally present or from public remote URL via API"},{"_id":"/docs/product-docs/noco-sync/on-premise-oauth/bitbucket","structured":{"contents":[{"content":"type: info"},{"content":"This document provides instructions for setting up the Bitbucket authentication integration for NocoDB."},{"heading":"environment-variables","content":"To enable OAuth2 authentication with Bitbucket, you need to configure the following environment variables."},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Log in to your Bitbucket account"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Navigate to Bitbucket Administration Workspace settings → OAuth consumers"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"(Bitbucket → left sidebar → click your workspace → Workspace settings → OAuth consumers)"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Click on “Add consumer”"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Fill out the form:"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Name: Your application name (e.g., \"NocoDB\")"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Description: Brief description of your application"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Callback URL:\nhttps://your-nocodb-instance.com/"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Permissions: Enable:"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Repositories: Read & Write"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Pull requests: Read & Write"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Issues: Read & Write"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Account: Read"},{"heading":"step-1-create-a-bitbucket-oauth-consumer","content":"Click Save"},{"heading":"step-2-get-client-id-and-client-secret","content":"After creating your OAuth consumer:"},{"heading":"step-2-get-client-id-and-client-secret","content":"Bitbucket will display:"},{"heading":"step-2-get-client-id-and-client-secret","content":"Key → Client ID"},{"heading":"step-2-get-client-id-and-client-secret","content":"Secret → Client Secret"},{"heading":"step-2-get-client-id-and-client-secret","content":"Copy both values (the Secret is shown only once)"},{"heading":"step-2-get-client-id-and-client-secret","content":"Store them safely for configuration"},{"heading":"step-3-set-environment-variables","content":"Configure your NocoDB instance with:"},{"heading":"step-3-set-environment-variables","content":"Where:"},{"heading":"step-3-set-environment-variables","content":"your_bitbucket_client_id → The Key (Client ID) from Bitbucket"},{"heading":"step-3-set-environment-variables","content":"your_bitbucket_client_secret → The Secret (Client Secret)"},{"heading":"step-3-set-environment-variables","content":"your_redirect_uri → The callback URL used in the OAuth consumer\n(e.g., https://your-nocodb-instance.com/)"},{"heading":"oauth-scopes-requested","content":"The integration will request these Bitbucket scopes:"},{"heading":"oauth-scopes-requested","content":"repository"},{"heading":"oauth-scopes-requested","content":"repository:write"},{"heading":"oauth-scopes-requested","content":"pullrequest"},{"heading":"oauth-scopes-requested","content":"pullrequest:write"},{"heading":"oauth-scopes-requested","content":"issue"},{"heading":"oauth-scopes-requested","content":"issue:write"},{"heading":"oauth-scopes-requested","content":"account"},{"heading":"oauth-scopes-requested","content":"These permissions allow NocoDB to read/write repositories, issues, and pull requests as needed."}],"headings":[{"id":"environment-variables","content":"Environment Variables"},{"id":"step-1-create-a-bitbucket-oauth-consumer","content":"Step 1: Create a Bitbucket OAuth Consumer"},{"id":"step-2-get-client-id-and-client-secret","content":"Step 2: Get Client ID and Client Secret"},{"id":"step-3-set-environment-variables","content":"Step 3: Set Environment Variables"},{"id":"oauth-scopes-requested","content":"OAuth Scopes Requested"}]},"url":"/docs/product-docs/noco-sync/on-premise-oauth/bitbucket","title":"Bitbucket","description":"Instructions for setting up Bitbucket authentication integration for NocoDB"},{"_id":"/docs/product-docs/noco-sync/on-premise-oauth/github","structured":{"contents":[{"content":"type: info"},{"content":"This document provides instructions for setting up the GitHub authentication integration for NocoDB."},{"heading":"environment-variables","content":"To enable OAuth2 authentication with GitHub, you need to set up the following environment variables:"},{"heading":"step-1-create-a-github-oauth-app","content":"Log in to your GitHub account"},{"heading":"step-1-create-a-github-oauth-app","content":"Navigate to Settings > Developer settings > OAuth Apps"},{"heading":"step-1-create-a-github-oauth-app","content":"Click on \"New OAuth App\""},{"heading":"step-1-create-a-github-oauth-app","content":"Fill out the form:"},{"heading":"step-1-create-a-github-oauth-app","content":"Application name: Your application name (e.g., \"NocoDB\")"},{"heading":"step-1-create-a-github-oauth-app","content":"Homepage URL: Your application's homepage URL"},{"heading":"step-1-create-a-github-oauth-app","content":"Application description: (Optional) Brief description of your app"},{"heading":"step-1-create-a-github-oauth-app","content":"Authorization callback URL: The URL where GitHub will redirect users after authorization (e.g., https://your-nocodb-instance.com/)"},{"heading":"step-1-create-a-github-oauth-app","content":"Icon: (Optional) Upload an icon for your application"},{"heading":"step-1-create-a-github-oauth-app","content":"Click \"Register application\""},{"heading":"step-2-get-client-id-and-client-secret","content":"After registering your OAuth App, you'll be provided with:"},{"heading":"step-2-get-client-id-and-client-secret","content":"Client ID"},{"heading":"step-2-get-client-id-and-client-secret","content":"Client Secret (click \"Generate a new client secret\" to create one)"},{"heading":"step-3-set-environment-variables","content":"Configure your NocoDB instance with the following environment variables:"},{"heading":"step-3-set-environment-variables","content":"Where:"},{"heading":"step-3-set-environment-variables","content":"your_github_client_id: The Client ID from your GitHub OAuth App"},{"heading":"step-3-set-environment-variables","content":"your_github_client_secret: The Client Secret from your GitHub OAuth App"},{"heading":"step-3-set-environment-variables","content":"your_redirect_uri: The callback URL you specified when creating the OAuth App (e.g., https://your-nocodb-instance.com/api/v1/integrations/auth/github/callback)"},{"heading":"oauth-scopes","content":"This integration requests the following GitHub scopes:"},{"heading":"oauth-scopes","content":"read:user: Read-only access to user profile data"},{"heading":"oauth-scopes","content":"repo: Full control of repositories"}],"headings":[{"id":"environment-variables","content":"Environment Variables"},{"id":"step-1-create-a-github-oauth-app","content":"Step 1: Create a GitHub OAuth App"},{"id":"step-2-get-client-id-and-client-secret","content":"Step 2: Get Client ID and Client Secret"},{"id":"step-3-set-environment-variables","content":"Step 3: Set Environment Variables"},{"id":"oauth-scopes","content":"OAuth Scopes"}]},"url":"/docs/product-docs/noco-sync/on-premise-oauth/github","title":"GitHub","description":"Instructions for setting up GitHub authentication integration for NocoDB"},{"_id":"/docs/product-docs/noco-sync/on-premise-oauth/gitlab","structured":{"contents":[{"content":"type: info"},{"content":"This document provides instructions for setting up the GitLab authentication integration for NocoDB."},{"heading":"environment-variables","content":"To enable OAuth2 authentication with GitLab, you need to set up the following environment variables:"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"Log in to your GitLab account"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"Navigate to User Settings > Applications (or for organization-wide application, go to your Group settings > Applications)"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"Fill out the form:"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"Name: Your application name (e.g., \"NocoDB\")"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"Redirect URI: The URL where GitLab will redirect users after authorization (e.g., https://your-nocodb-instance.com/)"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"Scopes: Select the following scopes:"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"api (API access)"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"read_user (Read user information)"},{"heading":"step-1-create-a-gitlab-oauth-application","content":"Click \"Save application\""},{"heading":"step-2-get-application-id-and-secret","content":"After creating your OAuth App, you'll be provided with:"},{"heading":"step-2-get-application-id-and-secret","content":"Application ID (Client ID)"},{"heading":"step-2-get-application-id-and-secret","content":"Secret (Client Secret)"},{"heading":"step-3-set-environment-variables","content":"Configure your NocoDB instance with the following environment variables:"},{"heading":"step-3-set-environment-variables","content":"Where:"},{"heading":"step-3-set-environment-variables","content":"your_gitlab_client_id: The Application ID from your GitLab OAuth App"},{"heading":"step-3-set-environment-variables","content":"your_gitlab_client_secret: The Secret from your GitLab OAuth App"},{"heading":"step-3-set-environment-variables","content":"your_redirect_uri: The callback URL you specified when creating the OAuth App (e.g., https://your-nocodb-instance.com/)"},{"heading":"oauth-scopes","content":"This integration requests the following GitLab scopes:"},{"heading":"oauth-scopes","content":"api: Access to the GitLab API"},{"heading":"oauth-scopes","content":"read_user: Read-only access to user profile data"}],"headings":[{"id":"environment-variables","content":"Environment Variables"},{"id":"step-1-create-a-gitlab-oauth-application","content":"Step 1: Create a GitLab OAuth Application"},{"id":"step-2-get-application-id-and-secret","content":"Step 2: Get Application ID and Secret"},{"id":"step-3-set-environment-variables","content":"Step 3: Set Environment Variables"},{"id":"oauth-scopes","content":"OAuth Scopes"}]},"url":"/docs/product-docs/noco-sync/on-premise-oauth/gitlab","title":"GitLab","description":"Instructions for setting up GitLab authentication integration for NocoDB"},{"_id":"/docs/product-docs/noco-sync/on-premise-oauth/linear","structured":{"contents":[{"content":"type: info"},{"content":"This document provides instructions for setting up the Linear authentication integration for NocoDB."},{"heading":"environment-variables","content":"To enable OAuth2 authentication with Linear, you need to set up the following environment variables:"},{"heading":"step-1-create-a-linear-oauth-app","content":"Log in to your Linear account"},{"heading":"step-1-create-a-linear-oauth-app","content":"Navigate to Settings > API > OAuth applications (or go directly to https://linear.app/settings/api/applications)"},{"heading":"step-1-create-a-linear-oauth-app","content":"Click on \"New OAuth application\""},{"heading":"step-1-create-a-linear-oauth-app","content":"Fill out the form:"},{"heading":"step-1-create-a-linear-oauth-app","content":"Application Name: Your application name (e.g., \"NocoDB\")"},{"heading":"step-1-create-a-linear-oauth-app","content":"Developer Name: The person or company developing this application (e.g., \"NocoDB\")"},{"heading":"step-1-create-a-linear-oauth-app","content":"Developer URL: Homepage or documentation for your application (e.g., \"https://nocodb.com/\")"},{"heading":"step-1-create-a-linear-oauth-app","content":"Description: Brief description of your application"},{"heading":"step-1-create-a-linear-oauth-app","content":"Callback URIs: The URL where Linear will redirect users after authorization (e.g., https://your-nocodb-instance.com/)"},{"heading":"step-1-create-a-linear-oauth-app","content":"Enable “Public”: Turn ON to allow all Linear workspaces to authorize"},{"heading":"step-1-create-a-linear-oauth-app","content":"Icon: (Optional) Upload an icon for your application"},{"heading":"step-1-create-a-linear-oauth-app","content":"Click \"Create\""},{"heading":"step-2-get-client-id-and-client-secret","content":"After creating your OAuth application:"},{"heading":"step-2-get-client-id-and-client-secret","content":"You'll be shown the Client ID and Client Secret"},{"heading":"step-2-get-client-id-and-client-secret","content":"Copy these values as they will be needed for configuration"},{"heading":"step-3-set-environment-variables","content":"Configure your NocoDB instance with the following environment variables:"},{"heading":"step-3-set-environment-variables","content":"Where:"},{"heading":"step-3-set-environment-variables","content":"your_linear_client_id: The Client ID from your Linear OAuth App"},{"heading":"step-3-set-environment-variables","content":"your_linear_client_secret: The Client Secret from your Linear OAuth App"},{"heading":"step-3-set-environment-variables","content":"your_redirect_uri: The redirect URI you specified when creating the OAuth App (e.g., https://your-nocodb-instance.com/api/v1/integrations/auth/linear/callback)"},{"heading":"api-key-authentication","content":"If you're using API Key authentication instead of OAuth:"},{"heading":"api-key-authentication","content":"Log in to your Linear account"},{"heading":"api-key-authentication","content":"Navigate to Settings > API > Personal API keys (or go directly to https://linear.app/settings/api)"},{"heading":"api-key-authentication","content":"Under \"Personal API keys\", enter a name for your key"},{"heading":"api-key-authentication","content":"Click \"Create key\""},{"heading":"api-key-authentication","content":"Copy the generated API key (you won't be able to see it again)"},{"heading":"api-key-authentication","content":"You'll need to provide this API key when configuring the integration with the API Key authentication method."},{"heading":"oauth-scopes","content":"This integration requests the following Linear scopes:"},{"heading":"oauth-scopes","content":"read: Read access to workspace data"},{"heading":"oauth-scopes","content":"write: Write access to workspace data"},{"heading":"oauth-scopes","content":"These scopes allow the integration to read and modify issues, projects, and other data in your Linear workspace."}],"headings":[{"id":"environment-variables","content":"Environment Variables"},{"id":"step-1-create-a-linear-oauth-app","content":"Step 1: Create a Linear OAuth App"},{"id":"step-2-get-client-id-and-client-secret","content":"Step 2: Get Client ID and Client Secret"},{"id":"step-3-set-environment-variables","content":"Step 3: Set Environment Variables"},{"id":"api-key-authentication","content":"API Key Authentication"},{"id":"oauth-scopes","content":"OAuth Scopes"}]},"url":"/docs/product-docs/noco-sync/on-premise-oauth/linear","title":"Linear","description":"Instructions for setting up Linear authentication integration for NocoDB"},{"_id":"/docs/product-docs/views/view-types/calendar","structured":{"contents":[{"content":"Calendar View allows you to visualise your data in a calendar format. You can easily rearrange the records by dragging and dropping them to different dates. You can also visualise the records in a day, week, month, or year format. This section will cover all the operations that can be performed on the Calendar view."},{"heading":"calendar-view-actions","content":"Create a New Calendar View"},{"heading":"calendar-view-actions","content":"Rename an Existing Calendar View"},{"heading":"calendar-view-actions","content":"Duplicate a Calendar View"},{"heading":"calendar-view-actions","content":"Remove a Calendar View"},{"heading":"calendar-view-actions","content":"Share a Calendar View"},{"heading":"calendar-view-actions","content":"Lock Calendar View for Edits"},{"heading":"timescales","content":"For Calendar view, NocoDB supports 4 different timescales:"},{"heading":"day","content":"In day view, you can see the records for a single day. For records with DateTime fields, you can drag and drop the records to different timeslots within the day."},{"heading":"week","content":"In week view, you can see the records for a single week. You can drag and drop the records to different days within the week. For records with DateTime fields, you can drag and drop the records to different timeslots within the day."},{"heading":"month","content":"In month view, you can see the records for an entire month. You can drag and drop the records to different days within the month."},{"heading":"year","content":"Year view allows you to see a birds-eye view of the records for the entire year. Blue badge on the date indicates that there are records on that date. You can click on the date to see the records for that date."},{"heading":"customize-record-label","content":"You can customize the record label that appears on the calendar. To do this, click on the Fields menu on the toolbar. In the dropdown that appears"},{"heading":"customize-record-label","content":"Use toggle to enable or disable the fields that you want to display on the calendar."},{"heading":"customize-record-label","content":"Use reorder to change the order of the fields that you want to display on the calendar."},{"heading":"customize-record-label","content":"Use format menu options to customize the display of the fields on the calendar. You can choose to format the field as Bold, Italicise or Underline."},{"heading":"add-new-records","content":"To add a new record to the calendar, click on the + icon to the bottom right of the calendar. Alternatively, you can also double-click on the white space in the calendar to add a new record. In the form that appears, fill in the details and click on Save."},{"heading":"expand-record-details","content":"To view the details of a record, click on the record. This will expand the record and show all the details of the record."},{"heading":"edit-record-details","content":"Use drag and drop to move the record to a different date or time. To edit any other details of a record, click on the record to expand it. Edit the details of the record. Make the necessary changes and click on Save."},{"heading":"delete-record","content":"To delete a record, click on the record to expand it. Click on the Delete button from the record context menu. Confirm the deletion by clicking on Delete in the confirmation dialog."},{"heading":"configuring-date-range","content":"The date range for the calendar view is supported only in the Cloud version of NocoDB"},{"heading":"configuring-date-range","content":"In NocoDB, you can configure the date range display in the calendar view by selecting Start and End date fields. To specify the date range while setting up the calendar view, click on + End Date and choose the desired date field to serve as the end date. This displays the records in the calendar view as a range block between the start and end date."},{"heading":"configuring-date-range","content":"type: info"},{"heading":"configuring-date-range","content":"Alternatively, you can also configure the date range display functionality during view creation. To do this, click on + Add Field and choose the desired date field to serve as the end date."},{"heading":"configuring-date-range","content":"Once the date range display is enabled, you can drag drop the records to change the start and end dates of the records. You can also resize the records to change the duration of the records."},{"heading":"other-toolbar-operations","content":"Apply Filters to Display Specific Records on the Calendar"},{"heading":"other-toolbar-operations","content":"Sort Records on the Calendar by One or More Criteria"},{"heading":"other-toolbar-operations","content":"Perform Quick Searches for Specific Data Within Fields"},{"heading":"other-toolbar-operations","content":"Export Data to CSV or Excel Format"}],"headings":[{"id":"calendar-view-actions","content":"Calendar View Actions"},{"id":"timescales","content":"Timescales"},{"id":"day","content":"Day"},{"id":"week","content":"Week"},{"id":"month","content":"Month"},{"id":"year","content":"Year"},{"id":"calendar-view-operations","content":"Calendar View Operations"},{"id":"customize-record-label","content":"Customize Record Label"},{"id":"add-new-records","content":"Add New Records"},{"id":"expand-record-details","content":"Expand Record Details"},{"id":"edit-record-details","content":"Edit Record Details"},{"id":"delete-record","content":"Delete Record"},{"id":"configuring-date-range","content":"Configuring Date Range"},{"id":"other-toolbar-operations","content":"Other toolbar operations"}]},"url":"/docs/product-docs/views/view-types/calendar","title":"Calendar","description":"Learn how to work with Calendar view in NocoDB."},{"_id":"/docs/product-docs/views/view-types/form","structured":{"contents":[{"content":"Form View allows you to arrange fields in a form to input data."},{"heading":"form-view-builder","content":"Form view builder layout can be divided into 4 sections:"},{"heading":"form-view-builder","content":"Form Area - This is the area where fields added to the form are listed. This area also acts as a preview of the form."},{"heading":"form-view-builder","content":"Form Fields - This area lists all the fields available in the table. You can drag and drop fields for re-ordering and toggle the hide switch to remove fields from the form."},{"heading":"form-view-builder","content":"Appearance Settings - This is the area where you can configure the form view appearance settings like Background Color, Banner & Branding."},{"heading":"form-view-builder","content":"Post Form Submission Settings - This is the area where you can configure the form view to perform various actions after a form is submitted."},{"heading":"form-view-actions","content":"Create a New Form View"},{"heading":"form-view-actions","content":"Rename an Existing Form View"},{"heading":"form-view-actions","content":"Duplicate a Form View"},{"heading":"form-view-actions","content":"Remove a Form View"},{"heading":"form-view-actions","content":"Share a Form View"},{"heading":"form-view-actions","content":"Lock Form View for Edits"},{"heading":"add-form-title--description","content":"In the Form View area, click on in input boxes provided for Title & Description to add/update title & description to the form."},{"heading":"add-form-title--description","content":"type: info"},{"heading":"addremove-fields","content":"To add/remove a field"},{"heading":"addremove-fields","content":"Use toggle switch next to the field name in the Form Fields to add/remove a field from the form."},{"heading":"change-background-color","content":"To change the background color of the form, select the required color from the color picker in the Appearance Settings panel."},{"heading":"hide-branding","content":"To hide NocoDB branding from the form, toggle the Hide NocoDB Branding switch in the Appearance Settings panel."},{"heading":"hide-branding","content":"type: info"},{"heading":"hide-form-banner","content":"To hide the form banner, toggle the Hide Banner switch in the Appearance Settings panel."},{"heading":"customize-submit-button-","content":"You can customize the text displayed on the form submit button by enabling the Customize Submit button toggle in the Appearance Settings panel. Once enabled, enter the desired label in the text input field (up to 50 characters). The default button label is \"Submit\"."},{"heading":"customize-submit-button-","content":"type: info"},{"heading":"customize-submit-button-","content":"This feature is available on Plus plan and above in Cloud, and with Enterprise license in Self-hosted. It is not available in the open-source version."},{"heading":"rearrange-fields-within-the-form","content":"To rearrange fields within the form, drag and drop the field to the required position. This can be done in both the Form Area and Form Fields panel."},{"heading":"add-a-new-field-to-the-table","content":"To add a new field to the table,"},{"heading":"add-a-new-field-to-the-table","content":"Click on the + Add field in the Form Fields panel"},{"heading":"add-a-new-field-to-the-table","content":"Select the field name & type from the dropdown."},{"heading":"add-a-new-field-to-the-table","content":"Click on Save Field"},{"heading":"post-form-submission-settings","content":"NocoDB allows you to configure the form view to perform various actions after a form is submitted. These actions can be configured in the Post Form Submission Settings panel."},{"heading":"post-form-submission-settings","content":"Show Submit Another Form Button: This option when enabled, will display a Submit Another Form button after the form is submitted."},{"heading":"post-form-submission-settings","content":"Show a Blank form: This option when enabled, will display a new blank form 5 seconds after the form is submitted."},{"heading":"post-form-submission-settings","content":"Email me: Enable this option to receive an Email after the form is submitted."},{"heading":"post-form-submission-settings","content":"After Submit Message: You can configure a message to display on successful submission of the form."},{"heading":"post-form-submission-settings","content":"type: info"},{"heading":"redirect-url","content":"To redirect the user to a specific URL after the form is submitted, toggle the Redirect URL switch in the Post Form Submission Settings panel and enter the URL in the input box provided. The browser will redirect to the specified URL after the form is submitted instead of showing the default success message & \"Submit Another Form\" button."},{"heading":"redirect-url","content":"You can use {record_id} in the URL as a query parameter to display the newly created record as expanded form (provided user submitting form has access to the base). For example, https://app.nocodb.com/#/<workspaceId>/<baseId>/<tableId>?rowId={record_id}"},{"heading":"redirect-url","content":"You can also use {record_id} in the URL as query parameter to pass the record ID of the newly created record to link in subsequent form. For example, if you want a link field in another table to be populated based on the record just created, you can use the shared form URL with link field prefilled appropriately https://<shared form URL>?<link field>={record_id}"},{"heading":"redirect-url","content":"type: info"},{"heading":"field-configuration","content":"To change the field label displayed on the form & add help-text, click on the required field in the Form Area and on the right side configuration panel, configure"},{"heading":"field-configuration","content":"Label Optional : Defaults to the field name. This doesn't affect the field name in the table."},{"heading":"field-configuration","content":"Help Text Optional"},{"heading":"field-configuration","content":"Required : Toggle to mark the field as required"},{"heading":"field-configuration","content":"type: info"},{"heading":"field-configuration","content":"Required fields are marked with a red asterisk (*) in the form."},{"heading":"field-configuration","content":"If Checkbox field is marked as required, it has to be checked to submit the form."},{"heading":"field-configuration","content":"type: info"},{"heading":"options-layout","content":"For select based field types, you can configure the options layout to be displayed as a Dropdown or an inline expanded List."},{"heading":"limit-options","content":"Limit the number of options displayed in the dropdown or list. This is useful when dealing with a large number of options, allowing you to restrict the visible choices for the user."},{"heading":"limit-options","content":"Use Hide button next to the option to hide the option from the dropdown or list."},{"heading":"limit-options","content":"Use Reorder button associated with a field to reorder the options."},{"heading":"field-validations-","content":"type: info"},{"heading":"field-validations-","content":"NocoDB allows you to configure input data validations for fields in the form. To configure field validation, click on the required field in the Form Area, and in the right configuration panel, configure the desired validations. Supported validations are type-specific and are listed below."},{"heading":"field-validations-","content":"type: info"},{"heading":"field-validations-","content":"Validation rules for fields are only applied when input fields are not empty. Set Required field to enforce these validation rules and ensure that the field cannot be left blank."},{"heading":"field-validations-","content":"The form cannot be submitted if the validation rules are not met."},{"heading":"text-based-field-types","content":"For text-based field types Single Line Text Email Phone number URL Long Text Rich Text, you can configure the following validations:"},{"heading":"text-based-field-types","content":"Minimum characters: Specifies the minimum number of characters required for the field."},{"heading":"text-based-field-types","content":"Maximum characters: Specifies the maximum number of characters allowed for the field."},{"heading":"text-based-field-types","content":"Starts with: Allows you to define a prefix that the field value must start with."},{"heading":"text-based-field-types","content":"Ends with: Allows you to define a suffix that the field value must end with."},{"heading":"text-based-field-types","content":"Contains string: Allows you to define a substring that the field value must contain."},{"heading":"text-based-field-types","content":"Does not contain string: Allows you to define a substring that the field value must not contain."},{"heading":"text-based-field-types","content":"Regular Expression: Allows you to define a regular expression pattern that the field value must match."},{"heading":"text-based-field-types","content":"For Email field type, you can configure the following additional validations:"},{"heading":"text-based-field-types","content":"Validate email: Ensures that the field value is a valid email address."},{"heading":"text-based-field-types","content":"Accept only work email: Ensures that the field value is a valid work email address."},{"heading":"text-based-field-types","content":"For Phone number field type, you can configure the following additional validations:"},{"heading":"text-based-field-types","content":"Validate phone number: Ensures that the field value is a valid phone number."},{"heading":"text-based-field-types","content":"For URL field type, you can configure the following additional validations:"},{"heading":"text-based-field-types","content":"Validate URL: Ensures that the field value is a valid URL."},{"heading":"text-based-field-types","content":"Configuration Steps"},{"heading":"text-based-field-types","content":"Click on the required field in the Form Area."},{"heading":"text-based-field-types","content":"In the right configuration panel, click on the Settings icon next to Custom Validations"},{"heading":"text-based-field-types","content":"Click on Add Validation to add a new validation rule."},{"heading":"text-based-field-types","content":"VALIDATOR Select the type of validation rule to be applied from the dropdown."},{"heading":"text-based-field-types","content":"VALIDATION VALUE Enter the value for the validation rule."},{"heading":"text-based-field-types","content":"WARNING MESSAGE (Optional) Enter a warning message to be displayed when the validation rule is not met."},{"heading":"numeric-field-types","content":"For numeric field types Number Currency Percentage Decimal Duration, you can configure the following validations:"},{"heading":"numeric-field-types","content":"Minimum: Specifies the minimum numeric value allowed for the field."},{"heading":"numeric-field-types","content":"Maximum: Specifies the maximum numeric value allowed for the field."},{"heading":"numeric-field-types","content":"type: info"},{"heading":"numeric-field-types","content":"Value configured can be an integer or a decimal number, positive or negative."},{"heading":"numeric-field-types","content":"Maximum value should be greater than or equal to the minimum value."},{"heading":"numeric-field-types","content":"Value can be left empty to disable the validation."},{"heading":"numeric-field-types","content":"Configuration Steps"},{"heading":"numeric-field-types","content":"Click on the required field in the Form Area."},{"heading":"numeric-field-types","content":"In the right configuration panel, click on the toggle button next to Limit number to a range"},{"heading":"numeric-field-types","content":"[Optional] Configure the minimum value allowed for the field."},{"heading":"numeric-field-types","content":"[Optional] Configure the maximum value allowed for the field."},{"heading":"date-based-field-types","content":"For date-based field types Date Date & Time Time Year, you can configure the following validations:"},{"heading":"date-based-field-types","content":"Minimum: Specifies the minimum allowed value for the field."},{"heading":"date-based-field-types","content":"Maximum: Specifies the maximum allowed value for the field."},{"heading":"date-based-field-types","content":"type: info"},{"heading":"date-based-field-types","content":"For both, date & date-time fields, only the date part is considered for validation."},{"heading":"date-based-field-types","content":"Value can be left empty to disable the validation."},{"heading":"date-based-field-types","content":"Configuration Steps"},{"heading":"date-based-field-types","content":"Click on the required field in the Form Area."},{"heading":"date-based-field-types","content":"In the right configuration panel, click on the toggle button next to Limit date to a range"},{"heading":"date-based-field-types","content":"[Optional] Configure the minimum value allowed for the field."},{"heading":"date-based-field-types","content":"[Optional] Configure the maximum value allowed for the field."},{"heading":"attachment-field-type","content":"For the attachment field type, you can configure the following validations:"},{"heading":"attachment-field-type","content":"Limit file types: Allows you to restrict the file types that can be uploaded by specifying permitted MIME types.\nExample"},{"heading":"attachment-field-type","content":"image/png Allows only PNGs"},{"heading":"attachment-field-type","content":"application/pdf Allows PDF documents only"},{"heading":"attachment-field-type","content":"image/* Allows all images"},{"heading":"attachment-field-type","content":"Limit file size: Specifies the maximum file size allowed for the attachment. Size can be either in KB or MB."},{"heading":"attachment-field-type","content":"Limit number of files: Specifies the maximum number of files that can be uploaded."},{"heading":"attachment-field-type","content":"type: info"},{"heading":"attachment-field-type","content":"MIME types should be separated by a comma. Find MIME types for different file formats here."},{"heading":"attachment-field-type","content":"File size limit specified is the maximum size allowed for each file, not the total size of all files."},{"heading":"attachment-field-type","content":"Configuration Steps"},{"heading":"attachment-field-type","content":"Click on the required field in the Form Area."},{"heading":"attachment-field-type","content":"In the Limit file types section, enter the permitted MIME types separated by a comma."},{"heading":"attachment-field-type","content":"In the Limit number of files section, specify the maximum number of files that can be uploaded."},{"heading":"attachment-field-type","content":"In the Limit file size section, specify the maximum allowable file size for the attachment."},{"heading":"attachment-field-type","content":"Check out this video for a more detailed explanation with examples:"},{"heading":"field-show-on-conditions","content":"Conditional fields in Form View allow you to control the visibility and behavior of chosen fields based on specific data entered in previous fields. You can dynamically hide or show form fields when certain filter conditions are met. This enables a tailored form experience, displaying only relevant fields based on user input."},{"heading":"field-show-on-conditions","content":"Note that, for constructing the condition, you can only use fields that are present in the form & are defined prior to the field for which the condition is being set. This also limits reordering of the fields in the form - reordering of the fields will be allowed as long as the condition requirement above is not broken."},{"heading":"field-show-on-conditions","content":"To enable conditional fields in Form View, Open form-view builder & follow the steps below:"},{"heading":"field-show-on-conditions","content":"Select the field for which you want to set the condition."},{"heading":"field-show-on-conditions","content":"On the right side configuration panel, click on the Settings icon next to Show On Condition to open the conditional field settings."},{"heading":"field-show-on-conditions","content":"Click on Add Filter OR Add Filter Group to add new condition(s) as required."},{"heading":"field-show-on-conditions","content":"NocoDB suffixes an eye icon next to the field name in the form builder to indicate that the field is conditionally visible."},{"heading":"pre-filling-form-fields","content":"NocoDB offers a convenient feature that allows pre-filling form fields with specific values by setting URL parameters. This functionality enables the creation of custom URLs with desired field values, streamlining data entry and enhancing user experience."},{"heading":"pre-filling-form-fields","content":"To construct a pre-filled form URL manually, ensure that the URL parameters are appropriately encoded in the following format: ?key1=value1&key2=value2."},{"heading":"pre-filling-form-fields","content":"For instance, the URL https://wh8s5w.noco.to/#/nc/form/66da06-f074-47af-ace7-fde46df55?Status=Qualification&Priority=Very+high pre-fills the Status field with Qualification and the Priority field with Very high."},{"heading":"pre-filling-form-fields","content":"NocoDB provides an intuitive alternative approach to generate pre-filled URLs through the form builder."},{"heading":"pre-filling-form-fields","content":"Open the form builder and pre-fill the required form fields with the desired values."},{"heading":"pre-filling-form-fields","content":"Click on the Share button located in the top right corner."},{"heading":"pre-filling-form-fields","content":"Toggle the Enable Public Viewing button to enable sharing."},{"heading":"pre-filling-form-fields","content":"Toggle the Enable Prefill button to enable pre-filling."},{"heading":"pre-filling-form-fields","content":"Click on the Copy Link button to copy the pre-filled URL."},{"heading":"pre-filling-form-fields","content":"type: info"},{"heading":"pre-filling-form-fields","content":"Prefilled fields override the default values if any were set for this field in the table"},{"heading":"pre-filling-form-fields","content":"Maximum length of the URL is 8000 characters."},{"heading":"pre-fill-modes","content":"Default: Standard mode. This mode will prefill the form fields with the values set in the shared form URL. Users can edit the prefilled fields in the form. In the image below, the Number field is prefilled with the value 1234, Currency field is prefilled with the value 1000 and Year field is prefilled with value 2023."},{"heading":"pre-fill-modes","content":"Hide prefilled fields: This mode will prefill the form fields with the values set in the shared form URL but will hide the prefilled fields in the form from the user. In the image below, the Number field is prefilled with the value 1234, Currency field is prefilled with the value 1000 and Year field is prefilled with value 2023."},{"heading":"pre-fill-modes","content":"Lock prefilled fields as read-only: This mode will prefill the form fields with the values set in the shared form URL and will lock the prefilled fields as read-only. In the image below, the Number field is prefilled with the value 1234, Currency field is prefilled with the value 1000 and Year field is prefilled with value 2023."},{"heading":"pre-fill-modes","content":"type: info"},{"heading":"survey-form-view","content":"NocoDB supports a special type of form view called Survey Form View. This view is ideal for creating surveys & questionnaires. This view can be enabled by toggling the Survey Mode switch when creating shared form view."},{"heading":"survey-form-view","content":"Check out this video to see how you can utilize the Survey Mode:"},{"heading":"survey-form-view","content":"When Survey Mode is enabled,"},{"heading":"survey-form-view","content":"Form input fields will be displayed one at a time."},{"heading":"survey-form-view","content":"Users can navigate between fields using the < & > buttons."},{"heading":"attaching-a-file-from-mobile-device","content":"To attach a file from mobile device,"},{"heading":"attaching-a-file-from-mobile-device","content":"Click on the Add File(s) button in attach field"},{"heading":"attaching-a-file-from-mobile-device","content":"Sample options could be (varies from device to device)"},{"heading":"attaching-a-file-from-mobile-device","content":"Camera : use this if you wish to take a picture"},{"heading":"attaching-a-file-from-mobile-device","content":"Files : use this if you wish to attach a file from your device"},{"heading":"related-articles","content":"Form ViewGallery ViewKanban View"}],"headings":[{"id":"form-view-builder","content":"Form View Builder"},{"id":"form-view-actions","content":"Form View Actions"},{"id":"form-view-operations","content":"Form View Operations"},{"id":"add-form-title--description","content":"Add Form Title & Description"},{"id":"addremove-fields","content":"Add/Remove Fields"},{"id":"form-appearance-settings","content":"Form Appearance Settings"},{"id":"change-background-color","content":"Change Background Color"},{"id":"hide-branding","content":"Hide Branding"},{"id":"hide-form-banner","content":"Hide Form Banner"},{"id":"customize-submit-button-","content":"Customize Submit Button ☁"},{"id":"rearrange-fields-within-the-form","content":"Rearrange Fields Within the Form"},{"id":"add-a-new-field-to-the-table","content":"Add a New Field to the Table"},{"id":"post-form-submission-settings","content":"Post Form Submission Settings"},{"id":"redirect-url","content":"Redirect URL"},{"id":"field-configuration","content":"Field configuration"},{"id":"select-field-type","content":"Select Field Type"},{"id":"options-layout","content":"Options Layout"},{"id":"limit-options","content":"Limit Options"},{"id":"field-validations-","content":"Field Validations ☁"},{"id":"text-based-field-types","content":"Text-based Field Types"},{"id":"numeric-field-types","content":"Numeric Field Types"},{"id":"date-based-field-types","content":"Date-based Field Types"},{"id":"attachment-field-type","content":"Attachment Field Type"},{"id":"field-show-on-conditions","content":"Field \"Show On Conditions\""},{"id":"pre-filling-form-fields","content":"Pre-Filling Form Fields"},{"id":"pre-fill-modes","content":"Pre-fill Modes"},{"id":"survey-form-view","content":"Survey Form View"},{"id":"attaching-a-file-from-mobile-device","content":"Attaching a file from mobile device"},{"id":"related-articles","content":"Related articles"}]},"url":"/docs/product-docs/views/view-types/form","title":"Form","description":"Learn how to create, import, and manage forms in NocoDB."},{"_id":"/docs/product-docs/views/view-types/gallery","structured":{"contents":[{"content":"Gallery View allows you to display images as thumbnails with other fields just like a gallery. This view type is ideal for viewing images in a gallery-like interface. Like in Gallery, you can also perform various operations on the gallery view, such as sorting, filtering, grouping, and searching. You can also export the data in the gallery view to CSV or Excel format. This section will cover all the operations that can be performed on the gallery view."},{"heading":"gallery-view-actions","content":"Create a New Gallery View"},{"heading":"gallery-view-actions","content":"Rename an Existing Gallery View"},{"heading":"gallery-view-actions","content":"Duplicate a Gallery View"},{"heading":"gallery-view-actions","content":"Remove a Gallery View"},{"heading":"gallery-view-actions","content":"Share a Gallery View"},{"heading":"gallery-view-actions","content":"Lock Gallery View for Edits"},{"heading":"gallery-view-operations","content":"Rearrange Fields Within the Gallery"},{"heading":"gallery-view-operations","content":"Show or Hide Fields Within the Gallery"},{"heading":"gallery-view-operations","content":"Apply Filters to Display Specific Records on the Gallery"},{"heading":"gallery-view-operations","content":"Sort Records on the Gallery by One or More Criteria"},{"heading":"gallery-view-operations","content":"Perform Quick Searches for Specific Data Within Fields"},{"heading":"gallery-view-operations","content":"Export Data to CSV or Excel Format"},{"heading":"gallery-view-operations","content":"Change Cover Image"},{"heading":"gallery-view-operations","content":"Show or Hide field Labels on Cards"},{"heading":"gallery-view-record-operations","content":"Add a New Record to the Gallery: Currently it is not possible to insert a new record directly on the gallery view. However, you can add a new record to the table, and it will be displayed on the gallery view."},{"heading":"gallery-view-record-operations","content":"Edit an Existing Record on the Gallery: Click on the card on the gallery view to open the record in the expanded record view. You can edit the record in the form view and save it."},{"heading":"gallery-view-record-operations","content":"Delete a Single Record from the Gallery: Click on the card on the gallery view to open the record in the expanded record view. You can delete the record in the form view by using the expanded record context menu."},{"heading":"gallery-view-record-operations","content":"Delete Multiple Records in Bulk from the Gallery: Currently it is not possible to delete multiple records in bulk directly on the gallery view. However, you can delete multiple records in bulk from the grid view & it will be reflected on the gallery view."},{"heading":"related-articles","content":"Grid ViewForm ViewKanban View"}],"headings":[{"id":"gallery-view-actions","content":"Gallery View Actions"},{"id":"gallery-view-operations","content":"Gallery View Operations"},{"id":"gallery-view-record-operations","content":"Gallery View Record Operations"},{"id":"related-articles","content":"Related articles"}]},"url":"/docs/product-docs/views/view-types/gallery","title":"Gallery","description":"Learn how to work with gallery view in NocoDB."},{"_id":"/docs/product-docs/views/view-types/grid","structured":{"contents":[{"content":"Grid View, as a default type of view, allows you to display your data in a spreadsheet-like interface using rows and columns. Rows are as referred to as records and columns as fields in NocoDB."},{"content":"Grid view is the default view type for all tables. This view type is ideal for viewing and editing data in a spreadsheet-like interface. You can also perform various operations on the grid view, such as sorting, filtering, grouping, and searching. You can also export the data in the grid view to CSV or Excel format. This section will cover all the operations that can be performed on the grid view."},{"heading":"grid-view-actions","content":"Create a New Grid View"},{"heading":"grid-view-actions","content":"Rename an Existing Grid View"},{"heading":"grid-view-actions","content":"Duplicate a Grid View"},{"heading":"grid-view-actions","content":"Remove a Grid View"},{"heading":"grid-view-actions","content":"Share a Grid View"},{"heading":"grid-view-actions","content":"Lock Grid View for Edits"},{"heading":"grid-view-operations","content":"Rearrange Fields Within the Grid"},{"heading":"grid-view-operations","content":"Show or Hide Fields Within the Grid"},{"heading":"grid-view-operations","content":"Apply Filters to Display Specific Records on the Grid"},{"heading":"grid-view-operations","content":"Sort Records on the Grid by One or More Criteria"},{"heading":"grid-view-operations","content":"Group Records Horizontally on the Grid"},{"heading":"grid-view-operations","content":"Search for Specific Data Within Fields"},{"heading":"grid-view-operations","content":"Export Data to CSV or Excel Format"},{"heading":"grid-view-operations","content":"Adjust Record Height on the Grid"},{"heading":"grid-view-operations","content":"Customize Field Width"},{"heading":"grid-view-operations","content":"Toggle Field Visibility on the Grid"},{"heading":"grid-view-record-operations","content":"Add a New Record to the Grid"},{"heading":"grid-view-record-operations","content":"Edit an Existing Record on the Grid"},{"heading":"grid-view-record-operations","content":"Delete a Single Record from the Grid"},{"heading":"grid-view-record-operations","content":"Delete Multiple Records in Bulk from the Grid"},{"heading":"related-articles","content":"Gallery ViewForm ViewKanban View"}],"headings":[{"id":"grid-view-actions","content":"Grid View Actions"},{"id":"grid-view-operations","content":"Grid View Operations"},{"id":"grid-view-record-operations","content":"Grid View Record Operations"},{"id":"related-articles","content":"Related articles"}]},"url":"/docs/product-docs/views/view-types/grid","title":"Grid","description":"Learn how to work with grid view in NocoDB."},{"_id":"/docs/product-docs/views/view-types/kanban","structured":{"contents":[{"content":"Kanban View allows you to visualise your data using cards as part of various stacks on the board. You can easily rearrange the cards by dragging and dropping them to different stacks. This section will cover all the operations that can be performed on the Kanban view."},{"heading":"kanban-view-actions","content":"Create a New Kanban View"},{"heading":"kanban-view-actions","content":"Rename an Existing Kanban View"},{"heading":"kanban-view-actions","content":"Duplicate a Kanban View"},{"heading":"kanban-view-actions","content":"Remove a Kanban View"},{"heading":"kanban-view-actions","content":"Share a Kanban View"},{"heading":"kanban-view-actions","content":"Lock Kanban View for Edits"},{"heading":"kanban-view-operations","content":"Rearrange Fields Within the Kanban"},{"heading":"kanban-view-operations","content":"Show or Hide Fields Within the Kanban"},{"heading":"kanban-view-operations","content":"Apply Filters to Display Specific Records on the Kanban"},{"heading":"kanban-view-operations","content":"Sort Records on the Kanban by One or More Criteria"},{"heading":"kanban-view-operations","content":"Perform Quick Searches for Specific Data Within Fields"},{"heading":"kanban-view-operations","content":"Export Data to CSV or Excel Format"},{"heading":"kanban-view-operations","content":"Change Cover Image"},{"heading":"kanban-view-operations","content":"Show or Hide field Labels on Cards"},{"heading":"change-stacked-by-field","content":"You can change the field by which the records are stacked on the kanban view by following the steps below:"},{"heading":"change-stacked-by-field","content":"Click on the Stacked by menu in the toolbar."},{"heading":"change-stacked-by-field","content":"Click on field name that is currently selected as the stacked-by field."},{"heading":"change-stacked-by-field","content":"From the dropdown, select the new field by which you want to stack the records."},{"heading":"addmodify-stacked-by-field-options","content":"You can add/modify options on the stacked-by single select field by following the steps below:"},{"heading":"addmodify-stacked-by-field-options","content":"Click on the Stacked by menu in the toolbar. Dropdown lists all Select Options that are available on this field."},{"heading":"addmodify-stacked-by-field-options","content":"Add/modify as required."},{"heading":"addmodify-stacked-by-field-options","content":"Click on Save to save the changes."},{"heading":"collapse-stack","content":"To ease the view of the kanban, you can collapse the stack by following the steps below:"},{"heading":"collapse-stack","content":"Click on the dropdown icon on the stack header."},{"heading":"collapse-stack","content":"Select Collapse Stack from the dropdown."},{"heading":"collapse-stack","content":"Collapsed Stack will be displayed as vertical bars on the kanban view as displayed below."},{"heading":"delete-stack","content":"To delete a stack from the kanban view, follow the steps below:"},{"heading":"delete-stack","content":"Click on the dropdown icon on the stack header."},{"heading":"delete-stack","content":"Select Delete Stack from the dropdown."},{"heading":"delete-stack","content":"A confirmation dialog will be displayed. Click on Delete to delete the stack."},{"heading":"reorder-stacks","content":"You can reorder the stacks on the kanban view by dragging and dropping the stack to the desired position."},{"heading":"move-records-within-stacks","content":"You can move records within a stack by dragging and dropping the card to the desired position within the stack."},{"heading":"add-a-new-record-to-the-kanban","content":"On kanban, you can add a new record directly to a particular stack by using Add Record button on the stack footer. This opens up an expanded record view where you can enter the data for the new record. Once you save the record, it will be displayed on the kanban view. You can also add a new record to the table, and it will be displayed on the kanban view."},{"heading":"edit-an-existing-record-on-the-kanban","content":"Click on the card on the kanban view to open the record in the expanded record view. You can edit the record in the expanded record view and save it."},{"heading":"delete-a-single-record-from-the-kanban","content":"Right-click on the card to access the context menu and select the Delete option."},{"heading":"related-articles","content":"Grid ViewKanban ViewForm View"}],"headings":[{"id":"kanban-view-actions","content":"Kanban View Actions"},{"id":"kanban-view-operations","content":"Kanban View Operations"},{"id":"kanban-view-stacked-by-field-operations","content":"Kanban View Stacked-by field Operations"},{"id":"change-stacked-by-field","content":"Change Stacked by Field"},{"id":"addmodify-stacked-by-field-options","content":"Add/modify Stacked-by Field Options"},{"id":"collapse-stack","content":"Collapse Stack"},{"id":"delete-stack","content":"Delete Stack"},{"id":"reorder-stacks","content":"Reorder Stacks"},{"id":"kanban-view-record-operations","content":"Kanban View Record Operations"},{"id":"move-records-within-stacks","content":"Move Records within Stacks"},{"id":"add-a-new-record-to-the-kanban","content":"Add a New Record to the Kanban"},{"id":"edit-an-existing-record-on-the-kanban","content":"Edit an Existing Record on the Kanban"},{"id":"delete-a-single-record-from-the-kanban","content":"Delete a Single Record from the Kanban"},{"id":"related-articles","content":"Related articles"}]},"url":"/docs/product-docs/views/view-types/kanban","title":"Kanban","description":"Learn how to work with kanban view in NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/oidc-sso/auth0","structured":{"contents":[{"content":"type: info"},{"content":"This article briefs about the steps to configure Auth0 as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-redirect-url","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-redirect-url","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-redirect-url","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-redirect-url","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-redirect-url","content":"Retrieve Redirect URL; this information will be required to be configured later with the Identity Provider"},{"heading":"auth0-configure-nocodb-as-an-application","content":"Access your Auth0 account"},{"heading":"auth0-configure-nocodb-as-an-application","content":"navigate to Applications > Create Application."},{"heading":"auth0-configure-nocodb-as-an-application","content":"In the Create Application modal,"},{"heading":"auth0-configure-nocodb-as-an-application","content":"choose Regular Web Application"},{"heading":"auth0-configure-nocodb-as-an-application","content":"click Create"},{"heading":"auth0-configure-nocodb-as-an-application","content":"On Quick start screen, go to Settings tab"},{"heading":"auth0-configure-nocodb-as-an-application","content":"Copy the Client ID and Client Secret from the Basic Information section."},{"heading":"auth0-configure-nocodb-as-an-application","content":"Goto Application URIs section"},{"heading":"auth0-configure-nocodb-as-an-application","content":"Add the Redirect URL copied from step(2) under Allowed Callback URLs."},{"heading":"auth0-configure-nocodb-as-an-application","content":"Save Changes"},{"heading":"auth0-configure-nocodb-as-an-application","content":"On the Settings tab, go to the Advanced Settings section and click on the Endpoints tab."},{"heading":"auth0-configure-nocodb-as-an-application","content":"Copy the OAuth Authorization URL, OAuth Token URL, OAuth User Info URL & JSON Web Key Set URL"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"In NocoDB, open Account Settings > Authentication > OIDC. On the \"Register OIDC Identity Provider\" modal, insert the following information:"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Insert Client ID retrieved in step (5) above as Client ID"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Insert Client Secret retrieved in step (5) above as Client Secret"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Insert OAuth Authorization URL retrieved in step (7) above as Authorization URL"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Insert OAuth Token URL retrieved in step (7) above as Token URL"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Insert OAuth User Info URL retrieved in step (7) above as Userinfo URL"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Insert JSON Web Key Set URL retrieved in step (7) above as JWK Set URL"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Set Scope as openid profile email offline_access"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"In the Username Attribute field, indicate the name of the claim that represents the user's email. The default value is set to \"email.\""},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"type: info"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"For information about Auth0 API Scopes, refer here"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-redirect-url","content":"NocoDB, Retrieve Redirect URL"},{"id":"auth0-configure-nocodb-as-an-application","content":"Auth0, Configure NocoDB as an Application"},{"id":"nocodb-configure-auth0-as-an-identity-provider","content":"NocoDB, Configure Auth0 as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/oidc-sso/auth0","title":"Auth0","description":"Learn how to configure Auth0 as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/oidc-sso/azure-ad","structured":{"contents":[{"content":"type: info"},{"content":"This article briefs about the steps to configure Azure AD as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-redirect-url","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-redirect-url","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-redirect-url","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-redirect-url","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-redirect-url","content":"Retrieve Redirect URL; this information will be required to be configured later with the Identity Provider"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Sign in to your Azure account and navigate to Azure Active Directory under Azure Services."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Access Manage Tenants from the navigation bar, select your directory, and click Switch."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On your directory's homepage, click + Add > App Registration from the navigation bar."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On the Register an application page,"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Provide your application's name."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Set Accounts in this organizational directory only as the Supported account types."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Choose Web as the Application type"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Add the Redirect URL under Redirect URIs."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Register"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On your application's homepage,"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Copy the Application (client) ID"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click Add a certificate or secret under Client credentials section"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On Certificates & secrets page, go to Client secrets section"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click New client secret"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On Add a client secret page,"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Add a description for the secret"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Set expiration as required"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Add"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Copy the Value of the newly created secret"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On your application's homepage,"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Go to Endpoints tab"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Open OpenID Connect metadata document URL & copy authorization_endpoint, token_endpoint, userinfo_endpoint & jwks_uri from the JSON response"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Configuring scopes"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Go to API permissions tab"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click Add a permission"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On Request API permissions page,"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Select Microsoft Graph from Microsoft APIs"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Select Delegated permissions"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Select openid profile email offline_access from Select permissions dropdown"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"From Users dropdown, select User.Read"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Add permissions"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click Grant admin consent for this directory from the API permissions page"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"On NocoDB, open Account Settings > Authentication > OIDC. On the \"Register OIDC Identity Provider\" modal, insert the following information:"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert Application (client) ID retrieved in step (7) above as Client ID"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert Value of the newly created secret retrieved in step (7) above as Client Secret"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert authorization_endpoint retrieved in step (8) above as Authorization URL"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert token_endpoint retrieved in step (8) above as Token URL"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert userinfo_endpoint retrieved in step (8) above as Userinfo URL"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert jwks_uri retrieved in step (8) above as JWK Set URL"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Set Scope as openid profile email offline_access"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"type: info"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with SSO option"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"type: info"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"For information about Azure AD API Scopes, refer here"}],"headings":[{"id":"nocodb-retrieve-redirect-url","content":"NocoDB, Retrieve Redirect URL"},{"id":"azure-ad-configure-nocodb-as-an-application","content":"Azure AD, Configure NocoDB as an Application"},{"id":"nocodb-configure-azure-ad-as-an-identity-provider","content":"NocoDB, Configure Azure AD as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/oidc-sso/azure-ad","title":"Azure AD (Entra)","description":"Learn how to configure Azure AD as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/oidc-sso/okta","structured":{"contents":[{"content":"type: info"},{"content":"This article briefs about the steps to configure Okta as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-redirect-url","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-redirect-url","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-redirect-url","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-redirect-url","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-redirect-url","content":"Retrieve Redirect URL; this information will be required to be configured later with the Identity Provider"},{"heading":"okta-configure-nocodb-as-an-application","content":"Sign in to your Okta account and navigate to the \"Get started with Okta\" page."},{"heading":"okta-configure-nocodb-as-an-application","content":"Click on Add App for the Single Sign-On option."},{"heading":"okta-configure-nocodb-as-an-application","content":"On the Browse App Integration Catalog page, select Create New App"},{"heading":"okta-configure-nocodb-as-an-application","content":"In the pop-up with title Create a new app integration"},{"heading":"okta-configure-nocodb-as-an-application","content":"Choose OIDC - OpenID Connect as the Sign-in method"},{"heading":"okta-configure-nocodb-as-an-application","content":"Choose Web Application as the Application type"},{"heading":"okta-configure-nocodb-as-an-application","content":"Go to General Settings on the New Web App Integration page"},{"heading":"okta-configure-nocodb-as-an-application","content":"Provide your application's name."},{"heading":"okta-configure-nocodb-as-an-application","content":"From the Options in the Grant type allowed section, select Authorization Code and Refresh Token"},{"heading":"okta-configure-nocodb-as-an-application","content":"Add the Redirect URL under Sign-in redirect URIs."},{"heading":"okta-configure-nocodb-as-an-application","content":"From the Assignments section, select an option from Controlled access to set up the desired accessibility configuration for this application."},{"heading":"okta-configure-nocodb-as-an-application","content":"Save"},{"heading":"okta-configure-nocodb-as-an-application","content":"On your new application,"},{"heading":"okta-configure-nocodb-as-an-application","content":"Go to the General tab"},{"heading":"okta-configure-nocodb-as-an-application","content":"Copy the Client ID and Client Secret from the Client Credentials section."},{"heading":"okta-configure-nocodb-as-an-application","content":"From Account dropdown in navigation bar"},{"heading":"okta-configure-nocodb-as-an-application","content":"Copy Okta Domain"},{"heading":"okta-configure-nocodb-as-an-application","content":"Append \"./well-known/openid-configuration\" to the Okta Domain URL & access it"},{"heading":"okta-configure-nocodb-as-an-application","content":"Example: https://dev-123456.okta.com/.well-known/openid-configuration"},{"heading":"okta-configure-nocodb-as-an-application","content":"Copy authorization_endpoint, token_endpoint, userinfo_endpoint & jwks_uri from the JSON response"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"In NocoDB, open Account Settings > Authentication > OIDC. On the \"Register OIDC Identity Provider\" modal, insert the following information:"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Insert Client ID retrieved in step (6) above as Client ID"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Insert Client Secret retrieved in step (6) above as Client Secret"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Insert authorization_endpoint retrieved in step (8) above as Authorization URL"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Insert token_endpoint retrieved in step (8) above as Token URL"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Insert userinfo_endpoint retrieved in step (8) above as Userinfo URL"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Insert jwks_uri retrieved in step (8) above as JWK Set URL"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Set Scope as openid profile email offline_access"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"In the Username Attribute field, indicate the name of the claim that represents the user's email. The default value is set to \"email.\""},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"type: note"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with SSO option"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"For information about Okta API Scopes, refer here"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-redirect-url","content":"NocoDB, Retrieve Redirect URL"},{"id":"okta-configure-nocodb-as-an-application","content":"Okta, Configure NocoDB as an Application"},{"id":"nocodb-configure-okta-as-an-identity-provider","content":"NocoDB, Configure Okta as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/oidc-sso/okta","title":"Okta","description":"Learn how to configure Okta as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/oidc-sso/ping-identity","structured":{"contents":[{"content":"type: info"},{"content":"This article briefs about the steps to configure Ping Identity as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-redirect-url","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-redirect-url","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-redirect-url","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-redirect-url","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-redirect-url","content":"Retrieve Redirect URL; this information will be required to be configured later with the Identity Provider"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Access your PingOne account and navigate to the homepage."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click on Add Environment from the top right corner."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"On the Create Environment screen,"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Opt for Build your own solution"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"In the Select solution(s) for your Environment section, select PingOne SSO from Cloud Services"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click Next"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Provide a name and description for the environment,"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click Next"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Access the newly created environment and go to Connections > Applications from the sidebar."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Within the Applications homepage, initiate the creation of a new application by clicking the \"+\" icon."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"On the \"Add Application\" panel:"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Input the application name and description."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Choose \"OIDC Web App\" as the Application Type and click \"Configure\""},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"From your application,"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Go to Configurations tab"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click on Edit button"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Check Refresh Token option"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Copy Authorization URL, Token URL, Userinfo URL & JWK Set URL from the Endpoints section"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"From Generals dropdown, copy Client ID & Client Secret"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Save"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"From Resources tab,"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click Edit"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Select openid profile email from Scopes"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Switch toggle button in the top right corner to On to activate the application."},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"In NocoDB, open Account Settings > Authentication > OIDC. On the \"Register OIDC Identity Provider\" modal, insert the following information:"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Insert Client ID retrieved in step (9) above as Client ID"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Insert Client Secret retrieved in step (9) above as Client Secret"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Insert Authorization URL retrieved in step (9) above as Authorization URL"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Insert Token URL retrieved in step (9) above as Token URL"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Insert Userinfo URL retrieved in step (9) above as Userinfo URL"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Insert JWK Set URL retrieved in step (9) above as JWK Set URL"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Set Scope as openid profile email offline_access"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"In the Username Attribute field, indicate the name of the claim that represents the user's email. The default value is set to \"email.\""},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"type: note"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with SSO option"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"For information about Ping Identity API Scopes, refer here"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-redirect-url","content":"NocoDB, Retrieve Redirect URL"},{"id":"ping-identity-configure-nocodb-as-an-application","content":"Ping Identity, Configure NocoDB as an Application"},{"id":"nocodb-configure-ping-identity-as-an-identity-provider","content":"NocoDB, Configure Ping Identity as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/oidc-sso/ping-identity","title":"Ping Identity","description":"Learn how to configure Ping Identity as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/saml-sso/auth0","structured":{"contents":[{"content":"type: info"},{"content":"This article briefs about the steps to configure Auth0 as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Retrieve Redirect URL & Audience / Entity ID; these information will be required to be configured later with the Identity Provider"},{"heading":"auth0-configure-nocodb-as-an-application","content":"Access your Auth0 account"},{"heading":"auth0-configure-nocodb-as-an-application","content":"navigate to Applications > Create Application."},{"heading":"auth0-configure-nocodb-as-an-application","content":"In the Create Application modal,"},{"heading":"auth0-configure-nocodb-as-an-application","content":"choose Regular Web Application"},{"heading":"auth0-configure-nocodb-as-an-application","content":"click Create"},{"heading":"auth0-configure-nocodb-as-an-application","content":"Upon successful creation, you will be directed to the Quick Start screen."},{"heading":"auth0-configure-nocodb-as-an-application","content":"Go to the Addons tab."},{"heading":"auth0-configure-nocodb-as-an-application","content":"Enable SAML2 Web App"},{"heading":"auth0-configure-nocodb-as-an-application","content":"On the SAML2 Web App modal,"},{"heading":"auth0-configure-nocodb-as-an-application","content":"Paste Redirect URL copied in step above into Application Callback URL field"},{"heading":"auth0-configure-nocodb-as-an-application","content":"In Settings, retain nameIdentifierProbes as [\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress\"]; remove other probes if any"},{"heading":"auth0-configure-nocodb-as-an-application","content":"Click Enable to save the settings"},{"heading":"auth0-configure-nocodb-as-an-application","content":"On the Settings tab,"},{"heading":"auth0-configure-nocodb-as-an-application","content":"move to Advanced Settings > Endpoints > SAML section,"},{"heading":"auth0-configure-nocodb-as-an-application","content":"copy the SAML Metadata URL"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Go to Account Settings > Authentication > SAML"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Insert Metadata URL retrieved in step above; alternatively you can configure XML directly as well"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Save"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"type: note"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with SSO option"},{"heading":"nocodb-configure-auth0-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-saml-sso-configuration-details","content":"NocoDB, Retrieve SAML SSO Configuration details"},{"id":"auth0-configure-nocodb-as-an-application","content":"Auth0, Configure NocoDB as an Application"},{"id":"nocodb-configure-auth0-as-an-identity-provider","content":"NocoDB, Configure Auth0 as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/saml-sso/auth0","title":"Auth0","description":"Learn how to configure Auth0 as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/saml-sso/azure-ad","structured":{"contents":[{"content":"type: info"},{"content":"This article briefs about the steps to configure Active Directory as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the\nprovider on the login page"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Retrieve Redirect URL & Audience / Entity ID; these information will be required to be configured later with the\nIdentity Provider"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Sign in to your Azure account and navigate\nto Microsoft Entra admin center > Identity > Enterprise applications"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click + New application"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On the Browse Microsoft Entra Gallery page, select Create your own application from the navigation bar."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Provide your application's name."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Choose Integrate any other application you don't find in the gallery (Non-gallery)"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Create"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"On your application page, navigate to Manage > Single sign-on > SAML"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Go to the Basic SAML Configuration section under Set up Single Sign-On with SAML and click Edit"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Add the Audience URI under Identifier (Entity ID)."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Add the Redirect URL under Replay URL (Assertion Consumer Service URL)."},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click Save"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"In the Attributes & Claims section, click Edit"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Edit the \"Unique User Identifier (Name ID)\" claim:"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Select Email address from the Name identifier format dropdown"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Choose Attribute as the Source"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"In the Source attribute, select user.mail"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click Save"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Go to the SAML Certificates section and copy the App Federation Metadata URL"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"on the Application's Overview page,"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Click Users and groups,"},{"heading":"azure-ad-configure-nocodb-as-an-application","content":"Add the necessary users or groups to the application."},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Go to Account Settings > Authentication > SAML"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert Metadata URL retrieved in step above; alternatively you can configure XML directly as well"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Save"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"type: note"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with SSO option"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-saml-sso-configuration-details","content":"NocoDB, Retrieve SAML SSO Configuration details"},{"id":"azure-ad-configure-nocodb-as-an-application","content":"Azure AD, Configure NocoDB as an Application"},{"id":"nocodb-configure-azure-ad-as-an-identity-provider","content":"NocoDB, Configure Azure AD as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/saml-sso/azure-ad","title":"Azure AD (Entra)","description":"Learn how to configure Active Directory as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/saml-sso/keycloak","structured":{"contents":[{"content":"type: info"},{"content":"For SSO Access - please reach out to sales team."},{"content":"This article briefs about the steps to configure Keycloak as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Retrieve Redirect URL & Audience / Entity ID; these information will be required to be configured later with the Identity Provider"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Access your Keycloak account"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"navigate to Clients menu"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"select Clients list tab > Click Create client button."},{"heading":"keycloak-configure-nocodb-as-an-application","content":"In the Create Client modal, General Settings tab:"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Select SAML as the Client type"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Specify Audience/Entity ID retrieved from NocoDB as the Client ID"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Click Next"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"In the Create Client modal, Login Settings tab,"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Specify Redirect URL retrieved from NocoDB as the Valid Redirect URIs"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Specify Redirect URL retrieved from NocoDB as the Valid post logout redirect URIs"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Click Save"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"On the Client details, Settings tab,"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"navigate to SAML Capabilities section"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Specify Name ID format as email"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Enable Force Name ID Format and Force POST Binding"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"navigate to Signature and Encryption section"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Enable Sign Assertions"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Click Save"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"On the Client details, Keys tab,"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Disable Signing keys config > Client Signature Required"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Navigate to Realm Settings > Endpoints"},{"heading":"keycloak-configure-nocodb-as-an-application","content":"Copy SAML 2.0 Identity Provider Metadata URL"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Go to Account Settings > Authentication > SAMLKey"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Insert Metadata URL retrieved in step above; alternatively you can configure XML directly as well"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Save"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"type: note"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with <SSO> option"},{"heading":"nocodb-configure-azure-ad-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-saml-sso-configuration-details","content":"NocoDB, Retrieve SAML SSO Configuration details"},{"id":"keycloak-configure-nocodb-as-an-application","content":"Keycloak, Configure NocoDB as an Application"},{"id":"nocodb-configure-azure-ad-as-an-identity-provider","content":"NocoDB, Configure Azure AD as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/saml-sso/keycloak","title":"Keycloak","description":"Learn how to configure Keycloak as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/saml-sso/okta","structured":{"contents":[{"content":"type: info"},{"content":"For SSO Access - please reach out to sales team."},{"content":"This article briefs about the steps to configure Okta as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Retrieve Redirect URL & Audience / Entity ID; these information will be required to be configured later with the Identity Provider"},{"heading":"okta-configure-nocodb-as-an-application","content":"Sign in to your Okta account"},{"heading":"okta-configure-nocodb-as-an-application","content":"Navigate to Applications > Applications"},{"heading":"okta-configure-nocodb-as-an-application","content":"Click Create App Integration"},{"heading":"okta-configure-nocodb-as-an-application","content":"In the pop-up with title Create a new app integration choose SAML 2.0 as the Sign-in method"},{"heading":"okta-configure-nocodb-as-an-application","content":"On the Create SAML Integration page, in the General settings - provide a name for your app; click Next"},{"heading":"okta-configure-nocodb-as-an-application","content":"In the Configure SAML section:"},{"heading":"okta-configure-nocodb-as-an-application","content":"Enter the Redirect URL copied from NocoDB in the Single sign-on URL field."},{"heading":"okta-configure-nocodb-as-an-application","content":"Add the Audience URI copied from NocoDB in the Audience URI (SP Entity ID) field."},{"heading":"okta-configure-nocodb-as-an-application","content":"Choose Email Address from the Name ID format options."},{"heading":"okta-configure-nocodb-as-an-application","content":"Select Email from the Application user-name options."},{"heading":"okta-configure-nocodb-as-an-application","content":"Click Next"},{"heading":"okta-configure-nocodb-as-an-application","content":"Complete any additional information in the final step and click Finish"},{"heading":"okta-configure-nocodb-as-an-application","content":"On your application's homepage,"},{"heading":"okta-configure-nocodb-as-an-application","content":"Navigate to the Sign-on tab"},{"heading":"okta-configure-nocodb-as-an-application","content":"Copy the Metadata URL from the SAML 2.0 section"},{"heading":"okta-configure-nocodb-as-an-application","content":"Go to the Assignments tab and click Assign to assign people or groups to this application."},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Go to Account Settings > Authentication (SSO) > SAML"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"On the \"Register SAML Identity Provider\" modal, insert Metadata URL retrieved in step above; alternatively you can configure XML directly as well"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Save"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"type: note"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with SSO option"},{"heading":"nocodb-configure-okta-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-saml-sso-configuration-details","content":"NocoDB, Retrieve SAML SSO Configuration details"},{"id":"okta-configure-nocodb-as-an-application","content":"Okta, Configure NocoDB as an Application"},{"id":"nocodb-configure-okta-as-an-identity-provider","content":"NocoDB, Configure Okta as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/saml-sso/okta","title":"Okta","description":"Learn how to configure Okta as an identity provider for NocoDB."},{"_id":"/docs/product-docs/account-settings/authentication/saml-sso/ping-identity","structured":{"contents":[{"content":"type: info"},{"content":"This article briefs about the steps to configure Auth0 as Identity service provider for NocoDB"},{"content":"type: info"},{"content":"type: warning"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Go to Account Settings"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Select Authentication (SSO)"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Click on New Provider button"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"On the Popup modal, Specify a Display name for the provider; note that, this name will be used to display the provider on the login page"},{"heading":"nocodb-retrieve-saml-sso-configuration-details","content":"Retrieve Redirect URL & Audience / Entity ID; these information will be required to be configured later with the Identity Provider"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Access your PingOne account and navigate to the homepage."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click on Add Environment from the top right corner."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"On the Create Environment screen,"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Opt for Build your own solution"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"In the Select solution(s) for your Environment section, select PingOne SSO from Cloud Services"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click Next"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Provide a name and description for the environment,"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Click Next"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Access the newly created environment and go to Connections > Applications from the sidebar."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Within the Applications homepage, initiate the creation of a new application by clicking the \"+\" icon."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"On the \"Add Application\" panel:"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Input the application name and description."},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Choose \"SAML Application\" as the Application Type and click \"Configure.\""},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Within the SAML Configuration panel, opt for \"Manually Enter.\""},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Populate the ACS URLs field with the Redirect URL retrieved from step (2) above"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Insert the Audience URI retrieved above in step (2) in the Entity ID field"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Save"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"In your application,"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Navigate to the Configurations tab"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"Copy the IDP Metadata URL"},{"heading":"ping-identity-configure-nocodb-as-an-application","content":"On your application panel, activate user access to the application by toggling the switch in the top right corner."},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Go to Account Settings > Authentication > SAML"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Insert Metadata URL retrieved in step above; alternatively you can configure XML directly as well"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Save"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"For Sign-in's, user should be able to now see Sign in with <SSO> option."},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"type: note"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"Post sign-out, refresh page (for the first time) if you do not see Sign in with SSO option"},{"heading":"nocodb-configure-ping-identity-as-an-identity-provider","content":"type: info"}],"headings":[{"id":"nocodb-retrieve-saml-sso-configuration-details","content":"NocoDB, Retrieve SAML SSO Configuration details"},{"id":"ping-identity-configure-nocodb-as-an-application","content":"Ping Identity, Configure NocoDB as an Application"},{"id":"nocodb-configure-ping-identity-as-an-identity-provider","content":"NocoDB, Configure Ping Identity as an Identity Provider"}]},"url":"/docs/product-docs/account-settings/authentication/saml-sso/ping-identity","title":"Ping Identity","description":"Learn how to configure Ping Identity as an identity provider for NocoDB."},{"_id":"/docs/product-docs/fields/field-types/custom-types/QR-code","structured":{"contents":[{"content":"QR code is a custom field type that allows you to generate a QR code from a string value. This is useful for generating QR codes for things like URLs, phone numbers, or other data that can be represented as a string."},{"content":"The following field types are supported for the reference field:"},{"content":"Formula"},{"content":"Single Line Text"},{"content":"Long Text"},{"content":"Phone Number"},{"content":"URL"},{"content":"Email"},{"heading":"create-a-qr-code-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-qr-code-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-qr-code-field","content":"Select the field type as QR Code from the dropdown."},{"heading":"create-a-qr-code-field","content":"Select the field to be used as the source for the QR code."},{"heading":"create-a-qr-code-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"Cell displays the QR code generated from the source field. Click on the cell to open enlarged view of the QR code."},{"heading":"related-fields","content":"Barcode"}],"headings":[{"id":"create-a-qr-code-field","content":"Create a QR code field"},{"id":"cell-display","content":"Cell display"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/custom-types/QR-code","title":"QR code","description":"This article explains how to create & work with a QR code field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/attachment","structured":{"contents":[{"content":"Attachment fields allow you to upload files to your records. You can upload any file type, and the file will be linked to the record. You can also upload multiple files to a single Attachment field record."},{"heading":"create-an-attachment-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-an-attachment-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-an-attachment-field","content":"Select the field type as Attachment from the dropdown."},{"heading":"create-an-attachment-field","content":"Click on Save Field button."},{"heading":"create-an-attachment-field","content":"type: info"},{"heading":"cell-display","content":"The cell display for Attachment field is either a clickable preview if file is an image in recognizable format or a file-type icon."},{"heading":"upload-files","content":"To upload files to an Attachment field,"},{"heading":"upload-files","content":"Click on the + icon in the cell, choose the file to upload and click on Upload button. OR"},{"heading":"upload-files","content":"Drag drop the file to the cell. OR"},{"heading":"upload-files","content":"Click on expand icon <>, choose the file to upload or drag-drop file; click on Upload button."},{"heading":"expand-modal","content":"Expand modal for Attachment field displays the list of files uploaded to the field. You can also upload files from the expand modal. To access expand modal, click on the expand icon <> in the cell."},{"heading":"expand-modal","content":"Expand modal supports the following actions:"},{"heading":"attach-files","content":"Click on Attach file(s) button \"<\"1\">\""},{"heading":"attach-files","content":"Choose the file(s) to upload"},{"heading":"delete-file","content":"Click on x icon \"<\"2\">\" to the top left of the image card to delete the file"},{"heading":"download-file","content":"Click on Download button \"<\"5\">\" to download the file"},{"heading":"bulk-download-files","content":"Select the files by clicking on the checkbox \"<\"3\">\" to the top left of the image card"},{"heading":"bulk-download-files","content":"Click on Bulk Download button \"<\"4\">\" to download the selected files"},{"heading":"rename-file","content":"Click on Rename button \"<\"5\">\" to rename the file"},{"heading":"rename-file","content":"Enter the new name in the input field"},{"heading":"rename-file","content":"Click on Rename button to save the new name"},{"heading":"rename-file","content":"type: note"},{"heading":"rename-file","content":"Rename file only renames the file in NocoDB display (expand record & tool tip on hover). It does not rename the file in the storage."},{"heading":"environment-variables","content":"In self-hosted version, you can configure the following environment variables to customize the behavior of Attachment field:"},{"heading":"environment-variables","content":"NC_ATTACHMENT_FIELD_SIZE: Maximum size of attachment files in bytes. Default: 20971520 (20 MiB)"},{"heading":"environment-variables","content":"NC_MAX_ATTACHMENTS_ALLOWED: Maximum number of attachments per cell. Default: 10"},{"heading":"environment-variables","content":"NC_SECURE_ATTACHMENTS: Allow accessing attachments only through pre-signed URLs. Default: false"},{"heading":"environment-variables","content":"NC_ATTACHMENT_EXPIRE_SECONDS: Expiry time for pre-signed URLs. Default: 7200 (2 hours)"},{"heading":"environment-variables","content":"All supported environment variables are described here."},{"heading":"related-articles","content":"Attaching a file from mobile"}],"headings":[{"id":"create-an-attachment-field","content":"Create an Attachment field"},{"id":"cell-display","content":"Cell display"},{"id":"upload-files","content":"Upload files"},{"id":"expand-modal","content":"Expand modal"},{"id":"attach-files","content":"Attach file(s)"},{"id":"delete-file","content":"Delete file"},{"id":"download-file","content":"Download file"},{"id":"bulk-download-files","content":"Bulk Download file(s)"},{"id":"rename-file","content":"Rename file"},{"id":"environment-variables","content":"Environment variables"},{"id":"related-articles","content":"Related articles"}]},"url":"/docs/product-docs/fields/field-types/custom-types/attachment","title":"Attachment","description":"This article explains how to create & work with an Attachment field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/barcode","structured":{"contents":[{"content":"Barcode is a custom field type that allows you to generate a barcode from a string value. This is useful for generating barcodes for things like URLs, phone numbers, or other data that can be represented as a string."},{"content":"The following field types are supported for the for reference field:"},{"content":"Formula"},{"content":"Single Line Text"},{"content":"Long Text"},{"content":"Phone Number"},{"content":"URL"},{"content":"Email"},{"heading":"create-a-barcode-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-barcode-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-barcode-field","content":"Select the field type as Barcode from the dropdown."},{"heading":"create-a-barcode-field","content":"Select the field to be used as the source for the barcode."},{"heading":"create-a-barcode-field","content":"Select the barcode type from the dropdown."},{"heading":"create-a-barcode-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"Cell displays the barcode generated from the source field. Click on the cell to open enlarged view of the QR code."},{"heading":"supported-barcode-types","content":"NocoDB supports the following barcode types for the barcode field type."},{"heading":"supported-barcode-types","content":"CODE128"},{"heading":"supported-barcode-types","content":"EAN-13"},{"heading":"supported-barcode-types","content":"EAN-8"},{"heading":"supported-barcode-types","content":"EAN-5"},{"heading":"supported-barcode-types","content":"EAN-2"},{"heading":"supported-barcode-types","content":"UPC (A)"},{"heading":"supported-barcode-types","content":"CODE39"},{"heading":"supported-barcode-types","content":"ITF-14"},{"heading":"supported-barcode-types","content":"MSI"},{"heading":"supported-barcode-types","content":"Pharma code"},{"heading":"supported-barcode-types","content":"Coda bar"},{"heading":"related-fields","content":"QR code"}],"headings":[{"id":"create-a-barcode-field","content":"Create a barcode field"},{"id":"cell-display","content":"Cell display"},{"id":"supported-barcode-types","content":"Supported barcode types"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/custom-types/barcode","title":"Barcode","description":"This article explains how to create & work with a Barcode field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/button","structured":{"contents":[{"content":"The Button Field allows users to create interactive buttons within their tables. These buttons can trigger specific actions, making workflows more dynamic and efficient. With the Button Field, you can navigate to external URLs, run custom webhooks, or even run custom scripts with a single click."},{"content":"NocoDB currently supports following actions for the Button Field:"},{"content":"Open URL: Opens a new tab with a URL generated by a formula within the button field. The URL can be static or dynamic based on the current record's data."},{"content":"Run Webhook: Trigger a webhook with the configured URL & custom payload. Payload can include data from the current record."},{"content":"Run Script: Execute a custom script that can perform various operations on the current record or the entire table. Current record information can be accessed using the row variable in the script."},{"content":"type: note"},{"heading":"create-a-button-field","content":"Click on the + icon to the right of the Fields header."},{"heading":"create-a-button-field","content":"In the dropdown modal, enter the field name (optional)."},{"heading":"create-a-button-field","content":"Select the field type as Button from the dropdown."},{"heading":"create-a-button-field","content":"Configure the button appearance settings as needed. This includes the button text, color, and icon."},{"heading":"create-a-button-field","content":"Select the action type from the dropdown."},{"heading":"create-a-button-field","content":"Configure the button action settings as needed. This depends on the action you want the button to perform"},{"heading":"create-a-button-field","content":"Open URL: Use the formula editor to create dynamic URLs."},{"heading":"create-a-button-field","content":"Run Webhook: Select a webhook from the dropdown OR create a new webhook by clicking on the + icon."},{"heading":"create-a-button-field","content":"Run Script: Select a script from the dropdown."},{"heading":"create-a-button-field","content":"Click on the Save Field button."},{"heading":"button-webhook","content":"type: note"},{"heading":"edit-webhook","content":"To edit a webhook, click on the Edit icon next to the webhook name in the Button field settings. This will open the webhook settings modal, where you can edit the webhook URL, method, headers, and payload. Click on the Save changes button to save the changes."},{"heading":"edit-webhook","content":"Created webhook can be accessed by using the Webhook section in details tab. For more details, refer to the following articles:"},{"heading":"edit-webhook","content":"Create webhook"},{"heading":"edit-webhook","content":"Edit webhook"},{"heading":"edit-webhook","content":"Delete webhook"},{"heading":"edit-webhook","content":"type: note"},{"heading":"button-script","content":"Also termed as \"Row Actions\", Button Scripts let you trigger pre-configured actions directly from a record in Grid / Kanban / Gallery views. Instead of manually editing fields to update values like status or stage, you can now perform repetitive updates in a single click."},{"heading":"button-script","content":"Each button is configured to execute a Frontend Script that updates the record or performs other automated actions. When a user clicks the button, the configured script runs in the context of that record."},{"heading":"button-script","content":"Sample Script to update a field value:"},{"heading":"conditional-buttons-","content":"type: note"},{"heading":"conditional-buttons-","content":"By default, a button is always enabled for every record in the table. With Visibility Conditions, you can control when a button is active on a per-row basis. When the conditions are not met for a particular record, the button appears disabled with a \"Conditions not met\" tooltip, preventing any accidental clicks."},{"heading":"conditional-buttons-","content":"This is useful when you want a button action to only be available under certain circumstances — for example, enabling an \"Approve\" button only when a status field is set to \"Pending\", or allowing a \"Send Invoice\" button only after the amount exceeds a threshold."},{"heading":"conditional-buttons-","content":"Visibility conditions work with all button action types — Open URL, Run Webhook, and Run Script."},{"heading":"setting-up-visibility-conditions","content":"Open the button field configuration (create a new button field or edit an existing one)."},{"heading":"setting-up-visibility-conditions","content":"Scroll down to the Visibility condition section and expand it."},{"heading":"setting-up-visibility-conditions","content":"Click Add filter to define one or more conditions based on fields in the current table."},{"heading":"setting-up-visibility-conditions","content":"Use Add filter group to combine multiple conditions with AND/OR logic."},{"heading":"setting-up-visibility-conditions","content":"Click Save Field to apply."},{"heading":"setting-up-visibility-conditions","content":"Once configured, each row in the table is evaluated against the defined conditions:"},{"heading":"setting-up-visibility-conditions","content":"Condition met: The button is enabled and clickable."},{"heading":"setting-up-visibility-conditions","content":"Condition not met: The button is disabled and displays a \"Conditions not met\" tooltip on hover."},{"heading":"editing-or-removing-visibility-conditions","content":"To modify existing conditions, open the button field configuration and update the filters in the Visibility condition section. To remove all conditions and make the button always active, clear all filters and save the field."},{"heading":"editing-or-removing-visibility-conditions","content":"type: note"}],"headings":[{"id":"create-a-button-field","content":"Create a Button Field"},{"id":"button-url","content":"Button URL"},{"id":"button-webhook","content":"Button Webhook"},{"id":"edit-webhook","content":"Edit Webhook"},{"id":"button-script","content":"Button Script"},{"id":"conditional-buttons-","content":"Conditional Buttons ☁"},{"id":"setting-up-visibility-conditions","content":"Setting up visibility conditions"},{"id":"editing-or-removing-visibility-conditions","content":"Editing or removing visibility conditions"}]},"url":"/docs/product-docs/fields/field-types/custom-types/button","title":"Button","description":"This article explains how to create & work with a Button field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/checkbox","structured":{"contents":[{"content":"The checkbox field type is used to store boolean values. It can be used to store a simple yes/no value, or true/false, or any other boolean value."},{"heading":"create-a-checkbox-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-checkbox-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-checkbox-field","content":"Select the field type as Checkbox from the dropdown."},{"heading":"create-a-checkbox-field","content":"Select icon for the field; defaults to check icon (Optional)."},{"heading":"create-a-checkbox-field","content":"Select color for the field; defaults to grey (Optional)."},{"heading":"create-a-checkbox-field","content":"Set default value for the field (Optional)."},{"heading":"create-a-checkbox-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"Cell displays the icon in the color selected for the field. A true value will be represented by a checked icon or a filled icon"},{"heading":"supported-icons","content":"NocoDB supports the following icons for the checkbox field type."},{"heading":"related-fields","content":"Rating"}],"headings":[{"id":"create-a-checkbox-field","content":"Create a checkbox field"},{"id":"cell-display","content":"Cell display"},{"id":"supported-icons","content":"Supported icons"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/custom-types/checkbox","title":"Checkbox","description":"This article explains how to create & work with a Checkbox field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/colour","structured":{"contents":[{"content":"type: info"},{"content":"The Colour field allows you to store and display colour values as hex codes (e.g. #FF5733). Each cell shows a colour swatch alongside an editable hex input, making it easy to visually identify and modify colours. A built-in colour picker with default and custom colour palettes is available for quick selection."},{"heading":"create-a-colour-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-colour-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-colour-field","content":"Select the field type as Colour from the dropdown."},{"heading":"create-a-colour-field","content":"Set default value for the field using the colour picker (Optional)."},{"heading":"create-a-colour-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"Each cell displays a colour swatch on the left and the hex value on the right. Clicking the swatch opens the colour picker, and the hex value can be edited directly in the text input."},{"heading":"setting-value-for-the-field","content":"Click on the colour swatch to open the colour picker and select a colour."},{"heading":"setting-value-for-the-field","content":"Type a hex value directly into the text input (e.g. #FF5733 or FF5733)."},{"heading":"setting-value-for-the-field","content":"Paste a hex value into the text input."},{"heading":"unsetting-value-for-the-field","content":"Clear the text input to remove the colour value."},{"heading":"unsetting-value-for-the-field","content":"Key in Delete to clear the colour value for the field."},{"heading":"colour-picker","content":"The colour picker provides two tabs:"},{"heading":"colour-picker","content":"Default colours - A palette of commonly used colours for quick selection."},{"heading":"colour-picker","content":"Custom - A full colour wheel with hue, saturation, and brightness controls, plus a hex input for precise colour entry."},{"heading":"colour-picker","content":"Press Enter to save the selected colour, or Escape to cancel."},{"heading":"filtering","content":"Colour fields support text-based filtering on the hex value. The filter input includes a colour swatch preview alongside the text input for visual reference."},{"heading":"related-fields","content":"Checkbox"},{"heading":"related-fields","content":"Rating"}],"headings":[{"id":"create-a-colour-field","content":"Create a colour field"},{"id":"cell-display","content":"Cell display"},{"id":"setting-value-for-the-field","content":"Setting value for the field"},{"id":"unsetting-value-for-the-field","content":"Unsetting value for the field"},{"id":"colour-picker","content":"Colour picker"},{"id":"filtering","content":"Filtering"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/custom-types/colour","title":"Colour ☁","description":"This article explains how to create & work with a Colour field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/geometry","structured":{"contents":[{"heading":"create-a-geometry-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-geometry-field","content":"On the dropdown modal, enter the field name (Optional)"},{"heading":"create-a-geometry-field","content":"Select the field type as Geometry from the dropdown."},{"heading":"create-a-geometry-field","content":"Configure default value for the field (Optional)"},{"heading":"create-a-geometry-field","content":"Click on Save Field button."}],"headings":[{"id":"create-a-geometry-field","content":"Create a geometry field"}]},"url":"/docs/product-docs/fields/field-types/custom-types/geometry","title":"Geometry","description":"This article explains how to create & work with a Geometry field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/json","structured":{"contents":[{"content":"JSON is a custom field type that allows you to store JSON data in a field. Useful for storing data that can be represented as a JSON object, like API Response, or a set of key-value pairs."},{"heading":"create-a-json-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-json-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-json-field","content":"Select the field type as JSON from the dropdown."},{"heading":"create-a-json-field","content":"Configure default value for the field (Optional)"},{"heading":"create-a-json-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"Cell displays the JSON data stored in the field. Click on expand record icon to open the JSON data in an editor modal."}],"headings":[{"id":"create-a-json-field","content":"Create a JSON field"},{"id":"cell-display","content":"Cell display"}]},"url":"/docs/product-docs/fields/field-types/custom-types/json","title":"JSON"},{"_id":"/docs/product-docs/fields/field-types/custom-types/rating","structured":{"contents":[{"content":"The Rating field allows you to capture and display ratings using a visual scale. The scale can be customized with different icons, colors, and maximum values. This makes it ideal for collecting feedback or evaluations in a visually intuitive way."},{"heading":"create-a-checkbox-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-checkbox-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-checkbox-field","content":"Select the field type as Rating from the dropdown."},{"heading":"create-a-checkbox-field","content":"Select icon for the field; defaults to star icon (Optional)."},{"heading":"create-a-checkbox-field","content":"Configure max count for the field; defaults to 5 (Optional)."},{"heading":"create-a-checkbox-field","content":"Select color for the field; defaults to grey (Optional)."},{"heading":"create-a-checkbox-field","content":"Set default value for the field (Optional)."},{"heading":"create-a-checkbox-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"Cell displays the ratings in the color & icon selected for the field."},{"heading":"setting-value-for-the-field","content":"Click on the nth rating icon to set the rating value for the field as n."},{"heading":"setting-value-for-the-field","content":"Key in the rating value in the cell to set the rating value for the field."},{"heading":"setting-value-for-the-field","content":"Paste the rating value in the cell to set the rating value for the field."},{"heading":"unsetting-value-for-the-field","content":"Click on the nth rating icon again to set the rating value for the field as 0."},{"heading":"unsetting-value-for-the-field","content":"Key in 0 in the cell to set the rating value for the field as 0."},{"heading":"unsetting-value-for-the-field","content":"Key in Delete to set the rating value for the field as 0."},{"heading":"supported-icons","content":"NocoDB supports the following icons for the rating field type."},{"heading":"related-fields","content":"Checkbox"}],"headings":[{"id":"create-a-checkbox-field","content":"Create a checkbox field"},{"id":"cell-display","content":"Cell display"},{"id":"setting-value-for-the-field","content":"Setting value for the field"},{"id":"unsetting-value-for-the-field","content":"Unsetting value for the field"},{"id":"supported-icons","content":"Supported icons"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/custom-types/rating","title":"Rating","description":"This article explains how to create & work with a Rating field."},{"_id":"/docs/product-docs/fields/field-types/custom-types/specific-db-type","structured":{"contents":[{"heading":"create-a-specific-db-type-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-specific-db-type-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-specific-db-type-field","content":"Select the field type as Specific DB Type from the dropdown."},{"heading":"create-a-specific-db-type-field","content":"Configure default value for the field (Optional)"},{"heading":"create-a-specific-db-type-field","content":"Provide DB specific data type configurations"},{"heading":"create-a-specific-db-type-field","content":"Click on Save Field button."},{"heading":"advanced-field-attributes","content":"NN Not Null : Ensures that a column cannot have a NULL value, requiring that a value must always be provided."},{"heading":"advanced-field-attributes","content":"PK Primary Key : Uniquely identifies each record in a table."},{"heading":"advanced-field-attributes","content":"AI Auto Increment : Automatically generates a unique number for each new record, typically used with primary keys."},{"heading":"advanced-field-attributes","content":"UN Unsigned : Ensures that a column can only store non-negative numbers, commonly used for counters, identifiers, or monetary values."},{"heading":"advanced-field-attributes","content":"AU Auto Update : Automatically updates a column to the current timestamp when a record is updated, often used for timestamp or datetime columns."},{"heading":"advanced-field-attributes","content":":::note\nSpecific DB type is available only for external Data source connections\n:::"}],"headings":[{"id":"create-a-specific-db-type-field","content":"Create a Specific DB Type field"},{"id":"advanced-field-attributes","content":"Advanced field attributes"}]},"url":"/docs/product-docs/fields/field-types/custom-types/specific-db-type","title":"Specific DB type","description":"This article explains how to create & work with a Specific DB Type field."},{"_id":"/docs/product-docs/fields/field-types/date-time-based/created-time","structured":{"contents":[{"content":"Since version v0.204.0 (Jan 2024), NocoDB internally captures the time when record was created. This information is stored as a system field in the database & is hidden in the table by default. To view this information on the UI, you can either enable Show System Fields OR create a Created Time field manually by following the steps below."},{"content":"Default system field can be only hidden from UI. It cannot be modified, duplicated or deleted."},{"content":"type: note"},{"content":"When connected to an external database, CreatedTime field is not created automatically. You can create a CreatedTime field manually by following the steps below."},{"content":"CreatedTime field is empty indicates the record predates the created at feature (v0.204.0, Jan 2024). Prior to this feature release, it was possible to remove this from the table."},{"heading":"create-a-createdtime-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-createdtime-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-createdtime-field","content":"Select the field type as CreatedTime from the dropdown."},{"heading":"create-a-createdtime-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"CreatedTime field is displayed as a read-only field in the table view. It is displayed as a date & time string in the format DD MMM YYYY, HH:mm."},{"heading":"related-fields","content":"Last Modified Time"}],"headings":[{"id":"create-a-createdtime-field","content":"Create a CreatedTime field"},{"id":"cell-display","content":"Cell display"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/date-time-based/created-time","title":"Created Time","description":"This article explains how to create & work with a Created Time field."},{"_id":"/docs/product-docs/fields/field-types/date-time-based/date-time","structured":{"contents":[{"content":"Date Time field type is used to store both date and time values in a single field."},{"heading":"create-a-date-time-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-date-time-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-date-time-field","content":"Select the field type as DateTime from the dropdown."},{"heading":"create-a-date-time-field","content":"Configure Date Format"},{"heading":"create-a-date-time-field","content":"Configure Time Format"},{"heading":"create-a-date-time-field","content":"Configure default value (Optional)"},{"heading":"create-a-date-time-field","content":"Click on Save Field button."},{"heading":"supported-date-formats","content":"Format"},{"heading":"supported-date-formats","content":"Example"},{"heading":"supported-date-formats","content":"YYYY-MM-DD"},{"heading":"supported-date-formats","content":"2023-09-22"},{"heading":"supported-date-formats","content":"YYYY/MM/DD"},{"heading":"supported-date-formats","content":"2023/09/22"},{"heading":"supported-date-formats","content":"DD-MM-YYYY"},{"heading":"supported-date-formats","content":"22-09-2023"},{"heading":"supported-date-formats","content":"MM-DD-YYYY"},{"heading":"supported-date-formats","content":"09-22-2023"},{"heading":"supported-date-formats","content":"DD/MM/YYYY"},{"heading":"supported-date-formats","content":"22/09/2023"},{"heading":"supported-date-formats","content":"MM/DD/YYYY"},{"heading":"supported-date-formats","content":"09/22/2023"},{"heading":"supported-date-formats","content":"DD MM YYYY"},{"heading":"supported-date-formats","content":"22 09 2023"},{"heading":"supported-date-formats","content":"MM DD YYYY"},{"heading":"supported-date-formats","content":"09 22 2023"},{"heading":"supported-date-formats","content":"YYYY MM DD"},{"heading":"supported-date-formats","content":"2023 09 22"},{"heading":"supported-date-formats","content":"DD MMM YYYY"},{"heading":"supported-date-formats","content":"22 JAN 2024"},{"heading":"supported-date-formats","content":"DD MMM YY"},{"heading":"supported-date-formats","content":"22 JAN 24"},{"heading":"supported-date-formats","content":"DD.MM.YYYY"},{"heading":"supported-date-formats","content":"15.09.2024"},{"heading":"supported-date-formats","content":"DD.MM.YY"},{"heading":"supported-date-formats","content":"15.09.24"},{"heading":"supported-time-formats","content":"Format"},{"heading":"supported-time-formats","content":"Example"},{"heading":"supported-time-formats","content":"HH:mm:ss"},{"heading":"supported-time-formats","content":"12:45:30"},{"heading":"supported-time-formats","content":"HH:mm"},{"heading":"supported-time-formats","content":"14:20"},{"heading":"related-fields","content":"Date"},{"heading":"related-fields","content":"Time"},{"heading":"related-fields","content":"Duration"}],"headings":[{"id":"create-a-date-time-field","content":"Create a date time field"},{"id":"supported-date-formats","content":"Supported date formats"},{"id":"supported-time-formats","content":"Supported time formats"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/date-time-based/date-time","title":"Date Time","description":"This article explains how to create & work with a Date Time field."},{"_id":"/docs/product-docs/fields/field-types/date-time-based/date","structured":{"contents":[{"content":"Date field type is used to store date values. NocoDB supports a wide range of date formats, as detailed in the table below."},{"heading":"create-a-date-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-date-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-date-field","content":"Select the field type as Date from the dropdown."},{"heading":"create-a-date-field","content":"Configure Date Format"},{"heading":"create-a-date-field","content":"Configure default value (Optional)"},{"heading":"create-a-date-field","content":"Click on Save Field button."},{"heading":"supported-date-formats","content":"Format"},{"heading":"supported-date-formats","content":"Example"},{"heading":"supported-date-formats","content":"YYYY-MM-DD"},{"heading":"supported-date-formats","content":"2023-09-22"},{"heading":"supported-date-formats","content":"YYYY/MM/DD"},{"heading":"supported-date-formats","content":"2023/09/22"},{"heading":"supported-date-formats","content":"DD-MM-YYYY"},{"heading":"supported-date-formats","content":"22-09-2023"},{"heading":"supported-date-formats","content":"MM-DD-YYYY"},{"heading":"supported-date-formats","content":"09-22-2023"},{"heading":"supported-date-formats","content":"DD/MM/YYYY"},{"heading":"supported-date-formats","content":"22/09/2023"},{"heading":"supported-date-formats","content":"MM/DD/YYYY"},{"heading":"supported-date-formats","content":"09/22/2023"},{"heading":"supported-date-formats","content":"DD MM YYYY"},{"heading":"supported-date-formats","content":"22 09 2023"},{"heading":"supported-date-formats","content":"MM DD YYYY"},{"heading":"supported-date-formats","content":"09 22 2023"},{"heading":"supported-date-formats","content":"YYYY MM DD"},{"heading":"supported-date-formats","content":"2023 09 22"},{"heading":"supported-date-formats","content":"DD MMM YYYY"},{"heading":"supported-date-formats","content":"22 JAN 2024"},{"heading":"supported-date-formats","content":"DD MMM YY"},{"heading":"supported-date-formats","content":"22 JAN 24"},{"heading":"supported-date-formats","content":"DD.MM.YYYY"},{"heading":"supported-date-formats","content":"15.09.2024"},{"heading":"supported-date-formats","content":"DD.MM.YY"},{"heading":"supported-date-formats","content":"15.09.24"},{"heading":"related-fields","content":"DateTime"},{"heading":"related-fields","content":"Time"},{"heading":"related-fields","content":"Duration"}],"headings":[{"id":"create-a-date-field","content":"Create a date field"},{"id":"supported-date-formats","content":"Supported date formats"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/date-time-based/date","title":"Date","description":"This article explains how to create & work with a Date field."},{"_id":"/docs/product-docs/fields/field-types/date-time-based/duration","structured":{"contents":[{"content":"Duration field type is used to store duration of time in seconds or minutes. Different formats are supported by NocoDB, as detailed in the table below."},{"heading":"create-a-duration-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-duration-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-duration-field","content":"Select the field type as Duration from the dropdown."},{"heading":"create-a-duration-field","content":"Configure Duration Format"},{"heading":"create-a-duration-field","content":"Configure default value (Optional)"},{"heading":"create-a-duration-field","content":"Click on Save Field button."},{"heading":"supported-duration-formats","content":"Format"},{"heading":"supported-duration-formats","content":"Example"},{"heading":"supported-duration-formats","content":"HH:mm"},{"heading":"supported-duration-formats","content":"14:20"},{"heading":"supported-duration-formats","content":"HH:mm:ss"},{"heading":"supported-duration-formats","content":"12:45:30"},{"heading":"supported-duration-formats","content":"HH:mm:ss.s"},{"heading":"supported-duration-formats","content":"12:45:30.5"},{"heading":"supported-duration-formats","content":"HH:mm.ss.ss"},{"heading":"supported-duration-formats","content":"12:45.30.50"},{"heading":"supported-duration-formats","content":"HH:mm.ss.sss"},{"heading":"supported-duration-formats","content":"12:45.30.500"},{"heading":"related-fields","content":"DateTime"},{"heading":"related-fields","content":"Date"},{"heading":"related-fields","content":"Time"}],"headings":[{"id":"create-a-duration-field","content":"Create a duration field"},{"id":"supported-duration-formats","content":"Supported duration formats"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/date-time-based/duration","title":"Duration","description":"This article explains how to create & work with a Duration field."},{"_id":"/docs/product-docs/fields/field-types/date-time-based/last-modified-time","structured":{"contents":[{"content":"Since version v0.204.0 (Jan 2024), NocoDB internally captures the time when record was modified. This information is stored as a system field in the database & is hidden in the table by default. To view this information on the UI, you can either enable Show System Fields OR create a Last Modified Time field manually by following the steps below."},{"content":"Default system field can be only hidden from UI. It cannot be modified, duplicated or deleted."},{"content":"type: note"},{"content":"When connected to an external database, LastModifiedTime field is not created automatically. You can create a LastModifiedTime field manually by following the steps below."},{"content":"LastModifiedTime field is empty indicates"},{"content":"the record predates the LastModifiedTime feature (v0.204.0, Jan 2024). Prior to this feature release, it was possible to remove the LastModifiedTime field from the table."},{"content":"the record was never modified."},{"content":"external database connection : information is captured only after the field is explicitly created."},{"heading":"create-a-lastmodifiedtime-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-lastmodifiedtime-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-lastmodifiedtime-field","content":"Select the field type as LastModifiedTime from the dropdown."},{"heading":"create-a-lastmodifiedtime-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"LastModifiedTime field is displayed as a read-only field in the table view. It is displayed as a date & time string in the format DD MMM YYYY, HH:mm."},{"heading":"related-fields","content":"Created Time"}],"headings":[{"id":"create-a-lastmodifiedtime-field","content":"Create a LastModifiedTime field"},{"id":"cell-display","content":"Cell display"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/date-time-based/last-modified-time","title":"Last Modified Time","description":"This article explains how to create & work with a last modified time field."},{"_id":"/docs/product-docs/fields/field-types/date-time-based/time","structured":{"contents":[{"content":"Time field type is used to store time values in a single field. Time formats supported by NocoDB are listed in the table below."},{"heading":"create-a-time-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-time-field","content":"On the dropdown modal, enter the field name (Optional)"},{"heading":"create-a-time-field","content":"Select the field type as Time from the dropdown."},{"heading":"create-a-time-field","content":"Configure default value (Optional)"},{"heading":"create-a-time-field","content":"Click on Save Field button."},{"heading":"supported-time-formats","content":"Time format: HH:mm AM/PM (12-hour format)"},{"heading":"related-fields","content":"DateTime"},{"heading":"related-fields","content":"Date"},{"heading":"related-fields","content":"Duration"}],"headings":[{"id":"create-a-time-field","content":"Create a time field"},{"id":"supported-time-formats","content":"Supported time formats"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/date-time-based/time","title":"Time","description":"This article explains how to create & work with a Time field."},{"_id":"/docs/product-docs/fields/field-types/formula/array-functions","structured":{"contents":[{"content":"This cheat sheet provides a quick reference guide for various array functions commonly used in data analysis and programming. Each function is accompanied by its syntax, a sample usage, and a brief description."},{"heading":"arraysort","content":"The ARRAYSORT function sorts an array result from links or lookup."},{"heading":"remark","content":"This function sorts an array result given from links or lookup field.\nThe 2nd parameter is the sort order, \"asc\" or \"desc\" to sort the values ascending or descending, with \"asc\" as the default if not provided."},{"heading":"arrayunique","content":"The ARRAYUNIQUE function returns unique items from the given array."},{"heading":"remark-1","content":"This function removes duplicate values, leaving only unique items from the given array."},{"heading":"arraycompact","content":"The ARRAYCOMPACT function removes null and empty from result."},{"heading":"remark-2","content":"This function removes null and empty, leaving only visible items from given array."},{"heading":"arrayslice","content":"The ARRAYSLICE function takes partial array values from start to (optional) end."},{"heading":"remark-3","content":"This function takes the array value partially, from start to (optional) end.\n2nd parameter is the start index. Index start at 1.\n3rd parameter is the end index. In the example above it'll take array value 2 and 3, giving a total 2 items.\nOmitting end index will take the rest of items starting from start index.\nEither start or end index cannot be negative. End index need to be bigger or equal with start index. Doing so will return empty as result."}],"headings":[{"id":"arraysort","content":"ARRAYSORT"},{"id":"syntax","content":"Syntax"},{"id":"sample","content":"Sample"},{"id":"remark","content":"Remark"},{"id":"arrayunique","content":"ARRAYUNIQUE"},{"id":"syntax-1","content":"Syntax"},{"id":"sample-1","content":"Sample"},{"id":"remark-1","content":"Remark"},{"id":"arraycompact","content":"ARRAYCOMPACT"},{"id":"syntax-2","content":"Syntax"},{"id":"sample-2","content":"Sample"},{"id":"remark-2","content":"Remark"},{"id":"arrayslice","content":"ARRAYSLICE"},{"id":"syntax-3","content":"Syntax"},{"id":"sample-3","content":"Sample"},{"id":"remark-3","content":"Remark"}]},"url":"/docs/product-docs/fields/field-types/formula/array-functions","title":"Array functions","description":"This article explains various array functions that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/formula/conditional-expressions","structured":{"contents":[{"content":"This cheat sheet provides a quick reference guide for various conditional expressions commonly used in data analysis and programming. Each expression is accompanied by its syntax, a sample usage, and a brief description."},{"heading":"if","content":"The IF function in programming and spreadsheet formulas provides a way to perform conditional operations. It evaluates a condition and returns a value if the condition is TRUE, or another value if the condition is FALSE."},{"heading":"switch","content":"The SWITCH function is a versatile tool for handling multiple cases. It evaluates the given expression (expr) against a series of patterns and returns the corresponding value of the first matching pattern. If none match, it returns the default value."},{"heading":"and","content":"The AND function is a logical operator that returns TRUE only if all its conditions are true."},{"heading":"syntax-2","content":"Comparison operators : ==, !=, >, <, >=, <="},{"heading":"or","content":"The OR function is another logical operator, returning TRUE if at least one of its conditions is true."},{"heading":"syntax-3","content":"Comparison operators : ==, !=, >, <, >=, <="},{"heading":"sample-3","content":"Logical operators, along with Numerical operators can be used to build conditional expressions."},{"heading":"sample-3","content":"Examples:"}],"headings":[{"id":"if","content":"IF"},{"id":"syntax","content":"Syntax"},{"id":"sample","content":"Sample"},{"id":"switch","content":"SWITCH"},{"id":"syntax-1","content":"Syntax"},{"id":"sample-1","content":"Sample"},{"id":"and","content":"AND"},{"id":"syntax-2","content":"Syntax"},{"id":"sample-2","content":"Sample"},{"id":"or","content":"OR"},{"id":"syntax-3","content":"Syntax"},{"id":"sample-3","content":"Sample"}]},"url":"/docs/product-docs/fields/field-types/formula/conditional-expressions","title":"Conditional expressions","description":"This article explains various conditional expressions that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/formula/date-functions","structured":{"contents":[{"content":"This cheat sheet provides a quick reference guide for various date functions commonly used in data analysis and programming. Each function is accompanied by its syntax, a sample usage, and a brief description."},{"heading":"datetime_diff","content":"The DATETIME_DIFF function calculates the difference between two dates in various units."},{"heading":"remark","content":"This function compares two dates and returns the difference in the specified unit. Positive integers indicate that the second date is in the past compared to the first, and vice versa for negative values."},{"heading":"dateadd","content":"The DATEADD function adds a specified value to a date or datetime."},{"heading":"remark-1","content":"This function supports date and datetime fields, can handle negative values, and works with units down to seconds."},{"heading":"now","content":"The NOW function returns the current time and day."},{"heading":"remark-2","content":"This function provides the current time and day, supporting datetime fields and negative values."},{"heading":"weekday","content":"The WEEKDAY function returns the day of the week as an integer."},{"heading":"remark-3","content":"Returns the day of the week as an integer between 0 and 6 (inclusive), with Monday as the default start day. The start day of the week can be optionally changed by specifying it as the second argument."},{"heading":"datestr","content":"The DATESTR function converts a date or datetime field into a string in \"YYYY-MM-DD\" format."},{"heading":"remark-4","content":"This function converts a date or datetime field into a string in \"YYYY-MM-DD\" format, ignoring the time part."},{"heading":"day","content":"The DAY function returns the day of the month as an integer."},{"heading":"remark-5","content":"This function returns the day of the month as an integer between 1 and 31 (inclusive). Note that the day information retrieved is based on the timezone of the server (GMT by default). If the browser timezone is different from the server timezone, the day value may differ."},{"heading":"year","content":"The YEAR function returns the year as an integer."},{"heading":"remark-6","content":"This function returns the year as an integer. The year information retrieved is based on the timezone of the server (GMT by default). If the browser timezone is different from the server timezone, the year value may differ."},{"heading":"month","content":"The MONTH function returns the month of the year as an integer."},{"heading":"remark-7","content":"This function returns the month of the year as an integer between 1 and 12 (inclusive). Note that the month information retrieved is based on the timezone of the server (GMT by default). If the browser timezone is different from the server timezone, the month value may differ."},{"heading":"hour","content":"The HOUR function returns the hour of the day as an integer."},{"heading":"remark-8","content":"This function returns the hour of the day as an integer between 0 and 23 (inclusive). Hour information retrieved is based on a 24-hour clock & will be based on the timezone of the server (GMT by default). Note that, if browser timezone is different from the server timezone, the hour value may differ."}],"headings":[{"id":"datetime_diff","content":"DATETIME_DIFF"},{"id":"syntax","content":"Syntax"},{"id":"sample","content":"Sample"},{"id":"remark","content":"Remark"},{"id":"dateadd","content":"DATEADD"},{"id":"syntax-1","content":"Syntax"},{"id":"sample-1","content":"Sample"},{"id":"conditional-example","content":"Conditional Example"},{"id":"remark-1","content":"Remark"},{"id":"now","content":"NOW"},{"id":"syntax-2","content":"Syntax"},{"id":"sample-2","content":"Sample"},{"id":"conditional-example-1","content":"Conditional Example"},{"id":"remark-2","content":"Remark"},{"id":"weekday","content":"WEEKDAY"},{"id":"syntax-3","content":"Syntax"},{"id":"sample-3","content":"Sample"},{"id":"remark-3","content":"Remark"},{"id":"datestr","content":"DATESTR"},{"id":"syntax-4","content":"Syntax"},{"id":"sample-4","content":"Sample"},{"id":"remark-4","content":"Remark"},{"id":"day","content":"DAY"},{"id":"syntax-5","content":"Syntax"},{"id":"sample-5","content":"Sample"},{"id":"remark-5","content":"Remark"},{"id":"year","content":"YEAR"},{"id":"syntax-6","content":"Syntax"},{"id":"sample-6","content":"Sample"},{"id":"remark-6","content":"Remark"},{"id":"month","content":"MONTH"},{"id":"syntax-7","content":"Syntax"},{"id":"sample-7","content":"Sample"},{"id":"remark-7","content":"Remark"},{"id":"hour","content":"HOUR"},{"id":"syntax-8","content":"Syntax"},{"id":"sample-8","content":"Sample"},{"id":"remark-8","content":"Remark"}]},"url":"/docs/product-docs/fields/field-types/formula/date-functions","title":"Date functions","description":"This article explains various date functions that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/formula/formula-result-formatting","structured":{"contents":[{"content":"Formatting the output of formulas allows you to tailor how your data is displayed based on the type of result. Various formatting options are available to ensure that your data is presented in the most useful and visually appealing way."},{"heading":"decimal","content":"The Decimal format is used to display results with a specified number of decimal places, allowing you to define the precision."},{"heading":"currency","content":"The Currency format is ideal for displaying monetary values, with the option to set and display a specific currency symbol."},{"heading":"percent","content":"The Percent format displays results as a number and includes an option to configure it as a progress bar."},{"heading":"rating","content":"The Rating format is ideal for ratings on a scale from 1 to 10. It allows you to customize the icon, color, and choose the maximum rating value within that range."},{"heading":"date-time","content":"The Date Time format displays both date and time values."},{"heading":"date","content":"The Date format displays only the date values, with a wide range of date formats available."},{"heading":"time","content":"The Time format displays the result in either 12-hour or 24-hour time format."},{"heading":"email","content":"The Email format is used to display results as clickable email links. When an email address is detected in the formula output, it will be formatted as a mailto link, allowing users to click and open their default email client to send an email."},{"heading":"url","content":"The URL format is designed to display results as clickable web links. When a valid URL is recognized in the formula output, it will be formatted as a hyperlink, enabling users to click and navigate directly to the specified web address."},{"heading":"phone-number","content":"The Phone number format is ideal for displaying the results as phone numbers."},{"heading":"checkbox","content":"When NocoDB recognizes a formula's output as a Boolean result, you can apply the Checkbox format to display it in a manner similar to a checkbox field. You can customize icon and color as required."}],"headings":[{"id":"numeric-formats","content":"Numeric Formats"},{"id":"decimal","content":"Decimal"},{"id":"currency","content":"Currency"},{"id":"percent","content":"Percent"},{"id":"rating","content":"Rating"},{"id":"date-formats","content":"Date Formats"},{"id":"date-time","content":"Date Time"},{"id":"date","content":"Date"},{"id":"time","content":"Time"},{"id":"text-formats","content":"Text Formats"},{"id":"email","content":"Email"},{"id":"url","content":"URL"},{"id":"phone-number","content":"Phone Number"},{"id":"boolean-format","content":"Boolean Format"},{"id":"checkbox","content":"Checkbox"}]},"url":"/docs/product-docs/fields/field-types/formula/formula-result-formatting","title":"Formatting Formula Results","description":"This article explains how to format the output of formulas in NocoDB, covering various formatting options based on the result type."},{"_id":"/docs/product-docs/fields/field-types/formula/formula","structured":{"contents":[{"heading":"create-a-formula-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-formula-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-formula-field","content":"Select the field type as Formula from the dropdown."},{"heading":"create-a-formula-field","content":"Insert required formula"},{"heading":"create-a-formula-field","content":"Click on Save Field button."},{"heading":"create-a-formula-field","content":"type: tip"},{"heading":"create-a-formula-field","content":"You can use explicit numerical values/ strings as needed, e.g. 123 (numeric) or \"123\" (string)."},{"heading":"create-a-formula-field","content":"You can reference field names in equation with {}, e.g. {field name}"},{"heading":"create-a-formula-field","content":"Nested formula (formula equation referring to another formula field) is supported"},{"heading":"create-a-formula-field","content":"type: info"},{"heading":"supported-formula-functions","content":"Numeric and Logical Operators"},{"heading":"supported-formula-functions","content":"Numeric Functions"},{"heading":"supported-formula-functions","content":"String Functions"},{"heading":"supported-formula-functions","content":"Date Functions"},{"heading":"supported-formula-functions","content":"Array Functions"},{"heading":"supported-formula-functions","content":"Generic Functions"},{"heading":"supported-formula-functions","content":"JSON Functions"},{"heading":"supported-formula-functions","content":"Conditional Expressions"}],"headings":[{"id":"create-a-formula-field","content":"Create a formula field"},{"id":"supported-formula-functions","content":"Supported formula functions"}]},"url":"/docs/product-docs/fields/field-types/formula/formula","title":"Formula","description":"This article explains how to create & work with a Formula field."},{"_id":"/docs/product-docs/fields/field-types/formula/generic-functions","structured":{"contents":[{"heading":"record_id","content":"The RECORD_ID function returns the unique identifier of the record."}],"headings":[{"id":"system-functions","content":"System Functions"},{"id":"record_id","content":"RECORD_ID"},{"id":"syntax","content":"Syntax"},{"id":"sample","content":"Sample"}]},"url":"/docs/product-docs/fields/field-types/formula/generic-functions","title":"Generic functions","description":"This article explains system functions & miscellaneous functions that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/formula/json-functions","structured":{"contents":[{"content":"This sheet provides a quick reference guide for various JSON functions commonly used in data analysis and programming. Each function is accompanied by its syntax, a sample usage, and a brief description."},{"heading":"json_extract","content":"The JSON_EXTRACT function extracts a value from a JSON string using a jq-like syntax."},{"heading":"remark","content":"json_string must be a valid JSON string."},{"heading":"remark","content":"path follows jq-like dot notation (e.g., .a.b to access nested values)."},{"heading":"remark","content":"Returns the extracted value as a string."}],"headings":[{"id":"json_extract","content":"JSON_EXTRACT"},{"id":"syntax","content":"Syntax"},{"id":"sample","content":"Sample"},{"id":"remark","content":"Remark"}]},"url":"/docs/product-docs/fields/field-types/formula/json-functions","title":"JSON functions","description":"This article explains various JSON functions that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/formula/numeric-functions","structured":{"contents":[{"content":"This cheat sheet provides a quick reference guide for various mathematical functions commonly used in data analysis and programming. Each function is accompanied by its syntax, a sample usage, and a brief description."},{"heading":"abs","content":"The ABS function returns the distance of the number from zero on the number line, ensuring that the result is non-negative."},{"heading":"add","content":"The ADD function computes the total of multiple numbers provided as arguments."},{"heading":"avg","content":"The AVG function calculates the mean of a set of numerical values."},{"heading":"ceiling","content":"The CEILING function rounds a number up to the nearest integer greater than or equal to the input."},{"heading":"count","content":"The COUNT function calculates the number of numeric arguments provided."},{"heading":"counta","content":"The COUNTA function counts the number of non-empty arguments provided."},{"heading":"countall","content":"The COUNTALL function calculates the total number of arguments, both numeric and non-numeric."},{"heading":"even","content":"The EVEN function rounds positive values up to the nearest even number and negative values down to the nearest even number."},{"heading":"exp","content":"The EXP function returns 'e' raised to the power of a given number."},{"heading":"floor","content":"The FLOOR function rounds a number down to the nearest integer."},{"heading":"int","content":"The INT function truncates the decimal part, returning the integer portion of a number."},{"heading":"log","content":"The LOG function computes the logarithm of a number to a specified base. (default = e)."},{"heading":"max","content":"The MAX function identifies the highest value from a set of numbers."},{"heading":"min","content":"The MIN function identifies the lowest value from a set of numbers."},{"heading":"mod","content":"The MOD function calculates the remainder when dividing (integer division) one number by another."},{"heading":"odd","content":"The ODD function rounds positive values up to the nearest odd number and negative values down to the nearest odd number."},{"heading":"power","content":"The POWER function raises a given base to a specified exponent."},{"heading":"round","content":"The ROUND function is used to round a number to a specified number of decimal places (precision). Default value for precision is 0."},{"heading":"rounddown","content":"The ROUNDDOWN function rounds a number down to a specified number of decimal places (precision). Default value for precision is 0."},{"heading":"roundup","content":"The ROUNDUP function rounds a number up to a specified number of decimal places (precision). Default value for precision is 0."},{"heading":"sqrt","content":"The SQRT function calculates the square root of a given number."},{"heading":"value","content":"The VALUE function is used to extract the numeric value from a string (after handling % or - accordingly)."}],"headings":[{"id":"abs","content":"ABS"},{"id":"syntax","content":"Syntax"},{"id":"sample","content":"Sample"},{"id":"add","content":"ADD"},{"id":"syntax-1","content":"Syntax"},{"id":"sample-1","content":"Sample"},{"id":"avg","content":"AVG"},{"id":"syntax-2","content":"Syntax"},{"id":"sample-2","content":"Sample"},{"id":"ceiling","content":"CEILING"},{"id":"syntax-3","content":"Syntax"},{"id":"sample-3","content":"Sample"},{"id":"count","content":"COUNT"},{"id":"syntax-4","content":"Syntax"},{"id":"sample-4","content":"Sample"},{"id":"counta","content":"COUNTA"},{"id":"syntax-5","content":"Syntax"},{"id":"sample-5","content":"Sample"},{"id":"countall","content":"COUNTALL"},{"id":"syntax-6","content":"Syntax"},{"id":"sample-6","content":"Sample"},{"id":"even","content":"EVEN"},{"id":"syntax-7","content":"Syntax"},{"id":"sample-7","content":"Sample"},{"id":"exp","content":"EXP"},{"id":"syntax-8","content":"Syntax"},{"id":"sample-8","content":"Sample"},{"id":"floor","content":"FLOOR"},{"id":"syntax-9","content":"Syntax"},{"id":"sample-9","content":"Sample"},{"id":"int","content":"INT"},{"id":"syntax-10","content":"Syntax"},{"id":"sample-10","content":"Sample"},{"id":"log","content":"LOG"},{"id":"syntax-11","content":"Syntax"},{"id":"sample-11","content":"Sample"},{"id":"max","content":"MAX"},{"id":"syntax-12","content":"Syntax"},{"id":"sample-12","content":"Sample"},{"id":"min","content":"MIN"},{"id":"syntax-13","content":"Syntax"},{"id":"sample-13","content":"Sample"},{"id":"mod","content":"MOD"},{"id":"syntax-14","content":"Syntax"},{"id":"sample-14","content":"Sample"},{"id":"odd","content":"ODD"},{"id":"syntax-15","content":"Syntax"},{"id":"sample-15","content":"Sample"},{"id":"power","content":"POWER"},{"id":"syntax-16","content":"Syntax"},{"id":"sample-16","content":"Sample"},{"id":"round","content":"ROUND"},{"id":"syntax-17","content":"Syntax"},{"id":"sample-17","content":"Sample"},{"id":"rounddown","content":"ROUNDDOWN"},{"id":"syntax-18","content":"Syntax"},{"id":"sample-18","content":"Sample"},{"id":"roundup","content":"ROUNDUP"},{"id":"syntax-19","content":"Syntax"},{"id":"sample-19","content":"Sample"},{"id":"sqrt","content":"SQRT"},{"id":"syntax-20","content":"Syntax"},{"id":"sample-20","content":"Sample"},{"id":"value","content":"VALUE"},{"id":"syntax-21","content":"Syntax"},{"id":"sample-21","content":"Sample"}]},"url":"/docs/product-docs/fields/field-types/formula/numeric-functions","title":"Numeric functions","description":"This article explains various numeric functions that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/formula/operators","structured":{"contents":[{"heading":"numeric-operators","content":"Operator"},{"heading":"numeric-operators","content":"Sample"},{"heading":"numeric-operators","content":"Description"},{"heading":"numeric-operators","content":"+"},{"heading":"numeric-operators","content":"{field1} + {field2} + 2"},{"heading":"numeric-operators","content":"Addition of numeric values"},{"heading":"numeric-operators","content":"-"},{"heading":"numeric-operators","content":"{field1} - {field2}"},{"heading":"numeric-operators","content":"Subtraction of numeric values"},{"heading":"numeric-operators","content":"*"},{"heading":"numeric-operators","content":"{field1} * {field2}"},{"heading":"numeric-operators","content":"Multiplication of numeric values"},{"heading":"numeric-operators","content":"/"},{"heading":"numeric-operators","content":"{field1} / {field2}"},{"heading":"numeric-operators","content":"Division of numeric values"},{"heading":"numeric-operators","content":"type: info"},{"heading":"logical-operators","content":"Operator"},{"heading":"logical-operators","content":"Sample"},{"heading":"logical-operators","content":"Description"},{"heading":"logical-operators","content":"<"},{"heading":"logical-operators","content":"{field1} < {field2}"},{"heading":"logical-operators","content":"Less than"},{"heading":"logical-operators","content":">"},{"heading":"logical-operators","content":"{field1} > {field2}"},{"heading":"logical-operators","content":"Greater than"},{"heading":"logical-operators","content":"<="},{"heading":"logical-operators","content":"{field1} <= {field2}"},{"heading":"logical-operators","content":"Less than or equal to"},{"heading":"logical-operators","content":">="},{"heading":"logical-operators","content":"{field1} >= {field2}"},{"heading":"logical-operators","content":"Greater than or equal to"},{"heading":"logical-operators","content":"=="},{"heading":"logical-operators","content":"{field1} == {field2}"},{"heading":"logical-operators","content":"Equal to"},{"heading":"logical-operators","content":"!="},{"heading":"logical-operators","content":"{field1} != {field2}"},{"heading":"logical-operators","content":"Not equal to"},{"heading":"string-operators","content":"Operator"},{"heading":"string-operators","content":"Sample"},{"heading":"string-operators","content":"Description"},{"heading":"string-operators","content":"&"},{"heading":"string-operators","content":"{field1} & {field2}"},{"heading":"string-operators","content":"String concatenation"}],"headings":[{"id":"numeric-operators","content":"Numeric operators"},{"id":"logical-operators","content":"Logical operators"},{"id":"string-operators","content":"String operators"}]},"url":"/docs/product-docs/fields/field-types/formula/operators","title":"Numeric and Logical operators","description":"This article explains various numeric and logical operators that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/formula/string-functions","structured":{"contents":[{"content":"This cheat sheet provides a quick reference guide for various string based functions commonly used in data analysis and programming. Each function is accompanied by its syntax, a sample usage, and a brief description."},{"heading":"concat","content":"The CONCAT function concatenates one or more strings into a single string."},{"heading":"left","content":"The LEFT function retrieves the first 'n' characters specified from the beginning of the input string."},{"heading":"len","content":"The LEN function calculates and returns the total number of characters present in the provided string."},{"heading":"lower","content":"The LOWER function transforms all characters in the input string to lowercase"},{"heading":"mid","content":"The MID function retrieves a substring from the input string starting at the specified position and extending for the specified count of characters."},{"heading":"regex_extract","content":"The REGEX_EXTRACT function searches the input string for the first occurrence of the specified regular expression pattern and returns the matched substring."},{"heading":"regex_match","content":"The REGEX_MATCH function evaluates whether the input string matches the specified regular expression pattern, returning 1 if there is a match and 0 if there is no match."},{"heading":"regex_replace","content":"The REGEX_REPLACE function identifies all occurrences of the specified regular expression pattern in the input string and substitutes them with the provided replacement string."},{"heading":"repeat","content":"The REPEAT function duplicates the provided string the specified number of times, facilitating the creation of repeated patterns or sequences."},{"heading":"replace","content":"The REPLACE function identifies all instances of a particular substring within the given string and substitutes them with another specified substring."},{"heading":"right","content":"The RIGHT function retrieves the last 'n' characters from the end of the input string, allowing you to extract a substring starting from the right."},{"heading":"search","content":"The SEARCH function identifies the position of the specified substring within the input string, returning the index if found, and 0 otherwise."},{"heading":"substr","content":"The SUBSTR function extracts a substring from the input string, starting at the specified position and optionally extending for the specified count of characters."},{"heading":"trim","content":"The TRIM function eliminates any leading or trailing whitespaces from the input string."},{"heading":"upper","content":"The UPPER function transforms all characters in the input string to uppercase."},{"heading":"url","content":"The URL function checks if the input string is a valid URL and converts it into a hyperlink"},{"heading":"urlencode","content":"The URLENCODE function percent-encodes special characters in a string so it can\nbe substituted as a query parameter into a URL."},{"heading":"urlencode","content":"It is similar to JavaScript encodeURIComponent() function, except it encodes\nonly characters that have a special meaning according to RFC 3986 section 2.2\nand also percent signs and spaces; other characters such as letters from\nnon-Latin alphabets will not be encoded. Like encodeURIComponent(), it should\nbe used only for encoding URL components, not whole URLs."},{"heading":"isblank","content":"The ISBLANK function checks if a given input is not empty or null, returning FALSE if the input has a value, and TRUE otherwise."},{"heading":"isnotblank","content":"The ISNOTBLANK function checks if a given input is not empty or null, returning TRUE if the input has a value, and FALSE otherwise."}],"headings":[{"id":"concat","content":"CONCAT"},{"id":"syntax","content":"Syntax"},{"id":"sample","content":"Sample"},{"id":"left","content":"LEFT"},{"id":"syntax-1","content":"Syntax"},{"id":"sample-1","content":"Sample"},{"id":"len","content":"LEN"},{"id":"syntax-2","content":"Syntax"},{"id":"sample-2","content":"Sample"},{"id":"lower","content":"LOWER"},{"id":"syntax-3","content":"Syntax"},{"id":"sample-3","content":"Sample"},{"id":"mid","content":"MID"},{"id":"syntax-4","content":"Syntax"},{"id":"sample-4","content":"Sample"},{"id":"regex_extract","content":"REGEX_EXTRACT"},{"id":"syntax-5","content":"Syntax"},{"id":"sample-5","content":"Sample"},{"id":"regex_match","content":"REGEX_MATCH"},{"id":"syntax-6","content":"Syntax"},{"id":"sample-6","content":"Sample"},{"id":"regex_replace","content":"REGEX_REPLACE"},{"id":"syntax-7","content":"Syntax"},{"id":"sample-7","content":"Sample"},{"id":"repeat","content":"REPEAT"},{"id":"syntax-8","content":"Syntax"},{"id":"sample-8","content":"Sample"},{"id":"replace","content":"REPLACE"},{"id":"syntax-9","content":"Syntax"},{"id":"sample-9","content":"Sample"},{"id":"right","content":"RIGHT"},{"id":"syntax-10","content":"Syntax"},{"id":"sample-10","content":"Sample"},{"id":"search","content":"SEARCH"},{"id":"syntax-11","content":"Syntax"},{"id":"sample-11","content":"Sample"},{"id":"substr","content":"SUBSTR"},{"id":"syntax-12","content":"Syntax"},{"id":"sample-12","content":"Sample"},{"id":"trim","content":"TRIM"},{"id":"syntax-13","content":"Syntax"},{"id":"sample-13","content":"Sample"},{"id":"upper","content":"UPPER"},{"id":"syntax-14","content":"Syntax"},{"id":"sample-14","content":"Sample"},{"id":"url","content":"URL"},{"id":"syntax-15","content":"Syntax"},{"id":"sample-15","content":"Sample"},{"id":"urlencode","content":"URLENCODE"},{"id":"syntax-16","content":"Syntax"},{"id":"sample-16","content":"Sample"},{"id":"isblank","content":"ISBLANK"},{"id":"syntax-17","content":"Syntax"},{"id":"sample-17","content":"Sample"},{"id":"isnotblank","content":"ISNOTBLANK"},{"id":"syntax-18","content":"Syntax"},{"id":"sample-18","content":"Sample"}]},"url":"/docs/product-docs/fields/field-types/formula/string-functions","title":"String functions","description":"This article explains various string functions that can be used in formula fields."},{"_id":"/docs/product-docs/fields/field-types/identifier-types/uuid","structured":{"contents":[{"content":"The UUID (Universally Unique Identifier) field automatically generates a unique identifier (UUID v4) for each record. UUIDs are 128-bit values represented as 36-character strings in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (e.g., 31c46437-0bb9-4072-bf7a-40cd7aebcae3). They are useful when you need globally unique, non-sequential identifiers for your records."},{"content":"type: info"},{"content":"type: warning"},{"heading":"create-a-uuid-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-uuid-field","content":"Enter a name for the field (Optional)."},{"heading":"create-a-uuid-field","content":"Select UUID from the list of field types."},{"heading":"create-a-uuid-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-uuid-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-uuid-field","content":"type: info"},{"heading":"cell-display","content":"The UUID field appears as a read-only text cell. Values are auto-generated when a new record is created and cannot be edited or pasted into."},{"heading":"read-only","content":"UUID values are generated automatically by the database and cannot be manually edited, pasted, or overridden. Attempting to edit a UUID cell will display a read-only warning."},{"heading":"unique-constraint","content":"Every UUID field has a unique constraint enforced at the database level. This guarantees that no two records in the same table will share the same UUID value."},{"heading":"auto-generated-on-record-creation","content":"When a new record is added to the table, a UUID value is automatically assigned using PostgreSQL's gen_random_uuid() function. There is no need to manually populate the field."},{"heading":"not-available-in-forms","content":"Since UUID values are system-generated, UUID fields do not appear in form views. Values are assigned automatically when the form submission creates a new record."},{"heading":"filtering-uuid-fields","content":"UUID fields support text-based filter operations. You can filter using full or partial UUID values."},{"heading":"filtering-uuid-fields","content":"Filter operation"},{"heading":"filtering-uuid-fields","content":"Description"},{"heading":"filtering-uuid-fields","content":"is equal"},{"heading":"filtering-uuid-fields","content":"Matches the exact UUID string"},{"heading":"filtering-uuid-fields","content":"is not equal"},{"heading":"filtering-uuid-fields","content":"Excludes the exact UUID string"},{"heading":"filtering-uuid-fields","content":"is like"},{"heading":"filtering-uuid-fields","content":"Matches records containing the specified text"},{"heading":"filtering-uuid-fields","content":"is not like"},{"heading":"filtering-uuid-fields","content":"Excludes records containing the specified text"},{"heading":"filtering-uuid-fields","content":"type: info"},{"heading":"sorting-uuid-fields","content":"UUID fields can be sorted in ascending or descending order. Sorting is performed on the text representation of the UUID, which means it follows lexicographic (alphabetical) order rather than any chronological sequence."},{"heading":"duplicating-a-table-with-uuid-fields","content":"When you duplicate a table that contains UUID fields, the UUID column structure is preserved in the new table. However, new UUID values are generated for all records in the duplicated table — the original values are not copied over."},{"heading":"limitations","content":"PostgreSQL only: UUID fields require a PostgreSQL database. They are not available when using MySQL, SQLite, or other database backends."},{"heading":"limitations","content":"No default value configuration: The default value (gen_random_uuid()) is set automatically and cannot be changed."},{"heading":"limitations","content":"No copy-paste: You cannot paste values into a UUID field."}],"headings":[{"id":"create-a-uuid-field","content":"Create a UUID field"},{"id":"cell-display","content":"Cell display"},{"id":"key-behaviours","content":"Key behaviours"},{"id":"read-only","content":"Read-only"},{"id":"unique-constraint","content":"Unique constraint"},{"id":"auto-generated-on-record-creation","content":"Auto-generated on record creation"},{"id":"not-available-in-forms","content":"Not available in forms"},{"id":"filtering-uuid-fields","content":"Filtering UUID fields"},{"id":"sorting-uuid-fields","content":"Sorting UUID fields"},{"id":"duplicating-a-table-with-uuid-fields","content":"Duplicating a table with UUID fields"},{"id":"limitations","content":"Limitations"}]},"url":"/docs/product-docs/fields/field-types/identifier-types/uuid","title":"UUID","description":"This article explains how to create and use a UUID field."},{"_id":"/docs/product-docs/fields/field-types/links-based/links","structured":{"contents":[{"content":"Links field type is used to establish relationship between tables & create links to other records.\nNocoDB supports following types of relations:"},{"content":"Has-Many - A record in one table can have multiple records in another table."},{"content":"Example: A Country can have multiple Cities."},{"content":"Belongs-to - Multiple records in one table can have a single record in another table."},{"content":"Example: A City Belongs-to a Country."},{"content":"Many-to-Many - Multiple records in one table can have multiple records in another table."},{"content":"Example: A Student can have multiple Subjects & a Subject can have multiple Students."},{"content":"type: note"},{"content":"Links can be created only between tables in the same database."},{"content":"Self-referencing links are supported. (Link to the same table)"},{"content":"For every Has-Many relation defined, NocoDB augments Belongs-to relationship field in the adjacent table automatically"},{"heading":"create-a-link-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-link-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-link-field","content":"Select the field type as Links from the dropdown."},{"heading":"create-a-link-field","content":"Select the relation type : One-to-one, Has-Many, OR Many-to-Many."},{"heading":"create-a-link-field","content":"Select the table to which the relation is to be established with."},{"heading":"create-a-link-field","content":"Advance settings: Configure label to be used for display in the cell. Defaults to Link, Links (Optional)."},{"heading":"create-a-link-field","content":"Click on Save Field button."},{"heading":"create-a-link-field","content":"You can control record visibility in the Link records modal by limiting the records available for selection. Read more"},{"heading":"cell-display","content":"The cell will display number of links for a record to the related table."},{"heading":"cell-display","content":"Clicking on the link-text will open a Linked Records modal with the list of links & associated additional information."},{"heading":"list-linked-records","content":"List of linked records will appear as a dropdown containing linked records as cards. A brief note about the modal components:"},{"heading":"list-linked-records","content":"Search bar, to narrow down the list of linked records displayed"},{"heading":"list-linked-records","content":"Icon represents Many-to-Many relation. The count indicates the number of linked records"},{"heading":"list-linked-records","content":"List (cards) of linked records"},{"heading":"list-linked-records","content":"To view additional information (expanded record), hover on the card & click on the <> icon"},{"heading":"list-linked-records","content":"Click on the - icon to unlink the record"},{"heading":"list-linked-records","content":"Click on + New record button to create and link a new record to the current one"},{"heading":"list-linked-records","content":"Click on Link more records to link an existing record Read more"},{"heading":"list-linked-records","content":"Pagination bar"},{"heading":"link-new-records","content":"Modal to add new links can be opened by"},{"heading":"link-new-records","content":"Clicking on + Link more Records button in the Linked Records modal"},{"heading":"link-new-records","content":"Clicking on the + icon in the cell (appears on clicking on the cell)"},{"heading":"link-new-records","content":"A brief note about the modal components:"},{"heading":"link-new-records","content":"Search bar, to narrow down the list of records displayed"},{"heading":"link-new-records","content":"Icon represents Many-to-Many relation. The count indicates the number of linked records"},{"heading":"link-new-records","content":"List (cards) of records available for linking"},{"heading":"link-new-records","content":"To view additional information (expanded record) before linking, hover on the card & click on the <> icon"},{"heading":"link-new-records","content":"Click on the + icon to link the record"},{"heading":"link-new-records","content":"Click on + New record button to create and link a new record to the current one"},{"heading":"link-new-records","content":"Pagination bar"},{"heading":"link-new-records","content":"type: info"},{"heading":"unlink-records","content":"To unlink a record, open the Linked Records modal & click on the - icon on the card of the record to be unlinked."},{"heading":"unlink-records","content":"type: info"},{"heading":"limit-record-selection","content":"This feature enables users to restrict the records available for selection within the Link records modal. This can be achieved by two modes:"},{"heading":"limit-record-selection","content":"Limit by view"},{"heading":"limit-record-selection","content":"Limit by filter ☁"},{"heading":"limit-record-selection","content":"Note that,"},{"heading":"limit-record-selection","content":"These options are not mutually exclusive & can be used together. When both are used, the records available for selection will be the intersection of the records satisfying all conditions."},{"heading":"limit-record-selection","content":"This feature only affects the records available for selection & does not affect the existing links."},{"heading":"limit-record-selection","content":"The limit is applied only on the Link records modal & does not restrict the link modification process via API, Copy-Paste or any other mechanisms."},{"heading":"limit-record-selection","content":"Limit by filter option is available only in cloud version."},{"heading":"limit-by-view","content":"To limit the records available for selection based on a view, follow the steps below:"},{"heading":"steps","content":"Enable Limit record selection to view"},{"heading":"steps","content":"Select the view from the dropdown"},{"heading":"steps","content":"Click on Save Field button"},{"heading":"steps","content":"In the example image above, the records available for selection will be limited to the records available in Trailers view."},{"heading":"steps","content":"Note that,"},{"heading":"steps","content":"Only one view can be selected at a time."},{"heading":"steps","content":"Deleting the view associated with links field will disable the limit by view option."},{"heading":"steps","content":"Change in filters within the view will also reflect records available for selection during linking."},{"heading":"limit-by-filter-","content":"To limit the records available for selection based on filters, follow the steps below:"},{"heading":"steps-1","content":"Enable Limit record selection by filter"},{"heading":"steps-1","content":"Configure filter"},{"heading":"steps-1","content":"Click on Add filter button."},{"heading":"steps-1","content":"Select the field, operator"},{"heading":"steps-1","content":"Configure value"},{"heading":"steps-1","content":"Click on Save Field button"},{"heading":"steps-1","content":"In the example image above, the records available for selection will be limited to the records available in Trailers view where rating is PG."},{"heading":"steps-1","content":"Note that,"},{"heading":"steps-1","content":"Multiple filters can be added."},{"heading":"steps-1","content":"Deleting the field associated with links field will disable associated filters."},{"heading":"filter-type","content":"Conditions in the filter can be of two types: Static & Dynamic."},{"heading":"filter-type","content":"Static condition: Filter value is a constant value."},{"heading":"filter-type","content":"Dynamic condition: Filter value is a field value from the current record."},{"heading":"filter-type","content":"Use the ⚙️ icon to the right of the filter to toggle between static & dynamic filter values."},{"heading":"filter-type","content":"Note that, it's allowed to have a mix of static & dynamic conditions in the filter."},{"heading":"related-fields","content":"Lookup"},{"heading":"related-fields","content":"Rollup"}],"headings":[{"id":"create-a-link-field","content":"Create a link field"},{"id":"cell-display","content":"Cell display"},{"id":"list-linked-records","content":"List linked records"},{"id":"link-new-records","content":"Link new records"},{"id":"unlink-records","content":"Unlink records"},{"id":"limit-record-selection","content":"Limit record selection"},{"id":"limit-by-view","content":"Limit by view"},{"id":"steps","content":"Steps"},{"id":"limit-by-filter-","content":"Limit by filter ☁"},{"id":"steps-1","content":"Steps"},{"id":"filter-type","content":"Filter Type"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/links-based/links","title":"Links","description":"This article explains how to create & work with a Links field."},{"_id":"/docs/product-docs/fields/field-types/links-based/lookup","structured":{"contents":[{"content":"Lookup fields help bring additional field information from related table into the current table. This is useful when you want to display additional information about a record in a table. For example, if you have a table of Orders and a table of Customers, you can use a Lookup field to display the customer's name and address in the Orders table."},{"content":"type: note"},{"heading":"create-a-lookup-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-lookup-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-lookup-field","content":"Select the field type as Lookup from the dropdown."},{"heading":"create-a-lookup-field","content":"Select the link field from the dropdown. This is the field that links the current table to the related table."},{"heading":"create-a-lookup-field","content":"Select the field for display from the dropdown. This is the field that will be displayed in the current table."},{"heading":"create-a-lookup-field","content":"Click on Save Field button."},{"heading":"conditional-lookup-","content":"type: note"},{"heading":"conditional-lookup-","content":"By default, a Lookup field pulls in all linked records from the related table. However, in many cases, you may want to display only a subset of those records — for example, only recent entries or records above a certain threshold."},{"heading":"conditional-lookup-","content":"To achieve this, you can enable the option:\nOnly include linked records that meet specific conditions"},{"heading":"conditional-lookup-","content":"This option allows you to filter the linked records based on criteria defined from fields in the related table. It helps tailor the Lookup field to show only the data that’s most relevant to your use case."},{"heading":"applying-filters","content":"Toggle ON Only include linked records that meet specific conditions."},{"heading":"applying-filters","content":"Click Add filter to define one or more conditions using fields from the related table."},{"heading":"applying-filters","content":"Use Add filter group to combine filters with AND/OR logic."},{"heading":"applying-filters","content":"Click Save Field to apply."},{"heading":"similar-links-based-fields","content":"Links"},{"heading":"similar-links-based-fields","content":"Rollup"}],"headings":[{"id":"create-a-lookup-field","content":"Create a Lookup Field"},{"id":"conditional-lookup-","content":"Conditional Lookup ☁"},{"id":"applying-filters","content":"Applying filters"},{"id":"similar-links-based-fields","content":"Similar links-based fields"}]},"url":"/docs/product-docs/fields/field-types/links-based/lookup","title":"Lookup","description":"This article explains how to create & work with a Lookup field."},{"_id":"/docs/product-docs/fields/field-types/links-based/rollup","structured":{"contents":[{"content":"Rollup fields are used to aggregate data from fields in the related table. Often used to calculate totals, averages, and other aggregate data."},{"heading":"create-a-rollup-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-rollup-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-rollup-field","content":"Select the field type as Rollup from the dropdown."},{"heading":"create-a-rollup-field","content":"Select the link field from the dropdown. This is the field that links the current table to the related table."},{"heading":"create-a-rollup-field","content":"Select the field for display from the dropdown. This is the field that will be displayed in the current table."},{"heading":"create-a-rollup-field","content":"Select the aggregation function from the dropdown. This is the function that will be used to aggregate the data."},{"heading":"create-a-rollup-field","content":"Click on Save Field button."},{"heading":"aggregation-functions","content":"Here's a table with brief descriptions for each of the aggregation functions supported by NocoDB:"},{"heading":"aggregation-functions","content":"Aggregation Function"},{"heading":"aggregation-functions","content":"Description"},{"heading":"aggregation-functions","content":"Count"},{"heading":"aggregation-functions","content":"Counts the number of records in a dataset."},{"heading":"aggregation-functions","content":"Minimum"},{"heading":"aggregation-functions","content":"Retrieves the minimum value from a dataset."},{"heading":"aggregation-functions","content":"Maximum"},{"heading":"aggregation-functions","content":"Retrieves the maximum value from a dataset."},{"heading":"aggregation-functions","content":"Average"},{"heading":"aggregation-functions","content":"Calculates the average value in a dataset."},{"heading":"aggregation-functions","content":"Sum"},{"heading":"aggregation-functions","content":"Adds up all the values in a dataset."},{"heading":"aggregation-functions","content":"Count Distinct"},{"heading":"aggregation-functions","content":"Counts the number of distinct values in a dataset."},{"heading":"aggregation-functions","content":"Sum Distinct"},{"heading":"aggregation-functions","content":"Adds up all the distinct values in a dataset."},{"heading":"aggregation-functions","content":"Average Distinct"},{"heading":"aggregation-functions","content":"Calculates the average of distinct values in a dataset."},{"heading":"conditional-rollup-","content":"type: note"},{"heading":"conditional-rollup-","content":"Rollup fields are used to perform calculations—such as sum, average, count—on linked records from a related table. By default, the rollup includes all linked records. However, you can fine-tune the results by including only those records that meet specific criteria."},{"heading":"conditional-rollup-","content":"To do this, enable the option:\nOnly include linked records that meet specific conditions"},{"heading":"conditional-rollup-","content":"This option allows you to apply filters to the linked records before the rollup calculation is performed. It’s particularly useful when you want to aggregate values conditionally—like summing revenue for a specific period or counting items that meet a threshold."},{"heading":"applying-filters","content":"Toggle ON Only include linked records that meet specific conditions."},{"heading":"applying-filters","content":"Click Add filter to define the condition(s) using fields from the related table."},{"heading":"applying-filters","content":"Use Add filter group to combine filters using AND/OR logic."},{"heading":"applying-filters","content":"Click Save Field to apply."},{"heading":"similar-links-based-fields","content":"Links"},{"heading":"similar-links-based-fields","content":"Lookup"}],"headings":[{"id":"create-a-rollup-field","content":"Create a Rollup Field"},{"id":"aggregation-functions","content":"Aggregation Functions"},{"id":"conditional-rollup-","content":"Conditional Rollup ☁"},{"id":"applying-filters","content":"Applying filters"},{"id":"similar-links-based-fields","content":"Similar links-based fields"}]},"url":"/docs/product-docs/fields/field-types/links-based/rollup","title":"Rollup","description":"This article explains how to create & work with a Rollup field."},{"_id":"/docs/product-docs/fields/field-types/numerical/currency","structured":{"contents":[{"content":"The Currency field is a numerical field used to store monetary values. It provides additional options to configure the currency locale and symbol for display."},{"content":"type: warning"},{"heading":"create-a-currency-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-currency-field","content":"Enter a name for the field."},{"heading":"create-a-currency-field","content":"Select Currency from the list of field types."},{"heading":"create-a-currency-field","content":"Configure Currency Locale (defaults to en-US)."},{"heading":"create-a-currency-field","content":"Configure Currency Symbol (defaults to $)."},{"heading":"create-a-currency-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-currency-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-currency-field","content":"Refer to the general guidelines on creating a field."},{"heading":"cell-display","content":"The Currency field appears as a numeric cell with the configured currency symbol and formatting."},{"heading":"supported-locales","content":"NocoDB supports locale codes based on the ISO639-1 standard."},{"heading":"supported-locales","content":"type: info"},{"heading":"supported-currencies","content":"The Currency field supports a wide range of ISO 4217 currency codes, including but not limited to:"},{"heading":"supported-currencies","content":"AED"},{"heading":"supported-currencies","content":"AFN"},{"heading":"supported-currencies","content":"ALL"},{"heading":"supported-currencies","content":"AMD"},{"heading":"supported-currencies","content":"ANG"},{"heading":"supported-currencies","content":"AOA"},{"heading":"supported-currencies","content":"ARS"},{"heading":"supported-currencies","content":"AUD"},{"heading":"supported-currencies","content":"AWG"},{"heading":"supported-currencies","content":"AZN"},{"heading":"supported-currencies","content":"BAM"},{"heading":"supported-currencies","content":"BBD"},{"heading":"supported-currencies","content":"BDT"},{"heading":"supported-currencies","content":"BGN"},{"heading":"supported-currencies","content":"BHD"},{"heading":"supported-currencies","content":"BIF"},{"heading":"supported-currencies","content":"BMD"},{"heading":"supported-currencies","content":"BND"},{"heading":"supported-currencies","content":"BOB"},{"heading":"supported-currencies","content":"BOV"},{"heading":"supported-currencies","content":"BRL"},{"heading":"supported-currencies","content":"BSD"},{"heading":"supported-currencies","content":"BTN"},{"heading":"supported-currencies","content":"BWP"},{"heading":"supported-currencies","content":"BYR"},{"heading":"supported-currencies","content":"BZD"},{"heading":"supported-currencies","content":"CAD"},{"heading":"supported-currencies","content":"CDF"},{"heading":"supported-currencies","content":"CHE"},{"heading":"supported-currencies","content":"CHF"},{"heading":"supported-currencies","content":"CHW"},{"heading":"supported-currencies","content":"CLF"},{"heading":"supported-currencies","content":"CLP"},{"heading":"supported-currencies","content":"CNY"},{"heading":"supported-currencies","content":"COP"},{"heading":"supported-currencies","content":"COU"},{"heading":"supported-currencies","content":"CRC"},{"heading":"supported-currencies","content":"CUP"},{"heading":"supported-currencies","content":"CVE"},{"heading":"supported-currencies","content":"CYP"},{"heading":"supported-currencies","content":"CZK"},{"heading":"supported-currencies","content":"DJF"},{"heading":"supported-currencies","content":"DKK"},{"heading":"supported-currencies","content":"DOP"},{"heading":"supported-currencies","content":"DZD"},{"heading":"supported-currencies","content":"EEK"},{"heading":"supported-currencies","content":"EGP"},{"heading":"supported-currencies","content":"ERN"},{"heading":"supported-currencies","content":"ETB"},{"heading":"supported-currencies","content":"EUR"},{"heading":"supported-currencies","content":"FJD"},{"heading":"supported-currencies","content":"FKP"},{"heading":"supported-currencies","content":"GBP"},{"heading":"supported-currencies","content":"GEL"},{"heading":"supported-currencies","content":"GHC"},{"heading":"supported-currencies","content":"GIP"},{"heading":"supported-currencies","content":"GMD"},{"heading":"supported-currencies","content":"GNF"},{"heading":"supported-currencies","content":"GTQ"},{"heading":"supported-currencies","content":"GYD"},{"heading":"supported-currencies","content":"HKD"},{"heading":"supported-currencies","content":"HNL"},{"heading":"supported-currencies","content":"HRK"},{"heading":"supported-currencies","content":"HTG"},{"heading":"supported-currencies","content":"HUF"},{"heading":"supported-currencies","content":"IDR"},{"heading":"supported-currencies","content":"ILS"},{"heading":"supported-currencies","content":"INR"},{"heading":"supported-currencies","content":"IQD"},{"heading":"supported-currencies","content":"IRR"},{"heading":"supported-currencies","content":"ISK"},{"heading":"supported-currencies","content":"JMD"},{"heading":"supported-currencies","content":"JOD"},{"heading":"supported-currencies","content":"JPY"},{"heading":"supported-currencies","content":"KES"},{"heading":"supported-currencies","content":"KGS"},{"heading":"supported-currencies","content":"KHR"},{"heading":"supported-currencies","content":"KMF"},{"heading":"supported-currencies","content":"KPW"},{"heading":"supported-currencies","content":"KRW"},{"heading":"supported-currencies","content":"KWD"},{"heading":"supported-currencies","content":"KYD"},{"heading":"supported-currencies","content":"KZT"},{"heading":"supported-currencies","content":"LAK"},{"heading":"supported-currencies","content":"LBP"},{"heading":"supported-currencies","content":"LKR"},{"heading":"supported-currencies","content":"LRD"},{"heading":"supported-currencies","content":"LSL"},{"heading":"supported-currencies","content":"LTL"},{"heading":"supported-currencies","content":"LVL"},{"heading":"supported-currencies","content":"LYD"},{"heading":"supported-currencies","content":"MAD"},{"heading":"supported-currencies","content":"MDL"},{"heading":"supported-currencies","content":"MGA"},{"heading":"supported-currencies","content":"MKD"},{"heading":"supported-currencies","content":"MMK"},{"heading":"supported-currencies","content":"MNT"},{"heading":"supported-currencies","content":"MOP"},{"heading":"supported-currencies","content":"MRO"},{"heading":"supported-currencies","content":"MTL"},{"heading":"supported-currencies","content":"MUR"},{"heading":"supported-currencies","content":"MVR"},{"heading":"supported-currencies","content":"MWK"},{"heading":"supported-currencies","content":"MXN"},{"heading":"supported-currencies","content":"MXV"},{"heading":"supported-currencies","content":"MYR"},{"heading":"supported-currencies","content":"MZN"},{"heading":"supported-currencies","content":"NAD"},{"heading":"supported-currencies","content":"NGN"},{"heading":"supported-currencies","content":"NIO"},{"heading":"supported-currencies","content":"NOK"},{"heading":"supported-currencies","content":"NPR"},{"heading":"supported-currencies","content":"NZD"},{"heading":"supported-currencies","content":"OMR"},{"heading":"supported-currencies","content":"PAB"},{"heading":"supported-currencies","content":"PEN"},{"heading":"supported-currencies","content":"PGK"},{"heading":"supported-currencies","content":"PHP"},{"heading":"supported-currencies","content":"PKR"},{"heading":"supported-currencies","content":"PLN"},{"heading":"supported-currencies","content":"PYG"},{"heading":"supported-currencies","content":"QAR"},{"heading":"supported-currencies","content":"ROL"},{"heading":"supported-currencies","content":"RON"},{"heading":"supported-currencies","content":"RSD"},{"heading":"supported-currencies","content":"RUB"},{"heading":"supported-currencies","content":"RWF"},{"heading":"supported-currencies","content":"SAR"},{"heading":"supported-currencies","content":"SBD"},{"heading":"supported-currencies","content":"SCR"},{"heading":"supported-currencies","content":"SDD"},{"heading":"supported-currencies","content":"SEK"},{"heading":"supported-currencies","content":"SGD"},{"heading":"supported-currencies","content":"SHP"},{"heading":"supported-currencies","content":"SIT"},{"heading":"supported-currencies","content":"SKK"},{"heading":"supported-currencies","content":"SLL"},{"heading":"supported-currencies","content":"SOS"},{"heading":"supported-currencies","content":"SRD"},{"heading":"supported-currencies","content":"STD"},{"heading":"supported-currencies","content":"SYP"},{"heading":"supported-currencies","content":"SZL"},{"heading":"supported-currencies","content":"THB"},{"heading":"supported-currencies","content":"TJS"},{"heading":"supported-currencies","content":"TMM"},{"heading":"supported-currencies","content":"TND"},{"heading":"supported-currencies","content":"TOP"},{"heading":"supported-currencies","content":"TRY"},{"heading":"supported-currencies","content":"TTD"},{"heading":"supported-currencies","content":"TWD"},{"heading":"supported-currencies","content":"TZS"},{"heading":"supported-currencies","content":"UAH"},{"heading":"supported-currencies","content":"UGX"},{"heading":"supported-currencies","content":"USD"},{"heading":"supported-currencies","content":"USN"},{"heading":"supported-currencies","content":"USS"},{"heading":"supported-currencies","content":"UYU"},{"heading":"supported-currencies","content":"UZS"},{"heading":"supported-currencies","content":"VEB"},{"heading":"supported-currencies","content":"VND"},{"heading":"supported-currencies","content":"VUV"},{"heading":"supported-currencies","content":"WST"},{"heading":"supported-currencies","content":"XAF"},{"heading":"supported-currencies","content":"XAG"},{"heading":"supported-currencies","content":"XAU"},{"heading":"supported-currencies","content":"XBA"},{"heading":"supported-currencies","content":"XBB"},{"heading":"supported-currencies","content":"XBC"},{"heading":"supported-currencies","content":"XBD"},{"heading":"supported-currencies","content":"XCD"},{"heading":"supported-currencies","content":"XDR"},{"heading":"supported-currencies","content":"XFO"},{"heading":"supported-currencies","content":"XFU"},{"heading":"supported-currencies","content":"XOF"},{"heading":"supported-currencies","content":"XPD"},{"heading":"supported-currencies","content":"XPF"},{"heading":"supported-currencies","content":"XPT"},{"heading":"supported-currencies","content":"XTS"},{"heading":"supported-currencies","content":"XXX"},{"heading":"supported-currencies","content":"YER"},{"heading":"supported-currencies","content":"ZAR"},{"heading":"supported-currencies","content":"ZMK"},{"heading":"supported-currencies","content":"ZWD"}],"headings":[{"id":"create-a-currency-field","content":"Create a Currency field"},{"id":"cell-display","content":"Cell display"},{"id":"supported-locales","content":"Supported locales"},{"id":"supported-currencies","content":"Supported currencies"}]},"url":"/docs/product-docs/fields/field-types/numerical/currency","title":"Currency","description":"This article explains how to create and use a Currency field."},{"_id":"/docs/product-docs/fields/field-types/numerical/decimal","structured":{"contents":[{"content":"The Decimal field is a numerical field used to store decimal values. It is commonly used for data such as salary, price, or other values requiring fractional precision."},{"content":"type: warning"},{"heading":"create-a-decimal-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-decimal-field","content":"Enter a name for the field."},{"heading":"create-a-decimal-field","content":"Select Decimal from the list of field types."},{"heading":"create-a-decimal-field","content":"Configure the Precision setting (up to 8 digits)."},{"heading":"create-a-decimal-field","content":"Toggle Show thousands separator to format large numbers with a thousand separator (e.g., 1,000.00 instead of 1000.00)."},{"heading":"create-a-decimal-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-decimal-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-decimal-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-decimal-field","content":"type: info"},{"heading":"cell-display","content":"The Decimal field appears as a numeric cell in the table, right-aligned for readability. Values are displayed with the configured number of decimal places. If the Show thousands separator option is enabled, large numbers will be formatted with a comma as the thousand separator."}],"headings":[{"id":"create-a-decimal-field","content":"Create a Decimal field"},{"id":"cell-display","content":"Cell display"}]},"url":"/docs/product-docs/fields/field-types/numerical/decimal","title":"Decimal","description":"This article explains how to create and use a Decimal field."},{"_id":"/docs/product-docs/fields/field-types/numerical/number","structured":{"contents":[{"content":"The Number field is a numerical field used to store integer values. It is commonly used for data such as age, salary, price, or quantity."},{"content":"type: warning"},{"heading":"create-a-number-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-number-field","content":"Enter a name for the field."},{"heading":"create-a-number-field","content":"Select Number from the list of field types."},{"heading":"create-a-number-field","content":"(Optional) Toggle Show thousands separator to format large numbers with a thousand separator (e.g., 1,000 instead of 1000)."},{"heading":"create-a-number-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-number-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-number-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-number-field","content":"type: info"},{"heading":"cell-display","content":"The Number field appears as a numeric cell in the table. Its display aligns to the right by default for clarity and consistency when handling numerical data. If the Show thousands separator option is enabled, large numbers will be formatted with a comma as the thousand separator."}],"headings":[{"id":"create-a-number-field","content":"Create a Number field"},{"id":"cell-display","content":"Cell display"}]},"url":"/docs/product-docs/fields/field-types/numerical/number","title":"Number","description":"This article explains how to create and use a Number field."},{"_id":"/docs/product-docs/fields/field-types/numerical/percent","structured":{"contents":[{"content":"The Percent field is a numerical field used to store percentage values. It is useful for data such as completion rates, discount percentages, or performance metrics."},{"content":"type: warning"},{"heading":"create-a-percent-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-percent-field","content":"Enter a name for the field."},{"heading":"create-a-percent-field","content":"Select Percent from the list of field types."},{"heading":"create-a-percent-field","content":"(Optional) Enable Display as progress to show the percentage as a progress bar."},{"heading":"create-a-percent-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-percent-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-percent-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-percent-field","content":"type: info"},{"heading":"cell-display","content":"The Percent field appears as a numeric cell in the table, right-aligned by default."},{"heading":"cell-display","content":"When Display as progress is enabled, the value is represented as a progress bar."},{"heading":"cell-display","content":"Without progress display, the value appears as a standard percentage."}],"headings":[{"id":"create-a-percent-field","content":"Create a Percent field"},{"id":"cell-display","content":"Cell display"}]},"url":"/docs/product-docs/fields/field-types/numerical/percent","title":"Percent","description":"This article explains how to create and use a Percent field."},{"_id":"/docs/product-docs/fields/field-types/select-based/multi-select","structured":{"contents":[{"content":"The Multi select field allows you to choose multiple options from a predefined list. It is useful for fields like skills, tags, or applicable categories."},{"heading":"create-a-multi-select-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-multi-select-field","content":"Enter a name for the field."},{"heading":"create-a-multi-select-field","content":"Select Multi select from the list of field types."},{"heading":"create-a-multi-select-field","content":"Click Add option to define available options."},{"heading":"create-a-multi-select-field","content":"(Optional) Set default values for the field from the defined options."},{"heading":"create-a-multi-select-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-multi-select-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-multi-select-field","content":"type: note"},{"heading":"rename-options","content":"Click on the option text box to rename an option. Save changes using Save field."},{"heading":"configure-colors","content":"Assign background colors to options to visually distinguish them. For example, tag Urgent as red to highlight importance.\nClick the color icon next to an option, select a color, and save changes."},{"heading":"reorder-options","content":"Drag and drop options using the drag icon to reorder them. The new order is reflected in the dropdown inside cells."},{"heading":"reorder-options","content":"type: info"},{"heading":"delete-options","content":"Click the x icon to delete an option. Deleted options can be restored using the undo icon before saving."},{"heading":"delete-options","content":"type: warning"},{"heading":"cell-display","content":"The Multi select field displays as a dropdown in table cells, showing the configured options with their respective colors. Multiple options can be selected for a single cell."}],"headings":[{"id":"create-a-multi-select-field","content":"Create a Multi select field"},{"id":"edit-options","content":"Edit options"},{"id":"rename-options","content":"Rename options"},{"id":"configure-colors","content":"Configure colors"},{"id":"reorder-options","content":"Reorder options"},{"id":"delete-options","content":"Delete options"},{"id":"cell-display","content":"Cell display"}]},"url":"/docs/product-docs/fields/field-types/select-based/multi-select","title":"Multi select","description":"This article explains how to create and use a Multi select field."},{"_id":"/docs/product-docs/fields/field-types/select-based/single-select","structured":{"contents":[{"content":"The Single select field allows you to choose one option from a predefined list. It is useful for fields like status, priority, or category."},{"heading":"create-a-single-select-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-single-select-field","content":"Enter a name for the field."},{"heading":"create-a-single-select-field","content":"Select Single select from the list of field types."},{"heading":"create-a-single-select-field","content":"Click Add option to define available options."},{"heading":"create-a-single-select-field","content":"(Optional) Set a default value for the field from the defined options."},{"heading":"create-a-single-select-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-single-select-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-single-select-field","content":"type: note"},{"heading":"rename-options","content":"Click on the option text box to rename an option. Save changes using Save field."},{"heading":"configure-colors","content":"Assign background colors to options to visually distinguish them. For example, mark High as red to highlight urgency.\nClick the color icon next to an option, select a color, and save changes."},{"heading":"reorder-options","content":"Drag and drop options using the drag icon to reorder them. The new order is reflected in the dropdown inside cells."},{"heading":"reorder-options","content":"type: info"},{"heading":"delete-options","content":"Click the x icon to delete an option. Deleted options can be restored using the undo icon before saving."},{"heading":"delete-options","content":"type: warning"},{"heading":"cell-display","content":"The Single select field displays as a dropdown in table cells, showing the configured options with their respective colors. Only one option can be selected at a time."}],"headings":[{"id":"create-a-single-select-field","content":"Create a Single select field"},{"id":"edit-options","content":"Edit options"},{"id":"rename-options","content":"Rename options"},{"id":"configure-colors","content":"Configure colors"},{"id":"reorder-options","content":"Reorder options"},{"id":"delete-options","content":"Delete options"},{"id":"cell-display","content":"Cell display"}]},"url":"/docs/product-docs/fields/field-types/select-based/single-select","title":"Single select","description":"This article explains how to create and use a Single select field."},{"_id":"/docs/product-docs/fields/field-types/text-based/email","structured":{"contents":[{"content":"The Email field is a text-based field designed specifically for storing email addresses. It is a specialized version of the Single line text field with the following enhancements:"},{"content":"Optional validation to ensure values follow a valid email format"},{"content":"Display of values as clickable email links"},{"heading":"create-an-email-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-an-email-field","content":"Enter a name for the field."},{"heading":"create-an-email-field","content":"Select Email as the field type."},{"heading":"create-an-email-field","content":"(Optional) Enable validation by toggling the Validate Email option."},{"heading":"create-an-email-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-an-email-field","content":"Click Save field to add it to your table."},{"heading":"create-an-email-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-an-email-field","content":"type: note"}],"headings":[{"id":"create-an-email-field","content":"Create an Email field"}]},"url":"/docs/product-docs/fields/field-types/text-based/email","title":"Email","description":"This article explains how to create and use an Email field."},{"_id":"/docs/product-docs/fields/field-types/text-based/long-text","structured":{"contents":[{"content":"The Long text field is a text-based field that supports multiple lines of text. It is ideal for storing extended content such as descriptions, notes, or comments."},{"content":"type: warning"},{"heading":"create-a-long-text-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-long-text-field","content":"Enter a name for the field."},{"heading":"create-a-long-text-field","content":"Select Long text from the list of field types."},{"heading":"create-a-long-text-field","content":"(Optional) Enable Rich text formatting. Learn more here."},{"heading":"create-a-long-text-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-long-text-field","content":"Click Save field to add the field to your table."},{"heading":"create-a-long-text-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-long-text-field","content":"type: info"},{"heading":"cell-display","content":"The Long text field appears as a standard text cell in the table. The number of visible lines depends on the row height."},{"heading":"cell-display","content":"Double-clicking the cell, or pressing the Enter key while the cell is selected, expands the editor to display more lines for inline editing."},{"heading":"cell-display","content":"Alternatively, click the Expand icon in the cell to pop out a larger editor for easier editing. Pop-up editor can be resized by dragging its bottom-right corner & moved around by dragging its header."}],"headings":[{"id":"create-a-long-text-field","content":"Create a Long text field"},{"id":"cell-display","content":"Cell display"}]},"url":"/docs/product-docs/fields/field-types/text-based/long-text","title":"Long text","description":"This article explains how to create and use a Long text field."},{"_id":"/docs/product-docs/fields/field-types/text-based/phonenumber","structured":{"contents":[{"content":"The Phone number field is a text-based field designed for storing phone numbers. It provides an option to validate values to ensure they follow a valid phone number format."},{"heading":"create-a-phone-number-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-phone-number-field","content":"Enter a name for the field."},{"heading":"create-a-phone-number-field","content":"Select Phone number as the field type."},{"heading":"create-a-phone-number-field","content":"(Optional) Enable validation by toggling the Validate Phone number option."},{"heading":"create-a-phone-number-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-phone-number-field","content":"Click Save field to add it to your table."},{"heading":"create-a-phone-number-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-phone-number-field","content":"type: note"}],"headings":[{"id":"create-a-phone-number-field","content":"Create a Phone number field"}]},"url":"/docs/product-docs/fields/field-types/text-based/phonenumber","title":"Phone Number","description":"This article explains how to create and use a Phone number field."},{"_id":"/docs/product-docs/fields/field-types/text-based/rich-text","structured":{"contents":[{"content":"The Rich text field is an extension of the Long text field that supports text formatting. It allows you to style content with options such as bold, italic, underline, strikethrough, horizontal rules, ordered and unordered lists, code blocks, quotes, and more."},{"content":"type: warning"},{"heading":"create-a-rich-text-field","content":"Click the + icon to the right of the Fields header."},{"heading":"create-a-rich-text-field","content":"Enter a field name (optional)."},{"heading":"create-a-rich-text-field","content":"Select Long text as the field type."},{"heading":"create-a-rich-text-field","content":"Enable the Rich text toggle."},{"heading":"create-a-rich-text-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-rich-text-field","content":"Click Save field to add it to your table."},{"heading":"create-a-rich-text-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-rich-text-field","content":"type: info"},{"heading":"cell-display","content":"In the table view, the Rich text field appears as a single-line cell. To view or edit the full content, click the Expand icon."},{"heading":"formatting-options","content":"NocoDB supports Markdown syntax for formatting the text. Sections below explain various formatting options available in the rich text editor."},{"heading":"heading","content":"To create a heading, prefix # symbol preceding your heading text. The number of # symbols employed will dictate the heading's hierarchy level and typeface size. Three levels of headings are supported."},{"heading":"text-formatting","content":"You can emphasise text with bold, italic, strikethrough or underline formatting options. Table below shows syntax, keyboard shortcut, example & output for each formatting option."},{"heading":"text-formatting","content":"Style"},{"heading":"text-formatting","content":"Syntax"},{"heading":"text-formatting","content":"Keyboard shortcut"},{"heading":"text-formatting","content":"Output"},{"heading":"text-formatting","content":"Bold"},{"heading":"text-formatting","content":"**bold text**"},{"heading":"text-formatting","content":"Ctrl/Cmd + B"},{"heading":"text-formatting","content":"bold text"},{"heading":"text-formatting","content":"Italic"},{"heading":"text-formatting","content":"*italicized text*"},{"heading":"text-formatting","content":"Ctrl/Cmd + I"},{"heading":"text-formatting","content":"italicized text"},{"heading":"text-formatting","content":"Strikethrough"},{"heading":"text-formatting","content":"~~strikethrough text~~"},{"heading":"text-formatting","content":"Ctrl/Cmd + Shift + X"},{"heading":"text-formatting","content":"strikethrough text"},{"heading":"text-formatting","content":"Underline"},{"heading":"text-formatting","content":"Ctrl/Cmd + U"},{"heading":"text-formatting","content":"underlined text"},{"heading":"quote-block","content":"You can quote text with a >"},{"heading":"quote-block","content":"Usage"},{"heading":"quote-block","content":"Display"},{"heading":"quote-block","content":"normal text"},{"heading":"quote-block","content":"quoted text"},{"heading":"code-block","content":"Code block can be created by using (3 backticks) before & after the code."},{"heading":"code-block","content":"Usage"},{"heading":"code-block","content":"Display"},{"heading":"link","content":"Use the Link option in the rich text toolbar to add inline links. Alternatively, you can use markdown syntax [link text](URL)."},{"heading":"bullet-list","content":"You can create an unordered list using the Bulleted list option in the toolbar or by starting lines with -, +, or *."},{"heading":"bullet-list","content":"Usage"},{"heading":"bullet-list","content":"Display"},{"heading":"bullet-list","content":"Item 1"},{"heading":"bullet-list","content":"Item 2"},{"heading":"bullet-list","content":"Item 1"},{"heading":"bullet-list","content":"Item 2"},{"heading":"bullet-list","content":"Item 1"},{"heading":"bullet-list","content":"Item 2"},{"heading":"bullet-list","content":"type: info"},{"heading":"numbered-list","content":"You can create an ordered list using the Numbered list option in the toolbar or by prefixing text with numbers."},{"heading":"numbered-list","content":"Usage"},{"heading":"numbered-list","content":"Display"},{"heading":"numbered-list","content":"Item 1"},{"heading":"numbered-list","content":"Item 2"},{"heading":"task-list","content":"You can create task lists using the Task list option in the toolbar or with [ ] and [x] for incomplete and completed tasks."},{"heading":"task-list","content":"Usage"},{"heading":"task-list","content":"Display"},{"heading":"task-list","content":"Item 1"},{"heading":"task-list","content":"Item 2"}],"headings":[{"id":"create-a-rich-text-field","content":"Create a Rich text field"},{"id":"cell-display","content":"Cell display"},{"id":"formatting-options","content":"Formatting options"},{"id":"heading","content":"Heading"},{"id":"text-formatting","content":"Text formatting"},{"id":"quote-block","content":"Quote block"},{"id":"code-block","content":"Code block"},{"id":"link","content":"Link"},{"id":"bullet-list","content":"Bullet List"},{"id":"numbered-list","content":"Numbered List"},{"id":"task-list","content":"Task list"}]},"url":"/docs/product-docs/fields/field-types/text-based/rich-text","title":"Rich text","description":"This article explains how to create and use a Rich text field."},{"_id":"/docs/product-docs/fields/field-types/text-based/single-line-text","structured":{"contents":[{"content":"The Single line text field is used to store short, freeform text values. It is suitable for entries like names, titles, tags, or labels. This is the most commonly used field type for capturing simple text in a structured format. For storing longer text or multiple lines, consider using the Long text field instead."},{"content":"type: warning"},{"heading":"create-a-single-line-text-field","content":"Click on the + icon next to the last field in your table."},{"heading":"create-a-single-line-text-field","content":"Enter a name for the field."},{"heading":"create-a-single-line-text-field","content":"Select Single line text from the list of field types."},{"heading":"create-a-single-line-text-field","content":"Optionally, you can set a default value for the field & add a description."},{"heading":"create-a-single-line-text-field","content":"Click on Save field to add the field to your table."},{"heading":"create-a-single-line-text-field","content":"Refer here for generic guidelines on creating a field."},{"heading":"create-a-single-line-text-field","content":"type: info"}],"headings":[{"id":"create-a-single-line-text-field","content":"Create a Single line text field"}]},"url":"/docs/product-docs/fields/field-types/text-based/single-line-text","title":"Single line text","description":"This article explains how to create & work with a Single line text field."},{"_id":"/docs/product-docs/fields/field-types/text-based/url","structured":{"contents":[{"content":"The URL field is a text-based field designed specifically for storing web addresses. It is a specialized version of the Single line text field with the following enhancements:"},{"content":"Optional validation to ensure values follow a valid URL format"},{"content":"Display of values as clickable links"},{"heading":"create-a-url-field","content":"Click the + icon next to the last field in your table."},{"heading":"create-a-url-field","content":"Enter a name for the field."},{"heading":"create-a-url-field","content":"Select URL as the field type."},{"heading":"create-a-url-field","content":"(Optional) Enable validation by toggling the Validate URL option."},{"heading":"create-a-url-field","content":"(Optional) Set a default value for the field and add a description."},{"heading":"create-a-url-field","content":"Click Save field to add it to your table."},{"heading":"create-a-url-field","content":"Refer to the general guidelines on creating a field."},{"heading":"create-a-url-field","content":"type: note"}],"headings":[{"id":"create-a-url-field","content":"Create a URL field"}]},"url":"/docs/product-docs/fields/field-types/text-based/url","title":"URL","description":"This article explains how to create and use a URL field."},{"_id":"/docs/product-docs/fields/field-types/user-based/created-by","structured":{"contents":[{"content":"Since version v0.204.0 (Jan 2024), NocoDB internally captures the user who created a record. This information is stored as a system field in the database & is not included in the table by default. To view this information on the table, you can create a Created By field manually by following the steps below."},{"heading":"create-a-created-by-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-created-by-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-created-by-field","content":"Select the field type as CreatedBy from the dropdown."},{"heading":"create-a-created-by-field","content":"Click on Save Field button."},{"heading":"create-a-created-by-field","content":"type: note"},{"heading":"create-a-created-by-field","content":"When connected to an external database, user creating record information is not captured automatically. You can create a Created By field manually by following the steps above. For external database connections, this field is not a system field & can be deleted."},{"heading":"create-a-created-by-field","content":"Created By field is empty indicates the record either"},{"heading":"create-a-created-by-field","content":"predates the created by feature (v0.204.0, Jan 2024). Prior to this feature release, this information was not captured."},{"heading":"create-a-created-by-field","content":"was created using shared form."},{"heading":"create-a-created-by-field","content":"external database connection : information is captured only after the field is explicitly created."},{"heading":"cell-display","content":"Created By field is displayed as a read-only field in the table view. Displays email address of the user who created the record if the user has no display name set. If the user has a display name set, the display name is displayed."},{"heading":"current-user-filter-","content":"NocoDB allows you to filter views based on the currently logged-in user. This is particularly useful for creating personalized views that display records relevant to the user currently logged in. Find more details on how to filter by current user in the Filtering records by current user section."},{"heading":"related-fields","content":"Last Modified By"}],"headings":[{"id":"create-a-created-by-field","content":"Create a Created By field"},{"id":"cell-display","content":"Cell display"},{"id":"current-user-filter-","content":"Current User Filter ☁"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/user-based/created-by","title":"Created By","description":"This article explains how to create & work with a Created By field."},{"_id":"/docs/product-docs/fields/field-types/user-based/last-modified-by","structured":{"contents":[{"content":"Since version v0.204.0 (Jan 2024), NocoDB internally captures the user who last modified a record. This information is stored as a system field in the database & is not included in the table by default. To view this information on the table, you can create a Last Modified By field manually by following the steps below."},{"heading":"create-a-last-modified-by-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-last-modified-by-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-last-modified-by-field","content":"Select the field type as LastModifiedBy from the dropdown."},{"heading":"create-a-last-modified-by-field","content":"Click on Save Field button."},{"heading":"create-a-last-modified-by-field","content":"type: note"},{"heading":"create-a-last-modified-by-field","content":"When connected to an external database, user last modifying record information is not captured automatically. You can create a Last Modified By field manually by following the steps above. For external database connections, this field is not a system field & can be deleted."},{"heading":"create-a-last-modified-by-field","content":"Last Modified By field is empty indicates the record either"},{"heading":"create-a-last-modified-by-field","content":"record was created & never modified."},{"heading":"create-a-last-modified-by-field","content":"predates the last modified by feature (v0.204.0, Jan 2024). Prior to this feature release, this information was not captured."},{"heading":"create-a-last-modified-by-field","content":"external database connection : information is captured only after the field is explicitly created."},{"heading":"create-a-last-modified-by-field","content":"Last Modified By field is not updated when a record is initially created (is initialized to NULL)."},{"heading":"cell-display","content":"Last Modified By field is displayed as a read-only field in the table view. Displays email address of the user who last modified the record if the user has no display name set. If the user has a display name set, the display name is displayed."},{"heading":"current-user-filter-","content":"NocoDB allows you to filter views based on the currently logged-in user. This is particularly useful for creating personalized views that display records relevant to the user currently logged in. Find more details on how to filter by current user in the Filtering records by current user section."},{"heading":"related-fields","content":"Created By"}],"headings":[{"id":"create-a-last-modified-by-field","content":"Create a Last Modified By field"},{"id":"cell-display","content":"Cell display"},{"id":"current-user-filter-","content":"Current User Filter ☁"},{"id":"related-fields","content":"Related fields"}]},"url":"/docs/product-docs/fields/field-types/user-based/last-modified-by","title":"Last Modified By","description":"This article explains how to create & work with a Last Modified By field."},{"_id":"/docs/product-docs/fields/field-types/user-based/user","structured":{"contents":[{"content":"User field type allows you to assign a user from your current workspace to a record. For example, you can create a Task table with a User field type to assign a task to a user. You can also configure the field to allow assigning multiple users to a record."},{"heading":"create-a-user-field","content":"Click on + icon to the right of Fields header"},{"heading":"create-a-user-field","content":"On the dropdown modal, enter the field name (Optional)."},{"heading":"create-a-user-field","content":"Select the field type as User from the dropdown."},{"heading":"create-a-user-field","content":"Configure Allow adding multiple users toggle field (Optional)."},{"heading":"create-a-user-field","content":"Configure default value (Optional)"},{"heading":"create-a-user-field","content":"Click on Save Field button."},{"heading":"cell-display","content":"User field display is quite identical to Select field. It is displayed as a dropdown in the table view. Click on the dropdown to select a user. If Allow adding multiple users is enabled, you can select multiple users from the dropdown."},{"heading":"cell-display","content":"type: note"},{"heading":"cell-display","content":"If a user is removed from workspace, the user will be removed from the dropdown list. If such user was assigned to a record already, the user will be displayed as is."},{"heading":"cell-display","content":"To remove a user from a record, click on the x icon next to the user name."},{"heading":"cell-display","content":"If display name is not set for a user, the user's email address will be displayed."},{"heading":"current-user-filter-","content":"NocoDB allows you to filter views based on the currently logged-in user. This is particularly useful for creating personalized views that display records relevant to the user currently logged in. Find more details on how to filter by current user in the Filtering records by current user section."}],"headings":[{"id":"create-a-user-field","content":"Create a User field"},{"id":"cell-display","content":"Cell display"},{"id":"current-user-filter-","content":"Current User Filter ☁"}]},"url":"/docs/product-docs/fields/field-types/user-based/user","title":"User","description":"This article explains how to create & work with a User field."}]