otto-stack CLI Reference
A powerful development stack management tool for streamlined local development automation
Command Categories
π Project Management
Initialize, validate, and manage project setup
Commands: init, validate, services, deps, conflicts, doctor
π Service Lifecycle
Start, stop, and manage running services
Commands: up, down, restart, cleanup
βοΈ Operations & Data
Monitor and manage service data
Commands: status, logs
π οΈ Utility
Information and development tools
Commands: version, help, web-interfaces
Commands
up
Start development stack services
Start one or more services in the development stack. The command is context-aware:
- In a project directory: Starts project services (including shared containers)
- Outside a project: Starts only shared containers (requires service names)
When sharing is enabled, containers are registered in ~/.otto-stack/shared/containers.yaml to track which projects use them.
Usage: otto-stack up [service...]
Aliases: start, run
Examples:
otto-stack upStart all configured services (in project context)
otto-stack up postgres redisStart specific services
otto-stack up --global redisStart a shared container from inside a project directory
otto-stack up --detach --buildBuild images and start services in background
Flags:
--global(bool): Force shared (global) mode β start as shared containers regardless of current directory (default:false)--project(string): Path to a project directory β operate on that project regardless of current directory (default: ``)--detach(bool): Run services in background (detached mode) (default:false)--build(bool): Build images before starting services (default:false)--force-recreate(bool): Recreate containers even if config hasn’t changed (default:false)--no-deps(bool): Don’t start linked services (default:false)--timeout(string): Timeout for service startup (e.g., 30s, 2m) (default:30s)
Related Commands:
down,
restart,
status
Tips:
- Add –build if you’ve made changes to Dockerfiles
- Use –detach to free up your terminal while services run
- Shared containers persist across projects when sharing is enabled
down
Stop development stack services
Stop one or more services in the development stack. The command is context-aware:
- In a project directory: Stops project services, prompts before stopping shared containers
- Outside a project: Stops shared containers (requires service names)
- With –shared flag: Stops all shared containers from any location
- With –all flag: Stops both project and shared containers
When stopping shared containers, you’ll be prompted if they’re used by other projects. The registry at ~/.otto-stack/shared/containers.yaml is updated to remove the project.
Usage: otto-stack down [service...]
Aliases: stop
Examples:
otto-stack downStop all running services (prompts for shared containers)
otto-stack down postgres redisStop specific services
otto-stack down --sharedStop all shared containers
otto-stack down --allStop both project and shared containers
otto-stack down --volumesStop services and remove volumes
otto-stack down --timeout 5Stop services with custom timeout
Flags:
--project(string): Path to a project directory β operate on that project regardless of current directory (default: ``)--shared(bool): Stop all shared containers (default:false)--all(bool): Stop both project and shared containers (default:false)--volumes(bool): Remove named volumes and anonymous volumes (default:false)--remove-orphans(bool): Remove containers for services not in compose file (default:false)--timeout(int): Shutdown timeout in seconds (default:10)
Related Commands:
up,
cleanup,
status
Tips:
- Use –volumes carefully as it will delete all data
- Shared containers prompt before stopping if used by other projects
- Add –remove-orphans to clean up unused containers
restart
Restart development stack services
Restart one or more services. This is equivalent to running down followed by up, but more efficient for quick restarts.
Usage: otto-stack restart [service...]
Examples:
otto-stack restartRestart all services
otto-stack restart postgresRestart a specific service
otto-stack restart --timeout 5Restart with custom timeout
otto-stack restart --global postgresRestart a shared container from inside a project directory
Flags:
--global(bool): Force shared (global) mode β restart shared containers regardless of current directory (default:false)--project(string): Path to a project directory β operate on that project regardless of current directory (default: ``)--timeout(int): Restart timeout in seconds (default:10)--no-deps(bool): Don’t restart linked services (default:false)
Related Commands:
up,
down,
status
status
Show status of development stack services
Display comprehensive status information for services. The command is context-aware:
- In a project directory: Shows project services status
- Outside a project: Use –all or –shared flag to see shared containers
- Specific project: Use –project flag to see what a project uses
Usage: otto-stack status [service...]
Aliases: ps, ls
Examples:
otto-stack statusShow status of all services (in project context)
otto-stack status postgres redisShow status of specific services
cd ~ && otto-stack status --allShow all projects’ shared containers (global context)
otto-stack status --sharedShow detailed shared container usage
otto-stack status --project my-appShow shared containers used by specific project
otto-stack status --format jsonOutput status in JSON format
Flags:
--format(string): Output format (table|json|yaml) (default:table) (options:table,json,yaml)--all(bool): Show status across all projects (including shared containers) (default:false)--shared(bool): Show detailed shared container usage and metrics (default:false)--project(string): Show shared containers used by specific project (default: ``)
Related Commands:
logs,
status
Tips:
- Try –format json for programmatic access
- Use –shared to see detailed container usage metrics
- Use –project to see what a specific project uses
logs
View logs from services
View and follow logs from one or more services. Supports filtering, timestamps, and real-time following. Logs from multiple services are color-coded for easy identification.
Usage: otto-stack logs [service...]
Examples:
otto-stack logsShow the last 100 lines from all services
otto-stack logs postgres redisShow logs from specific services
otto-stack logs --follow postgresStream live logs from postgres
otto-stack logs --since 30mShow logs from the last 30 minutes
Flags:
--follow(bool): Follow log output in real-time (default:false)--timestamps(bool): Show timestamps (default:false)--tail(string): Number of lines to show from the end of the logs (default:100)--since(string): Show logs since a relative duration (e.g. 30m, 1h) or timestamp (default: ``)
Related Commands:
status
Tips:
- Logs from multiple services are color-coded for identification
- Use –follow to stream logs in real-time; interrupt with Ctrl+C
doctor
Diagnose and troubleshoot stack health
Run comprehensive health checks on your development stack. Identifies common issues, provides troubleshooting suggestions, and validates service configurations.
Usage: otto-stack doctor [service...]
Examples:
otto-stack doctorRun health checks on all services
otto-stack doctor postgresDiagnose a specific service
Flags:
--format(string): Output format (table|json) (default:table) (options:table,json)
Related Commands:
status,
logs
Tips:
- Run doctor when services aren’t behaving as expected
- Use –format json for programmatic access to health check results
cleanup
Clean up unused resources and data
Clean up unused Docker resources, temporary files, and orphaned data created by otto-stack services. Helps reclaim disk space and maintain a clean development environment.
Usage: otto-stack cleanup [options]
Examples:
otto-stack cleanupInteractive cleanup with confirmations
otto-stack cleanup --all --forceClean up everything without prompts
otto-stack cleanup --dry-runPreview what would be cleaned up
Flags:
--all,-a(bool): Clean up all resources (containers, volumes, images) (default:false)--volumes(bool): Remove unused volumes (default:false)--images(bool): Remove unused images (default:false)--networks(bool): Remove unused networks (default:false)--force,-f(bool): Don’t prompt for confirmation (default:false)--orphans(bool): Clean up orphaned shared containers (containers with no projects) (default:false)--project,-p(string): Clean specific project (if not specified, cleans current project) (default: ``)
Related Commands:
down,
doctor
Tips:
- Use –dry-run first to see what will be removed
- Be careful with –volumes as it removes all data
init
Initialize a new otto-stack project interactively
Initialize a new otto-stack project in the current directory with an interactive setup process. Guides you through selecting services, configuring validation and advanced settings, and creates all necessary configuration files.
Usage: otto-stack init [flags]
Examples:
otto-stack initInteractive project initialization (recommended)
otto-stack init --project-name myproject --services postgres,redisNon-interactive setup with specific project name and services
otto-stack init --forceOverwrite existing configuration
Flags:
--force,-f(bool): Overwrite existing files (default:false)--project-name(string): Project name (defaults to current directory name) (default: ``)--services(string): Comma-separated list of services to include (required for non-interactive mode) (default: ``)--no-shared-containers(bool): Disable shared containers for all services (default:false)--shared-services(string): Comma-separated list of services to share across projects (e.g., postgres,redis). Overrides global sharing setting for specified services. (default: ``)--auto-start(bool): Automatically run ‘up’ after initialization completes (non-interactive mode only; interactive mode prompts) (default:false)
Related Commands:
validate
web-interfaces
Show web interfaces for running services
Display web interfaces (dashboards, UIs) for running services. Shows URLs and availability status for easy access to service management interfaces.
Usage: otto-stack web-interfaces [service-name] [flags]
Examples:
otto-stack web-interfacesShow all web interfaces for running services
otto-stack web-interfaces localstackShow interfaces for specific service
otto-stack web-interfaces --allShow interfaces for all enabled services
Flags:
--all(bool): Show interfaces for all enabled services, even if not running (default:false)
services
List available services by category
List all available services organized by category (database, cache, messaging, observability, cloud). Shows service descriptions and dependencies for easy discovery and selection.
Usage: otto-stack services [flags]
Examples:
otto-stack servicesList all services grouped by category
otto-stack services --category databaseList services in database category
otto-stack services --category cacheList cache services
otto-stack services --format tableList services in table format
Flags:
--category(string): Show services in specific category (default: ``) (options:database,cache,messaging,observability,cloud)--format(string): Output format (group|table|json|yaml) (default:group) (options:group,table,json,yaml)
Related Commands:
deps,
conflicts,
init
deps
Show dependency information for enabled project services
Display full dependency information for services in your project stack. Shows required dependencies, soft dependencies, declared conflicts, and provided capabilities for each enabled service. Columns with no data are hidden automatically. Optionally filter to a specific service by name.
Usage: otto-stack deps [service]
Examples:
otto-stack depsShow dependency info for all enabled services
otto-stack deps postgresShow dependency info for a specific service
otto-stack deps kafkaShow what kafka requires and provides
Related Commands:
services,
conflicts,
up
conflicts
Detect service conflicts in the project stack
Analyze the enabled services in your project stack for conflicts. Checks declared service incompatibilities and shared capability overlaps. Use –check-ports to also verify that required host ports are available. Returns exit code 1 when conflicts are found, making it safe to use in scripts.
Usage: otto-stack conflicts [--check-ports]
Examples:
otto-stack conflictsCheck for semantic conflicts in the project stack
otto-stack conflicts --check-portsAlso check if required ports are available on the host
otto-stack conflicts && otto-stack upFail fast if conflicts exist before starting services
Flags:
--check-ports(bool): Also check if required service ports are available on the host (default:false)
Related Commands:
services,
deps,
up
validate
Validate project configuration and service definitions
Validate the otto-stack project configuration, project name, and service definitions. Checks configuration syntax, validates that all enabled services exist in the catalog, and resolves their dependencies.
With –strict, also verifies that Docker is available and warns when the project is not inside a git repository.
Usage: otto-stack validate
Examples:
otto-stack validateValidate configuration and service definitions
otto-stack validate --strictAlso check Docker availability and git repository
Flags:
--strict(bool): Also check Docker availability and git repository (default:false)
Related Commands:
doctor,
deps
version
Show version information
Display version information for otto-stack including build details, Git commit, and platform information. Can check for available updates.
Usage: otto-stack version
Examples:
otto-stack versionShow basic version information
otto-stack version --fullShow detailed build information
otto-stack version --check-updatesCheck for available updates
Flags:
--full(bool): Show detailed version information (default:false)--check-updates(bool): Check for available updates (default:false)--format(string): Output format (text, json, yaml) (default:text)