Changelog
All notable changes to Databasement are documented here. The format follows Keep a Changelog and the project adheres to Semantic Versioning.
Each section covers one minor version; every entry is prefixed with the patch release that shipped it. Releases before 1.0.0 are only listed on GitHub Releases.
1.7 - 2026-09-07
Added
1.7.14SSH tunnels have an optional compression setting, on the database server form and the SSH config API, which trades CPU for bandwidth when the tunnel runs over a slow link (#543)1.7.13The French, Spanish, Greek and Traditional Chinese interfaces are fully translated and use consistent wording: about 38% of the strings fell back to English in each locale, and page titles, path validation messages and several flash messages could not be translated at all (#602) (#603)1.7.12The v1 REST API is rate limited, 300 requests a minute per access token by default;API_RATE_LIMITraises or lowers the ceiling and0turns it off where a gateway already throttles. The agent daemon routes and the web interface are not affected (#524)1.7.11Super admins can list the database servers of every organization at once, from a searchable overview opened on the Configuration → Organizations page, with the latest backup status of each server and a shortcut that switches to its organization and opens the server or its jobs (#521)1.7.11The changelog is written for the people who run Databasement and published as a page in the application, linked from the sidebar and the update dialog, and on the documentation site (#600)1.7.9Snapshots can carry a free-text comment and be locked, which excludes them from automatic cleanup and blocks manual deletion until unlocked (#522)1.7.4A restore from a PostgreSQL snapshot that preserves ownership and privileges can now set the owner of the restored database, and the one-off restore API acceptsoptions.owner_useras scheduled restores already did (#525) (#577)1.7.4PostgreSQL servers have an optional connection database field, defaulting topostgres, for managed providers (Heroku, RDS, Neon) whose roles are not allowed to connect topostgres(#560)1.7.1SSH tunnel configurations can be managed through the REST API at/api/v1/database-server-ssh-configs, with optional server-side key generation, so a pipeline can create one and pass its id to the database server endpoint (#493) (#496)1.7.0A backup configuration can target several storage volumes: the database is dumped once and the archive uploaded to each, and the Restore modal and the download button let you pick the copy when a snapshot has more than one (#478)1.7.0PostgreSQL servers have a "Use SSL" option that requires TLS on every connection (#490) (#491)1.7.0Each volume copy of a snapshot has its own badge on the snapshot list, coloured by state (failed upload with the error, missing file, still uploading), and the download picker shows the archive size (#495)
Changed
1.7.10Every button that triggers a server request shows a spinner while the request is in flight, including per-row actions and form submits (#599)1.7.1Job logs keep the start and the end of a command's output, note what was dropped, and are written at most once per second, so a dump emitting many warnings no longer makes the interface crawl (#497)
Deprecated
1.7.0Thevolume_idandvolumekeys of the v1 backup API are kept but deprecated in favour ofvolume_idsandvolumes(#478)
Fixed
1.7.12ThelatestDocker image is published from the release tag only, so it can no longer be overwritten by a concurrent build ofmainthat carries no version number, which blanked the version badge and the update dialog. The tip ofmainis published asedge(#601)1.7.10A form that fails validation raises a toast, expands the collapsed section holding the first invalid field and scrolls it into view with focus; the connection test buttons validate the same way (#598)1.7.9A command log no longer shows a running spinner forever when the job dies before the command finishes (queue timeout, killed worker, fatal error); it is marked failed together with the job (#541)1.7.8PostgreSQL servers below version 17 are dumped with the PostgreSQL 16 client, now shipped in the image alongside the 18 client, so their snapshots restore back into the server they came from; when no matching client exists, the job log warns that the snapshot may only load into a newer server (#595) (#596)1.7.5Page navigation no longer stops working until a manual refresh once the version modal has rendered, a regression from the UI library upgrade in 1.7.4 (#580)1.7.4Plain-format PostgreSQL restores fail on the first SQL error instead of being reported as completed with the data untouched (#550) (#562)1.7.4Encrypted snapshots of PostgreSQL custom-format, Redis, MongoDB, MSSQL and Firebird dumps restore again instead of failing with "output file not found" (#551) (#561)1.7.3Deleting a row from a later page of a list no longer sends you back to page one; only filter changes reset the page (#517)1.7.2A backup running longer than 90 seconds is no longer handed to a second queue worker that dumped the same snapshot concurrently: the queue'sretry_afternow follows the backup job timeout, duplicate deliveries are dropped, and workers restart when the timeout changes (#488) (#510)1.7.1Backups of MySQL servers on the new year-based version scheme (26.x) work again: the MariaDB dump client's--routinesflag, which fails on them, is dropped with a warning in the job log (#494) (#498)
Security
1.7.14Setting a password from an invitation re-reads the invitation from the database on every step, instead of acting on the state the page was rendered with, and the Adminer window builds its address from the route rather than taking it from the browser (#606)1.7.13The toast helpers are no longer part of the client-facing method surface of every interactive page, where the browser could call them to display an arbitrary message; copy-to-clipboard confirmations are now rendered without a server round trip (#605)1.7.8The Azure custom blob endpoint rejects link-local and instance metadata addresses, as the S3 endpoints already did, and the SFTP, FTP and SMB host fields only accept hostnames and IP addresses (#594)1.7.8Records looked up by id through the web and REST routes are resolved with the organization context in place, so an id from another organization is not found instead of being returned; policies now also check that the record belongs to the current organization (#591)1.7.8The Redis password is masked in logged commands; it was stored in cleartext in the job logs, which every member of the organization can read (#593)1.7.7The job logs modal checks the view permission wherever the job id comes from, so a job from another organization cannot be opened by setting the id from the browser (#589)1.7.6Looking up a single job through the REST API or the MCP job status tool only finds jobs in the current organization (#584)1.7.6The bundled web server only executespublic/index.php; any other.phpfile underpublic/returns 404 instead of running (#585)1.7.6Dump flags that choose where the dump client writes or loads options from (such as--result-file,--file,--out,--rdband/targetfile) are rejected per engine, and the MSSQL dump flags are now validated by the API too (#583)1.7.6Thessh_config_idaccepted by the database server API must belong to the current organization (#582)1.7.3Restore records are scoped to their organization, so a restore from another organization cannot be viewed or deleted by id; cross-organization notification links to snapshots resolve again (#516)1.7.3The post-backup and post-restore hook scripts can only be edited by super admins; notification channel URLs reject link-local and instance metadata addresses; SQLite and Firebird database paths are validated (#515)1.7.2Snapshots and scheduled restores are scoped to their organization by default and a restore source must belong to the same organization as its target; database host fields are restricted to hostnames and IP addresses, S3 endpoints reject link-local and instance metadata addresses, SQLite and Firebird paths and agent-reported filenames are validated, and/health/debugrequires authentication (#511)1.7.0Bumpedconcurrentlyto pull inshell-quote1.9.0, fixing a denial of service (CVE-2026-13311) (#486)
1.6 - 2026-07-27
Added
1.6.9Samba/SMB shares are a native volume type, so backups can target Windows or Samba shares without mounting them on the host; the volumes guide also explains how to use NFS through a host mount and a Local volume (#411)1.6.8Volumes can carry a storage limit in GB: a backup whose upload would push the volume over the limit fails before uploading, without retry, and sends a notification explaining why; the volume list shows current usage next to the limit (#458)1.6.8A per-volume notify-only option for the storage limit uploads the backup anyway and sends a warning notification instead of failing it (#462)1.6.8Traditional Chinese (zh-TW) translation (#456)1.6.7Newuser:reset-passwordArtisan command to reset a user's password from the command line when email delivery is not configured (#453)1.6.6MongoDB servers can use SRV connection strings (mongodb+srv://, as used by MongoDB Atlas) and pass extra connection options such astls=trueorreplicaSet=rs0; the password is masked in logged dump and restore commands (#444)1.6.5Azure Blob Storage volume type, with an optional custom endpoint for sovereign clouds, Azure-compatible gateways and the Azurite emulator (#443)1.6.3Optional multithreaded compression for zstd and 7z, off by default, spreads compression across all CPU cores for local and remote-agent backups; the compression level is now a slider capped per algorithm (9 for gzip and 7z, 19 for zstd) (#436)1.6.0Roles are editable at runtime: the new Roles tab under Configuration lets super admins build custom roles from a catalogue of abilities alongside the built-in Admin, Member, Operator and Viewer roles, and users can be granted extra abilities on top of their role in each organization (#409)1.6.0The documentation site is versioned per minor release, with a version switcher in the navbar and older versions served under their own path (#427)
Changed
1.6.10Maintenance release with no application changes1.6.7MySQL and MariaDB dumps no longer repeat every column name on everyINSERTrow, which inflated dump size for no benefit since Restore recreates each table from the dump before inserting its rows (#452)1.6.5The multithreaded compression setting also applies to decompression during Restore, so zstd and 7z snapshots are decompressed across all CPU cores (#442)1.6.5Configuration screens share a consistent card heading and table layout that stacks on small screens, tooltips on table buttons also show on small screens, and the Organizations card no longer shows its title twice (#441)1.6.1Maintenance release with internal changes only1.6.0Create and edit pages for agents, database servers and volumes have a Back button in the header, and the volume list shows the volume type as a badge with its icon
Fixed
1.6.12The Docker image declares port 2226, so reverse proxies such as Traefik detect the port the app listens on instead of the base image's 80 and 443 (#485)1.6.11The registration and password forms (forgot, reset, confirm) show validation errors inline and keep non-secret fields filled in after a failed submit, instead of bouncing back to a blank form (#482)1.6.9Snapshots on Local volumes can be downloaded when the queue worker and the web server run as different users, as in the stock Docker setup; directories created by backups were private to the worker, so downloads returned 404 (#473)1.6.8Backup jobs no longer hang when the mail server is unreachable: outgoing mail times out (MAIL_TIMEOUT, default 10 seconds), notification errors are logged instead of stalling or failing the job, one broken channel no longer blocks delivery to the others, and Discord, Telegram and Pushover channels pick up an edited token without a worker restart (#466)1.6.8The logo link honours a subpath inAPP_URLwhen the app is hosted behind a reverse proxy under a prefix (#459)1.6.6Tab content such as the commands in the "How to update?" modal and the agent token instructions was invisible in production builds (#451)1.6.4PostgreSQL TLS connections work in the Docker image: the application user inherited an unreadableHOME, which made the PostgreSQL client silently fall back to an unencrypted connection withsslmode=preferor fail outright withsslmode=require(#438)1.6.2Links inside older documentation versions stay within that version instead of jumping to the latest docs (#429)1.6.0Configuration screens no longer glitch at narrow widths: ability badges stay on one line with the roles table scrolling horizontally, the two Adminer alerts are spaced apart, and long values such asTRUSTED_PROXIESare truncated with the full value shown on hover
1.5 - 2026-06-26
Added
1.5.6A new Operator role sits between Viewer and Member: it can run Backups and Restores, download Snapshots and manage Restores, but cannot change server, volume or schedule configuration, delete Snapshots or manage users (#408)1.5.4Hook scripts can run after every successful Backup and Restore, configured under Configuration → Backup; they receive the job context asBACKUP_*/RESTORE_*environment variables, stream their output into the job log, never fail the job on a non-zero exit, and post-backup hooks also run on remote agents. The server page now shows a copyable server ID for use in scripts (#398)1.5.3Organizations can be merged: merging one into another moves all of its database servers, volumes, agents and SSH configurations, combines the members (an existing role in the destination is kept), and deletes the source; merges and deletions now run as background jobs in a single transaction and are recorded in the log (#401)1.5.3Telegram notification channels take an optional Topic ID so messages go to a specific topic of a forum group (#403)1.5.0The remote agent Backup pathway is back: an agent installed next to the database connects to Databasement over outbound HTTPS, so firewalled environments no longer need inbound SSH access; the agent's connection status is shown in the Agents list, the server form and the server page (#390) (#394)
Changed
1.5.3Success and failure notifications share one message format on every channel, including a single email template (#404)1.5.2Remote agents are no longer marked as Beta in the menu (#388) (#400)
Fixed
1.5.5Deleting a Snapshot also removes the date folder it leaves empty on the volume, instead of letting empty folders pile up (#405) (#406)1.5.2Saving or cancelling a database server edit takes you back to the page you came from instead of always landing on the server list (#378)1.5.2Failed Snapshots are once again left out of the Snapshot counters on the server list and server page, after the remote agent change in 1.5.0 undid that fix (#397)1.5.1Adminer is disabled for database servers reached through a remote agent, since those cannot be connected to directly (#395)1.5.0Failed Snapshots are no longer counted in the Snapshot counters on the server list and server page (#377)
Security
1.5.6The bundled SSH/SFTP library (phpseclib) is updated to 3.0.55, fixing CVE-2026-55599, where X.509 certificate validation could be made to send attacker-controlled outbound requests (#407)
1.4 - 2026-06-16
Added
1.4.1Greek is available as an interface language (#372)1.4.1PostgreSQL servers can back up ownership and privilege information; the choice is recorded in the snapshot so restores apply it regardless of the target server's own setting (#370)1.4.0Email notification channels accept multiple recipients (#367)1.4.0Backups can be enabled or disabled from the actions menu of the database server list (#369)
Changed
1.4.2The Docker image ships MongoDB's officialmongodumpandmongorestore(100.17.0, amd64 and arm64) instead of the Alpine edge package (#379)
Removed
1.4.0Breaking: The remote agent mode (DATABASEMENT_URL, theagent:runcommand, agent pages and API) is removed in favor of SSH tunnels; a migration drops the agent tables (#365)
Fixed
1.4.2SQL Server backups and restores work on arm64 images, wheresqlpackagewas previously shipped as a non-functional x64 binary (#381)1.4.1Restores are refused for snapshots that are not completed or have no backup file, background jobs no longer error when their record was deleted while they ran, and temporary SSH credential files are cleaned up when a tunnel fails to start (#373)1.4.0Weekly and monthly retention keeps the newest snapshot of each period instead of the oldest, so the monthly tier no longer lags by up to a month (#364)
1.3 - 2026-06-06
Added
1.3.0Scheduled Restores: the latest Snapshot of one server can be restored onto another server automatically on an existing backup schedule, managed from a new Scheduled Restores page and the API; a backup schedule in use by a Scheduled Restore can no longer be deleted (#321)1.3.0Built-in Adminer database browser: browse a registered server's data from its server page, enabled by default for admins and controlled from Configuration > Application, with read-only access for the demo user (not available for servers reached through an SSH tunnel or a remote agent) (#199)
Fixed
1.3.1Scheduled Restores require a source database name, hide Redis servers from the source picker and ask for the schedule before source and target; SQLite and Firebird destination paths are validated the same way in the Restore wizard, the Scheduled Restore wizard and the API, and the SQLite destination autocomplete suggests full file paths instead of bare file names (#362)
1.2 - 2026-06-03
Added
1.2.11Firebird 3, 4 and 5 databases can be backed up and restored; each.fdbfile is selected by path like SQLite while keeping host, port and credentials, and the Backup and Restore forms accept path-style database names for it (#357) (#356)1.2.6OAUTH_ONLY_MODE=truehides the password login form, rejects password logins server-side and turns off password reset; first-user registration still works so an instance can be set up before its identity provider is connected (#332)1.2.5PostgreSQL servers have a "Dump format" setting: the custom format writes.dumparchives that are restored with 4 parallelpg_restoreworkers (the target server must be PostgreSQL 17 or newer); plain SQL stays the default (#330)1.2.5An Ed25519 SSH keypair can be generated from the database server form when using private key authentication; the public key is shown once with a copy button for the SSH server'sauthorized_keysfile (#324)1.2.4Each database server has a read-only page, linked from its name in the list, that summarises connection, SSH, agent, backup and notification settings and shows the server's latest jobs; row actions move into a dropdown and every backup configuration gets a "Backup now" button (#319)1.2.3MySQL and MariaDB servers have a "Use SSL" toggle for managed databases that enforce TLS, such as Amazon RDS withrequire_secure_transport=ON(#314)1.2.2Microsoft SQL Server can be backed up and restored: backups are taken with Microsoft'ssqlpackagetool and restores re-import them after dropping the existing target database (#293)1.2.0Multi-organization support: users can belong to several organizations, with a role per organization, and switch between them from the sidebar; database servers, volumes, agents, Snapshots and backup jobs belong to the current organization, and existing data is moved into a "Default" organization on upgrade (#275) (#282)1.2.0Organizations are managed from Configuration → Organizations (create, edit, delete with resource checks, invitation links, member counts); organization admins manage the users of their own organization while super admins manage all (#275)1.2.0The API lists the caller's organizations atGET /api/v1/user/organizationsand accepts anX-Organization-Idheader to act in a given organization, the MCP server gains a tool to list organizations and switch context, and users created through OAuth join the organization of their invitation link orOAUTH_DEFAULT_ORGANIZATION_ID(#275)
Changed
1.2.9Maintenance release with no application changes1.2.8The Configuration → Application page listsAPP_DISPLAY_TIMEZONEas the timezone setting instead ofTZ1.2.5Breaking: SQL Server backups produce DACPAC instead of BACPAC files, so backups of on-premises instances no longer fail Azure compatibility validation; Snapshots taken before this release (.bacpac.gz) can no longer be restored (#318)1.2.3The Jobs page is split into separate Snapshots and Restores pages, notification links point at the right one, and the Restore modal opens from a server row, a Snapshot row or a "New Restore" button with the known fields pre-selected (#308)1.2.3The Snapshots and Restores lists are redesigned: rows are tinted by state, IDs are shown compactly with a popover and are searchable, the Created and Status columns are sortable, a Restore can be re-run from its row, and list polling drops from 5 to 30 seconds (#312)1.2.0Admins always see the delete and remove-from-organization buttons for users they have authority over; when a rule blocks the action (user in several organizations, last super admin), the confirmation dialog explains why (#275)
Removed
1.2.3TheMYSQL_CLI_TYPEenvironment variable is no longer read; the MariaDB client is always used (#314)
Fixed
1.2.12A scheduled Backup in All or Pattern mode that cannot reach its database (host down, backup user removed) now records a failed Snapshot and sends the failure notification instead of producing nothing, so the dashboard, API and monitoring see the incident (#359)1.2.10Modal dialogs no longer extend behind the address and navigation bars of mobile browsers, keeping the close button and action row reachable (#341)1.2.10Timestamps on the health and debug pages are rendered in the display timezone (#340)1.2.7Timestamps are stored in UTC and rendered inAPP_DISPLAY_TIMEZONE(the container entrypoint carries an existingTZvalue over, in the Helm chart's worker and migration pods too), so jobs no longer show wrong durations or a false failed state when the web and worker containers disagree on the system timezone (#336)1.2.4The edit form no longer freezes for 30 seconds when the database host is unreachable: database discovery uses a 5-second connection timeout and is skipped for agent-backed servers (#320)1.2.3The defaultpostgresdatabase is included in the list of available PostgreSQL databases, so data stored there is no longer left out of backups (#315)1.2.1Backup jobs left running or pending after a queue worker crash are marked failed by the scheduledjobs:recover-stuckcommand (formerlyagent:recover-leases) once they exceed the job timeout plus a 5-minute grace period (#287)1.2.1The update check no longer reports an older "latest version" from a stale cache after upgrading (#288)1.2.1SQLite backups no longer fail with "unable to open database file" on WAL-mode databases whose-shmfile does not exist, because the-readonlyflag is no longer passed tosqlite3(#284)
Security
1.2.11Theshell-quotepackage pulled in by the localnpmdevelopment tooling is upgraded to 1.8.4 to fix CVE-2026-9277 (command injection) (#343)1.2.2The SQL Server password is masked in loggedsqlpackagecommands
1.1 - 2026-05-06
Added
1.1.0Breaking: A database server can have several Backup configurations, each with its own schedule, volume, retention policy and database selection; API clients must send and read abackupsarray instead of the singlebackupobject, with the database selection fields moved into each entry, and the MCPtrigger-backuptool accepts an optionalbackup_id(#212)1.1.0Each Backup configuration on the database server list has its own "Backup now" button, so a single configuration can run without triggering all of them, and the success toast names which one ran (#226)
Changed
1.1.7The Configuration page is split into Application, Backup, Notification and Authentication tabs, each with its own URL (#264)1.1.5The theme follows the operating system's light or dark preference by default instead of always starting dark; the choice is stored in the browser, and an existing cookie preference is carried over on the next visit (#262)1.1.4The application runs on PHP 8.5 and Laravel 13; the Docker image ships PHP 8.5 and installs from source need it (#239)1.1.2The database server list uses fixed column widths, inline action icons instead of a dropdown menu, and a plain tooltip for the connection status (#232)
Removed
1.1.4Laravel Octane is gone and FrankenPHP serves requests directly; theOCTANE_ENABLED,OCTANE_WORKERSandOCTANE_MAX_REQUESTSvariables no longer have any effect (#237)
Fixed
1.1.7Pagination controls follow the active theme instead of default Tailwind styling, no longer flash a scrollbar, and are translated in French and Spanish (#277)1.1.7Navigating between pages no longer flashes the wrong theme for an instant (#276)1.1.6Toast notifications are displayed on the login and other authentication pages1.1.6The Copy buttons in the "How to update?" dialog show their "Copied to clipboard" confirmation again instead of failing1.1.4SQLite no longer fails with "database is locked" under concurrent load: write transactions take their lock up front (DB_TRANSACTION_MODE, defaultIMMEDIATE), WAL journal mode is dropped because its sidecar files left stale locks and do not work on NFS volumes (soDB_JOURNAL_MODEno longer applies), anddb:waitreleases its connection between retries (#236)1.1.4db:wait --check-migrationskeeps polling while migrations are pending instead of crashing with a stack trace (#240)1.1.3SQLite waits up to 5 seconds for a lock (DB_BUSY_TIMEOUT) and uses WAL journal mode (DB_JOURNAL_MODE), so the web server, queue worker and scheduler writing at the same time no longer fail with "database is locked" (#233)1.1.3The database server list fits on phone screens: the Backup and Jobs columns are hidden on small screens, and the per-configuration "Backup now" button only appears when a server has more than one Backup configuration (#234)1.1.1Running a version newer than the latest published release is reported as up to date instead of outdated (#227)1.1.1Backup labels on the database server list wrap on small screens instead of overflowing the card (#228)1.1.0Notifications after saving or deleting are shown as toasts that sit above other elements and have a proper close icon, replacing the inline status banners (#224)
1.0 - 2026-04-15
Added
1.0.12The snapshots API accepts afilter[database_server_id]parameter to list the snapshots of a single server (#216)1.0.12The footer shows whether a newer release is available and opens update instructions for Docker Compose, Helm and Docker with copy buttons; the check runs only on tagged builds, and untagged builds show their short commit hash instead (#217) (#222)1.0.10Notification channels are managed as a list in Configuration (add, edit, delete and test each one) and can be assigned per database server; backups and restores can notify on success as well as failure, defaulting to failures only, and existing notification settings are migrated automatically (#205)1.0.9OIDC logins can be assigned a role from a group claim:OAUTH_OIDC_ROLE_CLAIMnames the claim,OAUTH_OIDC_ROLE_MAP_ADMIN,OAUTH_OIDC_ROLE_MAP_MEMBERandOAUTH_OIDC_ROLE_MAP_VIEWERlist the matching groups, andOAUTH_OIDC_ROLE_STRICTdenies access to users in none of them; works with Keycloak, Authentik and Dex (#202)1.0.8Discord notifications can be sent through a webhook URL, without creating a bot or granting it server permissions (#195)1.0.4REST API endpoints to create, read, update and delete database servers, volumes and backup schedules, plus endpoints to test a database server or volume connection (#178)1.0.3Database servers accept extra dump flags (for example--no-tablespacesor--column-statistics=0) that are appended to the MySQL, PostgreSQL, MongoDB and Redis dump commands, with a preview of the resulting command; input is validated and each flag is shell-escaped (#175) (#177)1.0.0Initial stable release
Changed
1.0.11The database server form merges database selection and backup configuration into a single step grouped by what, where, when and how long to keep, with a segmented retention picker and a live summary of the backup plan (#210)1.0.5Restores no longer drop and recreate the target database on MySQL and PostgreSQL, so schema ownership and grants set up outside the dump survive; the restore dialog gains a "drop and recreate" option for a clean slate and, on PostgreSQL, an option to transfer ownership of the restored database to a given user (#185)1.0.5The documentation site and the API reference display the released version (#183)1.0.1The:latestDocker image is also published on version releases, so it carries the version shown in the footer, and the Helm chart index is served from the root of the GitHub Pages site sohelm repo addworks without a/chartssuffix (#171)
Fixed
1.0.12The two-factor challenge sends you back to the login page with an explanation instead of a 500 error when its session data can no longer be decrypted, and the setup key copy button works over plain HTTP (#219) (#223)1.0.12The login page no longer fails to render when an OAuth provider is enabled, as the provider icons were looked up in the wrong icon set (#218) (#221)1.0.11Helm: the worker container runs as UID 1000 instead of root, so local backups it writes can be read and downloaded by the web UI instead of returning 404; root-owned files already on the volume are fixed up on the first restart (#215)1.0.11Disabling notifications on a database server no longer blocks saving with an invisible "channels required" validation error (#211)1.0.8A failing Gotify or webhook notification no longer crashes the backup or restore job that triggered it, and errors from "send test notification" are shown to the user (#197)1.0.7Discord bot notifications are delivered again; the channel could not be resolved and every send failed (#191)1.0.6Deleting a database server that was the target of cross-server restores no longer leaves jobs stuck as "Pending" or "Unknown", and pending jobs can be cancelled from the Jobs page (#188)1.0.5An emptyTRUSTED_PROXIESvalue falls back to the default private network ranges instead of trusting no proxy at all, which broke fresh Kubernetes installs (#184)1.0.2SQLite backups no longer miss recent writes on databases in WAL mode: the SQLite client's online backup is used instead of copying the file, remote SQLite over SFTP also fetches the-waland-shmcompanion files (flagged best-effort when present), and a missing source file fails the backup instead of producing an empty one (#174)