Repository navigation
error codes
Every user-facing error in the ɳSelf CLI includes a stable code, a plain-language explanation, and a suggested fix. This page is the catalog for all registered error codes.
An error that carries a code (a structured error, or a known failure such as Docker not running) prints a block on stderr:
Error: [E001] Docker not installed
Why: The docker binary was not found in PATH.
Fix: Install Docker: https://docs.docker.com/get-docker/
Docs: https://nself.org/docs/reference/error-codes#e001
The Why, Fix and Docs lines appear only when they have content. Every other error still prints one line, Error: <message>, and exits 1.
The code in brackets (e.g., [E001]) is stable across CLI versions. You can search this page by code to find the cause and fix. The exit status is the Exit column of the code's row; see Exit-Codes for the classes.
The coded block and the exit classes (2, 3, 4) are v1.5 behaviour. They are on from v1.5.0 and opt-in before that with
NSELF_V15=1; see Compat-V15. Without it, errors print asError: <message>and exit 1.
- Copy the bracketed code from the terminal output (e.g.,
E102). - Search this page for that code (Ctrl+F or Cmd+F).
- The fix column gives you the fastest path to resolution.
These errors occur when the CLI cannot find or communicate with Docker.
| Code | Exit | Summary | Why | Fix |
|---|---|---|---|---|
| E001 | 2 | Docker not installed | The docker binary was not found in PATH. | Install Docker: https://docs.docker.com/get-docker/ |
| E002 | 2 | Docker daemon not running | The Docker daemon is not responding to commands. | Start Docker Desktop or run: sudo systemctl start docker |
| E003 | 2 | Docker Compose not available | docker compose v2 plugin is not installed. | Update Docker Desktop or install the compose plugin manually. |
| E004 | 2 | docker-compose.yml not found | No docker-compose.yml exists in the project directory. | Run 'nself build' to generate the compose file. |
| E005 | 2 | Port conflict | A required port is already in use by another process. | Run 'nself doctor' to identify the conflict, then stop the conflicting process or change the port in .env. |
These errors occur during configuration validation or when reading .env files.
These errors occur when installing plugins or validating license keys.
| Code | Exit | Summary | Why | Fix |
|---|---|---|---|---|
| E100 | 1 | Plugin not found | The requested plugin does not exist in the registry. | Run 'nself plugin list' to see available plugins. |
| E101 | 3 | Invalid license key | The license key format is invalid. | License keys start with 'nself_pro_' followed by 32+ characters. Check your key. |
| E102 | 3 | License tier insufficient | Your license tier does not include this plugin. | Upgrade your plan at https://nself.org/pricing |
| E103 | 3 | License expired | The license key has expired. | Renew your license at https://nself.org/account |
| E104 | 3 | License validation failed (network) | Cannot reach the license server and no valid local cache exists. | Check your internet connection. Previously validated licenses work offline for 7 days. |
| E105 | 1 | Circular plugin dependency | Plugin dependency graph contains a cycle. | Report this as a bug at https://github.com/nself-org/cli/issues |
| E106 | 1 | Invalid plugin manifest | The plugin manifest is missing a required field or contains an invalid value. | Fix the manifest fields named in the message, or reinstall the plugin: nself add |
| E107 | 1 | Plugin is not signed | A stable plugin release has no signature, so the install was refused. | Use a release that carries a signature, or report the missing signature to the plugin publisher. |
| E108 | 1 | Plugin checksum missing | A stable plugin release has no checksum, so the install was refused. | Use a release that carries a checksum, or report the missing checksum to the plugin publisher. |
| E109 | 1 | Duplicate plugin slug | The same plugin slug is served by more than one unrelated registry entry. | Report this to the registry maintainers. Install the plugin by its full registry name if one is shown. |
| E110 | 3 | License does not entitle this plugin tier | The installed license does not include this Licensed plugin. | Check your plan with: nself license status. Upgrade at https://nself.org/pricing if the tier is missing. |
| E111 | 1 | Forbidden key in a v2 plugin manifest | A manifest_version 2 plugin.json carries a key that belongs to the registry or to a legacy format (bundles, tier_pair, author_public_key, signature, checksum). | Remove the key from plugin.json. Bundle membership lives in bundles.json and signatures are added by the release pipeline. |
| E112 | 1 | Plugin manifest compatibility keys drifted | The generated compatibility keys (pluginType, binaryName, cliCommands, minNselfVersion, status, isCommercial, licenseType, requires_license, tier) no longer match the v2 fields they are derived from. | Regenerate them: go run github.com/nself-org/cli/tools/manifestv2migrate -in plugin.json -compat -write |
| E113 | 1 | Plugin command collides with a core command | commands.command is one of the core command verbs, so the plugin cannot be mounted under it. | Rename commands.command in plugin.json to a name that is not a core verb. |
| E114 | 1 | Unsupported plugin manifest version | plugin.json declares a manifest_version this nself release does not read (supported: 1 or absent, and 2). | Set manifest_version to 2, or upgrade nself if the manifest was written for a newer release. |
| E118 | 2 | Plugin migrations not applied in time | The bounded wait ended before the plugin's /health reported every migration applied: it reported fewer applied than expected, or it never answered HTTP 200 (hang, error status, redirect). The plugin applies its own SQL at boot; the CLI never applies it. | Read the plugin logs (docker logs nself_) for the failing migration. A slow first boot needs a longer wait: set NSELF_PLUGIN_READY_TIMEOUT (seconds). |
| E119 | 2 | Plugin health lacks migrations status | The plugin declares migrations but its /health response has no valid "migrations" {applied, expected} field (absent, wrong type, negative, applied above expected, or a body over 1 MiB), so readiness cannot be proven. | Update the plugin to a release built on sdk/go/migrate, which serves the migrations field in /health. |
| E120 | 1 | Plugin ships migrations without boot apply | The plugin has a migrations/ directory but its manifest does not declare migrations.apply: boot, so nothing applies the SQL when the plugin starts. | Add "migrations": {"dir": "migrations", "apply": "boot"} to plugin.json and apply the files at boot with sdk/go/migrate. |
| E127 | 1 | Plugin declares no seed command | The plugin's manifest has no seed.command, so nself db seed --plugin has nothing to run inside its container. |
Ask the plugin author to declare an idempotent seed argv under "seed": {"command": [...]} in plugin.json, or seed the data another way. |
These errors occur during SSL certificate generation or network operations.
| Code | Exit | Summary | Why | Fix |
|---|---|---|---|---|
| E150 | 2 | mkcert not installed | mkcert is not installed; falling back to OpenSSL self-signed certs. | Install mkcert: brew install mkcert (macOS) or see https://github.com/FiloSottile/mkcert |
| E151 | 2 | SSL certificate generation failed | Could not generate SSL certificates for the configured domain. | Check domain configuration and ensure openssl is available. |
These errors occur when the CLI interacts with the PostgreSQL container, backups, restores and disaster recovery.
These errors occur during health checks run by nself doctor, nself health, nself status and startup probes.
These errors occur during nself init or when the CLI validates the working directory.
These errors occur when the CLI validates domain names or port numbers from config.
These errors come from the command line itself: usage, JSON support, destructive-action gates and moved commands.
| Code | Exit | Summary | Why | Fix |
|---|---|---|---|---|
| E400 | classified | Unclassified error | The command failed with an error that has no specific code. | Read the message. If it looks like a bug, report it at https://github.com/nself-org/cli/issues |
| E401 | 1 | Invalid usage | A flag or argument was missing, unknown or had an invalid value. | Run the command with --help to see the accepted flags and arguments. |
| E402 | 1 | JSON output not supported | This command or flag combination cannot produce JSON output. | Run the command without --json, or use nself help --json to see which commands support it. |
| E403 | 4 | Destructive action blocked | A safety gate refused a destructive action. | Read the message for the missing confirmation or flag, check the target environment, then confirm explicitly. |
| E404 | 1 | Command moved to a plugin | This command now lives in a plugin that is not installed. | Run the nself add command printed in the message, then run the command again. |
| E405 | 1 | Plugin command not mounted (name collision) | The plugin's commands.command collides with a core command verb, a cobra-native command or alias, or another installed plugin's command, so it was not mounted. | Rename commands.command in the plugin's plugin.json to a free name, or remove the other plugin claiming it, then run nself again. |
| E406 | 1 | Mounted plugin binary missing, not executable or outside the plugins dir | The plugin declares a commands block, but its binary was not found in the plugins bin dir, is not executable, or resolves (after symlinks) outside the plugins directory. | Reinstall the plugin with nself add ; if it was installed by hand, put an executable nself- binary in ~/.nself/plugins/bin/. |
| E407 | 1 | Builtin family not mounted | This builtin command family is disabled or was removed from the local installation, so its commands are not mounted. | Run nself add to restore the builtin family. |
| E410 | 1 | Command removed in v1.5 | This command was removed in nSelf v1.5 and has no replacement. | Read the message for what to use instead, or run nself --help to see the current commands. |
| E435 | 1 | nself.yaml has a type or syntax error | nself.yaml cannot be read as YAML, or a key holds a value of the wrong type (for example plugins as a number, or a plugin entry that is a map instead of a name). | Fix the value at the reported line so it matches schemas/nself-yaml.v1.schema.json (see the nself.yaml wiki page). |
| E436 | 1 | Unknown key in nself.yaml | nself.yaml has a key that nself does not read. Silent keys hide typos and drift. | Rename the key to x- if it is app metadata, or remove it. nself reads app, bundle, bundles and plugins only. |
| E437 | 1 | Plugin registry surface declaration invalid | A mounted plugin declares invalid confirmation or surface fields. | Fix the plugin manifest confirm flags and surface declaration, then reinstall it. |
Change-plan (E450) and operation-lock (E460) codes. The other codes in this block are documented here when their Tickets register them.
These errors come from nself deploy and related commands. Only the codes registered so far are listed.
These errors come from adopting an existing stack: custom services that name dependencies, networks, build contexts and host binds. Only the codes registered so far are listed.
See Config-Custom-Services for the keys and Import-Export-Format for the bundle codes.
With --json (v1.5 mode), a failure writes exactly one error envelope to stdout and the human block above still goes to stderr:
{
"schema_version": "1",
"command": "start",
"error": {
"code": "E002",
"message": "docker info failed: docker daemon is not running",
"cause": "The Docker daemon is not responding to commands.",
"remediation": "Start Docker Desktop or run: sudo systemctl start docker",
"docs_url": "https://nself.org/docs/reference/error-codes#e002",
"exit_code": 2,
"class": "infra"
}
}| Field | Rule |
|---|---|
code |
^E[0-9]{3}$. The error's own code; else the code of the matching known failure (when several match, the highest class wins: auth, then destructive, then infra, then user); else E400. |
message |
What happened. |
cause |
Omitted when empty. The Why line. |
remediation |
Omitted when empty. The Fix line. |
docs_url |
Omitted when empty. The Docs line. |
exit_code |
The process exit status. |
class |
user (1), infra (2), auth (3), destructive_blocked (4), other (any other status). |
command is the command path without nself ("" when the failure came before a command was resolved). Message, cause and remediation are redacted: URL credentials, tokens, e-mail addresses and IPs are masked, and raw arguments are never included. The schema is schemas/error.v1.schema.json.
Codes are grouped in blocks. A block has exactly one category, so the category of a code follows from its number. A new block or range needs an entry in the plan first; the registry (internal/errs) rejects a code outside its owner's range, a mismatched category, and any code in the reserved range.
| Block | Category | Use |
|---|---|---|
| E001-E049 | docker | Docker and Compose |
| E050-E099 | config | Configuration and secrets |
| E100-E149 | plugin | Plugins, licenses, entitlements |
| E150-E199 | ssl | Certificates |
| E200-E249 | database | Database, migrations, backups, recovery |
| E250-E299 | health | Service health |
| E300-E349 | init | Project setup |
| E350-E399 | domain | Domains and ports |
| E400-E449 | cli | Usage, JSON output, command moves |
| E450-E479 | reconcile | Reconcile, locks, ACME |
| E480-E499 | deploy | Deploy and release verification |
| E500-E529 | adopt | Adopting existing stacks |
| E540-E549 | secret | Secret resolution |
| E600-E719 | reserved | The ci plugin's own registry; never allocated in the CLI |
Codes are never reused or renumbered. Several blocks have no registered codes yet; a block appears in the tables above once it has one.
If you are scripting around the CLI, branch on the exit status (see Exit-Codes) and parse the bracketed code from stderr, or use --json and read error.code from stdout:
output=$(nself start 2>&1)
if [ $? -ne 0 ]; then
code=$(printf '%s' "$output" | grep -oE '\[E[0-9]+\]' | head -1)
printf 'nself failed with %s\n' "$code"
fi- Exit-Codes, exit status classes and what changes in v1.5.0
- cmd-doctor, run diagnostics to identify and resolve common errors
- cmd-config, view and edit configuration values
- Plugin-Licensing, license key format and tier details
- Guide-SSL-Setup, SSL certificate setup
- Config-Env-Vars, all environment variable reference
Getting Started
Commands
- Commands, Overview
- Lifecycle: cmd-init · cmd-build · cmd-start · cmd-stop · cmd-restart · cmd-dev
- Monitoring: cmd-status · cmd-logs · cmd-health · cmd-urls · cmd-doctor · cmd-monitor · cmd-alerts · cmd-sentry · cmd-watchdog
- Data: cmd-db · cmd-backup · cmd-dr · cmd-queue · cmd-webhooks
- Config: cmd-config · cmd-service · cmd-env · cmd-promote
- Networking: cmd-ssl · cmd-trust · cmd-dns-setup
- Security: cmd-access · cmd-security · cmd-secrets
- Tenancy: cmd-tenant · cmd-billing
- Plugins: cmd-plugin · cmd-license · cmd-dogfood (extracted, CLI-R11) · cmd-k8s (extracted, CLI-R11) · cmd-encryption (extracted, CLI-R11) · cmd-waf (extracted, CLI-R11) · cmd-federation (extracted, CLI-R11) · cmd-mail (extracted, CLI-R11) · cmd-dlq (extracted, CLI-R11)
- AI: cmd-ai · cmd-claw · cmd-model
- Templates: cmd-template
- Utilities: cmd-exec · cmd-clean · cmd-reset · cmd-update · cmd-upgrade · cmd-version · cmd-admin · cmd-migrate · cmd-migrate-firebase · cmd-migrate-supabase · cmd-completion
Features
- Features, Overview
- Feature-Auth
- Feature-Storage
- Feature-Search
- Feature-Functions
- Feature-Email
- Feature-Monitoring
- Feature-Plugins
- Feature-nClaw, AI Assistant
- Feature-nChat, Messaging
- Feature-nFamily, Family Social
- Feature-nCloud, Managed Hosting
- Feature-Memory-Rooms, Knowledge Organization
- Feature-Agent-Dashboard, Agent Metrics
- Feature-Image-Generation, AI Image Generation
Configuration
- Configuration, Overview
- Config-Env-Vars
- Config-Postgres
- Config-Hasura
- Config-Auth
- Config-Nginx
- Shared-Proxy
- Config-Optional-Services
- Config-Custom-Services
- Config-System
Plugins (87 + 10 monitoring)
- Plugin-Overview
- Plugin-Catalog
- Plugin-Install
- Plugin-Licensing
- Plugin-Architecture
- Plugin-Dev-Guide
- Plugin-Migrations-Contract
Free (25)
- plugin-backup
- plugin-content-acquisition
- plugin-content-progress
- plugin-cron
- plugin-donorbox
- plugin-feature-flags
- plugin-github
- plugin-github-runner
- plugin-invitations
- plugin-jobs
- plugin-link-preview
- plugin-mdns
- plugin-mlflow
- plugin-monitoring
- plugin-notifications
- plugin-notify
- plugin-paypal
- plugin-search
- plugin-shopify
- plugin-stripe
- plugin-subtitle-manager
- plugin-tokens
- plugin-torrent-manager
- plugin-vpn
- plugin-webhooks
Pro (62)
- plugin-access-controls
- plugin-activity-feed
- plugin-admin-api
- plugin-analytics
- plugin-auth
- plugin-bots
- plugin-browser
- plugin-calendar
- plugin-cdn
- plugin-chat
- plugin-claw
- plugin-claw-budget
- plugin-claw-news
- plugin-claw-web
- plugin-cloudflare
- plugin-cms
- plugin-compliance
- plugin-ddns
- plugin-devices
- plugin-documents
- plugin-entitlements
- plugin-file-processing
- plugin-game-metadata
- plugin-geocoding
- plugin-geolocation
- plugin-google
- plugin-home
- plugin-idme
- plugin-knowledge-base
- plugin-linkedin
- plugin-livekit
- plugin-media-processing
- plugin-meetings
- plugin-moderation
- plugin-mux
- plugin-object-storage
- plugin-observability
- plugin-photos
- plugin-podcast
- plugin-post
- plugin-realtime
- plugin-retro-gaming
- plugin-rom-discovery
- plugin-social
- plugin-sports
- plugin-support
- plugin-tmdb
- plugin-voice
- plugin-web3
- plugin-workflows
Planned (26)
plugin-auditplugin-blogplugin-checkoutplugin-commerceplugin-drmplugin-exportplugin-flowplugin-importplugin-ldapplugin-mailgunplugin-mediaplugin-oauth-providersplugin-pagesplugin-postmarkplugin-rate-limitplugin-reportsplugin-samlplugin-schedulerplugin-sendgridplugin-ssoplugin-subscriptionplugin-thumbplugin-transcoderplugin-twilioplugin-wafplugin-watermark
Guides
- Guide-Production-Deployment
- Guide-SSL-Setup
- Guide-Multi-Tenancy
- Guide-Security-Hardening
- Guide-Monitoring-Setup
- Guide-Backup-Restore
- Guide-Custom-Services
- Guide-Migration-from-v1
- Guide-Agents-MCP
- Guide-CI-CD
- Guide-SDK
Architecture
- Architecture
- Architecture-Guardrails
- Service-Graph
- Compose-Generation
- Nginx-Generation
- Plugin-Architecture
Reference
Machine interface
-
JSON-Output,
--jsonenvelope -
Command-Registry,
nself help --json - Exit-Codes
- error-codes, Error Codes
-
Compat-V15,
NSELF_V15gate
Licensing
Security
Brand
Operations
- operations/release-cascade, Release Cascade
- operations/self-healing, Self-Healing Schema
- operations/redis-tuning, Redis Pool Tuning
- operations/meilisearch-warmup, MeiliSearch Warm-Up
- operations/jwt-rotation, JWT Key Rotation
- operations/windows-wsl2-setup, Windows / WSL2 Setup
- operations/gemini-oauth-reauth, Gemini OAuth Reauth
Contributing
Admin
- USER-ACTION-QUEUE, Pending Admin Actions
All commands (21)
- A: cmd-add · cmd-admin
- B: cmd-backup · cmd-build
- C: cmd-clean · cmd-config
- D: cmd-db · cmd-deploy · cmd-doctor
- E: cmd-exec
- I: cmd-init
- L: cmd-license · cmd-logs
- M: cmd-mcp
- R: cmd-remove · cmd-reset · cmd-restart
- S: cmd-start · cmd-status · cmd-stop
- U: cmd-update