Self-hosted · Open · Restic-powered

Every backup, under control.

Amber Backup is a single dashboard for your Restic backups across local and remote servers. Schedule jobs, enforce retention, restore files, and get alerted the moment something fails - all self-hosted, all encrypted.

✓ AES-256 encrypted secrets ✓ 9 storage backends ✓ RBAC, SSO & 2FA
Features

Everything you need to run backups seriously

One control plane for scheduling, storage, restore, monitoring and access - built on the reliability of Restic.

🗓️

Scheduling & retention

Cron-based schedules with presets, plus forget/prune retention (keep-last / daily / weekly / monthly) applied on every run.

🖥️

Local & remote agents

Back up the server itself or enroll lightweight agents on remote hosts with a single install command. One dashboard for all.

🔔

Notifications

Get alerted on success or failure via email, Slack, Discord, Microsoft Teams, Telegram, Gotify, ntfy, or a generic webhook.

♻️

Restore & download

Browse snapshots, restore to the original location or an alternate path, or download a selection as an archive.

🔐

Encryption & secrets

Repository passwords and backend credentials are sealed with AES-256-GCM envelope encryption. Plaintext never hits the disk.

👥

RBAC, API keys & SSO

Fine-grained resource grants (view / operate / manage), scoped API keys, and SSO via OIDC, Microsoft Entra ID, Google or GitHub with admin approval.

🛡️

2FA & passkeys

Protect accounts with TOTP two-factor authentication and passwordless passkey (WebAuthn) sign-in - on top of Argon2 password hashing.

📋

Audit log

Every state-changing action by users, admins and API keys is recorded and browsable in a filterable admin table, with secrets redacted.

⌨️

CLI & REST API

Automate from your terminal with the dependency-free ambb CLI, or drive everything through the documented REST API and API keys.

Integrations

Store anywhere, get notified everywhere

Amber speaks every Restic backend and the notification channels your team already uses.

Storage backends

Local / Filesystem SFTP REST Server Amazon S3 Backblaze B2 Azure Blob Google Cloud Storage OpenStack Swift rclone

Notification channels

Email (SMTP) Slack Discord Microsoft Teams Telegram Gotify ntfy Generic webhook

Single sign-on

Generic OIDC Microsoft Entra ID Google GitHub
Command line

Drive it from your terminal

The dependency-free ambb CLI lists and inspects agents, jobs and targets, and triggers backups - perfect for scripts, cron and CI.

One binary, zero dependencies

A single self-contained Go binary talks to the same REST API as the dashboard. Authenticate with a scoped API key and you are ready to automate.

  • ambb job list - see every backup job at a glance
  • ambb job run <id> - trigger a backup on demand
  • ambb agent list - check your fleet's health
  • -o json - machine-readable output for scripts
How it works

From zero to scheduled backups in minutes

1

Add a target

Point Amber at any Restic repository - S3, B2, SFTP, Azure and more. Credentials are encrypted at rest.

2

Create a job

Choose what to back up (server or agent), the schedule, retention, and which channels to alert on success or failure.

3

Relax & monitor

Watch live progress on the dashboard, restore whenever you need, and let notifications tell you the rest.

Install

Up and running with Docker Compose

Amber ships as a single container plus PostgreSQL. Database migrations run automatically on startup.

1

Create a project folder

Save the compose file below as docker-compose.yml.

2

Generate secrets into .env

Set MASTER_ENCRYPTION_KEY, JWT_SECRET, POSTGRES_PASSWORD, PUBLIC_BASE_URL and your bootstrap admin credentials.

3

Launch

docker compose up -d

Open PUBLIC_BASE_URL and sign in with your bootstrap admin.

docker-compose.yml
services:
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: amber
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-amber}
      POSTGRES_DB: amber
    volumes:
      - amber-pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U amber"]
      interval: 5s
      timeout: 5s
      retries: 10

  app:
    image: devpatf/amber-backup:latest
    restart: unless-stopped
    environment:
      DATABASE_URL: postgres://amber:${POSTGRES_PASSWORD:-amber}@db:5432/amber
      MASTER_ENCRYPTION_KEY: ${MASTER_ENCRYPTION_KEY:?}
      JWT_SECRET: ${JWT_SECRET:?}
      PUBLIC_BASE_URL: ${PUBLIC_BASE_URL:-http://localhost:3000}
      BOOTSTRAP_ADMIN_EMAIL: ${BOOTSTRAP_ADMIN_EMAIL:-admin@example.com}
      BOOTSTRAP_ADMIN_PASSWORD: ${BOOTSTRAP_ADMIN_PASSWORD:-changeme}
    ports:
      - "${APP_PORT:-3000}:3000"
    volumes:
      - amber-data:/data
    depends_on:
      db:
        condition: service_healthy

volumes:
  amber-pgdata:
  amber-data:

Own your backups.

Self-hosted, encrypted, and built on Restic - Amber Backup keeps your data yours.