Skip to content

Releases: Dokploy/dokploy

v0.30.2

Choose a tag to compare

@github-actions github-actions released this 18 Aug 21:40

What's Changed

  • fix(github-webhook): apply preview limit only to new previews by @NoiceHax in #5079
  • fix: don't quote .env values for stack deploys by @Siumauricio in #5125

Full Changelog: v0.30.1...v0.30.2

v0.30.1

Choose a tag to compare

@github-actions github-actions released this 18 Aug 21:01

What's Changed

  • fix: assign tags created from the project dialog by @andwati in #5118
  • fix: correct switch thumb translate-x for checked state by @Siumauricio in #5121
  • fix: sync terminal size with backend PTY (fixes #5092) by @Siumauricio in #5104
  • fix: prevent Postgres 100-arg limit crash and restore data parity for restricted-member project access by @shuv-o in #5103

Full Changelog: v0.30.0...v0.30.1

v0.30.0

Choose a tag to compare

@github-actions github-actions released this 14 Aug 16:20
e541308

Features

Network Management

Docker networks now have a full management UI instead of only being reachable through the CLI. From the Networks tab in the Docker dashboard you can create, inspect, and delete bridge or overlay networks per server, with MTU, internal/attachable flags, IPv4/IPv6, and custom IPAM (subnet/gateway/IP range) exposed in the creation form.

14-networks-list

15-network-create

Networks also attach per-service now. Every application and compose service joins the shared dokploy-network by default — you can detach it and attach only the networks that service actually needs, applied on the next deploy. This is also why Isolated Deployment is deprecated: it's still available in Compose's advanced settings, but attaching/detaching networks per service covers the same use case declaratively, without breaking on restarts.

16-network-assign-service

DNS Provider Integration

You can now connect Cloudflare or AWS Route53 and let Dokploy manage DNS records for your domains directly. When you add a domain, Dokploy creates the record for you instead of making you switch tabs and wait for propagation to find out whether you typed it correctly. Apex domains are handled too — @ resolves to the zone's apex automatically.

04-dns-provider

Vault Providers for Environment Secrets

Environment variables can now be resolved at deploy time from an external secret manager, using a unified reference syntax: DATABASE_PASSWORD=${{vault.production.db_password}}. The value is never stored in Dokploy — it's fetched from your provider when the deployment runs, so rotating a secret in the vault takes effect on the next deploy with no changes on the Dokploy side. Supported providers: HashiCorp Vault/OpenBao, Infisical, AWS Secrets Manager, Doppler, and Scaleway Secret Manager.

05-vault-providers

Concurrent Builds

For the first two years, Dokploy used a single global build queue across every server. Each server now has its own dedicated queue.

17-concurrent-builds

Unified Docker Dashboard

Docker management used to be spread across separate pages. /dashboard/docker is now a single hub: Containers, Volumes, Networks, Events, Images, Disk Usage, Health, and Swarm, all under one set of tabs.

01-docker-dashboard

Volumes now has a built-in file explorer, so you can browse volume contents without SSH-ing into the server.

02-volume-explorer

Images shows every image on the host with size and age, so you can spot the ones worth pruning before reaching for docker system prune.

10-docker-images

Events streams what the Docker daemon reports in real time — container starts/stops, image pulls, network connects — filterable and paginated.

11-docker-events

Disk Usage breaks down images, containers, volumes, and build cache with reclaimable space called out for each.

12-docker-disk-usage

Health runs a read-only diagnostic over SSH — inotify limits, disk, memory/CPU reservations, per-network IP usage — the same checks we used to walk people through manually when a deploy mysteriously stalled.

13-docker-health

Overview Dashboard

Projects now open to an overview page that summarizes Services, Backups, and Domains at a glance, with Deployments moved into its own tab.

03-overview-dashboard

SCIM 2.0 Provisioning (Enterprise)

Users and groups now sync automatically from your identity provider, so deprovisioning in Okta or Entra deprovisions in Dokploy. SCIM-provisioned users also link correctly through SSO now, and sign-in errors surface instead of failing silently.

06-scim-provisioning

Session Management

A new page lists your active sessions and lets you revoke them individually — useful if you've logged in from a machine you no longer control.

07-session-management

Passkey Support

You can now sign in without a password using your device's biometrics, security key, or password manager. Add a passkey from Settings → Profile, and it shows up right on the login screen as a "Sign in with Passkey" option alongside email/password and SSO.

18-passkey-support

Default Organization Role

Admins can set a default role that's applied automatically to new members joining an organization, instead of remembering to downgrade every invite after the fact.

08-default-org-role

Domain Enable/Disable Toggle

Domains can now be disabled without deleting them. The route comes out of Traefik but the configuration stays intact, so you can pull a domain temporarily and bring it back without re-entering certificates, paths, and middleware.

09-domain-toggle

Bug Fixes

A few fixes worth calling out on their own:

  • Command injection via compose domain serviceName — a crafted service name could escape into the host shell.
  • SSRF via Route53 endpoint override — the endpoint override has been removed.
  • Traefik updated from v3.6.7 to v3.6.25, pulling in upstream security patches.
  • Postgres 100-argument limit was breaking rollback, schedule, port, and volume backup lookups on instances with enough rows — fixed.
  • Backups ran the database dump twice per backup and could leave partial uploads behind on failure — now runs once and cleans up after itself.
  • MySQL/MariaDB restores could target the wrong database because USE/CREATE DATABASE statements in the dump overrode the selected one — now stripped.
  • Docker cleanup could hang silently on a false-positive busy-wait match.

This is in addition to the security batch shipped in v0.29.13 (~16 command-injection and cross-org IDOR fixes) and v0.29.14 (20 backported fixes) — if you're upgrading straight from v0.29.0 or skipped those patch releases, v0.30.0 covers all of it.

What's Changed

  • fix(ui): add cursor pointer style for buttons by @steadexe in #4890
  • fix: prevent environment form from resetting while editing by @veksen in #4626
  • Feat/add network management by @Siumauricio in #3774
  • fix(ui): make interactive icons inside badges clickable again by @narcisonunez in #4929
  • chore: remove leftover Redis infrastructure code by @Siumauricio in #4930
  • fix: avoid postgres 100-argument limit in findRollbackById by @dmtrTm in #4924
  • fix: avoid postgres 100-argument limit in schedule, volume backup and port queries by @Siumauricio in #4931
  • feat(icon): enhance icon management for services by @Siumauricio in #4932
  • fix(domains): don't render CDN info message as an error in DNS tooltip by @AbiRaditya in #4911
  • fix(ui): persist trigger type selection in GitHub provider forms by @narcisonunez in #4937
  • fix(ui): resolve unclickable watch path removal button by @imrja8 in #4782
  • fix(ui): prevent collapsed avatar clipping by @azizbecha in #4948
  • fix(ui): scope deployment delete loading by @azizbecha in #4947
  • fix(ui): keep dropdown menus open on window blur by @Siumauricio in #4953
  • fix(ui): show real status code on error page by @Siumauricio in #4954
  • fix(preview-deployment): refetch github provider before authenticating by @CyrilBIENNE in #4933
  • fix(schedule): return deployment metadata from runManually and fail early on missing container by @Siumauricio in ...
Read more

v0.29.14

Choose a tag to compare

@github-actions github-actions released this 06 Aug 06:08
75448f3

What's Changed

Patch release with bug fixes only — no new features.

  • fix(ui): add cursor pointer style for buttons by @steadexe in #4890
  • fix: prevent environment form from resetting while editing by @veksen in #4626
  • fix(ui): make interactive icons inside badges clickable again by @narcisonunez in #4929
  • fix: avoid postgres 100-argument limit in findRollbackById by @dmtrTm in #4924
  • fix: avoid postgres 100-argument limit in schedule, volume backup and port queries by @Siumauricio in #4931
  • fix(domains): don't render CDN info message as an error in DNS tooltip by @AbiRaditya in #4911
  • fix(ui): persist trigger type selection in GitHub provider forms by @narcisonunez in #4937
  • fix(ui): resolve unclickable watch path removal button by @imrja8 in #4782
  • fix(ui): prevent collapsed avatar clipping by @azizbecha in #4948
  • fix(ui): scope deployment delete loading by @azizbecha in #4947
  • fix(ui): keep dropdown menus open on window blur by @Siumauricio in #4953
  • fix(ui): show real status code on error page by @Siumauricio in #4954
  • fix(preview-deployment): refetch github provider before authenticating by @CyrilBIENNE in #4933
  • fix(schedule): return deployment metadata from runManually and fail early on missing container by @Siumauricio in #4955
  • fix(application): remove preview deployments when deleting an application by @Siumauricio in #4959
  • fix: invalidate railpack build cache when env changes by @rnkp755 in #4557
  • fix: resolve environment variables on application rollback by @dmtrTm in #4923
  • fix(requests): guard RequestHost before filtering to avoid crash on malformed logs by @narcisonunez in #4966
  • fix(ui): widen restore backup dialog to match other backup dialogs by @Siumauricio in #4971
  • fix(webhook): include added and removed files in watchPaths validation by @rifatdinc in #4772
  • fix(schedule): mark cloud-restricted schedule deployments as error instead of leaving them running by @Siumauricio

New Contributors

Full Changelog: v0.29.13...v0.29.14

v0.29.13

Choose a tag to compare

@github-actions github-actions released this 21 Jul 16:08
8b868c6

What's Changed

  • fix: validate API key name length to prevent opaque 500 by @tanaymishra in #4806
  • fix(compose): preserve named-volume access mode when adding suffix by @Siumauricio in #4823
  • fix(ui): disambiguate repos with the same name in the repository selector by @Siumauricio in #4826
  • fix(settings): allow clearing the server domain by @Siumauricio in #4825
  • fix(ui): typos by @EvanSchleret in #4800
  • fix(security): OS command injection in git clone across all providers by @Siumauricio in #4855
  • fix(security): git provider credential disclosure via cross-org IDOR (.one endpoints) by @Siumauricio in #4856
  • fix(security): SSH private key disclosure via server read endpoints by @Siumauricio in #4857
  • fix(security): cross-org IDOR + nodeId injection in swarm read endpoints by @Siumauricio in #4858
  • fix(security): git provider secret disclosure via application.one by @Siumauricio in #4859
  • fix(security): OS command injection in docker build/pull commands by @Siumauricio in #4860
  • fix(security): OS command injection via dockerImage in database service deploys by @Siumauricio in #4861
  • fix(security): OS command injection in database backup/restore commands by @Siumauricio in #4862
  • fix(security): OS command injection via compose path and custom command by @Siumauricio in #4863
  • fix(security): OS command injection via swarm nodeId and registry tag by @Siumauricio in #4864
  • fix(security): missing authorization on docker/terminal WebSocket handlers (member -> root) by @Siumauricio in #4865
  • fix(security): host-schedule owner/admin bypass via applicationId (member → root) by @Siumauricio in #4869
  • fix(security): missing authorization on GitHub App setup callback (unauth cross-org write) by @Siumauricio in #4870
  • refactor(providers): inline quote() in git clone commands, drop shellWord helper by @Siumauricio in #4871
  • fix(security): escape user-controlled values across command-injection sinks (quote sweep) by @Siumauricio in #4873
  • fix(security): command injection in registry.testRegistry / testRegistryById by @Siumauricio in #4875
  • fix(security): cross-org authorization bypass in server.remove by @Siumauricio in #4874
  • fix(ui): organization menu clipped when sidebar is collapsed by @Siumauricio in #4876
  • fix(2fa): show correct error message for invalid TOTP code by @Siumauricio in #4877
  • fix: rename compose "Reload" action to "Rebuild" by @ANSUJKMEHER in #4847
  • fix(auth): enable email verification for SSO and user creation by @Siumauricio in #4880
  • feat(ai): allow organizations to define custom AI provider presets by @Siumauricio in #4882

New Contributors

Full Changelog: v0.29.12...v0.29.13

v0.29.12

Choose a tag to compare

@github-actions github-actions released this 13 Jul 10:44
9142127

What's Changed

  • fix(ui): adjust button container to grid layout to prevent overflow in 2FA screen by @juanjk24 in #4786
  • feat: encrypt environment variables at rest with AES-256-GCM by @Siumauricio in #4789
  • feat: export full keyring in backup encryption key file by @Siumauricio in #4814

New Contributors

Full Changelog: v0.29.11...v0.29.12

v0.29.11

Choose a tag to compare

@github-actions github-actions released this 09 Jul 09:09

What's Changed

New Contributors

Full Changelog: v0.29.10...v0.29.11

v0.29.10

Choose a tag to compare

@github-actions github-actions released this 06 Jul 09:52

What's Changed

New Contributors

Full Changelog: v0.29.9...v0.29.10

v0.29.9

Choose a tag to compare

@github-actions github-actions released this 06 Jul 06:00
2440e8f

Build Concurrency 🚀

For the last 2 years, Dokploy has used a single global queue for all builds. Starting with this release, each server now has its own dedicated queue, with support for up to 2 concurrent builds per server default is 1 (unlimited on Enterprise).

This means faster deployments, less waiting, and better resource utilization across your infrastructure. We hope this change helps everyone ship faster!

Breaking Changes

  • ⚠️ Enterprise users with White Labeling:** The white labeling CSS was updated (Tailwind v4 migration), so your custom colors may render differently after this update. Review and re-adjust your branding colors if needed. you can reset the colors to default and then adjust accordingly to your palette colors.

What's Changed

  • refactor: unify server admin tools into dashboard pages with server selector by @Siumauricio in #4625
  • Feat/concurrent deployments in memory queue by @Siumauricio in #4645
  • fix: resolve server from parent entity in deployment.readLogs by @elijahdev0 in #4689
  • feat: enhance TLS certificate selection UI in AddDomain component by @Siumauricio in #4705
  • fix: add method="post" to auth forms to prevent credential leak in URL by @vikyw89 in #4683
  • Feat/tailwind v4 shadcn update by @Siumauricio in #4706
  • feat: add claim mapping functionality to OIDC registration dialog by @Siumauricio in #4712
  • fix: allow members with git providers permission to create/delete their own providers by @Siumauricio in #4713
  • prevent social icons from overlapping in onboarding layout by @Phoenix1808 in #4692
  • fix(registry): preserve username case for ECR compatibility by @rafaumeu in #4647
  • fix: don't let ssh-keyscan abort SSH git clones by @weibeu in #4605
  • fix(validation): allow hashtag in git branch names by @Siumauricio in #4714
  • fix: prevent request path truncation in request logs by @Siumauricio in #4643
  • fix: resolve traefik container dynamically in access-log cleanup (swarm mode) by @Siumauricio in #4646
  • fix: use github owner login for webhook deploy matching by @agentHits in #4674
  • fix(server-setup): report the installed Docker version in the setup banner by @ioanbeilic in #4723
  • fix(domain): validate hostname format to reject invalid characters by @Siumauricio in #4729
  • fix: reduce SSR payload size by scoping user.get columns by @Siumauricio in #4730
  • fix(projects): make project cards grid fill available width by @Siumauricio in #4731
  • fix(ai): use nullable instead of optional for configFiles in AI suggestion schema by @Siumauricio in #4732
  • fix(deployment): resolve schedule to its service before permission check in allByType by @Siumauricio in #4733
  • fix(databases): update default Redis version from 7 to 8 by @GuillaumeLecomte1 in #4224
  • feat(databases): add copy button to User and Database Name fields by @Siumauricio in #4735
  • fix(ai): allow configFiles to be null in template generator Details type by @Siumauricio in #4736
  • fix(backup): redact S3 credentials from logs and error output by @rafaumeu in #4648
  • fix(ai): allow Ollama Cloud API key in AI settings by @VincentEmmanuel in #4262

New Contributors

Full Changelog: v0.29.8...v0.29.9

v0.29.8

Choose a tag to compare

@github-actions github-actions released this 08 Jun 15:29
1f4f940

What's Changed

  • 🚀 Release v0.29.6 by @github-actions[bot] in #4514
  • fix: scope dokploy-server schedules to organization instead of user by @Siumauricio in #4526
  • Feat/forward auth sso by @Siumauricio in #4555
  • fix: swarm health check fields not resetting to default values by @Siumauricio in #4558
  • fix: add docker cleanup toggle to remote server creation by @Siumauricio in #4559
  • fix: use stop-first update order for database services by @Siumauricio in #4560
  • fix: respect gitProviders permissions in git provider UI by @Siumauricio in #4561
  • fix: strip credentials from service-level API responses by @Siumauricio in #4564
  • refactor: improve restore logging for database backups by @Siumauricio in #4566
  • fix: use swarm advertise address in docker swarm join command by @Siumauricio in #4567
  • fix: enforce docker:read on container start/stop/kill/restart mutations by @Siumauricio in #4568
  • fix: strip credentials from gitProvider.getAll API response by @Siumauricio in #4569
  • fix: correct git provider access check for existing deploys by @Siumauricio in #4570
  • fix: prevent registry password from appearing in error messages and shell commands by @Siumauricio in #4579

Full Changelog: v0.29.6...v0.29.8