Version 1.1.0
August 23, 2026
Added
- PostgreSQL
backupCommandFormat = 'custom'support: dumps are verified to carry the pg_dump custom-archive magic before the run commits, stored uncompressed inside the archive (custom archives are already compressed), recorded asdumpFormatin catalog manifests, and restored throughpg_restore— including the automatic rollback path, which sniffs the rollback dump's actual content to pick the restore binary. The pre-dump rejection still applies totar/directoryand tocustomon Craft versions below 5.2 (which lack the per-run restore-format control needed to dispatch pg_restore). offsite/restore/dbrefuses to start when the currently configuredbackupCommandFormatis one the rollback path cannot dispatch (tar/directory, orcustomon Craft < 5.2), since the pre-restore rollback dump would be taken in a format the automatic rollback could not restore. It also refuses when restores cannot run at all (restoreCommand = false) or when a custom backup — or a custom rollback dump — would bypass the pg_restore dispatch (arestoreCommandoverride, string or Closure), and runs the rollback dump through the same content sanity check as the backup path before the destructive import — output that fails the expected format's check (e.g. an empty file) aborts the restore with the database untouched.- Control panel backup jobs now show phase-based progress for database dumping, archive creation, upload, catalog publishing, retention, and resumed-job finalization.
- A queued backup that is interrupted by a worker death (server reboot, deploy, queue TTR kill) can no longer turn into two backups. The job now carries a fixed run ID, and a re-delivered attempt whose backup was already committed just finishes the bookkeeping (notifications, heartbeat) instead of taking a second backup. Such a job is retried once; note that Craft only re-delivers it after its reservation expires, which takes up to the 24-hour TTR, so the next scheduled run usually gets there first.
Changed
- The engine-layer
DatabaseDumper::dump()contract now returns aDumpResultvalue object (dump path +DumpFormat) instead of a bare path. - The queue TTR (24 hours) is now declared by the backup job itself.
- The local run cache never demotes a committed run when a re-delivered attempt fails afterwards, and a resumed run is now recorded under the original backup's timestamp and size instead of the retry's.
Compatibility
- Backups taken before this release (plain dumps whose manifest has no
dumpFormatfield) are still read as plain and restored through the samebackup.sqlpath; the new restore preflight rejections above apply to those restores as well. - The reverse direction does not hold: custom-format backups (
backup.dumpentry) can only be restored by this release or later — an older Offsite 1.0.x install looks forbackup.sqland refuses the archive. Plain backups restore on both.
Version 1.0.1
July 22, 2026
Fixed
offsite/diagnosenow warns when Craft'sbackupCommandconfig setting is disabled (set tofalse), which makes database backups impossible. Previously diagnose reported no issues whileoffsite/backup/dbfailed — on some platforms (such as Craft Cloud),backupCommandresolves tofalseat runtime.
Changed
- Replaced generic composer.json keywords with search-relevant terms to improve Plugin Store discoverability.
Version 1.0.0
July 19, 2026
Added
- Operational settings (retention mode, generations to keep, notify on success, minimum free disk space, multipart threshold) are now editable in the control panel.
- Connection and notification settings (endpoint, region, bucket, key prefix, access keys, Slack webhook URL, notification email, heartbeat URL) can now be set in the control panel as environment variable references such as
$OFFSITE_SECRET_KEY. Raw values are rejected — real values stay in.env, and only the reference is stored in project config.config/offsite.phpkeys still override control-panel values.
Changed
- The control panel now requires the bucket setting, and the region setting when no custom endpoint is set — matching the runtime validator so an incomplete setup fails at save time instead of at the first backup run. Keys overridden in
config/offsite.phpare exempt, so a config-file override can never block saving. - The utility status summary now states in text when the last successful backup is overdue (older than 48 hours), including the threshold in the warning, instead of relying on the status dot color alone.
Version 1.0.0-beta.1
July 18, 2026
Added
- Initial release: scheduled off-site database backups for Craft CMS 5.
- Integrity-verified uploads (SHA-256, provider checksum API with automatic fallback).
- Remote catalog as the single source of truth — restorable from the bucket alone.
- Restore CLI with dry-run compatibility checks and pre-restore safety dump.
- Generation-based retention pruning with orphan detection.
- Slack notifications and heartbeat monitoring (healthchecks.io-compatible).
offsite/diagnoseconsole command for settings and connectivity checks.- Control panel utility with run history.