# Changelog

## 0.33.0

##### September 15, 2026

* **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.

## 0.32.0

##### August 21, 2026

* **`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**

## 0.31.3

##### May 10, 2026

* **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.

## 0.31.0

##### January 30, 2026

* **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.

## 0.27.0

##### November 22, 2025

* **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.

## 0.26.1

##### October 27, 2025

* **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.

## 0.26.0

##### May 9, 2025

* **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.

## 0.25.0

##### April 23, 2025

* **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.

## 0.23.1

##### March 11, 2025

* **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.

## 0.21.0

##### February 15, 2025

* **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.

## 0.18.4

##### January 20, 2025

* **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.

## 0.17.0

##### August 20, 2024

* **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.

## 0.16.0

##### June 20, 2024

* **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.

## 0.11.0

##### May 18, 2024

* **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.

## 0.5.0

##### April 25, 2024

* **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.

## 0.2.1

##### March 24, 2024

* **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.