definitive reference for the simple CLI. Contains ALL commands, arguments, and flags.
simple <command> <subcommand> [args] [flags]
simple new appScaffold a new empty application structure.
simple new app <app-id> <name><app-id>: Unique identifier (e.g., com.acme.crm).<name>: Human-readable display name (e.g., "Customer CRM").--desc <string>: Application description.simple new actionCreate a new action, in TypeScript or in Rust, with boilerplate that builds and tests as written.
simple new action <app-id> <name> <display-name><app-id>: Target App ID.<name>: Action name in kebab-case (e.g., calculate-tax).<display-name>: Human readable label.--lang <string>: Action language (ts, rust). Defaults to ts.--scope <string>: NPM package scope (e.g., acme). REQUIRED for --lang ts. A Rust action is a cargo crate named after the action itself and is never published to a registry, so it takes no scope.--env <string>: Execution environment (server, client, both). Defaults to server.--desc <string>: Description of the logic.simple new behaviorCreate a client-side record behavior script.
simple new behavior <app-id> <table-name><app-id>: Target App ID.<table-name>: The table this behavior attaches to.simple new spaceScaffold a new custom React Space.
simple new space <app-id> <name> <display-name><app-id>: Target App ID (e.g., com.acme.crm).<name>: Space name in kebab-case (e.g., sales-dashboard).<display-name>: Human readable label.--desc <string>: Description of the space.simple new trigger:dbCreate a database event trigger.
simple new trigger:db <app-id> <name> <display-name><app-id>: Target App ID.<name>: Trigger name (snake_case).<display-name>: Human readable label.--table <string>: REQUIRED Table to watch.--ops <string>: Operations to watch: insert, update, delete (comma-separated, default: insert).--action <string>: Action to execute.--condition <string>: JQ condition filter.--desc <string>: Description.simple new trigger:timedCreate a scheduled timed trigger.
simple new trigger:timed <app-id> <name> <display-name><app-id>: Target App ID.<name>: Trigger name (snake_case).<display-name>: Human readable label.--frequency <string>: minutely|hourly|daily|weekly|monthly|yearly.--interval <int>: Interval between runs (default: 1).--start-at <string>: Start time (ISO8601).--time <string>: Time of day (HH:MM:SS) (default: "00:00:00").--timezone <string>: Timezone (default: "UTC").--days <string>: Specific days (MON,TUE...).--action <string>: Action to execute.--desc <string>: Description.simple new trigger:webhookCreate an HTTP webhook trigger.
simple new trigger:webhook <app-id> <name> <display-name><app-id>: Target App ID.<name>: Trigger name (snake_case).<display-name>: Human readable label.--method <string>: HTTP method: get|post|put|delete (default: post).--public: Make endpoint public (no auth).--action <string>: Action to execute.--desc <string>: Description.simple buildCompile all SCL files, Actions (WASM), and Spaces (Vite/React).
simple build [target][target] (Optional): Specific app (com.acme.crm) or action (com.acme.crm/my-action) to build.--all: Build all actions in all apps.--concurrency <int>: Number of parallel builds (default: 4).simple installInstall a deployed app to an environment (migrations, cache warming).
simple install <app-id><app-id>: App ID to install (must be already deployed).--env <string>: REQUIRED. Target environment (dev, staging, prod).--progress <string>: auto (default), tty or plain. Use plain for one line per step when capturing output.--json: Print one JSON document on stdout; errors go to stderr as {"error": ...}.simple testRun the unified test runner. Each target is handed to its own runner: Vitest for
TypeScript and JavaScript, cargo test for Rust actions.
simple test [app-id][app-id] (Optional): Limit tests to a specific app.--action <string>: Run tests for a specific action only.--behavior <string>: Run tests for a specific behavior script only.--space <string>: Run tests for a specific space only.--coverage: Enable code coverage reporting.--json: Output results in JSON format (CI/CD friendly).simple deployDeploy application artifacts to a remote environment.
simple deploy <app-path><app-path>: Path to the app directory (e.g., apps/com.acme.crm).--env <string>: REQUIRED. Target environment (dev, staging, prod).--bump <string>: Semver bump strategy (patch, minor, major).--no-install: Publish the version without installing it; install it later with simple install <app-id> --env <env>.--dry-run: Show the next version and the files that would be uploaded. Nothing is written or uploaded: no sign-in, no connection, app.scl unchanged.--progress <string>: auto (default), tty or plain. Use plain for one line per step when capturing output.--json: Print one JSON document on stdout; errors go to stderr as {"error": ...}. An install that fails after the publish still exits 1.[n/N] β Step: detail (duration)) when not on a terminal. Success ends with β
Deployed <app-id>@<version> (Installed) in <duration>. After a failure or Ctrl+C, the lines before the error say what was left behind (a bumped app.scl, a publish or install the server may still finish) and what to run next.simple initInitialize a new workspace (Monorepo).
simple init <project-name><project-name>: Name of the root directory to create.--tenant <string>: Tenant name for simple.scl configuration.