Rust Native · Open Source · Apache 2.0

TitanVault: Scheduled, encrypted backups to object storage

Backs up PostgreSQL databases and directories as zstd-compressed archives, optionally encrypted on the host with ChaCha20-Poly1305, to Hetzner Object Storage, Cloudflare R2, any S3-compatible bucket or a local path. Cron schedules, GFS retention and a terminal UI.

Sources
PostgreSQL + files
pg_dump and tar
Targets
S3 / R2 / local
Apache OpenDAL
Encryption
ChaCha20
Optional, on the host
Retention
GFS
Hourly to yearly
curl -fsSL https://install.titanvault.dev | sudo bash
Example /etc/titanvault/config.toml (trimmed)
[schedule]
cron = "0 2 * * *"

[crypto]
enabled = true
passphrase = "a-long-random-passphrase"

[[sources.databases]]
name = "app-postgres"
driver = "postgres"
container_name = "postgres"
database = "app"
user = "postgres"

[[sources.filesystems]]
name = "app-configs"
paths = ["/opt/stack"]
excludes = ["**/data/**"]

[targets.cloudflare_r2]
endpoint = "https://<account_id>.r2.cloudflarestorage.com"
bucket = "prod-backups"
access_key = "..."
secret_key = "..."
Features

What it does

One job: get scheduled, compressed and optionally encrypted copies of your databases and files into storage you control.

Architecture
In-memory pipeline

No temporary files

Dumps and archives are compressed, encrypted and uploaded without writing temporary files to disk. The whole archive is held in memory during a run, so size the host for your largest source.

Security
ChaCha20-Poly1305

Encryption before upload

With encryption enabled, archives are encrypted on your server before they leave it, so the storage provider only sees ciphertext. Off by default; keep your passphrase safe.

Experience
titanvault tui

Terminal UI

Review sources, targets and retention, test storage connectivity, list snapshots and run a backup from the terminal, without an account.

Automation
Grandfather-Father-Son

GFS retention

Five schedule levels (hourly, daily, weekly, monthly and yearly), each with its own cron. After a successful run, old snapshots are pruned per source and level.

How it works

Four steps, one binary

What happens on every scheduled or on-demand backup. Read the code on GitHub.

STEP 01pg_dump / tar

Dump

Runs pg_dump on the host or inside your container with docker exec, or builds a tar of the configured paths, skipping excludes.

STEP 02zstd

Compress

Compresses the archive in memory with zstd. No temporary files are written to disk.

STEP 03Optional

Encrypt

Optionally encrypts it with ChaCha20-Poly1305 and a random nonce per archive, before anything leaves the host.

STEP 04OpenDAL

Upload and prune

Writes the archive to every enabled target through Apache OpenDAL, then applies GFS retention. A heartbeat URL can be pinged on success.

Comparison

How it compares

TitanVault does less than the established backup tools. Pick it when you want scheduled dumps to object storage that you can also manage from SecuryBlack.

CapabilityTitanVaultCron + shell scriptrestic / BorgBackup
RestoreTo a new path (files or SQL export), from the CLI or the SecuryBlack panelWhatever you writeBuilt-in restore command
DeduplicationNo, a full archive per runNoYes
PostgreSQL dumpsBuilt in (pg_dump, also via docker exec)Whatever you writePipe pg_dump through stdin
RetentionGFS per source and levelWhatever you writeBuilt-in keep policies
SecuryBlack panelThrough nexus-agent (config, backups, heartbeats)NoNo
FAQ

Questions

No. TitanVault is open source under Apache-2.0 and runs in standalone mode by default. Configure it in /etc/titanvault/config.toml or with 'titanvault tui'.

Try it on one server

Run it standalone with your own bucket, or connect it to SecuryBlack Cloud to manage sources, targets and backup heartbeats from the hosted panel.