Web dashboard for browsing and managing restic backup repositories.
2.5K
A lightweight web dashboard for monitoring and browsing restic backup repositories. Manage multiple repositories from a single UI, run automated scans and integrity checks, and integrate with existing monitoring — all from a clean, responsive interface.

restic check --read-data with configurable intervals per repository.tar archives/actuator/health, /actuator/info) reporting per-repo status — ready for Prometheus, Uptime Kuma, etc.| Snapshots | Snapshot Detail |
|---|---|
![]() | ![]() |
Create a docker-compose.yml:
services:
app:
image: tmseidel/restic-explorer:latest
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: docker
DB_HOST: db
DB_PORT: 5432
DB_NAME: resticexplorer
DB_USER: resticexplorer
DB_PASSWORD: resticexplorer
RESTIC_ENCRYPTION_KEY: # optional, generate with: openssl rand -base64 32
depends_on:
db:
condition: service_healthy
restart: unless-stopped
volumes:
- app-data:/app/data
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: resticexplorer
POSTGRES_USER: resticexplorer
POSTGRES_PASSWORD: resticexplorer
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U resticexplorer"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
app-data:
db-data:
Then run:
docker compose up -d
The application is available at http://localhost:8080. On first launch you will be redirected to create the admin account.
docker run -d \
--name restic-explorer \
-p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=docker \
-e DB_HOST=your-postgres-host \
-e DB_PORT=5432 \
-e DB_NAME=resticexplorer \
-e DB_USER=resticexplorer \
-e DB_PASSWORD=your-secure-password \
-e RESTIC_ENCRYPTION_KEY="your-base64-key" \
tmseidel/restic-explorer:latest
| Variable | Default | Description |
|---|---|---|
DB_HOST | db | PostgreSQL hostname |
DB_PORT | 5432 | PostgreSQL port |
DB_NAME | resticexplorer | Database name |
DB_USER | resticexplorer | Database user |
DB_PASSWORD | resticexplorer | Database password |
RESTIC_ENCRYPTION_KEY | (empty) | Base64-encoded AES key for encrypting sensitive data at rest (see below) |
Repository passwords and backend credentials (S3 keys, Azure account key) are encrypted at rest when an encryption key is provided. Strongly recommended for production.
Generate a key:
openssl rand -base64 32
Pass it to the container:
-e RESTIC_ENCRYPTION_KEY="your-generated-base64-key"
⚠️ Without an encryption key, sensitive data is stored in plain text. Existing plain-text values remain readable after encryption is enabled and will be encrypted on the next save.
For SFTP repositories, mount the SSH private key into the container and reference it in the repository's SFTP Command setting:
volumes:
- /home/youruser/.ssh/id_rsa:/app/ssh/id_rsa:ro
Then set the SFTP Command to e.g.:
ssh user@host -i /app/ssh/id_rsa -s sftp
The container runs as UID/GID 1000 so bind-mounted keys owned by the default host user are readable without extra steps. Mount as
:rofor security.
For Rclone repositories, mount your rclone.conf into the container:
volumes:
- /home/youruser/.config/rclone/rclone.conf:/home/appuser/.config/rclone/rclone.conf:ro
Rclone is pre-installed in the image. Credentials are managed by rclone's own configuration, not by Restic Explorer.
| Path | Purpose |
|---|---|
/app/data | Application data directory |
/app/ssh | Mount point for SSH private keys (SFTP backend) |
| Port | Description |
|---|---|
8080 | HTTP (application + actuator endpoints) |
adminThe image exposes Spring Actuator endpoints:
| Endpoint | Description |
|---|---|
GET /actuator/health | Application health including per-repo scan, integrity check, and retention policy status |
GET /actuator/info | Application name and build version |
GET /actuator/metrics | Application metrics |
The custom resticMetadata health indicator reports per-repository scan status, check status, retention policy compliance, and an overall UP/DOWN/UNKNOWN state — suitable for integration with Uptime Kuma, Prometheus, or similar monitoring tools.
eclipse-temurin:21-jre-alpine (multi-stage build)restic CLI, openssh-client, curl (installed via apk)appuser (UID/GID 1000)docker (activated automatically)HEALTHCHECK against /actuator/healthFull documentation, architecture details, and source code: GitHub
Content type
Image
Digest
sha256:44e725c70…
Size
177.5 MB
Last updated
6 months ago
docker pull tmseidel/restic-explorer