<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: NocoBase</title>
    <description>The latest articles on DEV Community by NocoBase (@nocobase).</description>
    <link>https://dev.to/nocobase</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1349233%2Ffe1061e9-2897-4210-a0b2-a96c044ac3b2.jpg</url>
      <title>DEV Community: NocoBase</title>
      <link>https://dev.to/nocobase</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nocobase"/>
    <language>en</language>
    <item>
      <title>Awesome NocoBase: Discover and Share Plugins Built by the Community</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Tue, 28 Jul 2026 03:05:50 +0000</pubDate>
      <link>https://dev.to/nocobase/awesome-nocobase-discover-and-share-plugins-built-by-the-community-4hbk</link>
      <guid>https://dev.to/nocobase/awesome-nocobase-discover-and-share-plugins-built-by-the-community-4hbk</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/awesome-nocobase-community-plugins" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/awesome-nocobase-community-plugins&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From day one, NocoBase has been built on a plugin architecture.&lt;/p&gt;

&lt;p&gt;This architecture gives NocoBase the flexibility and extensibility needed for long-term growth. Developers can continuously add new capabilities for different business needs without modifying the core system.&lt;/p&gt;

&lt;p&gt;With the rise of AI coding tools, plugin development is becoming easier than ever. With tools like Claude Code, Codex, and Cursor, together with &lt;a href="https://docs.nocobase.com/cn/ai-dev" rel="noopener noreferrer"&gt;NocoBase’s AI plugin development capabilities&lt;/a&gt;, more developers can quickly build their own plugins.&lt;/p&gt;

&lt;p&gt;Now, you can discover community-built plugins in &lt;a href="https://github.com/nocobase/awesome-nocobase" rel="noopener noreferrer"&gt;Awesome NocoBase&lt;/a&gt;, or share your own extensions and help grow the NocoBase plugin ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Floyv2h60tbucxeo23a6b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Floyv2h60tbucxeo23a6b.jpg" alt="Frame 94-ojy7ci.jpg" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Featured Community Plugins
&lt;/h2&gt;

&lt;p&gt;Currently, &lt;a href="https://github.com/nocobase/awesome-nocobase" rel="noopener noreferrer"&gt;Awesome NocoBase&lt;/a&gt; features a collection of plugins created by community developers. These plugins are built from real-world projects and experiences. Some address common needs, some extend NocoBase’s core capabilities, and others provide solutions for specific business scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Bunnarin/nocobase-plugin-hooks" rel="noopener noreferrer"&gt;NocoBase Hooks&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/Bunnarin" rel="noopener noreferrer"&gt;Bunnarin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NocoBase Hooks provides an extension mechanism similar to PocketBase’s &lt;code&gt;pb_hooks&lt;/code&gt;. Developers can write server-side extensions directly in the &lt;code&gt;storage/hooks/&lt;/code&gt; directory while leveraging NocoBase capabilities such as database events, middleware, custom APIs, ACL, and logging.&lt;/p&gt;

&lt;p&gt;It also supports automatic loading, hot reload during development, TypeScript, and independent dependency management.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/trumanharry/nocobase-globalsearch-plugin" rel="noopener noreferrer"&gt;Global Search&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/trumanharry" rel="noopener noreferrer"&gt;trumanharry&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Global Search adds a cross-table search entry to the NocoBase admin interface, making it easier to find information across different data collections such as customers, orders, projects, and contacts.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/OneTwoSmall/nocobase-custom-plugins/tree/main/plugins/%40nocobase/plugin-file-previewer-office" rel="noopener noreferrer"&gt;Office File Previewer&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/OneTwoSmall" rel="noopener noreferrer"&gt;OneTwoSmall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Office File Previewer enhances NocoBase’s file preview capabilities with flexible support for Office documents and other file formats.&lt;/p&gt;

&lt;p&gt;For use cases such as knowledge bases, contract management, archives, and internal file systems, users can preview files directly inside NocoBase without downloading files or switching between applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/OneTwoSmall/nocobase-custom-plugins/tree/main/plugins/%40nocobase/plugin-enhanced-table-block" rel="noopener noreferrer"&gt;Enhanced Table Block&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/OneTwoSmall" rel="noopener noreferrer"&gt;OneTwoSmall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enhanced Table Block extends NocoBase table blocks with richer data display and interaction features.&lt;/p&gt;

&lt;p&gt;It is ideal for scenarios involving reports, inventory, orders, and financial data, allowing users to manage information in a more spreadsheet-like way.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/OneTwoSmall/nocobase-custom-plugins/tree/main/plugins/%40nocobase/plugin-auth-email" rel="noopener noreferrer"&gt;Auth: Email&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/OneTwoSmall" rel="noopener noreferrer"&gt;OneTwoSmall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Supports authentication through email verification codes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/taichuy/nocobase-plugin-login-lite" rel="noopener noreferrer"&gt;Custom Login Page&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/JAVA-LW" rel="noopener noreferrer"&gt;JAVA-LW&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Custom Login Page allows administrators to configure NocoBase login page themes, styles, and branding directly from the backend.&lt;/p&gt;

&lt;p&gt;It is suitable for projects that require a consistent brand experience or dedicated login portals for customers, employees, and partners.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/vokylin/plugin-block-tabs" rel="noopener noreferrer"&gt;Block: Tabs&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/zoudeming-vk" rel="noopener noreferrer"&gt;zoudeming-vk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Block: Tabs provides a tab block that organizes multiple NocoBase blocks within a single interface.&lt;/p&gt;

&lt;p&gt;For information-heavy detail pages and management screens, it reduces scrolling and groups related content into tabs, creating a clearer page structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/fengwenkai168/nocobase-plugin/" rel="noopener noreferrer"&gt;Watermark&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/fengwenkai168" rel="noopener noreferrer"&gt;fengwenkai168&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watermark adds semi-transparent watermarks to NocoBase pages and can display information about the current user.&lt;/p&gt;

&lt;p&gt;Administrators can customize watermark text, opacity, and font size. It is suitable for contracts, customer data, and other sensitive information where reducing screenshot-based data leakage is important.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/michaelxmn/plugin-role-switcher" rel="noopener noreferrer"&gt;Role Switcher&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/michaelxmn" rel="noopener noreferrer"&gt;michaelxmn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Role Switcher adds a quick role switching option to the top navigation bar.&lt;/p&gt;

&lt;p&gt;It helps users with multiple roles switch contexts more efficiently, and makes permission testing easier for administrators and developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Albert-mah/nocobase-plugin-user-columns" rel="noopener noreferrer"&gt;Per-User Column Settings&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/Albert-mah" rel="noopener noreferrer"&gt;Albert-mah&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Per-User Column Settings allows each user to save their own table column preferences.&lt;/p&gt;

&lt;p&gt;Users can customize visible fields, reorder columns, freeze columns, and adjust column widths without affecting other users. It is especially useful for business systems where different roles focus on different information.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ericto888/nocobase-plugin-field-sequence-pro" rel="noopener noreferrer"&gt;Field Sequence Pro&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/ericto888" rel="noopener noreferrer"&gt;ericto888&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Field Sequence Pro extends the built-in auto-numbering field with support for form variables, value mapping dictionaries, and multi-dimensional isolated counters while keeping the original functionality.&lt;/p&gt;

&lt;p&gt;It is suitable for generating unique identifiers such as order numbers, contract numbers, and business serial numbers based on different rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Albert-mah/plugin-http-error-handler" rel="noopener noreferrer"&gt;HTTP Error Handler&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/Albert-mah" rel="noopener noreferrer"&gt;Albert-mahmahuantest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HTTP Error Handler provides global 4xx/5xx error handling for NocoBase.&lt;/p&gt;

&lt;p&gt;Administrators can define error handling rules using JS expressions, display unhandled API errors with custom error pages, or redirect users to specific pages automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Albert-mah/plugin-workflow-url-trigger" rel="noopener noreferrer"&gt;Workflow: URL Trigger&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/Albert-mah" rel="noopener noreferrer"&gt;Albert-mah&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workflow: URL Trigger enables workflows to be triggered by external HTTP requests.&lt;/p&gt;

&lt;p&gt;It supports wildcard and regular expression matching, uses request parameters as workflow variables, and can work with the HTTP Response node to build Webhooks, API integrations, and automation workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Albert-mah/plugin-workflow-crypto" rel="noopener noreferrer"&gt;Workflow: Crypto&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/Albert-mah" rel="noopener noreferrer"&gt;Albert-mah&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workflow: Crypto provides AES encryption and decryption nodes for workflows.&lt;/p&gt;

&lt;p&gt;It supports variable inputs and automatic JSON parsing after decryption, making it suitable for secure data exchange with external systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Albert-mah/plugin-workflow-auth-token" rel="noopener noreferrer"&gt;Workflow: Auth Token&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/Albert-mah" rel="noopener noreferrer"&gt;Albert-mah&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workflow: Auth Token generates real NocoBase login JWTs within workflows.&lt;/p&gt;

&lt;p&gt;It can be used to create SSO login links and programmatic access tokens, and combined with URL Trigger and Crypto to build complete single sign-on workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build the NocoBase Plugin Ecosystem Together
&lt;/h2&gt;

&lt;p&gt;If you have created a NocoBase plugin, we welcome you to submit it to &lt;a href="https://github.com/nocobase/awesome-nocobase" rel="noopener noreferrer"&gt;Awesome NocoBase&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Our goal is to help more users discover valuable plugins while giving great plugins and their developers more exposure.&lt;/p&gt;

