Skip to content

fix: count only physical disks in host Block I/O stats - #5540

Merged
narcisonunez merged 2 commits into
Dokploy:canaryfrom
Souvik-Cyclic:fix/disk-io-overcount-5513
Sep 29, 2026
Merged

narcisonunez merged 2 commits into
Dokploy:canaryfrom
Souvik-Cyclic:fix/disk-io-overcount-5513

Conversation

@Souvik-Cyclic

@Souvik-Cyclic Souvik-Cyclic commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

What is this PR about?

The host Block I/O card sums every row of /proc/diskstats except loop, ram, sr and fd. Partitions and stacked devices (md*, dm-*) report the same I/O as the disks underneath them, so each write is counted several times: twice on a plain disk with partitions (#5385), and up to 5x on an mdadm RAID1 host where it lands on the array, both mirror disks and both mirror partitions (#5513). LVM/LUKS setups hit the same problem through dm-* devices. zram swap devices were also counted, since /^ram/ doesn't match them.

This adds an isPhysicalDisk() helper that skips partitions (sda1, nvme0n1p2, mmcblk0p1, vda1, xvda1), md/dm devices (including partitioned arrays such as md0p1) and virtual devices (now including zram), so the card reports physical disk I/O with each byte counted once. Unknown device types are still counted, as before.

Verified with new tests in apps/dokploy/__test__/monitoring/is-physical-disk.test.ts, including the device list from #5513, which now counts only nvme0n1 and nvme1n1, and a getHostSystemStats() test that checks the summed BlockIO total. Also checked on a local host: getHostSystemStats() reported 72.48 GiB written on canary (disk + partitions + zram) and 32.15 GiB with this change, matching /proc/diskstats for the physical disk exactly.

Checklist

Before submitting this PR, please make sure that:

Issues related (if applicable)

closes #5513
closes #5385

Screenshots (if applicable)

N/A - covered by unit tests and a local host comparison against /proc/diskstats.

RetriggerConfidence Score: 5/5

The PR appears safe to merge; no outstanding findings or new actionable issues were identified.

Summary

The PR filters partitions, stacked devices, and virtual devices from host Block I/O totals. Since the previous review, it also excludes md array partitions and adds a test of the resulting byte total.

Reviews (2) · Last reviewed commit: "fix: skip partitioned md arrays and test..."

Comment thread packages/server/src/monitoring/utils.ts Resolved
@Souvik-Cyclic

Copy link
Copy Markdown
Contributor Author

@greptileai review

/^(md|dm-)/,
];

export const isPhysicalDisk = (device: string) =>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to extract this helper functions when is not being used anywhere else. Just to keep in mind

@narcisonunez
narcisonunez merged commit 0d3a396 into Dokploy:canary Sep 29, 2026
5 checks passed
@Souvik-Cyclic
Souvik-Cyclic deleted the fix/disk-io-overcount-5513 branch September 29, 2026 15:55
cursor Bot pushed a commit to hewr-srood/dokploy that referenced this pull request Oct 5, 2026
* fix: count only physical disks in host Block I/O stats and skip partitioned md arrays and test the Block I/O sum
rossreicks pushed a commit to rossreicks/dokploy-community that referenced this pull request Oct 11, 2026
* fix: count only physical disks in host Block I/O stats and skip partitioned md arrays and test the Block I/O sum
github-actions Bot pushed a commit to Bl4ckBl1zZ/dokploy that referenced this pull request Oct 12, 2026
# [0.42.0](v0.41.1...v0.42.0) (2026-10-12)

### Bug Fixes

