# NocoBase Documentation
> Learn and master NocoBase quickly
## Get Started
- [How NocoBase Works](/ai/how-nocobase-works.md)
## AI
- [System Requirements](/ai/system-requirements.md): The system requirements described in this document apply only to the NocoBase application service itself, and cover the compute and memory resources required by the application processes. They do not cover dependent third-party services, including but not limited to: API gateways / reverse proxiesDatabase services (for example, MySQL or PostgreSQL)Cache services (for example, Redis)Middleware such as message queues or object storage Except for functionality validation or purely experimental scenarios, we strongly recommend deploying the above third-party services separately on dedicated servers or containers, or by using the corresponding cloud services. The system configuration and capacity planning of those services must be evaluated and tuned separately based on the actual data size, workload, and concurrency level.
- [Local Development Setup](/ai/local-development-setup.md): Prepare the local operating system environment for NocoBase CLI and NocoBase apps, covering Windows WSL, macOS, Linux, Node.js, Yarn, and Docker.
- [Installation and Version Comparison](/ai/quickstart.md): You can install NocoBase in different ways.
- [Install NocoBase App](/ai/install-nocobase-app.md): Install NocoBase CLI and quickly create a new NocoBase application with `nb init --ui`, so your AI Agent can start working right away.
- [Upgrade NocoBase App](/ai/upgrade-nocobase-app.md): Upgrade a NocoBase app saved as a CLI env with nb app upgrade, including env confirmation, upgrade commands, target versions, and verification.
- [NocoBase 2.0 to 2.1 Upgrade Guide](/ai/upgrade-from-2-0-to-2-1.md): Upgrade a NocoBase 2.0 app to 2.1, including old installation methods, nb CLI options, and the recommended migration path.
- [AI Agent Integration Guide](/ai/quick-start.md): Install NocoBase CLI, connect to or install a NocoBase application, and let AI Agents start operating your business system.
- [AI Builder Quick Start](/ai/ai-builder.md): AI Builder is NocoBase's AI-assisted building capability. Use natural language for data modeling, UI building, workflow orchestration, and permission setup, through either no-code configuration or AI-written code.
- [AI Agent Installation Guide](/ai/ai-quick-start.md): NocoBase CLI installation and configuration guide for AI Agents, including complete steps for environment checks, installation, initialization, and verification.
- [Claude Code + NocoBase: The Strongest AI Brain, Your NocoBase Chief Architect](/ai/claude-code/index.md): Connect Anthropic's official AI coding assistant Claude Code to NocoBase, and use natural language to operate your business system through Skills and CLI.
- [Use Codex to Operate NocoBase for Both Building and Development](/ai/codex/index.md): Connect OpenAI's official AI coding assistant Codex to NocoBase, and use natural language to operate your business system through Skills and CLI.
- [Hermes Agent: A NocoBase Assistant That Learns as You Use It](/ai/hermes-agent/index.md): Connect Hermes Agent to NocoBase, and through cross-session memory and automatic skill distillation, let AI understand your business system better over time.
- [NocoBase AI](/ai/index.md): NocoBase AI Capabilities: AI Building, AI Employees, AI Agent Integration, AI Tools & Resources.
- [NocoBase MCP](/ai/mcp/index.md): After enabling the NocoBase MCP service plugin, the NocoBase application exposes an MCP service endpoint for MCP clients to access and call NocoBase APIs.
- [OpenClaw + NocoBase: The Most Popular AI Agent Working for You](/ai/openclaw/index.md): Connect the world's most popular open-source AI Agent OpenClaw to NocoBase, and use natural language to operate your business system through Skills and CLI.
- [OpenCode + NocoBase: Open Source, Free, Vendor-Unlocked NocoBase Building](/ai/opencode/index.md): Connect the open-source AI coding assistant OpenCode to NocoBase, freely choose models, and use natural language to operate your business system.
- [Set Up a Local Development Environment on Windows with WSL](/ai/windows-wsl.md): Prepare Ubuntu, Docker Desktop, Node.js, Yarn, and Codex CLI with WSL 2 on Windows for NocoBase local development and AI Agent workflows.
- [Go Hands-Free with WorkBuddy Driving NocoBase](/ai/workbuddy/index.md): Remotely control NocoBase through Tencent's WorkBuddy, supporting WeCom, Lark, DingTalk, and other multi-platform access.
## Tutorials
- [NocoBase 2.0 Beginner Tutorial](/tutorials/v2/index.md): This tutorial walks you through building a minimal IT HelpDesk system from scratch using NocoBase 2.0. The entire system requires only 2 data tables and zero code, yet delivers ticket submission, category management, change tracking, access control, and a data dashboard.
- [Chapter 1: Getting Started — Build a Working System in 5 Minutes](/tutorials/v2/01-getting-started.md): In this series, we'll build a minimal IT HelpDesk system from scratch using NocoBase. The entire system needs only 2 data tables and zero lines of code — yet it will support ticket submission, category management, change tracking, access control, and even a dashboard. This chapter walks you through deploying NocoBase with Docker, completing your first login, and understanding the difference between UI Editor mode and Usage mode.
- [Chapter 2: Data Modeling — Two Tables for a Complete Ticket System](/tutorials/v2/02-data-modeling.md): In the last chapter, we installed NocoBase and got familiar with the interface. Now it's time to build the skeleton of our HelpDesk system — the data model. This chapter creates two collections — Tickets and Categories — and configures field types (single-line text, dropdown, many-to-one relations). The data model is the foundation: figure out what data you need and how it's related, then building pages and setting permissions becomes straightforward.
- [Chapter 3: Building Pages — From Blank to Functional](/tutorials/v2/03-building-pages.md): In the last chapter, we built the skeleton of our data tables — but right now the data only lives in the "backend." Users can't see it at all. In this chapter, we'll bring our data front and center: create a Table block to display ticket data, configure field visibility, sorting, filtering, and pagination, turning it into a real, usable ticket list.
- [Chapter 4: Forms & Details — Input, Display, All in One](/tutorials/v2/04-forms-and-details.md): In the last chapter, we built the ticket list and used a quick form to enter test data. In this chapter, we'll refine the form experience — optimize Form block field layouts, add Details blocks, configure linkage rules, and use change history to track every modification.
- [Chapter 5: Users & Permissions — Who Sees What](/tutorials/v2/05-roles-and-permissions.md): In the last chapter, we built forms and detail pages — our ticket system can now handle data entry and viewing. But there's a problem: everyone sees the same thing after logging in. Regular employees who submit tickets can access the admin pages, technicians can delete categories... that's not going to work. In this chapter, we'll add "access control": create roles, configure menu permissions and data scope restrictions — different people see different menus and operate on different data.
- [Chapter 6: Workflows — Let the System Do the Work](/tutorials/v2/06-workflows.md): In the last chapter, we added permissions so different roles see different content. But all operations are still done manually — when a new ticket comes in, someone has to go check; when a status changes, nobody gets notified. In this chapter, we'll use NocoBase's Workflow engine to make the system do things automatically — configure condition checks and update nodes for automatic ticket status transitions and timestamp recording.
- [Chapter 7: Dashboard — The Big Picture at a Glance](/tutorials/v2/07-dashboard.md): In the last chapter, we used workflows to make the system send notifications and record timestamps automatically. The system is getting smarter, but we're still missing one thing — a bird's-eye view. How many tickets are there? How many have been resolved? Which category has the most issues? How many new tickets come in each day? You can't answer these questions by scrolling through a list. In this chapter, we'll use chart blocks (pie, line, bar charts) and Markdown blocks to build a data dashboard that turns raw data into something you can understand at a glance.
- [Task Management System Overview](/tutorials/v1/index.md)
- [Chapter 1: Getting Started](/tutorials/v1/01-getting-started.md)
- [Chapter 2: Designing the System](/tutorials/v1/02-designing-system.md): Designing a task management system may sound complex, but with NocoBase, this process becomes straightforward and even enjoyable. We'll walk through defining requirements, designing the data structure, and planning future features, all step-by-step. Rest assured, we won't be wading through intimidating lines of code; instead, we’ll use the most intuitive and straightforward approach to build your task management system. 2.1 System Requirements Analysis Before we dive in, let's clarify the features this task management system should include. Consider how we typically manage tasks or what an ideal task management system might offer: Task Management: Users can create, edit, and delete tasks, assign tasks to different people, and track task progress in real-time.Multiple Views: Tasks can be displayed in various formats, such as a list view, Kanban board, Gantt chart, or calendar view for better visualization.Online Documentation: Tasks should support online document editing, helping team members understand task details.Attachment Management: Attachments like images, videos, and important records should be added to tasks as needed.Comments: Team members can comment on tasks, share feedback, and document discussions. Below is a flowchart to outline how these functional modules relate to each other: Clearer now, right? Introduction to Collection: NocoBase uses a "Collection" method to describe data structures, unifying data from various sources and providing a solid foundation for data management and analysis.It supports various types of collections including general, inheritance, tree, calendar, file, expression, SQL, view, and external collections, catering to diverse data handling needs.This design enhances the flexibility and efficiency of data operations. 2.2 Collections Design Now let’s dig into the design. To support these features, we need to plan the Collections for the system. Don’t worry; we won’t need a complex database structure—just a few simple tables. Based on our requirements analysis, we’ll design the following Collections: Users Collection: Stores user information in the system. Who is working on the tasks? Who is managing them?Tasks Collection: Contains detailed information for each task, including task name, document, assigned person, and progress status.Attachments Collection: Stores all task-related attachments, such as images and files.Comments Collection: Records user comments on tasks, allowing team members to interact. The relationships between these tables are straightforward: each task can have multiple attachments and comments, and all attachments and comments are created or uploaded by a user. This setup forms the core structure of our task management system. Here’s a diagram showing the basic relationships between these tables: 2.3 Table Design in NocoBase So, how do we implement this task management system with NocoBase? It’s even simpler than you might think: Tasks Table: This is the core of the entire system, storing detailed information for each task.Comments Table: Stores comments related to tasks so that team members can provide feedback. More complex features, such as attachment management and user information, are already built into NocoBase, so there’s no need for manual setup. Much simpler, right? We’ll start with a basic task data management system and gradually expand its functionality. For example, we’ll first design the basic fields for tasks, then later add the comments feature. The whole process is flexible and easy to control. Our table structure will look something like this, covering all the fields we need: Summary In this section, you’ve learned how to design a basic task management system. Using NocoBase, we started with requirements analysis and then planned the Collections and field structure. Next, you’ll find that implementing these features is even easier than designing them. For instance, the initial Tasks Table might be as simple as this: Pretty intuitive, right? Ready for the next step? (Chapter 3: Task Data Management) Keep exploring and creating endless possibilities! If you encounter any issues along the way, don’t forget to check the NocoBase Documentation or join the NocoBase Community for support. See you in the next chapter!
- [Chapter 3: Task Data Management](/tutorials/v1/03-task-data.md): With the requirements of our task management system outlined, it’s time to dive into the practical steps! Recall that our system should support Creating, Editing, and Deleting tasks, along with viewing the task list. All of this functionality can be achieved using NocoBase’s pages, blocks, and actions. For further details, see Menus and Pages in the official documentation. 3.1 How to Begin? You may remember that we previously covered how to create pages and display user lists. These pages act as canvases where you can arrange various blocks in any order and size. Here’s a quick recap of the steps: Create a Page: Just a few clicks, and your page is ready. Create a Table Block: Select a table block to display various data. Simple, right? But upon opening “Data List,” you might notice only the “User” and “Role”collections. Where is the task table? Don’t worry; it’s accessible through NocoBase’s Data Source feature. About Data Sources: A data source can be a database, API, or other data storage types. NocoBase supports various relational databases, including MySQL, PostgreSQL, SQLite, and MariaDB.NocoBase provides a Data Source Management Plugin for managing data sources and tables. However, to connect to data sources, you’ll also need specific Data Source Plugins. 3.2 Data Source: Your Collections Repository In NocoBase, all collections are stored within Data Sources, which act like books containing the design and structure of each collection. Let’s add our new chapter by creating a task collection. To explore more on data sources and collections, refer to Data Source Management and Collection Overview. Accessing Data Source Settings:Click Settings > Data Sources > Main Data Source Configuration.In the main data source, you’ll see existing collections, usually just “User” and “Role” by default. Now, let’s create the third collection – our task collection. We’ll follow our previous design to set up a simple task collection with the following fields: 3.3 Creating the Task collection Create Task collection:Click “Create collection” > Select General collection > Enter Collection display name (e.g., “Task collection”) and Collection name (e.g., “tasks”).The Collection name is a unique ID, recommended to use English letters, numbers, or underscores for easier reference.Submit to create. Default Fields: NocoBase generates default fields for each standard collection:ID: A unique identifier for each record.Created at: Automatically records when the task was created.Created By: Automatically records the task creator.Last updated at and Last updated by: Records each modification’s date and user. These default fields are exactly what we need, saving us from adding them manually. Create Custom Fields:Task Name: Click “Add Field” > Choose Single line Text > Set the 'Field display name' to “Task Name,” and the field name as “task_name.” Task Description: Add another field of Long text with the field name“task_description.” Congratulations! The task collection is now defined, and you have successfully created your own task data structure. 3.4 Creating the Task Management Page With the task collection ready, let’s present it on a page using a table block. Create Task Management Page:Click “New Page,” name it “Task Management.”Add a table block to display task data. Add Data:“Hmm, why is there no data?” Don’t worry; let’s add some!Click on “Configure Actions” at the top right, select Add action, and you’ll see an empty pop-up container.Next, add a form block > select Current Collection.Display the Task Name and Description fields, configure the submit action, and complete the form submission! Enter Data:Enter a test task, click submit, and success! Task data has been added. Exciting time! You successfully entered the first task data, wasn't that easy? 3.5 Task Filtering – Quickly Locate Tasks As tasks increase, how can you find specific ones quickly? Here’s where Filter Actions come into play. In NocoBase, you can easily locate tasks by setting filter conditions. 3.5.1 Enabling Filter Actions First, we need to enable filter actions: Hover over “Configure actions” and click the Filter Switch. 3.5.2 Using Filter Conditions Once enabled, the filter button appears on the page. Now, let’s test the filter by searching for tasks by Task Name: In the filter panel, select Task Name, and enter your query.Click “Submit” to see if the task list correctly displays the filtered results. 3.5.3 Disabling Filter Actions If you no longer need the filter, simply toggle it off: Reset Filter Conditions to ensure no active filters, then click “Reset.”Toggle Filter off again to hide it. 3.6 Task Editing and Deletion In addition to adding and viewing tasks, we also need to be able to Edit and Delete them. Since you’re familiar with adding blocks, fields, and actions, these will be straightforward: Edit Task:Add an Edit action in the task list configuration. Click Edit > Add Form (Edit) Block > Choose fields to edit.Delete Task:Similarly, enable the Delete action in the configuration, and the delete button appears. Click Delete > Confirm to remove the task from the list. Fantastic! You’ve now implemented Create, Read, Update, and Delete (CRUD) functionalities for tasks. Challenge Task As you become more proficient with NocoBase, here’s a little challenge: add a task status and allow attachments. Hints: Add to your Task Collection:Status field, a dropdown with options: Not Started, In Progress, Pending Review, Completed, Cancelled, Archived. Attachment field. Display the Status and Attachment fields in the Task Collection and the Add and Edit forms.Have any ideas yet? Don’t worry, the next chapter (Chapter 4: Task and Comment Plugins) will reveal the answer. Let’s stay tuned! Continue Exploring Don’t hesitate to consult the NocoBase Documentation or join the NocoBase Community if you have any questions!
- [Chapter 4: Task & Comment Plugins](/tutorials/v1/04-plugins.md)
- [Chapter 5: Tabs & Dynamic Blocks](/tutorials/v1/05-tabs-dynamic-blocks.md): Hello, everyone! Welcome to Chapter 5! This chapter is packed with exciting content as we expand functionality in the task management page, enabling various viewing options. I bet you’ve been looking forward to this, right? No worries — I’ll guide you step-by-step, and as always, we’ll breeze through it together! 5.1 Tab Containers for Organizing Blocks We’ve already set up a task management page, but to make the system even more intuitive, we want tasks to be viewable in different modes, such as Table, Kanban, Calendar, and even Gantt Chart. Using NocoBase’s tab feature, we can toggle between these different block layouts on the same page. Let’s walk through the steps. Creating a Tab Let’s start by setting up a tab. Adding a Sub-tabOpen your existing task management page, and within the page, create a sub-tab. You can name the first tab “Table View”, where we will display the task list block that was previously set up.Adding Another New TabNext, add a second tab, naming it “Kanban View”. Here, we’ll create a Kanban block to manage tasks. Ready? Let’s dive into creating each block type! Block Introduction: Blocks are data and content carriers that present information in the most suitable format on a website. Blocks can be added to a Page, Modal, or Drawer, and multiple blocks can be freely arranged via drag-and-drop. Using blocks in NocoBase makes page and feature building fast and flexible, while templates allow easy replication and referencing, greatly reducing setup time. 5.2 Kanban Block: Task Status at a Glance Kanban is an essential feature in task management systems, allowing intuitive task management through drag-and-drop. For instance, you can group tasks by status to get an instant overview of each task’s current stage. 5.2.1 Creating a Kanban Block Start Building a Kanban BlockWithin the Kanban View tab, click “Create Block,” select the task collection, and an option will appear asking which field you want to use for task grouping.Choosing a Grouping FieldWe’ll select the Status field to group tasks by their status. (Grouping fields should be of type “Dropdown (single select)” or “Radio group.”)Adding a Sorting FieldWithin the Kanban view, cards can be organized by a sorting field. To set this up, create a new sorting field named Status Sort (status_sort).This field allows cards to be arranged vertically within each status group. Later, when we drag and drop cards, the sorting values will be updated automatically and can be reviewed in the form. 5.2.2 Selecting Fields and Configuring Operations Lastly, be sure to select fields in the Kanban block, like task name and task status, to ensure that each card contains complete, relevant information. 5.3 Using Templates: Copying and Referencing After creating the Kanban block, we’ll need to set up an Add Form. Here, NocoBase provides a very useful feature — you can Copy or Reference a form template created previously, sparing you from reconfiguring a new one each time. 5.3.1 Saving a Form as a Template In your existing Add Form, hover over the form settings and select “Save as Template.” You might name this template “Task Form_Add.” 5.3.2 Copying or Referencing a Template When creating a form in the Kanban view, you’ll see two options: “Copy Template” and “Reference Template.” You might wonder, what’s the difference? Copy Template: This creates a duplicate of the form, allowing you to make independent changes without affecting the original form.Reference Template: This “borrows” the original form, so any changes made to it will automatically update all other forms that reference it. 5.4 Calendar Block: Clear Task Scheduling Next, let’s create a Calendar Block to help manage task schedules more effectively. 5.4.1 Creating a Calendar View 5.4.1.1 Adding Date Fields To use the calendar view, the task collection needs Start Date and End Date fields: Start Date (start_date): Marks the start date of the task.End Date (end_date): Marks the task’s end date. 5.4.2 Creating the Calendar Block In the Calendar View, create a calendar block, select the task collection, and set it up using the Start Date and End Date fields. This configuration will display tasks as spans on the calendar, offering a clear view of task timelines. 5.4.3 Exploring Calendar Interactions On the calendar, you can easily choose date, click to edit task details, and remember to copy or reference templates as needed. 5.5 Gantt Block: The Ultimate Tool for Task Management The last block we’ll explore is the Gantt Block, a tool widely used in project management to track task progress and dependencies. 5.5.1 Creating a “Gantt View” Tab 5.5.2 Adding a “Completion Percentage” Field To show task progress effectively in the Gantt chart, we’ll need to add a new field named Completion Percentage (complete_percent), with a default value of 0%. 5.5.3 Creating the Gantt Block In the Gantt View, create a Gantt block, select the task collection, and configure it with the start date, end date, and completion percentage fields. 5.5.4 Using the Gantt Dragging Feature In the Gantt view, you can adjust task progress and timelines by dragging, with the start date, end date, and completion percentage fields updating automatically as you make changes. Summary Fantastic! You now know how to use various blocks in NocoBase to display task data, including Kanban Block, Calendar Block, and Gantt Block. These blocks not only make task management more intuitive but also provide great flexibility. But this is just the beginning! Imagine a team where different members have distinct roles — how can we ensure seamless collaboration and data security, allowing each person to see and edit only the content relevant to them? Are you ready? Let’s move on to the next chapter: Chapter 6: User & Permissions. Keep exploring and unleash your creativity! If you encounter any issues, don’t forget to consult the NocoBase Official Documentation or join the NocoBase Community for discussions.
- [Chapter 6: User & Permissions](/tutorials/v1/06-user-permissions.md): In team collaboration, it’s essential for everyone to clearly understand their roles and permissions to ensure smooth progress. Today, we will learn about role creation and permission management to make teamwork more streamlined and organized. Don’t worry—this process is simple. We’ll guide you through it step by step, providing guidance at each critical stage. If you encounter any issues, please feel free to reach out to our official forum for assistance. Requirements Analysis We need a "Partner" role with specific permissions to participate in task management but without the ability to freely modify others' tasks. This approach allows us to assign tasks and collaborate flexibly. Introduction to Roles and Permissions: Roles and permissions are essential mechanisms for managing user access and operations. Each user can have multiple roles.By setting role permissions, we can control user behavior and operations within the system, as well as limit displayed functionality, which is crucial for access control. Using roles and permissions to bind users enables you to manage your system more effectively. As an administrator, you can assign and adjust permissions as needed. 6.1 Role Creation and Assignment 6.1.1 Creating the “Partner” Role Click on "Users and Permissions" in the top right of the interface, and select "Roles and Permissions". This is where we configure roles and manage permissions.Click on the "Create Role" button, and a dialog box will appear. Here, name the role Partner and confirm to save. You have successfully created a new role! Next, we need to assign permissions to this role to ensure they can participate in task management. 6.1.2 Assigning the New Role to Yourself To ensure that the role permissions are working as expected, we can first assign this role to our own account for testing. It’s straightforward: In the user management section, find your account, click to enter, select "Roles & Permissions," and choose "Partner." Now you can use your account to simulate the "Partner" role experience. Next, let’s see how to switch roles. 6.1.3 Switching to the “Partner” Role Since you’ve assigned yourself the "Partner" role, let's explore how to switch roles. Click on Personal Center in the upper right corner, then choose "Switch Role."You may notice that the "Partner" role does not immediately appear in the list. Don’t worry; just refresh the page/clear cache, and the role should appear. 6.2 Assigning Page Permissions to the Role Once you switch to the "Partner" role, you may notice that there are no visible pages or menus. This is because we haven’t assigned permissions for the role to access specific pages yet. No problem—let’s configure access permissions for the "Partner" role. 6.2.1 Assigning Task Page Permissions to the “Partner” Role First, switch back to the Root role (Super Administrator), and go to the "Roles &Permissions" page.Click on the "Partner" role to open the configuration page. Here, you will see a "Menu" tab, which represents all pages in the system.Check the "Task Management" page permission to allow the "Partner" role to access the task management page. Return to Personal Center, switch back to the "Partner" role, and you should now be able to see the task management menu page. 6.2.2 Setting Collection Action and Operation Permissions Although the "Partner" role now has access to the task management page, we need to further restrict their operational permissions. We want the "Partner" to: View and edit tasks assigned to them,Update task progress,But not create or delete tasks. To achieve this, we need to configure the permissions for the "Tasks." Let’s proceed! 6.2.2.1 Configuring Collection Action Permissions for the “Partner” Role Go to the "Roles and Permissions" page, click on the "Partner" role, and switch to the "Data Source" tab.Here, you will find settings for "Action permissions." Locate the "Tasks," and assign the "Partner" the “View” and “Edit” permissions.We won’t assign "Add" or "Delete" permissions to other roles, so no need to assign these from the start. At this point, the Partner role has the permissions to view and edit the task data. Next, we need further controls to ensure they can only edit tasks assigned to them. 6.3 Adding a “Responsible Person” Field to Tasks Now, we’ll assign a responsible person to each task. By designating a responsible person, we ensure that only the task’s responsible person can modify the task, while others can only view it. To achieve this, we’ll use a relationship field to link the task collection with the user collection. 6.3.1 Creating the “Responsible Person” Field Go to the "Task collection," click on "Add Field," and select "Relationship Field."Choose a "Many-to-One" relationship (since each task can have only one responsible person, but a user can be responsible for multiple tasks).Name the field “Responsible Person (Assignee)” . No need to select the reverse relationship for now. 6.3.2 Displaying the “Responsible Person” Field Next, we need to ensure the "Responsible Person" field is displayed in the task management page’s collection and form, making it easy to assign a responsible person to each task. (If the default display field is set to an ID, simply change the title field to “Nickname” to display names.) 6.4 Using User & Permissions Management to Control Access Here comes the highlight! Now, we’ll use NocoBase’s Permission Management to implement a powerful feature: only the responsible person and creator of a task can edit it, while others can only view it. This is where NocoBase’s flexibility truly shines. 6.4.1 Simple Trial — Only the Responsible Person Can Edit the Form We want only the task’s responsible person to be able to edit it, so we’ll set the following conditions: Return to the “Partner” role’s data collection permissions, open the configuration for the task collection, and click on “Data Scope” under “Edit Permission.”Create a custom rule called “Assignee Can Edit”: When "Assignee/ID" equals "Current User/ID," editing is permitted; This means that only the task’s responsible person can edit it, while others can only view it.Since we’re using the user collection for the responsible person field, and the logged-in user is also in the user collection, this rule perfectly meets our initial requirement. Click Add, then Confirm. Now let’s go back to the page to check: Perfect! When we switch to the Partner role and revisit the page, only tasks for which we are the assignee will can edit tasks correctly. 6.4.2 Adding Conditions for Creators to Modify Forms You may have noticed a new issue: Since we are not the responsible person for most tasks, we can’t edit the form ourselves, and other colleagues also cannot see task details! No worries—remember, we assigned the Partner role view permissions for all data earlier? Return to the page configuration, select “View” and add a view operation. Similar to the edit permissions dialog, create a view dialog, and make sure to choose the “Details” section. Done! 6.5 Verifying Permission Control If you switch between different users to view the form, you’ll notice that the form sections automatically adjust to show only the operations permitted for each user. All tasks for which a user is responsible will display editing options, while tasks outside their responsibility will only show viewing options. Switching back to the Root role restores full permissions. This is the powerful permission control system of NocoBase! Next, you can freely assign task responsibilities, invite teammates to collaborate, and test the permissions we have set. 6.5.1 Creating a New User and Assigning a Role Create a new user, for example, Tom, and assign him the "Partner" role. In the task management page, assign a few tasks to Tom. 6.5.2 Login Testing Have Tom log into the system to check if he can view and edit tasks assigned to him. Based on the permission rules, Tom should only be able to edit tasks he is responsible for, while all other tasks are read-only. The edit form permissions have now been successfully synchronized across all pages! Summary Congratulations! By now, you’ve learned how to create roles, assign permissions, and set custom permissions in NocoBase, ensuring that team members can only edit tasks assigned to them. Through these steps, you have established a clear, organized permission management system for team collaboration. Challenge Task Currently, Tom can view and edit tasks assigned to him, but you may notice he cannot leave comments or engage in task discussions. So, how can we assign Tom permissions to freely comment and participate in discussions? This will be an interesting challenge! Challenge Hint: You can revisit the role permission settings and adjust the "Partner" role, especially the collection settings, to see how to allow Tom commenting privileges while ensuring his other task restrictions remain intact. Give it a try! We’ll reveal the solution in the following section. In the next chapter, we’ll implement the “Team Member Activity” feature and introduce another powerful module: Workflow. With Workflow, you can enable data flow, trigger various actions, and automate complex business processes in your system. Ready to continue exploring? See you in Chapter 7: Workflow Explore further and unleash your creativity! If you encounter any issues, don’t forget to check the NocoBase Official Documentation or join the NocoBase Community for discussions.
- [Chapter 7: Workflow](/tutorials/v1/07-workflow.md): Congratulations on reaching the final chapter! Here, we’ll introduce and briefly explore the powerful workflow features in NocoBase. This feature lets you automate tasks within the system, saving time and enhancing efficiency. Challenge Solution from the Previous Chapter Before diving in, let’s quickly recap the solution to the last challenge. We successfully set up comment permissions for the "Partner" role as follows: Add Permission : Allows users to post comments.View Permission : Allows users to view all comments.Edit Permission : Users can edit only their own comments.Delete Permission : Users can delete only their own comments. With these permissions, Tom can freely post comments, view others’ comments, and ensure that only he can edit or delete his own posts. Now, let’s implement an automation: whenever a task assignee is changed, the system will automatically send a notification to the new assignee, informing them of the task transfer. Workflow: The Workflow Plugin is a powerful automation tool commonly used in Business Process Management (BPM) to design and configure business processes based on data models.By defining triggers and configuring process nodes, this plugin automates the flow of business processes, enabling efficient task management and data-driven operations. 7.1 Creating a Workflow 7.1.1 Setting Up a Workflow in the Admin Page First, switch to the Root Role – the system administrator role with all permissions. Then, navigate to the Workflow Module. Click the “Add” button in the top right corner to create a new workflow, and fill in the basic information: Name: Send a system notification when the assignee is changed.Trigger Type: Select "Collection Event." 7.1.2 Explanation of Trigger Types Collection Event: Triggers when changes occur within a collection (add, modify, delete). This is ideal for tracking updates to task fields, such as when the assignee changes.Scheduled Task: Automatically triggers at specified times, suitable for schedule-based automation.Post-action Event: Binds to an action button and triggers after a user action, like clicking "save" on a form. In future cases, you may also find trigger types such as "Pre-action Event," "Custom Action Event," and "Approval," which can be unlocked through additional plugins. In this scenario, we use the Collection Event to monitor changes to the "Task Assignee" field in the "Task" collection. After submitting the workflow, click Configure to enter the workflow settings page. 7.2 Configuring Workflow Nodes 7.2.1 Setting Trigger Conditions Let’s begin building the automated notification process by configuring the first node and setting conditions to automatically activate the workflow under specific circumstances. Collection: Select "Task." (This collection triggers the workflow and pulls relevant data. We want the workflow to activate when the "Task" collection is updated.)Trigger on: Select "After adding or updating data."Trigger Field: Choose "Task Assignee."Only triggers when match conditions: Select "Task Assignee / ID" "exists," ensuring a notification is only sent when a task is assigned.Preload associations: Choose "Task Assignee," enabling its information to be used in the following steps. 7.2.2 Enabling the "In-app Message" Channel Next, we’ll create a node to send notifications. Before proceeding, we need to create an “In-app Message” channel for notifications. Go back to Plugin Management, select "Notification Management," and create a task notification (task_message).After creating the channel, return to the workflow and add a “Notification” node. Node Configuration:Channel: Select "Task Notification."Receivers: Choose “Trigger Variable / Trigger Data /Task Assignee / ID” to target the new assignee.Message Title: Enter “Assignee Change Reminder.”Message Content: Enter “You have been assigned as the new task assignee.” Once complete, click the toggle in the upper right to activate this workflow. Configuration complete! 7.2.3 Testing the Notification It’s an exciting moment. Go back to the page, edit any task, change the assignee, and click submit. The system has now sent the notification! That’s the basic workflow setup. However, there’s one more improvement to make: The notification should dynamically insert task information so users know which task was reassigned. 7.3 Refining the Workflow 7.3.1 Version Management Return to the workflow configuration. You’ll notice the workflow interface is now grayed out and cannot be edited. No worries. Click the ellipsis in the upper right corner > Duplicate to New Version, and you’ll enter the new version’s configuration page. The previous version is retained, so by clicking the Version button, you can switch back to historical versions (note: executed workflow versions cannot be modified). 7.3.2 Enhancing Notification Content Now, let’s personalize the notification by adding details about the task transfer. Edit the Notification Node. Change the message content to: “Task 《【Task Name】》 has been reassigned to: 【Task Assignee / Nickname】.” Use the variable panel on the right to add the task name and Task Assignee fields.Then, click the toggle in the upper right to activate this version. With the updated workflow version activated, you’ll see the task name in the system notification upon the next test. Summary Fantastic! You’ve successfully created an automated workflow that triggers based on changes to task ownership. This feature not only saves time but also enhances team collaboration. At this point, our task management system has gained powerful capabilities. Conclusion and Next Steps You’ve now completed a fully functional task management system from scratch – covering task creation, comments, role permissions, workflows, and system notifications. The flexibility and extensibility of NocoBase open up limitless possibilities for you. In the future, you can explore more plugins, customize features, or create complex business logic. With this knowledge, you’ve mastered the basics and core concepts of NocoBase. We look forward to seeing your next innovation! For any questions, feel free to consult the NocoBase official documentation or join the NocoBase community for discussions. Keep exploring and unleash endless potential!
- [Project Management Overview](/tutorials/v1/08-project-overview.md)
- [Chapter 8: Knowledge Base - Tree Collection](/tutorials/v1/09-knowledge-base.md): 8.1 Welcome to a New Chapter In this chapter, we embark on creating a knowledge base—a comprehensive module designed to help us manage and organize documents, tasks, and information seamlessly. By designing and implementing a tree-structured document collection, we’ll establish an efficient system for tracking document status, managing attachments, and linking related tasks. 8.2 Exploring Database Design 8.2.1 Initial Design and Creating the Document Collection We’ll begin with a straightforward database design by building a "Document Collection" to catalog all document information. Key fields in the Document Collection include: Title: Single line text.Content: Markdown(Vditor).Document Status: Single select, with options including Draft, Published, Archived, and Deleted.Attachment: Attachment, Allows adding files and images to enrich document content.Related Task: A many-to-one relationship field to link the document with a task for easy reference in task management. As our system evolves, we’ll continue to add fields for more detailed document management. 8.2.2 Constructing a Tree Structure for Directory Management A tree collection (provided by the plugin plugin-collection-tree), is a collection structure mirrors a tree, where each data item may have one or more child items, and those child items can, in turn, have their own descendants. To ensure organization and hierarchy, we’ll structure our Document Collection as a Tree collection, allowing for intuitive parent-child classification. This setup automatically generates the following fields: Parent ID: Identifies the parent document for the current document.Parent: A many-to-one field establishing parent-child relationships.Children: A one-to-many field that enables viewing all child documents under a parent document. These fields are essential to maintaining the directory hierarchy, so it’s recommended not to alter them. We’ll also establish an association with the Task Collection (Many-to-One), complete with inverse field, so that document lists can be directly created within the task association popup. 8.3 Creating the Document Management Page 8.3.1 Adding a New Document Management Menu In the main system menu, add a new page—"Document Management", then select an appropriate icon. Next, create a table block for our Document Collection, enabling basic actions like Add, Delete, Edit, and Search, and input test data to validate the design of the data collection. Exercise Add a parent document named “Document 1” on the Document Management page.Under “Document 1,” add a child document named “Chapter 1.” 8.3.2 Converting to a Tree Table View I know you're probably wondering why it's not a catalog tree structure. By default, the table block displays as a regular table. Here’s how to convert it to a tree table view: Click on the top right corner of the table block > Tree Table.You will notice that the moment you select it, a "Expand All" toggle appears below the Tree Table.At the same time, the previously created "Chapter One" disappears.Click on the "Expand All" option below the Tree Table to activate it.Now, we can see the parent-child structure of the document displayed more intuitively, allowing us to easily view and expand all document levels.Let's proceed with the "Add Sub-record" action. Tree table conversion complete! 8.3.3 Configuring “Add Child Record” To add child records, we’ll configure the necessary elements. When the Parent Record field is selected, it defaults to "read-only" as new entries are created within the current document directory. If there is too much task data, you might find it particularly troublesome to assign related tasks. We can set a default value for task filtering, making it equal to the tasks associated with the parent record. The default value may not take effect immediately, let's close and click again to see that it has been auto-filled~! 8.4 Configuring Form Templates and Task Associations 8.4.1 Creating Table and Form Templates To ease future management, save the Document Table along with its create/edit forms as templates for reuse on other pages. 8.4.2 Displaying a Copied Document Table In the Task view popup, add a new tab titled "Documents." Within this tab, add a form block > Other Records > Documents > “Copy Template” > and import the previously created document table template. (Ensure you select Copy Template). This method streamlines document list creation. 8.4.3 Adjusting Task Associations Since we copied an external table template, it’s not yet linked with the Task Collection. You might notice it displays all document data, which isn’t ideal. This situation is quite common. If we have not created a corresponding relationship field but still need to display related data, we must manually link the two. (Note: We use a copy of the template, not a reference template; otherwise, all changes we make will synchronize with other tables block!) Data Display Association We click on the top right corner of the table block and Set the data scope" to: 【Task/ID】= 【Current Popup Record/ID】 Successfully, the documents retained within the table are those associated with our task. Add form block association. Enter the Add Block screen: For fields related to associated tasks, set the default value to > [Parent Popup Record]. The parent popup is part of the “View” operation for the current task data and will directly link to the corresponding task data. Setting it to read-only (view mode)indicates that only the current task can be linked within this popup. Done! Now, newly added and displayed items will all be associated with the document of the current task. If you're attentive, you might add the association filter in “Edit” and “Add Subtask.” To make the tree structure clearer and the Actions Column neater, let's move the title to the first column. 8.5 Filtering and Searching in Document Management 8.5.1 Adding a Filter Block Add a filter block to Documents to enable advanced search options. Add a filter block on the Document Management page.Select the form for filtering and drag it to the top.Check fields such as Title, Status, and Task as filter criteria.Add “Filter” and “Reset” actions. This filter form acts as a search box, allowing for rapid document retrieval with keyword entry. 8.5.2 Connecting Data Blocks At this point, you may notice that clicking yields no result. We need one final step: linking blocks with search functionality to each other. Click on Settings in the upper right corner of the block and select Connecting Data Blocks.Here, you’ll see a list of available blocks that can be linked. Since we created a document form, it will search for all data blocks related to the document table (there’s only one on this page) and display them as options. No need to worry about getting confused, as moving the mouse over an option will automatically focus the screen on the corresponding block.Click to enable the block you want to link and test the search. Click the configuration button in the top-right corner of the filter block to link it to the main data block of the document table. This way, whenever you set a condition in the filter block, the table block automatically updates the results based on the condition. 8.6 Setting Permissions for the Knowledge Base To protect documents and standardize management, assign permissions based on user roles, allowing different users to view, edit, or delete documents according to their permissions. However, we will be upgrading the document database to add features for news and task announcements, allowing for more flexible permissions. 8.7 Summary and Next Steps In this chapter, we built the foundation of a knowledge base, incorporating a Document Collection, Tree Collection, and task associations. With added filter blocks and reusable templates, we’ve optimized document management for efficiency. Next, we’ll build a personal dashboard featuring data analysis charts and key information displays! Keep exploring and creating endless possibilities! If you encounter any issues along the way, don’t forget to check the NocoBase Documentation or join the NocoBase Community for discussions and support.s
- [Chapter 9: Task Dashboard & Charts](/tutorials/v1/10-dashboard-charts.md): Dear friends, We’ve finally reached the long-awaited chapter on visualization! In this chapter, we’ll explore how to quickly zero in on the information we truly need amidst the clutter. As managers, we mustn’t lose our way in the complexity of tasks! Let’s tackle task statistics and information display together with ease. 9.1 Focus on Key Information Our goal is to gain a quick overview of team tasks, highlighting those we are responsible for or interested in, without being overwhelmed by unnecessary data. Let’s start by creating a team task statistics chart. 9.1.1 Create a Chart Block With a new page: Create a New Chart Data Block. (Within this main block, you can build multiple charts.)Select the Target Table: Task Table. Then proceed to chart configuration. 9.1.2 Configure Task Status Statistics If we want to count the number of tasks in different states, what should we do? First, we have to process the data: Measures: Choose a unique field, such as the ID field to count.Dimensions: Group data by status. Next, Chart Configuration: Select a bar or column chart.Set the X field to "Status" and the Y field to "ID." (Tip: Remember to choose the "Status" in dimension fields for better visual distinction.) 9.1.3 Multi-Dimensional Statistics: Tasks Per Person Want to view task counts per person and their statuses? Use dual dimensions by adding the "Assignee/Nickname" dimension. Click "Run Query" in the top-left corner. If the result isn't what you expected, select "isGroup" to display a comparative breakdown of tasks by assignees. Meanwhile, if you want to display the overall number of stacked, you can choose “isStack”. In this way, we can see the percentage of tasks for each person + the overall task status! 9.2 Data Filtering and Dynamic Display 9.2.1 Configure Data Filters Of course, we can further remove the “Canceled” and “Archived” data, just remove these two options in the left filter conditions, I believe you are very familiar with these conditions! Once filtered, click confirm, exit configuration, and your first chart is ready! 9.2.2 Duplicate Charts Need both "isGroup" and "isStack" charts without starting from scratch? Duplicate your chart: Click the copy icon on the top-right of your first chart block.Slide the wheel down, the second chart has appeared, drag and drop it to the right, remove the “isStack” configuration, change to “isGroup”. 9.2.3 Dynamic Filtering For interactive filtering of task data: Of Course! We open "Filter" below the chart data block, and the filter box has appeared above. We show the desired fields and set the filtering conditions for the fields. (For example, change the date field to "between") 9.2.4 Creating Custom Filter Fields What if we also want to include “Canceled” and “Archived” data in special cases, and support dynamic filtering and set filtering defaults? Let's create a customized filter field! You can easily configure filters by selecting fields from associated data tables or creating custom fields.(Only available within chart block)Options include editing field titles, descriptions, operators, and setting default values (e.g., the current user or date), making filters more tailored to your needs. fill in the title of the “Status”.Leave the Source field blank.Select “Checkbox” for the component.Options are filled in according to the value of the Status attribute when the database is created (note that the order of attributes here is Option Label - Option Value). Create successfully, click “Set Default Value”, select the option we need. After setting the default value, go back to the chart configuration, change the filter condition to “Status - is any of - Current filters / status”, and then confirm! (Both charts should be changed.) Done, let's filter test, the data has been perfectly rendered. 9.3 Dynamic Links and Task Filtering A powerful feature: clicking on a statistic to jump to filtered tasks. Let’s make it happen. 9.3.1 Using the "Not started" Example, Create a Statistical Chart Set the Measures to ID - Count.Add a filter: Status = "Not Started"Set container name to "Not Started", Chart Type to "Statistic", and leave chart name blank. The unstarted stats have been successfully displayed. Let's make five copies by state and drag them to the top. 9.3.2 Configure Link Filtering Go back to the page containing the task management table block and observe the link format in the browser's address bar (usually something like http://xxxxxxxxx/admin/0z9e0um1vcn). Assume xxxxxxxxx represents your website domain, and /admin/0z9e0um1vcn is the path. (We only need to find the last /admin.)Copy part of the link:We need to perform a link jump. To do this, we first extract a specific portion of the link.Copy from the text after admin/ (excluding admin/) to the end of the link. For example, in this case, the portion to copy is: 0z9e0um1vcn. Move the cursor over "Not Started," and you’ll notice the cursor changes to a hand icon. Click on it to jump successfully. Configure the chart link:Now, let’s add a filter parameter to the link. Do you remember the database identifier for task status? We’ll need to append this parameter to the end of the link to further filter tasks.Add ?task_status=Not started to the end of the link. Your link will then look like: 0z9e0um1vcn?task_status=Not started. Understanding URL Parameters: When adding parameters to a URL, there are formatting rules to follow:Question mark (?): Indicates the start of the parameters.Parameter name and value: Format as parameter_name=parameter_value.Multiple parameters: Use the & symbol to connect them. For example: http://xxxxxxxxx/admin/hliu6s5tp9x?status=todo&user=123. In this example, user is another parameter name, and 123 is its corresponding value. Go back to the page, click to jump, and you’ll find the desired parameters are now included in the URL. (Like http://xxxxxxxxx/admin/0z9e0um1vcn normally) 9.3.3 Associating URL Filter Conditions Why hasn't the table changed yet? Don't worry, let's finish the last step together! Go back to the form block configuration and click on “Set data range”.Select “Status” equal to “URL search params / status”. Click on “Confirm” and the filtering is successful! 9.4 Data Visualization: Stunning Charts Data Visualization: ECharts (Commercial Plugin) ECharts offers more advanced and customizable configuration options, such as "Line Chart (Multi-Dimension)," "Radar Chart," "Word Cloud," and more. If you want to access more chart configuration options, you can enable "Data Visualization: ECharts"! 9.4.1 Quickly Configure a Stunning Radar Chart If you notice data overlap, remember to adjust the size or radius to ensure that all information is clearly displayed! After configuration, simply drag and adjust the display style to complete! 9.4.2 More chart containers Here are more charts for you to explore. Word Cloud Funnel Multiple Indicators (Dual Axes, Echarts Line) For bi-axial charts you can add more indicators Diverging bar 9.5 Mini Challenge Configure URL parameters for the remaining statuses: "In Progress," "Pending Review," "Completed," "Canceled," and "Archived."Set up a "Assignee" multi-select field, just like the "Status" field, with a default value of the current user’s nickname. Looking forward to seeing you in the next chapter! Keep exploring and creating endless possibilities! If you encounter any issues along the way, don’t forget to check the NocoBase Documentation or join the NocoBase Community for discussions and support.
- [Chapter 10: Dashboard Filters & Conditions](/tutorials/v1/11-dashboard-filters.md): In this chapter, we will guide you step by step through the next part of creating a task dashboard. If you have any questions, feel free to consult the forums at any time. Let’s start this exploration journey by reviewing the content from the previous chapter! 10.1 Reveal the Previous Chapter's Solutions 10.1.1 Status and Links First, we need to add navigation links for data in different statuses to enable quick access. Below is the link structure for each status: (Assume the base link is http://xxxxxxx/admin/hliu6s5tp9xhliu6s5tp9x) Mystery Solved 10.1.2 Adding a Multi-Select Option for Assignee Create a Custom Fields: Add a "Assignee" field of type "multi-select," and populate it with members’ nicknames (or usernames) to facilitate quick assignment of tasks. Configure the Report: Set up “Task Assignee / Nickname (Username)- contains - Current Filter / Assignee” as a filter condition to quickly locate tasks associated with the selected assignee. Perform several filter tests to confirm proper functionality. 10.2 Associating the Dashboard with Users Content can be displayed based on different users. Here’s how to do it: Set the Default Value of the "Assignee" Field to "Current User/Nickname (Username)": This allows the system to automatically display tasks related to the current user, improving operational efficiency. After Refreshing the Page: The dashboard will automatically load data associated with the currently logged-in user. (Don’t forget to add user filter conditions to the relevant charts.) 10.3 Redesigning Task Filtering Some users may notice a design flaw: When filtering by status directly in the table block's "Set the Data Scope," tasks are prematurely restricted to a specific status. When attempting to filter by a different status later, the data appears empty! Here’s how to resolve this by changing the filtering approach: Remove the Data Filtering Method: Prevent status data from being locked into a specific range, allowing for flexible filtering needs. Configure Default Values in the Filtering Form Block: Do you remember our configured Filter blocks? Create a form block for task table filtering block and configure status and other necessary fields to populate variables from the URL. (Ensure it connects to the task table block that needs filtering.) Set the default value of the status field to URL search params/task_status. Test the New Filtering Functionality: Dynamically switch status filters as needed. Optional: To focus each user on their tasks, set the default value of the "Assignee" field to "Current User." 10.4 News, Notifications, and Information Highlights Let’s enhance the document library to display essential information on the dashboard. In long-term document management, diverse requirements often emerge as the volume of materials grows: News: Highlight project updates, achievements, and milestones.Temporary announcements/reminders. 10.4.1 Hot Information (News) Add a "Hot Information" Field: Add a checkbox field named "Hot Information" in the document table to mark whether the document is significant news. Add and Select Document Information: Choose a document and enable the "Hot Information" checkbox in the edit form. Create a "List" Block: Go back to the dashboard and create a "List" block to display the document table. Drag it to the right, showing "Creation Date" and "Title." Adjust field widths and disable "Show Title." Display Hot Information: In order to reflect real-time, we can show the time at the same time. Arrange in descending order by creation date to showcase the latest news. A simple hot information section is now ready, allowing team members to keep up with critical project progress! 10.4.2 Announcements Notification The next step involves creating a straightforward announcement feature. This temporary notification doesn’t require long-term display or project tracking—it’s just for reminders or alerts about temporary matters. Create a Markdown Block: Use Markdown syntax to add announcement content to any area of the dashboard. For practical use of Markdown, you can refer to our official Demo, official documentation, or the “Lightweight Documentation” tutorial. As an simple example, based on the HTML language written "A gorgeoAus announcement" to demonstrate the power of the Markdown block. Sample code: 10.5 Summary By following the configuration steps above, we successfully created a personalized dashboard that enables team members to efficiently manage tasks, monitor project progress, and promptly receive announcements and notifications. From status filtering and Assignee settings to hot information display, these features aim to optimize user experience and enhance system convenience and flexibility. With our personalized dashboard now ready, we invite you to explore and adapt it to your unique needs, let us step into next chapter! Keep exploring and creating endless possibilities! If you encounter any issues along the way, don’t forget to check the NocoBase Documentation or join the NocoBase Community for discussions and support.
- [Chapter 11: Subtasks & Work Hours](/tutorials/v1/12-subtasks-workhours.md): Hello, team! We've finally reached a new chapter! As our business expands, tasks have become increasingly numerous and complex. We’ve realized that simple task management is no longer sufficient. It's time to manage tasks more intricately by breaking them into multiple levels, which will help everyone complete them more efficiently. 11.1 Task Planning: From Global to Local We’ll divide complex tasks into multiple manageable subtasks, enabling progress tracking for a clear understanding of task completion status. Using multi-level management, we’ll organize these subtasks effectively. Let’s dive into planning! 11.2 Creating a Subtask Table 11.2.1 Designing the Subtask Structure First, we’ll create a "Subtask Table" (Tree collection). Subtasks will have attributes similar to main tasks, such as "Task Name," "Status," "Assignee," and "Progress." Additional fields like comments or documents can be added as needed. To link subtasks to main tasks, we’ll establish a many-to-one relationship, assigning each subtask to a main task. A reverse relationship allows viewing or managing subtasks directly within the main task. 💡 Tip: It’s recommended to create subtasks through a linked block on the main task page for a more streamlined process! 11.2.2 Displaying Subtasks in the Task Management Interface In the task management interface, set the "Task Table" view mode to Page View. Create a new "SubTasks" tab within the page and add the subtask table, using the tree structure for display. This way, subtasks can be managed and viewed on the same page. 11.3 Work Hour Comparison Chart: Estimating Overall Work Hours and Progress (Optional) Next, we strike while the iron is hot, to make the work details of the task and the work comparison chart, in order to estimate the overall work time and task progress. 11.3.1 Adding Time and Work Hour Fields In the subtask table, add these fields: Start DateEnd DateEstimate HoursRemain Hours These fields allow dynamic calculation of task duration and work hours. 11.3.2 Calculating Task Duration Create a new formula field, "Days," in the subtask table to calculate task duration. Formula Calculation Options: Math.jsUsing the math.js library, you can compute complex numeric formulas.Formula.jsUses Formula.js library to calculate common formulas, if you are familiar with Excel formulas, this will be easy for you!String TemplatesAs the name suggests, it is a means of splicing characters, we usually need dynamic descriptions, numbering and so on, you can use this form of splicing! For this task, use the Formula.js library to calculate common formulas. The formula for task duration: Ensure all formula elements are in lowercase English to avoid errors. Check the page, and you’ll see that the duration adjusts dynamically based on the start and end dates! 11.4 Daily Work Hour Reporting: Tracking Actual Progress (Optional) 11.4.1 Creating a Daily Work Hour Reporting Collection Create a new table for daily work hour reporting. Add fields such as: Day Hours (integer recommend)DateIdeal Hours (integer)Associated Sub-task (Many-to-One relationship with subtasks). 11.4.2 Displaying Daily Work Hours in the Subtask Page Return to the subtask editing page, and set the daily work hour table as a Sub table for display. Drag other relevant fields into the layout. This allows easy data entry and review directly on the subtask page. 11.5 Key Calculations & Linking Rules (Optional) In order to more accurately estimate the task progress and remaining work hours, we next perform some key configurations. 11.5.1 Setting Required Fields for Subtasks Mark Start Date, End Date, and Estimated Work Hours as required item to ensure data completeness for accurate calculations. 11.5.2 Setting Complete Percent and Remaining Time Linkage Rules Add these calculated fields in the subtask table: Completion Ratio: Daily work hours sum / Estimated work hours.SUM(Current Form/Daily Work/Day Hours) / Current Form/Estimate hoursRemaining Work Hours: Estimated work hours - Daily work hours sum.Current Form/Estimate hours - SUM(Current Form/Daily Work/Day Hours) For Ideal Work Hours in daily work hour linking rules: With this, you can calculate task progress and remaining hours in real time. 11.6 Creating a Task Progress Chart (Optional) 11.6.1 Setting Up a Task Progress Chart Create a new chart block for counting the changes in sum of Day Hours and sum of Ideal Hours and displaying the task progress based on the date dimension. Limit [Associated Tasks/Id] to be equal to when [Previous Popup Records/ID] to ensure that the progress chart reflects the true state of the current task. 11.6.2 Displaying Key Info & Progress Finally, remember our Markdown block, where we show the basic information and progress changes of the task through the markdown block. The progress percentage is rendered using the Handlebars.js template: This uses Handlebars.js for syntax, rendering progress percentages dynamically. 11.7 Summary Congratulations! You’ve successfully divided tasks into subtasks. With multi-level management, daily work hour reporting, and chart visualization, tracking progress becomes clearer and helps your team work more efficiently. Keep up the great work, Let's look forward to the next chapter! Keep exploring and creating endless possibilities! If you encounter any issues along the way, don’t forget to check the NocoBase Documentation or join the NocoBase Community for discussions and support.
- [Chapter 12: Meeting Room Booking & Workflows](/tutorials/v1/13-meeting-rooms.md): By now, you must be well-acquainted with NocoBase. In this chapter, we’ll implement a specific scenario: the Meeting Rooms Management Module. This module encompasses features such as Meeting Rooms Booking and notifications. We will build this module step by step, starting from scratch and gradually adding complexity. Let’s begin by designing the foundational database schema for this module. 12.1 Designing the Database Schema The database schema serves as the foundation of the Conference Management Module. In this section, we’ll focus on the Meeting Rooms collection and the Booking collection, and introduce relationships such as Many-to-Many connections with users. 12.1.1 Conference Room Collection The Conference Room Collection stores basic information about all the conference rooms, including their name, location, capacity, and equipment. Sample Collection Structure 12.1.2 Booking Collection The Booking Collection records all the conference room bookings, including details such as the room, participants, time, and meeting agenda. Sample Collection Structure Many-to-Many Relationship The Booking Collection involves a "Many-to-Many" relationship: a user can attend multiple meetings, and a meeting can have multiple participants. For management purposes, a through collection named booking_users is created. 12.2 Building the Conference Management Module With the database schema ready, let’s implement the two collections and build the "Conference Management" module step by step. 12.2.1 Creating Table Blocks First, add the “Meeting Management” module to the page, and create a Meeting Room table block and a Appointment Form table block. Then create a calendar block for the appointment form, with the default view of the calendar set to “days”. Setting up the Meeting Room form block association Associate the Meeting Room form block with the other two blocks so that you can automatically filter the appointments for that meeting room. Next, you can try out the filtering, adding, deleting, checking and changing functions to test the basic interaction of the module. 💡NocoBase Block Connection (Highly Recommended!!)In addition to the filter block mentioned earlier, our table blocks can also be connected to other blocks to achieve click-based filtering functionality.As shown below, in the configuration of the Meeting Room table, we connected it to two blocks from other booking tables (Booking Table Block, Booking Calendar Block). Once connected, clicking on the Meeting Room table filters the other two tables accordingly! Clicking the selected item again will cancel the selection. 12.3 Detecting Meeting Room Occupancy Once the page is configured, we need to add an important feature: detecting the occupancy of a meeting room. This feature will check if the target meeting room is occupied at the specified time period when creating or updating a meeting, in order to avoid booking conflicts. 12.3.1 Setting up a “pre-operation event” Workflow In order to perform the detection at the scheduled time, we use a special workflow - the “pre-action event”: Pre-action events (commercial plugin): perform a series of operations before adding, deleting, or changing data, which can be paused and intercepted in advance at any time, in a way that is very close to our daily code development process! 12.3.2 Configuring Nodes In the workflow for detecting occupancy, we need the following types of nodes: Calculation nodes (data transformation logic to handle modifications, additions)SQL operations (to perform SQL queries)JSON query (commercial plugin for parsing JSON data)Response message (commercial plug-in, used to return alert messages) 12.3.3 Binding the Appointment Collection and Configuring Triggers Now, let's bind the appointment collection, select “Global Mode” for the trigger mode, and select the operation type as Create Record and Update Record. 12.4 Configure the Calculation node 12.4.1 Creating the “Convert Blank ID to -1” operator node We start by creating an operator node that converts a blank ID to -1. The operator node can convert the variable in the way we want, and offers the following three forms of operation: Math.js (refer to Math.js)Formula.js (reference Formula.js)String template (for data splicing) Here, we use Formula.js for numerical judgment: 12.5 Creating the SQL Operation Node Next, create the SQL operation node, execute the query statement, and check the available meeting rooms: 12.5.1 Querying available conference room SQL statements SQL Note: Variables will be directly substituted into the sql statement, please check the variables carefully to avoid SQL injection. Add single quotes where appropriate. Where the variables are respectively: {{$jobsMapByNodeKey.3a0lsms6tgg}} Represents the result of the previous node, [node data/convert blank ID to -1] {{$context.params.values.end_time}} represents [Trigger variables/Parameters/Values submitted/End Time] {{$context.params.values.start_time}} for [Trigger variable/Parameter/alues submitted/Start Time]. 12.5.2 Testing the SQL Our goal is to query all rooms that do not conflict with the target timestamp. In the meantime, you can click “Test run” below to change the variable values and debug the SQL. 12.6 JSON Parsing 12.6.1 Configuring the JSON Query Node Through the test in the previous step, we can observe that the result is in the following form, at this time you need to enable the JSON query node plugin: JSON is parsed in three ways, which are: JMESPath JSON Path Plus JSONata Here we choose any one of them, such as JMESPath format, we need to filter the list of all available conference room names, so the expression is filled: The attribute mapping configuration is for the list of objects and is not necessary at the moment, so it can be left out. 12.7 Condition Judgment Configure the Conditional Judgment node to determine whether the current conference room is in the list of available conference rooms. According to the judgment result of Yes or No, configure the response message respectively: Condition Setup: Use the "Basic" operation for the condition: 12.7.1 Yes: Configure Success Message Enable the Workflow: Response Message Plugin: 12.7.2 No: Configure Failure Message For the case where the meeting room is unavailable: Note: Ensure that the End Workflow node is configured to manually terminate the workflow in case of failure. 12.8 Function Testing and Debugging Details Now, we move to the final testing phase of the meeting management system. This phase ensures that the workflow can correctly detect and prevent conflicting meeting room bookings. 12.8.1 Adding a Booking with Conflicting Times Firstly, let's try to add a meeting that conflicts with an existing scheduled time to see if the system blocks the operation and pops up an error message. Set a Conflicting Booking Period Add a new booking in "Meeting Room 1" for the time period: 2024-11-14 00:00:00 - 2024-11-14 23:00:00 This time span covers the entire day, intentionally overlapping with existing bookings. Existing Bookings in "Conference One" 2024-11-14 09:00:00 - 2024-11-14 12:00:002024-11-14 14:00:00 - 2024-11-14 16:30:00 These periods overlap with the new booking request. (2024-11-14 00:00:00 - 2024-11-14 23:00:00) That's been overlapped. Therefore, based on logical judgment, the system should detect the time conflict and block this booking. Submit the booking and validate the feedback We click the Submit button and the system will execute the detection process in the workflow: Successful Feedback: After submitting, the system pops up a conflict alert, indicating that the detection logic is working properly. The page Feedback Successfully indicates that we were unable to complete this booking. 12.8.2 Adding a Booking with No Conflicts Next test conflict-free booking ~ Ensure that we can successfully book a meeting room when the meeting times do not overlap! Setting up a Conflict-Free Booking Let's choose a time period with no conflicts, for example 2024-11-10 16:00:00 - 2024-11-10 17:00:00. This time period does not overlap with existing bookings and therefore meets the meeting room booking requirements. To submit a non-conflicting reservation Click the Submit button and the system performs the workflow detection logic again: Verify it together: Submitted successfully! The system displays a “Booking Success” message. The system displays a “Reservation Success” message. This indicates that the reservation function is also working correctly in the case of a conflict-free reservation. The system displays the “Booking Success” message. 12.8.3 Modifying Existing Booking Times In addition to adding new bookings, you can also test by modifying the time of existing bookings. For instance, change an existing meeting time to a non-conflicting period and submit the update. I'll leave it to you. 12.9 Dashboard Optimization and Personal Schedule Panel Once functionality tests are complete, optimize the dashboard to improve user experience. 12.9.1 Adjusting Dashboard Layout Reorganize the dashboard content based on user interaction habits for easier data viewing.Enhance the user experience by adding a Personal Schedule Panel: Create a "Personal Schedule" Section Add a calendar or list block to display each user's individual meeting schedule.Set Member Defaults Configure the default member value to the current user. This ensures that when a user accesses the dashboard, their related meetings are displayed by default. Further optimize the user experience in the meeting management module. After configuration, the dashboard becomes more intuitive and feature-rich, enabling users to better navigate and manage their meetings. With these steps, we have successfully implemented and optimized the core functionalities of the conference room booking management module! Enjoy the process of mastering NocoBase’s modular system-building capabilities. Keep exploring and creating endless possibilities! If you encounter any issues along the way, don’t forget to check the NocoBase Documentation or join the NocoBase Community for discussions and support.
- [Implementing User Registration Review](/tutorials/v1/14-user-review.md): This document provides two solutions for implementing user registration auditing, designed for different business scenarios: Solution One: Suitable for scenarios that require a simple and quick registration audit process. This solution leverages the system's default new user registration functionality by assigning every new user a “Guest” role with no permissions, which is later manually audited and updated by an administrator.Solution Two: Suitable for scenarios requiring a flexible, customizable registration audit process. By designing a dedicated application information collection, configuring an audit workflow, and activating the Public Form plugin, the entire process—from registration application submission to automatic creation of new users—is managed.
- [Implementing CRM Lead Conversion](/tutorials/v1/15-crm-lead-conversion.md)
- [Markdown Blocks Tips and Tricks](/tutorials/v1/16-markdown-tips.md): Markdown Block is one of the most commonly used and powerful blocks in our system. It can range from lightweight text prompts to simple HTML styling, and can even handle essential business logic—with versatile and flexible functionality.
- [CRM Sales Cloud Overview](/tutorials/v1/17-crm-overview.md): In this chapter, the system is divided into multiple modules based on business functions. Each module's core functionalities and corresponding data structures are described in detail. This solution not only prioritizes smooth business processes but also considers rational data storage and system scalability.
- [Lead Follow-up & Status Management](/tutorials/v1/18-lead-followup.md)
- [CRM System (Sales Cloud)](/tutorials/v1/19-crm-sales-cloud.md)
- [Using API Keys to Retrieve Data](/tutorials/v1/20-api-keys.md): Dear friends, welcome to this tutorial. In this document, I will guide you step-by-step on how to use API Keys in NocoBase to retrieve data, using the "To Dos" example to help you understand every detail. Please read the following content carefully and follow the instructions.
- [Markdown Template Variables](/tutorials/v1/21-markdown-variables.md): Dear guys, welcome to this tutorial! In this section, we will learn step-by-step how to use Markdown together with the Handlebars templating engine to achieve dynamic content display. In the previous lesson, "The Marvels of Markdown Blocks," you learned about the basic syntax, creation methods, and variable filling. Now, let’s dive into some advanced techniques with template variables.
- [How to Deploy NocoBase Faster](/tutorials/v1/22-deploy-faster.md): Many users may find that NocoBase runs slower than expected after deployment. This is often due to network environment, server configurations, or deployment architecture. Before diving into optimization techniques, let's first look at reference values for normal NocoBase loading speeds to avoid unnecessary concerns. NocoBase Normal Loading Speed Reference The following are loading speeds tested in the NocoBase demo environment: Time required to enter the application for the first time by entering the URL: approximately 2 secondsTime required to switch pages within the application: approximately 50-300 milliseconds Next, I'll share a series of simple yet effective deployment optimization techniques that can significantly improve access speed by adjusting deployment settings, without needing to modify any code:
- [CRM Sales Pipeline Visualization](/tutorials/v1/23-crm-pipeline.md)
- [CRM Demo Deployment Guide](/tutorials/v1/24-crm-demo-deploy.md): To help you quickly and smoothly deploy this Demo to your own NocoBase environment, we provide two restoration methods. Please choose the most suitable one based on your user version and technical background. Before starting, please ensure: You already have a basic NocoBase running environment. For main system installation, please refer to the more detailed official installation documentation.You have downloaded our CRM Demo files:Backup File (approx. 21.2MB): crm_demo_20250711.nbdata - For Method 1SQL File (approx. 9MB compressed): crm_demo_20250711_sql.zip - For Method 2 Important Note: This Demo is built on PostgreSQL database. Please ensure your environment uses PostgreSQL database. Method 1: Restore Using Backup Manager (Recommended for Pro/Enterprise Users) This method performs one-click restoration through NocoBase's built-in "Backup Manager" (Pro/Enterprise Edition) plugin, with the simplest operation. However, it has certain requirements for environment and user version. Key Features Advantages:Convenient Operation: Can be completed in the UI interface, capable of completely restoring all configurations including plugins.Complete Restoration: Can restore all system files, including template print files, uploaded files in table file fields, etc., ensuring Demo functionality integrity.Limitations:Pro/Enterprise Edition Only: "Backup Manager" is an enterprise-level plugin, only available to Pro/Enterprise users.Strict Environment Requirements: Requires your database environment (version, case sensitivity settings, etc.) to be highly compatible with our backup creation environment.Plugin Dependencies: If the Demo contains commercial plugins that you don't have in your local environment, restoration will fail. Operation Steps Step 1: [Strongly Recommended] Start Application Using full Image To avoid restoration failures due to missing database clients, we strongly recommend using the full version of the Docker image. It has all necessary supporting programs built-in, requiring no additional configuration. (Note: The image is built on 1.9.0-alpha.1, please pay attention to version compatibility) Example command to pull the image: Then use this image to start your NocoBase service. Note: If you don't use the full image, you may need to manually install the pg_dump database client inside the container, which is cumbersome and unstable. Step 2: Enable the "Backup Manager" Plugin Log into your NocoBase system.Go to Plugin Management .Find and enable the Backup Manager plugin. Step 3: Restore from Local Backup File After enabling the plugin, refresh the page.Go to System Management -> Backup Manager in the left menu.Click the Restore from Local Backup button in the top right corner. Drag the Demo backup file we provided (usually in .zip format) to the upload area.Click Submit and wait patiently for the system to complete restoration, which may take anywhere from tens of seconds to several minutes. ⚠️ Important Notes Database Compatibility: This is the most critical point of this method. Your PostgreSQL database version, character set, case sensitivity settings must match the Demo backup source file. Particularly, schema names must be consistent.Commercial Plugin Matching: Please ensure you have and have enabled all commercial plugins required by the Demo, otherwise restoration will be interrupted. Method 2: Direct SQL File Import (Universal, More Suitable for Community Edition) This method restores data by directly operating the database, bypassing the "Backup Manager" plugin, thus having no Pro/Enterprise plugin limitations. Key Features Advantages:No Version Restrictions: Suitable for all NocoBase users, including community edition.High Compatibility: Does not depend on in-app dump tools, only requires database connection capability.High Fault Tolerance: If the Demo contains commercial plugins you don't have (such as ECharts charts), related functions will not be enabled, but won't affect normal use of other functions, and the application can start successfully.Limitations:Database Operation Skills Required: Requires users to have basic database operation capabilities, such as how to execute a .sql file.⚠️ System File Loss: This method will lose all system files, including template print files, uploaded files in table file fields, etc. This means:Print template functions may not work properlyUploaded images, documents, and other files will be lostFunctions involving file fields will be affected Operation Steps Step 1: Prepare a Clean Database Prepare a brand new, empty database for the Demo data you're about to import. Step 2: Import the .sql File into the Database Get the Demo database file we provided (usually in .sql format) and import its contents into the database you prepared in the previous step. There are multiple execution methods, depending on your environment: Option A: Through Server Command Line (Docker Example) If you installed NocoBase and database using Docker, you can upload the .sql file to the server, then use docker exec command to perform the import. Assuming your PostgreSQL container name is my-nocobase-db and the file name is crm_demo.sql:# Copy sql file into the container docker cp crm_demo.sql my-nocobase-db:/tmp/ # Enter container to execute import command docker exec -it my-nocobase-db psql -U your_username -d your_database_name -f /tmp/crm_demo.sqlOption B: Through Remote Database Client If your database exposes a port, you can use any graphical database client (such as DBeaver, Navicat, pgAdmin, etc.) to connect to the database, create a new query window, paste the entire contents of the .sql file, and execute it. Step 3: Connect Database and Start Application Configure your NocoBase startup parameters (such as environment variables DB_HOST, DB_PORT, DB_DATABASE, DB_USER, DB_PASSWORD, etc.) to point to the database you just imported data into. Then, start the NocoBase service normally. ⚠️ Important Notes Database Permissions: This method requires you to have an account and password that can directly operate the database.Plugin Status: After successful import, commercial plugin data in the system exists, but if you haven't installed and enabled corresponding plugins locally, related functions (such as Echarts charts, specific fields, etc.) will not display and work, but this won't cause application crashes. Summary and Comparison We hope this tutorial helps you successfully deploy the CRM Demo. If you encounter any problems during the operation, please feel free to contact us!
- [NocoBase Tutorials](/tutorials/index.md): Learn NocoBase step by step through complete system-building tutorials, practical building tips, and AI employee use cases.
## Guide
- [Data query](/data-visualization/guide/data-query.md): The chart configuration panel is divided into three sections: Data query, Chart options, and Interaction events, plus Cancel, Preview, and Save buttons at the bottom. Let's first look at the "Data query" panel to understand the two query modes (Builder/SQL) and their common features.
- [Chart options](/data-visualization/guide/chart-options.md): Configure how charts are displayed. Two modes are supported: Basic (visual) and Custom (JS). Basic is ideal for quick mapping and common properties; Custom fits complex scenarios and advanced customization.
- [Preview and Save](/data-visualization/guide/preview-and-save.md): Preview: Temporarily render changes from the configuration panel into the page chart to verify the result.Save: Persist changes from the configuration panel to the database.
- [Use context variables](/data-visualization/guide/context-variables.md): With context variables, you can reuse information from the current page, user, time, and filter inputs to render charts and enable linkage based on context.
- [Page filters and linkage](/data-visualization/guide/filters-and-linkage.md): The page filter (filter block) provides a unified input for filter conditions at the page level and merges them into chart queries to keep multiple charts filtered consistently and linked.
- [Query data in SQL mode](/data-visualization/guide/sql-data-query.md): In the Data query panel, switch to SQL mode, write and run the query, and use the returned result directly for chart mapping and rendering.
- [Custom chart configuration](/data-visualization/guide/custom-chart-options.md): In Custom mode, configure charts by writing JS in the editor. Based on ctx.data, return a complete ECharts option. This suits merging multiple series, complex tooltips, and dynamic styles. In principle, all ECharts features and chart types are supported.
- [Custom interaction events](/data-visualization/guide/chart-events.md): Write JS in the events editor and register interactions via the ECharts instance chart to enable linkage, such as navigating to a new page or opening a drill-down dialog.
- [](/guide/index.md)
- [Customers, Contacts & Emails](/solution/crm/guide/guide-customers-emails.md): CRM customer 360 view, AI health score, customer merge, contact role management, email send/receive with AI assistance, and activity log.
- [Lead Management](/solution/crm/guide/guide-leads.md): CRM lead management guide: creating leads, AI auto-scoring, smart filtering, and converting leads into customers and opportunities.
- [Opportunities & Quotations](/solution/crm/guide/guide-opportunities.md): CRM opportunity management guide: Kanban view, stage progression, creating quotations, multi-currency support, and approval workflows.
- [System Overview & Dashboards](/solution/crm/guide/guide-overview.md): CRM 2.0 system overview: menu structure, multi-language & themes, Analytics dashboard, Overview workspace.
- [Products, Quotations & Orders](/solution/crm/guide/guide-products-orders.md): CRM product catalog, quotations (with approval workflow), and order management guide: the complete flow from product maintenance to quotation approval to order fulfillment.
- [Roles & Permissions](/solution/crm/guide/guide-roles.md): CRM role system explained: which pages each role can access and which data they can operate on.
- [CRM User Guide](/solution/crm/guide/index.md): NocoBase CRM 2.0 User Guide: A step-by-step walkthrough of the complete sales process from leads to orders.
## Development
- [Extension Development](/data-sources/file-manager/development/index.md)
- [NocoBase Development Guide](/development/index.md): NocoBase development guide: plugin development, shared components, FlowEngine, RunJS, block/field/action extensions, data source extensions, workflow extensions, authentication extensions.
- [Extension Development](/file-manager/development/index.md)
- [API Reference](/notification-manager/development/api.md)
- [Extending Notification Channel Types](/notification-manager/development/extension.md): NocoBase supports extending notification channel types on demand, such as for SMS notifications and app push notifications.
- [API Reference](/workflow/development/api.md): Workflow extension API reference: Workflow Model, node execution context, trigger API, variable passing.
- [Overview](/workflow/development/index.md): The built-in features of the Workflow cannot cover all scenarios. For instance, the built-in node types cannot exhaust every possible operation in all business scenarios. Therefore, we also provide a design for extending the Workflow, including extending trigger and node types. In business scenarios where the built-in features are insufficient, you can extend them using low-code methods. Extensions are mainly divided into two parts: Extend Trigger TypesExtend Node Types
- [v1 to v2 Migration Guide](/workflow/development/migration.md): Workflow extension development: guide for migrating client-side code from v1 to v2.
- [Extending Node Types](/workflow/development/node.md): Extending node types: custom node development, node configuration, execution logic, API and lifecycle.
- [Extending Trigger Types](/workflow/development/trigger.md): Extending trigger types: custom trigger development, configuration interface, trigger logic, API reference.
## Plugins
- [nb license plugins](/api/cli/license/plugins/index.md): nb license plugins command reference: inspect or synchronize commercial plugins allowed by the current license.
- [nb license plugins clean](/api/cli/license/plugins/clean.md): nb license plugins clean command reference: remove downloaded commercial plugins for a selected env.
- [nb license plugins list](/api/cli/license/plugins/list.md): nb license plugins list command reference: show commercial plugins associated with the current license for a selected env.
- [nb license plugins sync](/api/cli/license/plugins/sync.md): nb license plugins sync command reference: synchronize commercial plugins allowed by the current license for a selected env.
- [Third-party plug-in installation and upgrade](/nocobase-cli/plugins/third-party.md): If you get a third-party plug-in package, usually import it into the storage/plugins of the target application, then restart the application, and then continue to enable or verify whether the plug-in takes effect.
- [Access control](/plugins/@nocobase/plugin-acl/index.md): Based on roles, resources, and actions, access control can precisely manage interface configuration permissions, data operation permissions, menu access permissions, and plugin permissions.
- [Action: Batch edit](/plugins/@nocobase/plugin-action-bulk-edit/index.md): Batch edit all records or selected records.
- [Action: Batch update](/plugins/@nocobase/plugin-action-bulk-update/index.md): Batch update all records or selected records.
- [Action: Custom request](/plugins/@nocobase/plugin-action-custom-request/index.md): Sending a request to any HTTP service supports sending context data to the target service.
- [Action: Duplicate record](/plugins/@nocobase/plugin-action-duplicate/index.md): Duplicate a record, you can either duplicate it into a form and edit it before saving it, or you can duplicate it directly to generate a new record.
- [Action: Export records Pro](/plugins/@nocobase/plugin-action-export-pro/index.md): Enhance data export capabilities with asynchronous exports for handling large volumes. Supports exporting attachments.
- [Action: Export records](/plugins/@nocobase/plugin-action-export/index.md): Export filtered records to excel, you can configure which fields to export.
- [Action: Import records Pro](/plugins/@nocobase/plugin-action-import-pro/index.md): Enhance data import capabilities with asynchronous imports for handling large volumes. Includes features for data processing recognition, data updates, and workflow triggering.
- [Action: Import records](/plugins/@nocobase/plugin-action-import/index.md): Import records using excel templates. You can configure which fields to import and templates will be generated automatically.
- [Action: Print](/plugins/@nocobase/plugin-action-print/index.md): Calls the browser's print function to print a record.
- [Template print](/plugins/@nocobase/plugin-action-template-print/index.md): It supports users in printing templates within the NocoBase application.
- [AI LLM: GigaChat](/plugins/@nocobase/plugin-ai-gigachat/index.md): Support integration with GigaChat LLM service.
- [AI: Knowledge base](/plugins/@nocobase/plugin-ai-knowledge-base/index.md): Supports integration with vector databases to vectorize documents, providing AI employees with intelligent search and knowledge support.
- [AI employees](/plugins/@nocobase/plugin-ai/index.md): Create AI employees with diverse skills to collaborate with humans, build systems, and handle business operations.
- [API documentation](/plugins/@nocobase/plugin-api-doc/index.md): An OpenAPI documentation generator for NocoBase HTTP API.
- [Auth: API keys](/plugins/@nocobase/plugin-api-keys/index.md): Allows users to use API key to access application's HTTP API
- [App SSO](/plugins/@nocobase/plugin-app-sso/index.md): Application-to-application single sign-on for multi-app deployments.
- [App supervisor](/plugins/@nocobase/plugin-app-supervisor/index.md): The App Supervisor plugin provides unified supervision and orchestration of multiple NocoBase application instances, offering application discovery and runtime management capabilities.
- [Async task manager](/plugins/@nocobase/plugin-async-task-manager/index.md): Manage and monitor asynchronous tasks such as data import/export. Support task progress tracking and notification.
- [Audit logs](/plugins/@nocobase/plugin-audit-logger/index.md): Track and document user activities and resource actions across the system
- [Audit logs (deprecated)](/plugins/@nocobase/plugin-audit-logs/index.md): This plugin is deprecated. There will be a new audit log plugin in the future.
- [Auth: CAS](/plugins/@nocobase/plugin-auth-cas/index.md): CAS authentication.
- [DingTalk](/plugins/@nocobase/plugin-auth-dingtalk/index.md): Provides abilities for integrating DingTalk, including authentication, notification channel and data source for synchronizing user data.
- [Auth: LDAP](/plugins/@nocobase/plugin-auth-ldap/index.md): LDAP authentication.
- [Auth: OIDC](/plugins/@nocobase/plugin-auth-oidc/index.md): OIDC (OpenID Connect) authentication.
- [Auth: SAML 2.0](/plugins/@nocobase/plugin-auth-saml/index.md): SAML 2.0 authentication.
- [Auth: SMS](/plugins/@nocobase/plugin-auth-sms/index.md): SMS authentication.
- [WeCom](/plugins/@nocobase/plugin-auth-wecom/index.md): Provides abilities for integrating WeCom, including authentication, notification channel and data source for synchronizing user data.
- [Authentication](/plugins/@nocobase/plugin-auth/index.md): User authentication management, including password, SMS, and support for Single Sign-On (SSO) protocols, with extensibility.
- [App backup & restore (deprecated)](/plugins/@nocobase/plugin-backup-restore/index.md): Backup and restore applications for scenarios such as application replication, migration, and upgrades.
- [Backup manager](/plugins/@nocobase/plugin-backups/index.md): Provides backup and restore functionality, supports scheduled backups, and ensures data security and quick recovery.
- [Block: Comment](/plugins/@nocobase/plugin-block-comment/index.md): Provides a Comment block for viewing and creating comments in record details, pop-ups, and similar scenarios.
- [Block: GridCard](/plugins/@nocobase/plugin-block-grid-card/index.md): Display data in a grid list with pagination support.
- [Block: iframe](/plugins/@nocobase/plugin-block-iframe/index.md): Create an iframe block on the page to embed and display external web pages or content.
- [Block: List](/plugins/@nocobase/plugin-block-list/index.md): Display data in a list with pagination support.
- [Block: Markdown](/plugins/@nocobase/plugin-block-markdown/index.md): Provide Markdown block
- [Block: Multi-step form](/plugins/@nocobase/plugin-block-multi-step-form/index.md): Break the form with many fields into multiple steps to ease the burden on users.
- [Block: template (deprecated)](/plugins/@nocobase/plugin-block-template/index.md): Create and manage block templates for reuse on pages.
- [Block: Tree](/plugins/@nocobase/plugin-block-tree/index.md): Provides tree structure filter block
- [Block: Action panel](/plugins/@nocobase/plugin-block-workbench/index.md): Centrally manages and displays various actions, allowing users to efficiently perform tasks. It supports extensibility, with current action types including pop-ups, links, scanning, and custom requests.
- [Calendar](/plugins/@nocobase/plugin-calendar/index.md): Provides callendar collection template and block for managing date data, typically for date/time related information such as events, appointments, tasks, and so on.
- [Charts (deprecated)](/plugins/@nocobase/plugin-charts/index.md): The plugin has been deprecated, please use the data visualization plugin instead.
- [WEB client](/plugins/@nocobase/plugin-client/index.md): Provides a client interface for the NocoBase server
- [Collection: Connect to foreign data (FDW)](/plugins/@nocobase/plugin-collection-fdw/index.md): Database-based foreign data wrapper (FDW) implementation for connecting to remote data tables, currently supports MySQL and PostgreSQL databases.
- [Collection: SQL](/plugins/@nocobase/plugin-collection-sql/index.md): Provides SQL collection template
- [Collection: Tree](/plugins/@nocobase/plugin-collection-tree/index.md): Provides tree collection template
- [Comments](/plugins/@nocobase/plugin-comments/index.md): Provides comment collection template and block to add commenting functionality for any collection.
- [Custom brand](/plugins/@nocobase/plugin-custom-brand/index.md): Customize the brand name and more brand-related information.
- [Custom variables](/plugins/@nocobase/plugin-custom-variables/index.md): Support for adding and using custom variables
- [Data source: External ClickHouse](/plugins/@nocobase/plugin-data-source-external-clickhouse/index.md): Use external ClickHouse databases as data sources.
- [Data source: External Doris](/plugins/@nocobase/plugin-data-source-external-doris/index.md): Use external Apache Doris databases as data sources.
- [Data source: External MariaDB](/plugins/@nocobase/plugin-data-source-external-mariadb/index.md): Use external MariaDB databases as data sources.
- [Data source: External SQL Server](/plugins/@nocobase/plugin-data-source-external-mssql/index.md): Use external SQL Server databases as data sources.
- [Data source: External MySQL](/plugins/@nocobase/plugin-data-source-external-mysql/index.md): Use external MySQL databases as data sources.
- [Data source: External NocoBase](/plugins/@nocobase/plugin-data-source-external-nocobase/index.md): Use another NocoBase application as an external data source through API proxy.
- [Data source: External Oracle](/plugins/@nocobase/plugin-data-source-external-oracle/index.md): Use external Oracle databases as data sources.
- [Data source: External PostgreSQL](/plugins/@nocobase/plugin-data-source-external-postgres/index.md): Use external PostgreSQL databases as data sources.
- [Data source: KingbaseES](/plugins/@nocobase/plugin-data-source-kingbase/index.md): Using the KingbaseES database as a data source, it can serve as the main database or as an external database.
- [Data source: Main](/plugins/@nocobase/plugin-data-source-main/index.md): NocoBase main database, supports relational databases such as PostgreSQL, MySQL, MariaDB and so on.
- [Data source manager](/plugins/@nocobase/plugin-data-source-manager/index.md): Manage data sources, including the built-in Master database, external databases, APIs, etc.
- [Data source: REST API](/plugins/@nocobase/plugin-data-source-rest-api/index.md): Use external REST API data sources.
- [Data visualization: ECharts](/plugins/@nocobase/plugin-data-visualization-echarts/index.md): Utilize ECharts for data visualization, supporting for funnel, radar and more chart types and offering user-friendly configurations.
- [Data visualization](/plugins/@nocobase/plugin-data-visualization/index.md): Provides data visualization feature, including chart block and chart filter block, support line charts, area charts, bar charts and more than a dozen kinds of charts, you can also extend more chart types.
- [Departments](/plugins/@nocobase/plugin-departments/index.md): Organize users by departments, set hierarchical relationships, link roles to control permissions, and use departments as variables in workflows and expressions.
- [Email manager](/plugins/@nocobase/plugin-email-manager/index.md): Connect NocoBase to corporate email accounts like Gmail and Outlook, and be able to receive and send emails just like in other CRM products.
- [Embed NocoBase](/plugins/@nocobase/plugin-embed/index.md): Embed NocoBase into another system or webpage, integrating it as a part of that system or webpage.
- [Variables and secrets](/plugins/@nocobase/plugin-environment-variables/index.md): Centralized management of environment variables and secrets, used for sensitive data storage, configuration data reuse, multi-environment isolation, and more.
- [Error handler](/plugins/@nocobase/plugin-error-handler/index.md): Handling application errors and exceptions.
- [Collection field: Attachment(URL)](/plugins/@nocobase/plugin-field-attachment-url/index.md): Supports attachments in URL format.
- [Collection field: administrative divisions of China](/plugins/@nocobase/plugin-field-china-region/index.md): Provides data and field type for administrative divisions of China.
- [Collection field: Code](/plugins/@nocobase/plugin-field-code/index.md): For code editing and highlighting, supporting Java, JavaScript, Python, SQL and other languages.
- [Field component: mask](/plugins/@nocobase/plugin-field-component-mask/index.md): Automatically show field value as mask based on configured rules, supporting basic fields.
- [Collection field: Encryption](/plugins/@nocobase/plugin-field-encryption/index.md): Encrypts and decrypts specified fields automatically for secure data storage.
- [Collection field: Formula](/plugins/@nocobase/plugin-field-formula/index.md): Configure and store the results of calculations between multiple field values in the same record, supporting both Math.js and Excel formula functions.
- [Collection field: Many to many (array)](/plugins/@nocobase/plugin-field-m2m-array/index.md): Allows to create many to many relationships between two models by storing an array of unique keys of the target model.
- [Collection field: Markdown(Vditor)](/plugins/@nocobase/plugin-field-markdown-vditor/index.md): Used to store Markdown and render it using Vditor editor, supports common Markdown syntax such as list, code, quote, etc., and supports uploading images, recordings, etc.It also allows for instant rendering, where what you see is what you get.
- [Collection field: Sequence](/plugins/@nocobase/plugin-field-sequence/index.md): Automatically generate codes based on configured rules, supporting combinations of dates, numbers, and text.
- [Collection field: Signature](/plugins/@nocobase/plugin-field-signature/index.md): Supports handwritten signature input with touch and mouse support.
- [Collection field: Sort](/plugins/@nocobase/plugin-field-sort/index.md): Used to sort the data in a collection.
- [File manager](/plugins/@nocobase/plugin-file-manager/index.md): Provides files storage services with files collection template and attachment field.
- [Office File Previewer](/plugins/@nocobase/plugin-file-previewer-office/index.md): A plugin for previewing office files via Microsoft live preview service.
- [File storage: S3(Pro)](/plugins/@nocobase/plugin-file-storage-s3-pro/index.md): Support S3-compatible file storage, including services like Amazon S3, Aliyun OSS, Tencent Cloud COS, and MinIO. Features include direct file uploads and private access control.
- [Flow engine](/plugins/@nocobase/plugin-flow-engine/index.md)
- [Form drafts](/plugins/@nocobase/plugin-form-drafts/index.md): Allow users to save form drafts and continue editing later.
- [Block: Gantt](/plugins/@nocobase/plugin-gantt/index.md): Provides Gantt block.
- [Graph collection manager](/plugins/@nocobase/plugin-graph-collection-manager/index.md): An ER diagram-like tool. Currently only the Master database is supported.
- [IdP: OAuth](/plugins/@nocobase/plugin-idp-oauth/index.md): Based on OAuth 2.1 and OpenID Connect, this plugin enables NocoBase to act as an identity provider for other systems.
- [IP restriction](/plugins/@nocobase/plugin-ip-restriction/index.md): Control system access by configuring IP blacklists and whitelists to ensure security.
- [Block: Kanban](/plugins/@nocobase/plugin-kanban/index.md): Provides kanban block.
- [License settings](/plugins/@nocobase/plugin-license/index.md): Instance ID and license key settings
- [Locale tester](/plugins/@nocobase/plugin-locale-tester/index.md)
- [Localization](/plugins/@nocobase/plugin-localization/index.md): Allows to manage localization resources of the application.
- [Redis lock adapter](/plugins/@nocobase/plugin-lock-adapter-redis/index.md): Distributed lock implemention based on Redis.
- [Logger](/plugins/@nocobase/plugin-logger/index.md): Server-side logs, mainly including API request logs and system runtime logs, and allows to package and download log files.
- [Block: Map](/plugins/@nocobase/plugin-map/index.md): Map block, support Gaode map and Google map, you can also extend more map types.
- [AI: MCP server](/plugins/@nocobase/plugin-mcp-server/index.md): An MCP server for building NocoBase systems and supporting business workflows.
- [Migration manager](/plugins/@nocobase/plugin-migration-manager/index.md): Used to migrate configuration content between application environments.
- [Mobile client(Deprecated)](/plugins/@nocobase/plugin-mobile-client/index.md): Provides the ability to configure mobile pages.
- [Mobile (deprecated)](/plugins/@nocobase/plugin-mobile/index.md): Since version 2.0, the mobile plugin has been replaced by the new ui-layout plugin, which is still under development.
- [Multi-app manager (deprecated)](/plugins/@nocobase/plugin-multi-app-manager/index.md): Multi-app runs applications in a process-sharing manner, suitable for testing and demo environments only. Do not use it in production.
- [Multi-app share collection](/plugins/@nocobase/plugin-multi-app-share-collection/index.md): Note: This plugin is deprecated.
- [Multi-keyword filter](/plugins/@nocobase/plugin-multi-keyword-filter/index.md): Supports multi-keyword filtering for common fields, with options for quick input or batch import of keywords from Excel.
- [Multi-portal](/plugins/@nocobase/plugin-multi-portal/index.md): Provides multi-portal management with separate layouts and menus for different entry points.
- [Multi-space](/plugins/@nocobase/plugin-multi-space/index.md): Implements multiple independent data spaces within a single application instance through logical isolation.
- [Notification: Email](/plugins/@nocobase/plugin-notification-email/index.md): Used for sending email notifications with built-in SMTP transport.
- [Notification: In-app message](/plugins/@nocobase/plugin-notification-in-app-message/index.md): It supports users in receiving real-time message notifications within the NocoBase application.
- [Notification manager](/plugins/@nocobase/plugin-notification-manager/index.md): Provides a unified management service that includes channel configuration, logging, and other features, supporting the configuration of various notification channels, including in-app message and email.
- [Password policy](/plugins/@nocobase/plugin-password-policy/index.md): Set the password rules and sign in lockout policy for all users
- [Public forms](/plugins/@nocobase/plugin-public-forms/index.md): Share public forms externally to collect information from anonymous users
- [Redis pub sub adapter](/plugins/@nocobase/plugin-pubsub-adapter-redis/index.md): Used for hanlding pub/sub messages with Redis.
- [RabbitMQ queue adapter](/plugins/@nocobase/plugin-queue-adapter-rabbitmq/index.md): Used for hanlding message queue with RabbitMQ.
- [Redis queue adapter](/plugins/@nocobase/plugin-queue-adapter-redis/index.md): Used for hanlding message queue with Redis.
- [Record history](/plugins/@nocobase/plugin-record-history/index.md): Tracks and stores the change history of collection records.
- [HTTP request encryption](/plugins/@nocobase/plugin-request-encryption/index.md): Encrypts request parameters (Query Parameters) before sending an HTTP request.
- [Collection field: Snapshot](/plugins/@nocobase/plugin-snapshot-field/index.md): When adding a new record, create a snapshot for its relational record and save in the new record. The snapshot will not be updated when the relational record is updated.
- [System settings](/plugins/@nocobase/plugin-system-settings/index.md): Used to adjust the system title, logo, language, etc.
- [Telemetry: Prometheus](/plugins/@nocobase/plugin-telemetry-prometheus/index.md): Integrate Prometheus with NocoBase telemetry.
- [Telemetry](/plugins/@nocobase/plugin-telemetry/index.md): An OpenTelemetry-based telemetry plugin providing CPU, memory, and HTTP request metrics with HTTP export support.
- [Text copy](/plugins/@nocobase/plugin-text-copy/index.md): Add copy button to text fields
- [Theme editor](/plugins/@nocobase/plugin-theme-editor/index.md): Customize UI colors, sizes, etc. and save the result as a theme to switch between multiple themes.
- [Two-factor authentication (2FA)](/plugins/@nocobase/plugin-two-factor-authentication/index.md): Support enabling two-factor authentication (2FA) for password sign-in.
- [UI layout](/plugins/@nocobase/plugin-ui-layout/index.md): Provides desktop layout, mobile layout, and route management pages.
- [UI schema storage](/plugins/@nocobase/plugin-ui-schema-storage/index.md): Provides centralized UI schema storage service.
- [UI templates](/plugins/@nocobase/plugin-ui-templates/index.md): Provides block templates and popup templates for UI reuse.
- [User data synchronization](/plugins/@nocobase/plugin-user-data-sync/index.md): Reigster and manage extensible user data synchronization sources, with HTTP API provided by default. Support for synchronizing data to resources such as users and departments.
- [Users](/plugins/@nocobase/plugin-users/index.md): Provides basic user model, as well as created by and updated by fields.
- [Verification: TOTP authenticator](/plugins/@nocobase/plugin-verification-totp-authenticator/index.md): Support users in binding a TOTP authenticator and verifying their identity using time-based one-time codes (TOTP).
- [Verification](/plugins/@nocobase/plugin-verification/index.md): User identity verification management, including SMS, TOTP authenticator, with extensibility.
- [Version control](/plugins/@nocobase/plugin-version-control/index.md): Save and restore versions during NocoBase builds.
- [Redis worker ID allocator](/plugins/@nocobase/plugin-workerid-allocator-redis/index.md): Worker id allocator based on Redis.
- [Workflow: Post-action event](/plugins/@nocobase/plugin-workflow-action-trigger/index.md): Triggered after the completion of a request initiated through an action button or API, such as after adding, updating, deleting data, or "submit to workflow". Suitable for data processing, sending notifications, etc., after actions are completed.
- [Workflow: Aggregate node](/plugins/@nocobase/plugin-workflow-aggregate/index.md): Used to aggregate data against the database in workflow, such as: statistics, sum, average, etc.
- [Workflow: Approval](/plugins/@nocobase/plugin-workflow-approval/index.md): Triggered when an approval request is initiated through an action button or API. Dedicated to the approval process, with exclusive approval node and block for managing documents and tracking processing processes.
- [Workflow: CC](/plugins/@nocobase/plugin-workflow-cc/index.md): Provide a CC (carbon copy) feature in workflows to send approvals, or any other type of information to specified users.
- [Workflow: Custom action event](/plugins/@nocobase/plugin-workflow-custom-action-trigger/index.md): Triggers after click a custom action button.
- [Workflow: date calculation node](/plugins/@nocobase/plugin-workflow-date-calculation/index.md): Used to do date calculation in workflows, such as manipulating, comparing and formatting, etc.
- [Workflow: Delay node](/plugins/@nocobase/plugin-workflow-delay/index.md): Could be used in workflow parallel branch for waiting other branches.
- [Workflow: Dynamic calculation node](/plugins/@nocobase/plugin-workflow-dynamic-calculation/index.md): Useful plugin for doing dynamic calculation based on expression collection records in workflow.
- [Workflow: JavaScript](/plugins/@nocobase/plugin-workflow-javascript/index.md): Execute a piece of JavaScript in an isolated Node.js environment.
- [Workflow: JSON calculation](/plugins/@nocobase/plugin-workflow-json-query/index.md): Used for transforming or calculating values from complex JSON data (result of HTTP request or SQL etc.).
- [Workflow: JSON variable mapping](/plugins/@nocobase/plugin-workflow-json-variable-mapping/index.md): Used for mapping any JSON data to structured variables for usage in subsequent nodes.
- [Workflow: Loop node](/plugins/@nocobase/plugin-workflow-loop/index.md): Used to repeat the sub-process processing of each value in an array, and can also be used for fixed times of sub-process processing.
- [Workflow: mailer node](/plugins/@nocobase/plugin-workflow-mailer/index.md): Send email in workflow.
- [Workflow: Manual node](/plugins/@nocobase/plugin-workflow-manual/index.md): Could be used for workflows which some of decisions are made by users.
- [Workflow: notification node](/plugins/@nocobase/plugin-workflow-notification/index.md): Send notification in workflow.
- [Workflow: Parallel node](/plugins/@nocobase/plugin-workflow-parallel/index.md): Could be used for parallel execution of branch processes in the workflow.
- [Workflow: Pre-action event](/plugins/@nocobase/plugin-workflow-request-interceptor/index.md): Triggered before the execution of a request initiated through an action button or API, such as before adding, updating, or deleting data. Suitable for data validation and logic judgment before action, and the request could be rejected by using the "End process" node.
- [Workflow: HTTP request node](/plugins/@nocobase/plugin-workflow-request/index.md): Send HTTP requests to any HTTP service for data interaction in workflow.
- [Workflow: Response message](/plugins/@nocobase/plugin-workflow-response-message/index.md): Used for assemble response message and showing to client in form event and request interception workflows.
- [Workflow: SQL node](/plugins/@nocobase/plugin-workflow-sql/index.md): Execute SQL statements in workflow.
- [Workflow: Subflow](/plugins/@nocobase/plugin-workflow-subflow/index.md): Used to call other workflows within a workflow, can use the variables of the current workflow as the input of the subflow, and use the output of the subflow as the variables of the current workflow.
- [Workflow: test kit](/plugins/@nocobase/plugin-workflow-test/index.md)
- [Workflow: Database transaction node](/plugins/@nocobase/plugin-workflow-transaction/index.md): Run data operation nodes from the same database data source in a transaction, committing on success and rolling back on failure.
- [Workflow: Custom variable](/plugins/@nocobase/plugin-workflow-variable/index.md): Used for creating custom variables or assigning value to it in workflows, to save temporary data in the process.
- [Workflow: Webhook](/plugins/@nocobase/plugin-workflow-webhook/index.md): Receive HTTP calls from external systems and trigger events. Suitable for data pushes and event notifications initiated by third-party systems, such as payment callbacks and message notifications.
- [Workflow](/plugins/@nocobase/plugin-workflow/index.md): A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.
- [NocoBase Cluster](/plugins/@nocobase/preset-cluster/index.md): A preset bundle of plugins for cluster deployment: run NocoBase with multiple instances behind load balancers, together with shared storage, Redis (cache and messaging), distributed locks, and related middleware for node coordination. After enabling, follow the Cluster Mode documentation for environment setup and operations.
- [Plugins](/plugins/index.md)
## API
- [](/api/index.md)
- [AuthManager](/api/auth/auth-manager.md)
- [Auth](/api/auth/auth.md)
- [BaseAuth](/api/auth/base-auth.md)
- [CacheManager](/api/cache/cache-manager.md)
- [Cache](/api/cache/cache.md)
- [Global Environment Variables](/api/app/env.md)
- [NocoBase CLI](/api/cli/index.md): NocoBase CLI (`nb` command) reference: initialization, backup and restore, configuration, environment management, app runtime, portal, source code, database, plugins, commercial license, API, CLI self-update, and Skills management.
- [nb init](/api/cli/init.md): nb init command reference: install a new app, take over an existing local app, or connect to a remote app and save it as a CLI env.
- [nb api](/api/cli/api/index.md): nb api command reference: call NocoBase APIs from the CLI, including generic resource commands and dynamic commands.
- [nb api resource](/api/cli/api/resource/index.md): nb api resource command reference: run generic CRUD and aggregate queries against any NocoBase resource.
- [nb api resource create](/api/cli/api/resource/create.md): nb api resource create command reference: create one or more records in a selected NocoBase resource.
- [nb api resource destroy](/api/cli/api/resource/destroy.md): nb api resource destroy command reference: delete records from a selected NocoBase resource.
- [nb api resource get](/api/cli/api/resource/get.md): nb api resource get command reference: get one record from a selected NocoBase resource.
- [nb api resource list](/api/cli/api/resource/list.md): nb api resource list command reference: list records for a selected NocoBase resource.
- [nb api resource query](/api/cli/api/resource/query.md): nb api resource query command reference: run aggregate queries against a selected NocoBase resource.
- [nb api resource update](/api/cli/api/resource/update.md): nb api resource update command reference: update records in a selected NocoBase resource.
- [nb api dynamic commands](/api/cli/api/dynamic.md): nb api dynamic commands reference: CLI API commands generated from NocoBase OpenAPI Schema.
- [nb app](/api/cli/app/index.md): nb app command reference: manage the NocoBase application runtime, including start, stop, restart, logs, and upgrade.
- [nb app autostart](/api/cli/app/autostart/index.md): nb app autostart command group reference: enable or disable autostart for local or Docker envs, and start all enabled envs in one run.
- [nb app autostart enable](/api/cli/app/autostart/enable.md): nb app autostart enable command reference: enable application autostart for one local or Docker env.
- [nb app autostart disable](/api/cli/app/autostart/disable.md): nb app autostart disable command reference: disable application autostart for one env.
- [nb app autostart list](/api/cli/app/autostart/list.md): nb app autostart list command reference: list autostart status for every configured env.
- [nb app autostart run](/api/cli/app/autostart/run.md): nb app autostart run command reference: start every env that has application autostart enabled.
- [nb app logs](/api/cli/app/logs.md): nb app logs command reference: view NocoBase app logs for a selected env.
- [nb app restart](/api/cli/app/restart.md): nb app restart command reference: restart the NocoBase app for a selected env; when applicable, the CLI first synchronizes the commercial plugins allowed by the current license, then local envs automatically complete install or upgrade preparation during restart, and Docker envs recreate the app container from saved env config when needed.
- [nb app start](/api/cli/app/start.md): nb app start command reference: start the NocoBase app for a selected env; when applicable, the CLI first synchronizes the commercial plugins allowed by the current license, then local envs automatically complete install or upgrade preparation before startup, and Docker envs recreate the app container from saved env config.
- [nb app stop](/api/cli/app/stop.md): nb app stop command reference: stop the NocoBase application for the specified env, and optionally clean up the CLI-managed built-in database container as well.
- [nb app upgrade](/api/cli/app/upgrade.md): nb app upgrade command reference: stop the app, replace the saved source or image, then upgrade and start the selected NocoBase app.
- [nb backup](/api/cli/backup/index.md): nb backup command reference: create a NocoBase backup and download it locally, or restore a local backup file to the target env.
- [nb backup create](/api/cli/backup/create.md): nb backup create command reference: create a backup through the selected env and download the backup file locally.
- [nb backup restore](/api/cli/backup/restore.md): Reference for the nb backup restore command: restore a local backup file to the target env.
- [nb config](/api/cli/config/index.md): nb config command reference: manage default configuration items for the NocoBase CLI.
- [nb config delete](/api/cli/config/delete.md): nb config delete command reference: delete an explicitly set CLI configuration item.
- [nb config get](/api/cli/config/get.md): nb config get command reference: read the effective value of a CLI configuration item.
- [nb config list](/api/cli/config/list.md): nb config list command reference: list explicitly configured CLI settings.
- [nb config set](/api/cli/config/set.md): nb config set command reference: set a CLI configuration item.
- [nb db](/api/cli/db/index.md): nb db command reference: inspect or manage built-in database runtime status for a selected env.
- [nb db check](/api/cli/db/check.md): nb db check command reference: check whether a database is reachable with the current env or explicit database flags.
- [nb db logs](/api/cli/db/logs.md): nb db logs command reference: view built-in database container logs for a selected env.
- [nb db ps](/api/cli/db/ps.md): nb db ps command reference: view built-in database runtime status for configured envs.
- [nb db start](/api/cli/db/start.md): nb db start command reference: start the built-in database container for a selected env.
- [nb db stop](/api/cli/db/stop.md): nb db stop command reference: Stop the built-in database container for the specified env.
- [nb env](/api/cli/env/index.md): nb env command reference: manage NocoBase CLI envs, including adding, viewing the current env, checking status, switching, updating, authenticating, and removing.
- [nb env add](/api/cli/env/add.md): nb env add command reference: save a NocoBase API URL and authentication method, then switch to that env.
- [nb env auth](/api/cli/env/auth.md): nb env auth command reference: authenticate a saved NocoBase env with basic, token, or OAuth authentication.
- [nb env current](/api/cli/env/current.md): nb env current command reference: show the currently effective NocoBase CLI env.
- [nb env info](/api/cli/env/info.md): nb env info command reference: View the app, database, API, and authentication configuration of the specified NocoBase CLI env.
- [nb env list](/api/cli/env/list.md): nb env list command reference: list configured NocoBase CLI envs.
- [nb env remove](/api/cli/env/remove.md): nb env remove command reference: stop managed runtimes before removing env configuration, or fully clean up locally managed resources when needed.
- [nb env status](/api/cli/env/status.md): nb env status command reference: show status for the current env, one env, or all envs.
- [nb env update](/api/cli/env/update.md): nb env update command reference: update the saved API, authentication, source code, application, and database configuration.
- [nb env use](/api/cli/env/use.md): nb env use command reference: switch the current NocoBase CLI env.
- [nb license](/api/cli/license/index.md): nb license command reference: manage NocoBase commercial licensing and licensed plugins.
- [nb license activate](/api/cli/license/activate.md): nb license activate command reference: activate an existing NocoBase commercial license key for a selected env.
- [nb license id](/api/cli/license/id.md): nb license id command reference: show or regenerate the commercial license instance ID for a selected env.
- [nb license status](/api/cli/license/status.md): nb license status command reference: show commercial license status for a selected env.
- [nb plugin](/api/cli/plugin/index.md): nb plugin command reference: manage plugins for the selected NocoBase env and import packaged plugins into storage/plugins.
- [nb plugin import](/api/cli/plugin/import.md): nb plugin import command reference: import a packaged plugin archive or npm package into the selected env storage/plugins directory, or into a custom storage path.
- [nb plugin disable](/api/cli/plugin/disable.md): nb plugin disable command reference: disable one or more plugins in the selected NocoBase env.
- [nb plugin enable](/api/cli/plugin/enable.md): nb plugin enable command reference: enable one or more plugins in the selected NocoBase env.
- [nb plugin list](/api/cli/plugin/list.md): nb plugin list command reference: list plugins for the selected NocoBase env.
- [nb portal](/api/cli/portal/index.md): nb portal command reference: manage portals, including configuration, creation, development, source sync, deployment, and deletion.
- [nb portal config](/api/cli/portal/config.md): nb portal config command reference: update the development path, source storage, and Git source configuration for a portal.
- [nb portal create](/api/cli/portal/create.md): nb portal create command reference: create a local portal from a template and create or update the portal record.
- [nb portal deploy](/api/cli/portal/deploy.md): nb portal deploy command reference: build and deploy a portal.
- [nb portal destroy](/api/cli/portal/destroy.md): nb portal destroy command reference: delete a portal record and its deployed files.
- [nb portal dev](/api/cli/portal/dev.md): nb portal dev command reference: start development mode for a Portal's local source directory.
- [nb portal info](/api/cli/portal/info.md): nb portal info command reference: show portal record and local workspace details.
- [nb portal list](/api/cli/portal/list.md): nb portal list command reference: list portal records and development paths.
- [nb portal pull](/api/cli/portal/pull.md): nb portal pull command reference: pull portal source into the local workspace.
- [nb portal push](/api/cli/portal/push.md): nb portal push command reference: push local portal source changes to source storage.
- [nb proxy](/api/cli/proxy/index.md): nb proxy command-group reference: choose the Nginx or Caddy provider and manage reverse-proxy entrypoints for CLI-managed envs.
- [nb proxy caddy](/api/cli/proxy/caddy/index.md): nb proxy caddy command-group reference: manage the Caddy provider driver, config generation, and runtime control.
- [nb proxy caddy current](/api/cli/proxy/caddy/current.md): nb proxy caddy current command reference: print the current Caddy provider driver.
- [nb proxy caddy generate](/api/cli/proxy/caddy/generate.md): nb proxy caddy generate command reference: generate or refresh the Caddy config for one CLI-managed env.
- [nb proxy caddy info](/api/cli/proxy/caddy/info.md): nb proxy caddy info command reference: show the current Caddy provider driver, config paths, and runtime details.
- [nb proxy caddy reload](/api/cli/proxy/caddy/reload.md): nb proxy caddy reload command reference: reload the Caddy config with the current driver.
- [nb proxy caddy restart](/api/cli/proxy/caddy/restart.md): nb proxy caddy restart command reference: restart the Caddy proxy with the current driver.
- [nb proxy caddy start](/api/cli/proxy/caddy/start.md): nb proxy caddy start command reference: start the Caddy proxy with the current driver.
- [nb proxy caddy status](/api/cli/proxy/caddy/status.md): nb proxy caddy status command reference: show the current Caddy proxy runtime status.
- [nb proxy caddy stop](/api/cli/proxy/caddy/stop.md): nb proxy caddy stop command reference: stop the Caddy proxy with the current driver.
- [nb proxy caddy use](/api/cli/proxy/caddy/use.md): nb proxy caddy use command reference: switch the current driver for the Caddy provider.
- [nb proxy nginx](/api/cli/proxy/nginx/index.md): nb proxy nginx command-group reference: manage the Nginx provider driver, config generation, and runtime control.
- [nb proxy nginx current](/api/cli/proxy/nginx/current.md): nb proxy nginx current command reference: print the current Nginx provider driver.
- [nb proxy nginx generate](/api/cli/proxy/nginx/generate.md): nb proxy nginx generate command reference: generate or refresh the Nginx config for one CLI-managed env.
- [nb proxy nginx info](/api/cli/proxy/nginx/info.md): nb proxy nginx info command reference: show the current Nginx provider driver, config paths, and runtime details.
- [nb proxy nginx reload](/api/cli/proxy/nginx/reload.md): nb proxy nginx reload command reference: reload the Nginx config with the current driver.
- [nb proxy nginx restart](/api/cli/proxy/nginx/restart.md): nb proxy nginx restart command reference: restart the Nginx proxy with the current driver.
- [nb proxy nginx start](/api/cli/proxy/nginx/start.md): nb proxy nginx start command reference: start the Nginx proxy with the current driver.
- [nb proxy nginx status](/api/cli/proxy/nginx/status.md): nb proxy nginx status command reference: show the current Nginx proxy runtime status.
- [nb proxy nginx stop](/api/cli/proxy/nginx/stop.md): nb proxy nginx stop command reference: stop the Nginx proxy with the current driver.
- [nb proxy nginx use](/api/cli/proxy/nginx/use.md): nb proxy nginx use command reference: switch the current driver for the Nginx provider.
- [nb scaffold](/api/cli/scaffold/index.md): nb scaffold command reference: generate NocoBase plugin and migration scaffolds.
- [nb scaffold migration](/api/cli/scaffold/migration.md): nb scaffold migration command reference: generate NocoBase plugin migration scripts.
- [nb scaffold plugin](/api/cli/scaffold/plugin.md): nb scaffold plugin command reference: generate NocoBase plugin scaffold.
- [nb self](/api/cli/self/index.md): nb self command reference: check or update the installed NocoBase CLI.
- [nb self check](/api/cli/self/check.md): nb self check command reference: check installed NocoBase CLI version and self-update support.
- [nb self update](/api/cli/self/update.md): nb self update command reference: update the globally npm-, pnpm-, or yarn-installed NocoBase CLI.
- [nb session](/api/cli/session/index.md): nb session command reference: configure and inspect NB_SESSION_ID so current env is isolated per shell or agent runtime.
- [nb session id](/api/cli/session/id.md): nb session id command reference: show the current effective NB_SESSION_ID.
- [nb session remove](/api/cli/session/remove.md): nb session remove command reference: remove shell or runtime integration for NB_SESSION_ID.
- [nb session setup](/api/cli/session/setup.md): nb session setup command reference: install shell or runtime integration for NB_SESSION_ID.
- [nb skills](/api/cli/skills/index.md): nb skills command reference: check, install, update, or remove global NocoBase AI coding skills.
- [nb skills check](/api/cli/skills/check.md): nb skills check command reference: check global NocoBase AI coding skills.
- [nb skills install](/api/cli/skills/install.md): nb skills install command reference: install NocoBase AI coding skills globally.
- [nb skills remove](/api/cli/skills/remove.md): nb skills remove command reference: remove global NocoBase AI coding skills.
- [nb skills update](/api/cli/skills/update.md): nb skills update command reference: update global NocoBase AI coding skills.
- [nb source](/api/cli/source/index.md): nb source command reference: manage the local NocoBase source project, including download, dev, build, and test.
- [nb source build](/api/cli/source/build.md): nb source build command reference: build the local NocoBase source project.
- [nb source dev](/api/cli/source/dev.md): nb source dev command reference: start NocoBase development mode for npm or Git source envs.
- [nb source download](/api/cli/source/download.md): nb source download command reference: fetch NocoBase source or images from npm, Docker, or Git.
- [nb source test](/api/cli/source/test.md): nb source test command reference: run tests in the selected app directory and prepare the built-in test database automatically.
- [Application](/api/client/application.md)
- [Plugin](/api/client/plugin.md)
- [Database](/api/database/index.md)
- [Collection](/api/database/collection.md)
- [Field](/api/database/field.md)
- [Filter Operators](/api/database/operators.md): Used in the filter parameter of APIs like find, findOne, findAndCount, count of a Repository: To support JSON serialization, NocoBase identifies query operators with a string prefixed with $. Additionally, NocoBase provides an API to extend operators, see db.registerOperators() for details.
- [Repository](/api/database/repository.md)
- [](/api/database/shared.md)
- [DataSourceManager](/api/data-source-manager/data-source-manager.md): DataSourceManager is the management class for multiple dataSource instances.
- [DataSource (abstract)](/api/data-source-manager/data-source.md): DataSource is an abstract class used to represent a type of data source, which can be a database, API, etc.
- [ICollectionManager](/api/data-source-manager/i-collection-manager.md): The ICollectionManager interface is used to manage Collection instances of a data source.
- [ICollection](/api/data-source-manager/i-collection.md): ICollection is the interface for the data model, which contains information such as the model's name, fields, and associations.
- [IField](/api/data-source-manager/i-field.md): IField defines the interface that a field needs to implement.
- [IModel](/api/data-source-manager/i-model.md): The IModel interface defines the basic properties and methods of a model object.
- [IRepository](/api/data-source-manager/i-repository.md): The Repository interface defines a series of model operation methods for adapting the CRUD operations of the data source.
- [DataSourceManager](/api/flow-engine/data-source-manager.md)
- [FlowContext](/api/flow-engine/flow-context.md): NocoBase FlowContext API: Complete reference for the ctx object properties and methods in registerFlow handlers.
- [FlowEngine](/api/flow-engine/flow-engine.md)
- [FlowModel](/api/flow-engine/flow-model.md)
- [FlowResource](/api/flow-engine/flow-resource.md)
- [Resource API](/api/flow-engine/resource.md): NocoBase FlowEngine Resource API reference: complete method signatures, parameter formats, and filter syntax for MultiRecordResource and SingleRecordResource.
- [Logger](/api/logger/logger.md)
- [AppCommand](/api/server/app-command.md): Implemented based on commander.
- [Application](/api/server/application.md)
- [AuditManager](/api/server/audit-manager.md)
- [Context](/api/server/context.md)
- [Migration](/api/server/migration.md): NocoBase Migration API reference: Migration base class, up/down methods, on execution timing, appVersion version control, and available properties.
- [Plugin](/api/server/plugin.md)
- [APIClient](/api/sdk/index.md)
- [Auth](/api/sdk/auth.md)
- [Storage](/api/sdk/storage.md)
- [Metric](/api/telemetry/metric.md)
- [Telemetry](/api/telemetry/telemetry.md)
- [Trace](/api/telemetry/trace.md)
- [ACL](/api/acl/acl.md)
- [BaseInterface](/api/database/interfaces/base-interface.md)
- [BelongsToManyRepository](/api/database/relation-repository/belongs-to-many-repository.md): BelongsToManyRepository is a Relation Repository for handling BelongsToMany relationships. Unlike other relationship types, BelongsToMany relationships need to be recorded through a junction table. When defining an association relationship in NocoBase, a junction table can be created automatically, or it can be explicitly specified.
- [](/api/database/relation-repository/belongs-to-repository.md)
- [HasManyRepository](/api/database/relation-repository/has-many-repository.md): HasManyRepository is a Relation Repository used to handle HasMany relationships.
- [HasOneRepository](/api/database/relation-repository/has-one-repository.md)
- [RelationRepository](/api/database/relation-repository/index.md): RelationRepository is a Repository object for association types. RelationRepository allows operating on associated data without loading the association. Based on RelationRepository, each association type has a corresponding derived implementation: HasOneRepositoryHasManyRepositoryBelongsToRepositoryBelongsToManyRepository
- [](/api/database/shared/create-options.md)
- [](/api/database/shared/destroy-options.md)
- [](/api/database/shared/find-one.md)
- [](/api/database/shared/find-options.md)
- [](/api/database/shared/transaction.md)
- [](/api/database/shared/update-options.md)
- [API Keys](/auth-verification/api-keys/index.md)
- [API Reference](/auth-verification/auth/dev/api.md)
- [API Reference](/auth-verification/verification/dev/api.md)
- [API Documentation](/integration/api-doc/index.md)
- [API Key](/integration/api-keys/index.md)
- [Using API Keys in NocoBase](/integration/api-keys/usage.md): This guide demonstrates how to use API Keys in NocoBase to retrieve data through a practical "To-Dos" example. Follow the step-by-step instructions below to understand the complete workflow.
- [APIResource](/runjs/resource/api-resource.md): A generic API resource for making requests based on URLs, suitable for any HTTP interface. It inherits from the FlowResource base class and extends it with request configuration and refresh(). Unlike MultiRecordResource and SingleRecordResource, APIResource does not depend on a resource name; it requests directly by URL, making it suitable for custom interfaces, third-party APIs, and other scenarios. Creation method: ctx.makeResource('APIResource') or ctx.initResource('APIResource'). You must call setURL() before use. In the RunJS context, ctx.api (APIClient) is automatically injected, so there is no need to call setAPIClient manually.
- [Synchronizing User Data via HTTP API](/users-permissions/sync/sources/api.md)
## Other
- [ACL Configuration](/ai-builder/acl.md): The ACL Configuration Skill manages NocoBase roles, permission policies, user bindings, and ACL risk assessments through natural language.
- [Building with an AI Agent](/ai-builder/ai-portal/agent-workflow.md): Drive an AI Agent to write AI Portal frontend pages in natural language, including how to write prompts, collaboration tips, and how to handle common problems.
- [Standard Components and Extensions](/ai-builder/ai-portal/components.md): The AI Portal's shadcn/ui component base and its extension mechanism — one directory per extension, discovered and mounted automatically.
- [Deployment and Source Management](/ai-builder/ai-portal/deploy.md): The full develop, push, and deploy flow for an AI Portal, plus the two source storage modes and multi-environment deployment.
- [AI Portal Quick Start](/ai-builder/ai-portal/index.md): AI Portal building lets an AI Agent write your business system code, with NocoBase providing authentication, database, API, and permissions as the foundation. The code lives in an application entry called AI Portal.
- [LLM Selection](/ai-builder/ai-portal/model-selection.md): Explore test results and selection guidance for using leading flagship models to build NocoBase applications, based on a standardized evaluation system covering data modeling, pages, permissions, and workflows.
- [Project Structure and Tech Stack](/ai-builder/ai-portal/project-structure.md): The AI Portal template's tech stack, directory conventions, environment variables, and common commands, so you can tell whether the AI put its code in the right place.
- [Data Modeling](/ai-builder/data-modeling.md): The Data Modeling Skill enables creating and managing NocoBase data tables through natural language, including creating tables, adding fields, and setting up relationships.
- [Solutions](/ai-builder/dsl-reconciler.md): The Solutions Skill batch-builds NocoBase applications from YAML configuration files.
- [Environment Management](/ai-builder/env-bootstrap.md): The Environment Management Skill handles NocoBase application installation, upgrades, stopping, starting, and multi-environment management, such as development, testing, and production environments — from 'NocoBase isn't installed yet' to 'ready to log in and use.'
- [AI Builder Quick Start](/ai-builder/index.md): AI Builder is NocoBase's AI-assisted building capability. Use natural language for data modeling, UI building, workflow orchestration, and permission setup, through either no-code configuration or AI-written code.
- [Plugin Management](/ai-builder/plugin-manage.md): The Plugin Management Skill views, enables, and disables NocoBase plugins.
- [Release Management](/ai-builder/publish.md): The Release Management Skill performs auditable release operations across multiple environments, supporting backup restore and migration.
- [Security & Audit](/ai-builder/security.md): Learn about authentication methods, permission control strategies, recommended practices, and how to trace every operation record when AI Agents build with NocoBase.
- [UI Configuration](/ai-builder/ui-builder.md): The UI Configuration Skill creates and edits NocoBase pages, blocks, fields, and action configurations.
- [Version Control](/ai-builder/version-control.md): The Version Control Skill (nocobase-revision) creates restorable application versions after AI Builder completes milestone work.
- [Workflow Management](/ai-builder/workflow.md): The Workflow Management Skill creates, edits, enables, and diagnoses NocoBase workflows.
- [Supported Capabilities](/ai-dev/capabilities.md): All capabilities supported by AI development: scaffolding, collections, blocks, fields, actions, settings pages, APIs, permissions, i18n, and migrations.
- [AI Plugin Development Quick Start](/ai-dev/index.md): Use AI to assist in developing NocoBase plugins. Describe your requirements in one sentence, and automatically generate frontend and backend code, collections, permission configurations, and i18n.
- [Tutorial: Building a Watermark Plugin](/ai-dev/watermark-plugin.md): Use AI to build a complete NocoBase watermark plugin with one sentence: page watermark overlay, tamper detection, and configurable watermark parameters.
- [AI Chat box block](/ai-employees/block/ai-chat-box.md): User guide for NocoBase administrators and page builders covering how to add an AI Chat box block, configure conversation capabilities, set Work context, manage conversations, and add Actions.
- [Atlas: Team Leader](/ai-employees/built-in/atlas.md): Atlas is the built-in AI Employee team leader in NocoBase, used to understand user intent and coordinate other AI Employees.
- [Dara: Data Visualization Expert](/ai-employees/built-in/dara.md): Dara is the built-in data visualization expert in NocoBase, used to generate charts and visualization configurations from data.
- [Dex: Data Organizer](/ai-employees/built-in/dex.md): Dex is the built-in data organization expert in NocoBase, used to extract information from unstructured text and help fill forms.
- [Ellis: Email Expert](/ai-employees/built-in/ellis.md): Ellis is the built-in email expert in NocoBase, used to understand email context, summarize messages, and draft replies.
- [Built-in AI Employees](/ai-employees/built-in/index.md): Overview of NocoBase built-in AI Employees: learn their roles, scenarios, and entry points.
- [Lexi: Translation Assistant](/ai-employees/built-in/lexi.md): Lexi is the built-in translation assistant in NocoBase, used for conversational multilingual translation and communication assistance.
- [Lina: Localization Engineer](/ai-employees/built-in/lina.md): Lina is the built-in AI Employee of the Localization plugin, used to translate NocoBase system localization entries and plugin UI text.
- [Nathan: Frontend Engineer](/ai-employees/built-in/nathan.md): Nathan is the built-in frontend engineer in NocoBase, used to help write and modify frontend code in JS editors and related scenarios.
- [Vera: Research Analyst](/ai-employees/built-in/vera.md): Vera is the built-in research analyst in NocoBase, used for web search, information verification, and research summaries.
- [Viz: Insights Analyst](/ai-employees/built-in/viz.md): Viz is the built-in insights analyst in NocoBase, used to query business data and generate analytical conclusions and business reports.
- [AI Employee · Admin Configuration Guide](/ai-employees/configuration/admin-configuration.md): This document helps you quickly understand how to configure and manage AI Employees, guiding you step-by-step through the entire process from model services to task assignment.
- [AI Agent · Prompt Engineering Guide](/ai-employees/configuration/prompt-engineering-guide.md): From "how to write" to "writing well," this guide teaches you how to write high-quality prompts in a simple, stable, and reusable way.
- [Complete Example: Create a Built-in AI Employee](/ai-employees/dev/ai-employee/complete-example.md): Use a complete example to define a Tool, Skill, system prompt, and built-in AI employee in a NocoBase plugin.
- [Define a Built-in AI Employee](/ai-employees/dev/ai-employee/define-ai-employee.md): Explains how NocoBase plugins use defineAIEmployee, prompt.md, skills, and tools directories to create built-in AI employees.
- [Define a Skill](/ai-employees/dev/ai-employee/define-skill.md): Explains the frontmatter, prompt content, Tool binding, and automatic directory discovery for NocoBase AI employee SKILLS.md files.
- [Define a Server-side Tool](/ai-employees/dev/ai-employee/define-tool.md): Explains defineTools, scope, schema, invoke, permissions, and directory registration for NocoBase AI employee server-side Tools.
- [Add Frontend Interaction to a Tool](/ai-employees/dev/ai-employee/frontend-tool-ui.md): Explains frontend interaction for NocoBase AI employee Tools, including cards, modals, decisions.edit, and frontend execution.
- [AI Employee Plugin Development](/ai-employees/dev/ai-employee/index.md): Explains the relationships, directory conventions, and learning path for Tools, Skills, built-in AI employees, and frontend Tool UI in NocoBase plugins.
- [Internationalization for AI Employee Plugins](/ai-employees/dev/ai-employee/internationalization.md): Explains internationalization files, translation templates, and current limitations for NocoBase AI employee Tools, Skills, and built-in employee profiles.
- [Troubleshooting AI Employee Plugin Development](/ai-employees/dev/ai-employee/troubleshooting.md): Troubleshoot NocoBase AI employee Tools, Skills, built-in employees, and frontend Tool cards that are not registered or do not run.
- [External Knowledge Base plugin](/ai-employees/dev/knowledge-base/external-knowledge-base.md): NocoBase knowledge base plugin development: register an external knowledge base provider, implement VectorStoreService, return RAG retrieval results, and configure external knowledge base parameters.
- [Built-in AI Employees](/ai-employees/features/built-in-employee.md): NocoBase comes with several built-in AI employees tailored for specific scenarios. You only need to configure the LLM service and enable the corresponding employee to start working; models can be switched on-demand within the conversation.
- [Collaborate with AI Employees](/ai-employees/features/collaborate.md): Collaborate with AI Employees: bottom-right main entry, block Action entry, chat operations, and switching employees and models in a conversation (AI Employee Switcher, Model Switcher).
- [Enable AI Employees](/ai-employees/features/enable-ai-employee.md): Enable or disable AI Employees using the Enabled switch on the AI employees management page. Enabled employees will appear in the bottom-right shortcut entry or scenario-specific entry.
- [Configure LLM Service](/ai-employees/features/llm-service.md): Configure LLM services available for AI Employees. Supports OpenAI, Gemini, Claude, DeepSeek, Qwen, Kimi, and Ollama. Includes creating services, enabling/sorting, and availability testing.
- [Connect AI Employees to MCP](/ai-employees/features/mcp.md): Connect MCP services to AI Employees, test MCP service availability, and manage MCP tool call permissions.
- [Configure AI Employee Models](/ai-employees/features/model-settings.md): Restrict the model range for a single AI Employee, configure dedicated models, and understand model selection rules in chat, shortcut tasks, and workflows.
- [New AI Employee](/ai-employees/features/new-ai-employees.md): If built-in AI Employees do not meet your needs, you can create and customize your own AI Employee.
- [Add Context - Block](/ai-employees/features/pick-block.md): When chatting with an AI Employee, besides sending files, you can also send application Context information to the AI Employee, allowing the AI Employee to reply based on the application Context information. Send Block Information In the AI Employee Chatbox, click the Add work context button in the lower left corner and select Pick Block. The application page will enter the Block selection state. When hovering over a Block, the color of the Block that can be sent as Context will change. After selecting the Block to be sent, the Block Context information will be attached to the Chatbox. After entering the question message, just like sending a message, click the send button, and the AI Employee will reply based on the Block information. The Block information will also appear in the message list. End Block Selection When the application page enters the Block selection state but you do not want to select any Block, click the "Stop" icon at the bottom to exit the Block selection state.
- [AI Employee Skills](/ai-employees/features/skills.md): Skills are domain-specific knowledge guides for AI Employees: General skills and Employee-specific skills.
- [Shortcut Tasks](/ai-employees/features/task.md): To help AI Employees start working more efficiently, we can bind AI Employees to scenario blocks and preset several common tasks. This lets users start task processing with one click, without having to Select Block and Input Command every time.
- [AI Employee Tools](/ai-employees/features/tools.md): Tools define what AI Employees can do: General tools, Employee-specific tools, and Custom tools. Configure tool permissions with Ask/Allow.
- [AI Employee Web Search](/ai-employees/features/web-search.md): Web Search supplements the latest information beyond the model's training data. Availability depends on whether the model supports Web Search, and it can be enabled or disabled in the chat input area.
- [File Management](/ai-employees/file-manager.md)
- [AI Employees Overview](/ai-employees/index.md): AI Employees are intelligent agent capabilities deeply integrated into NocoBase business systems. They can understand business context, execute actions directly, and collaborate by role. Supports configuring LLM services, skills, and knowledge bases.
- [Overview](/ai-employees/knowledge-base/index.md)
- [Document management](/ai-employees/knowledge-base/knowledge-base/documents.md): Upload documents, view status, run vectorization, download, or delete documents on the Documents page of a knowledge base.
- [Hit tests](/ai-employees/knowledge-base/knowledge-base/hit-tests.md): Enter test text on the Hit tests page and inspect matched document segments under Top K and Score settings.
- [Overview](/ai-employees/knowledge-base/knowledge-base/index.md): Use a knowledge base to organize documents, generate segments and vector indexes, and provide maintainable data sources for AI employee RAG retrieval.
- [Segment management](/ai-employees/knowledge-base/knowledge-base/segments.md): Open the Segments dialog from the Documents page to view, edit, disable, delete, and regenerate document segments.
- [Settings](/ai-employees/knowledge-base/knowledge-base/settings.md): Modify basic information, vector database, LLM service, embedding model, and default segmentation settings on the Settings page of a knowledge base.
- [RAG Retrieval](/ai-employees/knowledge-base/rag.md)
- [Vector Database](/ai-employees/knowledge-base/vector-database.md)
- [Roles & Permissions](/ai-employees/permission.md)
- [AI Employees Quick Start](/ai-employees/quick-start.md): Complete the minimal AI Employee setup in 5 minutes: install the plugin, configure LLM models, enable built-in employees, and start collaborating. Includes an overview of built-in employees such as Atlas, Ellis, Dex, Viz, and more.
- [Generate Business Analysis Report](/ai-employees/scenarios/business-report.md): Using the online DEMO CRM system as an example, let AI Employees analyze customer and order data in the system and generate an analysis report.
- [Workflow + AI for employees to complete company background research automation](/ai-employees/scenarios/company-background-research.md): Through company information forms, background investigation records, workflows, and AI employees, a company background investigation process can be automatically triggered, retained, and supported for manual review.
- [Use Lina and local HY-MT to translate localization entries](/ai-employees/scenarios/localization-hy-mt.md): Deploy the HY-MT1.5 GGUF translation model with llama-server and configure it for Lina to batch translate NocoBase localization entries.
- [AI Agent · Viz: CRM Scenario Configuration Guide](/ai-employees/scenarios/viz-crm.md): Using the CRM example, learn how to make your AI insight analyst truly understand your business and unleash its full potential.
- [Node Approval](/ai-employees/workflow/nodes/employee/approval.md)
- [AI Employee Node](/ai-employees/workflow/nodes/employee/configuration.md)
- [Workflow AI knowledge base node - Create document](/ai-employees/workflow/nodes/knowledge/create-document.md): Use a collection event trigger and the AI knowledge base Create document node to synchronize newly added records to the AI knowledge base.
- [Workflow AI knowledge base node - Delete document](/ai-employees/workflow/nodes/knowledge/delete-document.md): Use a collection event trigger and the AI knowledge base Delete document node to delete knowledge base documents after collection records are deleted.
- [Workflow AI knowledge base nodes overview](/ai-employees/workflow/nodes/knowledge/index.md): Introduces the workflow AI knowledge base node scenario, collection structure, and how Create, Update, and Delete document nodes synchronize knowledge base content.
- [Workflow AI knowledge base node - Retrieve document](/ai-employees/workflow/nodes/knowledge/retrieve-document.md): Use the AI knowledge base Retrieve document node in a workflow to retrieve snippets and provide them as task context for an AI employee node.
- [Workflow AI knowledge base node - Update document](/ai-employees/workflow/nodes/knowledge/update-document.md): Use a collection event trigger and the AI knowledge base Update document node to synchronize collection updates to the AI knowledge base.
- [Text Chat](/ai-employees/workflow/nodes/llm/chat.md)
- [Multimodal Conversation](/ai-employees/workflow/nodes/llm/multimodal-chat.md)
- [Structured Output](/ai-employees/workflow/nodes/llm/structured-output.md)
- [Two-Factor Authentication (2FA)](/auth-verification/2fa/index.md)
- [Auth: CAS](/auth-verification/auth-cas/index.md)
- [Authentication: DingTalk](/auth-verification/auth-dingtalk/index.md)
- [Auth: LDAP](/auth-verification/auth-ldap/index.md)
- [Sign in with Google](/auth-verification/auth-oidc/examples/google.md): https://developers.google.com/identity/openid-connect/openid-connect
- [Microsoft Entra ID](/auth-verification/auth-oidc/examples/microsoft.md): https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-apphttps://learn.microsoft.com/en-us/entra/identity-platform/v2-protocols-oidc
- [Auth: OIDC](/auth-verification/auth-oidc/index.md)
- [Google Workspace](/auth-verification/auth-saml/examples/google.md)
- [Auth: SAML 2.0](/auth-verification/auth-saml/index.md)
- [Auth: SMS](/auth-verification/auth-sms/index.md)
- [Authentication: WeCom](/auth-verification/auth-wecom/index.md)
- [Authenticators](/auth-verification/auth/authenticators.md)
- [Extend Authentication Type](/auth-verification/auth/dev/index.md)
- [User Authentication](/auth-verification/auth/index.md): The user authentication module of NocoBase mainly consists of two parts: The @nocobase/auth in the kernel defines login, registration, verification and other user authentication related expandable interfaces and middleware, and is also used for registering and managing various extended authentication methods.The @nocobase/plugin-auth in the plugin is used to initialize the authentication management module in the kernel, and also provides basic username (or email) / password authentication method. It needs to be used in conjunction with the user management function provided by the @nocobase/plugin-users plugin. In addition, NocoBase also provides other various user authentication method plugins: @nocobase/plugin-auth-sms - Provides SMS verification login function@nocobase/plugin-auth-saml - Provides SAML SSO login function@nocobase/plugin-auth-oidc - Provides OIDC SSO login function@nocobase/plugin-auth-cas - Provides CAS SSO login function@nocobase/plugin-auth-ldap - Provides LDAP SSO login function@nocobase/plugin-auth-wecom - Provides WeCom login function@nocobase/plugin-auth-dingtalk - Provides DingTalk login function Through the above plugins, after the administrator configures the corresponding authentication method, users can directly use the user identity provided by platforms such as Google Workspace, Microsoft Azure to log in to the system, and can also connect to Auth0, Logto, Keycloak and other platform tools. In addition, developers can also conveniently expand other authentication methods they need through the basic interfaces we provide.
- [Password Authentication](/auth-verification/auth/password.md)
- [Authentication and Verification](/auth-verification/index.md)
- [Verification: TOTP Authenticator](/auth-verification/verification-totp/index.md)
- [Extending Validation Scenarios](/auth-verification/verification/dev/scene.md)
- [Extend SMS Provider](/auth-verification/verification/dev/sms-type.md): This article primarily explains how to extend the SMS provider functionality in the Verification: SMS feature via a plugin.
- [Extending Validation Types](/auth-verification/verification/dev/type.md)
- [Verification](/auth-verification/verification/index.md)
- [Verification: SMS](/auth-verification/verification/sms.md)
- [Let AI employees fill custom forms in JS blocks](/building-tips/ai-fill-js-block-form.md): Use Ant Design Form and a small bridge to let AI employees recognize and fill complex custom forms in JS blocks.
- [Use NocoBase to build a linkable operational dashboard](/building-tips/operations-dashboard.md): Taking the work order operation dashboard as an example, the chart block, filter block and JS block are combined to achieve unified filtering, KPI, chart drill-down and custom styles.
- [Formula.js](/calculation-engine/formula.md): Formula.js provides a large collection of Excel-compatible functions.
- [Calculation Engines Overview](/calculation-engine/index.md): In NocoBase, calculation engines are integral to formula fields, linkage rules, and workflows, providing users with versatile computational tools.
- [Mathjs](/calculation-engine/math.md): Math.js is a feature-rich mathematics library for JavaScript and Node.js.
- [NocoBase 2.1.0-beta Release Notes](/changelog/2.1.0-beta-24.md): This document applies to NocoBase 2.1.0-beta.24 and later. This is a major upgrade centered on AI capabilities. This release lets you bring AI Agents into NocoBase — covering CLI integration, AI-assisted building, enhanced AI Employees, and an AI development plugin — spanning the full flow from environment onboarding to system building and business collaboration. We have also continued to round out V2 page support and core capabilities.
- [Cluster Mode: Plugin Development](/cluster-mode/development.md): Developing plugins in cluster mode: Cache, SyncMessageManager, PubSubManager, Queue, and distributed locks; state consistency, task scheduling, and race conditions.
- [Cluster Mode](/cluster-mode/index.md): NocoBase cluster mode: multi-instance deployment, load balancing, shared storage, Redis cache and message queue, distributed locks, and Kubernetes deployment for higher concurrency.
- [Kubernetes Deployment](/cluster-mode/kubernetes.md): Deploy a NocoBase cluster on K8s or K3s: ConfigMap, Deployment, shared PVC, Redis or PostgreSQL middleware, load balancing, and health checks.
- [Cluster Operations](/cluster-mode/operations.md): Cluster operations: first startup order, version upgrade (stop, backup, update, verify), and in-app maintenance (plugins, backup) reduced to a single node.
- [Cluster Deployment Prerequisites](/cluster-mode/preparations.md): Prepare for cluster deployment: commercial plugin licenses (PubSub, Queue, Lock, Worker ID adapters), database, Redis or RabbitMQ middleware, shared storage, and load balancing.
- [Service Splitting](/cluster-mode/services-splitting.md): Split long-running services (workflow, async tasks) to dedicated nodes in cluster mode using WORKER_MODE; request nodes vs task nodes and horizontal scaling.
- [Calendar collection](/data-sources/calendar/calendar-collection.md): Use a Calendar collection to store time-range data such as meetings, schedules, courses, and shifts, then display and edit event records with Calendar blocks.
- [Calendar Block](/data-sources/calendar/index.md)
- [Comment collection](/data-sources/collection-comment/index.md): A Comment collection stores comments, replies, and feedback for business records. It supports rich-text content, user tracking, multi-level comments, and Comment blocks.
- [Expression Collection](/data-sources/collection-expression/collection.md)
- [How to Enable the Federated Engine in MySQL](/data-sources/collection-fdw/enable-federated.md): The MySQL database does not enable the federated module by default. You need to modify the my.cnf configuration. If you are using the Docker version, you can handle the extension situation through volumes: Create a new ./storage/mysql-conf/federated.cnf file Restart MySQL Check if federated is activated
- [Connect Foreign Data Tables(FDW)](/data-sources/collection-fdw/index.md)
- [SQL collection](/data-sources/collection-sql/index.md): Create a collection from SQL query results. Configure field sources, field mapping, and Record unique key for joins, aggregations, and reports.
- [Tree collection](/data-sources/collection-tree/index.md): Use a Tree collection for hierarchical data such as organizational structures, product categories, regional hierarchies, and department directories. It uses the adjacency-list model to store parent-child relationships.
- [Database views](/data-sources/collection-view/index.md): Connect an existing database view as a data source, then configure its fields and display in NocoBase. Suitable for visual management of complex query results.
- [China region](/data-sources/data-modeling/collection-fields/advanced/china-region.md): The China region field stores Chinese administrative divisions such as provinces, cities, and districts. It supports three-level cascading selection and hierarchical display.
- [Collection select](/data-sources/data-modeling/collection-fields/advanced/collection-select.md): The Collection select field selects one or more NocoBase collections.
- [JSON](/data-sources/data-modeling/collection-fields/advanced/json.md): The JSON field stores structured or semi-structured data such as configuration objects and API-response fragments.
- [Nano ID](/data-sources/data-modeling/collection-fields/advanced/nano-id.md): The Nano ID field generates short random unique identifiers.
- [Snowflake ID](/data-sources/data-modeling/collection-fields/advanced/snowflake-id.md): The Snowflake ID field generates unique identifiers and is commonly used as the default primary key for NocoBase general collections.
- [Sort field](/data-sources/data-modeling/collection-fields/advanced/sort.md): Sort field type configuration for recording the order of records.
- [UUID](/data-sources/data-modeling/collection-fields/advanced/uuid.md): The UUID field generates UUID unique identifiers for cross-system and public references.
- [Relation fields](/data-sources/data-modeling/collection-fields/associations/index.md): Relation fields create connections between collections. They support one-to-one, one-to-many, many-to-one, many-to-many, and many-to-many array relations.
- [Many-to-Many](/data-sources/data-modeling/collection-fields/associations/m2m/index.md): In a course enrollment system, there are two entities: students and courses. A student can enroll in multiple courses, and a course can have multiple students enrolled, constituting a many-to-many relationship. In a relational database, to represent the many-to-many relationship between students and courses, an intermediary collection, such as an enrollment collection, is usually used. This collection can record which courses each student has chosen and which students have enrolled in each course. This design effectively represents the many-to-many relationship between students and courses. ER Diagram: Field Configuration:
- [Many-to-One](/data-sources/data-modeling/collection-fields/associations/m2o/index.md): In a library database, there are two entities: books and authors. An author can write multiple books, but each book usually has only one author. In this case, the relationship between authors and books is many-to-one. Multiple books can be associated with the same author, but each book can have only one author. ER Diagram: Field Configuration:
- [One-to-Many](/data-sources/data-modeling/collection-fields/associations/o2m/index.md): The relationship between a class and its students is an example of a one-to-many relationship: one class can have multiple students, but each student belongs to only one class. ER Diagram: Field Configuration:
- [One-to-One](/data-sources/data-modeling/collection-fields/associations/o2o/index.md): In the relationship between employees and personal profiles, each employee can only have one personal profile record, and each personal profile record can only correspond to one employee. In this case, the relationship between the employee and the personal profile is one-to-one. The foreign key in a one-to-one relationship can be placed in either the source collection or the target collection. If it represents "has one," the foreign key is more appropriately placed in the target collection; if it represents "belongs to," then the foreign key is better placed in the source collection. For example, in the case mentioned above, where an employee has only one personal profile and the personal profile belongs to the employee, it is appropriate to place the foreign key in the personal profile collection.
- [Color](/data-sources/data-modeling/collection-fields/basic/color.md): The Color field stores color values for interface display and configuration.
- [Email](/data-sources/data-modeling/collection-fields/basic/email.md): The Email field stores email addresses and provides email-format validation.
- [Icon](/data-sources/data-modeling/collection-fields/basic/icon.md): The Icon field stores icon identifiers for menus, categories, statuses, and other interface elements.
- [Single line text](/data-sources/data-modeling/collection-fields/basic/input.md): The Single line text field stores short text such as names, codes, titles, and contacts. It uses the string type and Input interface by default.
- [Integer](/data-sources/data-modeling/collection-fields/basic/integer.md): The Integer field stores whole-number values such as quantities, headcounts, and days.
- [Number](/data-sources/data-modeling/collection-fields/basic/number.md): The Number field stores decimal values such as amounts, scores, and weights.
- [Password](/data-sources/data-modeling/collection-fields/basic/password.md): The Password field stores password or secret values and uses a masked input component.
- [Percent](/data-sources/data-modeling/collection-fields/basic/percent.md): The Percent field stores percentage values such as completion, discount, and conversion rates.
- [Phone](/data-sources/data-modeling/collection-fields/basic/phone.md): The Phone field stores mobile phone and contact phone numbers.
- [Textarea](/data-sources/data-modeling/collection-fields/basic/textarea.md): The Textarea field stores longer plain-text content such as notes, opinions, and detailed addresses.
- [URL](/data-sources/data-modeling/collection-fields/basic/url.md): The URL field stores website, document, and other external addresses.
- [Checkbox group](/data-sources/data-modeling/collection-fields/choices/checkbox-group.md): The Checkbox group field stores multiple values selected from a visible group of fixed options.
- [Checkbox](/data-sources/data-modeling/collection-fields/choices/checkbox.md): The Checkbox field stores a true or false value for a binary business state.
- [China region](/data-sources/data-modeling/collection-fields/choices/china-region.md): The China region field selects administrative divisions such as provinces, cities, and districts in China.
- [Multiple select](/data-sources/data-modeling/collection-fields/choices/multiple-select.md): The Multiple select field stores multiple values from a fixed option set, such as tags and applicable scenarios.
- [Radio group](/data-sources/data-modeling/collection-fields/choices/radio-group.md): The Radio group field stores one option selected from a visible group of fixed options.
- [Select](/data-sources/data-modeling/collection-fields/choices/select.md): The Select field stores one value from a fixed option set, such as status, level, or priority.
- [Date](/data-sources/data-modeling/collection-fields/datetime/date.md): The Date field stores a calendar date without requiring a time value.
- [DateTime (without time zone)](/data-sources/data-modeling/collection-fields/datetime/datetime-without-tz.md): The DateTime (without time zone) field stores a local date and time without time-zone conversion.
- [DateTime](/data-sources/data-modeling/collection-fields/datetime/datetime.md): The DateTime field stores date and time values with time-zone information.
- [Overview](/data-sources/data-modeling/collection-fields/datetime/index.md): Date and time field types: with and without time zone, date, time, and Unix timestamp, including NocoBase, MySQL, and PostgreSQL type mappings.
- [Time](/data-sources/data-modeling/collection-fields/datetime/time.md): The Time field stores a time of day without a date.
- [Unix timestamp](/data-sources/data-modeling/collection-fields/datetime/unix-timestamp.md): The Unix timestamp field stores timestamps from external systems as integer values.
- [Circle](/data-sources/data-modeling/collection-fields/geometric/circle.md): The Circle field stores a circular geographic area such as a service radius or coverage range.
- [Line string](/data-sources/data-modeling/collection-fields/geometric/line.md): The Line string field stores a geographic line such as a delivery route, inspection track, or pipeline.
- [Point](/data-sources/data-modeling/collection-fields/geometric/point.md): The Point field stores a geographic point such as a store, device, or customer location.
- [Polygon](/data-sources/data-modeling/collection-fields/geometric/polygon.md): The Polygon field stores a geographic area such as a sales territory, delivery area, or risk area.
- [Fields](/data-sources/data-modeling/collection-fields/index.md): Learn the purpose of NocoBase fields, how to create and manage them, field-type use cases, creating fields from pages, and field mapping for main and external data sources.
- [Attachment Field](/data-sources/data-modeling/collection-fields/media/field-attachment.md)
- [Markdown](/data-sources/data-modeling/collection-fields/media/markdown.md): The Markdown field stores Markdown-formatted content such as documentation, processing plans, and knowledge-base articles.
- [Rich text](/data-sources/data-modeling/collection-fields/media/rich-text.md): The Rich text field stores formatted content such as announcements, articles, email templates, and documentation.
- [Created at](/data-sources/data-modeling/collection-fields/system-info/created-at.md): The Created at field automatically records when a record was created.
- [Created by](/data-sources/data-modeling/collection-fields/system-info/created-by.md): The Created by field automatically records the user who created a record.
- [Space](/data-sources/data-modeling/collection-fields/system-info/space.md): The Space field records the space to which data belongs and supports data isolation by space.
- [Table OID](/data-sources/data-modeling/collection-fields/system-info/table-oid.md): The Table OID field identifies the collection to which a record belongs.
- [Updated at](/data-sources/data-modeling/collection-fields/system-info/updated-at.md): The Updated at field automatically records when a record was last updated.
- [Updated by](/data-sources/data-modeling/collection-fields/system-info/updated-by.md): The Updated by field automatically records the user who last updated a record.
- [Field validation](/data-sources/data-modeling/collection-fields/validation.md): Field validation rules based on Joi configuration and validation rules. Supports minimum and maximum length, required values, and other rules for string, number, date, and other types.
- [Collections](/data-sources/data-modeling/collection.md): Learn the purpose of NocoBase collections, collection structure types, the difference between main and external collections, and how to choose general, inheritance, tree, file, SQL, and database-view collections.
- [Overview of Data Sources](/data-sources/data-modeling/data-source.md)
- [Data modeling overview](/data-sources/data-modeling/index.md): Data modeling covers designing data models, connecting data sources, visualizing ER diagrams, and creating collections for main and external databases.
- [Main vs External Databases](/data-sources/data-modeling/main-vs-external-data-sources.md): The differences between main databases and external databases in NocoBase are primarily reflected in four aspects: database type support, collection type support, field type support, and backup and migration capabilities.
- [External data source - MariaDB](/data-sources/data-source-external-mariadb/index.md): Learn how to connect MariaDB as an external database in NocoBase, including supported versions, plugin installation, connection settings, collection scope, permissions, and field mapping.
- [External data source - MSSQL](/data-sources/data-source-external-mssql/index.md): Learn how to connect MSSQL/SQL Server as an external database in NocoBase, including supported versions, plugin installation, connection settings, encrypted connections, permissions, and field mapping.
- [External data source - MySQL](/data-sources/data-source-external-mysql/index.md): Connect MySQL as an external NocoBase database, including version support, plugin installation, connection configuration, table scope, permissions, and field mapping.
- [External NocoBase](/data-sources/data-source-external-nocobase/index.md): Connect another NocoBase application as an external data source. Learn the configuration, available capabilities, and workflow limitations.
- [External data source - Oracle](/data-sources/data-source-external-oracle/index.md): Learn how to connect Oracle as an external database in NocoBase, including supported versions, plugin installation, Thin and Thick connection modes, Client directory, permissions, and field mapping.
- [External data source - PostgreSQL](/data-sources/data-source-external-postgres/index.md): Connect PostgreSQL as an external NocoBase database, including version support, plugin installation, connection configuration, Schema, SSL, permissions, and field mapping.
- [Main data source - KingbaseES](/data-sources/data-source-kingbase/index.md): Learn KingbaseES version support, installation, environment variables, Docker deployment, usage, and field mapping for the NocoBase main database.
- [General collection](/data-sources/data-source-main/general-collection.md): Use a General collection for common business data such as customers, orders, contracts, work orders, projects, and tasks.
- [Main database](/data-sources/data-source-main/index.md): The NocoBase main database stores system and business data. It supports MySQL, PostgreSQL, MariaDB, KingbaseES, and OceanBase, table synchronization, and collection creation.
- [Inheritance collection](/data-sources/data-source-main/inheritance-collection.md): Create child collections from a parent collection. Child collections inherit parent fields and can define their own fields; this is supported only by a PostgreSQL main database.
- [External databases](/data-sources/data-source-manager/external-database.md): Connect existing MySQL, PostgreSQL, MariaDB, KingbaseES, OceanBase, MSSQL, Oracle, ClickHouse, and Doris databases to NocoBase, then map their fields and relations.
- [Data source management](/data-sources/data-source-manager/index.md): Use the Data Source Manager to manage the main database, external databases, REST API data sources, and external NocoBase data sources from one interface.
- [REST API data source](/data-sources/data-source-rest-api/index.md): Connect REST API data and map RESTful resources to collections. Configure List, Get, Create, Update, and Destroy API mappings to support CRUD operations.
- [External data source - ClickHouse](/data-sources/external/clickhouse.md): Learn how to connect ClickHouse as an external database in NocoBase, including the MySQL-compatible port, SSL, collection scope, read-only analytics use cases, and field mapping.
- [External data source - Doris](/data-sources/external/doris.md): Learn how to connect Doris as an external database in NocoBase, including the MySQL-compatible port, FE query_port, collection scope, read-only analytics use cases, and field mapping.
- [External databases](/data-sources/external/index.md): Connect existing MySQL, PostgreSQL, MariaDB, KingbaseES, OceanBase, MSSQL, Oracle, ClickHouse, and Doris databases to NocoBase, then map their fields and relations.
- [External data source - KingbaseES](/data-sources/external/kingbase.md): Learn how to connect KingbaseES as an external database in NocoBase, including supported versions, PostgreSQL compatibility mode, connection settings, schemas, permissions, and field mapping.
- [External data source - MariaDB](/data-sources/external/mariadb.md): Learn how to connect MariaDB as an external database in NocoBase, including supported versions, plugin installation, connection settings, collection scope, permissions, and field mapping.
- [External data source - MSSQL](/data-sources/external/mssql.md): Learn how to connect MSSQL/SQL Server as an external database in NocoBase, including supported versions, plugin installation, connection settings, encrypted connections, permissions, and field mapping.
- [External data source - MySQL](/data-sources/external/mysql.md): Connect MySQL as an external NocoBase database, including version support, plugin installation, connection configuration, table scope, permissions, and field mapping.
- [External NocoBase](/data-sources/external/nocobase.md): Connect another NocoBase application as an external data source. Learn the configuration, available capabilities, and workflow limitations.
- [External data source - OceanBase](/data-sources/external/oceanbase.md): Learn how to connect OceanBase as an external database in NocoBase, including supported versions, MySQL compatibility mode, connection settings, collection scope, permissions, and field mapping.
- [External data source - Oracle](/data-sources/external/oracle.md): Learn how to connect Oracle as an external database in NocoBase, including supported versions, plugin installation, Thin and Thick connection modes, Client directory, permissions, and field mapping.
- [External data source - PostgreSQL](/data-sources/external/postgresql.md): Connect PostgreSQL as an external NocoBase database, including version support, plugin installation, connection configuration, Schema, SSL, permissions, and field mapping.
- [REST API data source](/data-sources/external/rest-api.md): Connect REST API data and map RESTful resources to collections. Configure List, Get, Create, Update, and Destroy API mappings to support CRUD operations.
- [Attachment URL](/data-sources/field-attachment-url/index.md): The Attachment URL field stores external file addresses for files hosted outside NocoBase.
- [China region](/data-sources/field-china-region/index.md)
- [Field encryption](/data-sources/field-encryption/index.md): Encrypt sensitive business data such as phone numbers, email addresses, and card numbers before storing it as ciphertext in the database.
- [Formula](/data-sources/field-formula/index.md): The Formula field calculates a field value from an expression.
- [Many-to-Many (Array)](/data-sources/field-m2m-array/index.md)
- [Markdown Vditor](/data-sources/field-markdown-vditor/index.md): The Markdown Vditor field uses the Vditor editor to edit Markdown content.
- [Sequence](/data-sources/field-sequence/index.md): The Sequence field generates readable business numbers such as order, contract, and work-order numbers.
- [Collection field: Handwritten signature](/data-sources/field-signature/index.md)
- [Sort field](/data-sources/field-sort/index.md): Sort fields order collection records and support grouped ordering for custom record display order.
- [Attachment](/data-sources/file-manager/field-attachment.md): The Attachment field uploads files and relates file records to the current business record.
- [File collection](/data-sources/file-manager/file-collection.md): A File collection stores file titles, names, sizes, MIME types, paths, URLs, preview addresses, storage locations, and extended metadata for use with attachment fields.
- [HTTP API](/data-sources/file-manager/http-api.md): File uploads for both attachment fields and file collections can be handled via the HTTP API. The method of invocation differs depending on the storage engine used by the attachment or file collection.
- [File Manager](/data-sources/file-manager/index.md)
- [Aliyun OSS](/data-sources/file-manager/storage/aliyun-oss.md): Storage engine based on Aliyun OSS. You need to prepare the relevant accounts and permissions in advance.
- [Amazon S3](/data-sources/file-manager/storage/amazon-s3.md)
- [Overview](/data-sources/file-manager/storage/index.md)
- [Local storage](/data-sources/file-manager/storage/local.md): Uploaded files will be saved in a local directory on the server. This is suitable for small-scale or experimental scenarios where the total number of files managed by the system is relatively small.
- [File Storage: S3 (Pro)](/data-sources/file-manager/storage/s3-pro.md)
- [Tencent COS](/data-sources/file-manager/storage/tencent-cos.md): A storage engine based on Tencent Cloud COS. Before use, you need to prepare the relevant account and permissions.
- [Graph Collection Manager](/data-sources/graph-collection-manager/index.md)
- [Data sources overview](/data-sources/index.md): NocoBase data sources and data modeling: main databases, external databases, REST APIs, external NocoBase, collections, and fields.
- [Main database](/data-sources/main/index.md): The NocoBase main database stores system and business data. It supports MySQL, PostgreSQL, MariaDB, KingbaseES, and OceanBase, table synchronization, and collection creation.
- [Main data source - KingbaseES](/data-sources/main/kingbase.md): Learn KingbaseES version support, installation, environment variables, Docker deployment, usage, and field mapping for the NocoBase main database.
- [Main data source - MariaDB](/data-sources/main/mariadb.md): Learn the supported version, plugin installation, usage, and field mapping for MariaDB as the NocoBase main database.
- [Main data source - MySQL](/data-sources/main/mysql.md): Learn the supported version, plugin installation, usage, and field mapping for MySQL as the NocoBase main database.
- [Main data source - OceanBase](/data-sources/main/oceanbase.md): Learn the supported version, plugin installation, usage, and field mapping for OceanBase as the NocoBase main database.
- [Main data source - PostgreSQL](/data-sources/main/postgresql.md): Learn the supported version, plugin installation, usage, and field mapping for PostgreSQL as the NocoBase main database.
- [Best practices](/data-visualization/best-practices.md): Documentation in progress...
- [FAQ](/data-visualization/faq.md)
- [Overview](/data-visualization/index.md): The NocoBase data visualization plugin provides visual data querying and a rich set of chart components. With simple configuration, you can quickly build dashboards, present insights, and support multi-dimensional analysis and display.
- [Quick start](/data-visualization/quick-start.md): This guide walks through configuring a chart from scratch using the essential features. Optional capabilities are covered in later chapters. Prerequisites: A data source and collection (table) are set up, and you have read permission.
- [Database](/database/index.md)
- [Auto-save Draft](/email-manager/advanced/auto-save-draft.md): You can enable the Auto-save draft feature in the Save Draft button. Once enabled, the system will automatically save drafts in real-time during the email editing process, ensuring no content is lost. When you open the email editor again with the same sender and recipient, the system will prompt whether to use the saved draft.
- [Bulk Send](/email-manager/advanced/batch-send.md)
- [Email Labels](/email-manager/advanced/label.md): On the right side of the email details, you can select labels for emails. When creating a new label, it will be checked by default, or you can manually select other labels. In the email list, you can view the corresponding labels for emails.
- [Email Notes](/email-manager/advanced/note.md): On the right side of the email details, you can edit notes. After adding notes, you can view the added notes in the email details.
- [Email To-do](/email-manager/advanced/todo.md): On the right side of the email details, you can mark an email as to-do. In the email list, you can view emails marked with a to-do flag.
- [FAQ](/email-manager/configuration/faq.md)
- [Google Configuration](/email-manager/configuration/gmail.md): Prerequisites For users to be able to integrate Google Gmail into NocoBase, the system must be deployed on a server that supports access to Google services. The backend will call the Google API. Register Account Open https://console.cloud.google.com/welcome to enter Google CloudOn first entry, you need to agree to the relevant terms Create App Click "Select a project" at the top Click the "NEW PROJECT" button in the pop-up layer Fill in the project information After the project is created, select the project Enable Gmail API Click the "APIs & Services" button Enter the APIs & Services panel Search for mail Click the ENABLE button to enable Gmail API Configure OAuth Consent Screen Click the "OAuth consent screen" menu on the left Select External Fill in the project information (for display on the subsequent authorization page) and click save Fill in Developer contact information and click continue Click continue Add test users for testing before app publication Click continue Review the overview information and return to the dashboard Create Credentials Click the Credentials menu on the left Click the "CREATE CREDENTIALS" button and select "OAuth client ID" Select "Web application" Fill in the application information Fill in the domain where the application will be finally deployed (this example is NocoBase's test address) Add the authorized callback address, which must be domain + "/admin/settings/mail/oauth2", for example: https://pr-1-mail.test.nocobase.com/admin/settings/mail/oauth2 Click create to view OAuth information Copy the Client ID and Client Secret content and fill them into the email configuration page Click save to complete the configuration Application Publication Proceed with publication after the above process is completed and test users authorize login, email sending, and other feature tests are finished. Click the "OAuth consent screen" menu Click the "EDIT APP" button, then click "SAVE AND CONTINUE" button at the bottom Click the "ADD OR REMOVE SCOPES" button to select user permission scopes Search for "Gmail API" and check "Gmail API" (confirm that the Scope value is "https://mail.google.com/") Click the UPDATE button at the bottom to save Click "SAVE AND CONTINUE" button at the bottom of each page, then finally click "BACK TO DASHBOARD" button to return to the dashboard page Click the PUBLISH APP button and a publication confirmation page appears showing the information required for publication. Then click the CONFIRM button Return to the console page again, and you can see the publication status is "In production" Click the "PREPARE FOR VERIFICATION" button, fill in the required information, and click the "SAVE AND CONTINUE" button (data in the image is for example only) Continue filling in the necessary information (data in the image is for example only) Click the "SAVE AND CONTINUE" button Click the "SUBMIT FOR VERIFICATION" button to submit Verification Wait for the approval result In case the approval has not been passed yet, users can click the unsafe link to authorize login
- [Configuration Guide](/email-manager/configuration/guide.md)
- [Microsoft Configuration](/email-manager/configuration/outlook.md): Prerequisites For users to be able to integrate Outlook email into NocoBase, the system must be deployed on a server that supports access to Microsoft services. The backend will call Microsoft API. Register Account Open https://azure.microsoft.com/en-us/pricing/purchase-options/azure-accountLog in to your Microsoft account Create Tenant Open https://azure.microsoft.com/zh-cn/pricing/purchase-options/azure-account?icid=azurefreeaccount and log in to your accountFill in basic information and obtain verification code Fill in other information and continue Fill in credit card information (can be created later) Get Client ID Click the top menu and select Microsoft Entra ID Select App registrations on the left Click New registration at the top Fill in the information and submit The name can be anything, select account types as shown in the figure, and Redirect URI can be left blank for now Obtain the Client ID API Permissions Open the API permissions menu on the right Click the Add a permission button Click Microsoft Graph Search and add the following permissions, with the final result shown in the image below"email""offline_access""IMAP.AccessAsUser.All""SMTP.Send""offline_access""User.Read" (By default) Get Client Secret Click Certificates & secrets on the left Click the New client secret button Fill in the description and expiration time, and add it Obtain the Client Secret Copy the Client ID and Client Secret information respectively and fill them into the email configuration page
- [Email Manager](/email-manager/index.md)
- [Email Alias](/email-manager/usage/alias.md): Email alias allows you to send emails using different sender identities under the same mailbox account
- [Block Configuration](/email-manager/usage/configuration.md)
- [Email Center](/email-manager/usage/guide.md):
- [Email Signature](/email-manager/usage/signature.md)
- [Email Template](/email-manager/usage/template.md)
- [Attachment](/file-manager/field-attachment.md)
- [File Collection](/file-manager/file-collection.md)
- [File Preview](/file-manager/file-preview/index.md): In interfaces containing file fields (including attachment fields), you can preview files by clicking on the file thumbnail or icon. The built-in preview function supports various file types, including images, PDFs, and most file types natively supported by browsers. For file types that do not support native preview, you can enable preview functionality by installing or extending the corresponding file preview plugins. For example, after installing the Office File Preview plugin, you can preview Word, Excel, and PowerPoint files. Currently, NocoBase provides the following file preview plugins: Office File Preview Plugin
- [Office File Preview v1.8.11+](/file-manager/file-preview/ms-office.md): The Office File Preview plugin is used to preview Office format files in NocoBase applications, such as Word, Excel, and PowerPoint.It is based on a public online service provided by Microsoft, which allows files accessible via a public URL to be embedded in a preview interface, enabling users to view these files in a browser without downloading or using Office applications.
- [HTTP API](/file-manager/http-api.md): File uploads for both Attachment fields and File collections are supported via the HTTP API. The method of invocation differs depending on the storage engine used by the Attachment field or File collection.
- [File Manager](/file-manager/index.md)
- [Stable URL (proxy URL)](/file-manager/stable-url.md): Explains NocoBase stable file URLs, access permissions, redirects, temporary Office preview URLs, and behavior across file-related features.
- [Storage Engine: Aliyun OSS](/file-manager/storage/aliyun-oss.md): A storage engine based on Aliyun OSS. Before use, you need to prepare the relevant account and permissions.
- [Storage Engine: Amazon S3](/file-manager/storage/amazon-s3.md): A storage engine based on Amazon S3. You need to prepare the relevant account and permissions before use.
- [Overview](/file-manager/storage/index.md)
- [Storage Engine: Local Storage](/file-manager/storage/local.md): Uploaded files will be saved in a local directory on the server's hard drive. This is suitable for scenarios with a small total volume of uploaded files managed by the system or for experimental purposes.
- [Migrate to S3 Pro](/file-manager/storage/migrate-to-s3-pro.md): Migrate files from public-only storage engines to S3 Pro, including maintenance windows, backups, object key mapping, record updates, and risk checks.
- [Storage Engine: S3 (Pro)](/file-manager/storage/s3-pro.md)
- [Tencent Cloud COS](/file-manager/storage/tencent-cos.md): A storage engine based on Tencent Cloud COS. You need to prepare the relevant account and permissions before use.
- [AddSubModelButton](/flow-engine/add-sub-model.md): AddSubModelButton: Add subModels to a specified FlowModel, supporting async menus, grouping, submenus, class inheritance filtering, and toggle mode.
- [Create FlowModel](/flow-engine/create-flow-model.md)
- [createMockClient](/flow-engine/create-mock-client.md): For examples and tests, it is generally recommended to quickly build a mock application using createMockClient. A mock application is a clean, empty application with no plugins activated, intended solely for examples and testing. For example: createMockClient provides apiMock to build mock API data. Based on createMockClient, we can quickly extend functionality through plugins. Common APIs for Plugin include: plugin.router: Extend routesplugin.engine: Frontend engine (NocoBase 2.0)plugin.context: Context (NocoBase 2.0) Example 1: Add a route via the router. We will introduce more content in subsequent chapters.
- [ActionDefinition](/flow-engine/definitions/action-definition.md): ActionDefinition defines reusable actions that can be referenced in multiple flows and steps. An action is the core execution unit in the FlowEngine, encapsulating specific business logic.
- [EventDefinition](/flow-engine/definitions/event-definition.md): EventDefinition defines the event handling logic in a flow, used to respond to specific event triggers. Events are an important mechanism in the FlowEngine for triggering flow execution.
- [FlowDefinition](/flow-engine/definitions/flow-definition.md): FlowDefinition defines the basic structure and configuration of a flow and is one of the core concepts of the FlowEngine. It describes the flow's metadata, trigger conditions, execution steps, etc.
- [ModelDefinition](/flow-engine/definitions/model-definition.md): ModelDefinition defines the creation options for a flow model, used to create a model instance via the FlowEngine.createModelAsync() method. It includes the model's basic configuration, properties, sub-models, and other information.
- [StepDefinition](/flow-engine/definitions/step-definition.md): StepDefinition defines a single step in a flow. Each step can be an action, event handling, or other operation. A step is the basic execution unit of a flow.
- [Event Flow](/flow-engine/event-flow.md): In FlowEngine, all interface components are event-driven. The behavior, interaction, and data changes of components are triggered by events and executed through a flow.
- [Context System Overview](/flow-engine/flow-context.md): The NocoBase FlowEngine's context system is divided into three layers, each corresponding to a different scope. Proper use can achieve flexible sharing and isolation of services, configurations, and data, improving business maintainability and scalability. FlowEngineContext (Global Context): Globally unique, accessible by all models and flows, suitable for registering global services, configurations, etc.FlowModelContext (Model Context): Used for sharing context within a model tree. Sub-models automatically delegate to the parent model's context, supporting same-name overrides. Suitable for model-level logic and data isolation.FlowRuntimeContext (Flow Runtime Context): Created each time a flow is executed, persisting throughout the entire flow execution cycle. Suitable for data passing, variable storage, and recording runtime status within the flow. Supports two modes: mode: 'runtime' | 'settings', corresponding to runtime mode and settings mode respectively. All FlowEngineContext (Global Context), FlowModelContext (Model Context), and FlowRuntimeContext (Flow Runtime Context) are subclasses or instances of FlowContext.
- [FlowModel Configuration](/flow-engine/flow-definition.md)
- [Relationship between FlowEngine and Plugins](/flow-engine/flow-engine-and-plugins.md): FlowEngine is not a plugin, but a core API provided for plugins to use, connecting core capabilities with business extensions. In NocoBase 2.0, all APIs are centralized in FlowEngine, and plugins can access FlowEngine via this.engine.
- [FlowModel Lifecycle](/flow-engine/flow-model-lifecycle.md)
- [FlowModel Configuration](/flow-engine/flow-model-options.md)
- [Render FlowModel](/flow-engine/flow-model-renderer.md): FlowModelRenderer is the core React component for rendering a FlowModel. It is responsible for converting a FlowModel instance into a visual React component.
- [FlowModel Persistence](/flow-engine/flow-model-repository.md): FlowEngine provides a complete persistence system.
- [FlowModel Flow and Configuration](/flow-engine/flow-model-settings.md): FlowModel provides a "Flow"-based approach to implement component configuration logic, making component behavior and configuration more extensible and visual.
- [Using and Rendering FlowModel](/flow-engine/flow-model-usage.md)
- [FlowModel vs React.Component](/flow-engine/flow-model-vs-react-component.md)
- [Starting with FlowModel](/flow-engine/flow-model.md)
- [What is FlowEngine?](/flow-engine/index.md): FlowEngine is a new front-end no-code, low-code development engine introduced in NocoBase 2.0. It combines models (Model) with flows (Flow) to simplify front-end logic and enhance reusability and maintainability. At the same time, by leveraging the configurable nature of Flow, it provides no-code configuration and orchestration capabilities for front-end components and business logic.
- [JS Action](/flow-engine/js-model/js-action.md)
- [JS Block](/flow-engine/js-model/js-block.md)
- [JS Table Column](/flow-engine/js-model/js-column.md)
- [JS 字段](/flow-engine/js-model/js-field.md)
- [JS Item](/flow-engine/js-model/js-item.md)
- [Learning Roadmap](/flow-engine/learning-roadmap.md)
- [China Region Field](/flow-engine/model-definition.md): The China Region Field plugin (`field-china-region`) adds the "China Region" field type to NocoBase.
- [Reactivity Mechanism: Observable](/flow-engine/observable.md): In NocoBase 2.0, Observable reactive objects are ubiquitous. It is the core of the underlying data flow and UI responsiveness, and is widely used in components like FlowContext, FlowModel, and FlowStep.
- [Quick Start: Building an Orchestratable Button Component](/flow-engine/quickstart.md): In React, we usually render a button component like this: Although the code above is simple, it's a static component and cannot meet the needs of a no-code platform for configurability and orchestration capabilities. In NocoBase's FlowEngine, we can quickly build components that support configuration and are event-driven using FlowModel + FlowDefinition, achieving more powerful no-code capabilities.
- [Register FlowModel](/flow-engine/register-flow-model.md)
- [RunJS Plugin Extension Points (ctx Documentation / Snippets / Scene Mapping)](/flow-engine/runjs-extension-points.md): When a plugin adds or extends RunJS capabilities, it is recommended to register the "context mapping / ctx documentation / example code" through official extension points. This ensures: CodeEditor can provide auto-completion for ctx.xxx.yyy.AI coding can obtain structured ctx API references and examples. This chapter introduces two extension points: registerRunJSContextContribution(...)registerRunJSSnippet(...)
- [UI Schema](/flow-engine/ui-schema.md): NocoBase UI Schema syntax reference: a Formily Schema-based component description protocol, covering type, x-component, x-decorator, x-pattern, and other property descriptions.
- [uiSchema Configuration Reference](/flow-engine/uischema.md): FlowEngine uiSchema complete reference: configuration panel UI definition based on Formily JSON Schema, supporting Input, Select, Switch, and other components.
- [What is FlowEngine?](/flow-engine/what-is-flow-engine.md): FlowEngine is a new front-end no-code/low-code development engine introduced in NocoBase 2.0. It combines Models and Flows to simplify front-end logic and improve reusability and maintainability. At the same time, it leverages the configurability of Flows to provide no-code configuration and orchestration capabilities for front-end components and business logic.
- [Cluster Deployment](/get-started/deployment/cluster.md): NocoBase supports deploying applications in cluster mode to improve application performance and availability. Cluster deployment allows you to run different instances of the application on multiple servers, or run multiple processes in multi-core mode on a single server. For details, please refer to the Cluster Mode documentation.
- [docker compose](/get-started/deployment/common-commands/docker-compose.md)
- [pm2](/get-started/deployment/common-commands/pm2.md)
- [How to Deploy Faster](/get-started/deployment/how-to-deploy-nocobase-faster.md): Optimize NocoBase deployment with HTTP/2, CDN, server location, compression, and caching to significantly reduce load times.
- [Intranet Deployment](/get-started/deployment/internal.md)
- [Install and Upgrade NocoBase in Intranet (create-nocobase-app)](/get-started/deployment/intranet/create-nocobase-app.md): NocoBase Getting Started: Install and Upgrade NocoBase in Intranet (create-nocobase-app)
- [Install and Upgrade NocoBase in Intranet (Docker)](/get-started/deployment/intranet/docker.md)
- [Production Environment Deployment](/get-started/deployment/production.md): When deploying NocoBase in a production environment, installing dependencies can be cumbersome due to differences in build methods across various systems and environments. For a complete functional experience, we recommend deploying with Docker. If your system environment cannot use Docker, you can also deploy using create-nocobase-app.
- [Caddy](/get-started/deployment/static-resource-proxy/caddy.md)
- [CDN](/get-started/deployment/static-resource-proxy/cdn.md)
- [Nginx](/get-started/deployment/static-resource-proxy/nginx.md)
- [How NocoBase Works](/get-started/how-nocobase-works.md)
- [Install and Upgrade Plugins](/get-started/install-upgrade-plugins.md): NocoBase Quick Start: Install and Upgrade Plugins
- [create-nocobase-app Installation](/get-started/installation/create-nocobase-app.md): NocoBase Getting Started: create-nocobase-app Installation
- [Docker Installation (External Caddy)](/get-started/installation/docker-caddy.md): Install NocoBase with Docker and use an external Caddy container as the entry point.
- [Docker Installation (External Nginx)](/get-started/installation/docker-nginx.md): Install NocoBase with Docker and use an external Nginx container as the entry point.
- [Docker Installation](/get-started/installation/docker.md)
- [Environment Variables](/get-started/installation/env.md)
- [Install from Git Source](/get-started/installation/git.md): NocoBase Getting Started: Install from Git Source
- [Installation and Version Comparison](/get-started/quickstart.md): You can install NocoBase in different ways.
- [System Requirements](/get-started/system-requirements.md): The system requirements described in this document apply only to the NocoBase application service itself, and cover the compute and memory resources required by the application processes. They do not cover dependent third-party services, including but not limited to: API gateways / reverse proxiesDatabase services (for example, MySQL or PostgreSQL)Cache services (for example, Redis)Middleware such as message queues or object storage Except for functionality validation or purely experimental scenarios, we strongly recommend deploying the above third-party services separately on dedicated servers or containers, or by using the corresponding cloud services. The system configuration and capacity planning of those services must be evaluated and tuned separately based on the actual data size, workload, and concurrency level.
- [Translation](/get-started/translations.md): The default language of NocoBase is English. Currently, the main application supports English, Italian, Dutch, Simplified Chinese, and Japanese. We sincerely invite you to contribute translations for additional languages, enabling users around the world to enjoy an even more convenient NocoBase experience.
- [Upgrading a create-nocobase-app Installation](/get-started/upgrading/create-nocobase-app.md)
- [Upgrading a Docker Installation](/get-started/upgrading/docker.md)
- [Upgrading a Git Source Installation](/get-started/upgrading/git.md)
- [Iframe Block](/integration/block-iframe/index.md)
- [Embed NocoBase](/integration/embed/index.md)
- [How to Enable the Federated Engine in MySQL](/integration/fdw/enable-federated.md): The MySQL database does not enable the federated module by default. You need to modify the my.cnf configuration. If you are using the Docker version, you can handle the extension situation through volumes: Create a new ./storage/mysql-conf/federated.cnf file Restart MySQL Check if federated is activated
- [Connect Foreign Data Tables (FDW)](/integration/fdw/index.md)
- [Integration](/integration/index.md)
- [Single Sign-On (SSO) Integration](/integration/sso/index.md): NocoBase provides comprehensive Single Sign-On (SSO) solutions, supporting multiple mainstream authentication protocols for seamless integration with existing enterprise identity systems.
- [Workflow HTTP Request Integration](/integration/workflow-http-request/index.md): The HTTP Request node enables NocoBase workflows to proactively send requests to any HTTP service, facilitating data exchange and business integration with external systems.
- [Workflow Webhook Integration](/integration/workflow-webhook/index.md): Through Webhook triggers, NocoBase can receive HTTP calls from third-party systems and automatically trigger workflows, enabling seamless integration with external systems.
- [Field Assignment](/interface-builder/actions/action-settings/assign-values.md)
- [Bind Workflow](/interface-builder/actions/action-settings/bind-workflow.md)
- [Confirmation](/interface-builder/actions/action-settings/double-check.md)
- [Edit button](/interface-builder/actions/action-settings/edit-button.md)
- [Edit Popup](/interface-builder/actions/action-settings/edit-popup.md)
- [Action Linkage Rules](/interface-builder/actions/action-settings/linkage-rule.md)
- [Action](/interface-builder/actions/index.md): In the UI, an action is a button used to trigger a set of instructions. It can be placed directly on a page, in a dialog box, or in a drawer, and can also be used in combination with blocks. Currently, dynamically configurable actions are mainly used in combination with blocks.
- [Action Permissions](/interface-builder/actions/permission.md)
- [Add Child](/interface-builder/actions/types/add-child.md)
- [Add](/interface-builder/actions/types/add-new.md)
- [AI-Employee](/interface-builder/actions/types/ai-employee.md)
- [Bulk Edit](/interface-builder/actions/types/bulk-edit.md)
- [Bulk Update](/interface-builder/actions/types/bulk-update.md)
- [Custom request](/interface-builder/actions/types/custom-request.md)
- [Delete](/interface-builder/actions/types/delete.md)
- [Duplicate](/interface-builder/actions/types/duplicate.md)
- [Edit](/interface-builder/actions/types/edit.md)
- [Export Attachments](/interface-builder/actions/types/export-attachments.md)
- [Export Pro](/interface-builder/actions/types/export-pro.md)
- [Export](/interface-builder/actions/types/export.md)
- [Filter](/interface-builder/actions/types/filter.md)
- [Import Pro](/interface-builder/actions/types/import-pro.md)
- [Import](/interface-builder/actions/types/import.md)
- [JS Action](/interface-builder/actions/types/js-action.md)
- [JS Item](/interface-builder/actions/types/js-item.md)
- [Link](/interface-builder/actions/types/link.md)
- [Open Modal](/interface-builder/actions/types/pop-up.md)
- [Refresh](/interface-builder/actions/types/refresh.md)
- [Submit](/interface-builder/actions/types/submit.md)
- [Trigger Workflow](/interface-builder/actions/types/trigger-workflow.md)
- [Update record](/interface-builder/actions/types/update-record.md)
- [View](/interface-builder/actions/types/view.md)
- [Delete Block](/interface-builder/blocks/block-settings/block-delete.md)
- [Block Height](/interface-builder/blocks/block-settings/block-height.md)
- [Layout](/interface-builder/blocks/block-settings/block-layout.md)
- [Block Linkage Rules](/interface-builder/blocks/block-settings/block-linkage-rule.md)
- [Block title](/interface-builder/blocks/block-settings/block-title.md)
- [Data Loading Mode](/interface-builder/blocks/block-settings/data-loading-method.md)
- [Set Data Scope](/interface-builder/blocks/block-settings/data-scope.md)
- [Drag-and-Drop Sorting](/interface-builder/blocks/block-settings/drag-sort.md)
- [Field Linkage Rules](/interface-builder/blocks/block-settings/field-linkage-rule.md)
- [Configure Sort Rules](/interface-builder/blocks/block-settings/sorting-rule.md)
- [Calendar Block](/interface-builder/blocks/data-blocks/calendar.md): The Calendar block displays events and date-based data in a calendar view. It is suitable for scenarios such as meeting scheduling and activity planning, and supports configuration of title fields, start and end dates, lunar calendar display, and data scope.
- [Chart](/interface-builder/blocks/data-blocks/chart.md)
- [Comment Block](/interface-builder/blocks/data-blocks/comment.md): Comment block: view and create comments in record details, pop-ups, and similar scenarios, with field mapping, pagination, data scope, default sorting, and auto jump to last page.
- [Details Block](/interface-builder/blocks/data-blocks/details.md)
- [Form Block](/interface-builder/blocks/data-blocks/form.md)
- [Gantt Block](/interface-builder/blocks/data-blocks/gantt.md): The Gantt block displays record start and end dates and progress on a timeline. It is suitable for project planning, task scheduling, and milestone tracking, and supports title fields, date fields, progress fields, color fields, time scale, the left table, and event popup settings.
- [Grid Card](/interface-builder/blocks/data-blocks/grid-card.md)
- [Kanban Block](/interface-builder/blocks/data-blocks/kanban.md): Kanban block: Displays records in grouped columns, supporting style switching, quick create, popup configuration, drag-and-drop sorting, and click-to-open cards.
- [List Block](/interface-builder/blocks/data-blocks/list.md)
- [Map Block](/interface-builder/blocks/data-blocks/map.md): The Map block displays collection records on AMap or Google Maps, and supports point, line, polygon, and circle fields.
- [Table Block](/interface-builder/blocks/data-blocks/table.md)
- [Filter Form](/interface-builder/blocks/filter-blocks/form.md)
- [Tree Filter Block](/interface-builder/blocks/filter-blocks/tree.md): The Tree Filter block displays filter conditions in a hierarchical structure and applies layered filtering to data blocks, making it ideal for scenarios involving tree-structured data.
- [Block](/interface-builder/blocks/index.md): Blocks are carriers for data and content. They can be placed in a Page, Modal, or Drawer, and multiple blocks can be freely dragged and arranged.
- [Block: Workbench](/interface-builder/blocks/other-blocks/action-panel.md)
- [Iframe Block](/interface-builder/blocks/other-blocks/iframe.md)
- [JS Block](/interface-builder/blocks/other-blocks/js-block.md)
- [Markdown Block](/interface-builder/blocks/other-blocks/markdown.md)
- [Event flow](/interface-builder/event-flow.md)
- [Association Field Components](/interface-builder/fields/association-field.md)
- [Set Data Scope](/interface-builder/fields/field-settings/data-scope.md)
- [Default Value](/interface-builder/fields/field-settings/default-value.md)
- [Edit Description](/interface-builder/fields/field-settings/edit-description.md)
- [Edit Field Title](/interface-builder/fields/field-settings/edit-title.md)
- [Edit Tooltip](/interface-builder/fields/field-settings/edit-tooltip.md)
- [Field Component](/interface-builder/fields/field-settings/field-component.md)
- [Number Formatting](/interface-builder/fields/field-settings/number-format.md)
- [Display Mode](/interface-builder/fields/field-settings/pattern.md)
- [Required](/interface-builder/fields/field-settings/required.md)
- [Scan Code Input](/interface-builder/fields/field-settings/scan-input.md): Field settings: enable scan code input for text form fields, supporting writing field values through QR codes or barcodes.
- [Show Label](/interface-builder/fields/field-settings/show-label.md)
- [Title Field](/interface-builder/fields/field-settings/title-field.md)
- [Set Validation Rules](/interface-builder/fields/field-settings/validation-rules.md)
- [Details Fields](/interface-builder/fields/generic/detail-form-item.md)
- [Filter Form Fields](/interface-builder/fields/generic/filter-form-item.md)
- [Form Fields](/interface-builder/fields/generic/form-item.md)
- [Table Fields](/interface-builder/fields/generic/table-column.md)
- [Field](/interface-builder/fields/index.md): In the UI, a field is a field component, which is a carrier for unit data. Different types of data are presented with different field components. Fields can only be attached to blocks and cannot be used independently.
- [Cascading Selection](/interface-builder/fields/specific/cascade-select.md)
- [Date & Time](/interface-builder/fields/specific/date-picker.md)
- [File Manager](/interface-builder/fields/specific/file-manager.md)
- [JS Column](/interface-builder/fields/specific/js-column.md)
- [JS Field](/interface-builder/fields/specific/js-field.md)
- [JS Item](/interface-builder/fields/specific/js-item.md)
- [Data Selector](/interface-builder/fields/specific/picker.md)
- [Dropdown](/interface-builder/fields/specific/select.md)
- [Sub-details](/interface-builder/fields/specific/sub-detail.md)
- [Sub-form](/interface-builder/fields/specific/sub-form.md)
- [Sub-table (Popup Edit)](/interface-builder/fields/specific/sub-table-popup.md)
- [Sub-table (Inline Edit)](/interface-builder/fields/specific/sub-table.md)
- [Title](/interface-builder/fields/specific/title.md)
- [Form Drafts](/interface-builder/form-drafts.md): When form drafts are enabled, the content being filled in is automatically saved locally. Even if the form is accidentally closed or the page is refreshed, the filled data will not be lost. When a draft exists, a notification will be displayed at the top of the form. The draft will be automatically deleted after successful submission; if it is no longer needed, it can also be manually deleted at any time.
- [UI Builder](/interface-builder/index.md)
- [Linkage Rules](/interface-builder/linkage-rule.md)
- [Online Write & Run JS](/interface-builder/runjs.md): In NocoBase, RunJS provides a lightweight extension method suitable for scenarios of quick experimentation and temporary logic processing. Without creating plugins or modifying source code, you can personalize interfaces or interactions through JavaScript. Through it, you can directly input JS code in the UI builder to achieve: Custom rendering content (fields, blocks, columns, items, etc.)Custom interaction logic (button clicks, event linkage)Dynamic behavior combined with contextual data
- [Desktop Layout](/interface-builder/ui-layout/desktop.md): Learn about the navigation structure, page building, route management, and narrow-screen responsive behavior of the NocoBase desktop layout.
- [UI Layout](/interface-builder/ui-layout/index.md): An overview of NocoBase UI layouts, including desktop and mobile layout features, use cases, and how their configurations relate.
- [Mobile Layout](/interface-builder/ui-layout/mobile.md): Learn about NocoBase mobile navigation, page building, desktop preview, subpage interactions, routes, and permissions.
- [UI Templates](/interface-builder/ui-templates.md)
- [Variables](/interface-builder/variables.md)
- [Logging](/log-and-monitor/logger/index.md)
- [Server Logs, Audit Logs, and Record History](/log-and-monitor/logger/overview.md)
- [Telemetry Exporter: HTTP](/log-and-monitor/telemetry/exporter-http.md)
- [Telemetry Exporter: Prometheus](/log-and-monitor/telemetry/exporter-prometheus.md)
- [Telemetry](/log-and-monitor/telemetry/index.md)
- [Multi-portal, Multi-app, and Multi-space](/multi-app/multi-app-vs-multi-portal-vs-multi-space.md): NocoBase provides three capabilities: Multi-portal, Multi-app, and Multi-space. They solve problems at different levels. They can be used independently or together.
- [Applications block and app switcher](/multi-app/multi-app/app-block-and-switcher.md): Applications block and app switcher in multi-app: show sub-app entries on the frontend, configure app icons, visibility, and the app switcher in the upper-left corner.
- [App SSO](/multi-app/multi-app/app-sso.md): App SSO in multi-app: automatically sign in to sub-apps from the main app or app switcher, with username mapping and automatic user signup.
- [Multi-app Management](/multi-app/multi-app/index.md)
- [Shared-Memory Mode](/multi-app/multi-app/local.md)
- [Multi-Environment Mode](/multi-app/multi-app/remote.md)
- [Calling sub-app APIs](/multi-app/multi-app/sub-app-api.md): How to call sub-app APIs in multi-app: access sub-app APIs through the entry app and specify the target sub-app with a path prefix, request header, or query parameter.
- [Multi-portal](/multi-app/multi-portal/index.md): Learn the concept, use cases, configuration, and relationship between Multi-portal, Multi-app, and Multi-space in NocoBase.
- [Multi-space](/multi-app/multi-space/index.md)
- [nb app design intent](/nocobase-cli/cli-design/nb-app-design-intent.md): nb app related commands are essentially adaptations based on different process management methods, and then unified into a set of stable application management entrances. The purpose of this is to try to converge the mental usage during daily operation and maintenance to a set of commands. Currently, the application process management methods supported by CLI mainly include: Docker -PM2 If we need to support more methods in the future, such as Supervisor, we will continue to make adaptations at this layer. The high-frequency command entrance exposed to the outside world remains the same:
- [The design intent of `nb proxy`](/nocobase-cli/cli-design/nb-proxy-design-intent.md): The purpose of nb proxy is to provide users with a set of simpler and more stable commands from the originally complex entry layer process. If we only talk about the core process, it is enough to remember these 3 commands: In most scenarios, what you use nb proxy to do is essentially these three steps: First use use to select the running mode of the current providerThen use generate to generate entry configuration according to env and domain nameFinally use reload to make the configuration take effect If you are using Caddy, just replace nginx in the command with caddy. use local and use docker can also be written directly like this: If Nginx or Caddy has been installed locally, use use localThere is no local installation. If you are going to let CLI use Docker to manage the agent, use use docker This is also the experience that this layer of nb proxy most wants to provide: you don’t need to get into the configuration details of Nginx or Caddy first, just connect the entrance according to the fixed process.
- [NocoBase CLI Overview](/nocobase-cli/index.md): If this is your first time using this CLI, you don’t need to memorize all the commands at the beginning. Use nb init --ui to install an application first, and then continue looking at the rest according to the scenario.
- [](/nocobase-cli/installation/airgap.md)
- [Install using CLI](/nocobase-cli/installation/cli.md): After NocoBase 2.1.0, the official CLI-based installation and management method is provided. You can use it to complete installation, connection, upgrade and daily maintenance, and you can also prepare a connectable and operable environment for AI Agent.
- [Install via Docker Compose](/nocobase-cli/installation/docker-compose.md): If you want to run NocoBase directly on the server, docker compose is still the most direct way. One serving of docker-compose.yml is sufficient for most scenarios. However, in a production environment, it is recommended to fix the specific version number and not use latest directly for a long time. This will make the upgrade more controllable.
- [Application configuration and `.env`](/nocobase-cli/installation/env.md): This page only applies to applications created or hosted via the NocoBase CLI. If you have just finished reading Install using CLI and have seen the "Installation Directory" section, then the most common problems you will encounter are usually the following: Where is the .env file placed?Which configurations are still suitable to be written into .envWhich configurations are now more suitable to be handed over to nb env update Let’s talk about the conclusion first: For CLI installed applications, .env is placed in /.env by defaultThis file is optional, not every env must be created manuallyBasic configurations such as APP_KEY, TZ, APP_PORT, APP_PUBLIC_PATH, and DB_* are managed by nb env update by default..env is mainly used to supplement runtime variables that the CLI has not directly taken over, such as storage, cache, logs, observations and some plug-in extension variables.
- [How to connect the old installation method to AI and migrate to CLI](/nocobase-cli/installation/migration.md): If you are still using Docker, create-nocobase-app or Git source code to install and maintain NocoBase according to the old documentation, you can continue to use it in this way. There is no need to reinstall the application immediately to access AI. This page mainly helps you determine the route first: Continue to use the original installation and upgrade methodsLet existing applications access AI agent firstMigrate to new CLI-based approach By default, it is recommended to first check which category you belong to, and then enter the corresponding document. This is more stable and less likely to misoperate the production environment.
- [Backup and restore](/nocobase-cli/operations/backup-restore.md): If you have saved a NocoBase application as a CLI env, daily backup and recovery are basically completed in the nb backup group of commands. nb backup create is used to create a backup in the target env and download it to the local. nb backup restore is used to restore the local backup file to the target env. Most of the time, it's enough to remember the default advice: backup before upgrading, migrating, or batch changing data; perform recovery only when you clearly know that you want to overwrite the current data.
- [](/nocobase-cli/operations/manage-app.md)
- [](/nocobase-cli/operations/multi-environment.md)
- [Application starts automatically](/nocobase-cli/production/autostart.md): Use nb app autostart to configure a unified application auto-start entry for CLI-hosted NocoBase env.
- [Production environment deployment overview](/nocobase-cli/production/index.md): Overall instructions for production environment deployment: After confirming that the application is running normally, add the application auto-start and reverse proxy entries.
- [](/nocobase-cli/production/reverse-proxy/caddy.md)
- [Production environment reverse proxy](/nocobase-cli/production/reverse-proxy/index.md): Generate and manage reverse proxy configuration for CLI hosted NocoBase env based on nb proxy nginx and nb proxy caddy.
- [](/nocobase-cli/production/reverse-proxy/nginx.md)
- [Release management](/nocobase-cli/release-management.md)
- [Notification Manager](/notification-manager/index.md)
- [Notification: Email](/notification-manager/notification-email/index.md)
- [Notification: In-App Message](/notification-manager/notification-in-app-message/index.md)
- [Notification: WeCom](/notification-manager/wecom/index.md)
- [Backups Manager](/ops-management/backup-manager/index.md)
- [Built-in tables for applications and major plugins](/ops-management/migration-manager/built-in-tables.md): Reference for built-in tables of applications and major plugins, covering Migration Manager default strategies, version-control scope, and backup/restore handling.
- [Migration Manager](/ops-management/migration-manager/index.md): Operations migration: migrate application configuration from one environment to another, with schema-only, overwrite, and skip rules. Depends on Backup Manager.
- [Release Management](/ops-management/release-management/index.md): Operations release best practices: use version control to record development checkpoints, multi-app architecture to split business modules, Backup Manager for disaster recovery, and Migration Manager to publish across development, staging, and production environments.
- [Variables and Secrets](/ops-management/variables-and-secrets/index.md)
- [Version control](/ops-management/version-control/index.md): Version control plugin guide: automatically save versions during AI Builder sessions, create and restore versions manually, configure retention, set shortcuts, and include user collections in saved versions.
- [AI Plugin Development](/plugin-development/ai-development.md): NocoBase supports developing custom plugins with AI assistance. For detailed information, see the AI Plugin Development Complete Guide.
- [Build and Package](/plugin-development/build.md): NocoBase plugin build and packaging: yarn build, yarn nocobase tar, build.config.ts custom configuration, Rsbuild client bundling, tsup server bundling.
- [ACL](/plugin-development/client/acl.md)
- [Plugin Development Cheatsheet](/plugin-development/client/appendix/cheatsheet.md): NocoBase plugin development cheatsheet: what to do -> which file -> which API to call. Quickly locate where your code should go.
- [FAQ & Troubleshooting Guide](/plugin-development/client/appendix/faq.md): Common issues in NocoBase client plugin development: plugin not showing, block not appearing, translation not working, route not found, hot reload not working, build errors, startup failure after deployment, and more.
- [Component vs FlowModel](/plugin-development/client/component-vs-flow-model.md): NocoBase development selection guide: when to use plain React components, when to use FlowModel, capability differences, lifecycle comparison, and scenario selection.
- [i18n Internationalization](/plugin-development/client/component/i18n.md): NocoBase plugin internationalization: locale directory structure, translation file format, and usage of this.t / useT / tExpr in different contexts.
- [Component Development](/plugin-development/client/component/index.md): NocoBase client component development: build plugin page components with React/Antd, observable state management, and access NocoBase context via useFlowContext().
- [Styles & Themes](/plugin-development/client/component/styles-themes.md): NocoBase client styling: createStyles, createStylish, createGlobalStyle, antd theme token, and theme editor.
- [Context](/plugin-development/client/context.md)
- [Common Capabilities](/plugin-development/client/ctx/common-capabilities.md): NocoBase client context common capabilities: ctx.api requests, ctx.t internationalization, ctx.logger logging, ctx.router routing, ctx.viewer view management, ctx.acl access control.
- [Context](/plugin-development/client/ctx/index.md): NocoBase client context mechanism: this.context in Plugins and useFlowContext() in components refer to the same object, but with different access entry points.
- [What is Context](/plugin-development/client/ctx/what-is-context.md): NocoBase client context mechanism: the relationship and shorthand aliases between plugin context (this.xxx) and component context (useFlowContext()).
- [DataSourceManager](/plugin-development/client/data-source-manager.md)
- [Building a Custom Action Button](/plugin-development/client/examples/custom-action.md): NocoBase plugin tutorial: Build custom action buttons using ActionModel + ActionSceneEnum, supporting both collection-level and record-level actions.
- [Building a Custom Display Block](/plugin-development/client/examples/custom-block.md): NocoBase plugin tutorial: Build a configurable HTML display block using BlockModel + registerFlow + uiSchema.
- [Building a Custom Field Component](/plugin-development/client/examples/custom-field.md): NocoBase plugin tutorial: Build a custom field display component using ClickableFieldModel and bind it to a field interface.
- [Building a Full-Stack Data Management Plugin](/plugin-development/client/examples/fullstack-plugin.md): NocoBase plugin tutorial: Server-side data table definition + Client-side TableBlockModel for data display + custom fields and actions, a complete full-stack plugin.
- [Plugin Tutorial Examples](/plugin-development/client/examples/index.md): NocoBase client plugin complete tutorial examples: settings page, custom block, full-stack integration, custom field -- complete plugins from start to finish.
- [Building a Plugin Settings Page](/plugin-development/client/examples/settings-page.md): NocoBase plugin tutorial: Build a plugin settings page using pluginSettingsManager + Component + ctx.api to manage third-party API Keys.
- [Action Extension](/plugin-development/client/flow-engine/action.md): NocoBase action extension development: ActionModel base class, ActionSceneEnum action scenes, custom action buttons.
- [Block Extension](/plugin-development/client/flow-engine/block.md): NocoBase block extension development: BlockModel, DataBlockModel, CollectionBlockModel, TableBlockModel base classes and registration.
- [Field Extension](/plugin-development/client/flow-engine/field.md): NocoBase field extension development: FieldModel, ClickableFieldModel base classes, field rendering, binding field interfaces.
- [FlowEngine Overview](/plugin-development/client/flow-engine/index.md): NocoBase FlowEngine plugin development guide: FlowModel basics, renderComponent, registerFlow, uiSchema configuration, base class selection.
- [I18n](/plugin-development/client/i18n.md): NocoBase plugins support multi-language internationalization (i18n) for both frontend and backend. Through a unified mechanism, you can easily implement multi-language content in plugins.
- [Client Plugin Development Overview](/plugin-development/client/index.md): NocoBase client plugin development overview: learning path Plugin -> Router -> Component -> Context -> FlowEngine, with a quick reference table to help locate sections.
- [Logger](/plugin-development/client/logger.md): NocoBase provides a high-performance logging system based on pino. Anywhere you have access to context, you can get a logger instance through ctx.logger to record key logs during plugin or system runtime.
- [Plugin - Client Plugin](/plugin-development/client/plugin.md): NocoBase client plugin entry: inherit from the Plugin base class, afterAdd/beforeLoad/load lifecycle, register routes and FlowModels.
- [Request](/plugin-development/client/request.md): NocoBase provides an APIClient based on Axios that can be used to make HTTP requests from anywhere you can get a Context. Common locations where you can get Context include: app.contextengine.contextplugin.contextmodel.context
- [Resource](/plugin-development/client/resource.md)
- [Router](/plugin-development/client/router.md): NocoBase client routing: this.router.add page route registration, pluginSettingsManager plugin settings page registration (addMenuItem + addPageTabItem).
- [Test](/plugin-development/client/test.md)
- [Internationalization](/plugin-development/common/i18n.md)
- [Plugin Dependency Management](/plugin-development/dependency-management.md): NocoBase plugin dependencies: package.json, peerDependencies, @nocobase package versions, inter-plugin dependency declarations.
- [NocoBase Plugin Development Overview](/plugin-development/index.md): NocoBase microkernel architecture, plugin lifecycle, directory structure, plug-and-play, full-stack integration, client/server source code, package.json metadata.
- [Supported Language List](/plugin-development/languages.md): Language codes supported by NocoBase plugin internationalization, used for locales configuration.
- [Lifecycle](/plugin-development/lifecycle.md): This section organizes the lifecycle hooks for plugins on both server-side and client-side, helping developers correctly register and release resources. You can compare with the FlowModel lifecycle to highlight common concepts.
- [Plugin Upgrade Guide](/plugin-development/plugin-upgrade-guide.md)
- [Plugin Project Structure](/plugin-development/project-structure.md): NocoBase plugin project structure: Yarn Workspace, packages/plugins, storage, client/server directories, lerna.json configuration.
- [ACL (Server)](/plugin-development/server/acl.md): NocoBase server ACL: registerSnippet, allow/deny, permission snippets, role permissions, middleware, conditional checks.
- [Application](/plugin-development/server/app.md): In plugin development, app is a very commonly used object. Common objects include:
- [Cache](/plugin-development/server/cache.md): NocoBase server-side cache: app.cacheManager, get/set/del, cache instances, accessing cache in plugins.
- [](/plugin-development/server/collection-options.md)
- [Collections](/plugin-development/server/collections.md): NocoBase plugin Collection definition: defineCollection, extendCollection, fields, src/server/collections directory conventions.
- [Command](/plugin-development/server/command.md): NocoBase server-side custom commands: app.command, commander, CLI extensions, yarn nocobase subcommands.
- [Context](/plugin-development/server/context.md): NocoBase server ctx: Koa Context extensions, ctx.action, ctx.db, ctx.cache, usage in Middleware and Actions.
- [CronJobManager](/plugin-development/server/cron-job-manager.md): NocoBase scheduled tasks: app.cronJobManager, cron expressions, registering and scheduling tasks.
- [DataSourceManager](/plugin-development/server/data-source-manager.md): NocoBase server-side data source management: app.dataSourceManager, multiple data sources, addDataSource, getDataSource.
- [Database](/plugin-development/server/database.md): NocoBase Database: Collection, Model, Repository, FieldType, FilterOperator, dataSource.db, app.db.
- [Event](/plugin-development/server/event.md): NocoBase server events: app.on, app.emit, event listening and triggering, inter-plugin event communication.
- [i18n (Server)](/plugin-development/server/i18n.md): NocoBase server internationalization: app.i18n, t(), multi-language translation, plugin locales configuration.
- [Server-side Plugin Development Overview](/plugin-development/server/index.md): NocoBase server-side plugin development: Plugin class, app, db, resources, ACL, database, migration, middleware, events, CLI.
- [Logger](/plugin-development/server/logger.md): NocoBase server-side logging: app.logger, log levels, creating sub-loggers, log output configuration.
- [Middleware](/plugin-development/server/middleware.md): NocoBase server-side middleware: app.use, Koa middleware, request interception, resource middleware.
- [Migration](/plugin-development/server/migration.md): NocoBase plugin database migration: Migration class, up/down, version upgrades, schema changes.
- [Server Plugin](/plugin-development/server/plugin.md): NocoBase server-side plugin: extending the Plugin class, afterAdd, beforeLoad, load, install lifecycle, registering resources and events.
- [ResourceManager](/plugin-development/server/resource-manager.md): NocoBase server resource management: app.resourceManager, registerActions, resource.use, Action registration.
- [Telemetry](/plugin-development/server/telemetry.md): NocoBase server telemetry: metrics, traces, observability, Telemetry API.
- [Server Plugin Testing](/plugin-development/server/test.md): NocoBase server plugin unit testing, integration testing, Mock, testing tools.
- [Write Your First NocoBase Plugin](/plugin-development/write-your-first-plugin.md): Create a block plugin from scratch: yarn pm create, plugin skeleton, client/server directory, register blocks, development and debugging workflow.
- [Record History](/record-history/index.md)
- [Route Manager](/routes/index.md)
- [ctx.ai](/runjs/context/ai.md): Use ctx.ai in RunJS to trigger AI employee tasks in the global conversation or a specified AI Chat Box, either with inline task content or with tasks configured on an AI employee action.
- [ctx.blockModel](/runjs/context/block-model.md): The parent block model (BlockModel instance) where the current JS Field / JS Block is located. In scenarios such as JSField, JSItem, and JSColumn, ctx.blockModel points to the form block or table block carrying the current JS logic. In a standalone JSBlock, it may be null or the same as ctx.model.
- [ctx.collectionField](/runjs/context/collection-field.md): The CollectionField instance associated with the current RunJS execution context, used to access field metadata, types, validation rules, and association information. It only exists when the field is bound to a collection definition; custom/virtual fields may be null.
- [ctx.collection](/runjs/context/collection.md): The Collection instance associated with the current RunJS execution context, used to access collection metadata, field definitions, primary keys, and other configurations. It usually originates from ctx.blockModel.collection or ctx.collectionField?.collection.
- [ctx.dataSourceManager](/runjs/context/data-source-manager.md): The Data Source Manager (DataSourceManager instance) is used to manage and access multiple data sources (e.g., the main database main, logging database logging, etc.). It is used when multiple data sources exist or when cross-data source metadata access is required.
- [ctx.dataSource](/runjs/context/data-source.md): The DataSource instance bound to the current RunJS execution context, used to access collections, field metadata, and manage collection configurations within the current data source. It usually corresponds to the data source selected for the current page or block (e.g., the main database main).
- [ctx.element](/runjs/context/element.md): An ElementProxy instance pointing to the sandbox DOM container, serving as the default rendering target for ctx.render(). It is available in scenarios where a rendering container exists, such as JSBlock, JSField, JSItem, and JSColumn.
- [ctx.exitAll()](/runjs/context/exit-all.md): Terminates the current event flow and all subsequent event flows triggered in the same event dispatch. It is commonly used when all event flows under the current event need to be aborted immediately due to a global error or permission validation failure.
- [ctx.exit()](/runjs/context/exit.md): Terminates the execution of the current event flow; subsequent steps will not run. It is commonly used when business conditions are not met, the user cancels, or an irrecoverable error occurs.
- [ctx.filterManager](/runjs/context/filter-manager.md): The Filter Connection Manager is used to manage the filter associations between filter forms (FilterForm) and data blocks (tables, lists, charts, etc.). It is provided by BlockGridModel and is only available within its context (e.g., filter form blocks, data blocks).
- [ctx.form](/runjs/context/form.md): The Ant Design Form instance within the current block, used to read/write form fields, trigger validation, and submission. It is equivalent to ctx.blockModel?.form and can be used directly in form-related blocks (Form, Edit Form, Sub-form, etc.).
- [ctx.getModel()](/runjs/context/get-model.md): Retrieves a model instance (such as BlockModel, PageModel, ActionModel, etc.) from the current engine or view stack based on the model uid. This is used in RunJS to access other models across blocks, pages, or popups. If you only need the model or block where the current execution context is located, prioritize using ctx.model or ctx.blockModel instead of ctx.getModel.
- [ctx.getValue()](/runjs/context/get-value.md): In editable field scenarios such as JSField and JSItem, use this to get the latest value of the current field. Combined with ctx.setValue(v), it enables two-way binding with the form.
- [ctx.getVar()](/runjs/context/get-var.md): Asynchronously reads variable values from the current runtime context. Variable resolution is consistent with {{ctx.xxx}} in SQL and templates, typically originating from the current user, current record, view parameters, popup context, etc.
- [ctx.i18n](/runjs/context/i18n.md): The i18n instance of the current context, used for reading or switching languages. Use ctx.t() for translating text; do not use ctx.i18n.t.
- [ctx.importAsync()](/runjs/context/import-async.md): Dynamically load ESM modules or CSS via URL, applicable to various RunJS scenarios. Use ctx.importAsync() when third-party ESM libraries are required, and ctx.requireAsync() for UMD/AMD libraries. Passing a .css address will load and inject the styles into the page.
- [ctx.initResource()](/runjs/context/init-resource.md): Initializes the resource for the current context. If ctx.resource does not already exist, it creates one of the specified type and binds it to the context; if it already exists, it is used directly. Afterward, it can be accessed via ctx.resource.
- [ctx.libs](/runjs/context/libs.md): ctx.libs is the unified namespace for built-in libraries in RunJS, containing commonly used libraries such as React, Ant Design, dayjs, and lodash. No import or asynchronous loading is required; they can be used directly via ctx.libs.xxx.
- [ctx.location](/runjs/context/location.md): Current route location information, equivalent to the React Router location object. It is typically used in conjunction with ctx.router and ctx.route to read the current path, query string, hash, and state passed through the route.
- [ctx.logger](/runjs/context/logger.md): A logging wrapper based on pino, providing high-performance structured JSON logs. It is recommended to use ctx.logger instead of console for easier log collection and analysis.
- [ctx.makeResource()](/runjs/context/make-resource.md): Creates and returns a new resource instance without writing to or modifying ctx.resource. It is suitable for scenarios requiring multiple independent resources or temporary usage.
- [ctx.message](/runjs/context/message.md): Ant Design global message API, used to display temporary light prompts at the top center of the page. Messages close automatically after a certain period or can be closed manually by the user.
- [ctx.modal](/runjs/context/modal.md): A shortcut API based on Ant Design Modal, used to actively open modal boxes (information prompts, confirmation pop-ups, etc.) in RunJS. It is implemented by ctx.viewer / the view system.
- [ctx.model](/runjs/context/model.md): The FlowModel instance where the current RunJS execution context is located. It serves as the default entry point for scenarios like JSBlock, JSField, and JSAction. The specific type varies depending on the context: it could be a subclass such as BlockModel, ActionModel, or JSEditableFieldModel.
- [ctx.notification](/runjs/context/notification.md): Based on Ant Design Notification, this global notification API is used to display notification panels in the top-right corner of the page. Compared to ctx.message, notifications can include a title and description, making them suitable for content that needs to be displayed for a longer period or requires user attention.
- [ctx.off()](/runjs/context/off.md): Removes event listeners registered via ctx.on(eventName, handler). It is often used in conjunction with ctx.on to unsubscribe at the appropriate time, preventing memory leaks or duplicate triggers.
- [ctx.on()](/runjs/context/on.md): Subscribe to context events (such as field value changes, property changes, resource refreshes, etc.) in RunJS. Events are mapped to custom DOM events on ctx.element or internal event bus events of ctx.resource based on their type.
- [ctx.openView()](/runjs/context/open-view.md): Programmatically open a specified view (drawer, dialog, embedded page, etc.). Provided by FlowModelContext, it is used to open configured ChildPage or PopupAction views in scenarios such as JSBlock, table cells, and workflows.
- [ctx.render()](/runjs/context/render.md): Renders React elements, HTML strings, or DOM nodes into a specified container. If container is not provided, it defaults to rendering into ctx.element and automatically inherits the application's context, such as ConfigProvider and themes.
- [ctx.request()](/runjs/context/request.md): Initiate an authenticated HTTP request within RunJS. The request automatically carries the current application's baseURL, Token, locale, role, etc., and follows the application's request interception and error handling logic.
- [ctx.requireAsync()](/runjs/context/require-async.md): Asynchronously loads UMD/AMD or globally mounted scripts via URL, as well as CSS. It is suitable for RunJS scenarios that require UMD/AMD libraries such as ECharts, Chart.js, FullCalendar (UMD version), or jQuery plugins. If a library also provides an ESM version, prioritize using ctx.importAsync().
- [ctx.resource](/runjs/context/resource.md): The FlowResource instance in the current context, used to access and operate on data. In most blocks (Forms, Tables, Details, etc.) and pop-up scenarios, the runtime environment pre-binds ctx.resource. In scenarios like JSBlock where there is no resource by default, you must first call ctx.initResource() to initialize it before using it via ctx.resource.
- [ctx.route](/runjs/context/route.md): The current route matching information, corresponding to the route concept in React Router. It is used to retrieve the current matching route configuration, parameters, and more. It is typically used in conjunction with ctx.router and ctx.location.
- [ctx.router](/runjs/context/router.md): A router instance based on React Router, used for programmatic navigation within RunJS. It is typically used in conjunction with ctx.route and ctx.location.
- [ctx.setValue()](/runjs/context/set-value.md): Sets the value of the current field in editable field scenarios such as JSField and JSItem. Combined with ctx.getValue(), it enables two-way binding with the form.
- [ctx.sql](/runjs/context/sql.md): ctx.sql provides SQL execution and management, often used in RunJS (e.g. JSBlock, event flow) to access the database directly. It supports ad-hoc SQL, running saved SQL templates by ID, parameter binding, template variables ({{ctx.xxx}}), and result type control.
- [ctx.t()](/runjs/context/t.md): An i18n shortcut function used in RunJS to translate text based on the current context's language settings. It is suitable for internationalizing inline copy such as buttons, titles, and prompts.
- [ctx.view](/runjs/context/view.md): The currently active view controller (dialog, drawer, popover, embedded area, etc.), used to access view-level information and operations. Provided by FlowViewContext, it is only available within view content opened via ctx.viewer or ctx.openView.
- [](/runjs/document.md)
- [Importing Modules](/runjs/import-modules.md): In RunJS, you can use two types of modules: Built-in modules (accessed directly via ctx.libs without importing) and External modules (loaded on demand via ctx.importAsync() or ctx.requireAsync()).
- [RunJS Overview](/runjs/index.md): RunJS is the JavaScript execution environment used in NocoBase for scenarios such as JS Blocks, JS Fields, and JS Actions. Code runs in a restricted sandbox, providing safe access to the ctx (Context API) and includes the following capabilities: Top-level awaitImporting external modulesRendering within containersGlobal variables
- [JSX](/runjs/jsx.md): RunJS supports JSX syntax, allowing you to write code similar to React components. JSX is automatically compiled before execution.
- [FormBlockModel](/runjs/model/form-block-model.md)
- [In-container Rendering](/runjs/render.md): Use ctx.render() to render content into the current container (ctx.element). It supports the following three forms:
- [MultiRecordResource](/runjs/resource/multi-record-resource.md): A collection-oriented Resource: requests return an array and support pagination, filtering, sorting, and CRUD operations. It is suitable for "multiple records" scenarios such as tables and lists. Unlike APIResource, MultiRecordResource specifies the resource name via setResourceName(), automatically constructs URLs like users:list and users:create, and includes built-in capabilities for pagination, filtering, and row selection. Inheritance: FlowResource → APIResource → BaseRecordResource → MultiRecordResource. Creation: ctx.makeResource('MultiRecordResource') or ctx.initResource('MultiRecordResource'). Before use, you must call setResourceName('collectionName') (e.g., 'users'). In RunJS, ctx.api is injected by the runtime environment.
- [SingleRecordResource](/runjs/resource/single-record-resource.md): A Resource oriented towards a single record: data is a single object, supporting retrieval by primary key, creation/updating (save), and deletion. It is suitable for "single record" scenarios such as details and forms. Unlike MultiRecordResource, the getData() method of SingleRecordResource returns a single object. You specify the primary key via setFilterByTk(id), and save() will automatically call create or update based on the isNewRecord state. Inheritance: FlowResource → APIResource → BaseRecordResource → SingleRecordResource. Creation: ctx.makeResource('SingleRecordResource') or ctx.initResource('SingleRecordResource'). You must call setResourceName('collectionName') before use. When performing operations by primary key, call setFilterByTk(id). In RunJS, ctx.api is injected by the runtime environment.
- [SQLResource](/runjs/resource/sql-resource.md): A Resource for executing queries based on saved SQL configurations or dynamic SQL, with data sourced from interfaces such as flowSql:run / flowSql:runById. It is suitable for reports, statistics, custom SQL lists, and other scenarios. Unlike MultiRecordResource, SQLResource does not depend on collections; it executes SQL queries directly and supports pagination, parameter binding, template variables ({{ctx.xxx}}), and result type control. Inheritance: FlowResource → APIResource → BaseRecordResource → SQLResource. Creation: ctx.makeResource('SQLResource') or ctx.initResource('SQLResource'). To execute based on a saved configuration, use setFilterByTk(uid) (the UID of the SQL template). For debugging, use setDebug(true) + setSQL(sql) to execute SQL directly. In RunJS, ctx.api is injected by the runtime environment.
- [window](/runjs/window.md): The following properties can be accessed directly via window: setTimeout / clearTimeoutsetInterval / clearIntervalconsoleMathDateFormDataaddEventListeneropen (Only http:, https:, or about:blank are allowed)location (Read-only, supports secure navigation)navigator Only basic and secure DOM query and creation capabilities are supported: createElement(tagName)querySelector(selectors)querySelectorAll(selectors)
- [Audit Logger](/security/audit-logger/index.md)
- [NocoBase Security Guide](/security/guide.md): NocoBase focuses on the security of data and applications from functional design to system implementation. The platform has built-in multiple security functions such as user authentication, access control, and data encryption, and also allows flexible configuration of security policies according to actual needs. Whether it is protecting user data, managing access permissions, or isolating development and production environments, NocoBase provides practical tools and solutions. This guide aims to provide guidance for the secure use of NocoBase, helping users protect the security of data, applications, and the environment, ensuring the efficient use of system functions under the premise of user security.
- [IP Restrictions](/security/ip-restriction/index.md)
- [Password Policy](/security/password-policy/index.md)
- [User Lockout](/security/password-policy/lockout.md)
- [Token Security Policy](/security/token-policy/index.md)
- [createFormRegistry](/shared-components/create-form-registry.md): createFormRegistry: Create an internal registry for plugin extension items.
- [CollectionFilterPanel](/shared-components/filter/collection-filter-panel.md): CollectionFilterPanel: Embed a Collection filter panel in a page.
- [CollectionFilter](/shared-components/filter/index.md): CollectionFilter: Filter a Collection with multiple conditions.
- [CodeScanner](/shared-components/form/code-scanner.md): CodeScanner: Control the low-level full-screen scanner.
- [DialogFormLayout](/shared-components/form/dialog-form-layout.md): DialogFormLayout: Put a standard form in a dialog.
- [DrawerFormLayout](/shared-components/form/drawer-form-layout.md): DrawerFormLayout: Put a standard form in a drawer.
- [EnvVariableInput](/shared-components/form/env-variable-input.md): EnvVariableInput: Allow only `$env` is used to environment variables.
- [FileSizeInput](/shared-components/form/file-size-input.md): FileSizeInput: Enter a file size and store it as bytes.
- [JsonTextArea](/shared-components/form/json-text-area.md): JsonTextArea: Edit JSON / JSON5 configuration.
- [PasswordInput](/shared-components/form/password-input.md): PasswordInput: Enter a password with a strength indicator.
- [RemoteSelect](/shared-components/form/remote-select.md): RemoteSelect: Load Select options asynchronously from an API.
- [ScanInput](/shared-components/form/scan-input.md): ScanInput: Add scanning support to an input.
- [TypedVariableInput](/shared-components/form/typed-variable-input.md): TypedVariableInput: Allow a field to accept both constants and variables.
- [VariableInput](/shared-components/form/variable-input.md): VariableInput: Let a single-line field accept variables such as `{{ $env.X }}` is used to and `{{ $user.name }}`.
- [VariableJsonTextArea](/shared-components/form/variable-json-text-area.md): VariableJsonTextArea: Insert variables into JSON / JSON5 configuration.
- [VariableTextArea](/shared-components/form/variable-text-area.md): VariableTextArea: Let multi-line text accept variables.
- [Icon](/shared-components/icon.md): Icon: Use Ant Design icons or register custom icons.
- [Shared Components](/shared-components/index.md): NocoBase client v2 shared components: form containers, form fields, filters, tables, and icon components.
- [Table](/shared-components/table/index.md): Table: Display lists, select rows, and drag-sort rows on settings pages.
- [SortHandle](/shared-components/table/sort-handle.md): SortHandle: Customize the drag handle column of a Table.
- [SortableRow](/shared-components/table/sortable-row.md): SortableRow: Customize the draggable row of an antd Table.
- [All-in-One Business Suite - Installation](/solution/all-in-one/installation.md): Install the All-in-One Business Suite: one-click restore of the .nbdata backup file via Backup Manager. Requires NocoBase v2.1.0-alpha.40 or above and PostgreSQL 16; DB_UNDERSCORED must not be true.
- [Changelog](/solution/crm/changelog.md): This page documents the update history for the CRM solution. New entries are added at the top with each release.
- [CRM 2.0 System Detailed Design](/solution/crm/design.md)
- [NocoBase CRM 2.0 Solution](/solution/crm/index.md): A modular sales management system based on the NocoBase low-code platform, with AI employee-assisted decision-making.
- [Installation](/solution/crm/installation.md): The current version is deployed via backup and restore. In future versions, we may switch to incremental migration to make it easier to integrate the solution into your existing systems. The Backup Manager plugin is now open-source: The "Backup Manager" plugin needed to restore the solution is now open-source and available to all editions (including the Community Edition). We recommend restoring directly via this plugin. Before you begin, please ensure: You have a basic NocoBase running environment. For main system installation, please refer to the official installation documentation.NocoBase version v2.1.0-beta.2 or above.You have downloaded the CRM system backup file: nocobase_crm_v2_backup_260523.nbdata Important Notes: This solution is built on PostgreSQL 16. Please ensure your environment uses PostgreSQL 16.DB_UNDERSCORED must not be true: Please check your docker-compose.yml file and ensure the DB_UNDERSCORED environment variable is not set to true, otherwise it will conflict with the solution backup and cause restoration failure.
- [More Content](/solution/crm/more.md): The current CRM solution is for preview only. Future versions will be completely rebuilt based on NocoBase 2.0. More complete documentation will be provided then. Content coming soon...
- [Legacy CRM (v1)](/solution/crm/v1.md): Preview Only: This version is relatively complete in terms of features, but the overall data structure design is suboptimal, lacks multi-language localization support, and has coupling between CRM collections and project management collections. These issues led to the redesign of CRM 2.0. It is currently recommended to use CRM 2.0, which features a more rational data structure, is easier to extend and modify, and has completed multi-language localization.
- [Changelog](/solution/ticket-system/changelog.md): This page documents the update history for the Ticketing System solution. New entries are added at the top with each release.
- [Ticketing Solution Detailed Design](/solution/ticket-system/design.md): Version: v2.0-beta Updated: 2026-01-05 Status: Preview
- [Ticketing Solution Overview](/solution/ticket-system/index.md): Note: This is an early preview version. Features are still being improved and we are continuously working on enhancements. Feedback is welcome!
- [How to Install](/solution/ticket-system/installation.md): The current version uses backup and restoration for deployment. In future versions, we may switch to incremental migration to facilitate the integration of the solution into your existing systems. The Backup Manager plugin is now open-source: The "Backup Manager" plugin needed to restore the solution is now open-source and available to all editions (including the Community Edition). We recommend restoring directly via this plugin. Before you begin, please ensure: You already have a basic NocoBase running environment. For main system installation, please refer to the detailed official installation documentation.NocoBase version 2.0.0-beta.5 and above.You have downloaded the ticketing system backup file: nocobase_tickets_v2_backup_260324.nbdata Important Notes: This solution is built on PostgreSQL 16. Please ensure your environment uses PostgreSQL 16.DB_UNDERSCORED cannot be true: Please check your docker-compose.yml file and ensure the DB_UNDERSCORED environment variable is not set to true, otherwise it will conflict with the solution backup and cause restoration failure.
- [More Content](/solution/ticket-system/more.md): Content coming soon...
- [Custom Brand](/system-management/custom-brand/index.md)
- [Language Settings](/system-management/language-settings/index.md): In "System Settings", you can adjust the system's global language environment by configuring "Enabled Languages". The first language in the list will serve as the default language. When multiple languages are enabled, users can set their personal language preference in the Personal Center (top right corner of the page). If the language environment you are using lacks translations, you can use the "Localization Management" plugin to add or edit translations.
- [Localization Management](/system-management/localization/index.md)
- [Plugin Management](/system-management/plugin-manager/index.md)
- [System Settings](/system-management/system-settings/index.md): System settings are used to configure global system information, including the system name, main logo, enabled languages, etc.
- [Theme Editor](/system-management/theme-editor/index.md): The current theme feature is implemented based on Ant Design 5.x. It is recommended to read about the Customizing Theme concept before proceeding with this document.
- [](/template-print/advanced/advanced-features.md)
- [](/template-print/advanced/conditionals.md)
- [](/template-print/configuration.md)
- [](/template-print/faq.md)
- [Template Print HTTP API](/template-print/http-api.md): NocoBase Template Print HTTP API: use the templatePrint action to print selected records, current filtered results, or all matching data, and download generated Word, Excel, PowerPoint, or PDF files.
- [Template Printing](/template-print/index.md)
- [](/template-print/install.md)
- [Using the "Template Print" Feature to Generate Supply and Purchase Contracts](/template-print/scenes.md): In supply chain or trading scenarios, it is often necessary to quickly generate a standardized "Supply and Purchase Contract" and dynamically fill in content based on information from data sources such as buyers, sellers, and product details. Below, we will use a simplified "Contract" use case as an example to show you how to configure and use the "Template Print" feature to map data information to placeholders in contract templates, thereby automatically generating the final contract document.
- [](/template-print/syntax/basic-usage.md)
- [](/template-print/syntax/formatters/array-formatting.md)
- [](/template-print/syntax/formatters/currency-formatting.md)
- [](/template-print/syntax/formatters/date-formatting.md)
- [](/template-print/syntax/formatters/index.md)
- [](/template-print/syntax/formatters/media-field-formatting.md)
- [](/template-print/syntax/formatters/number-formatting.md)
- [](/template-print/syntax/formatters/text-formatting.md)
- [](/template-print/syntax/formatters/time-interval-formatting.md)
- [](/template-print/syntax/loops.md)
- [Action Extensions](/ui-development-action/index.md)
- [](/ui-development-action/write-an-action-plugin.md)
- [Block Extensions Overview](/ui-development-block/index.md): In NocoBase 2.0, the block extension mechanism has been significantly simplified. Developers only need to inherit the corresponding FlowModel base class and implement related interface methods (mainly the renderComponent() method) to quickly customize blocks.
- [Write Your First Block Plugin](/ui-development-block/write-a-block-plugin.md): Before starting, it's recommended to read "Write Your First Plugin" to learn how to quickly create a basic plugin. Next, we'll extend it by adding a simple Block feature.
- [Field Extensions](/ui-development-field/index.md)
- [](/ui-development-field/write-a-field-plugin.md)
- [Extending permission configuration tabs](/users-permissions/acl/dev/permission-tab.md): Below is an example of the "Mobile Menu" configuration item, demonstrating how to extend a new permission configuration tab. The effect is shown in the figure below: The code is as follows: First, we need to obtain an instance of the PluginACLClient plugin (other methods to obtain plugin instances), and add a new permission configuration tab using the settingsUI.addPermissionsTab method. In this example, we added a permission configuration tab named "Mobile Menu". The value of the settingsUI property is an instance of a class named ACLSettingsUI, and its type information is as follows:
- [Configuring Permissions](/users-permissions/acl/permissions.md)
- [Roles](/users-permissions/acl/role.md)
- [Application in UI](/users-permissions/acl/ui.md)
- [Role Union](/users-permissions/acl/union.md): Role Union is a permission management mode. According to system settings, system developers can choose to use Independent roles, Allow roles union, or Roles union only, to meet different permission requirements.
- [Departments](/users-permissions/departments/index.md)
- [Department Role Management](/users-permissions/departments/role.md): By associating one or more roles with a department, members of the current department can have these roles. There are two ways to associate roles with a department. The first is to select a role in the role field of the department editing form. The second is to add departments to the corresponding role in role management. Departments that already have this role are not selectable.
- [Extending Sync Target Resources](/users-permissions/sync/dev/resource.md)
- [Extending Synchronized Data Sources](/users-permissions/sync/dev/source.md)
- [User Data Synchronization](/users-permissions/sync/index.md)
- [Synchronize User Data from WeChat Work](/users-permissions/sync/sources/wecom.md)
- [Users](/users-permissions/user.md)
- [Execution Plan (History)](/workflow/advanced/executions.md): After a workflow is triggered, a corresponding execution plan is created to track the execution process of this task. Each execution plan has a status value to indicate the current execution status, which can be viewed in the list and details of the execution history: When all nodes in the main process branch are executed to the end of the process with a "Completed" status, the entire execution plan will end with a "Completed" status. When a node in the main process branch has a final status such as "Failed", "Error", "Cancelled", or "Rejected", the entire execution plan will be terminated prematurely with the corresponding status. When a node in the main process branch has a "Waiting" status, the entire execution plan will be paused, but will still show a "Running" status, until the waiting node is resumed. Different node types handle the waiting state differently. For example, a manual node needs to wait for manual processing, while a delay node needs to wait for the specified time to pass before continuing. The statuses of an execution plan are as follows: In the Quick Start example, we already know that by viewing the details of a workflow's execution history, we can check whether all nodes were executed normally, as well as the execution status and result data of each executed node. In some advanced workflows and nodes, a node may have multiple results, such as the result of a loop node:
- [Advanced Configuration](/workflow/advanced/options.md)
- [Version Management](/workflow/advanced/revisions.md): After a configured workflow has been triggered at least once, if you want to modify the workflow's configuration or its nodes, you need to create a new version before making changes. This also ensures that when reviewing the execution history of previously triggered workflows, it will not be affected by future modifications. On the workflow configuration page, you can view existing workflow versions from the version menu in the upper right corner: In the more actions ("...") menu to its right, you can choose to copy the currently viewed version to a new version: After copying to a new version, click the "Enable"/"Disable" toggle to switch the corresponding version to the enabled state, and the new workflow version will take effect. If you need to re-select an old version, switch to it from the version menu, then click the "Enable"/"Disable" toggle again to switch it to the enabled state. The currently viewed version will take effect, and subsequent triggers will execute the process of that version. When you need to disable the workflow, click the "Enable"/"Disable" toggle to switch it to the disabled state, and the workflow will no longer be triggered.
- [Using Variables](/workflow/advanced/variables.md)
- [Getting Started](/workflow/getting-started.md)
- [Overview](/workflow/index.md)
- [Aggregate Query](/workflow/nodes/aggregate.md)
- [Approval](/workflow/nodes/approval.md)
- [Calculation](/workflow/nodes/calculation.md): The Calculation node can evaluate an expression, and the result is saved in the result of the corresponding node for use by subsequent nodes. It is a tool for calculating, processing, and transforming data. To some extent, it can replace the function in programming languages of calling a function on a value and assigning it to a variable.
- [Carbon Copy v1.8.2+](/workflow/nodes/cc.md)
- [Condition](/workflow/nodes/condition.md)
- [Create Record](/workflow/nodes/create.md): Used to add a new record to a collection. The field values for the new record can use variables from the workflow context. To assign values to association fields, you can directly reference the corresponding data variables in the context, which can be either an object or a foreign key value. If not using variables, you need to manually enter the foreign key values. For multiple foreign key values in a to-many relationship, they must be separated by commas.
- [Date Calculation](/workflow/nodes/date-calculation.md)
- [Delay](/workflow/nodes/delay.md)
- [Delete data](/workflow/nodes/destroy.md): Used to delete data from a collection that meets certain conditions. The basic usage of the delete node is similar to the update node, except that the delete node does not require field assignment. You only need to select the collection and filter conditions. The result of the delete node returns the number of rows successfully deleted, which can only be viewed in the execution history and cannot be used as a variable in subsequent nodes.
- [End Workflow](/workflow/nodes/end.md): When this node is executed, it immediately terminates the current workflow with the status configured in the node. It is typically used for flow control based on specific logic, exiting the current workflow when certain conditions are met and stopping the execution of subsequent processes. It is analogous to the return instruction in programming languages, used to exit the current function.
- [Overview](/workflow/nodes/index.md): A workflow is typically composed of several connected operational steps. Each node represents one of these steps and serves as a basic logical unit in the process. Just like in a programming language, different types of nodes represent different instructions, which determine the node's behavior. When the workflow runs, the system enters each node sequentially and executes its instructions. From a functional perspective, the currently implemented nodes can be divided into several major categories (30 types of nodes in total): Artificial IntelligenceLarge Language Model (provided by @nocobase/plugin-workflow-llm plugin)Control FlowConditionMulti-conditionsLoop (provided by @nocobase/plugin-workflow-loop plugin)Variable (provided by @nocobase/plugin-workflow-variable plugin)Parallel Branch (provided by @nocobase/plugin-workflow-parallel plugin)Invoke Workflow (provided by @nocobase/plugin-workflow-subflow plugin)Workflow Output (provided by @nocobase/plugin-workflow-subflow plugin)JSON Variable Mapping (provided by @nocobase/plugin-workflow-json-variable-mapping plugin)Delay (provided by @nocobase/plugin-workflow-delay plugin)End WorkflowCalculationCalculationDate Calculation (provided by @nocobase/plugin-workflow-date-calculation plugin)JSON Calculation (provided by @nocobase/plugin-workflow-json-query plugin)Collection ActionsCreate DataUpdate DataDelete DataQuery DataAggregate Query (provided by @nocobase/plugin-workflow-aggregate plugin)SQL Action (provided by @nocobase/plugin-workflow-sql plugin)Database Transaction (provided by @nocobase/plugin-workflow-transaction plugin)Manual HandlingManual Handling (provided by @nocobase/plugin-workflow-manual plugin)Approval (provided by @nocobase/plugin-workflow-approval plugin)CC (provided by @nocobase/plugin-workflow-cc plugin)Other ExtensionsHTTP Request (provided by @nocobase/plugin-workflow-request plugin)JavaScript (provided by @nocobase/plugin-workflow-javascript plugin)Send Email (provided by @nocobase/plugin-workflow-mailer plugin)Notification (provided by @nocobase/plugin-workflow-notification plugin)Response (provided by @nocobase/plugin-workflow-webhook plugin)Response Message (provided by @nocobase/plugin-workflow-response-message plugin)
- [JavaScript Script](/workflow/nodes/javascript.md)
- [JSON Calculation](/workflow/nodes/json-query.md)
- [JSON Variable Mapping](/workflow/nodes/json-variable-mapping.md): v1.6.0
- [Loop](/workflow/nodes/loop.md)
- [Send email](/workflow/nodes/mailer.md)
- [Manual](/workflow/nodes/manual.md)
- [Multi-conditions v2.0.0+](/workflow/nodes/multi-conditions.md)
- [Workflow Output](/workflow/nodes/output.md)
- [Parallel Branch](/workflow/nodes/parallel.md): The parallel branch node can divide a workflow into multiple branches. Each branch can be configured with different nodes, and the execution method varies depending on the branch mode. Use the parallel branch node in scenarios where multiple actions need to be executed simultaneously.
- [Query Data](/workflow/nodes/query.md): Used to query and retrieve data records from a collection that meet specific conditions. You can configure it to query a single record or multiple records. The query result can be used as a variable in subsequent nodes. When querying multiple records, the result is an array. When the query result is empty, you can choose whether to continue executing subsequent nodes.
- [HTTP Request](/workflow/nodes/request.md)
- [Response Message](/workflow/nodes/response-message.md)
- [HTTP Response](/workflow/nodes/response.md)
- [SQL Action](/workflow/nodes/sql.md)
- [Invoke Workflow](/workflow/nodes/subflow.md)
- [Workflow node - Database transaction](/workflow/nodes/transaction.md): Database transaction node: run data operations from the same data source in one transaction, commit on success, and roll back on failure.
- [Update Data](/workflow/nodes/update.md): Used to update data in a collection that meets specified conditions. The collection and field assignment parts are the same as the "Create record" node. The main difference with the "Update data" node is the addition of filter conditions and the need to select an update mode. Additionally, the result of the "Update data" node returns the number of rows successfully updated. This can only be viewed in the execution history and cannot be used as a variable in subsequent nodes.
- [Variable](/workflow/nodes/variable.md)
- [Approval](/workflow/triggers/approval.md)
- [Collection Events](/workflow/triggers/collection.md)
- [Custom Action Event](/workflow/triggers/custom-action.md)
- [Overview](/workflow/triggers/index.md): A trigger is the entry point for a workflow. When an event that meets the trigger's conditions occurs while the application is running, the workflow will be triggered and executed. The type of trigger is also the type of workflow, selected when creating the workflow, and cannot be modified after creation. The currently supported trigger types are as follows: Collection Events (Built-in)Schedule (Built-in)Before Action (Provided by the @nocobase/plugin-workflow-request-interceptor plugin)After Action (Provided by the @nocobase/plugin-workflow-action-trigger plugin)Custom Action (Provided by the @nocobase/plugin-workflow-custom-action-trigger plugin)Approval (Provided by the @nocobase/plugin-workflow-approval plugin)Webhook (Provided by the @nocobase/plugin-workflow-webhook plugin) The timing of when each event is triggered is shown in the figure below: For example, when a user submits a form, or when data in a collection changes due to user action or a program call, or when a scheduled task reaches its execution time, a configured workflow can be triggered. Data-related triggers (such as actions, collection events) usually carry trigger context data. This data acts as variables and can be used by nodes in the workflow as processing parameters to achieve automated data processing. For example, when a user submits a form, if the submit button is bound to a workflow, that workflow will be triggered and executed. The submitted data will be injected into the execution plan's context environment for subsequent nodes to use as variables. After creating a workflow, on the workflow view page, the trigger is displayed as an entry node at the beginning of the process. Clicking on this card will open the configuration drawer. Depending on the type of trigger, you can configure its relevant conditions.
- [Post-Action Event](/workflow/triggers/post-action.md)
- [Before Action Event](/workflow/triggers/pre-action.md)
- [Scheduled Task](/workflow/triggers/schedule.md)
- [Webhook](/workflow/triggers/webhook.md)
- [Workflow + AI for employees to complete company background research automation](/ai-employee-practices/company-background-research.md): Through company information forms, background investigation records, workflows, and AI employees, a company background investigation process can be automatically triggered, retained, and supported for manual review.
- [Generate Business Analysis Report](/ai-employee-practices/business-report.md): Using the online DEMO CRM system as an example, let AI Employees analyze customer and order data in the system and generate an analysis report.
- [Use Lina and local HY-MT to translate localization entries](/ai-employee-practices/localization-hy-mt.md): Deploy the HY-MT1.5 GGUF translation model with llama-server and configure it for Lina to batch translate NocoBase localization entries.
- [Let AI employees fill custom forms in JS blocks](/ai-employee-practices/ai-fill-js-block-form.md): Use Ant Design Form and a small bridge to let AI employees recognize and fill complex custom forms in JS blocks.
- [NocoBase Development Guide](/data-sources/development.md): NocoBase development guide: plugin development, shared components, FlowEngine, RunJS, block/field/action extensions, data source extensions, workflow extensions, authentication extensions.
- [Component vs FlowModel](/flow-engine/component-vs-flow-model.md): NocoBase development selection guide: when to use plain React components, when to use FlowModel, capability differences, lifecycle comparison, and scenario selection.
- [Data sources overview](/integration/data-sources.md): NocoBase data sources and data modeling: main databases, external databases, REST APIs, external NocoBase, collections, and fields.
- [AI Chat box block](/interface-builder/ai-chat-box.md): User guide for NocoBase administrators and page builders covering how to add an AI Chat box block, configure conversation capabilities, set Work context, manage conversations, and add Actions.
- [Two-Factor Authentication (2FA)](/security/2fa.md)
- [Field encryption](/security/field-encryption.md): Encrypt sensitive business data such as phone numbers, email addresses, and card numbers before storing it as ciphertext in the database.
- [Text Chat](/workflow/chat.md)
- [Multimodal Conversation](/workflow/multimodal-chat.md)
- [Structured Output](/workflow/structured-output.md)
- [AI Employee Node](/workflow/configuration.md)
- [Node Approval](/workflow/approval.md)
- [Workflow AI knowledge base nodes overview](/workflow/knowledge.md): Introduces the workflow AI knowledge base node scenario, collection structure, and how Create, Update, and Delete document nodes synchronize knowledge base content.
- [Workflow AI knowledge base node - Create document](/workflow/create-document.md): Use a collection event trigger and the AI knowledge base Create document node to synchronize newly added records to the AI knowledge base.
- [Workflow AI knowledge base node - Update document](/workflow/update-document.md): Use a collection event trigger and the AI knowledge base Update document node to synchronize collection updates to the AI knowledge base.
- [Workflow AI knowledge base node - Delete document](/workflow/delete-document.md): Use a collection event trigger and the AI knowledge base Delete document node to delete knowledge base documents after collection records are deleted.
- [Workflow AI knowledge base node - Retrieve document](/workflow/retrieve-document.md): Use the AI knowledge base Retrieve document node in a workflow to retrieve snippets and provide them as task context for an AI employee node.
- [Notification Manager](/workflow/notification-manager.md)