&lt;p&gt;In the future, we will continue highlighting outstanding community plugins and the developers behind them.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>Weekly Updates：Remote Search for Approval Notification Channels</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Mon, 27 Jul 2026 10:23:21 +0000</pubDate>
      <link>https://dev.to/nocobase/weekly-updatesremote-search-for-approval-notification-channels-233g</link>
      <guid>https://dev.to/nocobase/weekly-updatesremote-search-for-approval-notification-channels-233g</guid>
      <description>&lt;p&gt;Summarize the weekly product update logs, and the latest releases can be checked on &lt;a href="https://www.nocobase.com/en/blog/timeline" rel="noopener noreferrer"&gt;our blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NocoBase is currently updated across three branches: &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, and &lt;code&gt;develop&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" alt="version.png" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;main&lt;/code&gt;: The most stable version to date, recommended for installation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;next&lt;/code&gt;: Beta version, contains upcoming new features and has been preliminarily tested. There might be some known or unknown issues. It is mainly used to collect feedback from test users and further optimize features. Ideal for test users who want to experience new features early and provide feedback.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;develop&lt;/code&gt;: Alpha version, contains the latest feature code, may be incomplete or unstable, and is mainly used for internal development and rapid iteration. Suited for technical users interested in cutting-edge product capabilities, but not recommended for production use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  main
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" alt="main.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.1.30
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-24&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[client-v2]&lt;/strong&gt; Improved v2 QR code and barcode scan recognition, camera lifecycle safety, and responsive preview behavior. (&lt;a href="https://github.com/nocobase/nocobase/pull/10145" rel="noopener noreferrer"&gt;#10145&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[client]&lt;/strong&gt; Added Myanmar (&lt;code&gt;my-MM&lt;/code&gt;) to the legacy System Settings language selector. (&lt;a href="https://github.com/nocobase/nocobase/pull/10153" rel="noopener noreferrer"&gt;#10153&lt;/a&gt;) by @hongboji&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added usage instructions and card-style workflow selection to the approval initiation list by @mytharcher&lt;/li&gt;
&lt;li&gt;Improved the approval timeline with clearer status badges, timing details, user avatars, responsive layout, and connected submission rounds by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix RunJS values not taking effect in client v2 date range limits. (&lt;a href="https://github.com/nocobase/nocobase/pull/10157" rel="noopener noreferrer"&gt;#10157&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Improve error messages for unsupported and missing pages in the &lt;code&gt;/v/&lt;/code&gt; branch (&lt;a href="https://github.com/nocobase/nocobase/pull/10159" rel="noopener noreferrer"&gt;#10159&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix v2 table action titles being reverted after linkage refresh. (&lt;a href="https://github.com/nocobase/nocobase/pull/10140" rel="noopener noreferrer"&gt;#10140&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed required association values being cleared after selection in popup sub-table forms with parent-item data scopes. (&lt;a href="https://github.com/nocobase/nocobase/pull/10146" rel="noopener noreferrer"&gt;#10146&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fix record picker lists not refreshing after creating a record in client v2. (&lt;a href="https://github.com/nocobase/nocobase/pull/10142" rel="noopener noreferrer"&gt;#10142&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix v2 block configuration dropdowns closing when clicking their active trigger. (&lt;a href="https://github.com/nocobase/nocobase/pull/10143" rel="noopener noreferrer"&gt;#10143&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed untranslated default text in secondary confirmation settings when using Simplified Chinese (&lt;a href="https://github.com/nocobase/nocobase/pull/10149" rel="noopener noreferrer"&gt;#10149&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Authentication]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an intermittent database connection error during application shutdown when Redis cache is enabled (&lt;a href="https://github.com/nocobase/nocobase/pull/10151" rel="noopener noreferrer"&gt;#10151&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;Fixed incorrect SSO redirects for sub-applications using custom domains (&lt;a href="https://github.com/nocobase/nocobase/pull/10170" rel="noopener noreferrer"&gt;#10170&lt;/a&gt;) by @2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Prevented Nathan from reporting malformed or unchanged code patches as successfully applied (&lt;a href="https://github.com/nocobase/nocobase/pull/10174" rel="noopener noreferrer"&gt;#10174&lt;/a&gt;) by @2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection field: Sequence]&lt;/strong&gt; Fixed v2 sequence rule options not saving entered values and fixed-text rules incorrectly reporting a required-field error. (&lt;a href="https://github.com/nocobase/nocobase/pull/10156" rel="noopener noreferrer"&gt;#10156&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Backup manager]&lt;/strong&gt; Fix missing visible error notifications when Backup Manager restore requests fail in the v2 client. (&lt;a href="https://github.com/nocobase/nocobase/pull/10158" rel="noopener noreferrer"&gt;#10158&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Block: Kanban]&lt;/strong&gt; Fixed Calendar and Kanban popup templates not taking effect or being cleared incorrectly when using copied popup templates (&lt;a href="https://github.com/nocobase/nocobase/pull/9856" rel="noopener noreferrer"&gt;#9856&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App SSO]&lt;/strong&gt; Fixed App SSO failures when the public issuer is unreachable from sub-application servers by @2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Auth: OIDC]&lt;/strong&gt; Fixed incorrect redirects after OIDC login through a sub-application custom domain by @2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Hide approval configuration controls when UI Editor is off by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.29
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-21&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Approval notification channels can now be searched remotely by title by @mytharcher&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where the Add Block menu could unexpectedly disappear while searching. (&lt;a href="https://github.com/nocobase/nocobase/pull/10097" rel="noopener noreferrer"&gt;#10097&lt;/a&gt;) by &lt;a class="mentioned-user" href="https://dev.to/gchust"&gt;@gchust&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed full and specified height settings not working for JS Blocks displayed with a card (&lt;a href="https://github.com/nocobase/nocobase/pull/10126" rel="noopener noreferrer"&gt;#10126&lt;/a&gt;) by &lt;a class="mentioned-user" href="https://dev.to/gchust"&gt;@gchust&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fix the issue where date filter defaults become a single date (&lt;a href="https://github.com/nocobase/nocobase/pull/9854" rel="noopener noreferrer"&gt;#9854&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Calendar]&lt;/strong&gt; Add scrolling to the v2 calendar event overlay when many events are shown. (&lt;a href="https://github.com/nocobase/nocobase/pull/10138" rel="noopener noreferrer"&gt;#10138&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Multi-space]&lt;/strong&gt; Fixed account switching failures caused by stale space headers during authentication recovery by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>How to Choose a Smartsheet Alternative: 7 Tools Compared</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Fri, 24 Jul 2026 17:49:46 +0000</pubDate>
      <link>https://dev.to/nocobase/how-to-choose-a-smartsheet-alternative-7-tools-compared-4ndh</link>
      <guid>https://dev.to/nocobase/how-to-choose-a-smartsheet-alternative-7-tools-compared-4ndh</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/best-smartsheet-alternatives" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/best-smartsheet-alternatives&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.smartsheet.com/" rel="noopener noreferrer"&gt;Smartsheet&lt;/a&gt; is one of the first tools many teams consider when setting up project management and collaboration workflows.&lt;/p&gt;

&lt;p&gt;It retains a familiar spreadsheet-style interface while adding boards, Gantt charts, forms, automation, reports, and dashboards. For teams that previously relied on Excel to manage projects, the learning curve is relatively low, making it easier to establish consistent processes for task assignment, progress tracking, and project reporting.&lt;/p&gt;

&lt;p&gt;However, a tool that works well at the beginning may not remain suitable for every stage of a team’s development.&lt;/p&gt;

&lt;p&gt;Recently, we came across a discussion about alternatives in the Smartsheet community on &lt;a href="https://www.reddit.com/r/smartsheet/comments/1pj85s5/smartsheet_comparison/" rel="noopener noreferrer"&gt;Reddit&lt;/a&gt;. The original poster works for a construction company with about 100 employees and belongs to a seven-person department. Previously, everyone managed projects according to their own habits: some used spreadsheets, some relied on personal task tools, and others tracked progress through email and meetings. As the number of projects increased, the team wanted to establish a unified project management and reporting process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsl2k3sc1puzcz3hwpcnp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsl2k3sc1puzcz3hwpcnp.png" alt="reddit-v58l9f.png" width="633" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The comments showed that opinions about Smartsheet were mixed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Users who supported Smartsheet mentioned&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Migrating from Excel is relatively straightforward&lt;/li&gt;
&lt;li&gt;Real-time data can be connected across different sheets&lt;/li&gt;
&lt;li&gt;Dashboards and reporting are intuitive&lt;/li&gt;
&lt;li&gt;Forms, file review, approvals, and automation are well covered&lt;/li&gt;
&lt;li&gt;Business teams do not have to wait for IT to develop every system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Users considering replacing Smartsheet mentioned&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changes to pricing and licensing models&lt;/li&gt;
&lt;li&gt;Uneven adoption across departments&lt;/li&gt;
&lt;li&gt;Automation is often maintained by only a few advanced users&lt;/li&gt;
&lt;li&gt;Complex relational data remains difficult to manage&lt;/li&gt;
&lt;li&gt;Maintenance costs increase as data volume and usage expand&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on these needs, we selected several representative Smartsheet alternatives, including open-source platforms. The following sections introduce each product’s positioning, core capabilities, major differences from Smartsheet, pricing, and suitable team types.&lt;/p&gt;

&lt;p&gt;Before examining each product in detail, use the comparison table below to quickly identify options that may better match your team’s needs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;th&gt;Open Source&lt;/th&gt;
&lt;th&gt;Primary Positioning&lt;/th&gt;
&lt;th&gt;Similarities to Smartsheet&lt;/th&gt;
&lt;th&gt;Key Differences&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NocoBase&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Enterprise business system development&lt;/td&gt;
&lt;td&gt;Tables, pages, workflows&lt;/td&gt;
&lt;td&gt;Focuses on data relationships, permissions, and controlled operations; highly flexible plugin architecture; self-hosted and extensible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Baserow&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No-code database&lt;/td&gt;
&lt;td&gt;Spreadsheet-style data management&lt;/td&gt;
&lt;td&gt;Open source, self-hosted, relational data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monday&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Visual work management&lt;/td&gt;
&lt;td&gt;Projects, boards, automation&lt;/td&gt;
&lt;td&gt;Greater emphasis on boards and team collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmartSuite&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Comprehensive work management&lt;/td&gt;
&lt;td&gt;Projects, records, processes&lt;/td&gt;
&lt;td&gt;Combines data management with project execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airtable&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Relational data collaboration&lt;/td&gt;
&lt;td&gt;Tables, views, automation&lt;/td&gt;
&lt;td&gt;Stronger at linked data and interface building&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClickUp&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;All-in-one project management&lt;/td&gt;
&lt;td&gt;Tasks, dashboards, automation&lt;/td&gt;
&lt;td&gt;Task-centric with broad feature coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asana&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Project and task management&lt;/td&gt;
&lt;td&gt;Tasks, dependencies, timelines&lt;/td&gt;
&lt;td&gt;Clearer and more standardized project workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;💬 Hey, you're reading the NocoBase blog. NocoBase is the most extensible AI-powered no-code/low-code development platform for building enterprise applications, internal tools, and all kinds of systems. It’s fully self-hosted, plugin-based, and developer-friendly. → &lt;a href="https://github.com/nocobase/nocobase" rel="noopener noreferrer"&gt;Explore NocoBase on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. NocoBase: For Teams Moving From Collaborative Spreadsheets to Business Systems
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://www.nocobase.com/" rel="noopener noreferrer"&gt;https://www.nocobase.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.nocobase.com/" rel="noopener noreferrer"&gt;https://docs.nocobase.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://www.nocobase.com/en/commercial" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/commercial&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/nocobase/nocobase" rel="noopener noreferrer"&gt;https://github.com/nocobase/nocobase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Stars: 23.4K&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Is NocoBase?
&lt;/h3&gt;

&lt;p&gt;NocoBase is an open-source AI-powered no-code platform for building enterprise business systems such as project management, CRM, contract management, order management, approvals, and ticketing.&lt;/p&gt;

&lt;p&gt;Teams can first create related data tables for customers, projects, contracts, tasks, invoices, and other business objects. They can then configure tables, boards, forms, detail pages, charts, and action buttons through a visual interface. As business requirements change, pages, permissions, workflows, and plugins can continue to be adjusted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb610v282wzm9ucvua5ub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb610v282wzm9ucvua5ub.png" alt="NocoBase1-s098x8.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Can It Replace Smartsheet?
&lt;/h3&gt;

&lt;p&gt;NocoBase provides tables, boards, forms, detail pages, charts, and workflows, covering common Smartsheet scenarios such as project management, data collection, progress tracking, and automation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb3a8h43kkv0cwumcu9ba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb3a8h43kkv0cwumcu9ba.png" alt="NocoBase2-9jgm7h.png" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For teams with increasingly complex data structures, NocoBase can also create multiple related tables. For example, one customer can have multiple projects, while each project can be linked to contracts, tasks, invoices, and payment records. Sales, finance, project managers, and executives can work from the same underlying data while using different pages and receiving role-based data and operation permissions.&lt;/p&gt;

&lt;p&gt;NocoBase also offers two types of AI collaboration capabilities that support both system development and ongoing operations.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;AI-assisted development&lt;/strong&gt;. Teams can connect commonly used AI agents such as Claude Code, Codex, and Cursor to NocoBase, describe business requirements in natural language, and have the AI agent assist with data modeling, page configuration, workflow orchestration, permission settings, and plugin development. The generated system can still be reviewed and adjusted through NocoBase’s no-code interface.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;AI Employees&lt;/strong&gt;. After the business system goes live, AI Employees can understand business context from the current page, data blocks, and selected records. They can invoke relevant skills to query data, organize information, fill in forms, analyze trends, generate reports, and process content. AI Employees can also be orchestrated into workflows, bringing AI capabilities into specific business processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fza9cf2x4w1b6zrbvhnrt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fza9cf2x4w1b6zrbvhnrt.png" alt="NocoBase3-4m76lu.png" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NocoBase also supports self-hosting, plugin extensions, and external database connections, making it suitable for teams that want control over their data and deployment environment while continuously expanding business modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences From Smartsheet
&lt;/h3&gt;

&lt;p&gt;Smartsheet mainly uses worksheets as the collaboration entry point, with members typically viewing and updating project data directly in a grid. NocoBase starts with a data model and then configures pages, permissions, operations, and workflows around that data.&lt;/p&gt;

&lt;p&gt;In NocoBase, users do not all have to enter the same underlying data table. Administrators can configure separate work interfaces for different roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sales teams can view customers, contacts, and opportunities;&lt;/li&gt;
&lt;li&gt;Project managers can view projects, tasks, and delivery progress;&lt;/li&gt;
&lt;li&gt;Finance teams can view contracts, invoices, and payments;&lt;/li&gt;
&lt;li&gt;Executives can view aggregated metrics and dashboards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data modification methods can also be configured according to business risk. Routine fields such as task status and assignee can support quick editing. Critical data such as contract amounts, payment status, and approval results can be entered, validated, confirmed, and submitted through dedicated forms. Once submitted, the system can trigger notifications, approvals, data updates, or other workflows.&lt;/p&gt;

&lt;p&gt;AI further expands this system-oriented approach. During development, AI agents can understand NocoBase’s data models, pages, permissions, and workflow configurations to help teams build systems faster. During operation, AI Employees can read business context, analyze data, and perform authorized actions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8v1ujax29cwglkanv09v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8v1ujax29cwglkanv09v.png" alt="NocoBase4-94jiot.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means AI can participate throughout the complete lifecycle of a business system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Assist with creating data models and pages from natural-language requirements;&lt;/li&gt;
&lt;li&gt;Configure role permissions, operation methods, and business processes;&lt;/li&gt;
&lt;li&gt;Analyze and process business data after the system goes live;&lt;/li&gt;
&lt;li&gt;Continue participating in daily operations through AI Employees or workflows.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For teams already using Smartsheet to manage customers, contracts, projects, and financial data, this design can reduce errors and management pressure caused by multiple people directly maintaining complex worksheets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Teams Is It Best For?
&lt;/h3&gt;

&lt;p&gt;NocoBase is better suited to teams that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Already use Smartsheet to manage formal business data such as customers, contracts, orders, or payments;&lt;/li&gt;
&lt;li&gt;Have complex data relationships across multiple worksheets;&lt;/li&gt;
&lt;li&gt;Need different operating interfaces for sales, finance, operations, and management;&lt;/li&gt;
&lt;li&gt;Need to control which data different roles can view and modify;&lt;/li&gt;
&lt;li&gt;Require validation, confirmation, approval, or auditing for critical data changes;&lt;/li&gt;
&lt;li&gt;Want to use AI agents to accelerate business system development;&lt;/li&gt;
&lt;li&gt;Want AI Employees to participate in data analysis and business processing after launch;&lt;/li&gt;
&lt;li&gt;Need self-hosting and control over data and deployment environments;&lt;/li&gt;
&lt;li&gt;Plan to continue adding business modules on the same platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🎉 NocoBase lightweight solutions are now available. Try them today!&lt;/p&gt;

&lt;p&gt;These focused business solutions are built with NocoBase. They are open source, controllable, and easy to extend or modify around your own processes.&lt;/p&gt;

&lt;p&gt;Each solution includes a standard prompt. Give it to an AI agent connected to your instance, and you can reproduce the same system in minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nocobase.com/en/ai-blueprints" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/ai-blueprints&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2. Baserow: For Teams That Want to Keep a Spreadsheet-Style Experience
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://baserow.io/" rel="noopener noreferrer"&gt;https://baserow.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://baserow.io/user-docs" rel="noopener noreferrer"&gt;https://baserow.io/user-docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://baserow.io/pricing" rel="noopener noreferrer"&gt;https://baserow.io/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/baserow/baserow" rel="noopener noreferrer"&gt;https://github.com/baserow/baserow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Stars: 5.3K&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Is Baserow?
&lt;/h3&gt;

&lt;p&gt;Baserow is an open-source no-code database and application-building platform. It retains a spreadsheet-like interface, allowing users to manage customers, projects, content, inventory, and other information through tables, fields, linked records, and multiple views. Teams can also build internal applications, dashboards, and automated processes. Baserow additionally provides AI fields, AI formula generation, and the Kuma AI assistant.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvjb1kp15vpysqgtuijdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvjb1kp15vpysqgtuijdc.png" alt="Baserow1-bc4av1.png" width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Can It Replace Smartsheet?
&lt;/h3&gt;

&lt;p&gt;Baserow supports tables, forms, boards, calendars, timelines, and dashboards, covering common Smartsheet needs such as data collection, project tracking, and information presentation. It also supports table relationships, lookups, rollups, and formulas, making it more suitable for related data. For teams accustomed to editing information directly in tables but seeking stronger database capabilities, the post-migration experience is relatively easy to understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences From Smartsheet
&lt;/h3&gt;

&lt;p&gt;Smartsheet places greater emphasis on project management, task dependencies, resource planning, and cross-project reporting, while Baserow is closer to a no-code database. Teams can freely create tables and relationships, then use the application builder to turn underlying data into internal tools or customer portals. Baserow also offers an open-source, self-hosted version, allowing teams to control their deployment environment, data storage, and system extensions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F04lx52k0igswmxrmjr17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F04lx52k0igswmxrmjr17.png" alt="Baserow2-ehqveo.png" width="799" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Teams Is It Best For?
&lt;/h3&gt;

&lt;p&gt;Baserow is suitable for teams that are comfortable with spreadsheets, need to manage multiple related data tables, and prefer an open-source or self-hosted solution. It is particularly useful for content management, lightweight CRM, project data, inventory, and internal information management, as well as teams that want to build simple internal tools on top of data tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. monday: For Project Teams That Prioritize Visual Collaboration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://monday.com/" rel="noopener noreferrer"&gt;https://monday.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://support.monday.com/hc/en-us" rel="noopener noreferrer"&gt;https://support.monday.com/hc/en-us&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://monday.com/pricing" rel="noopener noreferrer"&gt;https://monday.com/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Does monday Organize Team Work?
&lt;/h3&gt;

&lt;p&gt;monday is a visual work management platform. Teams can centralize projects, tasks, owners, deadlines, and current status in a Board, then switch among Kanban, timeline, Gantt, calendar, and dashboard views to review progress from different perspectives. It is used for project management, marketing campaigns, product development, operational planning, and cross-functional collaboration, and the platform is also adding AI workflows and AI agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9zdcuq1o38byyaokzxzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9zdcuq1o38byyaokzxzs.png" alt="monday1-zqwhth.png" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Is It a Suitable Smartsheet Alternative?
&lt;/h3&gt;

&lt;p&gt;For teams seeking a consistent way to collaborate on projects, monday provides a relatively intuitive starting point. Administrators can use templates to quickly create project spaces, while members work around tasks, status, owners, and milestones. Automation rules can send notifications, update fields, or move tasks when a status changes, a date arrives, or a task is assigned. Dashboards can aggregate project progress, budgets, and team workloads across multiple Boards.&lt;/p&gt;

&lt;p&gt;monday’s AI workflows can also add content generation, information analysis, and task assignment to existing processes. Its AI agents can monitor activities, determine the next action, and execute tasks within the context of Boards and workflows, although this capability is still being rolled out gradually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences From Smartsheet
&lt;/h3&gt;

&lt;p&gt;Smartsheet retains stronger spreadsheet conventions and is well suited to managing data, formulas, and cross-sheet reports in dense grids. monday focuses more on Boards, statuses, and task progression. Colors, groups, views, and automation make it easier for members to understand who owns each task and how far the work has progressed.&lt;/p&gt;

&lt;p&gt;This design is collaboration-friendly, particularly for scenarios that require frequent status updates, owner coordination, and milestone tracking. For complex formulas, extensive cross-sheet references, or relational business data, monday differs significantly from traditional spreadsheets and should be evaluated against each existing Smartsheet use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Teams Are Better Suited to monday?
&lt;/h3&gt;

&lt;p&gt;monday is better suited to marketing, operations, product, PMO, and cross-functional teams centered on projects, tasks, and team collaboration. When members need to quickly understand owners, deadlines, current status, and project risks while also using boards, Gantt charts, automation, and management dashboards, monday can be more intuitive than maintaining complex worksheets directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. SmartSuite: For Teams Managing Projects, Data, and Business Processes Together
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://www.smartsuite.com/" rel="noopener noreferrer"&gt;https://www.smartsuite.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://help.smartsuite.com/en/" rel="noopener noreferrer"&gt;https://help.smartsuite.com/en/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://www.smartsuite.com/pricing" rel="noopener noreferrer"&gt;https://www.smartsuite.com/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Is SmartSuite?
&lt;/h3&gt;

&lt;p&gt;SmartSuite is a work management platform for business teams. It uses Solutions, Tables, and Records as its basic structure. Within one workspace, teams can manage projects, tasks, customers, contracts, risks, assets, and other business records, then view progress through tables, boards, calendars, timelines, Gantt charts, and dashboards.&lt;/p&gt;

&lt;p&gt;SmartSuite is also gradually adding AI capabilities. Users can describe the business they need to manage in natural language, and AI Solution Generator can automatically create a solution containing tables, fields, and relationships. AI Field Agents can use field content from records to generate summaries, classifications, recommendations, or structured results and write those results directly back to the records.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz556syu1ccxpnl2j0ax0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz556syu1ccxpnl2j0ax0.png" alt="SmartSuite1-y8czgu.png" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Is It a Suitable Smartsheet Alternative?
&lt;/h3&gt;

&lt;p&gt;For teams already using Smartsheet to manage projects, customers, suppliers, or operational processes, SmartSuite provides a similar table view while adding more complete record pages, linked data, and templates for multiple scenarios.&lt;/p&gt;

&lt;p&gt;For example, a team can create separate customer, project, and task tables and connect them through linked records. Project managers can manage task dependencies and schedules in Gantt charts, business users can open individual records to view files, comments, checklists, and activity history, and management can monitor overall progress through dashboards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences From Smartsheet
&lt;/h3&gt;

&lt;p&gt;Smartsheet retains a strong worksheet-based approach, with many operations centered on rows, columns, formulas, and cross-sheet reports. SmartSuite places greater emphasis on records and the relationships among them. A project record can link to customers, tasks, budgets, risks, and deliverables while providing its own detail page and collaboration information.&lt;/p&gt;

&lt;p&gt;This design positions SmartSuite between a traditional project management tool and a business data platform. Teams can use boards, Gantt charts, and timelines to move projects forward while connecting projects with customers, contracts, assets, and other business information. Linked records can also be used across different Solutions, reducing duplicate maintenance of the same data in multiple workspaces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Teams Is It Best For?
&lt;/h3&gt;

&lt;p&gt;SmartSuite is better suited to teams that manage both projects and structured business records, including professional services, marketing operations, product management, construction projects, procurement, supplier management, and lightweight CRM teams. When teams need boards, Gantt charts, and task dependencies while also connecting customers, projects, files, budgets, and risks, SmartSuite is more complete than a task-only management tool.&lt;/p&gt;

&lt;p&gt;It is also suitable for teams that want to adopt ready-made templates and cloud services quickly and do not require self-hosting. AI Solution Generator can shorten initial configuration time, while AI Field Agents can automatically organize content, classify information, and suggest next steps after records are updated.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Airtable: For Teams Managing Linked Data and Flexible Business Processes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://www.airtable.com/" rel="noopener noreferrer"&gt;https://www.airtable.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://support.airtable.com/docs" rel="noopener noreferrer"&gt;https://support.airtable.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://airtable.com/pricing" rel="noopener noreferrer"&gt;https://airtable.com/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Is Airtable?
&lt;/h3&gt;

&lt;p&gt;Airtable is a no-code application platform built on a relational database. Teams can enter and organize data much like they would in a spreadsheet while using linked records, lookups, rollups, and formulas to connect customers, projects, tasks, content, products, and other information. Interface Designer can create operating interfaces for different teams from the same data, while automation connects notifications, record updates, and external tools.&lt;/p&gt;

&lt;p&gt;Airtable is also strengthening its AI capabilities. Omni can create and adjust tables, interfaces, and automations from natural-language instructions. Field Agents can use record content to conduct research, classify information, generate content, and analyze feedback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsza1wudm1c50y239qggi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsza1wudm1c50y239qggi.png" alt="Airtable1-ky7686.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Is It a Suitable Smartsheet Alternative?
&lt;/h3&gt;

&lt;p&gt;Airtable provides tables, boards, calendars, timelines, forms, interfaces, and automation, covering common Smartsheet needs such as data collection, project tracking, and team collaboration. It is stronger at linked data. For example, teams can create separate tables for customers and projects, projects and tasks, or products and suppliers, then keep information synchronized through linked records and reduce duplicate maintenance across multiple tables.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences From Smartsheet
&lt;/h3&gt;

&lt;p&gt;Smartsheet is more focused on managing projects through worksheets, task progress, and cross-sheet reports, while Airtable is built on relational data. Users can create one-to-many and many-to-many relationships through linked records and use Interface to turn underlying data into pages for marketing, product, operations, or management teams.&lt;/p&gt;

&lt;p&gt;This structure is suitable for scenarios involving many data objects and complex relationships. However, teams that rely heavily on Smartsheet’s task dependencies, resource management, and project portfolio capabilities should still confirm whether Airtable can cover their existing processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofoa5es4ixxqtspxjvby.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofoa5es4ixxqtspxjvby.png" alt="Airtable2-c1m062.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Teams Is It Best For?
&lt;/h3&gt;

&lt;p&gt;Airtable is better suited to marketing, content, product, research, and operations teams. Common scenarios include content calendars, product roadmaps, campaign management, lightweight CRM, user research, and asset management. Teams that want to retain the flexibility of spreadsheet-style operations while connecting multiple data tables, configuring role-specific interfaces, and adding automation or AI can prioritize Airtable.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. ClickUp: For Teams That Want to Consolidate Multiple Project Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://clickup.com/" rel="noopener noreferrer"&gt;https://clickup.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://help.clickup.com/hc/en-us" rel="noopener noreferrer"&gt;https://help.clickup.com/hc/en-us&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://clickup.com/pricing" rel="noopener noreferrer"&gt;https://clickup.com/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Is ClickUp?
&lt;/h3&gt;

&lt;p&gt;ClickUp is an all-in-one work management platform that brings tasks, documents, whiteboards, goals, chat, calendars, and dashboards into one workspace. Teams can manage projects through list, board, Gantt, and timeline views, and use ClickUp Brain, AI agents, and automation for task summaries, content generation, information queries, and process execution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnmp4zzcbpyqe2ptz1fmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnmp4zzcbpyqe2ptz1fmx.png" alt="ClickUp1-y3qoc0.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Is It a Suitable Smartsheet Alternative?
&lt;/h3&gt;

&lt;p&gt;ClickUp can cover common Smartsheet needs such as task assignment, project progress, automation, Gantt charts, and dashboards. Its task structure includes owners, priorities, dependencies, time tracking, and custom fields, while documents, communication, and goal management are integrated into project spaces. It is suitable for teams that want to reduce switching among multiple tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences From Smartsheet
&lt;/h3&gt;

&lt;p&gt;Smartsheet is closer to a spreadsheet with project management capabilities, while ClickUp is centered on tasks and project execution. Team members primarily open tasks to review requirements, update progress, and communicate, making daily collaboration more centralized. Complex formulas, cross-table calculations, and large volumes of structured business data are not its main strengths.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr3jfjllflk3358ddhp5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr3jfjllflk3358ddhp5w.png" alt="ClickUp2-vgbb2y.png" width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Teams Is It Best For?
&lt;/h3&gt;

&lt;p&gt;ClickUp is suitable for product, engineering, marketing, and operations teams, especially those currently using separate task, document, chat, and goal-management tools and wanting to bring them into one platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Asana: For Teams That Emphasize Ownership and Project Processes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Product Information
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://asana.com/" rel="noopener noreferrer"&gt;https://asana.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://help.asana.com/" rel="noopener noreferrer"&gt;https://help.asana.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pricing: &lt;a href="https://asana.com/pricing" rel="noopener noreferrer"&gt;https://asana.com/pricing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Is Asana?
&lt;/h3&gt;

&lt;p&gt;Asana is a collaborative project management platform organized around projects, tasks, owners, deadlines, and dependencies. Teams can use lists, boards, calendars, timelines, and Gantt charts to move projects forward, while forms, rules, dashboards, and portfolios support cross-team work. Asana also provides AI Studio and AI Teammates for building intelligent workflows, generating status reports, and assisting with project tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fewlo0voq2mg3mqtcxpd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fewlo0voq2mg3mqtcxpd0.png" alt="Asana1-jj32p2.png" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Is It a Suitable Smartsheet Alternative?
&lt;/h3&gt;

&lt;p&gt;Asana covers common Smartsheet needs such as task assignment, project timelines, dependencies, automation, and progress reporting. Task ownership and project processes are clearly defined, allowing members to see what they are responsible for, when work is due, and which tasks are blocking the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Differences From Smartsheet
&lt;/h3&gt;

&lt;p&gt;Smartsheet allows teams to organize data freely around worksheets, while Asana places greater emphasis on standardized task execution. It is suitable for breaking plans into projects, milestones, and tasks, but it is less flexible for complex data tables, formula calculations, and relationships across multiple tables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcrdlf55p2o30xhg5v6t3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcrdlf55p2o30xhg5v6t3.png" alt="Asana2-yfhgak.png" width="800" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Teams Is It Best For?
&lt;/h3&gt;

&lt;p&gt;Asana is suitable for marketing campaigns, product launches, operational plans, and cross-functional projects, especially for teams that want clear task owners, deadlines, dependencies, and project goals.&lt;/p&gt;

&lt;p&gt;Asana is better suited to project execution than directly replacing a complex database. The Advanced plan costs significantly more than Starter, while cross-project management capabilities such as portfolios, goals, and workloads are mainly available in Advanced and higher plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three-Year Pricing Summary
&lt;/h2&gt;

&lt;p&gt;Even when plans are labeled Team, Standard, or Pro, the included project views, automation, permissions, and data management capabilities can differ substantially among products.&lt;/p&gt;

&lt;p&gt;The following table provides an approximate view of each product’s budget.&lt;/p&gt;

&lt;p&gt;The calculations use publicly listed annual billing prices for five and 15 editable members over three consecutive years. For each product, we selected a representative plan that is more suitable for ongoing team use.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;th&gt;Reference Plan&lt;/th&gt;
&lt;th&gt;Three-Year Cost for 5 Users&lt;/th&gt;
&lt;th&gt;Three-Year Cost for 15 Users&lt;/th&gt;
&lt;th&gt;Pricing Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smartsheet&lt;/td&gt;
&lt;td&gt;Business&lt;/td&gt;
&lt;td&gt;$3,420&lt;/td&gt;
&lt;td&gt;$10,260&lt;/td&gt;
&lt;td&gt;Per-member subscription; includes timelines, workload management, and unlimited automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NocoBase&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;$800&lt;/td&gt;
&lt;td&gt;$800&lt;/td&gt;
&lt;td&gt;One-time license with no user-based pricing; server and maintenance costs are separate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Baserow&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;$3,240&lt;/td&gt;
&lt;td&gt;$9,720&lt;/td&gt;
&lt;td&gt;Per-paid-user subscription; includes more complete role and field permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monday&lt;/td&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$3,420&lt;/td&gt;
&lt;td&gt;$10,260&lt;/td&gt;
&lt;td&gt;Per-seat subscription; includes higher automation limits and workload management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmartSuite&lt;/td&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;$5,760&lt;/td&gt;
&lt;td&gt;$17,280&lt;/td&gt;
&lt;td&gt;Per-editor subscription; includes advanced permissions and higher data capacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airtable&lt;/td&gt;
&lt;td&gt;Team&lt;/td&gt;
&lt;td&gt;$3,600&lt;/td&gt;
&lt;td&gt;$10,800&lt;/td&gt;
&lt;td&gt;Primarily charges for editors; read-only users generally do not require paid seats&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClickUp&lt;/td&gt;
&lt;td&gt;Business&lt;/td&gt;
&lt;td&gt;$2,160&lt;/td&gt;
&lt;td&gt;$6,480&lt;/td&gt;
&lt;td&gt;Per-user subscription; AI and some enterprise management capabilities may require additional purchases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asana&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;$4,498.20&lt;/td&gt;
&lt;td&gt;$13,494.60&lt;/td&gt;
&lt;td&gt;Per-user subscription; includes portfolios, workload management, and approvals&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We hope this article helps you find a Smartsheet alternative that better fits your team. Feel free to share it with teams evaluating project management tools, multi-dimensional spreadsheets, open-source self-hosted platforms, or enterprise business systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-complex-relational-models" rel="noopener noreferrer"&gt;5 Open-Source AI No-Code Tools for Complex Relational Data Models &lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/what-is-ai-no-code" rel="noopener noreferrer"&gt;What Is AI No-Code? A Practical Guide to No-Code Platforms in the AI Era&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-github-9" rel="noopener noreferrer"&gt;9 Open-Source AI No-Code Tools on GitHub Worth Watching&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/github-open-source-ai-agent-tools-16" rel="noopener noreferrer"&gt;14 Open Source AI Agent Tools with the Most GitHub Stars&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/top-open-source-ai-assistant-tools-github-stars" rel="noopener noreferrer"&gt;Top 8 Open Source AI Assistant Tools by GitHub Stars&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/workbuddy-open-source-tools" rel="noopener noreferrer"&gt;6 Open Source Tools to Use with WorkBuddy&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/6-github-top-open-source-ai-tools-for-ai-agents" rel="noopener noreferrer"&gt;Top 6 Open Source AI Tools by GitHub Stars for Stronger AI Agents&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-internal-tools-self-hosted-ai-agent-hermes" rel="noopener noreferrer"&gt;5 Open-Source Internal Tools to Use with Hermes Agent&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/openclaw-open-source-enterprise-tools" rel="noopener noreferrer"&gt;OpenClaw and 5 Open-Source Tools for Monitoring Business Workflows&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/opencode-open-source-tools-ai-agents" rel="noopener noreferrer"&gt;What Open-Source Tools Work Well with OpenCode? 5 Projects to Try&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/building-internal-tools-with-codex" rel="noopener noreferrer"&gt;Building Internal Tools with Codex: 6 Open-Source Projects for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-tools-after-claude-code" rel="noopener noreferrer"&gt;After Claude Code: 6 Open-Source Tools You Should Know&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-enterprise-software-development" rel="noopener noreferrer"&gt;Top 10 Open-Source AI And No-Code Tools for Enterprise Software Development&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>How a Volunteer Fire Department Manages 200 Callouts a Year with NocoBase</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Thu, 23 Jul 2026 07:49:58 +0000</pubDate>
      <link>https://dev.to/nocobase/how-a-volunteer-fire-department-manages-200-callouts-a-year-with-nocobase-53mm</link>
      <guid>https://dev.to/nocobase/how-a-volunteer-fire-department-manages-200-callouts-a-year-with-nocobase-53mm</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/polish-volunteer-fire-department-nocobase-case-study" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/polish-volunteer-fire-department-nocobase-case-study&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Volunteer Fire Department in Poland
&lt;/h2&gt;

&lt;p&gt;Volunteer fire departments are an essential part of Poland’s fire protection system. Although their members serve their communities as volunteers, they take on many of the same responsibilities as professional fire services, including regular training, emergency response, vehicle and equipment management, and tracking personnel certifications.&lt;/p&gt;

&lt;p&gt;OSP Radlin II is one of these active units and the busiest volunteer fire department in its county. Its operational team includes 30 fully trained responders and handles around 200 emergency callouts each year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7f6cf6qbo5tzwg5i37gh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7f6cf6qbo5tzwg5i37gh.png" alt="OSP1-1klo5h.png" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For every callout, the team must ensure that responders are properly qualified, vehicles are ready, and equipment is available. They also need to accurately record who participated, how long the operation lasted, how far each vehicle traveled, and which supplies were used.&lt;/p&gt;

&lt;p&gt;To manage this work more effectively, the members of OSP Radlin II began searching for a system that could better support the department’s real operational needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Google Drive to NocoBase
&lt;/h2&gt;

&lt;p&gt;Previously, OSP Radlin II mainly relied on free cloud storage tools such as Google Drive to store and share information.&lt;/p&gt;

&lt;p&gt;As incident records, member details, medical checks, rescue certifications, vehicle inspections, and equipment records continued to grow, important information became scattered across multiple files. There was also no consistent way to structure or update the data.&lt;/p&gt;

&lt;p&gt;Cloud storage worked well for keeping documents, but it could not support the workflows needed to run an active fire department.&lt;/p&gt;

&lt;p&gt;The team needed a centralized, secure platform that could be fully adapted to the department’s real operational needs.&lt;/p&gt;

&lt;p&gt;To find the right solution, they tested more than ten similar platforms. After several rounds of evaluation, they chose NocoBase.&lt;/p&gt;

&lt;h2&gt;
  
  
  An Operations System Built by the Whole Team
&lt;/h2&gt;

&lt;p&gt;From the start, the system was a collaborative effort. Members contributed to data entry, workflow design, and system maintenance based on their responsibilities, gradually creating a clear division of work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some members handle administrative work, including:

&lt;ul&gt;
&lt;li&gt;Tracking equipment inspection deadlines&lt;/li&gt;
&lt;li&gt;Managing routine medical checks&lt;/li&gt;
&lt;li&gt;Maintaining rescue certifications&lt;/li&gt;
&lt;li&gt;Handling funding applications and other administrative tasks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Commanders record information from each emergency callout, including:

&lt;ul&gt;
&lt;li&gt;Incident records&lt;/li&gt;
&lt;li&gt;Callout details&lt;/li&gt;
&lt;li&gt;Lists of participating crew members&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system is no longer maintained by a single person. Instead, the members directly involved in each area keep the information up to date. Today, it supports most of the fire department’s day-to-day operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  System Homepage
&lt;/h3&gt;

&lt;p&gt;The homepage gives members a single place to access their work. Calendars, tasks, announcements, member information, and quick actions are all available from one interface, helping each role quickly find what they need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu3t2sq0n0a03ufqsnxel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu3t2sq0n0a03ufqsnxel.png" alt="System Homepage-phtwf6.png" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track equipment inspection deadlines&lt;/li&gt;
&lt;li&gt;Manage routine medical checks&lt;/li&gt;
&lt;li&gt;Track rescue certifications&lt;/li&gt;
&lt;li&gt;Manage funding applications and other administrative work&lt;/li&gt;
&lt;li&gt;Record emergency responses&lt;/li&gt;
&lt;li&gt;Add incident descriptions&lt;/li&gt;
&lt;li&gt;Maintain crew participation lists&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Emergency Response and Incident Management
&lt;/h3&gt;

&lt;p&gt;Members can quickly create emergency response records from a tablet or mobile phone. They can enter departure and return times, incident type, location, vehicles used, participating crew members, and supplies consumed.&lt;/p&gt;

&lt;p&gt;NocoBase then turns this information into useful statistics, including the number and types of incidents, vehicle mileage, and the total time each firefighter has spent on emergency responses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjsvo4mcg83d3m5zpq9x3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjsvo4mcg83d3m5zpq9x3.png" alt="Emergency Response-o84sot.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Personnel, Qualifications, and Administration
&lt;/h3&gt;

&lt;p&gt;Beyond incident management, the department uses NocoBase to maintain member profiles, medical clearances, rescue certifications, and other specialist qualifications.&lt;/p&gt;

&lt;p&gt;Members responsible for administrative work also use the system to track funding applications and other day-to-day office tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgz6263ptcrprt2ct8udh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgz6263ptcrprt2ct8udh.png" alt="Personnel-0s0lph.png" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The team has also created a separate project board for non-emergency work, such as fire station renovations, community events, and other internal projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frwgotbr26ocdpvvhkjb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frwgotbr26ocdpvvhkjb4.png" alt="Personnel2-lkmt1z.png" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Vehicles, Equipment, and Maintenance
&lt;/h3&gt;

&lt;p&gt;Fire engines, trailers, and firefighting equipment are all managed in the same system.&lt;/p&gt;

&lt;p&gt;Members can record vehicle usage, mileage, technical condition, annual inspection dates, and upcoming equipment inspection or maintenance deadlines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwnb5u73yo1w0597se12h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwnb5u73yo1w0597se12h.png" alt="Vehicles-h24bxn.png" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Automating Routine Work
&lt;/h3&gt;

&lt;p&gt;As more information was centralized in NocoBase, the department began using workflows to automate tasks that had previously relied on manual checks and reminders.&lt;/p&gt;

&lt;h4&gt;
  
  
  Deadline Reminders
&lt;/h4&gt;

&lt;p&gt;The system automatically monitors and sends reminders for important dates that may affect operational readiness, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Member medical examination deadlines&lt;/li&gt;
&lt;li&gt;Fire vehicle inspection dates&lt;/li&gt;
&lt;li&gt;Member birthdays and other important dates&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Emergency Response Hours
&lt;/h4&gt;

&lt;p&gt;Based on incident records, the system automatically calculates how much time each firefighter has spent participating in emergency operations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Team Communication
&lt;/h4&gt;

&lt;p&gt;An automated announcement system allows management to share important updates more consistently through both email and in-app notifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  A System That Continues to Grow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The OSP Radlin II system is now about 90% complete. It covers around 80 members across the organization, with approximately 20 active users regularly entering and maintaining data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwhml5bq4ggrv4g2drh3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwhml5bq4ggrv4g2drh3.png" alt="System-5atsq8.png" width="800" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By bringing its data into one place, the department can more easily track emergency callouts, vehicle mileage, equipment status, and the time each firefighter spends on emergency responses.&lt;/p&gt;

&lt;p&gt;More importantly, the system is not a one-time project that stops evolving once it goes live. As more members use it, new needs continue to emerge, and the team keeps adding new features, automations, and operational workflows.&lt;/p&gt;

&lt;p&gt;OSP Radlin II has no dedicated software development team. Instead, its members have used their deep understanding of the department’s day-to-day work to gradually turn real firefighting operations into a system that can support the organization for years and continue evolving with its needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More Customer Stories:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/astrolab-nocobase" rel="noopener noreferrer"&gt;From Paperwork to Digital Public Services in France&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/deliver-complex-oa-system-nocobase-3-months" rel="noopener noreferrer"&gt;How to Deliver a Complex OA System in 3 Months with NocoBase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/medical-device-manufacturer-builds-self-hosted-management-system-with-nocobase" rel="noopener noreferrer"&gt;Case Study: Digitizing Medical Manufacturing Workflows with NocoBase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/software-vendor-boosts-delivery-efficiency-with-nocobase" rel="noopener noreferrer"&gt;Software Vendor Boosts Delivery Efficiency by 70% with NocoBase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/an-erp-built-with-nocobase" rel="noopener noreferrer"&gt;Community Spotlight: Building a Real-World ERP with NocoBase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/shenzhen-chuanglianyun-tech-development-methodology" rel="noopener noreferrer"&gt;Inside: How an 8-Person Team Delivers at Enterprise Speed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/ai-multimodal-platform" rel="noopener noreferrer"&gt;Built an AI Multimodal R&amp;amp;D Platform in Days — with NocoBase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/nocobase-in-russia" rel="noopener noreferrer"&gt;NocoBase in Russia: Multi-Scenario Digital Solutions in Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nocobase.com/en/blog/university-course" rel="noopener noreferrer"&gt;NocoBase Enters German University Classrooms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>Weekly Updates: Added RunJS API for AI Employee Tasks in JS Blocks</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Mon, 20 Jul 2026 08:19:35 +0000</pubDate>
      <link>https://dev.to/nocobase/weekly-updates-added-runjs-api-for-ai-employee-tasks-in-js-blocks-3mlc</link>
      <guid>https://dev.to/nocobase/weekly-updates-added-runjs-api-for-ai-employee-tasks-in-js-blocks-3mlc</guid>
      <description>&lt;p&gt;Summarize the weekly product update logs, and the latest releases can be checked on &lt;a href="https://www.nocobase.com/en/blog/timeline" rel="noopener noreferrer"&gt;our blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NocoBase is currently updated across three branches: &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, and &lt;code&gt;develop&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" alt="version.png" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;main&lt;/code&gt;: The most stable version to date, recommended for installation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;next&lt;/code&gt;: Beta version, contains upcoming new features and has been preliminarily tested. There might be some known or unknown issues. It is mainly used to collect feedback from test users and further optimize features. Ideal for test users who want to experience new features early and provide feedback.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;develop&lt;/code&gt;: Alpha version, contains the latest feature code, may be incomplete or unstable, and is mainly used for internal development and rapid iteration. Suited for technical users interested in cutting-edge product capabilities, but not recommended for production use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  main
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" alt="main.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.1.28
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-19&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[client-v2]&lt;/strong&gt; Fix mobile menus hidden incorrectly by device type rules (&lt;a href="https://github.com/nocobase/nocobase/pull/10123" rel="noopener noreferrer"&gt;#10123&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Fix occasional errors when opening approval task details directly by @zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.27
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-19&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[client-v2]&lt;/strong&gt; Added Myanmar (&lt;code&gt;my-MM&lt;/code&gt;) to the languages selectable in System Settings. (&lt;a href="https://github.com/nocobase/nocobase/pull/10131" rel="noopener noreferrer"&gt;#10131&lt;/a&gt;) by @hongboji&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[resourcer]&lt;/strong&gt; Fixed pre-action workflows not triggering when used together with before-save approval workflows. (&lt;a href="https://github.com/nocobase/nocobase/pull/10119" rel="noopener noreferrer"&gt;#10119&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fix mobile popups exceeding the screen and hiding the close button (&lt;a href="https://github.com/nocobase/nocobase/pull/10118" rel="noopener noreferrer"&gt;#10118&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix inconsistent route state after renaming a newly enabled page tab (&lt;a href="https://github.com/nocobase/nocobase/pull/10117" rel="noopener noreferrer"&gt;#10117&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix an error that could prevent approval pages from loading (&lt;a href="https://github.com/nocobase/nocobase/pull/10116" rel="noopener noreferrer"&gt;#10116&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[utils]&lt;/strong&gt; Ensured server-side outbound request redirects also comply with &lt;code&gt;SERVER_REQUEST_WHITELIST&lt;/code&gt; (&lt;a href="https://github.com/nocobase/nocobase/pull/10109" rel="noopener noreferrer"&gt;#10109&lt;/a&gt;) by @mytharcher&lt;br&gt;
Reference: &lt;a href="https://docs.nocobase.com/get-started/installation/env#server_request_whitelist" rel="noopener noreferrer"&gt;Environment variables&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Fix messages overriding by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.26
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-17&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[undefined]&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Updated the data source documentation structure, links, and localized pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/10108" rel="noopener noreferrer"&gt;#10108&lt;/a&gt;) by @hongboji
Reference: &lt;a href="//docs/docs/en/data-sources/index.md"&gt;Data sources&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[server]&lt;/strong&gt; Prevented uploaded XML and other active content files from executing scripts in the application origin (&lt;a href="https://github.com/nocobase/nocobase/pull/10104" rel="noopener noreferrer"&gt;#10104&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[database]&lt;/strong&gt; Fixed an SQL injection risk when reading database view metadata (&lt;a href="https://github.com/nocobase/nocobase/pull/10115" rel="noopener noreferrer"&gt;#10115&lt;/a&gt;) by @2013xile&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reset unwanted border and shadow styles on Markdown h2 headings. (&lt;a href="https://github.com/nocobase/nocobase/pull/10107" rel="noopener noreferrer"&gt;#10107&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Corrected the Urdu label and added a separate Uzbek option to the System Settings language list. (&lt;a href="https://github.com/nocobase/nocobase/pull/10090" rel="noopener noreferrer"&gt;#10090&lt;/a&gt;) by @hongboji&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Fixed an error when sending files pasted into the AI employee chat input (&lt;a href="https://github.com/nocobase/nocobase/pull/10106" rel="noopener noreferrer"&gt;#10106&lt;/a&gt;) by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File storage: S3(Pro)]&lt;/strong&gt; Fixed S3-compatible file URLs omitting the configured storage path, which caused uploaded logos and attachments to return 404 errors by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.25
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-15&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[DingTalk]&lt;/strong&gt; Added DingTalk Stream mode support for organization event synchronization. by @chenzhizdt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Auth: LDAP]&lt;/strong&gt; Added LDAP user data sync source support, including optional AD department synchronization. by @chenzhizdt&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[ai]&lt;/strong&gt; Reduced main-process memory usage when parsing uploaded knowledge base documents. (&lt;a href="https://github.com/nocobase/nocobase/pull/10083" rel="noopener noreferrer"&gt;#10083&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[undefined]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File URLs now use stable NocoBase access URLs so permissions can be checked before redirecting to storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/10047" rel="noopener noreferrer"&gt;#10047&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File storage: S3(Pro)]&lt;/strong&gt; S3 Pro uploads now return the created file record with permanent file URLs. by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[RabbitMQ queue adapter]&lt;/strong&gt; Enhance the channel management and error recovery capabilities of the RabbitMQ adapter by @sdp-ncd&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[User data synchronization]&lt;/strong&gt; Fixed external department sync order so child departments can be reparented correctly when their parent is synced later. (&lt;a href="https://github.com/nocobase/nocobase/pull/10028" rel="noopener noreferrer"&gt;#10028&lt;/a&gt;) by @chenzhizdt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Collection field: Markdown(Vditor)]&lt;/strong&gt; Fixed iframe sanitization for v1 Markdown rendering and editing. (&lt;a href="https://github.com/nocobase/nocobase/pull/10096" rel="noopener noreferrer"&gt;#10096&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow]&lt;/strong&gt; Fixed hidden fields being included when workflow serializes appended association data (&lt;a href="https://github.com/nocobase/nocobase/pull/10086" rel="noopener noreferrer"&gt;#10086&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt; Fixed AI tool-call approvals to authorize against the message's owning conversation before updating decisions. (&lt;a href="https://github.com/nocobase/nocobase/pull/10077" rel="noopener noreferrer"&gt;#10077&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed file preview, permanent URL handling, and upload routing for external NocoBase file collections, including S3 Pro uploads by @mytharcher&lt;/li&gt;
&lt;li&gt;Fixed workflow AI employees being unable to read attachments from External NocoBase data sources by @2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.24
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-13&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed other column content showing through fixed v2 table columns when quick edit is enabled. (&lt;a href="https://github.com/nocobase/nocobase/pull/10076" rel="noopener noreferrer"&gt;#10076&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed v2 scan input camera preview layout issues on iOS Chrome. (&lt;a href="https://github.com/nocobase/nocobase/pull/10081" rel="noopener noreferrer"&gt;#10081&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[app]&lt;/strong&gt; Fixed Redis cache configuration ignoring the dedicated cache URL (&lt;a href="https://github.com/nocobase/nocobase/pull/10065" rel="noopener noreferrer"&gt;#10065&lt;/a&gt;) by @2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Action: Batch edit]&lt;/strong&gt; Fixed Markdown editor initialization failure when a V2 form includes a &lt;code&gt;process&lt;/code&gt; field. (&lt;a href="https://github.com/nocobase/nocobase/pull/10080" rel="noopener noreferrer"&gt;#10080&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Fixed AI attachment handling to avoid trusting client-provided file paths or URLs. (&lt;a href="https://github.com/nocobase/nocobase/pull/10037" rel="noopener noreferrer"&gt;#10037&lt;/a&gt;) by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt; Fixed manual workflow execution returning an error when a valid request does not start an execution. (&lt;a href="https://github.com/nocobase/nocobase/pull/10049" rel="noopener noreferrer"&gt;#10049&lt;/a&gt;) by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Redis worker ID allocator]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved Redis worker ID isolation and failure diagnostics by @2013xile&lt;/li&gt;
&lt;li&gt;Restored standalone startup without Redis worker ID configuration by @2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Filter approval file associations by current user ownership when the temporary switch is enabled. by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  next
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0xys8cxci7kol0jjde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0xys8cxci7kol0jjde.png" alt="next.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.2.0-beta.15
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-16&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tabs on pages, subpages and pop-ups support the configuration of linkage rules (&lt;a href="https://github.com/nocobase/nocobase/pull/10099" rel="noopener noreferrer"&gt;#10099&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Add an environment variable to configure legacy and modern route entry modes. (&lt;a href="https://github.com/nocobase/nocobase/pull/9891" rel="noopener noreferrer"&gt;#9891&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Added RunJS APIs for triggering AI employee tasks from JS blocks. (&lt;a href="https://github.com/nocobase/nocobase/pull/10061" rel="noopener noreferrer"&gt;#10061&lt;/a&gt;) by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Public forms]&lt;/strong&gt; In the v1 public form, support creating v2 forms and prohibit creating v1 forms (&lt;a href="https://github.com/nocobase/nocobase/pull/10045" rel="noopener noreferrer"&gt;#10045&lt;/a&gt;) by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Block: Comment]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved comment block settings with data scope, default sorting, selectable page size, optional last-page jumping, and scalar owner field mapping. (&lt;a href="https://github.com/nocobase/nocobase/pull/9954" rel="noopener noreferrer"&gt;#9954&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;li&gt;Added a comments block. (&lt;a href="https://github.com/nocobase/nocobase/pull/9916" rel="noopener noreferrer"&gt;#9916&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Notification: Email]&lt;/strong&gt; Migrated the workflow notification node client to v2, restored channel-specific notification forms, and kept legacy workflow route compatibility for migrated notification configuration. (&lt;a href="https://github.com/nocobase/nocobase/pull/9817" rel="noopener noreferrer"&gt;#9817&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: mailer node]&lt;/strong&gt; Added v2 client support for configuring the workflow mailer node. (&lt;a href="https://github.com/nocobase/nocobase/pull/9825" rel="noopener noreferrer"&gt;#9825&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt; Migrate the Workflow settings page to the v2 client and share a reusable draggable category-tabs component via &lt;code&gt;@nocobase/client-v2&lt;/code&gt;. (&lt;a href="https://github.com/nocobase/nocobase/pull/9645" rel="noopener noreferrer"&gt;#9645&lt;/a&gt;) by @Molunerfinn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Database transaction node]&lt;/strong&gt; Added a client-v2 implementation for the workflow database transaction node while preserving the legacy client entry. by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Record history]&lt;/strong&gt; Added client v2 support for the record history plugin. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Add approval initiation and todo blocks for v2 pages by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[DingTalk]&lt;/strong&gt; Added DingTalk Stream mode support for organization event synchronization. by @chenzhizdt&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[undefined]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updated the data source documentation structure, links, and localized pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/10108" rel="noopener noreferrer"&gt;#10108&lt;/a&gt;) by @hongboji
Reference: &lt;a href="//docs/docs/en/data-sources/index.md"&gt;Data sources&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Updated the data source documentation structure, links, and localized pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/10108" rel="noopener noreferrer"&gt;#10108&lt;/a&gt;) by @hongboji
Reference: &lt;a href="//docs/docs/en/data-sources/index.md"&gt;Data sources&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;File URLs now use stable NocoBase access URLs so permissions can be checked before redirecting to storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/10103" rel="noopener noreferrer"&gt;#10103&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;File URLs now use stable NocoBase access URLs so permissions can be checked before redirecting to storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/10047" rel="noopener noreferrer"&gt;#10047&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;Refined Russian documentation translation for improved wording, readability, and terminology consistency. (&lt;a href="https://github.com/nocobase/nocobase/pull/9942" rel="noopener noreferrer"&gt;#9942&lt;/a&gt;) by @sembaev-a-a&lt;/li&gt;
&lt;li&gt;Refined Russian documentation translation for improved wording, readability, and terminology consistency. (&lt;a href="https://github.com/nocobase/nocobase/pull/9816" rel="noopener noreferrer"&gt;#9816&lt;/a&gt;) by @sembaev-a-a&lt;/li&gt;
&lt;li&gt;Improved AI knowledge base retrieval and documentation. (&lt;a href="https://github.com/nocobase/nocobase/pull/9765" rel="noopener noreferrer"&gt;#9765&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;Refined Russian documentation translation for improved wording, readability, and terminology consistency. (&lt;a href="https://github.com/nocobase/nocobase/pull/9754" rel="noopener noreferrer"&gt;#9754&lt;/a&gt;) by @sembaev-a-a&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refactor Markdown Vditor into a unified plugin-backed Markdown engine with compatibility bridges for existing Markdown block and Vditor field plugins. (&lt;a href="https://github.com/nocobase/nocobase/pull/9998" rel="noopener noreferrer"&gt;#9998&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Refactor Markdown Vditor into a unified plugin-backed Markdown engine with compatibility bridges for existing Markdown block and Vditor field plugins. (&lt;a href="https://github.com/nocobase/nocobase/pull/9998" rel="noopener noreferrer"&gt;#9998&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Manual node]&lt;/strong&gt; Show manual workflow tasks in the V2 task center and guide users to the legacy page for processing (&lt;a href="https://github.com/nocobase/nocobase/pull/10085" rel="noopener noreferrer"&gt;#10085&lt;/a&gt;) by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unsupported workflow v2 canvas nodes now keep the normal node card actions while showing the node type as unsupported. (&lt;a href="https://github.com/nocobase/nocobase/pull/10054" rel="noopener noreferrer"&gt;#10054&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;Simplified workflow v2 create/update field assignment, improved selected variable display, and avoided generating unused assign-form model data. (&lt;a href="https://github.com/nocobase/nocobase/pull/9887" rel="noopener noreferrer"&gt;#9887&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Exported workflow v2 canvas extension APIs for downstream workflow node plugins. (&lt;a href="https://github.com/nocobase/nocobase/pull/9834" rel="noopener noreferrer"&gt;#9834&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Migrate the workflow output node configuration to v2 and align v2 workflow result viewers with the legacy display behavior for string results. (&lt;a href="https://github.com/nocobase/nocobase/pull/9813" rel="noopener noreferrer"&gt;#9813&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Migrate the workflow end node to the v2 implementation. (&lt;a href="https://github.com/nocobase/nocobase/pull/9795" rel="noopener noreferrer"&gt;#9795&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved AI employee tool settings, data-query guardrails, relation field querying, and malformed tool call diagnostics. (&lt;a href="https://github.com/nocobase/nocobase/pull/10042" rel="noopener noreferrer"&gt;#10042&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;Improved AI employee web search to reduce unnecessary model reasoning and better use provider-specific thinking controls. (&lt;a href="https://github.com/nocobase/nocobase/pull/9996" rel="noopener noreferrer"&gt;#9996&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;Removed the deprecated Datasource entry from AI employee settings and context selection in the v2 UI. (&lt;a href="https://github.com/nocobase/nocobase/pull/9988" rel="noopener noreferrer"&gt;#9988&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;Migrated the AI employee plugin to client-v2. (&lt;a href="https://github.com/nocobase/nocobase/pull/9794" rel="noopener noreferrer"&gt;#9794&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection: SQL]&lt;/strong&gt; Not user-facing; added client-v2 unit test coverage for migrated plugins. (&lt;a href="https://github.com/nocobase/nocobase/pull/9967" rel="noopener noreferrer"&gt;#9967&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Block: Comment]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved comment submit actions and fixed related comment/user form submission issues. (&lt;a href="https://github.com/nocobase/nocobase/pull/10002" rel="noopener noreferrer"&gt;#10002&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;li&gt;Added the new comment block plugin to the NocoBase preset and marked the legacy comments plugin as deprecated. (&lt;a href="https://github.com/nocobase/nocobase/pull/9936" rel="noopener noreferrer"&gt;#9936&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Users]&lt;/strong&gt; Improve client-v2 test coverage for the users plugin. (&lt;a href="https://github.com/nocobase/nocobase/pull/9975" rel="noopener noreferrer"&gt;#9975&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Logger]&lt;/strong&gt; Added the Logger settings page to the client v2 runtime. (&lt;a href="https://github.com/nocobase/nocobase/pull/9933" rel="noopener noreferrer"&gt;#9933&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Aggregate node]&lt;/strong&gt; Improved v2 workflow field selection for update and aggregate query nodes, including safer associated collection selection in aggregate query nodes. (&lt;a href="https://github.com/nocobase/nocobase/pull/9938" rel="noopener noreferrer"&gt;#9938&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: JavaScript]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aligned v2 workflow request and mailer node configuration fields with legacy layout and attachment variable behavior. (&lt;a href="https://github.com/nocobase/nocobase/pull/9952" rel="noopener noreferrer"&gt;#9952&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;li&gt;Migrated the JavaScript workflow node to client-v2 (&lt;a href="https://github.com/nocobase/nocobase/pull/9805" rel="noopener noreferrer"&gt;#9805&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: JSON calculation]&lt;/strong&gt; Migrated the workflow JSON calculation node configuration UI to the v2 workflow canvas while preserving v1 canvas compatibility. (&lt;a href="https://github.com/nocobase/nocobase/pull/9902" rel="noopener noreferrer"&gt;#9902&lt;/a&gt;) by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Backup manager]&lt;/strong&gt; Tables whose collection &lt;code&gt;dataCategory&lt;/code&gt; is marked as &lt;code&gt;'runtime'&lt;/code&gt; are now excluded from backups automatically. (&lt;a href="https://github.com/nocobase/nocobase/pull/9804" rel="noopener noreferrer"&gt;#9804&lt;/a&gt;) by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Custom action event]&lt;/strong&gt; Migrated workflow triggers and bind-workflow settings to client-v2, including action trigger, custom action trigger, request interception trigger, and submit/update action workflow binding settings. (&lt;a href="https://github.com/nocobase/nocobase/pull/9845" rel="noopener noreferrer"&gt;#9845&lt;/a&gt;) by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: HTTP request node]&lt;/strong&gt; Migrated the workflow HTTP request node to client-v2. (&lt;a href="https://github.com/nocobase/nocobase/pull/9806" rel="noopener noreferrer"&gt;#9806&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[HTTP request encryption]&lt;/strong&gt; Added v2 client support for HTTP request encryption so query parameters continue to be encrypted in the v2 client. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Database transaction node]&lt;/strong&gt; Improved the v2 workflow database transaction node layout so branch labels and the commit marker have better spacing. by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI: Knowledge base]&lt;/strong&gt; Migrated the AI knowledge base settings pages to the v2 client and fixed layout and loading issues in knowledge base and vector store pages. by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File storage: S3(Pro)]&lt;/strong&gt; S3 Pro uploads now return the created file record with permanent file URLs. by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Email manager]&lt;/strong&gt; Moved the department-based mail viewing option to the V1 general mail settings page, prevented service credential saves from overwriting it, and placed V2 General settings before Service provider settings. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Corrected the Urdu label and added a separate Uzbek option to the System Settings language list. (&lt;a href="https://github.com/nocobase/nocobase/pull/10090" rel="noopener noreferrer"&gt;#10090&lt;/a&gt;) by @hongboji&lt;/li&gt;
&lt;li&gt;Fixed automatic SSO redirect providers failing to preserve authentication order in production builds (&lt;a href="https://github.com/nocobase/nocobase/pull/10100" rel="noopener noreferrer"&gt;#10100&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;li&gt;Workflow filters now preserve workflow variable expressions and show a clear parsing error when variable metadata cannot be resolved. (&lt;a href="https://github.com/nocobase/nocobase/pull/10088" rel="noopener noreferrer"&gt;#10088&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fix an error in v2 workflow value editors when a collection field is named nodeName. (&lt;a href="https://github.com/nocobase/nocobase/pull/10067" rel="noopener noreferrer"&gt;#10067&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed workflow v2 variable editors to preserve saved variable pills, disabled states, and operator labels consistently across trigger, filter, and field assignment forms. (&lt;a href="https://github.com/nocobase/nocobase/pull/10041" rel="noopener noreferrer"&gt;#10041&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fixed an issue where v2 workflow assigned fields could still be edited in read-only executed workflow versions. (&lt;a href="https://github.com/nocobase/nocobase/pull/10014" rel="noopener noreferrer"&gt;#10014&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fix workflow execution revision navigation so creating a new version after manual execution opens the correct workflow page in both legacy and modern shells. (&lt;a href="https://github.com/nocobase/nocobase/pull/9955" rel="noopener noreferrer"&gt;#9955&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where users could type extra text after selecting a variable in single-value variable inputs. (&lt;a href="https://github.com/nocobase/nocobase/pull/10050" rel="noopener noreferrer"&gt;#10050&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Fixed an error when sending files pasted into the AI employee chat input (&lt;a href="https://github.com/nocobase/nocobase/pull/10106" rel="noopener noreferrer"&gt;#10106&lt;/a&gt;) by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Authentication]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed declaration generation errors in the v2 authenticator management page (&lt;a href="https://github.com/nocobase/nocobase/pull/10095" rel="noopener noreferrer"&gt;#10095&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;li&gt;Fixed missing saved Authenticator settings when editing authenticators in the v2 authentication manager. (&lt;a href="https://github.com/nocobase/nocobase/pull/10091" rel="noopener noreferrer"&gt;#10091&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Notification manager]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix receiver selection saving user IDs as text (&lt;a href="https://github.com/nocobase/nocobase/pull/10093" rel="noopener noreferrer"&gt;#10093&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix incorrect workflow variables shown in CC configuration (&lt;a href="https://github.com/nocobase/nocobase/pull/9937" rel="noopener noreferrer"&gt;#9937&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: JSON variable mapping]&lt;/strong&gt; Fix an error when selecting loop scope variables in the JSON variable mapping workflow node. (&lt;a href="https://github.com/nocobase/nocobase/pull/10094" rel="noopener noreferrer"&gt;#10094&lt;/a&gt;) by @Molunerfinn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[UI layout]&lt;/strong&gt; Fix the Mobile settings link losing the current sub-application path (&lt;a href="https://github.com/nocobase/nocobase/pull/10078" rel="noopener noreferrer"&gt;#10078&lt;/a&gt;) by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workflow form controls now correctly inherit the disabled state when viewing executed workflows. (&lt;a href="https://github.com/nocobase/nocobase/pull/10079" rel="noopener noreferrer"&gt;#10079&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Refresh the workflow canvas after updating trigger configuration (&lt;a href="https://github.com/nocobase/nocobase/pull/10068" rel="noopener noreferrer"&gt;#10068&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fixed workflow v2 condition operands to stay on one row by default and wrap correctly when selected variable paths are too long. (&lt;a href="https://github.com/nocobase/nocobase/pull/10033" rel="noopener noreferrer"&gt;#10033&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fix display and detail loading issues in the workflow v2 task center (&lt;a href="https://github.com/nocobase/nocobase/pull/10001" rel="noopener noreferrer"&gt;#10001&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix untranslated workflow result labels and oversized CC configuration dialogs (&lt;a href="https://github.com/nocobase/nocobase/pull/9977" rel="noopener noreferrer"&gt;#9977&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix workflow context mismatches across bundles so branches and some variable pickers work correctly in legacy workflow pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/9951" rel="noopener noreferrer"&gt;#9951&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fix the issue where in-app message content cannot be configured in v2 workflows (&lt;a href="https://github.com/nocobase/nocobase/pull/9885" rel="noopener noreferrer"&gt;#9885&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix issues after migrated client to v2 (&lt;a href="https://github.com/nocobase/nocobase/pull/9929" rel="noopener noreferrer"&gt;#9929&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;Restored debounced remote search for workflow collection trigger manual execution and aligned the selector with the v1 200-record fetch behavior. (&lt;a href="https://github.com/nocobase/nocobase/pull/9870" rel="noopener noreferrer"&gt;#9870&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fixed the workflow v2 add-node menu so unavailable node types are disabled according to workflow and branch rules (&lt;a href="https://github.com/nocobase/nocobase/pull/9855" rel="noopener noreferrer"&gt;#9855&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Delay node]&lt;/strong&gt; Fix delay node duration input and prevent values below the minimum from being saved. (&lt;a href="https://github.com/nocobase/nocobase/pull/10056" rel="noopener noreferrer"&gt;#10056&lt;/a&gt;) by @Molunerfinn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Aggregate node]&lt;/strong&gt; Fix validation rule to allow null filter (&lt;a href="https://github.com/nocobase/nocobase/pull/10053" rel="noopener noreferrer"&gt;#10053&lt;/a&gt;) by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Public forms]&lt;/strong&gt; Fix the issue where public forms can still be configured when UI Editor is off (&lt;a href="https://github.com/nocobase/nocobase/pull/10036" rel="noopener noreferrer"&gt;#10036&lt;/a&gt;) by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Block: Comment]&lt;/strong&gt; Adjusted the default action order for new Comment blocks. (&lt;a href="https://github.com/nocobase/nocobase/pull/9976" rel="noopener noreferrer"&gt;#9976&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: mailer node]&lt;/strong&gt; Fixed workflow v2 test failures caused by missing mocks for trigger workflow action registration. (&lt;a href="https://github.com/nocobase/nocobase/pull/9863" rel="noopener noreferrer"&gt;#9863&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: JavaScript]&lt;/strong&gt; Fixed JavaScript workflow node registration failure in the legacy workflow client. (&lt;a href="https://github.com/nocobase/nocobase/pull/9826" rel="noopener noreferrer"&gt;#9826&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Response message]&lt;/strong&gt; Migrated the workflow response message node to the v2 canvas and fixed unsupported workflow types being able to add it. (&lt;a href="https://github.com/nocobase/nocobase/pull/9830" rel="noopener noreferrer"&gt;#9830&lt;/a&gt;) by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File manager]&lt;/strong&gt; Fixed 404 errors when uploading files to attachment URL fields in external data sources (&lt;a href="https://github.com/nocobase/nocobase/pull/9809" rel="noopener noreferrer"&gt;#9809&lt;/a&gt;) by @2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Verification: TOTP authenticator]&lt;/strong&gt; Fixed TOTP authenticator bindings so temporary setup secrets are removed and previously verified codes cannot be reused. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Auth: SAML 2.0]&lt;/strong&gt; Fixed SAML automatic sign-in redirects for unauthenticated users in the modern client while preserving the original destination path by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI: Knowledge base]&lt;/strong&gt; Added an overwrite option for AI knowledge base workflow document creation, allowing workflows to replace existing documents with the same key. by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt; Fixed file preview, permanent URL handling, and upload routing for external NocoBase file collections, including S3 Pro uploads by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[plugin-service-platform]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restored licensed plugin downloads from the service platform. by @jiannx&lt;/li&gt;
&lt;li&gt;Disabled the service platform plugin download endpoint. by @jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Subflow]&lt;/strong&gt; Fixed workflow title search in the subflow node configuration selector. by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File storage: S3(Pro)]&lt;/strong&gt; Fixed S3-compatible file URLs omitting the configured storage path, which caused uploaded logos and attachments to return 404 errors by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Auth: OIDC]&lt;/strong&gt; Fixed OIDC automatic login redirects in production builds and retained the original modern-client path after login by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix blank approval forms and missing or incorrect action buttons by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fixed premature applicant validation and untranslated role labels in the approval workflow manual execution dialog. by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fix the approval workflow task title remaining editable in executed workflow configurations after production builds. by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Allow users to view approval interfaces and cards after a workflow has been executed by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix workflow form action buttons responding in configuration dialogs by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix display and action issues in approval initiator interfaces by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Close the Apply new drawer when opening an approval form by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix an error that could prevent V2 pages from opening when approval and notification plugins are enabled by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix approval task form and action issues in the workflow v2 task center by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix v2 approval subtables not displaying correctly in details by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix missing processed approval details in v2 task detail popups by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix empty approval interfaces and fixed assignee IDs by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the issue where approval tables appear in the block data source list by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix issues involved by migrating to client v2 by @mytharcher&lt;/li&gt;
&lt;li&gt;Fix the error when configuring approval workflow conditions by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Guide users to V1 pages when approval interfaces cannot be used in V2 by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix approval assignee sorting and hide unsupported legacy configuration entries by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the error when opening CC node settings by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix missing approval data on approval task cards by @zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection field: Signature]&lt;/strong&gt; Fix client-v2 signature field file collection selector localization and option filtering. by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[WeCom]&lt;/strong&gt; Fixed WeCom notification channels not saving the selected authenticator. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.2.0-beta.14
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-15&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Auth: LDAP]&lt;/strong&gt; Added LDAP user data sync source support, including optional AD department synchronization. by @chenzhizdt&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[ai]&lt;/strong&gt; Reduced main-process memory usage when parsing uploaded knowledge base documents. (&lt;a href="https://github.com/nocobase/nocobase/pull/10083" rel="noopener noreferrer"&gt;#10083&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[undefined]&lt;/strong&gt; File URLs now use stable NocoBase access URLs so permissions can be checked before redirecting to storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/10047" rel="noopener noreferrer"&gt;#10047&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Flow engine]&lt;/strong&gt; Support multi portals for ui build apis. (&lt;a href="https://github.com/nocobase/nocobase/pull/10072" rel="noopener noreferrer"&gt;#10072&lt;/a&gt;) by &lt;a class="mentioned-user" href="https://dev.to/gchust"&gt;@gchust&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[File storage: S3(Pro)]&lt;/strong&gt; S3 Pro uploads now return the created file record with permanent file URLs. by @mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[RabbitMQ queue adapter]&lt;/strong&gt; Enhance the channel management and error recovery capabilities of the RabbitMQ adapter by @sdp-ncd&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed other column content showing through fixed v2 table columns when quick edit is enabled. (&lt;a href="https://github.com/nocobase/nocobase/pull/10076" rel="noopener noreferrer"&gt;#10076&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed v2 scan input camera preview layout issues on iOS Chrome. (&lt;a href="https://github.com/nocobase/nocobase/pull/10081" rel="noopener noreferrer"&gt;#10081&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed hidden fields being included when workflow serializes appended association data (&lt;a href="https://github.com/nocobase/nocobase/pull/10086" rel="noopener noreferrer"&gt;#10086&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;Fixed manual workflow execution returning an error when a valid request does not start an execution. (&lt;a href="https://github.com/nocobase/nocobase/pull/10049" rel="noopener noreferrer"&gt;#10049&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection field: Markdown(Vditor)]&lt;/strong&gt; Fixed iframe sanitization for v1 Markdown rendering and editing. (&lt;a href="https://github.com/nocobase/nocobase/pull/10096" rel="noopener noreferrer"&gt;#10096&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Action: Batch edit]&lt;/strong&gt; Fixed Markdown editor initialization failure when a V2 form includes a &lt;code&gt;process&lt;/code&gt; field. (&lt;a href="https://github.com/nocobase/nocobase/pull/10080" rel="noopener noreferrer"&gt;#10080&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[UI layout]&lt;/strong&gt; Fixed the Mobile settings link opening the main application from a sub-application. (&lt;a href="https://github.com/nocobase/nocobase/pull/10075" rel="noopener noreferrer"&gt;#10075&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed AI tool-call approvals to authorize against the message's owning conversation before updating decisions. (&lt;a href="https://github.com/nocobase/nocobase/pull/10077" rel="noopener noreferrer"&gt;#10077&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;Fixed AI attachment handling to avoid trusting client-provided file paths or URLs. (&lt;a href="https://github.com/nocobase/nocobase/pull/10037" rel="noopener noreferrer"&gt;#10037&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[User data synchronization]&lt;/strong&gt; Fixed external department sync order so child departments can be reparented correctly when their parent is synced later. (&lt;a href="https://github.com/nocobase/nocobase/pull/10028" rel="noopener noreferrer"&gt;#10028&lt;/a&gt;) by @chenzhizdt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed workflow AI employees being unable to read attachments from External NocoBase data sources by @2013xile&lt;/li&gt;
&lt;li&gt;Fixed file preview, permanent URL handling, and upload routing for external NocoBase file collections, including S3 Pro uploads by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Filter approval file associations by current user ownership when the temporary switch is enabled. by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  develop
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fow9jd2rkp6w0rmrzuzwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fow9jd2rkp6w0rmrzuzwl.png" alt="develop.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.2.0-alpha.9
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-16&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[client-v2]&lt;/strong&gt; Tabs on pages, subpages and pop-ups support the configuration of linkage rules (&lt;a href="https://github.com/nocobase/nocobase/pull/10099" rel="noopener noreferrer"&gt;#10099&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt; Added RunJS APIs for triggering AI employee tasks from JS blocks. (&lt;a href="https://github.com/nocobase/nocobase/pull/10061" rel="noopener noreferrer"&gt;#10061&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[DingTalk]&lt;/strong&gt; Added DingTalk Stream mode support for organization event synchronization. by @chenzhizdt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Auth: LDAP]&lt;/strong&gt; Added LDAP user data sync source support, including optional AD department synchronization. by @chenzhizdt&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[undefined]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File URLs now use stable NocoBase access URLs so permissions can be checked before redirecting to storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/10047" rel="noopener noreferrer"&gt;#10047&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;File URLs now use stable NocoBase access URLs so permissions can be checked before redirecting to storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/10103" rel="noopener noreferrer"&gt;#10103&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;Updated the data source documentation structure, links, and localized pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/10108" rel="noopener noreferrer"&gt;#10108&lt;/a&gt;) by @hongboji
Reference: &lt;a href="//docs/docs/en/data-sources/index.md"&gt;Data sources&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[ai]&lt;/strong&gt; Reduced main-process memory usage when parsing uploaded knowledge base documents. (&lt;a href="https://github.com/nocobase/nocobase/pull/10083" rel="noopener noreferrer"&gt;#10083&lt;/a&gt;) by @cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Manual node]&lt;/strong&gt; Show manual workflow tasks in the V2 task center and guide users to the legacy page for processing (&lt;a href="https://github.com/nocobase/nocobase/pull/10085" rel="noopener noreferrer"&gt;#10085&lt;/a&gt;) by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[File storage: S3(Pro)]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3 Pro uploads now return the created file record with permanent file URLs. by @mytharcher&lt;/li&gt;
&lt;li&gt;S3 Pro uploads now return the created file record with permanent file URLs. by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[RabbitMQ queue adapter]&lt;/strong&gt; Enhance the channel management and error recovery capabilities of the RabbitMQ adapter by @sdp-ncd&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Email manager]&lt;/strong&gt; Moved the department-based mail viewing option to the V1 general mail settings page, prevented service credential saves from overwriting it, and placed V2 General settings before Service provider settings. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed automatic SSO redirect providers failing to preserve authentication order in production builds (&lt;a href="https://github.com/nocobase/nocobase/pull/10100" rel="noopener noreferrer"&gt;#10100&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;li&gt;Corrected the Urdu label and added a separate Uzbek option to the System Settings language list. (&lt;a href="https://github.com/nocobase/nocobase/pull/10090" rel="noopener noreferrer"&gt;#10090&lt;/a&gt;) by @hongboji&lt;/li&gt;
&lt;li&gt;Workflow filters now preserve workflow variable expressions and show a clear parsing error when variable metadata cannot be resolved. (&lt;a href="https://github.com/nocobase/nocobase/pull/10088" rel="noopener noreferrer"&gt;#10088&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fixed v2 scan input camera preview layout issues on iOS Chrome. (&lt;a href="https://github.com/nocobase/nocobase/pull/10081" rel="noopener noreferrer"&gt;#10081&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed other column content showing through fixed v2 table columns when quick edit is enabled. (&lt;a href="https://github.com/nocobase/nocobase/pull/10076" rel="noopener noreferrer"&gt;#10076&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Authentication]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed declaration generation errors in the v2 authenticator management page (&lt;a href="https://github.com/nocobase/nocobase/pull/10095" rel="noopener noreferrer"&gt;#10095&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;li&gt;Fixed missing saved Authenticator settings when editing authenticators in the v2 authentication manager. (&lt;a href="https://github.com/nocobase/nocobase/pull/10091" rel="noopener noreferrer"&gt;#10091&lt;/a&gt;) by @jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an error when sending files pasted into the AI employee chat input (&lt;a href="https://github.com/nocobase/nocobase/pull/10106" rel="noopener noreferrer"&gt;#10106&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;Fixed AI tool-call approvals to authorize against the message's owning conversation before updating decisions. (&lt;a href="https://github.com/nocobase/nocobase/pull/10077" rel="noopener noreferrer"&gt;#10077&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;li&gt;Fixed AI attachment handling to avoid trusting client-provided file paths or URLs. (&lt;a href="https://github.com/nocobase/nocobase/pull/10037" rel="noopener noreferrer"&gt;#10037&lt;/a&gt;) by @cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection field: Markdown(Vditor)]&lt;/strong&gt; Fixed iframe sanitization for v1 Markdown rendering and editing. (&lt;a href="https://github.com/nocobase/nocobase/pull/10096" rel="noopener noreferrer"&gt;#10096&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed hidden fields being included when workflow serializes appended association data (&lt;a href="https://github.com/nocobase/nocobase/pull/10086" rel="noopener noreferrer"&gt;#10086&lt;/a&gt;) by @mytharcher&lt;/li&gt;
&lt;li&gt;Workflow form controls now correctly inherit the disabled state when viewing executed workflows. (&lt;a href="https://github.com/nocobase/nocobase/pull/10079" rel="noopener noreferrer"&gt;#10079&lt;/a&gt;) by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Refresh the workflow canvas after updating trigger configuration (&lt;a href="https://github.com/nocobase/nocobase/pull/10068" rel="noopener noreferrer"&gt;#10068&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Notification manager]&lt;/strong&gt; Fix receiver selection saving user IDs as text (&lt;a href="https://github.com/nocobase/nocobase/pull/10093" rel="noopener noreferrer"&gt;#10093&lt;/a&gt;) by @zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[UI layout]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix the Mobile settings link losing the current sub-application path (&lt;a href="https://github.com/nocobase/nocobase/pull/10078" rel="noopener noreferrer"&gt;#10078&lt;/a&gt;) by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fixed the Mobile settings link opening the main application from a sub-application. (&lt;a href="https://github.com/nocobase/nocobase/pull/10075" rel="noopener noreferrer"&gt;#10075&lt;/a&gt;) by @katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: JSON variable mapping]&lt;/strong&gt; Fix an error when selecting loop scope variables in the JSON variable mapping workflow node. (&lt;a href="https://github.com/nocobase/nocobase/pull/10094" rel="noopener noreferrer"&gt;#10094&lt;/a&gt;) by @Molunerfinn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[User data synchronization]&lt;/strong&gt; Fixed external department sync order so child departments can be reparented correctly when their parent is synced later. (&lt;a href="https://github.com/nocobase/nocobase/pull/10028" rel="noopener noreferrer"&gt;#10028&lt;/a&gt;) by @chenzhizdt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Action: Batch edit]&lt;/strong&gt; Fixed Markdown editor initialization failure when a V2 form includes a &lt;code&gt;process&lt;/code&gt; field. (&lt;a href="https://github.com/nocobase/nocobase/pull/10080" rel="noopener noreferrer"&gt;#10080&lt;/a&gt;) by @katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Verification: TOTP authenticator]&lt;/strong&gt; Fixed TOTP authenticator bindings so temporary setup secrets are removed and previously verified codes cannot be reused. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed workflow AI employees being unable to read attachments from External NocoBase data sources by @2013xile&lt;/li&gt;
&lt;li&gt;Fixed file preview, permanent URL handling, and upload routing for external NocoBase file collections, including S3 Pro uploads by @mytharcher&lt;/li&gt;
&lt;li&gt;Fixed file preview, permanent URL handling, and upload routing for external NocoBase file collections, including S3 Pro uploads by @mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Auth: SAML 2.0]&lt;/strong&gt; Fixed SAML automatic sign-in redirects for unauthenticated users in the modern client while preserving the original destination path by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File storage: S3(Pro)]&lt;/strong&gt; Fixed S3-compatible file URLs omitting the configured storage path, which caused uploaded logos and attachments to return 404 errors by @mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Auth: OIDC]&lt;/strong&gt; Fixed OIDC automatic login redirects in production builds and retained the original modern-client path after login by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix the approval workflow task title remaining editable in executed workflow configurations after production builds. by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fixed premature applicant validation and untranslated role labels in the approval workflow manual execution dialog. by @Molunerfinn&lt;/li&gt;
&lt;li&gt;Fix workflow form action buttons responding in configuration dialogs by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Allow users to view approval interfaces and cards after a workflow has been executed by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Filter approval file associations by current user ownership when the temporary switch is enabled. by @mytharcher&lt;/li&gt;
&lt;li&gt;Fix display and action issues in approval initiator interfaces by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix blank approval forms and missing or incorrect action buttons by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix an error that could prevent V2 pages from opening when approval and notification plugins are enabled by @zhangzhonghe&lt;/li&gt;
&lt;li&gt;Guide users to V1 pages when approval interfaces cannot be used in V2 by @zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[WeCom]&lt;/strong&gt; Fixed WeCom notification channels not saving the selected authenticator. by @jiannx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>Announcing NocoBase 2.2-beta</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Fri, 17 Jul 2026 04:04:27 +0000</pubDate>
      <link>https://dev.to/nocobase/announcing-nocobase-22-beta-2jee</link>
      <guid>https://dev.to/nocobase/announcing-nocobase-22-beta-2jee</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/2.2.0-beta" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/2.2.0-beta&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a major upgrade &lt;strong&gt;centered on the V2 experience&lt;/strong&gt;. This release brings &lt;strong&gt;Multi Portal&lt;/strong&gt;, a &lt;strong&gt;new mobile client&lt;/strong&gt;, and a &lt;strong&gt;new comment block&lt;/strong&gt;, while continuing to enhance the AI knowledge base and workflow capabilities. For teams already using V2, the more noteworthy addition is the brand-new &lt;code&gt;/v/&lt;/code&gt; branch—it will serve as a dedicated front-end entry for V2 and carry forward all future feature development.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The new &lt;code&gt;/v/&lt;/code&gt; branch
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/v/&lt;/code&gt; is a brand-new, standalone front-end entry that is built independently. In the 2.0 release we carried out a very large refactor of the front end, and at the time, for compatibility reasons, we kept support for V1 modules, pages, and so on. The &lt;code&gt;/v/&lt;/code&gt; branch, however, completely removes the V1 legacy content—you can no longer create or render V1 pages and blocks, and it keeps only V2-oriented capabilities. At the same time, the &lt;code&gt;/v/&lt;/code&gt; branch has been significantly optimized in terms of performance, and it will be the main branch that the NocoBase team iterates on going forward.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We recommend that, if your production environment consists entirely of users centered on v2 Pages, you consider starting to use the &lt;code&gt;/v/&lt;/code&gt; branch, so that upcoming new feature iterations can be used directly.&lt;/p&gt;

&lt;p&gt;If you are centered on v2 Pages but have a small number of v1 Pages, consider first migrating the v1 Pages to v2 Pages, and then consider using the &lt;code&gt;/v/&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;If you are centered on v1 Pages, we do not recommend switching directly to the &lt;code&gt;/v/&lt;/code&gt; branch. We suggest you first migrate your current v1 Pages to v2 Pages, and then switch to the &lt;code&gt;/v/&lt;/code&gt; branch.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Typically, you only need to add the &lt;code&gt;/v/&lt;/code&gt; prefix before the original path to enter the &lt;code&gt;/v/&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Original path
https://nocobase.example.com/admin/1xl0epqn6q3

# v branch path
https://nocobase.example.com/v/admin/1xl0epqn6q3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Setting the application's default entry
&lt;/h4&gt;

&lt;p&gt;You can control the application's entry mode via the environment variable &lt;code&gt;APP_CLIENT_ENTRY_MODE&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;legacy-default&lt;/code&gt;: both &lt;code&gt;/&lt;/code&gt; and &lt;code&gt;/v/&lt;/code&gt; are accessible, and the default entry is &lt;code&gt;/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;modern-default&lt;/code&gt;: both &lt;code&gt;/&lt;/code&gt; and &lt;code&gt;/v/&lt;/code&gt; are accessible, and the default entry is &lt;code&gt;/v/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;modern-only&lt;/code&gt;: only &lt;code&gt;/v/&lt;/code&gt; is accessible&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Current status of the &lt;code&gt;/v/&lt;/code&gt; branch
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;/v/&lt;/code&gt; branch is a progressive-migration branch. After entering the &lt;code&gt;/v/&lt;/code&gt; branch, there will be a few noticeable changes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pages created via Page V1 will no longer be displayed in the &lt;code&gt;/v/&lt;/code&gt; branch. Pages created via Page V2 will still display normally in the &lt;code&gt;/v/&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;Plugins that are only adapted for &lt;code&gt;client-v1&lt;/code&gt; will no longer be loaded in the &lt;code&gt;/v/&lt;/code&gt; branch. The &lt;code&gt;/v/&lt;/code&gt; branch only loads plugins adapted for &lt;code&gt;client-v2&lt;/code&gt;. For details, refer to the &lt;a href="https://docs.nocobase.com/plugin-development/client/" rel="noopener noreferrer"&gt;Client-side plugin development documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At present, most of the plugins built into NocoBase have been adapted and migrated to client-v2 in this release, so most features can be used directly (a small number of plugins have not yet been migrated, and we will keep migrating them). However, some capabilities provided by certain plugins will only be updated and iterated on the &lt;code&gt;/v/&lt;/code&gt; branch going forward. Specifically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The plugin list no longer shows deprecated plugins or plugins that support only 1.x&lt;/li&gt;
&lt;li&gt;Adding new Page V1 is no longer supported&lt;/li&gt;
&lt;li&gt;Public forms distinguish between v1 and v2; the &lt;code&gt;/v/&lt;/code&gt; branch does not display v1 public forms&lt;/li&gt;
&lt;li&gt;If you want to use approval workflows on the &lt;code&gt;/v/&lt;/code&gt; branch, you need to reconfigure the related UI&lt;/li&gt;
&lt;li&gt;The new mobile client is only supported on the &lt;code&gt;/v/&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;Multi Portal is only supported on the &lt;code&gt;/v/&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;The Display configuration for sub-applications in the App supervisor has been removed; you can use Portals instead&lt;/li&gt;
&lt;li&gt;The "AI Employees / Data Sources" tab has been removed&lt;/li&gt;
&lt;li&gt;The comment table, calendar table, expression table, and external data table have been removed&lt;/li&gt;
&lt;li&gt;The workflow manual node is not yet supported on the &lt;code&gt;/v/&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;Adding badge counts to menus is not yet supported&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can carry out the migration to the &lt;code&gt;/v/&lt;/code&gt; branch based on the actual situation of your production environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi Portal (only supported on the &lt;code&gt;/v/&lt;/code&gt; branch)
&lt;/h3&gt;

&lt;p&gt;Portals are used to provide multiple access entries within the same application. Each Portal can have its own independent pages, menus, navigation structure, layout, and permission configuration. (Supported in the Professional edition and above)&lt;/p&gt;

&lt;p&gt;In real-world business scenarios, different roles usually need different operational interfaces. For example, a retail management system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Retail management system

├─ Headquarters Portal
├─ Store Portal
├─ Dealer Portal
└─ Mobile Portal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Headquarters staff care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product management&lt;/li&gt;
&lt;li&gt;Inventory management&lt;/li&gt;
&lt;li&gt;Data analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Store staff care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checkout&lt;/li&gt;
&lt;li&gt;Stock counting&lt;/li&gt;
&lt;li&gt;Order processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dealers care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Procurement&lt;/li&gt;
&lt;li&gt;Reconciliation&lt;/li&gt;
&lt;li&gt;Shipping status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even though they use the same system, different roles don't need to see the same menus and pages. Multi Portal is precisely what solves this problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhiyyf8goxx8m7ih9358.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhiyyf8goxx8m7ih9358.png" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/multi-app/multi-portal/" rel="noopener noreferrer"&gt;Multi Portal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  New mobile client (only supported on the &lt;code&gt;/v/&lt;/code&gt; branch)
&lt;/h3&gt;

&lt;p&gt;The new mobile client provides a brand-new &lt;code&gt;/v/mobile&lt;/code&gt; entry, and at the same time, Portals also support adding Portals with a mobile layout.&lt;/p&gt;

&lt;p&gt;The mobile layout and desktop layout use the same data source and business data, but menus, routing, and page content are configured separately. This allows you to reorganize pages according to how they are used on mobile, without being constrained by the desktop page structure. In addition, using the bottom tab bar as the primary navigation makes it better suited for data entry, querying, approval, and task handling on phones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp37otx1goxsmdss6qpvn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp37otx1goxsmdss6qpvn.png" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/interface-builder/ui-layout/mobile" rel="noopener noreferrer"&gt;Mobile layout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  New comment block
&lt;/h3&gt;

&lt;p&gt;The new comment block is no longer limited to the comment table of the main data source, and it can be used even outside of relationship blocks. The comment block is used to add commenting capabilities to business records. You can add a comment block on the detail page or popup of records such as tasks, articles, tickets, and customers, allowing users to view, reply to, and add comments around the current record.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwjvsub0xkeui1f59mnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwjvsub0xkeui1f59mnc.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/interface-builder/blocks/data-blocks/comment" rel="noopener noreferrer"&gt;Comment block&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI knowledge base improvements
&lt;/h3&gt;

&lt;p&gt;In this release, the AI knowledge base has also completed its migration to the &lt;code&gt;client-v2&lt;/code&gt; version. In addition, when a workflow creates knowledge base documents, it now supports overwriting by the knowledge base document's key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9c32b3xgnyyqeb33abzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9c32b3xgnyyqeb33abzg.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/ai-employees/knowledge-base/knowledge-base/" rel="noopener noreferrer"&gt;AI knowledge base&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Workflow: Database transaction node
&lt;/h3&gt;

&lt;p&gt;The workflow adds a database transaction node. It is used to execute a group of database operations within the same transaction. It is suited for scenarios that need to guarantee "all succeed or all roll back" across multi-step data processing—for example, deducting inventory, writing line items, and updating status after creating an order.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F615eecfv5tx90lsxe2ou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F615eecfv5tx90lsxe2ou.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/workflow/nodes/transaction" rel="noopener noreferrer"&gt;Database transaction node&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The following plugins are no longer supported in V2 (deprecated but not yet removed)
&lt;/h2&gt;

&lt;p&gt;Some plugins were actually deprecated much earlier. Some of them can still be used at present, but they will be completely removed in V3.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plugin&lt;/th&gt;
&lt;th&gt;Replacement&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-audit-logs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-audit-logger&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-backup-restore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-backups&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-block-multi-step-form&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JS Block&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-charts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-data-visualization&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-collection-fdw&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sync from database&lt;/td&gt;
&lt;td&gt;Deprecated since 2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-comments&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-block-comment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-custom-variables&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Event flow&lt;/td&gt;
&lt;td&gt;Deprecated since 2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-data-visualization-echarts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-data-visualization&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-disable-pm-add&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Deprecated since 2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-field-component-mask&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;RunJS&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-graph-collection-manager&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Deprecated since 2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-mobile-client&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-ui-layout&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-mobile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-ui-layout&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-mock-collections&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI-assisted building&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-multi-app-manager&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-app-supervisor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-multi-app-share-collection&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Deprecated since 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-notifications&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-notification-manager&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deprecated since 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@nocobase/plugin-snapshot-field&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Deprecated since 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>5 Open-Source AI No-Code Tools for Complex Relational Data Models</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Thu, 16 Jul 2026 05:49:45 +0000</pubDate>
      <link>https://dev.to/nocobase/5-open-source-ai-no-code-tools-for-complex-relational-data-models-3kf2</link>
      <guid>https://dev.to/nocobase/5-open-source-ai-no-code-tools-for-complex-relational-data-models-3kf2</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-complex-relational-models" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-complex-relational-models&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When teams use no-code tools to manage data, many start with Airtable, Notion, or Google Sheets for customers, orders, and project data. As the number of tables, relationships, permissions, and automation workflows grows, simple spreadsheet-style tools can gradually become hard to maintain.&lt;/p&gt;

&lt;p&gt;The rise of AI has opened up new possibilities.&lt;/p&gt;

&lt;p&gt;In a Reddit discussion about &lt;a href="https://www.reddit.com/r/Airtable/comments/1t4x393/the_claude_airtable_vs_claude_sheets_workflow/" rel="noopener noreferrer"&gt;“Claude + Airtable” and “Claude + Sheets” workflows&lt;/a&gt;, a user shared their hands-on experience:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw96ov0c1jp89g4wf6ot9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw96ov0c1jp89g4wf6ot9.png" alt="Reddit-bkbhub.png" width="611" height="389"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;💬 Hey, you're reading the NocoBase blog. NocoBase is the most extensible AI-powered no-code/low-code development platform for building enterprise applications, internal tools, and all kinds of systems. It’s fully self-hosted, plugin-based, and developer-friendly. → &lt;a href="https://github.com/nocobase/nocobase" rel="noopener noreferrer"&gt;Explore NocoBase on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Google Sheets with Claude is suitable for fast setup and lightweight workflows. When a project involves multiple related tables, different views, member permissions, and complex data structures, it is clearer and easier to maintain if structured data is kept in Airtable or a database, while Claude handles data processing, information enrichment, and workflow automation. However, Airtable is a commercial closed-source product. For teams with limited budgets, or teams that care more about self-hosting, data control, and long-term extensibility, it may not be the right choice.&lt;/p&gt;

&lt;p&gt;This article looks at five open-source AI no-code tools that are suitable for complex relational models, with a focus on their relationship modeling capabilities and AI capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. NocoBase
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for building complex enterprise business systems such as CRM, ERP, order management, project management, approvals, and ticketing.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://www.nocobase.com/en/" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/nocobase/nocobase" rel="noopener noreferrer"&gt;https://github.com/nocobase/nocobase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Stars: 23.3k&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.nocobase.com/" rel="noopener noreferrer"&gt;https://docs.nocobase.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F825f9vp2ewiqsq6ry850.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F825f9vp2ewiqsq6ry850.png" alt="NocoBase1-cerpp6.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NocoBase is an open-source AI no-code platform. It is built around data modeling and separates business data from page presentation. Teams can first create tables and relationships for customers, contacts, orders, products, and other objects, then configure pages and business features through a WYSIWYG interface. Its plugin-based architecture also makes it possible to add or develop new features for specific business needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Complex Relational Modeling
&lt;/h3&gt;

&lt;p&gt;NocoBase supports one-to-one, one-to-many, many-to-one, and many-to-many relationships. For many-to-many relationships, you can use a junction table to connect two collections and store business fields such as quantity, price, status, and time in that junction table.&lt;/p&gt;

&lt;p&gt;Take an order system as an example. You can create four tables: customers, orders, products, and order items. The order items table acts as the junction table between orders and products, recording purchase quantity, transaction price, discount, and subtotal. This keeps the many-to-many relationship between orders and products while preserving the detailed information for each transaction.&lt;/p&gt;

&lt;p&gt;In the interface, related data can be displayed and maintained through dropdown selectors, record pickers, sub-forms, sub-tables, and sub-detail blocks. Sub-forms are suitable for directly editing related records, while sub-tables are better for managing one-to-many or many-to-many data in batches.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fya8shr15k7t41xxtz8kr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fya8shr15k7t41xxtz8kr.png" alt="NocoBase2-eq4r6p.png" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Association field documentation: &lt;a href="https://docs.nocobase.com/data-sources/data-modeling/collection-fields/associations/" rel="noopener noreferrer"&gt;https://docs.nocobase.com/data-sources/data-modeling/collection-fields/associations/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Many-to-many relationship documentation: &lt;a href="https://docs.nocobase.com/data-sources/data-modeling/collection-fields/associations/m2m/" rel="noopener noreferrer"&gt;https://docs.nocobase.com/data-sources/data-modeling/collection-fields/associations/m2m/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Association field components: &lt;a href="https://docs.nocobase.com/interface-builder/fields/association-field" rel="noopener noreferrer"&gt;https://docs.nocobase.com/interface-builder/fields/association-field&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Building Capabilities
&lt;/h3&gt;

&lt;p&gt;NocoBase can work with AI agents such as Claude Code, Codex, and Cursor to configure systems from natural language instructions.&lt;/p&gt;

&lt;p&gt;For example, if you enter “I am building a CRM. Please help me design and build the data model,” AI can create tables such as customers, contacts, opportunities, and orders, add fields, and configure relationships. The data modeling skill also supports modifying and deleting tables, adding fields, and adjusting existing relationships.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbiq4rlplg3nu43i7iiaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbiq4rlplg3nu43i7iiaj.png" alt="NocoBase3-ruwwb0.png" width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to data modeling, NocoBase Skills also cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page and block configuration;&lt;/li&gt;
&lt;li&gt;Workflow creation and diagnosis;&lt;/li&gt;
&lt;li&gt;Role and permission configuration;&lt;/li&gt;
&lt;li&gt;Plugin management;&lt;/li&gt;
&lt;li&gt;Release, migration, and backup;&lt;/li&gt;
&lt;li&gt;Version saving and recovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data models, pages, workflows, and permissions created by AI can still be reviewed and modified in the no-code interface. Teams can let AI build the initial structure first, then have business users adjust fields, page layouts, and interaction details.&lt;/p&gt;

&lt;p&gt;AI Builder documentation: &lt;a href="https://docs.nocobase.com/ai-builder" rel="noopener noreferrer"&gt;https://docs.nocobase.com/ai-builder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI data modeling documentation: &lt;a href="https://docs.nocobase.com/ai-builder/data-modeling" rel="noopener noreferrer"&gt;https://docs.nocobase.com/ai-builder/data-modeling&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fijbdpmkdpmkt0r5gdjf2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fijbdpmkdpmkt0r5gdjf2.png" alt="NocoBase4-31yvjv.png" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Employees
&lt;/h3&gt;

&lt;p&gt;After the system is built, AI can also participate in daily operations as AI employees.&lt;/p&gt;

&lt;p&gt;AI employees can read the current page, data blocks, data structure, and selected content, and call the appropriate skills to complete queries, analysis, filling, configuration, and content generation. They can also join workflows to process information or perform tasks within business processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ma5ee2zlronkdgvyj6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ma5ee2zlronkdgvyj6p.png" alt="NocoBase5-xa2w2r.png" width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, teams can ask AI employees to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze customer and sales data;&lt;/li&gt;
&lt;li&gt;Organize or supplement form content;&lt;/li&gt;
&lt;li&gt;Generate reports from current page data;&lt;/li&gt;
&lt;li&gt;Process documents or assist with task assignment in workflows;&lt;/li&gt;
&lt;li&gt;Answer business questions using an enterprise knowledge base.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI building and AI employees play different roles. AI building is used to create and adjust systems, while AI employees assist with business work inside a running system.&lt;/p&gt;

&lt;p&gt;AI Employees documentation: &lt;a href="https://docs.nocobase.com/ai-employees" rel="noopener noreferrer"&gt;https://docs.nocobase.com/ai-employees&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  External Data Sources and Deployment
&lt;/h3&gt;

&lt;p&gt;The main NocoBase database supports MySQL, PostgreSQL, and MariaDB. Through data source plugins, it can also connect to external MySQL, MariaDB, PostgreSQL, Microsoft SQL Server, Oracle, REST APIs, and other NocoBase applications.&lt;/p&gt;

&lt;p&gt;After connecting to an external database, NocoBase reads the existing tables and fields, and teams can configure pages and other business features based on that data. Table structures in external databases need to be modified in the original database and then synchronized to NocoBase. Different external data source plugins may have different version requirements, so the specific requirements should be checked before use.&lt;/p&gt;

&lt;p&gt;NocoBase Community Edition provides the full source code, supports private deployment, and does not limit the number of applications, users, or records. Some external data source, enterprise management, and advanced features are included in commercial editions.&lt;/p&gt;

&lt;p&gt;Data source management documentation: &lt;a href="https://docs.nocobase.com/data-sources/data-source-manager/" rel="noopener noreferrer"&gt;https://docs.nocobase.com/data-sources/data-source-manager/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;External database documentation: &lt;a href="https://docs.nocobase.com/data-sources/data-source-manager/external-database" rel="noopener noreferrer"&gt;https://docs.nocobase.com/data-sources/data-source-manager/external-database&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;NocoBase is suitable for CRM, sales management, ERP, inventory and sales management, order and inventory management, project management, approvals, ticketing, contract management, and supplier management. It is better suited to projects with many tables, complex relationships, and long-term needs to adjust data structures and system features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F86svb76tnmbfrju8wg10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F86svb76tnmbfrju8wg10.png" alt="NocoBase6-n20xki.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Baserow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for teams migrating from Excel, Google Sheets, or Airtable to an open-source database.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://baserow.io/" rel="noopener noreferrer"&gt;https://baserow.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/baserow/baserow" rel="noopener noreferrer"&gt;https://github.com/baserow/baserow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Stars: 5.3k&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://baserow.io/user-docs/" rel="noopener noreferrer"&gt;https://baserow.io/user-docs/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Baserow is an open-source AI no-code platform for building databases, business applications, automation workflows, and AI agents. It keeps a spreadsheet-like editing experience, allowing users to start from data tables and gradually add field relationships, views, forms, and application pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgj2bguselh4qhkcxiicl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgj2bguselh4qhkcxiicl.png" alt="Baserow1-jne5a8.png" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Complex Relational Modeling
&lt;/h3&gt;

&lt;p&gt;Baserow mainly connects different tables through the “link to table” field. By default, one field can link to multiple records, making it suitable for many-to-many relationships. If multiple selections are disabled, it can be restricted to a one-to-one relationship. When a relationship is created, the system can also automatically create a reverse relationship field in the other table.&lt;/p&gt;

&lt;p&gt;After relationships are established, lookup fields can read fields from related tables, rollup fields can calculate counts, sums, averages, maximums, or minimums, and formulas can be used for further processing.&lt;/p&gt;

&lt;p&gt;If you need to record purchase quantities, prices, or discounts between orders and products, you can create a separate “order items” junction table and link it to the orders and products tables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv01jv6xjaoqko4t9t168.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv01jv6xjaoqko4t9t168.png" alt="Baserow2-4tr7e7.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Capabilities
&lt;/h3&gt;

&lt;p&gt;Baserow’s AI assistant, Kuma, can create and modify tables, fields, views, and relationships from natural language. It can also generate formulas, add filters and groups, and organize existing data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ek5cqwiff9aslbsyqoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ek5cqwiff9aslbsyqoa.png" alt="Baserow3-l9qhfy.png" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kuma can also generate complete application pages, connect data sources, add forms and actions, and continue adjusting page structure and style based on follow-up instructions.&lt;/p&gt;

&lt;p&gt;In addition, AI prompt fields can summarize, classify, and extract information from table content, and regenerate results when source fields change. This feature is included in the Premium plan and above.&lt;/p&gt;

&lt;p&gt;Kuma AI documentation: &lt;a href="https://baserow.io/user-docs/ai-assistant" rel="noopener noreferrer"&gt;https://baserow.io/user-docs/ai-assistant&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;Baserow is suitable for lightweight CRM, project and task management, content libraries, asset libraries, and scenarios that migrate from spreadsheets to structured data management. It is closer to an open-source Airtable alternative with AI capabilities, and is suitable for teams that value spreadsheet-style operation and self-hosting.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Teable
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for teams that want to keep a spreadsheet-style interface while using a PostgreSQL-based data foundation.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://teable.ai/" rel="noopener noreferrer"&gt;https://teable.ai/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/teableio/teable" rel="noopener noreferrer"&gt;https://github.com/teableio/teable&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Stars: 21.5k&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://help.teable.ai/en/" rel="noopener noreferrer"&gt;https://help.teable.ai/en/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teable is a no-code database built on PostgreSQL, with an interface similar to Airtable. Users can manage data in tables, then gradually add relationship fields, calculated fields, application pages, and automation workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6twl4v5nw15kp5y48jp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6twl4v5nw15kp5y48jp5.png" alt="Teable1-3fx2sm.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Complex Relational Modeling
&lt;/h3&gt;

&lt;p&gt;Teable’s relationship fields support one-to-one, one-to-many, many-to-one, and many-to-many relationships, and can be configured as one-way or two-way relationships. After relationships are established, lookup, rollup, conditional lookup, and conditional rollup fields can be used to read or aggregate data across tables.&lt;/p&gt;

&lt;p&gt;For example, you can connect customers with orders, projects with tasks, and students with courses. In an order scenario, an order items table can also be used to record products, quantities, and prices.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Capabilities
&lt;/h3&gt;

&lt;p&gt;Teable AI can analyze current data and generate charts and reports. It can also create or modify tables, fields, views, applications, and automation workflows. Users can directly describe the database or business application they need, then continue refining the generated result.&lt;/p&gt;

&lt;p&gt;AI chat documentation: &lt;a href="https://help.teable.ai/en/basic/ai/ai-chat" rel="noopener noreferrer"&gt;https://help.teable.ai/en/basic/ai/ai-chat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI app builder documentation: &lt;a href="https://help.teable.ai/en/basic/ai/app-builder" rel="noopener noreferrer"&gt;https://help.teable.ai/en/basic/ai/app-builder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw6h0i32mrc1q4j8mzn2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw6h0i32mrc1q4j8mzn2c.png" alt="Teable2-pqd910.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;Teable is suitable as an Airtable alternative, collaborative database, order management tool, project management tool, and PostgreSQL data management layer. Teams that want both AI app building and self-hosting should further confirm which edition includes the required features.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. ToolJet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for connecting existing databases and quickly generating admin panels and internal business applications.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://www.tooljet.com/" rel="noopener noreferrer"&gt;https://www.tooljet.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/ToolJet/ToolJet" rel="noopener noreferrer"&gt;https://github.com/ToolJet/ToolJet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Stars: 38.2k&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.tooljet.com/docs/" rel="noopener noreferrer"&gt;https://docs.tooljet.com/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ToolJet is an open-source low-code application builder. It can connect to databases, APIs, cloud storage, and business software, then create admin panels, dashboards, and internal tools based on existing data. The community edition provides a visual page builder, a built-in database, and data source connection capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2gcxn84qpid3trvfvmxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2gcxn84qpid3trvfvmxq.png" alt="ToolJet1-py55nl.png" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Complex Relational Modeling
&lt;/h3&gt;

&lt;p&gt;ToolJet’s built-in database supports primary keys, foreign keys, unique constraints, and joins. Users can connect different tables using foreign keys and read related data based on existing relationships.&lt;/p&gt;

&lt;p&gt;Many-to-many relationships usually require a junction table, with foreign keys pointing to the two business tables. ToolJet can also connect directly to PostgreSQL, MySQL, MongoDB, and many APIs, so it is better suited to building applications on top of existing data structures.&lt;/p&gt;

&lt;p&gt;Database editor documentation: &lt;a href="https://docs.tooljet.com/docs/tooljet-db/database-editor/" rel="noopener noreferrer"&gt;https://docs.tooljet.com/docs/tooljet-db/database-editor/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Capabilities
&lt;/h3&gt;

&lt;p&gt;ToolJet AI can generate application pages, data structures, queries, and data bindings from natural language. It can also read existing database structures and create applications on top of existing data. After generation, users can continue adjusting pages, components, and queries.&lt;/p&gt;

&lt;p&gt;ToolJet AI also provides query generation, component debugging, and AI agent building features. Its main AI capabilities belong to the enterprise edition, while the open-source community edition focuses on visual app building and data connections.&lt;/p&gt;

&lt;p&gt;AI builder documentation: &lt;a href="https://docs.tooljet.com/docs/build-with-ai/overview/" rel="noopener noreferrer"&gt;https://docs.tooljet.com/docs/build-with-ai/overview/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftyfwuk7d5c8ipflndw73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftyfwuk7d5c8ipflndw73.png" alt="ToolJet2-ctr08l.png" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;ToolJet is better suited for admin panels, internal operations tools, data query platforms, and business applications built on existing databases. Its strengths are clearer for teams that already have a database structure and want to quickly add pages and operation interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Budibase
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for building form, approval, ticketing, and workflow-based internal applications.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://budibase.com/" rel="noopener noreferrer"&gt;https://budibase.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Budibase/budibase" rel="noopener noreferrer"&gt;https://github.com/Budibase/budibase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Stars: 28.1k&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.budibase.com/docs/" rel="noopener noreferrer"&gt;https://docs.budibase.com/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Budibase is an open-source internal tool and workflow automation platform. It can connect to existing databases, APIs, and business systems, or use its built-in database to create forms, data pages, applications, and automation workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq2ntzns09qbxm4rgzdyz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq2ntzns09qbxm4rgzdyz.png" alt="Budibase1-bzkpnu.png" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Complex Relational Modeling
&lt;/h3&gt;

&lt;p&gt;Budibase relationship fields support two-way relationships, and one record can also be linked to multiple records, making many-to-many relationships possible.&lt;/p&gt;

&lt;p&gt;When connecting to external databases such as PostgreSQL, MySQL, MariaDB, Microsoft SQL Server, or Oracle, many-to-many relationships need to use a junction table. The junction table stores foreign keys pointing to both data tables, and Budibase then reads and manages related data based on those relationships.&lt;/p&gt;

&lt;p&gt;SQL data source documentation: &lt;a href="https://docs.budibase.com/docs/sql-datasource" rel="noopener noreferrer"&gt;https://docs.budibase.com/docs/sql-datasource&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Capabilities
&lt;/h3&gt;

&lt;p&gt;Budibase AI can generate tables, fields, relationships, and sample data for the built-in database from prompts. It can also generate JavaScript and perform text classification, translation, summarization, content generation, and document information extraction in automations. The platform also supports building AI agents that can call data and workflows.&lt;/p&gt;

&lt;p&gt;The AI table generation feature currently applies only to the built-in Budibase DB. It can generate one or more tables and their relationships, but it does not generate application pages at the same time. Before production use, field types and relationships should still be checked.&lt;/p&gt;

&lt;p&gt;AI-powered table generation documentation: &lt;a href="https://docs.budibase.com/docs/ai-powered-table-generation" rel="noopener noreferrer"&gt;https://docs.budibase.com/docs/ai-powered-table-generation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Budibase AI configuration documentation: &lt;a href="https://docs.budibase.com/docs/quickstart-budibase-ai" rel="noopener noreferrer"&gt;https://docs.budibase.com/docs/quickstart-budibase-ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgnd5yggr01n5a68eebt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgnd5yggr01n5a68eebt9.png" alt="Budibase2-xbhqu5.png" width="799" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;p&gt;Budibase is suitable for approval and request forms, ticketing systems, internal operations tools, and data pages and automation workflows built on existing SQL databases. It is especially strong in forms, workflows, and AI-powered data processing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hope this article helps you find the right open-source AI no-code tool for complex relational models more quickly. Feel free to share it with teams evaluating Airtable alternatives, AI app builders, or internal business system tools.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/what-is-ai-no-code" rel="noopener noreferrer"&gt;What Is AI No-Code? A Practical Guide to No-Code Platforms in the AI Era - NocoBase&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-github-9" rel="noopener noreferrer"&gt;9 Open-Source AI No-Code Tools on GitHub Worth Watching&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/github-open-source-ai-agent-tools-16" rel="noopener noreferrer"&gt;14 Open Source AI Agent Tools with the Most GitHub Stars&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/top-open-source-ai-assistant-tools-github-stars" rel="noopener noreferrer"&gt;Top 8 Open Source AI Assistant Tools by GitHub Stars&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/workbuddy-open-source-tools" rel="noopener noreferrer"&gt;6 Open Source Tools to Use with WorkBuddy&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/6-github-top-open-source-ai-tools-for-ai-agents" rel="noopener noreferrer"&gt;Top 6 Open Source AI Tools by GitHub Stars for Stronger AI Agents&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-internal-tools-self-hosted-ai-agent-hermes" rel="noopener noreferrer"&gt;5 Open-Source Internal Tools to Use with Hermes Agent&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/openclaw-open-source-enterprise-tools" rel="noopener noreferrer"&gt;OpenClaw and 5 Open-Source Tools for Monitoring Business Workflows&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/opencode-open-source-tools-ai-agents" rel="noopener noreferrer"&gt;What Open-Source Tools Work Well with OpenCode? 5 Projects to Try&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/building-internal-tools-with-codex" rel="noopener noreferrer"&gt;Building Internal Tools with Codex: 6 Open-Source Projects for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-tools-after-claude-code" rel="noopener noreferrer"&gt;After Claude Code: 6 Open-Source Tools You Should Know&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-enterprise-software-development" rel="noopener noreferrer"&gt;Top 10 Open-Source AI And No-Code Tools for Enterprise Software Development&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/8-open-source-ai-agent-platforms-for-internal-tools" rel="noopener noreferrer"&gt;8 Open-Source AI Agent Platforms for Building Internal Tools&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>github</category>
    </item>
    <item>
      <title>Automating Company Background Research with Workflows and AI Employees</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Tue, 14 Jul 2026 06:33:08 +0000</pubDate>
      <link>https://dev.to/nocobase/automating-company-background-research-with-workflows-and-ai-employees-4aei</link>
      <guid>https://dev.to/nocobase/automating-company-background-research-with-workflows-and-ai-employees-4aei</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/automate-company-background-research-with-workflows-and-ai-employees" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/automate-company-background-research-with-workflows-and-ai-employees&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In NocoBase, company background research can be turned into a traceable automation flow. Business users still work on the familiar company profile page, while workflows and AI employees fill in background information, record the processing steps, and keep every generated report for later review.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4dccwhck5vu39roruhyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4dccwhck5vu39roruhyc.png" alt="HR1-9owfry.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This scenario addresses a common problem: company background information is not a static field that only needs to be entered once. Public information changes, regulatory events may appear, and cooperation status keeps evolving as business moves forward. If everything depends on manual updates, key information can easily be missed. If AI is allowed to overwrite company profiles directly, it becomes hard to explain how a given judgment was made. The approach here is to store current information and the research process separately. The company record keeps the version business users are working with, while background check records keep the status, output, and history of every AI research task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start With Two Tables
&lt;/h2&gt;

&lt;p&gt;The company table provides the basic information about the research target, while the background check task table receives each research task. One stores the currently available information; the other stores the process and historical results.&lt;/p&gt;




&lt;p&gt;💬 Hey, you're reading the NocoBase blog. NocoBase is the most extensible AI-powered no-code/low-code development platform for building enterprise applications, internal tools, and all kinds of systems. It’s fully self-hosted, plugin-based, and developer-friendly. → &lt;a href="https://github.com/nocobase/nocobase" rel="noopener noreferrer"&gt;Explore NocoBase on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;companies&lt;/code&gt;: Company Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key Field&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Company name&lt;/td&gt;
&lt;td&gt;Serves as the main identifier of the research target.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;Provides an official website clue and reduces misjudgment caused by companies with similar names or abbreviations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;td&gt;Helps identify region, legal entity, and business scope.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Company type&lt;/td&gt;
&lt;td&gt;Marks business relationships such as customer, supplier, or partner, making it easier to prioritize follow-up.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background information&lt;/td&gt;
&lt;td&gt;Stores the company background report currently in use and presents structured content in Markdown.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;background_check_tasks&lt;/code&gt;: Background Check Task Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key Field&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Company ID / Company name&lt;/td&gt;
&lt;td&gt;Records which company this research task is for, making execution and historical review easier.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Status&lt;/td&gt;
&lt;td&gt;Tracks task transitions from&lt;code&gt;pending&lt;/code&gt; to &lt;code&gt;processing&lt;/code&gt; and &lt;code&gt;completed&lt;/code&gt;; it also helps prevent duplicate triggers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Research report&lt;/td&gt;
&lt;td&gt;Stores the full research report generated by AI for this run.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Summary&lt;/td&gt;
&lt;td&gt;Stores AI’s summary of the research process, risk points, and information that still needs to be supplemented.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Previous background&lt;/td&gt;
&lt;td&gt;Stores the previous version before write-back, supporting history tracking and report comparison.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8l9ie0yw3qkkk44r4muc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8l9ie0yw3qkkk44r4muc.png" alt="01-company-list-zuruic.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter the Research Flow From Company Profiles
&lt;/h2&gt;

&lt;p&gt;The company list is the most familiar entry point for business users. On the page, they can see company names, websites, company types, contacts, email addresses, and other information. After opening a company, users can view the current background report or actively start a new background research task.&lt;/p&gt;

&lt;p&gt;On the edit page, &lt;code&gt;Background information&lt;/code&gt; is displayed with a Markdown editor. The AI output is not a short summary, but a structured report that can be read, copied, and maintained directly. Business users can still edit it manually, but every AI-generated result will leave a corresponding history record in the background check task table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkbtcnu6yqhdc8il6hok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkbtcnu6yqhdc8il6hok.png" alt="02-company-edit-records-retry-axrosz.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a result, the page still looks like a normal company profile management interface, but the underlying structure has become “current information + research history.” The company table stores the current version, while the task table stores the process and evidence chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Trigger Methods
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgytfdsbltmwcsw3950pk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgytfdsbltmwcsw3950pk.png" alt="03-zsmlqk.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Background research should not depend on only one manual button. In real business work, you may want to automatically complete information after a new company is added, rerun checks for historical records on a schedule, or actively start a new review before signing, revisiting, or reassessing a company.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;New company background check&lt;/code&gt; workflow handles automatic research after a company is added or updated. It listens to data events in the company table and is triggered when a company name exists and background information is empty. After triggering, it does not call AI immediately. Instead, it first checks whether there is already an unfinished task for the same company. Only when no such task exists does it create a new background check record.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60gburvnpm9580umo2q3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60gburvnpm9580umo2q3.png" alt="04-pjzeiu.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Timing company background check&lt;/code&gt; workflow continuously supplements historical data. It runs every 30 minutes, queries companies whose background information is still empty, and processes them in batches through a loop. Inside the loop, it also checks whether a task already exists before deciding whether to create a new one. This allows the scheduled task to run repeatedly without creating multiple concurrent processing records from repeated scans.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8eupqn2lftflxbx3l14v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8eupqn2lftflxbx3l14v.png" alt="05-l3vy4x.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Manual company background check&lt;/code&gt; workflow is bound to the &lt;code&gt;Run background check&lt;/code&gt; button on the company detail page. It is suitable for business users who want to actively start a research task before visits, signing, or reassessment. Manual and automatic triggers use the same downstream chain: first create a background check record, then let the task execution workflow take over AI research.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5dgalskuwyylr9yf1mkp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5dgalskuwyylr9yf1mkp.png" alt="06-nh8s24.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These three entry points solve problems at different moments, but they all converge into the same background check task table. New-record triggers, scheduled triggers, and manual triggers only record that “research is needed.” The actual execution, status management, and result write-back are handled by the downstream workflow in a unified way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn AI Research Into Tasks
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Do company background check&lt;/code&gt; is the workflow that actually performs the research. It listens to &lt;code&gt;pending&lt;/code&gt; records in the background check task table. Once an automatic, scheduled, or manual flow creates a task, this workflow is triggered asynchronously.&lt;/p&gt;

&lt;p&gt;During execution, the workflow first checks whether the company still exists. If the company no longer exists, the task is closed with an explanation. If the company exists, the task status changes to &lt;code&gt;processing&lt;/code&gt;, and the workflow then calls an AI employee to generate the report. The AI employee’s prompt requires two outputs: a Markdown report that can be written directly into the company background field, and a summary for manual review.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbtnxijadkh34cx7kvh7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbtnxijadkh34cx7kvh7e.png" alt="07-ohym4u.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After AI returns structured results, the workflow first writes the report, summary, and previous background content into the background check record, then writes the new report back to the company record. This order avoids the problem of having only the latest result without a process record: the company page keeps the latest usable content, while the task record keeps the context of this generation and the content before write-back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmtobclrgditcw4s3116.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmtobclrgditcw4s3116.png" alt="08-fti0m0.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After research is task-based, batch processing also becomes more natural. The scheduled workflow does not need to wait for each company’s research to finish. It only creates multiple pending records; each record then independently triggers AI research. Multiple companies can move forward in parallel, and a failure or timeout in one task will not block the others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make AI Results Reviewable
&lt;/h2&gt;

&lt;p&gt;AI-generated reports follow a fixed structure: company overview, core business, development history and capital background, market position and competitive perspective, sales follow-up judgment, and reference links. Business users see more than a conclusion. They can also review the risk notes and missing information highlighted by AI in the summary.&lt;/p&gt;

&lt;p&gt;The background check record detail page displays &lt;code&gt;Research report&lt;/code&gt; and &lt;code&gt;Previous background&lt;/code&gt; in separate tabs and provides a &lt;code&gt;Copy&lt;/code&gt; action. This makes it easy to copy the current report during discussion, review, or external communication, and to compare it with the previous version when needed.&lt;/p&gt;

&lt;p&gt;The record detail page also includes two AI employee tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improve background research report: supplement information through conversation, regenerate the report, and write the result back to the company record.&lt;/li&gt;
&lt;li&gt;Compare new and old background research reports: read both reports and let AI explain what substantive changes this update introduced.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows AI to go beyond generating a one-time text. It participates in continuous maintenance, review, and version comparison.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs2ep3tf0gchplkvgod0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs2ep3tf0gchplkvgod0u.png" alt="09-2ne40x.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Workflows Fit Together
&lt;/h2&gt;

&lt;p&gt;At a high level, this set of workflows can be divided into four layers.&lt;/p&gt;

&lt;p&gt;The first layer creates tasks. &lt;code&gt;New company background check&lt;/code&gt; handles companies after creation or update, &lt;code&gt;Timing company background check&lt;/code&gt; supplements historical data, and &lt;code&gt;Manual company background check&lt;/code&gt; supports active manual initiation. They all check for unfinished records before creating a task, reducing duplicate processing at the source.&lt;/p&gt;

&lt;p&gt;The second layer executes tasks. &lt;code&gt;Do company background check&lt;/code&gt; listens to background check records, moves pending tasks into processing, calls the AI employee, and writes the report, summary, and current company background field after completion.&lt;/p&gt;

&lt;p&gt;The third layer provides AI employees with controlled write-back capability. &lt;code&gt;Update company background&lt;/code&gt; works as a tool workflow, restricting AI to write into specified records with explicit parameters instead of granting overly broad data modification permissions.&lt;/p&gt;

&lt;p&gt;The fourth layer cleans up exceptions. &lt;code&gt;Clean overtime processing background check&lt;/code&gt; runs every 30 minutes and cleans up non-completed tasks that have remained unfinished for more than 15 minutes, preventing interrupted tasks from staying in the processing state for too long.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9o8frvnl3bdjgqd7tna1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9o8frvnl3bdjgqd7tna1.png" alt="10-potcr8.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Pattern Can Be Reused
&lt;/h2&gt;

&lt;p&gt;This scenario is not just a standalone form or a single AI button. It combines several NocoBase capabilities: data tables carry business objects and history records, pages allow business users to view and trigger actions, workflows handle scheduling and write-back, and AI employees generate structured results that can be reviewed.&lt;/p&gt;

&lt;p&gt;The same pattern can be applied to supplier onboarding, customer due diligence, contract risk pre-review, lead quality scoring, public opinion tracking, investment target screening, and similar scenarios. Whenever a business process requires continuously completing information, keeping traces of AI results, and preserving historical versions instead of overwriting them, this approach can be used to build a runnable, traceable, and extensible automation flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/workflow" rel="noopener noreferrer"&gt;NocoBase Workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/ai-employees" rel="noopener noreferrer"&gt;NocoBase AI Employees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/ai-employees/workflow/nodes/employee/configuration" rel="noopener noreferrer"&gt;NocoBase Workflow AI Employee Node&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/ai-employees/features/tools" rel="noopener noreferrer"&gt;NocoBase AI Employee Custom Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>Weekly Updates: Added Structured AI Usage Records</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Mon, 13 Jul 2026 06:43:59 +0000</pubDate>
      <link>https://dev.to/nocobase/weekly-updates-added-structured-ai-usage-records-4l14</link>
      <guid>https://dev.to/nocobase/weekly-updates-added-structured-ai-usage-records-4l14</guid>
      <description>&lt;p&gt;Summarize the weekly product update logs, and the latest releases can be checked on &lt;a href="https://www.nocobase.com/en/blog/timeline" rel="noopener noreferrer"&gt;our blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NocoBase is currently updated across three branches: &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, and &lt;code&gt;develop&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" alt="version.png" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;main&lt;/code&gt;: The most stable version to date, recommended for installation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;next&lt;/code&gt;: Beta version, contains upcoming new features and has been preliminarily tested. There might be some known or unknown issues. It is mainly used to collect feedback from test users and further optimize features. Ideal for test users who want to experience new features early and provide feedback.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;develop&lt;/code&gt;: Alpha version, contains the latest feature code, may be incomplete or unstable, and is mainly used for internal development and rapid iteration. Suited for technical users interested in cutting-edge product capabilities, but not recommended for production use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  main
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" alt="main.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.1.23
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-10&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed v2 ScanInput recognition for Safari QR images selected from the upload path. (&lt;a href="https://github.com/nocobase/nocobase/pull/10011" rel="noopener noreferrer"&gt;#10011&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed client runtime asset base URL normalization when &lt;code&gt;__webpack_public_path__&lt;/code&gt; is injected without a trailing slash, and added coverage for that edge case. (&lt;a href="https://github.com/nocobase/nocobase/pull/10040" rel="noopener noreferrer"&gt;#10040&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;li&gt;Fixed an issue where button linkage rule states in table blocks could become polluted after pagination. (&lt;a href="https://github.com/nocobase/nocobase/pull/10038" rel="noopener noreferrer"&gt;#10038&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[app]&lt;/strong&gt; Fix lazy-loaded assets using an external script URL when &lt;code&gt;CDN_BASE_URL&lt;/code&gt; is empty. (&lt;a href="https://github.com/nocobase/nocobase/pull/10052" rel="noopener noreferrer"&gt;#10052&lt;/a&gt;)by Molunerfinn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where overriding ctx.api in a JS block could cause a Maximum call stack size exceeded error. (&lt;a href="https://github.com/nocobase/nocobase/pull/10051" rel="noopener noreferrer"&gt;#10051&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Delay node]&lt;/strong&gt; Prevented delay nodes from accepting numeric durations less than 1 through the API (&lt;a href="https://github.com/nocobase/nocobase/pull/10057" rel="noopener noreferrer"&gt;#10057&lt;/a&gt;)by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Form drafts]&lt;/strong&gt; Fixed form drafts disappearing after consecutive page refreshes (&lt;a href="https://github.com/nocobase/nocobase/pull/10059" rel="noopener noreferrer"&gt;#10059&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: Main]&lt;/strong&gt; Prevented invalid many-to-many relationship field configurations from being saved (&lt;a href="https://github.com/nocobase/nocobase/pull/10044" rel="noopener noreferrer"&gt;#10044&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection: Tree]&lt;/strong&gt; Fixed tree path collection creation to avoid passing internal field model metadata into collection options. (&lt;a href="https://github.com/nocobase/nocobase/pull/10035" rel="noopener noreferrer"&gt;#10035&lt;/a&gt;)by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt; Fixed subflow nodes remaining pending when the child workflow fails before creating an execution record (&lt;a href="https://github.com/nocobase/nocobase/pull/10043" rel="noopener noreferrer"&gt;#10043&lt;/a&gt;)by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Flow engine]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an issue where using a local AI agent to configure linkage rules could trigger rendering errors. (&lt;a href="https://github.com/nocobase/nocobase/pull/10023" rel="noopener noreferrer"&gt;#10023&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed popup record variables failing to resolve from external NocoBase data sources (&lt;a href="https://github.com/nocobase/nocobase/pull/10048" rel="noopener noreferrer"&gt;#10048&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Template print]&lt;/strong&gt; Fixed template print permission checks so hidden fields and records outside the current role's view scope are not rendered.by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow string type of assignee ID to be addedby mytharcher&lt;/li&gt;
&lt;li&gt;Fix approval form fields becoming single-column in print previewby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the issue where fields in disabled approval subtables can still be editedby zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.22
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-09&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix association fields showing the default operator setting in filter forms (&lt;a href="https://github.com/nocobase/nocobase/pull/10025" rel="noopener noreferrer"&gt;#10025&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix mobile popup spacing for table quick edit and select fields (&lt;a href="https://github.com/nocobase/nocobase/pull/10020" rel="noopener noreferrer"&gt;#10020&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[cli]&lt;/strong&gt; Fixed NocoBase CLI default value issues for image registry fallback, built-in database images, env info display, and prompt initialization. (&lt;a href="https://github.com/nocobase/nocobase/pull/10027" rel="noopener noreferrer"&gt;#10027&lt;/a&gt;)by chenos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Authentication]&lt;/strong&gt; Fix the issue where reset password links open the sign-in page (&lt;a href="https://github.com/nocobase/nocobase/pull/10006" rel="noopener noreferrer"&gt;#10006&lt;/a&gt;)by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.21
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-08&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt; Add OrcaRouter as an LLM provider (&lt;a href="https://github.com/nocobase/nocobase/pull/10003" rel="noopener noreferrer"&gt;#10003&lt;/a&gt;)by jinhaosong-source&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow]&lt;/strong&gt; Remove arithmetic operators for condition node (&lt;a href="https://github.com/nocobase/nocobase/pull/10019" rel="noopener noreferrer"&gt;#10019&lt;/a&gt;)by mytharcher&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed stale linkage field states when switching records in runtime edit popups. (&lt;a href="https://github.com/nocobase/nocobase/pull/10010" rel="noopener noreferrer"&gt;#10010&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed an issue where association field default values in filter forms could not be cleared. (&lt;a href="https://github.com/nocobase/nocobase/pull/10022" rel="noopener noreferrer"&gt;#10022&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[File manager]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reject active-content filenames during file upload unless the configured storage MIME type rule explicitly allows them. (&lt;a href="https://github.com/nocobase/nocobase/pull/10021" rel="noopener noreferrer"&gt;#10021&lt;/a&gt;)by mytharcher
Reference: &lt;a href="https://docs.nocobase.com/file-manager/storage/local" rel="noopener noreferrer"&gt;Local storage&lt;/a&gt;, &lt;a href="https://docs.nocobase.com/security/guide" rel="noopener noreferrer"&gt;Security guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fixed missing Attachment field interface in v2 data table management, and fixed image upload preflight checks for public form file relationship fields. (&lt;a href="https://github.com/nocobase/nocobase/pull/10012" rel="noopener noreferrer"&gt;#10012&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source manager]&lt;/strong&gt; Hide the historical attachment field interface from the V2 data table Add field menu. (&lt;a href="https://github.com/nocobase/nocobase/pull/10018" rel="noopener noreferrer"&gt;#10018&lt;/a&gt;)by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data visualization]&lt;/strong&gt; Fixed chart click interactions that could stop working after chart rerendering (&lt;a href="https://github.com/nocobase/nocobase/pull/10031" rel="noopener noreferrer"&gt;#10031&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Migration manager]&lt;/strong&gt; Fixed an issue where migration could leave an app stuck on the repair screenby 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App supervisor]&lt;/strong&gt; Fixed app JWT secret isolation so main app tokens are no longer accepted by sub apps after an independent secret is enabledby 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.20
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-07&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Improved the Docker CLI setup by supporting configurable default NocoBase image registry/variant, fixing proxy and &lt;code&gt;no-nginx&lt;/code&gt; image port compatibility, and adding Docker Nginx/Caddy installation guides. (&lt;a href="https://github.com/nocobase/nocobase/pull/9972" rel="noopener noreferrer"&gt;#9972&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;li&gt;Refactor CLI setup startup to reuse &lt;code&gt;nb app start&lt;/code&gt;, normalize API base path redirects, persist shared env proxy defaults, and rebuild Docker proxy containers when published ports change. (&lt;a href="https://github.com/nocobase/nocobase/pull/9997" rel="noopener noreferrer"&gt;#9997&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed Vditor asset loading in production by resolving plugin CDN paths from the effective webpack public path. (&lt;a href="https://github.com/nocobase/nocobase/pull/10008" rel="noopener noreferrer"&gt;#10008&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;li&gt;Fixed an issue where Quick Edit could fail to switch dropdown options when navigating between pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/10007" rel="noopener noreferrer"&gt;#10007&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where popup configuration became inconsistent when toggling design modes. (&lt;a href="https://github.com/nocobase/nocobase/pull/10005" rel="noopener noreferrer"&gt;#10005&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File manager]&lt;/strong&gt; Reject active-content filenames during file upload unless the configured storage MIME type rule explicitly allows them. (&lt;a href="https://github.com/nocobase/nocobase/pull/9994" rel="noopener noreferrer"&gt;#9994&lt;/a&gt;)by mytharcher&lt;br&gt;
Reference: &lt;a href="//docs/docs/en/file-manager/storage/local.md"&gt;Local storage&lt;/a&gt;, &lt;a href="//docs/docs/en/security/guide.md"&gt;Security guide&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External MariaDB]&lt;/strong&gt; Fix Add all collections toggle in MySQL, MSSQL, and MariaDB external data source settings.by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  next
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0xys8cxci7kol0jjde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0xys8cxci7kol0jjde.png" alt="next.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.2.0-beta.13
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-12&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Redis worker ID allocator]&lt;/strong&gt; Restored standalone startup without Redis worker ID configurationby 2013xile&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.2.0-beta.12
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-11&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[server]&lt;/strong&gt; Fixed custom portals missing when multi-application plugins are disabled (&lt;a href="https://github.com/nocobase/nocobase/pull/10055" rel="noopener noreferrer"&gt;#10055&lt;/a&gt;)by 2013xile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[app]&lt;/strong&gt; Fixed Redis cache configuration ignoring the dedicated cache URL (&lt;a href="https://github.com/nocobase/nocobase/pull/10065" rel="noopener noreferrer"&gt;#10065&lt;/a&gt;)by 2013xile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Redis worker ID allocator]&lt;/strong&gt; Improved Redis worker ID isolation and failure diagnosticsby 2013xile&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.2.0-beta.11
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-11&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[app]&lt;/strong&gt; Fix lazy-loaded assets using an external script URL when &lt;code&gt;CDN_BASE_URL&lt;/code&gt; is empty. (&lt;a href="https://github.com/nocobase/nocobase/pull/10052" rel="noopener noreferrer"&gt;#10052&lt;/a&gt;)by Molunerfinn&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed v2 ScanInput recognition for Safari QR images selected from the upload path. (&lt;a href="https://github.com/nocobase/nocobase/pull/10011" rel="noopener noreferrer"&gt;#10011&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed an issue where button linkage rule states in table blocks could become polluted after pagination. (&lt;a href="https://github.com/nocobase/nocobase/pull/10038" rel="noopener noreferrer"&gt;#10038&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed client runtime asset base URL normalization when &lt;code&gt;__webpack_public_path__&lt;/code&gt; is injected without a trailing slash, and added coverage for that edge case. (&lt;a href="https://github.com/nocobase/nocobase/pull/10040" rel="noopener noreferrer"&gt;#10040&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where overriding ctx.api in a JS block could cause a Maximum call stack size exceeded error. (&lt;a href="https://github.com/nocobase/nocobase/pull/10051" rel="noopener noreferrer"&gt;#10051&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Delay node]&lt;/strong&gt; Prevented delay nodes from accepting numeric durations less than 1 through the API (&lt;a href="https://github.com/nocobase/nocobase/pull/10057" rel="noopener noreferrer"&gt;#10057&lt;/a&gt;)by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Form drafts]&lt;/strong&gt; Fixed form drafts disappearing after consecutive page refreshes (&lt;a href="https://github.com/nocobase/nocobase/pull/10059" rel="noopener noreferrer"&gt;#10059&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt; Fixed subflow nodes remaining pending when the child workflow fails before creating an execution record (&lt;a href="https://github.com/nocobase/nocobase/pull/10043" rel="noopener noreferrer"&gt;#10043&lt;/a&gt;)by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Flow engine]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an issue where using a local AI agent to configure linkage rules could trigger rendering errors. (&lt;a href="https://github.com/nocobase/nocobase/pull/10023" rel="noopener noreferrer"&gt;#10023&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed popup record variables failing to resolve from external NocoBase data sources (&lt;a href="https://github.com/nocobase/nocobase/pull/10048" rel="noopener noreferrer"&gt;#10048&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: Main]&lt;/strong&gt; Prevented invalid many-to-many relationship field configurations from being saved (&lt;a href="https://github.com/nocobase/nocobase/pull/10044" rel="noopener noreferrer"&gt;#10044&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection: Tree]&lt;/strong&gt; Fixed tree path collection creation to avoid passing internal field model metadata into collection options. (&lt;a href="https://github.com/nocobase/nocobase/pull/10035" rel="noopener noreferrer"&gt;#10035&lt;/a&gt;)by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Template print]&lt;/strong&gt; Fixed template print permission checks so hidden fields and records outside the current role's view scope are not rendered.by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allow string type of assignee ID to be addedby mytharcher&lt;/li&gt;
&lt;li&gt;Fix approval form fields becoming single-column in print previewby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the issue where fields in disabled approval subtables can still be editedby zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.2.0-beta.10
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-09&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Add OrcaRouter as an LLM provider (&lt;a href="https://github.com/nocobase/nocobase/pull/10003" rel="noopener noreferrer"&gt;#10003&lt;/a&gt;)by jinhaosong-source&lt;/li&gt;
&lt;li&gt;Added structured AI usage records for usage statistics (&lt;a href="https://github.com/nocobase/nocobase/pull/10004" rel="noopener noreferrer"&gt;#10004&lt;/a&gt;)by 2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow]&lt;/strong&gt; Remove arithmetic operators for condition node (&lt;a href="https://github.com/nocobase/nocobase/pull/10019" rel="noopener noreferrer"&gt;#10019&lt;/a&gt;)by mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Data visualization]&lt;/strong&gt; Improved chart event scripts so custom event handlers can clean up safely (&lt;a href="https://github.com/nocobase/nocobase/pull/10034" rel="noopener noreferrer"&gt;#10034&lt;/a&gt;)by 2013xile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Data source manager]&lt;/strong&gt; Hide deprecated v2 main data source collection templates from the create collection menu. (&lt;a href="https://github.com/nocobase/nocobase/pull/10009" rel="noopener noreferrer"&gt;#10009&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix association fields showing the default operator setting in filter forms (&lt;a href="https://github.com/nocobase/nocobase/pull/10025" rel="noopener noreferrer"&gt;#10025&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix mobile popup spacing for table quick edit and select fields (&lt;a href="https://github.com/nocobase/nocobase/pull/10020" rel="noopener noreferrer"&gt;#10020&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fixed an issue where association field default values in filter forms could not be cleared. (&lt;a href="https://github.com/nocobase/nocobase/pull/10022" rel="noopener noreferrer"&gt;#10022&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed stale linkage field states when switching records in runtime edit popups. (&lt;a href="https://github.com/nocobase/nocobase/pull/10010" rel="noopener noreferrer"&gt;#10010&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed an issue where Quick Edit could fail to switch dropdown options when navigating between pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/10007" rel="noopener noreferrer"&gt;#10007&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed Vditor asset loading in production by resolving plugin CDN paths from the effective webpack public path. (&lt;a href="https://github.com/nocobase/nocobase/pull/10008" rel="noopener noreferrer"&gt;#10008&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[cli]&lt;/strong&gt; Fixed NocoBase CLI default value issues for image registry fallback, built-in database images, env info display, and prompt initialization. (&lt;a href="https://github.com/nocobase/nocobase/pull/10027" rel="noopener noreferrer"&gt;#10027&lt;/a&gt;)by chenos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where popup configuration became inconsistent when toggling design modes. (&lt;a href="https://github.com/nocobase/nocobase/pull/10005" rel="noopener noreferrer"&gt;#10005&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data visualization]&lt;/strong&gt; Fixed chart click interactions that could stop working after chart rerendering (&lt;a href="https://github.com/nocobase/nocobase/pull/10031" rel="noopener noreferrer"&gt;#10031&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Fix unnecessary login-required requests on V2 public form pages (&lt;a href="https://github.com/nocobase/nocobase/pull/10013" rel="noopener noreferrer"&gt;#10013&lt;/a&gt;)by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Authentication]&lt;/strong&gt; Fix the issue where reset password links open the sign-in page (&lt;a href="https://github.com/nocobase/nocobase/pull/10006" rel="noopener noreferrer"&gt;#10006&lt;/a&gt;)by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source manager]&lt;/strong&gt; Hide the historical attachment field interface from the V2 data table Add field menu. (&lt;a href="https://github.com/nocobase/nocobase/pull/10018" rel="noopener noreferrer"&gt;#10018&lt;/a&gt;)by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[File manager]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reject active-content filenames during file upload unless the configured storage MIME type rule explicitly allows them. (&lt;a href="https://github.com/nocobase/nocobase/pull/10021" rel="noopener noreferrer"&gt;#10021&lt;/a&gt;)by mytharcher
Reference: &lt;a href="https://docs.nocobase.com/file-manager/storage/local" rel="noopener noreferrer"&gt;Local storage&lt;/a&gt;, &lt;a href="https://docs.nocobase.com/security/guide" rel="noopener noreferrer"&gt;Security guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fixed missing Attachment field interface in v2 data table management, and fixed image upload preflight checks for public form file relationship fields. (&lt;a href="https://github.com/nocobase/nocobase/pull/10012" rel="noopener noreferrer"&gt;#10012&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Embed NocoBase]&lt;/strong&gt; Fixed an issue where tokens could be polluted when embedding NocoBase pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/9948" rel="noopener noreferrer"&gt;#9948&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External MariaDB]&lt;/strong&gt; Fix Add all collections toggle in MySQL, MSSQL, and MariaDB external data source settings.by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Migration manager]&lt;/strong&gt; Fixed an issue where migration could leave an app stuck on the repair screenby 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App supervisor]&lt;/strong&gt; Fixed app JWT secret isolation so main app tokens are no longer accepted by sub apps after an independent secret is enabledby 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  develop
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fow9jd2rkp6w0rmrzuzwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fow9jd2rkp6w0rmrzuzwl.png" alt="develop.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.2.0-alpha.8
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-13&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Public forms]&lt;/strong&gt; In the v1 public form, support creating v2 forms and prohibit creating v1 forms (&lt;a href="https://github.com/nocobase/nocobase/pull/10045" rel="noopener noreferrer"&gt;#10045&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow]&lt;/strong&gt; Unsupported workflow v2 canvas nodes now keep the normal node card actions while showing the node type as unsupported. (&lt;a href="https://github.com/nocobase/nocobase/pull/10054" rel="noopener noreferrer"&gt;#10054&lt;/a&gt;)by mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Flow engine]&lt;/strong&gt; Support multi portals for ui build apis. (&lt;a href="https://github.com/nocobase/nocobase/pull/10072" rel="noopener noreferrer"&gt;#10072&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt; Improved AI employee tool settings, data-query guardrails, relation field querying, and malformed tool call diagnostics. (&lt;a href="https://github.com/nocobase/nocobase/pull/10042" rel="noopener noreferrer"&gt;#10042&lt;/a&gt;)by cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Collection: SQL]&lt;/strong&gt; Not user-facing; added client-v2 unit test coverage for migrated plugins. (&lt;a href="https://github.com/nocobase/nocobase/pull/9967" rel="noopener noreferrer"&gt;#9967&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix an error in v2 workflow value editors when a collection field is named nodeName. (&lt;a href="https://github.com/nocobase/nocobase/pull/10067" rel="noopener noreferrer"&gt;#10067&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed an issue where button linkage rule states in table blocks could become polluted after pagination. (&lt;a href="https://github.com/nocobase/nocobase/pull/10038" rel="noopener noreferrer"&gt;#10038&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed workflow v2 variable editors to preserve saved variable pills, disabled states, and operator labels consistently across trigger, filter, and field assignment forms. (&lt;a href="https://github.com/nocobase/nocobase/pull/10041" rel="noopener noreferrer"&gt;#10041&lt;/a&gt;)by Molunerfinn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[app]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed Redis cache configuration ignoring the dedicated cache URL (&lt;a href="https://github.com/nocobase/nocobase/pull/10065" rel="noopener noreferrer"&gt;#10065&lt;/a&gt;)by 2013xile&lt;/li&gt;
&lt;li&gt;Fix lazy-loaded assets using an external script URL when &lt;code&gt;CDN_BASE_URL&lt;/code&gt; is empty. (&lt;a href="https://github.com/nocobase/nocobase/pull/10052" rel="noopener noreferrer"&gt;#10052&lt;/a&gt;)by Molunerfinn&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[server]&lt;/strong&gt; Fixed custom portals missing when multi-application plugins are disabled (&lt;a href="https://github.com/nocobase/nocobase/pull/10055" rel="noopener noreferrer"&gt;#10055&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an issue where users could type extra text after selecting a variable in single-value variable inputs. (&lt;a href="https://github.com/nocobase/nocobase/pull/10050" rel="noopener noreferrer"&gt;#10050&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed an issue where overriding ctx.api in a JS block could cause a Maximum call stack size exceeded error. (&lt;a href="https://github.com/nocobase/nocobase/pull/10051" rel="noopener noreferrer"&gt;#10051&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Delay node]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix delay node duration input and prevent values below the minimum from being saved. (&lt;a href="https://github.com/nocobase/nocobase/pull/10056" rel="noopener noreferrer"&gt;#10056&lt;/a&gt;)by Molunerfinn&lt;/li&gt;
&lt;li&gt;Prevented delay nodes from accepting numeric durations less than 1 through the API (&lt;a href="https://github.com/nocobase/nocobase/pull/10057" rel="noopener noreferrer"&gt;#10057&lt;/a&gt;)by mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed subflow nodes remaining pending when the child workflow fails before creating an execution record (&lt;a href="https://github.com/nocobase/nocobase/pull/10043" rel="noopener noreferrer"&gt;#10043&lt;/a&gt;)by mytharcher&lt;/li&gt;
&lt;li&gt;Fixed manual workflow execution returning an error when a valid request does not start an execution. (&lt;a href="https://github.com/nocobase/nocobase/pull/10049" rel="noopener noreferrer"&gt;#10049&lt;/a&gt;)by mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: Main]&lt;/strong&gt; Prevented invalid many-to-many relationship field configurations from being saved (&lt;a href="https://github.com/nocobase/nocobase/pull/10044" rel="noopener noreferrer"&gt;#10044&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Flow engine]&lt;/strong&gt; Fixed popup record variables failing to resolve from external NocoBase data sources (&lt;a href="https://github.com/nocobase/nocobase/pull/10048" rel="noopener noreferrer"&gt;#10048&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Form drafts]&lt;/strong&gt; Fixed form drafts disappearing after consecutive page refreshes (&lt;a href="https://github.com/nocobase/nocobase/pull/10059" rel="noopener noreferrer"&gt;#10059&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Aggregate node]&lt;/strong&gt; Fix validation rule to allow null filter (&lt;a href="https://github.com/nocobase/nocobase/pull/10053" rel="noopener noreferrer"&gt;#10053&lt;/a&gt;)by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Redis worker ID allocator]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restored standalone startup without Redis worker ID configurationby 2013xile&lt;/li&gt;
&lt;li&gt;Improved Redis worker ID isolation and failure diagnosticsby 2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[plugin-service-platform]&lt;/strong&gt; Restored licensed plugin downloads from the service platform.by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Template print]&lt;/strong&gt; Fixed template print permission checks so hidden fields and records outside the current role's view scope are not rendered.by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix v2 approval subtables not displaying correctly in detailsby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix empty approval interfaces and fixed assignee IDsby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the issue where fields in disabled approval subtables can still be editedby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Allow string type of assignee ID to be addedby mytharcher&lt;/li&gt;
&lt;li&gt;Fix approval form fields becoming single-column in print previewby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Close the Apply new drawer when opening an approval formby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix missing approval data on approval task cardsby zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.2.0-alpha.7
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-09&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add OrcaRouter as an LLM provider (&lt;a href="https://github.com/nocobase/nocobase/pull/10003" rel="noopener noreferrer"&gt;#10003&lt;/a&gt;)by jinhaosong-source&lt;/li&gt;
&lt;li&gt;Added structured AI usage records for usage statistics (&lt;a href="https://github.com/nocobase/nocobase/pull/10004" rel="noopener noreferrer"&gt;#10004&lt;/a&gt;)by 2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Add approval initiation and todo blocks for v2 pagesby zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refactor Markdown Vditor into a unified plugin-backed Markdown engine with compatibility bridges for existing Markdown block and Vditor field plugins. (&lt;a href="https://github.com/nocobase/nocobase/pull/9998" rel="noopener noreferrer"&gt;#9998&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Improved AI employee web search to reduce unnecessary model reasoning and better use provider-specific thinking controls. (&lt;a href="https://github.com/nocobase/nocobase/pull/9996" rel="noopener noreferrer"&gt;#9996&lt;/a&gt;)by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data visualization]&lt;/strong&gt; Improved chart event scripts so custom event handlers can clean up safely (&lt;a href="https://github.com/nocobase/nocobase/pull/10034" rel="noopener noreferrer"&gt;#10034&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt; Remove arithmetic operators for condition node (&lt;a href="https://github.com/nocobase/nocobase/pull/10019" rel="noopener noreferrer"&gt;#10019&lt;/a&gt;)by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source manager]&lt;/strong&gt; Hide deprecated v2 main data source collection templates from the create collection menu. (&lt;a href="https://github.com/nocobase/nocobase/pull/10009" rel="noopener noreferrer"&gt;#10009&lt;/a&gt;)by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Block: Comment]&lt;/strong&gt; Improved comment submit actions and fixed related comment/user form submission issues. (&lt;a href="https://github.com/nocobase/nocobase/pull/10002" rel="noopener noreferrer"&gt;#10002&lt;/a&gt;)by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed client runtime asset base URL normalization when &lt;code&gt;__webpack_public_path__&lt;/code&gt; is injected without a trailing slash, and added coverage for that edge case. (&lt;a href="https://github.com/nocobase/nocobase/pull/10040" rel="noopener noreferrer"&gt;#10040&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;li&gt;Fixed v2 ScanInput recognition for Safari QR images selected from the upload path. (&lt;a href="https://github.com/nocobase/nocobase/pull/10011" rel="noopener noreferrer"&gt;#10011&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fix association fields showing the default operator setting in filter forms (&lt;a href="https://github.com/nocobase/nocobase/pull/10025" rel="noopener noreferrer"&gt;#10025&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix mobile popup spacing for table quick edit and select fields (&lt;a href="https://github.com/nocobase/nocobase/pull/10020" rel="noopener noreferrer"&gt;#10020&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fixed an issue where Quick Edit could fail to switch dropdown options when navigating between pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/10007" rel="noopener noreferrer"&gt;#10007&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed Vditor asset loading in production by resolving plugin CDN paths from the effective webpack public path. (&lt;a href="https://github.com/nocobase/nocobase/pull/10008" rel="noopener noreferrer"&gt;#10008&lt;/a&gt;)by chenos&lt;/li&gt;
&lt;li&gt;Fixed stale linkage field states when switching records in runtime edit popups. (&lt;a href="https://github.com/nocobase/nocobase/pull/10010" rel="noopener noreferrer"&gt;#10010&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed an issue where association field default values in filter forms could not be cleared. (&lt;a href="https://github.com/nocobase/nocobase/pull/10022" rel="noopener noreferrer"&gt;#10022&lt;/a&gt;)by gchust&lt;/li&gt;
&lt;li&gt;Fixed an issue where v2 workflow assigned fields could still be edited in read-only executed workflow versions. (&lt;a href="https://github.com/nocobase/nocobase/pull/10014" rel="noopener noreferrer"&gt;#10014&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[cli]&lt;/strong&gt; Fixed NocoBase CLI default value issues for image registry fallback, built-in database images, env info display, and prompt initialization. (&lt;a href="https://github.com/nocobase/nocobase/pull/10027" rel="noopener noreferrer"&gt;#10027&lt;/a&gt;)by chenos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where popup configuration became inconsistent when toggling design modes. (&lt;a href="https://github.com/nocobase/nocobase/pull/10005" rel="noopener noreferrer"&gt;#10005&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Collection: Tree]&lt;/strong&gt; Fixed tree path collection creation to avoid passing internal field model metadata into collection options. (&lt;a href="https://github.com/nocobase/nocobase/pull/10035" rel="noopener noreferrer"&gt;#10035&lt;/a&gt;)by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Public forms]&lt;/strong&gt; Fix the issue where public forms can still be configured when UI Editor is off (&lt;a href="https://github.com/nocobase/nocobase/pull/10036" rel="noopener noreferrer"&gt;#10036&lt;/a&gt;)by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Flow engine]&lt;/strong&gt; Fixed an issue where using a local AI agent to configure linkage rules could trigger rendering errors. (&lt;a href="https://github.com/nocobase/nocobase/pull/10023" rel="noopener noreferrer"&gt;#10023&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Authentication]&lt;/strong&gt; Fix the issue where reset password links open the sign-in page (&lt;a href="https://github.com/nocobase/nocobase/pull/10006" rel="noopener noreferrer"&gt;#10006&lt;/a&gt;)by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data visualization]&lt;/strong&gt; Fixed chart click interactions that could stop working after chart rerendering (&lt;a href="https://github.com/nocobase/nocobase/pull/10031" rel="noopener noreferrer"&gt;#10031&lt;/a&gt;)by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed workflow v2 condition operands to stay on one row by default and wrap correctly when selected variable paths are too long. (&lt;a href="https://github.com/nocobase/nocobase/pull/10033" rel="noopener noreferrer"&gt;#10033&lt;/a&gt;)by Molunerfinn&lt;/li&gt;
&lt;li&gt;Fix untranslated workflow result labels and oversized CC configuration dialogs (&lt;a href="https://github.com/nocobase/nocobase/pull/9977" rel="noopener noreferrer"&gt;#9977&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix display and detail loading issues in the workflow v2 task center (&lt;a href="https://github.com/nocobase/nocobase/pull/10001" rel="noopener noreferrer"&gt;#10001&lt;/a&gt;)by zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source manager]&lt;/strong&gt; Hide the historical attachment field interface from the V2 data table Add field menu. (&lt;a href="https://github.com/nocobase/nocobase/pull/10018" rel="noopener noreferrer"&gt;#10018&lt;/a&gt;)by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[File manager]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reject active-content filenames during file upload unless the configured storage MIME type rule explicitly allows them. (&lt;a href="https://github.com/nocobase/nocobase/pull/10021" rel="noopener noreferrer"&gt;#10021&lt;/a&gt;)by mytharcher
Reference: &lt;a href="https://docs.nocobase.com/file-manager/storage/local" rel="noopener noreferrer"&gt;Local storage&lt;/a&gt;, &lt;a href="https://docs.nocobase.com/security/guide" rel="noopener noreferrer"&gt;Security guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Reject active-content filenames during file upload unless the configured storage MIME type rule explicitly allows them. (&lt;a href="https://github.com/nocobase/nocobase/pull/9994" rel="noopener noreferrer"&gt;#9994&lt;/a&gt;)by mytharcher
Reference: &lt;a href="//docs/docs/en/file-manager/storage/local.md"&gt;Local storage&lt;/a&gt;, &lt;a href="//docs/docs/en/security/guide.md"&gt;Security guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Fixed missing Attachment field interface in v2 data table management, and fixed image upload preflight checks for public form file relationship fields. (&lt;a href="https://github.com/nocobase/nocobase/pull/10012" rel="noopener noreferrer"&gt;#10012&lt;/a&gt;)by katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Embed NocoBase]&lt;/strong&gt; Fixed an issue where tokens could be polluted when embedding NocoBase pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/9948" rel="noopener noreferrer"&gt;#9948&lt;/a&gt;)by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Fix unnecessary login-required requests on V2 public form pages (&lt;a href="https://github.com/nocobase/nocobase/pull/10013" rel="noopener noreferrer"&gt;#10013&lt;/a&gt;)by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI: Knowledge base]&lt;/strong&gt; Added an overwrite option for AI knowledge base workflow document creation, allowing workflows to replace existing documents with the same key.by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External MariaDB]&lt;/strong&gt; Fix Add all collections toggle in MySQL, MSSQL, and MariaDB external data source settings.by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[plugin-service-platform]&lt;/strong&gt; Disabled the service platform plugin download endpoint.by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Subflow]&lt;/strong&gt; Fixed workflow title search in the subflow node configuration selector.by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Migration manager]&lt;/strong&gt; Fixed an issue where migration could leave an app stuck on the repair screenby 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix approval assignee sorting and hide unsupported legacy configuration entriesby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the error when configuring approval workflow conditionsby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix missing processed approval details in v2 task detail popupsby zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix approval task form and action issues in the workflow v2 task centerby zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App supervisor]&lt;/strong&gt; Fixed app JWT secret isolation so main app tokens are no longer accepted by sub apps after an independent secret is enabledby 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
    <item>
      <title>Build an Interactive Operations Dashboard with NocoBase</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Fri, 10 Jul 2026 07:28:47 +0000</pubDate>
      <link>https://dev.to/nocobase/build-an-interactive-operations-dashboard-with-nocobase-534</link>
      <guid>https://dev.to/nocobase/build-an-interactive-operations-dashboard-with-nocobase-534</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/build-interactive-operations-dashboard-with-nocobase" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/build-interactive-operations-dashboard-with-nocobase&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article uses an operations dashboard for a ticketing system as an example. It shows how to combine NocoBase chart blocks, filter blocks, and JS blocks to build a data dashboard that supports linked filters, chart drilldowns, and custom styling.&lt;/p&gt;

&lt;p&gt;Although the example comes from a ticketing scenario, the same approach also applies to CRM, equipment maintenance, project management, approval workflows, customer success, and other business systems.&lt;/p&gt;

&lt;p&gt;💡 The point of this article is not to show how to write a large dashboard with a JS block. Instead, it explains how to combine NocoBase native blocks with JS blocks: native blocks handle standard capabilities, while JS blocks fill in the personalized experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm5ek7c9f4jfhxbirogpq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm5ek7c9f4jfhxbirogpq.png" alt="JS 区块-6ypvx7.png" width="800" height="774"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;💬 Hey, you're reading the NocoBase blog. NocoBase is the most extensible AI-powered no-code/low-code development platform for building enterprise applications, internal tools, and all kinds of systems. It’s fully self-hosted, plugin-based, and developer-friendly. → &lt;a href="https://github.com/nocobase/nocobase" rel="noopener noreferrer"&gt;Explore NocoBase on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Scenario Goal
&lt;/h2&gt;

&lt;p&gt;We want to build an Operations dashboard that helps operations or service teams quickly understand the current workload:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many tickets are still open&lt;/li&gt;
&lt;li&gt;Which tickets have SLA risks&lt;/li&gt;
&lt;li&gt;How new ticket volume is trending&lt;/li&gt;
&lt;li&gt;How tickets are distributed by status and priority&lt;/li&gt;
&lt;li&gt;How to view matching records after clicking a chart&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The page can be roughly divided into four layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Top filter area: time, service group, request type, priority, and SLA status&lt;/li&gt;
&lt;li&gt;KPI area: Open backlog, Unassigned, SLA warning, and more&lt;/li&gt;
&lt;li&gt;Chart analysis area: trends, status distribution, SLA distribution, and priority mix&lt;/li&gt;
&lt;li&gt;Drilldown detail area: show matching records after a chart click&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Start with the Right Building Approach
&lt;/h2&gt;

&lt;p&gt;When building a data dashboard, it is easy to turn the problem into a binary choice.&lt;/p&gt;

&lt;p&gt;Either you use only NocoBase native blocks, which are easy to configure but may feel less flexible in styling and interaction; or you write a large JS block and control queries, charts, filters, and drilldowns yourself, which means losing much of the convenience that low-code configuration provides.&lt;/p&gt;

&lt;p&gt;A better approach is to combine the two.&lt;/p&gt;

&lt;p&gt;In this Operations dashboard, we do not write the entire page as one large JS dashboard. Instead, we split responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The top filters use NocoBase’s built-in filter block.&lt;/li&gt;
&lt;li&gt;Trend charts, status distribution, and SLA distribution use native chart blocks.&lt;/li&gt;
&lt;li&gt;KPI cards and drilldown details use JS blocks.&lt;/li&gt;
&lt;li&gt;The filter block affects both chart blocks and JS blocks.&lt;/li&gt;
&lt;li&gt;After a chart click, the drilldown condition is passed to the JS detail block below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benefit is clear: standard statistics and filtering still keep NocoBase’s configuration capabilities, while personalized display and complex interactions are handled by JS blocks. The page is neither “configuration only” nor “all code.” Configuration and code each handle what they are good at.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. How to Customize Chart Block Styles
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnuz0q8xkowts36dqx9jc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnuz0q8xkowts36dqx9jc.png" alt="图表区块-mf0fqe.png" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a NocoBase chart block, you can first define the aggregation logic with Query builder, and then adjust the style with a custom ECharts option.&lt;/p&gt;

&lt;p&gt;Using “ticket status statistics” as an example, Query builder can be configured as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data table: tickets&lt;/li&gt;
&lt;li&gt;Metric: id count, alias ticketCount&lt;/li&gt;
&lt;li&gt;Dimension: status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key point is that when customizing the style, you do not need to rewrite the query. You only need to process the chart display based on &lt;code&gt;ctx.data.objects&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This line reads the chart query result. Then define the status labels and colors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;new&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Open&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;pending_customer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pending customer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Resolved&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;closed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Closed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;new&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#1677ff&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#22a06b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;pending_customer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f59f00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#13c2c2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;closed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#8c8c8c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is recommended to use &lt;code&gt;ctx.t()&lt;/code&gt; for all visible text so that multilingual support can be added later.&lt;/p&gt;

&lt;p&gt;When generating chart data, you can attach drilldown information to each chart data point:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ticketCount&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;itemStyle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#8c8c8c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;borderRadius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;ticketingDrilldown&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$eq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most important part here is &lt;code&gt;ticketingDrilldown&lt;/code&gt;. It is not a standard ECharts field. It is business context that we put into the data ourselves, and it will be used later when the user clicks the chart.&lt;/p&gt;

&lt;p&gt;Finally, return the ECharts option:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;tooltip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;axisPointer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shadow&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;xAxis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;category&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;yAxis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;value&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;minInterval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;series&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tickets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;barWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The core idea of this part is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query builder is responsible for statistical data.&lt;/li&gt;
&lt;li&gt;Custom option is responsible for visual expression.&lt;/li&gt;
&lt;li&gt;Custom fields carry drilldown context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Make the System Filter Block the Observation Scope for the Whole Page
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9p94inyvmtx0x3je7j0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9p94inyvmtx0x3je7j0.gif" alt="筛选区-fep21g.gif" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The filter area in an operations dashboard should not be an isolated form. It represents the current observation scope of the entire page.&lt;/p&gt;

&lt;p&gt;For example, when a user selects a service group, a request type, and a creation time range, the KPI cards, trend chart, status distribution, and drilldown details should all be displayed under the same conditions. Otherwise, numbers from different blocks may conflict with each other, making it hard for users to know which result belongs to the current scope.&lt;/p&gt;

&lt;p&gt;Here, we directly use NocoBase’s built-in filter block instead of writing a custom filter component. The native filter block can be naturally bound to chart blocks, allowing the Chart block to continue using Query builder, permissions, refresh, and filtering mechanisms.&lt;/p&gt;

&lt;p&gt;The top &lt;code&gt;Dashboard scope&lt;/code&gt; can include these filter fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created at&lt;/li&gt;
&lt;li&gt;Service group&lt;/li&gt;
&lt;li&gt;Request type&lt;/li&gt;
&lt;li&gt;Priority&lt;/li&gt;
&lt;li&gt;SLA status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For JS blocks, you only need to read the same set of filter conditions in code and convert them into a query filter. This allows KPI cards and drilldown details to stay consistent with native charts.&lt;/p&gt;

&lt;p&gt;The filter combination can be wrapped as a small function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;combineFilters&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$and&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;parts&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Count records by filter condition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;countTickets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;makeResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MultiRecordResource&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setResourceName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tickets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setPageSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;refresh&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMeta&lt;/span&gt;&lt;span class="p"&gt;?.()&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key lines are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;refresh&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JS blocks query business data through resource instead of directly writing SQL. This makes it easier to stay aligned with NocoBase permissions, data sources, and page runtime behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Use JS Blocks to Display KPI Cards
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk9euhsjfigqa9lu227mf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk9euhsjfigqa9lu227mf.gif" alt="筛选区-n6tphh.gif" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;KPI cards are better suited to JS blocks, because a KPI is usually not a single query. It is often a combination of several business metrics, such as unfinished tickets, unassigned tickets, SLA warning, SLA breached, new tickets, and resolved tickets.&lt;/p&gt;

&lt;p&gt;A JS block can re-query data according to the current filter scope and render the results as statistic cards.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Col&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Row&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Statistic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Tag&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;libs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;antd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scopeFilter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getDashboardScopeFilter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;openBacklog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;countTickets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nf"&gt;combineFilters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scopeFilter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$notIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resolved&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;closed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cancelled&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Row&lt;/span&gt; &lt;span class="nx"&gt;gutter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Col&lt;/span&gt; &lt;span class="nx"&gt;span&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;small&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Tag&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Tag&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Statistic&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Open backlog&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;openBacklog&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Card&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Col&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Row&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;,
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key points for JS blocks are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;ctx.makeResource()&lt;/code&gt; to query data.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;ctx.libs.antd&lt;/code&gt; to render the UI.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;ctx.render()&lt;/code&gt; to output content.&lt;/li&gt;
&lt;li&gt;Re-render the JS block after filters change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On a real page, filter and reset buttons can be configured with event flows. After they complete the native filter action, they can also refresh the KPI JS block and the drilldown JS block. This way, one click updates both the charts and the custom content under the same scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Link Chart Blocks with a JS Block for Drilldown
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzvdj1uz5vm0bd7w4w4p8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzvdj1uz5vm0bd7w4w4p8.gif" alt="图表点击下钻-4bo7ww.gif" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chart drilldown is a very useful dashboard interaction.&lt;/p&gt;

&lt;p&gt;In a ticketing scenario, when the user clicks the “Status: Open” bar, the detail area below shows all Open tickets. When the user clicks “SLA breached,” the detail area shows all overdue tickets.&lt;/p&gt;

&lt;p&gt;The implementation idea is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Attach &lt;code&gt;ticketingDrilldown&lt;/code&gt; to chart data points.&lt;/li&gt;
&lt;li&gt;Read the drilldown information from the chart event.&lt;/li&gt;
&lt;li&gt;Write the drilldown information into the target JS block context.&lt;/li&gt;
&lt;li&gt;Trigger the target JS block to re-render.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key code in the chart event is shown below. First, locate the drilldown JS block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DRILLDOWN_TARGET_UID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;v7mioopm6rm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getDrilldownTarget&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getModel&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;DRILLDOWN_TARGET_UID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;flowEngine&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;flowEngine&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;getModel&lt;/span&gt;&lt;span class="p"&gt;?.(&lt;/span&gt;&lt;span class="nx"&gt;DRILLDOWN_TARGET_UID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then write the drilldown condition from the chart click into the target block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;applyDrilldown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;drilldown&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;drilldown&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getDrilldownTarget&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ticketingDashboardDrilldown&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;drilldown&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rerender&lt;/span&gt;&lt;span class="p"&gt;?.();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most important lines are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ticketingDashboardDrilldown&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;drilldown&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rerender&lt;/span&gt;&lt;span class="p"&gt;?.();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first line passes the drilldown condition to the JS block, and the second line triggers the JS block to refresh.&lt;/p&gt;

&lt;p&gt;Finally, bind the chart click event:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clickHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;applyDrilldown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;ticketingDrilldown&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clickHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;off&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clickHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is strongly recommended to return a cleanup function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;off&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clickHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This cleans up old events when the chart is reconfigured or re-rendered, avoiding duplicate event bindings.&lt;/p&gt;

&lt;p&gt;The chart click event code above applies to &lt;a href="https://github.com/nocobase/nocobase/releases/tag/v2.2.0-beta.10" rel="noopener noreferrer"&gt;v2.2.0-beta.10&lt;/a&gt; and later. For earlier versions, refer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;off&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clickHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. How the Drilldown JS Block Displays Details
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4blmij6n5mvzhg3dq9j5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4blmij6n5mvzhg3dq9j5.png" alt="下钻 JS 区块-0jg2lt.png" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The drilldown JS block reads the &lt;code&gt;ticketingDashboardDrilldown&lt;/code&gt; written earlier, and then queries data based on its filter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;drilldown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;ticketingDashboardDrilldown&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;drilldown&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Alert&lt;/span&gt;
      &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;info&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="nx"&gt;showIcon&lt;/span&gt;
      &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Select a chart segment to inspect matching tickets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
    &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;,
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the user has not clicked a chart yet, a prompt is displayed. After a click, tickets are queried according to &lt;code&gt;drilldown.filter&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;makeResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MultiRecordResource&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setResourceName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tickets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;drilldown&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setPageSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;refresh&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;?.()&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then render the table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Typography&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;libs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;antd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Typography&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Title&lt;/span&gt; &lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Drilldown&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;drilldown&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Typography.Title&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Table&lt;/span&gt;
      &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;small&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="nx"&gt;rowKey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="nx"&gt;dataSource&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ticket No&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="na"&gt;dataIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ticketNo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="na"&gt;dataIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="na"&gt;dataIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Priority&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="na"&gt;dataIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;priority&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;]}&lt;/span&gt;
    &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;,
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To clear the drilldown condition, you can refer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;clearChartDrilldown&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ticketingDashboardDrilldown&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;rerender&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rerender&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key points here are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The chart only passes the filter.&lt;/li&gt;
&lt;li&gt;The JS block is responsible for querying and displaying details.&lt;/li&gt;
&lt;li&gt;The same drilldown block can be reused by clicks from different charts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical Recommendations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Do Not Rush to Code the Whole Complex Page
&lt;/h3&gt;

&lt;p&gt;The most important lesson from this page is: do not treat native capabilities and JS capabilities as opposites.&lt;/p&gt;

&lt;p&gt;If a capability is already native to NocoBase, such as filtering, chart queries, table display, permission control, use the native block first. This allows you to continue configuring fields, filter conditions, and chart metrics in the interface later.&lt;/p&gt;

&lt;p&gt;JS blocks are better for parts that native blocks are not good at, such as combining multiple metrics into KPI cards, applying special card styles, showing custom details after a chart click, or passing business context between different blocks.&lt;/p&gt;

&lt;p&gt;In other words, native blocks handle “configurable standard capabilities,” while JS blocks handle “business-specific personalized experiences.” This is the most reusable building approach from this dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Use Chart Block Query Builder First for Simple Statistics
&lt;/h3&gt;

&lt;p&gt;This preserves NocoBase’s standard query, permission, filtering, and refresh capabilities. Only use a custom ECharts option for visual optimization when the default chart style cannot express the business emphasis clearly.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use JS Blocks First for KPI Cards
&lt;/h3&gt;

&lt;p&gt;KPIs usually need multiple queries, condition combinations, and custom layouts, so JS blocks are more flexible. This is especially clear when KPIs need to respond to the same set of system filter conditions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Return Cleanup for Chart Events
&lt;/h3&gt;

&lt;p&gt;Recommended pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// handle click&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;off&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not directly use &lt;code&gt;chart.off('click')&lt;/code&gt; to clear all click events, because this may accidentally remove listeners used by the chart block or configuration panel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let AI Help You Build It
&lt;/h2&gt;

&lt;p&gt;This type of dashboard is very suitable for AI-assisted generation, because it involves data models, statistical definitions, chart styling, and page interactions at the same time. You can give this article to an AI tool and ask questions based on the prompt below.&lt;/p&gt;

&lt;p&gt;You can ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;I am building an operations dashboard for a ticketing system with NocoBase.
Please use the ticketing scenario as an example and help me design an Operations dashboard.

The tickets table contains:
ticketNo, title, status, priority, slaStatus,
requestType, serviceGroup, assignee, createdAt, updatedAt.

The page needs:
&lt;span class="p"&gt;1.&lt;/span&gt; Top filters: Created at, Service group, Request type, Priority, SLA status.
&lt;span class="p"&gt;2.&lt;/span&gt; KPI cards: Open backlog, Unassigned, SLA warning, SLA breached, New tickets, Resolved tickets.
&lt;span class="p"&gt;3.&lt;/span&gt; Charts: Created tickets trend, Ticket status, SLA status, Priority mix.
&lt;span class="p"&gt;4.&lt;/span&gt; After a chart click, the JS block below displays a matching Ticket drilldown table.
&lt;span class="p"&gt;5.&lt;/span&gt; The chart style should fit an operations dashboard, with clear colors and a compact layout.
&lt;span class="p"&gt;6.&lt;/span&gt; All JS text should use ctx.t().
&lt;span class="p"&gt;7.&lt;/span&gt; Chart events should use chart.on and return a cleanup function.
&lt;span class="p"&gt;8.&lt;/span&gt; Prefer NocoBase native filter blocks and chart blocks. Use JS blocks only for KPIs, drilldown details, special styling, and cross-block interactions. Do not write the whole page as one large JS block.

Please provide the configuration approach for each block and mark the key JS code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you already have a page, you can also ask AI to optimize it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;This is my current NocoBase dashboard design:
The top area is a filter block, the middle area has four charts, and the bottom area has a drilldown JS block.
Please help me optimize it from the perspective of operations staff:
&lt;span class="p"&gt;1.&lt;/span&gt; Which KPIs should be displayed?
&lt;span class="p"&gt;2.&lt;/span&gt; Do the charts need to be linked?
&lt;span class="p"&gt;3.&lt;/span&gt; Which columns should be shown in drilldown details?
&lt;span class="p"&gt;4.&lt;/span&gt; How should JS blocks and chart events be organized?
&lt;span class="p"&gt;5.&lt;/span&gt; Which code should be placed in the chart custom option, and which code should be placed in the JS block?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps the AI generate content that is closer to real business scenarios instead of isolated code snippets.&lt;/p&gt;

&lt;p&gt;If you choose to let AI help you build, back up the project with Backup Manager before you start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference Documentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/en/data-visualization/guide/chart-options" rel="noopener noreferrer"&gt;Chart configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/en/runjs" rel="noopener noreferrer"&gt;Frontend RunJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/en/interface-builder/blocks/filter-blocks/form" rel="noopener noreferrer"&gt;Filter form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nocobase.com/en/ai-builder/ui-builder" rel="noopener noreferrer"&gt;AI Builder - UI Builder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://echarts.apache.org/en/option.html" rel="noopener noreferrer"&gt;ECharts Options&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>nocode</category>
      <category>opensource</category>
      <category>lowcode</category>
    </item>
    <item>
      <title>What Is AI No-Code? A Practical Guide to No-Code Platforms in the AI Era</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Thu, 09 Jul 2026 09:04:41 +0000</pubDate>
      <link>https://dev.to/nocobase/what-is-ai-no-code-a-practical-guide-to-no-code-platforms-in-the-ai-era-1985</link>
      <guid>https://dev.to/nocobase/what-is-ai-no-code-a-practical-guide-to-no-code-platforms-in-the-ai-era-1985</guid>
      <description>&lt;p&gt;Originally published at &lt;a href="https://www.nocobase.com/en/blog/what-is-ai-no-code" rel="noopener noreferrer"&gt;https://www.nocobase.com/en/blog/what-is-ai-no-code&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Do you also think no-code belongs to the “pre-AI era”?&lt;/p&gt;

&lt;p&gt;Now that AI can write code, generate applications, and automate workflows, do no-code platforms still need to exist?&lt;/p&gt;

&lt;p&gt;The answer is yes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgn18r6wl5t1iq2wwiwxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgn18r6wl5t1iq2wwiwxk.png" alt="ai-nocode" width="799" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google Trends shows that search interest in &lt;strong&gt;“AI no code” has risen quickly over the past year.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;People are not giving up on no-code. They are understanding it in a new way: not just dragging components to build pages, but using AI, natural language, and visual platforms to build applications, automate workflows, and create internal business systems faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem is that many products can now be called AI no-code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lovable, Zapier, and &lt;a href="https://www.nocobase.com/en" rel="noopener noreferrer"&gt;NocoBase&lt;/a&gt; all fall under the broader category of AI no-code, but they solve very different problems and suit very different users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmlku81f3mo26gms9yrbr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmlku81f3mo26gms9yrbr.jpg" alt="Lovable-gcelwp.jpg" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article will answer two questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;What is AI no-code?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How do you choose the right AI no-code tool?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;💬 Hey, you're reading the NocoBase blog. NocoBase is the most extensible AI-powered no-code/low-code development platform for building enterprise applications, internal tools, and all kinds of systems. It’s fully self-hosted, plugin-based, and developer-friendly. →&lt;a href="https://github.com/nocobase/nocobase" rel="noopener noreferrer"&gt; Explore NocoBase on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;💡 Read more: &lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-github-9" rel="noopener noreferrer"&gt;9 Open-Source AI No-Code Tools Worth Watching on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is AI No-Code?
&lt;/h2&gt;

&lt;p&gt;At the most basic level, &lt;strong&gt;AI no-code refers to tools or platforms that combine AI capabilities with no-code development methods.&lt;/strong&gt; Users do not need to write code from scratch. Instead, they can use natural language, visual configuration, prebuilt components, workflow orchestration, and similar methods to build applications, automate processes, or let AI participate in specific business tasks.&lt;/p&gt;

&lt;p&gt;But this definition only explains part of the picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today, “AI no-code” is no longer a product category with clear boundaries.&lt;/strong&gt; Many tools can be related to AI no-code, but their product logic can be completely different.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No-code platforms&lt;/strong&gt; are adding AI to help users build pages, forms, data models, and business workflows faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low-code platforms&lt;/strong&gt; are using AI to help developers generate code, configure APIs, and extend systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI app builders&lt;/strong&gt; let users generate pages, components, or application prototypes directly from prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI automation tools&lt;/strong&gt; connect multiple tools and use AI to summarize, classify, judge, and trigger actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These categories also continue to overlap. An AI app builder may offer a database. An automation tool may support simple pages. A no-code platform may connect to AI Agents and workflows.&lt;/p&gt;

&lt;p&gt;It can get confusing.&lt;/p&gt;

&lt;p&gt;A clearer way to think about it is this: stop asking whether a tool is truly AI no-code or where its category boundary sits.&lt;/p&gt;

&lt;p&gt;Instead, ask &lt;strong&gt;what problem it helps you solve.&lt;/strong&gt; Once you look at it this way, the choices become much easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Need 1: Build a Working Application Quickly
&lt;/h2&gt;

&lt;p&gt;This is one of the most common needs.&lt;/p&gt;

&lt;p&gt;AI can write code quickly and well. If you ask ChatGPT, Claude, or another AI coding tool to “build a customer management page,” they can generate HTML, React components, or even a full block of frontend code.&lt;/p&gt;

&lt;p&gt;But the issue is that &lt;strong&gt;code is not the same as an application.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After AI generates code, you still need to handle many things yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put the code into a project.&lt;/li&gt;
&lt;li&gt;Configure the development environment.&lt;/li&gt;
&lt;li&gt;Manage dependencies and errors.&lt;/li&gt;
&lt;li&gt;Connect a database.&lt;/li&gt;
&lt;li&gt;Adjust page interactions.&lt;/li&gt;
&lt;li&gt;Deploy the application.&lt;/li&gt;
&lt;li&gt;Make it accessible for others to test.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers, these may be routine tasks. For product managers, designers, founders, and business users, they are still a lot of work.&lt;/p&gt;

&lt;p&gt;This is where this type of AI no-code tool becomes valuable.&lt;/p&gt;

&lt;p&gt;These tools do more than “generate code.” They combine generation, preview, editing, running, and deployment. Users only need to describe what they want, and the platform can generate the application interface, provide online preview, support interaction changes, and help with deployment.&lt;/p&gt;

&lt;p&gt;Typical products include:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://v0.app/" rel="noopener noreferrer"&gt;v0&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;UI and Frontend Interface Generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can describe the page you want in natural language, and v0 generates the corresponding interface and components. It is useful for quickly creating product interfaces, admin panels, landing pages, or interactive prototypes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhwbnv0h85es6xfxnncl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkhwbnv0h85es6xfxnncl.png" alt="v0-yh1jxu.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://lovable.dev/" rel="noopener noreferrer"&gt;Lovable&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Generate a Complete Web App From a Prompt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lovable does not only focus on pages. It also tries to generate application structure, interaction logic, and basic features, making it suitable for turning a product idea into a working MVP quickly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff3bymmaya3985zlpq5v0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff3bymmaya3985zlpq5v0.png" alt="Lovable1-ehxl2p.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://bolt.new/" rel="noopener noreferrer"&gt;Bolt&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Generate and Run Full-Stack Applications Online&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Users can describe requirements, generate code, install dependencies, run projects, and debug applications in the browser, without first setting up a complex local development environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxbe6fvjhhg8rcu5cwfhh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxbe6fvjhhg8rcu5cwfhh.png" alt="bolt-26bw6l.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://replit.com/" rel="noopener noreferrer"&gt;Replit&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Develop and Deploy Applications Online&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Replit is an online development environment. With AI, it can help users generate code, debug projects, and run and publish applications directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh015gppmcqrc5ms5asot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh015gppmcqrc5ms5asot.png" alt="Replit-4s6olk.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Need 2: Build Business Systems That Can Run Long Term
&lt;/h2&gt;

&lt;p&gt;The second major need appears in enterprise scenarios.&lt;/p&gt;

&lt;p&gt;The question becomes: &lt;strong&gt;Can I use AI and no-code to build a business system that a company can truly use over the long term?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I want to build a CRM to manage customers, contacts, opportunities, and follow-up records.&lt;/li&gt;
&lt;li&gt;I want to build a ticketing system so customer issues can be submitted, assigned, handled, and tracked.&lt;/li&gt;
&lt;li&gt;I want to build an approval system for leave requests, reimbursements, procurement, contracts, and other processes.&lt;/li&gt;
&lt;li&gt;I want to build an inventory or asset management system where data, status, owners, and operation records are clear and traceable.&lt;/li&gt;
&lt;li&gt;I want to build an internal operations system where different roles collaborate in the same system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core of this need is: &lt;strong&gt;how to combine data, pages, permissions, workflows, and AI capabilities into a business system that can keep running.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where enterprise business-system AI no-code platforms are needed.&lt;/p&gt;

&lt;p&gt;They usually provide data modeling, page building, permission control, workflows, automation, audit logs, API integration, plugin extension, private deployment, and other capabilities. AI is not a standalone application here. It participates in system building and business operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.nocobase.com/en" rel="noopener noreferrer"&gt;NocoBase&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;An Open-Source, Self-Hosted, Extensible AI No-Code Platform for Enterprise Business Systems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NocoBase provides the core capabilities needed for enterprise business systems, including data models, page building, permission control, workflows, plugin extension, and private deployment. &lt;strong&gt;It gives AI a platform foundation for real business scenarios.&lt;/strong&gt; AI understands requirements, assists generation, and improves efficiency. NocoBase carries the data, permissions, processes, audits, and long-term iteration.&lt;/p&gt;

&lt;p&gt;This is why NocoBase is better suited as a first choice for applying AI in real enterprise scenarios. It does not only give AI a generation entry point. It gives AI a business system foundation that can run for the long term, continue to evolve, keep permissions under control, and protect business data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqn6nfiqiynwwutg9yejd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqn6nfiqiynwwutg9yejd.png" alt="NocoBase-ugxurh.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://retool.com/" rel="noopener noreferrer"&gt;Retool&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;An Internal Tool Builder for Development Teams&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Retool can quickly connect databases, APIs, and internal services to build admin panels, data operation interfaces, and enterprise internal tools. It also provides AI-related capabilities for assisted building and automation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpnqlssg9jafajimyrzpn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpnqlssg9jafajimyrzpn.png" alt="Retool-2xtmdg.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.appsmith.com/" rel="noopener noreferrer"&gt;Appsmith&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;An Open-Source Low-Code Platform for Internal Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Like NocoBase, Appsmith is also open source. It is suitable for developers and IT teams building dashboards, admin panels, and internal applications. It supports database and API connections and can also be self-hosted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3u25zumm1ehjp915siln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3u25zumm1ehjp915siln.png" alt="Appsmith-syaxje.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://budibase.com/" rel="noopener noreferrer"&gt;Budibase&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;An Open-Source Platform for Business Applications and Internal Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Budibase is suitable for building forms, approvals, operations systems, and internal management tools. It supports data source connections, automation, and self-hosting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fftv7x2l9b62k8ycbtmvu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fftv7x2l9b62k8ycbtmvu.png" alt="Budibase-0dl8cq.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Need 3: Let Multiple Tools Work Together Automatically
&lt;/h2&gt;

&lt;p&gt;After AI appeared, many people assumed automation would become simple.&lt;/p&gt;

&lt;p&gt;For example, you can ask AI to summarize emails, extract form information, generate replies, and judge customer intent. Viewed separately, AI can indeed complete these tasks.&lt;/p&gt;

&lt;p&gt;But in real work, tasks usually do not happen in isolation.&lt;/p&gt;

&lt;p&gt;A customer lead may come from a website form, then need to be synced to a CRM, notify sales, and create a follow-up task.&lt;/p&gt;

&lt;p&gt;A user feedback email may need to be summarized by AI, classified by issue type, and assigned to the right team.&lt;/p&gt;

&lt;p&gt;A contract or invoice may need key information extracted, written into a spreadsheet or system, and then trigger an approval workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Letting AI participate in a full business process, while different tools work together automatically,&lt;/strong&gt; is the value of AI workflow automation tools.&lt;/p&gt;

&lt;p&gt;These tools are not mainly for generating application pages. They connect different systems, place AI inside workflow nodes, and let data, messages, and tasks move automatically.&lt;/p&gt;

&lt;p&gt;Typical products include:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://zapier.com/" rel="noopener noreferrer"&gt;Zapier&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Automation Between SaaS Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Zapier supports a large number of common applications. It is suitable for connecting tools such as Gmail, Slack, HubSpot, Airtable, and Google Sheets to automate notifications, syncing, task creation, AI processing, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3wbxinhln3zdxon9w2c5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3wbxinhln3zdxon9w2c5.png" alt="Zapier-0sw1p7.png" width="799" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.make.com/" rel="noopener noreferrer"&gt;Make&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Visual Multi-Step Automation Workflows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Make is suitable for more complex conditional logic, data transformation, and multi-application collaboration. Users can design automation tasks in a flowchart-style interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F83uxqaxskq0tg0evje8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F83uxqaxskq0tg0evje8q.png" alt="Make-msuo5o.png" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://n8n.io/" rel="noopener noreferrer"&gt;n8n&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Self-Hosted and Extensible Workflow Automation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a popular GitHub project, n8n is suitable for technical teams and enterprise users who need to connect APIs, databases, internal systems, and AI services to build more controllable automation workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxvhzx1skhhaz97qmlyjd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxvhzx1skhhaz97qmlyjd.png" alt="n8n-illdq7.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.activepieces.com/" rel="noopener noreferrer"&gt;Activepieces&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Open-Source Automation and Business Process Connections&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Activepieces is suitable for teams that want to use open-source solutions to build automation workflows. It can also handle data movement and AI tasks across common SaaS tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxv1xuhjtyhtsg2k6yb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxv1xuhjtyhtsg2k6yb1.png" alt="Activepieces-qwg98g.png" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Need 4: Build AI Applications or AI Agents
&lt;/h2&gt;

&lt;p&gt;The last type of need is to build an &lt;strong&gt;AI application&lt;/strong&gt; directly.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I want to build an enterprise knowledge-base Q&amp;amp;A bot.&lt;/li&gt;
&lt;li&gt;I want to build a RAG application that reads documents and answers questions.&lt;/li&gt;
&lt;li&gt;I want to build a customer service Agent that understands user questions and calls tools.&lt;/li&gt;
&lt;li&gt;I want to combine multiple models, prompts, knowledge bases, and workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core of this need is: &lt;strong&gt;how to package large model capabilities into a usable AI application.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where AI application building platforms and AI Agent platforms become valuable.&lt;/p&gt;

&lt;p&gt;They usually provide prompt orchestration, model selection, knowledge base integration, RAG, tool calling, Agent workflows, API publishing, and similar capabilities. Users can build Chatbots, AI Workflows, or Agent applications without writing everything from scratch.&lt;/p&gt;

&lt;p&gt;Typical products include:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://dify.ai/" rel="noopener noreferrer"&gt;Dify&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;LLM Application Development Platform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dify is suitable for building Chatbots, RAG applications, Agent workflows, and enterprise knowledge-base Q&amp;amp;A. It provides model integration, prompt orchestration, knowledge bases, workflows, and application publishing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcsmgstgzpkg70sgqbsvc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcsmgstgzpkg70sgqbsvc.png" alt="Dify-4wiain.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://flowiseai.com/" rel="noopener noreferrer"&gt;Flowise&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Visual Builder for LangChain Applications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flowise is suitable for developers and AI application teams. It uses a node-based interface to orchestrate LLMs, tools, memory, vector databases, and Agent flows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9t9o7ntyxetk3q9bg4vn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9t9o7ntyxetk3q9bg4vn.png" alt="Flowise-w7v42t.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.langflow.org/" rel="noopener noreferrer"&gt;LangFlow&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Visual AI Workflow and Agent Orchestration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LangFlow is suitable for building complex LLM call chains, RAG workflows, and Agent prototypes. Users can combine AI applications through a component-based approach.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4vg1o9vg9p19yge01pjx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4vg1o9vg9p19yge01pjx.png" alt="LangFlow-kdxvuw.png" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Decision Table
&lt;/h2&gt;

&lt;p&gt;The table below lists all products discussed in this article. You can quickly compare their characteristics, open-source status, and best-fit scenarios.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Open Source&lt;/th&gt;
&lt;th&gt;Typical Use Cases&lt;/th&gt;
&lt;th&gt;Target Users&lt;/th&gt;
&lt;th&gt;Core Capabilities&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NocoBase&lt;/td&gt;
&lt;td&gt;Enterprise business-system AI no-code platform&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;CRM, tickets, approvals, inventory, asset management, internal business systems&lt;/td&gt;
&lt;td&gt;Enterprise IT, development teams, software agencies, business teams&lt;/td&gt;
&lt;td&gt;Data models, page building, permissions, workflows, plugins, self-hosting, AI-assisted building&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retool&lt;/td&gt;
&lt;td&gt;Enterprise business-system AI no-code platform&lt;/td&gt;
&lt;td&gt;Closed source&lt;/td&gt;
&lt;td&gt;Internal tools, admin panels, database operation interfaces&lt;/td&gt;
&lt;td&gt;Development teams, enterprise IT&lt;/td&gt;
&lt;td&gt;Internal tool building, database connections, component library, workflows, AI features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Appsmith&lt;/td&gt;
&lt;td&gt;Enterprise business-system AI no-code platform&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;Internal tools, admin panels, data operation apps&lt;/td&gt;
&lt;td&gt;Developers, IT teams&lt;/td&gt;
&lt;td&gt;Open-source low-code, UI components, database/API connections, self-hosting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budibase&lt;/td&gt;
&lt;td&gt;Enterprise business-system AI no-code platform&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;Internal tools, approvals, forms, operations systems&lt;/td&gt;
&lt;td&gt;IT teams, SMBs, developers&lt;/td&gt;
&lt;td&gt;App building, data source connections, automation, self-hosting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lovable&lt;/td&gt;
&lt;td&gt;AI prototype generation tool&lt;/td&gt;
&lt;td&gt;Closed source&lt;/td&gt;
&lt;td&gt;MVPs, Web App prototypes, lightweight apps&lt;/td&gt;
&lt;td&gt;Founders, product teams, indie developers&lt;/td&gt;
&lt;td&gt;Prompt-based app generation, frontend/backend generation, fast deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bolt&lt;/td&gt;
&lt;td&gt;AI prototype generation tool&lt;/td&gt;
&lt;td&gt;Closed source&lt;/td&gt;
&lt;td&gt;Full-stack app generation, demos, small tools&lt;/td&gt;
&lt;td&gt;Developers, founders, product teams&lt;/td&gt;
&lt;td&gt;Natural-language code generation, online development environment, app preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zapier&lt;/td&gt;
&lt;td&gt;AI workflow automation tool&lt;/td&gt;
&lt;td&gt;Closed source&lt;/td&gt;
&lt;td&gt;Cross-SaaS automation, lead routing, notifications, data sync&lt;/td&gt;
&lt;td&gt;Operations, marketing, sales, business teams&lt;/td&gt;
&lt;td&gt;SaaS integrations, triggers, automation workflows, AI steps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Make&lt;/td&gt;
&lt;td&gt;AI workflow automation tool&lt;/td&gt;
&lt;td&gt;Closed source&lt;/td&gt;
&lt;td&gt;Multi-step automation, data processing, cross-tool workflows&lt;/td&gt;
&lt;td&gt;Operations teams, automation specialists, growth teams&lt;/td&gt;
&lt;td&gt;Visual workflow orchestration, API integration, conditional logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;n8n&lt;/td&gt;
&lt;td&gt;AI workflow automation tool&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;Self-hosted automation, AI workflows, system integration&lt;/td&gt;
&lt;td&gt;Technical teams, automation engineers, enterprise IT&lt;/td&gt;
&lt;td&gt;Workflow orchestration, self-hosting, API integration, AI nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Activepieces&lt;/td&gt;
&lt;td&gt;AI workflow automation tool&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;Open-source automation, business process connections, AI automation&lt;/td&gt;
&lt;td&gt;Technical teams, operations teams, SMBs&lt;/td&gt;
&lt;td&gt;Visual automation, open-source deployment, app connectors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dify&lt;/td&gt;
&lt;td&gt;AI application / Agent platform&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;Chatbots, RAG applications, AI Agents, enterprise knowledge-base Q&amp;amp;A&lt;/td&gt;
&lt;td&gt;AI application developers, technical teams, enterprise IT&lt;/td&gt;
&lt;td&gt;LLM application development, prompt orchestration, RAG, Agent workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flowise&lt;/td&gt;
&lt;td&gt;AI application / Agent platform&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;Visual LangChain orchestration, RAG, Agent prototypes&lt;/td&gt;
&lt;td&gt;AI developers, technical teams&lt;/td&gt;
&lt;td&gt;Visual AI flows, LangChain integration, node-based orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangFlow&lt;/td&gt;
&lt;td&gt;AI application / Agent platform&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;td&gt;AI Workflow, RAG, model call flows&lt;/td&gt;
&lt;td&gt;AI engineers, developers, research teams&lt;/td&gt;
&lt;td&gt;Visual LLM orchestration, component-based flows, Agent building&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. What Is the Difference Between AI No-Code and Traditional No-Code?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Traditional no-code mainly relies on drag-and-drop interfaces, forms, components, and visual configuration. AI no-code further introduces natural language, AI generation, intelligent automation, and AI Agent capabilities.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, AI no-code is not simply adding an AI button to a traditional no-code platform. Valuable AI no-code tools need to bring AI into specific application building, business processes, and data processing scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What Is the Difference Between an AI App Builder and an AI No-Code Platform?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;AI app builders focus more on quickly generating application prototypes, while AI no-code platforms focus more on building applications or business systems that can be used continuously.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI app builders such as v0, Lovable, and Bolt are strong in generation speed, making them suitable for MVPs, demos, product prototypes, and lightweight applications.&lt;/p&gt;

&lt;p&gt;AI no-code platforms such as NocoBase pay more attention to data models, pages, permissions, workflows, audit logs, plugin extension, and private deployment, making them more suitable for long-term enterprise use.&lt;/p&gt;

&lt;p&gt;So the key is whether you need a prototype or a real system that supports business operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. How Should Enterprises Choose AI No-Code Tools?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Enterprises should first clarify their goal: are they building a prototype, automation, an AI Agent, or a long-running business system?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the goal is to build a system that the enterprise will use long term, focus on data models, permission control, workflows, audit logs, extensibility, private deployment, and security.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. What Are the Advantages of Open-Source AI No-Code Tools?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Open-source AI no-code tools offer more control, extensibility, and self-hosting capabilities, especially for scenarios involving enterprise data, permissions, workflows, and long-term maintenance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In AI scenarios, tools often touch customer data, business processes, internal knowledge bases, ticket content, approval records, and employee information. Enterprises care more about where data is stored, how models are called, whether the system can be privately deployed, and whether it can be extended or migrated in the future.&lt;/p&gt;

&lt;p&gt;The closer a tool gets to core enterprise business systems, the more important open source, self-hosting, and extensibility become.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. What Type of AI No-Code Tool Is NocoBase?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NocoBase is an enterprise business-system AI no-code platform, suitable for building long-running internal tools and business systems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It can be used to build real business systems such as CRM, ticketing, approvals, inventory, asset management, expense reimbursement, and customer portals.&lt;/p&gt;

&lt;p&gt;NocoBase is better suited for teams that want to apply AI to real enterprise scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Back to the question at the beginning: &lt;strong&gt;Does no-code still matter after AI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The clearer answer is: no-code has not been replaced by AI. It has entered a new stage because of AI.&lt;/p&gt;

&lt;p&gt;AI makes software building faster, but enterprises still need systems that are maintainable, extensible, permission-controlled, secure, and able to run over the long term.&lt;/p&gt;

&lt;p&gt;That is the real value of no-code platforms in the AI era.&lt;/p&gt;

&lt;p&gt;If this article helped you better understand AI no-code, feel free to share it with friends who are choosing AI tools, no-code platforms, or internal business system solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-github-9" rel="noopener noreferrer"&gt;9 Open-Source AI No-Code Tools on GitHub Worth Watching &lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/github-open-source-ai-agent-tools-16" rel="noopener noreferrer"&gt;14 Open Source AI Agent Tools with the Most GitHub Stars&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/top-open-source-ai-assistant-tools-github-stars" rel="noopener noreferrer"&gt;Top 8 Open Source AI Assistant Tools by GitHub Stars&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/workbuddy-open-source-tools" rel="noopener noreferrer"&gt;6 Open Source Tools to Use with WorkBuddy&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/6-github-top-open-source-ai-tools-for-ai-agents" rel="noopener noreferrer"&gt;Top 6 Open Source AI Tools by GitHub Stars for Stronger AI Agents&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-internal-tools-self-hosted-ai-agent-hermes" rel="noopener noreferrer"&gt;5 Open-Source Internal Tools to Use with Hermes Agent&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/openclaw-open-source-enterprise-tools" rel="noopener noreferrer"&gt;OpenClaw and 5 Open-Source Tools for Monitoring Business Workflows&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/opencode-open-source-tools-ai-agents" rel="noopener noreferrer"&gt;What Open-Source Tools Work Well with OpenCode? 5 Projects to Try&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/building-internal-tools-with-codex" rel="noopener noreferrer"&gt;Building Internal Tools with Codex: 6 Open-Source Projects for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-tools-after-claude-code" rel="noopener noreferrer"&gt;After Claude Code: 6 Open-Source Tools You Should Know&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/open-source-ai-no-code-tools-enterprise-software-development" rel="noopener noreferrer"&gt;Top 10 Open-Source AI And No-Code Tools for Enterprise Software Development&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/8-open-source-ai-agent-platforms-for-internal-tools" rel="noopener noreferrer"&gt;8 Open-Source AI Agent Platforms for Building Internal Tools&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.nocobase.com/en/blog/the-best-self-hosted-crm-for-enterprise-teams" rel="noopener noreferrer"&gt;The Best Enterprise-Grade Self-Hosted CRMs with RBAC, AI, and Open API Support&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>nocode</category>
      <category>opensource</category>
      <category>news</category>
    </item>
    <item>
      <title>Weekly Updates: Add Mistral AI as an LLM Provider</title>
      <dc:creator>NocoBase</dc:creator>
      <pubDate>Tue, 07 Jul 2026 08:35:03 +0000</pubDate>
      <link>https://dev.to/nocobase/weekly-updatesadd-mistral-ai-as-an-llm-provider-496l</link>
      <guid>https://dev.to/nocobase/weekly-updatesadd-mistral-ai-as-an-llm-provider-496l</guid>
      <description>&lt;p&gt;Summarize the weekly product update logs, and the latest releases can be checked on &lt;a href="https://www.nocobase.com/en/blog/timeline" rel="noopener noreferrer"&gt;our blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NocoBase is currently updated across three branches: &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, and &lt;code&gt;develop&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66qf0fuohv233at2nnzv.png" alt="version.png" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;main&lt;/code&gt;: The most stable version to date, recommended for installation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;next&lt;/code&gt;: Beta version, contains upcoming new features and has been preliminarily tested. There might be some known or unknown issues. It is mainly used to collect feedback from test users and further optimize features. Ideal for test users who want to experience new features early and provide feedback.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;develop&lt;/code&gt;: Alpha version, contains the latest feature code, may be incomplete or unstable, and is mainly used for internal development and rapid iteration. Suited for technical users interested in cutting-edge product capabilities, but not recommended for production use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  main
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjmnc6cb7az5ofw9t1ip.png" alt="main.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.1.19
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-03&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; Fixed revision creation events failing on RabbitMQ brokers that reject &lt;code&gt;:&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt; in queue names. (&lt;a href="https://github.com/nocobase/nocobase/pull/9989" rel="noopener noreferrer"&gt;#9989&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed iframe sanitization for v2 Markdown rendering and editing. (&lt;a href="https://github.com/nocobase/nocobase/pull/9986" rel="noopener noreferrer"&gt;#9986&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed routed popup creation forms losing prefilled field values such as Calendar V2 start and end dates. (&lt;a href="https://github.com/nocobase/nocobase/pull/9874" rel="noopener noreferrer"&gt;#9874&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;Fixed V2 table data scope filters so missing URL query parameters no longer block table data queries. (&lt;a href="https://github.com/nocobase/nocobase/pull/9869" rel="noopener noreferrer"&gt;#9869&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;Fixed an issue where multiline text field values could not be set via ctx.setFormValues. (&lt;a href="https://github.com/nocobase/nocobase/pull/9959" rel="noopener noreferrer"&gt;#9959&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed AI checkpoint cleanup failures in underscored database environments. (&lt;a href="https://github.com/nocobase/nocobase/pull/9982" rel="noopener noreferrer"&gt;#9982&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;Fixed AI employee workflow nodes failing to resume correctly in loops after a previous AI employee tool call. (&lt;a href="https://github.com/nocobase/nocobase/pull/9980" rel="noopener noreferrer"&gt;#9980&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File manager]&lt;/strong&gt; Hidden the file manager attachments list API and return 404 when it is requested. (&lt;a href="https://github.com/nocobase/nocobase/pull/9978" rel="noopener noreferrer"&gt;#9978&lt;/a&gt;) by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt; Fixed an issue where workflow execution node results could remain stuck in a loading state. (&lt;a href="https://github.com/nocobase/nocobase/pull/9991" rel="noopener noreferrer"&gt;#9991&lt;/a&gt;) by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Backup manager]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed PostgreSQL and Kingbase backup restore command execution when paths or arguments contain spaces or special characters. (&lt;a href="https://github.com/nocobase/nocobase/pull/9946" rel="noopener noreferrer"&gt;#9946&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;Fixed an issue where newly created backup files could not be uploaded to cloud storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/9981" rel="noopener noreferrer"&gt;#9981&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data visualization]&lt;/strong&gt; Fixed an issue where chart blocks would trigger unnecessary refreshes when closing a popup. (&lt;a href="https://github.com/nocobase/nocobase/pull/9970" rel="noopener noreferrer"&gt;#9970&lt;/a&gt;) by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[UI templates]&lt;/strong&gt; Fixed an issue where the field template menu was incorrectly displayed in subforms. (&lt;a href="https://github.com/nocobase/nocobase/pull/9960" rel="noopener noreferrer"&gt;#9960&lt;/a&gt;) by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Mobile (deprecated)]&lt;/strong&gt; Fix responsive v1 admin pages so view actions open as subpages and select fields use mobile popups (&lt;a href="https://github.com/nocobase/nocobase/pull/9974" rel="noopener noreferrer"&gt;#9974&lt;/a&gt;) by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Version control]&lt;/strong&gt; Fixed version-control revision creation on RabbitMQ brokers that reject &lt;code&gt;:&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt; in queue names. by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Fix the error that may occur when opening approval details without configuration permissions by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.18
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-02&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; Support manual Nginx/Caddy proxy config generation, allow Docker deployments without bundled Nginx, and align proxy and CDN-related runtime configuration. (&lt;a href="https://github.com/nocobase/nocobase/pull/9943" rel="noopener noreferrer"&gt;#9943&lt;/a&gt;) by chenos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[undefined]&lt;/strong&gt; Clarified the security guidance for PDF previews using external storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/9901" rel="noopener noreferrer"&gt;#9901&lt;/a&gt;) by mytharcher
Reference: &lt;a href="https://github.com/nocobase/nocobase/blob/docs/file-preview-security/docs/docs/en/file-manager/file-preview/index.md" rel="noopener noreferrer"&gt;File Preview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[utils]&lt;/strong&gt; Added warnings for server-side outbound requests that target potential SSRF-risk addresses when &lt;code&gt;SERVER_REQUEST_WHITELIST&lt;/code&gt; is not configured. (&lt;a href="https://github.com/nocobase/nocobase/pull/9966" rel="noopener noreferrer"&gt;#9966&lt;/a&gt;) by mytharcher
Reference: &lt;a href="https://docs.nocobase.com/get-started/installation/env" rel="noopener noreferrer"&gt;Environment Variables&lt;/a&gt;, &lt;a href="https://docs.nocobase.com/api/app/env" rel="noopener noreferrer"&gt;Global Environment Variables&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[AI: Knowledge base]&lt;/strong&gt; Added ZIP filename encoding options for knowledge base document uploads to avoid garbled filenames in ZIP archives created with non-UTF-8 encodings. by cgyrock&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[client-v2]&lt;/strong&gt; Fix the issue where route subpages are blank or use incorrect spacing after refresh (&lt;a href="https://github.com/nocobase/nocobase/pull/9961" rel="noopener noreferrer"&gt;#9961&lt;/a&gt;) by zhangzhonghe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow]&lt;/strong&gt; Reduced unnecessary workflow dispatcher DB fetch retries under concurrent queue processing. (&lt;a href="https://github.com/nocobase/nocobase/pull/9953" rel="noopener noreferrer"&gt;#9953&lt;/a&gt;) by mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Action: Export records]&lt;/strong&gt; Fixed XLSX exports so text-like field values that start with formula characters are escaped before being opened in Excel. (&lt;a href="https://github.com/nocobase/nocobase/pull/9973" rel="noopener noreferrer"&gt;#9973&lt;/a&gt;) by mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt; Fixed LLM providers falling back to their default Base URL when the custom Base URL field is cleared. (&lt;a href="https://github.com/nocobase/nocobase/pull/9958" rel="noopener noreferrer"&gt;#9958&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt; Fixed external NocoBase attachment uploads and updates in attachment fields by 2013xile&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.17
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-01&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where ctx.auth.user would not update after switching users. (&lt;a href="https://github.com/nocobase/nocobase/pull/9964" rel="noopener noreferrer"&gt;#9964&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Mobile (deprecated)]&lt;/strong&gt; Fix the issue where mobile pages and public forms cannot be scrolled on mobile devices (&lt;a href="https://github.com/nocobase/nocobase/pull/9898" rel="noopener noreferrer"&gt;#9898&lt;/a&gt;) by zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.15
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-06-30&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[undefined]&lt;/strong&gt; Fixed the Version control documentation in non-Chinese languages so the Professional Edition label is displayed. (&lt;a href="https://github.com/nocobase/nocobase/pull/9944" rel="noopener noreferrer"&gt;#9944&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt; Fixed workflow AI employee tasks failing after repeated tool calls reached the graph recursion limit. (&lt;a href="https://github.com/nocobase/nocobase/pull/9945" rel="noopener noreferrer"&gt;#9945&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Action: Custom request]&lt;/strong&gt; Fixed custom requests allowing runtime options to override the saved request target. (&lt;a href="https://github.com/nocobase/nocobase/pull/9904" rel="noopener noreferrer"&gt;#9904&lt;/a&gt;) by mytharcher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Data source manager]&lt;/strong&gt; Fixed v2 collection field management so template-protected fields cannot be deleted and inherited fields support view / override behavior consistent with v1. (&lt;a href="https://github.com/nocobase/nocobase/pull/9940" rel="noopener noreferrer"&gt;#9940&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Migration manager]&lt;/strong&gt; Fixed garbled text that could occur when migrating MySQL data with non-ASCII content by 2013xile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Fix the error when adding Original application content to approval nodes by zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.1.14
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-06-29&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[AI employees]&lt;/strong&gt; Added Mistral AI as an LLM provider for AI services. (&lt;a href="https://github.com/nocobase/nocobase/pull/9925" rel="noopener noreferrer"&gt;#9925&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; support OAuth device authorization flow (&lt;a href="https://github.com/nocobase/nocobase/pull/9922" rel="noopener noreferrer"&gt;#9922&lt;/a&gt;) by chenos&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed long selected labels in record select fields so they truncate cleanly without squeezing the select control. (&lt;a href="https://github.com/nocobase/nocobase/pull/9939" rel="noopener noreferrer"&gt;#9939&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed table datetime columns losing their configured time display after pagination or refresh. (&lt;a href="https://github.com/nocobase/nocobase/pull/9935" rel="noopener noreferrer"&gt;#9935&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Users]&lt;/strong&gt; Removed the default password from the add-user form in Users &amp;amp; Permissions. (&lt;a href="https://github.com/nocobase/nocobase/pull/9915" rel="noopener noreferrer"&gt;#9915&lt;/a&gt;) by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt; Fixed NocoBase external data sources failing to load when connection options include runtime objects by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Record history]&lt;/strong&gt; Fixed external NocoBase data source loading failure when record history is enabled by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App supervisor]&lt;/strong&gt; Fixed the app supervisor Applications tab registration in Client V2 by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  next
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0xys8cxci7kol0jjde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit0xys8cxci7kol0jjde.png" alt="next.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.2.0-beta.8
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-06-29&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; Support OAuth device authorization flow (&lt;a href="https://github.com/nocobase/nocobase/pull/9922" rel="noopener noreferrer"&gt;#9922&lt;/a&gt;) by chenos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[client-v2]&lt;/strong&gt; Support configure js block should be wrapped by block card. (&lt;a href="https://github.com/nocobase/nocobase/pull/9897" rel="noopener noreferrer"&gt;#9897&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[flow-engine]&lt;/strong&gt; Automatically refreshed related data blocks when RunJS closes a popup after updating data through resource APIs (&lt;a href="https://github.com/nocobase/nocobase/pull/9873" rel="noopener noreferrer"&gt;#9873&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Form drafts]&lt;/strong&gt; Migrate plugin form drafts to client v2. (&lt;a href="https://github.com/nocobase/nocobase/pull/9910" rel="noopener noreferrer"&gt;#9910&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed link actions becoming invisible on mobile embedded pages when icon-only mode is enabled but no icon is configured. (&lt;a href="https://github.com/nocobase/nocobase/pull/9921" rel="noopener noreferrer"&gt;#9921&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed a brief no-pages prompt flash when refreshing in UI Editor mode. (&lt;a href="https://github.com/nocobase/nocobase/pull/9918" rel="noopener noreferrer"&gt;#9918&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed v2 form submit success redirects so they can reference the saved response record. (&lt;a href="https://github.com/nocobase/nocobase/pull/9907" rel="noopener noreferrer"&gt;#9907&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed link actions becoming invisible on mobile embedded pages when icon-only mode is enabled but no icon is configured. (&lt;a href="https://github.com/nocobase/nocobase/pull/9919" rel="noopener noreferrer"&gt;#9919&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed v2 table row action buttons changing row height. (&lt;a href="https://github.com/nocobase/nocobase/pull/9866" rel="noopener noreferrer"&gt;#9866&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;Fixed table blocks failing when a configured drag sorting field has been deleted, and allowed clearing the drag sorting field setting. (&lt;a href="https://github.com/nocobase/nocobase/pull/9867" rel="noopener noreferrer"&gt;#9867&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[flow-engine]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix the issue where mobile popups with long content cannot scroll (&lt;a href="https://github.com/nocobase/nocobase/pull/9871" rel="noopener noreferrer"&gt;#9871&lt;/a&gt;) by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fixed an issue where some parameters of ctx.openView in RunJS would not take effect. (&lt;a href="https://github.com/nocobase/nocobase/pull/9883" rel="noopener noreferrer"&gt;#9883&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[cli]&lt;/strong&gt; support pnpm and yarn global self update (&lt;a href="https://github.com/nocobase/nocobase/pull/9912" rel="noopener noreferrer"&gt;#9912&lt;/a&gt;) by chenos&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[client]&lt;/strong&gt; Corrected several copy and typo issues across locales, related UI text, and documentation. (&lt;a href="https://github.com/nocobase/nocobase/pull/9905" rel="noopener noreferrer"&gt;#9905&lt;/a&gt;) by Molunerfinn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Flow engine]&lt;/strong&gt; Fixed the issue where mobile page can't be created by flow surface api. (&lt;a href="https://github.com/nocobase/nocobase/pull/9911" rel="noopener noreferrer"&gt;#9911&lt;/a&gt;) by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed the AI datasource card list so it adapts responsively to different viewport widths. (&lt;a href="https://github.com/nocobase/nocobase/pull/9924" rel="noopener noreferrer"&gt;#9924&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;Fixed AI employee chat failures caused by replaying malformed tool calls. (&lt;a href="https://github.com/nocobase/nocobase/pull/9900" rel="noopener noreferrer"&gt;#9900&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Backup manager]&lt;/strong&gt; Fixed inconsistent bold labels on the v2 Backup manager settings page. (&lt;a href="https://github.com/nocobase/nocobase/pull/9908" rel="noopener noreferrer"&gt;#9908&lt;/a&gt;) by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Block: iframe]&lt;/strong&gt; Fixed 403 errors for normal users when viewing v2 iframe blocks in HTML mode. (&lt;a href="https://github.com/nocobase/nocobase/pull/9889" rel="noopener noreferrer"&gt;#9889&lt;/a&gt;) by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt; Fixed NocoBase external data sources failing to load when connection options include runtime objects by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI: Knowledge base]&lt;/strong&gt; Fixed layout overflow in version control and knowledge base document lists when content or viewport size is constrained. by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Migration manager]&lt;/strong&gt; Fixed migration rules for database-synced collections by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Record history]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an issue where record history could fail to save changes for some collections by 2013xile&lt;/li&gt;
&lt;li&gt;Fixed external NocoBase data source loading failure when record history is enabled by 2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App supervisor]&lt;/strong&gt; Fixed the app supervisor Applications tab registration in Client V2 by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[WeCom]&lt;/strong&gt; Fixed a blank flash when switching route menu items with the WeCom plugin enabled in Client V2 by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  develop
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fow9jd2rkp6w0rmrzuzwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fow9jd2rkp6w0rmrzuzwl.png" alt="develop.png" width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  v2.2.0-alpha.6
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-05&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; Refactor CLI setup startup to reuse &lt;code&gt;nb app start&lt;/code&gt;, normalize API base path redirects, persist shared env proxy defaults, and rebuild Docker proxy containers when published ports change. (&lt;a href="https://github.com/nocobase/nocobase/pull/9997" rel="noopener noreferrer"&gt;#9997&lt;/a&gt;) by chenos&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.2.0-alpha.5
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-04&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[client-v2]&lt;/strong&gt; Added configurable App and Portal entry support for V2 action panels and the left-top app switcher. (&lt;a href="https://github.com/nocobase/nocobase/pull/9893" rel="noopener noreferrer"&gt;#9893&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Portal manager]&lt;/strong&gt; Added configurable App and Portal entries for the V2 action panel and app switcher. by katherinehhh&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; Improved the Docker CLI setup by supporting configurable default NocoBase image registry/variant, fixing proxy and &lt;code&gt;no-nginx&lt;/code&gt; image port compatibility, and adding Docker Nginx/Caddy installation guides. (&lt;a href="https://github.com/nocobase/nocobase/pull/9972" rel="noopener noreferrer"&gt;#9972&lt;/a&gt;) by chenos&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[undefined]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clarified the security guidance for PDF previews using external storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/9901" rel="noopener noreferrer"&gt;#9901&lt;/a&gt;) by mytharcher
Reference: &lt;a href="https://github.com/nocobase/nocobase/blob/docs/file-preview-security/docs/docs/en/file-manager/file-preview/index.md" rel="noopener noreferrer"&gt;File Preview&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Refined Russian documentation translation for improved wording, readability, and terminology consistency. (&lt;a href="https://github.com/nocobase/nocobase/pull/9942" rel="noopener noreferrer"&gt;#9942&lt;/a&gt;) by sembaev-a-a&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[utils]&lt;/strong&gt; Added warnings for server-side outbound requests that target potential SSRF-risk addresses when &lt;code&gt;SERVER_REQUEST_WHITELIST&lt;/code&gt; is not configured. (&lt;a href="https://github.com/nocobase/nocobase/pull/9966" rel="noopener noreferrer"&gt;#9966&lt;/a&gt;) by mytharcher&lt;br&gt;
Reference: &lt;a href="https://docs.nocobase.com/get-started/installation/env" rel="noopener noreferrer"&gt;Environment Variables&lt;/a&gt;, &lt;a href="https://docs.nocobase.com/api/app/env" rel="noopener noreferrer"&gt;Global Environment Variables&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removed the deprecated Datasource entry from AI employee settings and context selection in the v2 UI. (&lt;a href="https://github.com/nocobase/nocobase/pull/9988" rel="noopener noreferrer"&gt;#9988&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;Migrated the AI employee plugin to client-v2. (&lt;a href="https://github.com/nocobase/nocobase/pull/9794" rel="noopener noreferrer"&gt;#9794&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source manager]&lt;/strong&gt; Display unsupported external data source fields in V2 Configure fields, and align backup restore form label styles. (&lt;a href="https://github.com/nocobase/nocobase/pull/9983" rel="noopener noreferrer"&gt;#9983&lt;/a&gt;) by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Users]&lt;/strong&gt; Improve client-v2 test coverage for the users plugin. (&lt;a href="https://github.com/nocobase/nocobase/pull/9975" rel="noopener noreferrer"&gt;#9975&lt;/a&gt;) by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI: Knowledge base]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added ZIP filename encoding options for knowledge base document uploads to avoid garbled filenames in ZIP archives created with non-UTF-8 encodings. by cgyrock&lt;/li&gt;
&lt;li&gt;Migrated the AI knowledge base settings pages to the v2 client and fixed layout and loading issues in knowledge base and vector store pages. by cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Email manager]&lt;/strong&gt; Moved the department-based mail viewing option to the general mail settings page. by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App supervisor]&lt;/strong&gt; Hid the standalone V2 Applications block while keeping its settings page available internally. by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; Fixed revision creation events failing on RabbitMQ brokers that reject &lt;code&gt;:&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt; in queue names. (&lt;a href="https://github.com/nocobase/nocobase/pull/9989" rel="noopener noreferrer"&gt;#9989&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed iframe sanitization for v2 Markdown rendering and editing. (&lt;a href="https://github.com/nocobase/nocobase/pull/9986" rel="noopener noreferrer"&gt;#9986&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed V2 table data scope filters so missing URL query parameters no longer block table data queries. (&lt;a href="https://github.com/nocobase/nocobase/pull/9869" rel="noopener noreferrer"&gt;#9869&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;Fix the issue where opening an empty V2 Group menu item shows 404 (&lt;a href="https://github.com/nocobase/nocobase/pull/9896" rel="noopener noreferrer"&gt;#9896&lt;/a&gt;) by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fixed an issue where multiline text field values could not be set via ctx.setFormValues. (&lt;a href="https://github.com/nocobase/nocobase/pull/9959" rel="noopener noreferrer"&gt;#9959&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;li&gt;Fixed routed popup creation forms losing prefilled field values such as Calendar V2 start and end dates. (&lt;a href="https://github.com/nocobase/nocobase/pull/9874" rel="noopener noreferrer"&gt;#9874&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;Fix the issue where route subpages are blank or use incorrect spacing after refresh (&lt;a href="https://github.com/nocobase/nocobase/pull/9961" rel="noopener noreferrer"&gt;#9961&lt;/a&gt;) by zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Action: Export records]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed a crash when dragging v2 exportable fields after selecting relation fields. (&lt;a href="https://github.com/nocobase/nocobase/pull/9995" rel="noopener noreferrer"&gt;#9995&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed XLSX exports so text-like field values that start with formula characters are escaped before being opened in Excel. (&lt;a href="https://github.com/nocobase/nocobase/pull/9973" rel="noopener noreferrer"&gt;#9973&lt;/a&gt;) by mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an issue where workflow execution node results could remain stuck in a loading state. (&lt;a href="https://github.com/nocobase/nocobase/pull/9991" rel="noopener noreferrer"&gt;#9991&lt;/a&gt;) by mytharcher&lt;/li&gt;
&lt;li&gt;Reduced unnecessary workflow dispatcher DB fetch retries under concurrent queue processing. (&lt;a href="https://github.com/nocobase/nocobase/pull/9953" rel="noopener noreferrer"&gt;#9953&lt;/a&gt;) by mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Backup manager]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed an issue where newly created backup files could not be uploaded to cloud storage. (&lt;a href="https://github.com/nocobase/nocobase/pull/9981" rel="noopener noreferrer"&gt;#9981&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;li&gt;Fixed PostgreSQL and Kingbase backup restore command execution when paths or arguments contain spaces or special characters. (&lt;a href="https://github.com/nocobase/nocobase/pull/9946" rel="noopener noreferrer"&gt;#9946&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed AI employee workflow nodes failing to resume correctly in loops after a previous AI employee tool call. (&lt;a href="https://github.com/nocobase/nocobase/pull/9980" rel="noopener noreferrer"&gt;#9980&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;Fixed AI checkpoint cleanup failures in underscored database environments. (&lt;a href="https://github.com/nocobase/nocobase/pull/9982" rel="noopener noreferrer"&gt;#9982&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[UI templates]&lt;/strong&gt; Fixed an issue where the field template menu was incorrectly displayed in subforms. (&lt;a href="https://github.com/nocobase/nocobase/pull/9960" rel="noopener noreferrer"&gt;#9960&lt;/a&gt;) by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[File manager]&lt;/strong&gt; Hidden the file manager attachments list API and return 404 when it is requested. (&lt;a href="https://github.com/nocobase/nocobase/pull/9978" rel="noopener noreferrer"&gt;#9978&lt;/a&gt;) by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Block: Comment]&lt;/strong&gt; Adjusted the default action order for new Comment blocks. (&lt;a href="https://github.com/nocobase/nocobase/pull/9976" rel="noopener noreferrer"&gt;#9976&lt;/a&gt;) by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data visualization]&lt;/strong&gt; Fixed an issue where chart blocks would trigger unnecessary refreshes when closing a popup. (&lt;a href="https://github.com/nocobase/nocobase/pull/9970" rel="noopener noreferrer"&gt;#9970&lt;/a&gt;) by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Mobile (deprecated)]&lt;/strong&gt; Fix responsive v1 admin pages so view actions open as subpages and select fields use mobile popups (&lt;a href="https://github.com/nocobase/nocobase/pull/9974" rel="noopener noreferrer"&gt;#9974&lt;/a&gt;) by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Version control]&lt;/strong&gt; Fixed version-control revision creation on RabbitMQ brokers that reject &lt;code&gt;:&lt;/code&gt; and &lt;code&gt;@&lt;/code&gt; in queue names. by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt; Fixed external NocoBase attachment uploads and updates in attachment fields by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt; Fix the error that may occur when opening approval details without configuration permissions by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  v2.2.0-alpha.4
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Release date: 2026-07-01&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎉 New Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Block: Comment]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved comment block settings with data scope, default sorting, selectable page size, optional last-page jumping, and scalar owner field mapping. (&lt;a href="https://github.com/nocobase/nocobase/pull/9954" rel="noopener noreferrer"&gt;#9954&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;Added a comments block. (&lt;a href="https://github.com/nocobase/nocobase/pull/9916" rel="noopener noreferrer"&gt;#9916&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt; Added Mistral AI as an LLM provider for AI services. (&lt;a href="https://github.com/nocobase/nocobase/pull/9925" rel="noopener noreferrer"&gt;#9925&lt;/a&gt;) by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Record history]&lt;/strong&gt; Added client v2 support for the record history plugin. by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[cli]&lt;/strong&gt; Support manual Nginx/Caddy proxy config generation, allow Docker deployments without bundled Nginx, and align proxy and CDN-related runtime configuration. (&lt;a href="https://github.com/nocobase/nocobase/pull/9943" rel="noopener noreferrer"&gt;#9943&lt;/a&gt;) by chenos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow: JavaScript]&lt;/strong&gt; Aligned v2 workflow request and mailer node configuration fields with legacy layout and attachment variable behavior. (&lt;a href="https://github.com/nocobase/nocobase/pull/9952" rel="noopener noreferrer"&gt;#9952&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[UI layout]&lt;/strong&gt; Improved the v2 mobile tab bar so crowded tabs scroll horizontally instead of overlapping. (&lt;a href="https://github.com/nocobase/nocobase/pull/9949" rel="noopener noreferrer"&gt;#9949&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow: Aggregate node]&lt;/strong&gt; Improved v2 workflow field selection for update and aggregate query nodes, including safer associated collection selection in aggregate query nodes. (&lt;a href="https://github.com/nocobase/nocobase/pull/9938" rel="noopener noreferrer"&gt;#9938&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Block: Comment]&lt;/strong&gt; Added the new comment block plugin to the NocoBase preset and marked the legacy comments plugin as deprecated. (&lt;a href="https://github.com/nocobase/nocobase/pull/9936" rel="noopener noreferrer"&gt;#9936&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Logger]&lt;/strong&gt; Added the Logger settings page to the client v2 runtime. (&lt;a href="https://github.com/nocobase/nocobase/pull/9933" rel="noopener noreferrer"&gt;#9933&lt;/a&gt;) by jiannx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[HTTP request encryption]&lt;/strong&gt; Added v2 client support for HTTP request encryption so query parameters continue to be encrypted in the v2 client. by jiannx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Workflow: Database transaction node]&lt;/strong&gt; Improved the v2 workflow database transaction node layout so branch labels and the commit marker have better spacing. by katherinehhh&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🐛 Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[flow-engine]&lt;/strong&gt; Fixed an issue where ctx.auth.user would not update after switching users. (&lt;a href="https://github.com/nocobase/nocobase/pull/9964" rel="noopener noreferrer"&gt;#9964&lt;/a&gt;) by gchust&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[client-v2]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix workflow execution revision navigation so creating a new version after manual execution opens the correct workflow page in both legacy and modern shells. (&lt;a href="https://github.com/nocobase/nocobase/pull/9955" rel="noopener noreferrer"&gt;#9955&lt;/a&gt;) by Molunerfinn&lt;/li&gt;
&lt;li&gt;Fixed table datetime columns losing their configured time display after pagination or refresh. (&lt;a href="https://github.com/nocobase/nocobase/pull/9935" rel="noopener noreferrer"&gt;#9935&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed long selected labels in record select fields so they truncate cleanly without squeezing the select control. (&lt;a href="https://github.com/nocobase/nocobase/pull/9939" rel="noopener noreferrer"&gt;#9939&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;li&gt;Fixed V2 admin group routes showing 404 when the group has no available child menu page. (&lt;a href="https://github.com/nocobase/nocobase/pull/9932" rel="noopener noreferrer"&gt;#9932&lt;/a&gt;) by katherinehhh&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[undefined]&lt;/strong&gt; Fixed the Version control documentation in non-Chinese languages so the Professional Edition label is displayed. (&lt;a href="https://github.com/nocobase/nocobase/pull/9944" rel="noopener noreferrer"&gt;#9944&lt;/a&gt;) by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[AI employees]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed LLM providers falling back to their default Base URL when the custom Base URL field is cleared. (&lt;a href="https://github.com/nocobase/nocobase/pull/9958" rel="noopener noreferrer"&gt;#9958&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;li&gt;Fixed workflow AI employee tasks failing after repeated tool calls reached the graph recursion limit. (&lt;a href="https://github.com/nocobase/nocobase/pull/9945" rel="noopener noreferrer"&gt;#9945&lt;/a&gt;) by cgyrock&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Action: Custom request]&lt;/strong&gt; Fixed custom requests allowing runtime options to override the saved request target. (&lt;a href="https://github.com/nocobase/nocobase/pull/9904" rel="noopener noreferrer"&gt;#9904&lt;/a&gt;) by mytharcher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Mobile (deprecated)]&lt;/strong&gt; Fix the issue where mobile pages and public forms cannot be scrolled on mobile devices (&lt;a href="https://github.com/nocobase/nocobase/pull/9898" rel="noopener noreferrer"&gt;#9898&lt;/a&gt;) by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Notification manager]&lt;/strong&gt; Fix incorrect workflow variables shown in CC configuration (&lt;a href="https://github.com/nocobase/nocobase/pull/9937" rel="noopener noreferrer"&gt;#9937&lt;/a&gt;) by zhangzhonghe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix workflow context mismatches across bundles so branches and some variable pickers work correctly in legacy workflow pages. (&lt;a href="https://github.com/nocobase/nocobase/pull/9951" rel="noopener noreferrer"&gt;#9951&lt;/a&gt;) by Molunerfinn&lt;/li&gt;
&lt;li&gt;Fix issues after migrated client to v2 (&lt;a href="https://github.com/nocobase/nocobase/pull/9929" rel="noopener noreferrer"&gt;#9929&lt;/a&gt;) by mytharcher&lt;/li&gt;
&lt;li&gt;Fix the issue where in-app message content cannot be configured in v2 workflows (&lt;a href="https://github.com/nocobase/nocobase/pull/9885" rel="noopener noreferrer"&gt;#9885&lt;/a&gt;) by zhangzhonghe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source manager]&lt;/strong&gt; Fixed v2 collection field management so template-protected fields cannot be deleted and inherited fields support view / override behavior consistent with v1. (&lt;a href="https://github.com/nocobase/nocobase/pull/9940" rel="noopener noreferrer"&gt;#9940&lt;/a&gt;) by katherinehhh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Authentication]&lt;/strong&gt; Fixed incorrect redirects after SSO login in v2 sub applications (&lt;a href="https://github.com/nocobase/nocobase/pull/9927" rel="noopener noreferrer"&gt;#9927&lt;/a&gt;) by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Users]&lt;/strong&gt; Removed the default password from the add-user form in Users &amp;amp; Permissions. (&lt;a href="https://github.com/nocobase/nocobase/pull/9915" rel="noopener noreferrer"&gt;#9915&lt;/a&gt;) by jiannx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Flow engine]&lt;/strong&gt; Fixed the issue where mobile page can't be created by flow surface api. (&lt;a href="https://github.com/nocobase/nocobase/pull/9911" rel="noopener noreferrer"&gt;#9911&lt;/a&gt;) by gchust&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[App SSO]&lt;/strong&gt; Fixed incorrect App SSO redirects in v2 sub applications by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[AI: Knowledge base]&lt;/strong&gt; Fixed layout overflow in version control and knowledge base document lists when content or viewport size is constrained. by cgyrock&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Data source: External NocoBase]&lt;/strong&gt; Fixed NocoBase external data sources failing to load when connection options include runtime objects by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Migration manager]&lt;/strong&gt; Fixed garbled text that could occur when migrating MySQL data with non-ASCII content by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Record history]&lt;/strong&gt; Fixed external NocoBase data source loading failure when record history is enabled by 2013xile&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[Workflow: Approval]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix the error when opening CC node settings by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the error when adding Original application content to approval nodes by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix the issue where approval tables appear in the block data source list by zhangzhonghe&lt;/li&gt;
&lt;li&gt;Fix issues involved by migrating to client v2 by mytharcher&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[App supervisor]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed app visit links losing the v2 path in sub applications by 2013xile&lt;/li&gt;
&lt;li&gt;Fixed the app supervisor Applications tab registration in Client V2 by 2013xile&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>nocode</category>
      <category>news</category>
    </item>
  </channel>
</rss>
