Skip to content

Changelog

  • Two builds starting at the same time no longer collide.
  • Dashboard: disk usage on the server’s stats page.
  • Deploy without GitHub. disco deploy --dir . sends the files of a directory to your server and deploys them.
  • Projects get a domain by default. disco projects:add without --domain gives the project <name>.<your server host>, through a wildcard DNS record every Disco-provided host has. Use --no-domain for workers and other services that do not serve HTTP.
  • Moving a project between servers works again
  • ZeroSSL fallback. When Let’s Encrypt refuses or fails, Caddy falls back to ZeroSSL instead of leaving a domain without a certificate.
  • Daemon upgrades can be retried.
  • Dashboard uses a better shell. The browser terminal starts bash where it exists, with tab completion and history.
  • disco projects:info shows a project’s repository, branch and domains; disco projects:update changes the repository or branch of an existing project.
  • Remove several environment variables in one go. disco env:remove A B C takes several names, and disco env:set accepts --remove NAME (repeatable) to set and remove variables in the same deployment.
  • disco run reports errors cleanly and returns the right exit code.
  • Daily clean-up of leftover Docker Swarm networks
  • Dependency updates (FastAPI, JWT) with the fixes they needed.
  • Dashboard: log destinations page. See, add and remove syslog destinations for a server without the CLI.
  • Interactive shell. Run an interactive shell session in your project’s container with disco run, or from the dashboard.
  • Gzip and zstd compression. Responses are now automatically compressed.
  • External Docker registries. Use images from external registries without requiring Disco to build them.
  • Fix: 502 on the first request after a deployment.
  • Log filtering. Filter deployment and runtime logs by search term in the dashboard.
  • Provisioned domains. New projects automatically get a subdomain provisioned for them when using the dashboard.
  • Stale deployment cleanup. Orphaned deployment containers are now automatically cleaned up on daemon startup.
  • Better deployment cancelling. Cancel stuck deployments even after a server reboot.
  • Extra Swarm parameters. Advanced users can pass custom Docker Swarm service parameters via extraSwarmParams in disco.json.
  • Upgrade daemon from dashboard. Check for updates and upgrade the daemon directly from the web UI without SSH.
  • Command palette search. Press Cmd+K to search across projects, servers, and actions from anywhere in the dashboard.
  • Dark mode. The dashboard now respects system color scheme preferences.
  • Zero downtime deploys. Deployments now wait for DNS propagation and port availability before routing traffic, eliminating brief 502 errors on new deploys.
  • Better deployment timeout feedback. When a service fails to start, the output now shows which port was being waited on and for how long.
  • DNS verification before routing. Traffic is only sent to new services after both internal DNS resolution and port checks pass.
  • Docker log rotation. Container logs are now automatically rotated to prevent disk exhaustion on long-running services.
  • Disk usage in stats. The disco stats command now includes disk usage alongside CPU and memory.
  • Cron timeout configuration. Set custom timeouts for cron jobs via cronTimeout in disco.json.
  • Volume import through Cloudflare. Fixed volume imports failing when the server is behind a Cloudflare tunnel.
  • Automatic Docker build cache pruning. Build cache is now cleared daily to prevent disk from filling up.
  • Health checks. Services can now define health check endpoints in disco.json, used to verify readiness before routing traffic.
  • Domain validation. Domain names are now validated before being added to prevent typos and invalid configurations.
  • Services panel. The dashboard now shows all running services for a project with their status and scale.
  • SSH keys with passphrases. disco init now supports SSH identity files that require a passphrase.
  • Volume export improvements. Better handling when exporting to terminal vs file, with clearer output messaging.
  • Multi-node cluster support. Add and remove nodes from your swarm via CLI (disco nodes:add, disco nodes:remove, disco nodes:list), with proper draining before removal.
  • Custom disco.json path. Set discoJsonPath in disco.json to point to your actual config file, helpful for monorepos.
  • Search in log viewer. Search within deployment and runtime logs in the web dashboard.
  • Real-time dashboard updates. The dashboard now receives live updates via server-sent events when deployments finish, env vars change, or domains are added.
  • Stats command. New disco stats command shows CPU, memory, and network usage for all running services.
  • Service scale persistence. Scale settings are now remembered across deployments instead of resetting to 1.
  • Better error reporting. Command run failures now include the actual error output instead of generic messages.
  • Cancel deployments. Stop a running deployment with disco deploy:cancel or from the dashboard.
  • Deployment hooks. New hook:deploy:start:after runs after the service starts but before traffic is routed.
  • Postgres version selection. Specify which Postgres version to use when creating instances with --version.
  • Deployment number env var. DISCO_DEPLOYMENT_NUMBER is now available in your service environment.
  • List servers. New disco discos:list command shows all configured Disco servers.
  • Custom SSH identity file. Specify which SSH key to use during init with --identity-file.
  • Async deployment flow. Deployments are now fully async internally, improving reliability under load.
  • JWT authentication. The API now supports JWT Bearer tokens in addition to API keys.
  • CORS configuration. Set allowed origins for cross-origin requests to the API.
  • Easy mode. Simpler disco.json format that auto-detects your framework and generates the Dockerfile, just set type: easy and optionally a build command.
  • SSH tunnels. Access internal Postgres securely via disco postgres:tunnel.
  • Cloudflare Tunnel support. Run Disco behind a Cloudflare Tunnel with disco init --cloudflare-tunnel.
  • .env as build secret. Environment variables are now available during Docker builds as a secret at /run/secrets/.env.
  • Generator services. New service type that runs once during deployment to generate static files.
  • Branch tracking. Projects can now track a specific branch instead of always deploying the default branch.
  • Postgres addon. Managed Postgres with disco postgres:addon:install, including database creation, user management, and per-project attachment.
  • Domain management API. Add, remove, and list domains programmatically via the API and CLI.
  • GitHub Apps integration. Connect repos via GitHub Apps instead of deploy keys for better security and easier setup.
  • Volume scoping. Volumes are now scoped to projects, preventing accidental cross-project access.
  • API key usage tracking. See when each API key was last used to help identify unused keys.
  • Cron jobs. Schedule recurring tasks in disco.json with standard cron syntax, replacing the need for a separate worker.
  • API key invites. Generate invite links to let teammates add their own API keys without sharing credentials.
  • Volume import/export. Move data between servers with disco volumes:export and disco volumes:import.
  • GitHub webhook secrets. Webhook signatures are now verified to prevent unauthorized deployment triggers.
  • Flexible init command. Rewritten disco init supports Raspberry Pi, AWS EC2, and custom SSH configurations.
  • Initial release. Core deployment engine with Docker Swarm, Caddy reverse proxy, and GitHub webhooks.
  • Multi-service projects. Run multiple services (web, worker, etc.) from a single disco.json.
  • Volumes. Persistent storage that survives deployments, with attach/detach support.
  • Environment variables. Set and manage env vars per project via the API.
  • Log streaming. Tail logs from any service with filtering by project and service name.
  • External syslog. Forward container logs to external syslog servers for aggregation.
  • Run commands. Execute one-off commands in your project’s container with disco run.
  • Project deletion. Remove projects cleanly, including their containers, networks, and Caddy config.
  • FastAPI migration. Rewrote the daemon from Pyramid to FastAPI for better async support and performance.
  • Server-sent events for logs. Replaced websockets with SSE for more reliable log streaming.
  • Build output streaming. Deployment logs now stream in real-time instead of appearing all at once.
  • Static site support. Deploy static sites with automatic builds via type: static in disco.json.
  • Node scaling. Scale services across multiple nodes with disco scale:set.
  • Docker registry support. Push images to a private registry for multi-node deployments.
  • Pre-deploy hooks. Run commands before deployment starts with hook:deploy:start:before.
  • Better deployment output. Live streaming of build logs with clearer error messages when services fail to start.