logologo
Get Started
Guide
Development
Plugins
API
English
简体中文
Get Started
Guide
Development
Plugins
API
English
简体中文
logologo

Quick Start

Plugin Development Overview
Write Your First Plugin
Project Structure

Server Development

Overview
Plugin
Collections
Database
DataSourceManager
ResourceManager
ACL
Middleware
Cache
Event
Context
Migration
Logger
Telemetry
I18n
Command
CronJobManager
Test

Client Development

Overview
Plugin
Context
Router
ACL
DataSourceManager
Resource
Request
Styles & Themes
Logger
I18n
Test

Others

Plugin Upgrade Guide
Languages
Dependency Management
Build
Previous PageI18n
Next PageCronJobManager

#Command

In NocoBase, commands are used to execute operations related to applications or plugins in the command line, such as running system tasks, executing migration or sync operations, initializing configuration, or interacting with running application instances. Developers can define custom commands for plugins and register them through the app object, executing them in CLI as nocobase <command>.

#Command Types

In NocoBase, command registration is divided into two types:

TypeRegistration MethodDoes Plugin Need to be EnabledTypical Scenarios
Dynamic Commandapp.command()✅ YesPlugin business-related commands
Static CommandApplication.registerStaticCommand()❌ NoInstallation, initialization, maintenance commands

#Dynamic Commands

Use app.command() to define plugin commands. Commands can only be executed after the plugin is enabled. Command files should be placed in src/server/commands/*.ts in the plugin directory.

Example

import { Application } from '@nocobase/server';

export default function (app: Application) {
  app
    .command('echo')
    .option('-v, --version')
    .action(async ([options]) => {
      console.log('Hello World!');
      if (options.version) {
        console.log('Current version:', await app.version.get());
      }
    });
}

Description

  • app.command('echo'): Defines a command named echo.
  • .option('-v, --version'): Adds an option to the command.
  • .action(): Defines command execution logic.
  • app.version.get(): Gets the current application version.

Execute Command

nocobase echo
nocobase echo -v

#Static Commands

Use Application.registerStaticCommand() to register. Static commands can be executed without enabling plugins, suitable for installation, initialization, migration, or debugging tasks. Register in the plugin class's staticImport() method.

Example

import { Application, Plugin } from '@nocobase/server';

export default class PluginHelloServer extends Plugin {
  static staticImport() {
    Application.registerStaticCommand((app: Application) => {
      app
        .command('echo')
        .option('-v, --version')
        .action(async ([options]) => {
          console.log('Hello World!');
          if (options.version) {
            console.log('Current version:', await app.version.get());
          }
        });
    });
  }
}

Execute Command

nocobase echo
nocobase echo --version

Description

  • Application.registerStaticCommand() registers commands before the application is instantiated.
  • Static commands are usually used to execute global tasks unrelated to application or plugin state.

#Command API

Command objects provide three optional helper methods to control command execution context:

MethodPurposeExample
ipc()Communicate with running application instances (via IPC)app.command('reload').ipc().action()
auth()Verify database configuration is correctapp.command('seed').auth().action()
preload()Preload application configuration (execute app.load())app.command('sync').preload().action()

Configuration Description

  • ipc()
    By default, commands execute in a new application instance.
    After enabling ipc(), commands interact with the currently running application instance through inter-process communication (IPC), suitable for real-time operation commands (such as refreshing cache, sending notifications).

  • auth()
    Check whether database configuration is available before command execution.
    If database configuration is incorrect or connection fails, the command will not continue. Commonly used for tasks involving database writes or reads.

  • preload()
    Preload application configuration before executing the command, equivalent to executing app.load().
    Suitable for commands that depend on configuration or plugin context.

For more API methods, see AppCommand.

#Common Examples

Initialize Default Data

app
  .command('init-data')
  .auth()
  .preload()
  .action(async () => {
    const repo = app.db.getRepository('users');
    await repo.create({ values: { username: 'admin' } });
    console.log('Initialized default admin user.');
  });

Reload Cache for Running Instance (IPC Mode)

app
  .command('reload-cache')
  .ipc()
  .action(async () => {
    console.log('Requesting running app to reload cache...');
  });

Static Registration of Installation Command

Application.registerStaticCommand((app) => {
  app
    .command('setup')
    .action(async () => {
      console.log('Setting up NocoBase environment...');
    });
});