* accept deploy webhook payloads up to 25 MB ([4396451](4396451))
* account for all style end-tag variants like </style/> ([13bb1ac](13bb1ac))
* account for whitespace in style tag regex to prevent XSS ([5606a2b](5606a2b))
* add clipboard addon to docker container terminal ([65198f6](65198f6)), closes [Dokploy#5065](https://github.com/Bl4ckBl1zZ/dokploy/issues/5065)
* add createEnvFile toggle to Compose, mirroring Application ([5c862f7](5c862f7))
* add env -i PATH prefix to fresh volumes down command ([c668f6c](c668f6c))
* add sourceType to apiCreateCompose and apiCreateApplication ([30c408b](30c408b))
* add unzip to arch server set up ([f21931d](f21931d))
* address PR feedback (SVG helper & AddOrganization crash) ([4877c4f](4877c4f))
* allow docker compose command chaining ([ac57e22](ac57e22))
* allow Option/Alt composed characters in terminals on macOS ([b203489](b203489))
* **api:** configurable body size limits for OpenAPI catch-all route ([d11735d](d11735d))
* **api:** reject non-integer body size env vars ([529f54e](529f54e))
* **api:** validate OpenAPI body size limits against Greptile findings ([8144e1a](8144e1a))
* **application:** remove preview deployments when deleting an application ([f6b0700](f6b0700))
* apply compose file patches in preview and domain injection ([bc935ae](bc935ae))
* apply watch path negations as a pattern set ([abc2439](abc2439))
* assign tags created from the project dialog ([0ea7de7](0ea7de7)), closes [Dokploy#5117](https://github.com/Bl4ckBl1zZ/dokploy/issues/5117)
* **auth:** block passkey authentication and email signup when SSO is enforced ([5f10ed6](5f10ed6))
* **auth:** enforce SSO on server-side sign-in endpoints ([b839e6d](b839e6d)), closes [Dokploy#5288](https://github.com/Bl4ckBl1zZ/dokploy/issues/5288)
* **auth:** enforce SSO on server-side sign-in endpoints ([Dokploy#5291](https://github.com/Bl4ckBl1zZ/dokploy/issues/5291)) ([5c0d3b8](5c0d3b8)), closes [Dokploy#5288](https://github.com/Bl4ckBl1zZ/dokploy/issues/5288)
* **auth:** link SCIM-provisioned users through SSO and surface sign-in errors ([a1a672b](a1a672b)), closes [Dokploy#4973](https://github.com/Bl4ckBl1zZ/dokploy/issues/4973)
* **auth:** prefetch SSO state in SSR to prevent layout flash ([9cae609](9cae609))
* **billing:** allow switching billing interval during trial ([c453ac3](c453ac3))
* **billing:** one reminder at 1 day, guarded by an advisory lock ([0372304](0372304))
* **billing:** pick a plan for the trial and warn before it expires ([95b2712](95b2712))
* **billing:** stop the reminder claim from rewriting stale metadata ([14e0597](14e0597))
* **billing:** update server inclusion descriptions for clarity ([e369541](e369541))
* **build:** exclude CLI-only auth config from server dist build ([d92de5a](d92de5a))
* **ci:** create release tags on the pushed commit instead of default branch ([98af5a2](98af5a2))
* **ci:** create release tags on the pushed commit instead of default branch ([472ebed](472ebed))
* **ci:** deploy postgres/mongo instead of start ([2643ae0](2643ae0))
* **ci:** generate OpenAPI spec from the release commit in sync-version ([ff9fa74](ff9fa74))
* **ci:** handle both old (flat) and new (nested) project.create response formats ([f29a1a1](f29a1a1))
* **ci:** pin pnpm and strip v prefix in sync-version job ([b6190ff](b6190ff))
* **ci:** push hotfix cherry-picks with PAT to satisfy branch rules ([06b67d4](06b67d4))
* **ci:** raise floor to v0.29.4, require environmentId from project.create ([f59f114](f59f114))
* **ci:** run dokploy install.sh as root, install version A directly via DOKPLOY_VERSION ([ade7a79](ade7a79))
* clear stale stack log container selection ([c77f6d8](c77f6d8))
* close terminal websocket when local container shell exits ([1053743](1053743))
* **cloud:** load HubSpot chat widget for startup plan users ([c231c29](c231c29))
* **cloud:** remove HubSpot chat widget when dashboard unmounts ([382fdfc](382fdfc))
* **compose:** clean domain labels across services ([67fa8e4](67fa8e4))
* **compose:** clean up mapping domain labels ([f14f12c](f14f12c))
* **compose:** move Fresh Volumes into a Danger Zone with typed confirmation ([38d157a](38d157a))
* **compose:** Preserve raw remote mounts ([e43d99e](e43d99e)), closes [Dokploy#4794](https://github.com/Bl4ckBl1zZ/dokploy/issues/4794)
* **compose:** regenerate mapping domain labels ([5ceb88b](5ceb88b))
* **compose:** remove stale labels for disabled domains ([37c8d64](37c8d64))
* correct add-invitation form reset logic and select state ([143dfca](143dfca))
* correct log-tail server resolution, drop unrelated Networks gating ([95b1afc](95b1afc))
* correct network monitoring chart labels and units ([a822db5](a822db5)), closes [Dokploy#5115](https://github.com/Bl4ckBl1zZ/dokploy/issues/5115)
* correct switch thumb translate-x for checked state ([76c2416](76c2416)), closes [Dokploy#5120](https://github.com/Bl4ckBl1zZ/dokploy/issues/5120)
* count only physical disks in host Block I/O stats ([Dokploy#5540](https://github.com/Bl4ckBl1zZ/dokploy/issues/5540)) ([0d3a396](0d3a396))
* deploy monitoring as a swarm service instead of a standalone container ([Dokploy#5055](https://github.com/Bl4ckBl1zZ/dokploy/issues/5055)) ([3848fa9](3848fa9))
* **deps:** bump next to 16.3.4 to patch critical RCE advisories ([4cd4b83](4cd4b83))
* detect billing plan across all active Stripe subscriptions ([e79239a](e79239a))
* detect network delete/recreate by Docker ID during sync ([63efbff](63efbff)), closes [Dokploy#5179](https://github.com/Bl4ckBl1zZ/dokploy/issues/5179)
* disable delete/unlink user button while mutation is pending ([fee0071](fee0071)), closes [Dokploy#5063](https://github.com/Bl4ckBl1zZ/dokploy/issues/5063)
* disable minimumReleaseAge (broke builds on unrelated AWS SDK deps) ([9412b52](9412b52)), closes [Dokploy#4679](https://github.com/Bl4ckBl1zZ/dokploy/issues/4679)
* disable recharts animation on monitoring charts ([bd7fb8f](bd7fb8f))
* **dns:** apply content normalization in upsert match logic to prevent duplicates ([df0986b](df0986b))
* **dns:** do not report a restored OVH record as lost ([2311f34](2311f34)), closes [Dokploy#5258](https://github.com/Bl4ckBl1zZ/dokploy/issues/5258)
* **dns:** extract and normalize prio for porkbun MX/SRV records to prevent duplicates ([94cd503](94cd503))
* **dns:** fallback to data fields comparison for cloudflare structured SRV/CAA records ([ea1c6fc](ea1c6fc))
* **dns:** keep the record table on a valid page while filtering ([130be40](130be40))
* **dns:** match apex records stored under any apex spelling ([be4a5da](be4a5da)), closes [Dokploy#5257](https://github.com/Bl4ckBl1zZ/dokploy/issues/5257)
* **dns:** match record content in upsertRecord to prevent overwriting existing records ([91db4e6](91db4e6))
* **dns:** paginate the documented Infomaniak products endpoint ([59a7484](59a7484)), closes [Dokploy#5257](https://github.com/Bl4ckBl1zZ/dokploy/issues/5257)
* **dns:** preserve every value of a Route53 record set ([38e855b](38e855b))
* **dns:** report an OVH zone refresh failure for what it is ([28f71e7](28f71e7)), closes [Dokploy#5258](https://github.com/Bl4ckBl1zZ/dokploy/issues/5258)
* **dns:** represent the Infomaniak apex as a root dot ([2bc22c5](2bc22c5))
* **dns:** restore the original OVH record when a type change fails ([80a6baf](80a6baf)), closes [Dokploy#5258](https://github.com/Bl4ckBl1zZ/dokploy/issues/5258)
* **dns:** send SRV and CAA values to Cloudflare as structured data ([db2eb4f](db2eb4f))
* **dns:** spell out the OVH right that lists zones ([f83097b](f83097b)), closes [Dokploy#5258](https://github.com/Bl4ckBl1zZ/dokploy/issues/5258)
* docker cleanup hangs silently on false-positive busy-wait match ([Dokploy#5051](https://github.com/Bl4ckBl1zZ/dokploy/issues/5051)) ([34c5b68](34c5b68)), closes [Dokploy#5044](https://github.com/Bl4ckBl1zZ/dokploy/issues/5044)
* domain validation false negative on servers with multiple IPs ([9761616](9761616)), closes [Dokploy#4658](https://github.com/Bl4ckBl1zZ/dokploy/issues/4658)
* **domain:** allow single-label hostnames without a TLD ([5d231bf](5d231bf))
* **domains:** add status tooltip to table ([92b628c](92b628c))
* **domains:** don't fetch AddDomain queries until the dialog opens ([0f28775](0f28775)), closes [Dokploy#5279](https://github.com/Bl4ckBl1zZ/dokploy/issues/5279)
* **domains:** include server interface addresses in validation ([e79ed76](e79ed76))
* don't auto-run Health diagnostics on mount ([c741ff3](c741ff3))
* don't cancel schedule deployments running outside the panel process on restart ([Dokploy#5053](https://github.com/Bl4ckBl1zZ/dokploy/issues/5053)) ([f12ecc3](f12ecc3)), closes [Dokploy#4986](https://github.com/Bl4ckBl1zZ/dokploy/issues/4986)
* don't leak git provider secrets to non-owner org members ([a426140](a426140))
* don't quote .env values for stack deploys ([d183018](d183018)), closes [Dokploy#4694](https://github.com/Bl4ckBl1zZ/dokploy/issues/4694) [Dokploy#5096](https://github.com/Bl4ckBl1zZ/dokploy/issues/5096) [Dokploy#5110](https://github.com/Bl4ckBl1zZ/dokploy/issues/5110)
* **editor:** consistent YAML auto-indent on newline ([7ca96f6](7ca96f6)), closes [Dokploy#4650](https://github.com/Bl4ckBl1zZ/dokploy/issues/4650)
* eliminate FOUC for whitelabeling across all pages ([26d716b](26d716b))
* enable tailwindDirectives in biome css parser ([ae2edc7](ae2edc7))
* enhance error handling and directory management in updateFileMount function ([e4012d8](e4012d8))
* escape env values written to the Compose .env file so $, #, and quotes survive literally ([ff39cb5](ff39cb5))
* exclude node_modules/.next from biome scanner, bump to 2.5.7 ([dced797](dced797))
* Fix server card title overflow for responsiveness ([f904a7b](f904a7b))
* **github-webhook:** apply preview limit only to new previews ([98dbc59](98dbc59)), closes [Dokploy#4074](https://github.com/Bl4ckBl1zZ/dokploy/issues/4074)
* **gitlab:** handle missing expires_in in OAuth token response ([fc5b8d0](fc5b8d0)), closes [Dokploy#4362](https://github.com/Bl4ckBl1zZ/dokploy/issues/4362)
* honour metaName for page titles and show a loading state in requests ([6204415](6204415))
* improve mount path warning for PostgreSQL by handling multiple data mounts ([c0694eb](c0694eb))
* improve responsive layout for application logs page ([24cc455](24cc455))
* invalid replacement placeholder in redirect form ([Dokploy#5050](https://github.com/Bl4ckBl1zZ/dokploy/issues/5050)) ([3fbd67f](3fbd67f))
* invalidate railpack build cache when env changes ([7da9681](7da9681))
* keep native log container id in sync when Swarm/compose replaces it ([cf0e8d2](cf0e8d2)), closes [Dokploy#5134](https://github.com/Bl4ckBl1zZ/dokploy/issues/5134)
* kill deployment log tail when the client disconnects early ([7b89d1f](7b89d1f))
* **libsql:** validate appName like the other database kinds ([06b3bb2](06b3bb2))
* **lint:** clear Biome 2.5.7 errors inherited from upstream canary ([9e4c4ee](9e4c4ee))
* list stack containers across swarm nodes via docker stack ps ([1f73ebd](1f73ebd))
* lock sidebar-inset scroll while a modal is open ([dc9c671](dc9c671)), closes [Dokploy#5064](https://github.com/Bl4ckBl1zZ/dokploy/issues/5064)
* **logs:** don't classify explicit non-error key/values as error ([faf600b](faf600b)), closes [Dokploy#4538](https://github.com/Bl4ckBl1zZ/dokploy/issues/4538)
* **logs:** require complete no-error values in colon pairs ([60112d8](60112d8))
* **logs:** respect log level explicitly declared by structured loggers ([dc2fc40](dc2fc40))
* make fallback og image url absolute for social scrapers ([15bf663](15bf663))
* mark session cookie as Secure when served over HTTPS ([f5c21db](f5c21db)), closes [Dokploy#4709](https://github.com/Bl4ckBl1zZ/dokploy/issues/4709)
* mkdir parent dir before writing file mount updates ([3a8fad5](3a8fad5)), closes [Dokploy#5152](https://github.com/Bl4ckBl1zZ/dokploy/issues/5152)
* **monitoring:** remove legacy container and default empty cronJob ([bee6918](bee6918))
* normalize email argument before lookup in reset-password ([8db39a8](8db39a8))
* **notifications:** add missing newline to ntfy database backup message ([341f38b](341f38b))
* **notifications:** send server threshold alerts through email, resend, gotify and ntfy channels ([3638c7b](3638c7b))
* **notifications:** use real server name in remote threshold alerts ([e19dd43](e19dd43))
* only pin --project-directory when compose has mounts ([ec8e645](ec8e645)), closes [Dokploy#5181](https://github.com/Bl4ckBl1zZ/dokploy/issues/5181) [Dokploy#5230](https://github.com/Bl4ckBl1zZ/dokploy/issues/5230) [Dokploy#5242](https://github.com/Bl4ckBl1zZ/dokploy/issues/5242) [Dokploy#5235](https://github.com/Bl4ckBl1zZ/dokploy/issues/5235) [Dokploy#5230](https://github.com/Bl4ckBl1zZ/dokploy/issues/5230) [Dokploy#5242](https://github.com/Bl4ckBl1zZ/dokploy/issues/5242)
* only sum currentPriceAmount from the identified plan subscription ([3f6dfba](3f6dfba))
* open deployments tab when opening a service from the deployments list ([60ad782](60ad782))
* parse Block I/O and Network I/O stats to numeric MB so monitoring charts render ([b3e7a8a](b3e7a8a))
* parse deploy webhook bodies in the handler so the size limit can be configured ([1c6d333](1c6d333))
* pass timezone when removing repeatable schedule job ([4e38925](4e38925))
* persist serverThreshold for gotify/ntfy and guard teams dispatch ([4730807](4730807))
* pin traefik routing to the isolated network when isolated deployment is enabled ([a8c35f7](a8c35f7))
* preserve ${VAR} interpolation in .env files ([452b7aa](452b7aa)), closes [Dokploy#5151](https://github.com/Bl4ckBl1zZ/dokploy/issues/5151)
* preserve application status when saving provider settings ([0d6e984](0d6e984))
* preserve compose status when saving provider settings ([Dokploy#5544](https://github.com/Bl4ckBl1zZ/dokploy/issues/5544)) ([560e790](560e790))
* preserve parameter expansion (${VAR:-default}) in .env interpolation ([b67519e](b67519e))
* preserve selected log container on refetch ([d7c152a](d7c152a))
* preserve selected stack log container ([a5b8626](a5b8626))
* preserve server schedule failures through tee pipeline ([eb80f79](eb80f79))
* preserve stack log selection on fetch failures ([2221b8a](2221b8a))
* prevent deployment commit hash overflow on mobile ([d6ec4bd](d6ec4bd))
* prevent Postgres 100-argument limit crash and restore data parity for restricted-member project access ([2cb499f](2cb499f))
* prevent unsaved organization form fields from resetting on window focus ([f46cd46](f46cd46))
* **preview-deployment:** refetch github provider before authenticating ([30e8d9b](30e8d9b)), closes [Dokploy#4898](https://github.com/Bl4ckBl1zZ/dokploy/issues/4898)
* reap HEALTHCHECK zombies by running tini as PID 1 ([dec05ac](dec05ac))
* redact S3 credentials in backup logs regardless of shell quoting ([6215c7f](6215c7f))
* redact S3 credentials in backup logs regardless of shell quoting ([Dokploy#5527](https://github.com/Bl4ckBl1zZ/dokploy/issues/5527)) ([916bb50](916bb50))
* remove empty routers/services traefik config instead of writing invalid yaml ([032e804](032e804)), closes [Dokploy#5189](https://github.com/Bl4ckBl1zZ/dokploy/issues/5189)
* remove Route53 endpoint override and pin AWS SDK to an aged version ([02edd6a](02edd6a))
* replace metaTitle with ogImageUrl in reset payloads ([13b043e](13b043e))
* report remote-node containers correctly in stack monitoring ([0efe7fe](0efe7fe))
* **requests:** guard RequestHost before filtering to avoid crash on malformed logs ([314a31d](314a31d))
* reset stack log selection when switching modes ([60612b0](60612b0))
* resolve @ to the zone's apex domain before sending it to the provider ([37f0bba](37f0bba))
* resolve 6 critical Dependabot alerts ([1958969](1958969))
* resolve environment variables on application rollback ([2739690](2739690))
* resolve relative bind mounts against code dir for git-based compose deploys ([87b9149](87b9149)), closes [Dokploy#5181](https://github.com/Bl4ckBl1zZ/dokploy/issues/5181)
* resolve security vulnerabilities in whitelabeling ([6282b6e](6282b6e))
* resolve SVG unicode base64 encoding error and image upload race conditions ([8806d4e](8806d4e))
* **restore:** drop USE/CREATE DATABASE statements so mysql/mariadb restores target the selected database ([2505c34](2505c34))
* return a valid docker host for docker desktop ([3e11897](3e11897))
* run database dump once per backup and clean up partial uploads on failure ([f633d4b](f633d4b))
* run Railpack install with sudo during remote deploy ([679dbf9](679dbf9)), closes [Dokploy#5007](https://github.com/Bl4ckBl1zZ/dokploy/issues/5007)
* satisfy HttpRouter type in traefik config test ([22450ab](22450ab))
* **schedule:** return deployment metadata from runManually and fail early on missing container ([cbb3450](cbb3450))
* **security:** escape compose domain error message to prevent command injection ([a83b202](a83b202))
* **security:** update Traefik from v3.6.7 to v3.6.20 ([cee6742](cee6742))
* **security:** update Traefik to v3.6.25 ([36db6f5](36db6f5))
* **server-health:** detect custom default-address-pools via docker info ([ea3f9f3](ea3f9f3)), closes [Dokploy#5383](https://github.com/Bl4ckBl1zZ/dokploy/issues/5383)
* **server:** allow plus, at, and valid path characters in readValidDirectory ([bd8ba12](bd8ba12))
* **server:** sanitize sshd config values in security audit JSON output ([09ea766](09ea766))
* **setup:** use Docker 29.4.2 on Ubuntu 26.04 to fix install failure ([b9a8064](b9a8064)), closes [Dokploy#4327](https://github.com/Bl4ckBl1zZ/dokploy/issues/4327) [Dokploy#4349](https://github.com/Bl4ckBl1zZ/dokploy/issues/4349) [Dokploy#4501](https://github.com/Bl4ckBl1zZ/dokploy/issues/4501)
* sort imports in domain.ts (biome) ([286938b](286938b))
* **sso:** trust admin-configured SSO providers for account linking ([67f6890](67f6890)), closes [Dokploy#5099](https://github.com/Bl4ckBl1zZ/dokploy/issues/5099)
* strip git provider secrets from compose.one response ([6239073](6239073))
* surface native stack inspection failures ([49055a0](49055a0))
* surface the error state instead of "No results." when the log query fails ([7e9b77e](7e9b77e))
* sync pnpm-lock.yaml with nanoid 3.3.18 ([ad00669](ad00669))
* sync terminal size with backend PTY, avoid connecting with placeholder container ID ([ff275fe](ff275fe)), closes [Dokploy#5092](https://github.com/Bl4ckBl1zZ/dokploy/issues/5092) [xtermjs/xterm.js#5011](xtermjs/xterm.js#5011)
* **terminal:** prevent terminal from collapsing on zoom ([5c19d1b](5c19d1b))
* tooltip incorrectly lists volumes among Daily Cleanup targets ([4032895](4032895)), closes [Dokploy#3267](https://github.com/Bl4ckBl1zZ/dokploy/issues/3267)
* **traefik:** skip empty service reconnect ([ede4626](ede4626))
* **typecheck:** fix twoFactorRedirect typescript error ([f23b5b9](f23b5b9))
* **ui:** align close button in web server update modal ([0c19973](0c19973))
* **ui:** change filter layout breakpoint to lg to prevent overflow on tablets ([1e9873b](1e9873b))
* **ui:** expose isStaticSpa toggle for nixpacks + publish directory ([94098b2](94098b2)), closes [Dokploy#4993](https://github.com/Bl4ckBl1zZ/dokploy/issues/4993)
* **ui:** keep dropdown menus open on window blur ([081cf3f](081cf3f))
* **ui:** persist trigger type selection in GitHub provider forms ([15bc4b5](15bc4b5))
* **ui:** prevent collapsed avatar clipping ([9999f0a](9999f0a)), closes [Dokploy#4946](Dokploy#4946)
* **ui:** prevent layout shift in log counter using tabular-nums ([bb0c59f](bb0c59f))
* **ui:** prevent tooltips from getting stuck when server modals close ([35d26a8](35d26a8))
* **ui:** remove early return to render theme-aware favicon immediately ([689ae51](689ae51))
* **ui:** resolve tooltips overlapping open modals on remote servers page ([a4a13b9](a4a13b9))
* **ui:** scope deployment delete loading ([268ec1f](268ec1f))
* **ui:** show real status code on error page ([325c2a4](325c2a4))
* **ui:** standardize settings layout widths to full width ([a6c1f30](a6c1f30))
* **ui:** structurally resolve unclickable watch path badges ([ae95485](ae95485))
* **ui:** track concurrent deployment deletes ([6e79270](6e79270))
* **ui:** truncate organization name properly in sidebar without clipping descenders ([bbca400](bbca400))
* **ui:** unify tab header styles across backups, schedules, volume backups and patches ([3951247](3951247))
* **ui:** update favicon dynamically based on app theme ([9be96d4](9be96d4)), closes [Dokploy#4100](https://github.com/Bl4ckBl1zZ/dokploy/issues/4100)
* **ui:** vertically align enable submodules and improve watchpath button a11y ([a94f8b9](a94f8b9))
* **ui:** widen restore backup dialog to match other backup dialogs ([5ae289c](5ae289c))
* use dockerode API instead of shell docker ps for changePassword container lookup ([41d355c](41d355c)), closes [Dokploy#5108](https://github.com/Bl4ckBl1zZ/dokploy/issues/5108)
* use lazy initializer for useState with function calls ([43f9f54](43f9f54))
* use proper linting ([f3c7edc](f3c7edc))
* use updateJob to replace repeatable schedule job on update in cloud ([91bcf88](91bcf88)), closes [Dokploy#5233](https://github.com/Bl4ckBl1zZ/dokploy/issues/5233)
* **vault:** expand Infisical secret references when listing secrets ([6e760da](6e760da))
* **vault:** read Infisical secrets pulled in through an import ([0c1dfe9](0c1dfe9)), closes [Dokploy#5413](https://github.com/Bl4ckBl1zZ/dokploy/issues/5413)
* verify server ownership before running IP detection ([4b7a629](4b7a629)), closes [Dokploy#5214](https://github.com/Bl4ckBl1zZ/dokploy/issues/5214)
* verify swarm task convergence before marking db deploys done ([5624dff](5624dff))
* **volume-backups:** preserve backup failure status ([c6ab76f](c6ab76f))
* **volume-backups:** restart services after backup failure ([2598a62](2598a62))
* warn when the postgres image implies a data directory that mismatches the mounted volume ([6a10923](6a10923))
* **webhook:** include added and removed files in watchPaths validation ([2df02f5](2df02f5))
* write remote traefik config via SFTP instead of exec+base64 ([68a0555](68a0555))

### Features

* account deletion for Dokploy Cloud ([a87a5c0](a87a5c0))
* add "Deploy with Fresh Volumes" button for Docker Compose projects ([36ba9fc](36ba9fc))
* add @aws-sdk/client-secrets-manager dependency to pnpm-lock.yaml ([fada032](fada032))
* add AWS Secrets Manager client dependency ([be9c826](be9c826))
* add baseUrl to github provider to support github enterprise url ([1cf81e3](1cf81e3))
* add DNS provider integration (Cloudflare, AWS Route53) ([4d58f39](4d58f39))
* add Docker events tab to docker dashboard ([daba2d7](daba2d7))
* add Docker Health diagnostics tab ([4bf6dff](4bf6dff))
* add drag-and-drop logo upload for organizations ([0393c26](0393c26))
* add dynamic open graph metadata for enterprise whitelabeling ([b5c3d86](b5c3d86))
* add dynamic open graph metadata for link previews ([Dokploy#5348](https://github.com/Bl4ckBl1zZ/dokploy/issues/5348)) ([2d5a6ef](2d5a6ef))
* add go-to-page input to Docker events pagination ([3be9cdf](3be9cdf))
* add Images and Disk Usage tabs to docker dashboard ([c2071bb](c2071bb))
* add Infomaniak DNS provider support ([ff3ebef](ff3ebef))
* add OpenPanel analytics to cloud version ([2f7f50a](2f7f50a))
* add Overview dashboard (Services, Backups & Domains tabs) ([046a608](046a608))
* add OVHcloud DNS provider support ([e629248](e629248))
* add Porkbun DNS provider support ([74d2d41](74d2d41))
* add session management page (list active sessions + revoke) ([7728e5e](7728e5e))
* add sorting and pagination to Docker events table ([fa7a54b](fa7a54b))
* add target_version input, replace extra_pairs field ([a504449](a504449))
* add upgrade integration test workflow (manual, matrix-based) ([55704ff](55704ff))
* add user filtering to session management and update search functionality ([a2329ae](a2329ae))
* add volumes section and file explorer for containers and volumes ([d0eb6ef](d0eb6ef))
* **ai:** add Perplexity integration attribution ([f2ba262](f2ba262))
* allow reset-password script to target a specific user by email ([dada304](dada304))
* **auth:** add passkey support via better-auth ([7b0bcee](7b0bcee))
* bulk import secrets from vault providers ([50acb79](50acb79))
* **ci:** add hotfix cherry-pick and release workflows ([2f8af90](2f8af90))
* cloud onboarding wizard, billing trial card, and post-checkout server setup ([2e2e0c8](2e2e0c8))
* **compose:** add pull latest images on deploy toggle ([49b8214](49b8214))
* **compose:** support AI models in Compose specification ([29cdc81](29cdc81))
* consecutive upgrade pairs, drop curated pair and extra_pairs input ([eaec680](eaec680))
* **dns:** rework provider management and support all record types ([9c4ad14](9c4ad14))
* **domains:** add enable/disable toggle for domains ([ee802cd](ee802cd))
* **domains:** show redeploy hint on all compose domain actions ([898af1f](898af1f))
* enable Google Tag Manager on cloud version only ([aedb35b](aedb35b))
* enhance vault provider access control and environment variable handling ([9747e83](9747e83))
* enhance vault provider management and environment variable resolution ([f662242](f662242))
* implement session management with filtering and sorting capabilities ([f6c1e77](f6c1e77))
* implement utility functions to streamline owner selection for backups and domains ([d770e3c](d770e3c))
* integrate vault provider management and environment variable resolution ([b8822a1](b8822a1))
* interactive feature showcase on the signup panel ([ac9ad72](ac9ad72))
* list associated services in delete server modal ([0276021](0276021))
* make organization selector larger and searchable ([Dokploy#5052](https://github.com/Bl4ckBl1zZ/dokploy/issues/5052)) ([3cad115](3cad115)), closes [Dokploy#5043](https://github.com/Bl4ckBl1zZ/dokploy/issues/5043)
* move deployments into an overview page tab ([518ee44](518ee44))
* **networks:** add MTU option to network creation ([69a5615](69a5615))
* **organization:** allow setting a default role for new members ([aaf8d7e](aaf8d7e))
* **permissions:** add server.terminal to decouple server access from root SSH ([bbde5eb](bbde5eb))
* refactor serviceColumns for project access and enhance data retrieval ([479e8bb](479e8bb))
* remove unnecesary checks for ip and comments ([14be318](14be318))
* restrict self-service account deletion to cloud organization owners ([318ad36](318ad36))
* track cloud sign_up event in dataLayer ([d8b7c1e](d8b7c1e))
* **transfer:** move services between servers with their volumes, mounts and config ([9dcdb53](9dcdb53))
* **trial-banner:** add trial banner component to display trial status in sidebar ([988f5b6](988f5b6))
* **trial-notifications:** add email notification for expiring trials and integrate with webhook ([a0e1001](a0e1001))
* **ui:** inline deployments filter bar and fix layout jumping ([26317e9](26317e9))
* **ui:** smart truncation tooltips, org name limits, and logo UI polish ([Dokploy#5345](https://github.com/Bl4ckBl1zZ/dokploy/issues/5345)) ([1a29694](1a29694))
* update icons for Sessions and S3 Destinations in the sidebar menu ([c61163d](c61163d))
* upgrade to TypeScript 7 and Next.js 16.3 ([71521f2](71521f2))
* **vault:** add AWS Parameter Store provider ([1d26fdd](1d26fdd))
* **vault:** add Phase.dev secrets provider ([80859dc](80859dc)), closes [Dokploy#5122](https://github.com/Bl4ckBl1zZ/dokploy/issues/5122)
* **vault:** add Scaleway Secret Manager provider ([f238347](f238347))
* **vault:** address an Infisical folder from the reference ([5611662](5611662))

### Performance Improvements

* **dns:** filter Infomaniak records server-side when upserting ([8409b8c](8409b8c)), closes [Dokploy#5257](https://github.com/Bl4ckBl1zZ/dokploy/issues/5257)

### Reverts

* go back to a literal 25mb body limit for deploy webhooks ([82545bf](82545bf))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants