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 the pro tier of this 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. |
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. |
Operation-lock codes. The other codes in this block are documented here when their Tickets register them.
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.
| Code | Exit | Summary | Why | Fix |
|---|---|---|---|---|
| E500 | 1 | Custom service dependency is not valid | CS_N_DEPENDS_ON names a service that does not exist in this project, uses a condition other than started, healthy or completed, or forms a dependency cycle. | Use name[:started|healthy|completed], comma-separated, name a core service, another custom service or a service from an installed plugin, and remove circular dependencies. |
| E501 | 1 | Custom service network is not allowed | CS_N_NETWORKS names a network that does not start with <PROJECT_NAME>_. A custom service never joins another project's network. | Rename the network to <PROJECT_NAME>_ (lowercase letters, digits, - and _), or remove it from CS_N_NETWORKS. |
| E502 | 1 | Custom service host bind is not allowed | CS_N_VOLUMES binds a writable absolute host path outside the project, or the Docker socket, or the host root. These give the container control of the host. | Use a named volume or a project-relative path, mount an outside path read-only (:ro), and never mount /var/run/docker.sock or /. |
| E515 | 1 | Unknown portable bundle format or major version | The bundle manifest is missing, is not JSON, is not an nself portable export, or its schema_version is not major 1. | Re-export the bundle with a matching nself release, or upgrade nself if the bundle comes from a newer one. |
| E516 | 1 | Portable bundle failed its integrity check | A bundle file is missing, changed, truncated, longer than listed, unlisted, duplicated, a link, or has an unsafe name, or a size limit was exceeded. The message names the file. | Export the bundle again from the source and keep it unmodified, then re-run the command. See Import-Export-Format. |
| E528 | 1 | Custom service build context is not allowed | CS_N_PATH reaches above the repository root, or an ancestor build context has no ignore file that excludes */.env and */.secrets (a bare .env matches only the context root). The whole directory is sent to the image builder. | Point CS_N_PATH at the project or at an ancestor no higher than the directory that holds .git, and add */.env and **/.secrets to that directory's .dockerignore. |
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