New Features
- Simplified install: the UI Configuration tab opens in a new Simple mode — paste a source connection URL and password, and the engine detects the provider (RDS, Aurora, Heroku, Supabase and others), Postgres image and tag, databases,
shared_buffers,shared_preload_librariesand query-tuning parameters, then applies the proposed config; Expert mode keeps full control and adds WAL-G and pgBackRest physical-mode fields (!1148, #713)
- CLI: new
dblab local-installcommand runs the same source detection and applies the proposed logical-mode config from the terminal (!1148, !1192, #774)
- Clone major upgrade: upgrade an existing clone to a newer PostgreSQL major version in place with
pg_upgrade --link, viaPOST /clone/{id}/upgrade,dblab clone upgradeor the UI; the target version comes from the configuredprovision.pgUpgradeImageand is reported on/status, and resetting the clone rolls it back (!1180, !1188, #756, #768)
- Deletion protection and auto-deletion for branches and snapshots: protect a branch or snapshot forever or for a set duration, and let the new
retentionconfig section delete unused ones after N minutes (safe-only: anything with clones, children or protection is never removed); newPATCH /branch/{name}andPATCH /snapshot/{id}endpoints and--protectedoptions indblab branchanddblab snapshot update(!1161, !1166, !1171, #727, #735, #742)
- Configs: whole-value
${VAR}/$VARenvironment placeholders are expanded in engine, CI checker and CLI configs, including retrieval job options such as source passwords and S3, WAL-G and pgBackRest credentials, so secrets no longer have to be stored in plain text (!1140, !1178, #750)
- Retrieval: new
customOptionsfor WAL-G and pgBackRest physical restore passes extra tool flags (for example--restore-specor--mask) without switching tocustomTool(!1182, #760)
- Teleport (Standard and Enterprise Editions): opt-in
platform.bindClonesToUserlabels each clone with its owner (dblab_user), so Teleportdb_labelsrules can limit users to their own clones; covers clones created with a personal token and from the Platform console (!1163, !1173, #731)
- Teleport: attach custom labels to sidecar
db/appresources with the repeatable--label key=valueflag orTELEPORT_LABELS; instance ownership moves to a dedicateddblab_instancelabel (!1162, #730)
Improvements and Fixes
- Faster clone creation: data ownership is normalized once when a snapshot is prepared, so clones skip the recursive
chown -Rthat dominated provisioning time on large databases (!1169, #737)
- Retrieval:
containerConfig.volumeentries are now applied as bind mounts to retrieval containers (single value or list, bind options such as:ropreserved) (!1175, #746)
- Engine: stop stacking a new dump-directory bind mount on every engine start, which could eventually fail with
no space left on deviceand keep the engine down; the engine now warns at startup about nested or stacked mounts and prints recovery steps (!1191, #775)
- Engine: failure diagnostics fall back to container logs when no Postgres CSV log exists, and the physical-mode config examples document routing sync and promote container logs to the Docker logging driver (!1146, #711)
- CLI:
list/ls,create,delete/rmandswitchare nowdblab branchsubcommands; previouslydblab branch listsilently created a branch namedlist(!1193, #776)
- UI: show branch data state time in UTC instead of shifting it by the browser's timezone offset (!1194, #777)
- UI: stop clone status polling after leaving the clone page (!1172, #743)
- UI: fix snapshot calendar and instance tab colors in the dark theme (!1187, #767)
- Teleport: map clone ID characters that Teleport rejects in resource names (such as
_) to hyphens, so these clones register instead of failing silently (!1189)
- Standard Edition: fix an engine crash-loop when the Platform billing response has no recognized organization (!1170, #741)
Security
- Engine: build with Go 1.26.7 (up from 1.26.2), clearing Go standard library CVEs in all shipped binaries (!1147, !1160, !1183, #712, #761)
- Engine: migrate the Docker client from
github.com/docker/dockerto thegithub.com/moby/mobysplit modules, clearing CVE-2026-34040 and related advisories, and drop thedocker/clidependency (!1176, #748)
- Engine: bump
golang.org/x/cryptoto v0.55.0 andgolang.org/x/modto v0.40.0, along with relatedgolang.org/xmodules (!1157, !1183, !1184, #706, #764)
- Images: digest-pin the
rds-refreshAlpine base image, and track thedocker-cli29.x series so rebuilds pick up upstream security releases (!1152, !1183, #717)
- Images: drop the
dblab-server*-zfs0.8variants, which were pinned to end-of-life Alpine 3.12 and ZFS 0.8 and carried unfixable CVEs; hosts still on ZFS 0.8 (stock Ubuntu 18.04/20.04) must upgrade to ZFS 2.x before updating (!1145, #710)
- CE UI: update vulnerable dependencies —
vite6.4.3,vitest3.2.7,cypress15.x (dropsextract-zipandenquirer), and raised floors fordompurify,qs,form-data,postcss,js-yaml,wsand others (!1157, !1160, !1179, !1184, #754, #764)
Internal
- CI: blocking Trivy scans for fixable HIGH/CRITICAL findings in the DBLab Server, CI Checker, RDS Refresh, CLI and CE UI images on MR and default-branch pipelines (!1181, #757)
- CI: required CE UI unit test job and a production dependency audit job (!1179, #754)
- CI: publish
@postgres.ai/sharedprereleases under a channel dist-tag (rc,beta) instead of failing to publish tolatest(!1165, #732)
- CI: drop job-level
pull_policyso jobs can run on GitLab.com instance runners, and pin integration tests to the dedicated runners (!1190, #773)
- Tests: drop the
DOCKER_API_VERSION=1.39pin from e2e scripts andmake run-dle; Docker Engine 28+ rejects it and the engine crash-loops (!1167, #734)
- Engine: code style cleanups and
go.mod/go.sumrealignment (!1150, !1151, !1164, #715, #716)
- CE UI: bump
@types/nodefrom end-of-life 12 to ^22 (!1143, #698)