# Borgmatic Director UI

# Borgmatic Director UI for beginners

# Borgmatic Director UI - Beginner's Guide

<p class="callout info">Welcome to Borgmatic UI! This guide will help you understand the basics of backing up your data using this powerful yet easy-to-use backup management interface.</p>

## Understanding Key Concepts

Before diving in, it's important to understand the terminology used throughout the application. These terms come from the underlying backup tools (Borg and Borgmatic) and understanding them will make everything much clearer.

---

### 🗄️ Repository

**What is it?** A **Repository** is the *destination* where your backups are stored. Think of it as a secure vault or storage container that holds all your backup data.

**Key points:**

- A repository is created once and can hold many backups over time
- Repositories are encrypted by default - you'll set a passphrase when creating one
- You can have multiple repositories (e.g., one local, one remote)
- Repositories can be stored locally (on your server) or remotely (SSH server, cloud storage)

<p class="callout warning">**Important:** Never lose your repository passphrase! Without it, your backup data cannot be recovered.</p>

---

### 💾 Backup (Backup Job)

**What is it?** A **Backup** (or Backup Job) is a *configuration* that defines:

- **What** to back up (which files and folders)
- **Where** to store it (which repository)
- **How** to back it up (compression, exclusions, etc.)
- **When** to run (if scheduled)

**Example:** You might create a backup job called "Website Backup" that backs up `/var/www` to your remote repository every night at 2 AM.

---

### 📦 Archive

**What is it?** An **Archive** is a single *snapshot* of your data at a specific point in time. Every time a backup job runs successfully, it creates a new archive.

**Key points:**

- Archives are stored inside repositories
- Each archive has a unique name (usually including a timestamp)
- Archives are deduplicated - only changed data is stored, saving space
- You can browse, restore, or delete individual archives

**Analogy:** If a Repository is a photo album, then Archives are individual photos. Each photo captures a moment in time, and the album holds them all together.

---

## ⏰ Schedules

Schedules allow you to automate your backups so they run without manual intervention.

### How Schedules Work

- Schedules are attached to backup jobs
- You can set backups to run hourly, daily, weekly, or with custom cron expressions
- Scheduled backups run automatically in the background
- You'll see the status and history of scheduled runs in the dashboard

### Common Schedule Patterns

<table id="bkmrk-pattern-description-"><thead><tr><th>Pattern</th><th>Description</th><th>Best For</th></tr></thead><tbody><tr><td>Daily at 2:00 AM</td><td>Runs once per day during low-activity hours</td><td>Most use cases</td></tr><tr><td>Every 6 hours</td><td>Runs 4 times per day</td><td>Frequently changing data</td></tr><tr><td>Weekly on Sunday</td><td>Runs once per week</td><td>Large, stable datasets</td></tr></tbody></table>

---

## 🔑 SSH Keys

SSH Keys are used for secure, passwordless authentication when connecting to remote servers for backup storage.

### Why Use SSH Keys?

- **Security:** More secure than passwords
- **Automation:** Required for scheduled backups to remote servers (no password prompts)
- **Convenience:** No need to enter passwords repeatedly

### How to Set Up SSH Keys

1. Go to **SSH Key Management** in the sidebar
2. Either **Generate** a new key pair or **Import** an existing key
3. Copy the **public key** to your remote server's `~/.ssh/authorized_keys`
4. Test the connection to verify it works

<p class="callout info">**Tip:** When importing a key, you can select a file from the server or upload from your computer using the buttons in the import dialog.</p>

---

## 🗃️ Storage Types

When creating a repository, you can choose from several storage types depending on where you want to store your backups.

### Local Repository

**Path format:** `/path/to/repository`

- Stored on the same server or a mounted drive
- Fastest backup and restore speeds
- Best for: Quick backups, staging before cloud sync

### SSH/SFTP Repository

**Path format:** `ssh://user@hostname/path/to/repository`

- Stored on a remote server via SSH
- Requires SSH key or password authentication
- Best for: Off-site backups, dedicated backup servers

### Cloud Storage (with Rclone)

For cloud storage like Amazon S3, Backblaze B2, Google Drive, etc.

#### Option 1: Local + Cloud Sync (Recommended)

- Backups are stored locally first
- Automatically synced to cloud after each backup
- Faster backups, cloud redundancy

#### Option 2: Native Cloud (Borg 2.x only)

- Borg 2.x can write directly to S3-compatible storage
- No Rclone required
- Simplest cloud setup

---

## 🔄 How to Restore (Retrieve) Backups

Restoring your data is just as important as backing it up. Here's how to retrieve files from your backups.

### Step 1: Navigate to Archives

1. Go to **Archives** in the sidebar
2. Select the repository containing your backup
3. You'll see a list of all archives (snapshots) in that repository

### Step 2: Browse the Archive

1. Click on an archive to open the **Archive Browser**
2. Navigate through folders just like a file explorer
3. Preview text files directly in the browser

### Step 3: Restore Files

You have three options when restoring:

<table id="bkmrk-option-description-u"><thead><tr><th>Option</th><th>Description</th><th>Use Case</th></tr></thead><tbody><tr><td>**Restore to New Location**</td><td>Extract files to a folder you choose</td><td>Safest option - review before replacing</td></tr><tr><td>**Download**</td><td>Download files to your computer (folders are zipped)</td><td>Quick access, small files</td></tr><tr><td>**Restore to Original Location**</td><td>Put files back where they came from</td><td>Full restore after data loss</td></tr></tbody></table>

<p class="callout warning">**Caution:** "Restore to Original Location" will overwrite existing files. Use with care!</p>

---

## 🚀 Quick Start Guide

Ready to create your first backup? Follow these steps:

### 1. Create a Repository

1. Go to **Repositories** → **Create Repository**
2. Choose a storage type (Local is easiest to start)
3. Set a path (e.g., `/host/backups/my-repo`)
4. Enter a strong passphrase and save it somewhere safe!
5. Click **Create**

### 2. Create a Backup Job

1. Go to **Backups** → **Create Backup**
2. Give it a name (e.g., "My Documents")
3. Select your repository
4. Add source paths (what to back up)
5. Optionally set a schedule
6. Click **Create**

### 3. Run Your First Backup

1. Find your backup job in the list
2. Click the **Run** button
3. Watch the progress in the dashboard
4. Once complete, you'll have your first archive!

### 4. Verify Your Backup

1. Go to **Archives**
2. Select your repository
3. Click on the archive to browse its contents
4. Confirm your files are there

---

## 💡 Tips for Beginners

- **Start small:** Begin with a small folder to test the process
- **Use descriptive names:** Name your backups and repositories clearly
- **Test restores:** Regularly practice restoring files to ensure your backups work
- **Multiple destinations:** Consider both local and remote repositories for redundancy
- **Monitor the dashboard:** Check regularly that scheduled backups are running
- **Keep passphrases safe:** Store repository passphrases in a password manager

---

## 📚 Glossary

<table id="bkmrk-term-definition-borg"><thead><tr><th>Term</th><th>Definition</th></tr></thead><tbody><tr><td>**Borg**</td><td>The underlying backup program that handles deduplication and encryption</td></tr><tr><td>**Borgmatic**</td><td>A wrapper around Borg that simplifies configuration and automation</td></tr><tr><td>**Deduplication**</td><td>Only storing unique data chunks, saving significant storage space</td></tr><tr><td>**Archive**</td><td>A single backup snapshot at a point in time</td></tr><tr><td>**Repository**</td><td>The storage location containing all your archives</td></tr><tr><td>**Passphrase**</td><td>The password used to encrypt/decrypt your repository</td></tr><tr><td>**Rclone**</td><td>A tool for syncing files to cloud storage providers</td></tr><tr><td>**SSH Key**</td><td>A cryptographic key pair for secure, passwordless server authentication</td></tr><tr><td>**Retention**</td><td>Rules for how long to keep old archives before pruning them</td></tr><tr><td>**Pruning**</td><td>Removing old archives according to retention rules to save space</td></tr></tbody></table>

---

<p class="callout success">**Congratulations!** You now have a solid understanding of Borgmatic UI. Remember: a backup is only as good as its last successful restore test. Happy backing up! 🎉</p>

# Borgmatic Director UI for professionals

# Borgmatic Director UI - Professional Administration Guide

<p class="callout info">This guide is intended for system administrators and IT professionals who need comprehensive knowledge of the Borgmatic Director UI application, its operating modes, configuration options, and administrative features.</p>

---

## Operating Modes

Borgmatic Director UI supports three operating modes for different deployment scenarios. Understanding these modes is essential for proper deployment planning.

### Mode Comparison Matrix

<table id="bkmrk-feature-standalone-c"><thead><tr><th>Feature</th><th>Standalone</th><th>Client</th><th>Director</th></tr></thead><tbody><tr><td>Manage local backups</td><td>✅</td><td>✅</td><td>✅ (via client proxy)</td></tr><tr><td>Full local web UI</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Connect to Director</td><td>❌</td><td>✅</td><td>❌</td></tr><tr><td>Manage multiple machines</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Approve client connections</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Deploy templates to clients</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Aggregate monitoring dashboard</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Receive remote commands</td><td>❌</td><td>✅</td><td>❌</td></tr></tbody></table>

---

### 1. Standalone Mode (Default)

Standalone mode is the default operating mode. The instance operates independently, managing backups on a single server with no external connections.

#### Use Cases

- Single server deployments
- Home labs and personal servers
- Small businesses with one backup server
- Testing and development environments
- Air-gapped or isolated systems

#### Configuration

No additional configuration required. This is the default state after installation.

```
# Identity configuration file: /app/data/config/identity.json
{
  "mode": "standalone",
  "instance_id": "auto-generated-uuid",
  "instance_name": "My Backup Server"
}
```

#### Available Features

- Full backup job management (create, edit, delete, run)
- Repository management (local, SSH, S3, Rclone)
- Archive browsing and restore
- Schedule management
- SSH key management
- YAML configuration editor
- Real-time backup monitoring
- Notifications (email, webhooks, etc.)

---

### 2. Client Mode

Client mode allows the instance to be remotely managed by a central Director server while retaining full local functionality.

#### Use Cases

- Multiple servers managed by a central IT team
- Distributed infrastructure requiring unified management
- Managed Service Provider (MSP) client deployments
- Branch offices connected to headquarters

#### Configuration Steps

1. Navigate to **Settings → Operating Mode**
2. Click the toggle to switch from Standalone to Client mode
3. Configure connection settings: 
    - **Client Name:** Human-readable identifier (e.g., "Production Web Server")
    - **Identification Phrase:** Secret phrase shown to Director admin for verification
    - **Director URL:** WebSocket URL (e.g., `wss://director.example.com`)
    - **Director Port:** Default is 9000
4. Save and initiate connection
5. Wait for Director admin to approve the connection request

#### Authentication Security

Client authentication uses Ed25519 cryptographic keypairs:

1. **Keypair Generation:** Client generates Ed25519 keypair on first setup
2. **Registration:** Client sends public key + identification phrase to Director
3. **Approval:** Director admin verifies phrase and approves connection
4. **Challenge-Response:** All subsequent connections authenticated via cryptographic challenge

```
Authentication Flow:
1. Client → Director: "Register me" + public key + phrase
2. Director Admin: Reviews request, verifies phrase
3. Director Admin: Clicks Approve (optionally locks IP)
4. Director → Client: Issues signed JWT token
5. Future connections:
   - Director: "Sign this random challenge: XYZ123"
   - Client: Signs with private key
   - Director: Verifies signature with stored public key
   - Connection established ✅
```

#### Connection Status Indicators

<table id="bkmrk-status-indicator-mea"><thead><tr><th>Status</th><th>Indicator</th><th>Meaning</th></tr></thead><tbody><tr><td>Connected</td><td>🟢 Green</td><td>Active connection to Director</td></tr><tr><td>Pending</td><td>🟡 Yellow</td><td>Awaiting Director approval</td></tr><tr><td>Disconnected</td><td>🔴 Red</td><td>No connection (network issue or Director offline)</td></tr><tr><td>Rejected</td><td>⛔ Blocked</td><td>Connection rejected by Director admin</td></tr></tbody></table>

#### Client Mode Features

- All Standalone features remain available
- Receives template deployments from Director
- Reports status and backup results to Director
- Can be monitored remotely via Director dashboard
- Automatic reconnection with exponential backoff

---

### 3. Director Mode

Director mode transforms the instance into a central management hub that can monitor and control multiple Client instances.

#### Use Cases

- Enterprise IT managing multiple servers
- Managed Service Providers (MSPs)
- DevOps teams managing infrastructure fleets
- Organizations requiring centralized backup oversight

#### Configuration Steps

1. Navigate to **Settings → Operating Mode**
2. Click "Switch to Director Mode"
3. Type "switch" to confirm (this is a significant change)
4. Configure Director settings: 
    - **Listen Port:** WebSocket port for client connections (default: 9000)
    - **SSL/TLS:** Enable for production (recommended)
    - **Auto-Approve:** Automatically approve new clients (not recommended)
5. Restart the server if prompted

<p class="callout warning">**Note:** Switching to Director mode enables HTTPS and may require server restart. Switching back to Standalone clears all client data.</p>

#### Network Requirements

```
┌─────────────────┐     WSS (port 9000)      ┌──────────────────┐
│   Client 1      │ ─────────────────────────>│                  │
│   (behind NAT)  │  outbound connection      │     Director     │
└─────────────────┘                           │                  │
                                              │  Public IP or    │
┌─────────────────┐     WSS (port 9000)       │  Domain name     │
│   Client 2      │ ─────────────────────────>│                  │
│   (firewall)    │  outbound connection      │  Port 9000 open  │
└─────────────────┘                           └──────────────────┘
```

- Director needs a public IP or domain name
- Director port 9000 (or configured port) must be accessible
- Clients initiate outbound connections (NAT-friendly)
- No port forwarding required on client machines
- Can use CloudFlare Tunnel or reverse proxy if Director is also behind NAT

#### Client Management Dashboard

The Director dashboard provides:

- **Connected Clients:** Real-time list of online clients with status
- **Pending Approvals:** New clients awaiting approval
- **Offline Clients:** Previously connected clients that are currently unreachable
- **Aggregate Statistics:** Total backups, repositories, success/failure rates

#### Client Approval Workflow

1. New client connects and appears in "Pending Approvals"
2. Admin reviews: 
    - Client name
    - Identification phrase (verify this matches expected)
    - IP address
    - Public key fingerprint
3. Admin decides: 
    - **Approve:** Client can connect and be managed
    - **Approve + Lock IP:** Only allow connections from current IP
    - **Reject:** Deny connection permanently

#### Managing Remote Clients

When in Director mode, a client selector appears in the navigation:

- Select a client to view/manage that client's backups, repositories, etc.
- All pages (Backups, Repositories, Archives, etc.) show data from selected client
- Actions performed affect the selected client
- "View All Clients" returns to the aggregate dashboard

#### Template Deployment

Directors can create and deploy templates to multiple clients:

- **Backup Templates:** Pre-configured backup job definitions
- **Schedule Templates:** Standardized backup schedules
- **Repository Templates:** Common repository configurations

Deployment options:

- Deploy to selected clients
- Deploy to client groups
- Deployed items are created as **inactive** for security (must be activated locally)

---

### Mode Switching Reference

<table id="bkmrk-from-to-data-impact-"><thead><tr><th>From</th><th>To</th><th>Data Impact</th><th>Action Required</th></tr></thead><tbody><tr><td>Standalone</td><td>Client</td><td>None (non-destructive)</td><td>Toggle switch + configure Director URL</td></tr><tr><td>Client</td><td>Standalone</td><td>None (non-destructive)</td><td>Toggle switch</td></tr><tr><td>Standalone/Client</td><td>Director</td><td>Enables HTTPS, adds Director features</td><td>Type "switch" to confirm + restart</td></tr><tr><td>Director</td><td>Standalone</td><td>Clears all client connection data</td><td>Type "switch" to confirm</td></tr></tbody></table>

---

## Dashboard

The Dashboard provides an at-a-glance overview of backup system health and recent activity.

### Dashboard Widgets

#### System Status

- **Backup Tools Health:** Shows installed status and versions of Borg 1.x, Borg 2.x, Borgmatic, and Rclone
- **Last Health Check:** Timestamp of most recent tool verification

#### Backup Statistics

- Total backup jobs configured
- Active vs. inactive backups
- Last 24-hour success/failure count
- Currently running backups

#### Recent Activity

- List of recent backup runs with status
- Click to view detailed logs
- Filter by status (success, failed, running)

#### Repository Overview

- Total repositories configured
- Storage usage (if available)
- Repository health status

---

## Backup Jobs

Backup Jobs define what data to back up, where to store it, and when to run.

### Creating a Backup Job

#### Basic Settings

<table id="bkmrk-field-description-re"><thead><tr><th>Field</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td>Name</td><td>Human-readable identifier for the backup</td><td>Yes</td></tr><tr><td>Description</td><td>Optional notes about the backup purpose</td><td>No</td></tr><tr><td>Repository</td><td>Target repository for storing backups</td><td>Yes</td></tr><tr><td>Borg Version</td><td>Use Borg 1.x or Borg 2.x (must match repository)</td><td>Yes</td></tr><tr><td>Active</td><td>Enable/disable the backup job</td><td>Yes</td></tr></tbody></table>

#### Source Configuration

<table id="bkmrk-field-description-ex"><thead><tr><th>Field</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td>Source Directories</td><td>Paths to back up</td><td>`/host/home`, `/host/var/www`</td></tr><tr><td>Exclude Patterns</td><td>Glob patterns to exclude</td><td>`*.tmp`, `**/node_modules/**`</td></tr><tr><td>Exclude If Present</td><td>Skip directories containing these files</td><td>`.nobackup`, `CACHEDIR.TAG`</td></tr></tbody></table>

#### Advanced Options

<table id="bkmrk-option-description-d"><thead><tr><th>Option</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>Compression</td><td>Compression algorithm and level</td><td>`zstd,3`</td></tr><tr><td>One File System</td><td>Don't cross filesystem boundaries</td><td>Enabled</td></tr><tr><td>Read Special</td><td>Read special files (devices, FIFOs)</td><td>Disabled</td></tr><tr><td>Numeric Owner</td><td>Store numeric user/group IDs</td><td>Disabled</td></tr><tr><td>No Atime</td><td>Don't store access time</td><td>Enabled</td></tr></tbody></table>

#### Retention Policy

Configure how many archives to keep:

<table id="bkmrk-setting-description-"><thead><tr><th>Setting</th><th>Description</th><th>Recommended</th></tr></thead><tbody><tr><td>Keep Hourly</td><td>Number of hourly archives</td><td>24</td></tr><tr><td>Keep Daily</td><td>Number of daily archives</td><td>7</td></tr><tr><td>Keep Weekly</td><td>Number of weekly archives</td><td>4</td></tr><tr><td>Keep Monthly</td><td>Number of monthly archives</td><td>6</td></tr><tr><td>Keep Yearly</td><td>Number of yearly archives</td><td>2</td></tr></tbody></table>

#### Hooks

Execute commands before/after backups:

<table id="bkmrk-hook-when-executed-u"><thead><tr><th>Hook</th><th>When Executed</th><th>Use Case</th></tr></thead><tbody><tr><td>Before Backup</td><td>Before archive creation starts</td><td>Database dumps, stop services</td></tr><tr><td>After Backup</td><td>After successful backup</td><td>Cleanup temp files, start services</td></tr><tr><td>On Error</td><td>When backup fails</td><td>Send alerts, cleanup</td></tr></tbody></table>

### Running Backups

- **Manual Run:** Click the "Run" button on any backup job
- **Scheduled Run:** Automatically triggered by configured schedule
- **Stop Running:** Click "Stop" to abort a running backup

### Backup Status

<table id="bkmrk-status-indicator-mea-1"><thead><tr><th>Status</th><th>Indicator</th><th>Meaning</th></tr></thead><tbody><tr><td>Idle</td><td>⚪ Gray</td><td>Not currently running</td></tr><tr><td>Running</td><td>🔵 Blue (spinner)</td><td>Backup in progress</td></tr><tr><td>Success</td><td>🟢 Green</td><td>Last run completed successfully</td></tr><tr><td>Failed</td><td>🔴 Red</td><td>Last run failed</td></tr><tr><td>Inactive</td><td>⚫ Disabled</td><td>Backup job is disabled</td></tr></tbody></table>

---

## Repositories

Repositories are the storage destinations for backup archives.

### Repository Types

#### Local Repository

- **Path format:** `/path/to/repository`
- **Use case:** Local disk, mounted NAS, attached storage
- **Performance:** Fastest backup/restore speeds
- **Configuration:** Just specify the path

#### SSH/SFTP Repository

- **Path format:** `ssh://user@hostname:port/path`
- **Use case:** Remote backup servers, dedicated storage boxes
- **Authentication:** SSH key (recommended) or password
- **Configuration:**
    - Host, port, username
    - SSH key selection or password
    - Remote path (browse with file explorer)

#### S3/Cloud Storage (Rclone)

- **Providers:** Amazon S3, Backblaze B2, Wasabi, MinIO, Google Cloud, etc.
- **Storage Modes:**
    - **Local + Cloud Sync:** Fast local backups, automatic cloud sync
    - **Native Cloud (Borg 2.x):** Direct S3 writes, no Rclone needed
- **Configuration:**
    - Select Rclone remote (pre-configured in Rclone)
    - Specify bucket/path
    - Choose storage mode

### Creating a Repository

1. Navigate to **Repositories → Create Repository**
2. Select repository type (Local, SSH, S3/Rclone)
3. Configure type-specific settings
4. Set Borg version (1.x or 2.x)
5. Enter encryption passphrase
6. Click **Create** to initialize the repository

<p class="callout warning">**Critical:** Save your repository passphrase securely! Without it, your backups cannot be accessed or restored.</p>

### Repository Actions

<table id="bkmrk-action-description-w"><thead><tr><th>Action</th><th>Description</th><th>When to Use</th></tr></thead><tbody><tr><td>Check</td><td>Verify repository integrity</td><td>Periodically or after errors</td></tr><tr><td>Compact (Borg 2.x)</td><td>Reclaim space from deleted archives</td><td>After pruning many archives</td></tr><tr><td>Update Passphrase</td><td>Change stored passphrase</td><td>If passphrase was entered incorrectly</td></tr><tr><td>Delete</td><td>Remove repository from UI</td><td>Optionally delete data on disk</td></tr></tbody></table>

---

## Archives (View/Restore)

Archives are point-in-time snapshots stored in repositories.

### Archive Browser

The Archive Browser provides file-system navigation of backup contents:

- **Directory Navigation:** Click folders to explore
- **Breadcrumb Trail:** Navigate back to parent directories
- **Search/Filter:** Filter files by name
- **File Preview:** View text file contents directly
- **Selection:** Check items for restore/download

### Restore Options

<table id="bkmrk-option-description-b"><thead><tr><th>Option</th><th>Description</th><th>Best For</th></tr></thead><tbody><tr><td>Restore to New Location</td><td>Extract to a specified folder</td><td>Safest - review before replacing</td></tr><tr><td>Download</td><td>Download to your browser (ZIP for folders)</td><td>Small files, quick access</td></tr><tr><td>Restore to Original Location</td><td>Put files back where they were</td><td>Full disaster recovery</td></tr></tbody></table>

### Restore History

Each archive tracks its last restore operation:

- Destination path or "Downloaded"
- Timestamp of restore
- Persisted across sessions

### Archive Actions

<table id="bkmrk-action-description-b"><thead><tr><th>Action</th><th>Description</th></tr></thead><tbody><tr><td>Browse</td><td>Open archive in file browser</td></tr><tr><td>Info</td><td>View archive metadata (size, file count, etc.)</td></tr><tr><td>Delete</td><td>Permanently remove archive from repository</td></tr></tbody></table>

---

## Schedules

Schedules automate backup execution at specified intervals.

### Schedule Configuration

<table id="bkmrk-field-description-ex-1"><thead><tr><th>Field</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td>Schedule Type</td><td>Preset or custom cron</td><td>Daily, Weekly, Custom</td></tr><tr><td>Time</td><td>When to run</td><td>02:00</td></tr><tr><td>Day (weekly)</td><td>Day of week for weekly schedules</td><td>Sunday</td></tr><tr><td>Cron Expression</td><td>Custom cron for advanced scheduling</td><td>`0 */6 * * *`</td></tr><tr><td>Timezone</td><td>Timezone for schedule evaluation</td><td>Europe/Berlin</td></tr></tbody></table>

### Cron Expression Reference

```
# Format: minute hour day-of-month month day-of-week
#         0-59   0-23 1-31         1-12  0-6 (0=Sunday)

0 2 * * *      # Daily at 2:00 AM
0 */6 * * *    # Every 6 hours
0 3 * * 0      # Weekly on Sunday at 3:00 AM
0 4 1 * *      # Monthly on the 1st at 4:00 AM
*/30 * * * *   # Every 30 minutes
```

### Common Schedule Patterns

<table id="bkmrk-pattern-cron-use-cas"><thead><tr><th>Pattern</th><th>Cron</th><th>Use Case</th></tr></thead><tbody><tr><td>Daily at 2 AM</td><td>`0 2 * * *`</td><td>Standard daily backup</td></tr><tr><td>Every 6 hours</td><td>`0 */6 * * *`</td><td>Frequently changing data</td></tr><tr><td>Weekdays at 6 PM</td><td>`0 18 * * 1-5`</td><td>End of business day</td></tr><tr><td>Sunday at 3 AM</td><td>`0 3 * * 0`</td><td>Weekly full backup</td></tr></tbody></table>

---

## SSH Key Management

SSH keys enable secure, passwordless authentication to remote servers.

### Key Operations

#### Import Existing Key

1. Click **Import SSH Key**
2. Provide a name for the key
3. Paste the private key content, OR
4. Click **Select from Server** to browse server filesystem, OR
5. Click **Upload Key File** to upload from your computer
6. If key is encrypted, enter the passphrase
7. Click **Create**

#### Generate New Key

1. Click **Generate SSH Key**
2. Provide a name
3. Select key type (Ed25519 recommended, RSA for compatibility)
4. Click **Generate**
5. Copy the public key to remote server's `~/.ssh/authorized_keys`

#### Test Connection

1. Click the test icon on a key
2. Enter remote host, username, and port
3. Click **Test Connection**
4. Verify connection succeeds and Borg is detected

### Supported Key Types

<table id="bkmrk-type-format-header-r"><thead><tr><th>Type</th><th>Format Header</th><th>Recommendation</th></tr></thead><tbody><tr><td>OpenSSH</td><td>`-----BEGIN OPENSSH PRIVATE KEY-----`</td><td>✅ Recommended (modern)</td></tr><tr><td>RSA PEM</td><td>`-----BEGIN RSA PRIVATE KEY-----`</td><td>✅ Good (legacy compatible)</td></tr><tr><td>EC PEM</td><td>`-----BEGIN EC PRIVATE KEY-----`</td><td>✅ Good</td></tr><tr><td>PKCS#8</td><td>`-----BEGIN PRIVATE KEY-----`</td><td>✅ Good</td></tr></tbody></table>

### Key Security

- Private keys are stored encrypted in the database
- Passphrase-protected keys are supported
- Temporary key files are created with mode 0600
- Temporary files are cleaned up immediately after use

---

## YAML Editor

The YAML Editor provides direct access to Borgmatic configuration files.

### Features

- **Syntax Highlighting:** YAML-aware editor with color coding
- **Validation:** Real-time syntax and schema validation
- **Backup/Restore:** Automatic backups of config changes
- **File Browser:** View all configuration files in `/etc/borgmatic.d/`

### Use Cases

- Advanced configuration not exposed in UI
- Bulk editing of multiple options
- Importing existing Borgmatic configs
- Troubleshooting configuration issues

<p class="callout warning">**Caution:** Manual YAML edits may conflict with UI-managed settings. Use the UI for standard configurations.</p>

---

## Logs

The Logs page provides access to backup execution logs and system events.

### Log Types

<table id="bkmrk-log-type-content-loc"><thead><tr><th>Log Type</th><th>Content</th><th>Location</th></tr></thead><tbody><tr><td>Backup Logs</td><td>Individual backup execution output</td><td>Per-backup log files</td></tr><tr><td>Borgmatic Logs</td><td>Borgmatic wrapper output</td><td>System logs</td></tr><tr><td>Application Logs</td><td>Borgmatic UI application events</td><td>Container stdout/stderr</td></tr></tbody></table>

### Log Features

- **Real-time Streaming:** Watch backup progress live
- **Search:** Find specific entries
- **Filter by Level:** Info, Warning, Error
- **Download:** Export logs for analysis

---

## Settings

### General Settings

<table id="bkmrk-setting-description--1"><thead><tr><th>Setting</th><th>Description</th></tr></thead><tbody><tr><td>Instance Name</td><td>Display name for this server</td></tr><tr><td>Theme</td><td>Light or dark mode</td></tr><tr><td>Timezone</td><td>Default timezone for schedules</td></tr></tbody></table>

### Operating Mode

See the [Operating Modes](#operating-modes) section above.

### Notifications

Configure alerts for backup events:

<table id="bkmrk-provider-configurati"><thead><tr><th>Provider</th><th>Configuration</th></tr></thead><tbody><tr><td>Email (SMTP)</td><td>SMTP server, credentials, recipients</td></tr><tr><td>Webhook</td><td>URL to POST events to</td></tr><tr><td>Slack</td><td>Webhook URL</td></tr><tr><td>Discord</td><td>Webhook URL</td></tr><tr><td>Gotify</td><td>Server URL and token</td></tr><tr><td>Ntfy</td><td>Topic and server URL</td></tr></tbody></table>

### Security Settings

<table id="bkmrk-setting-description--2"><thead><tr><th>Setting</th><th>Description</th></tr></thead><tbody><tr><td>Change Password</td><td>Update admin password</td></tr><tr><td>Session Timeout</td><td>Auto-logout after inactivity</td></tr><tr><td>API Tokens</td><td>Generate tokens for API access</td></tr></tbody></table>

### Factory Reset

Completely reset the instance:

- Removes all configurations
- Clears all credentials
- Optionally regenerates secret key
- Requires typing "RESET" to confirm

<p class="callout warning">**Warning:** Factory reset is irreversible. Backup your data first!</p>

---

## Environment Variables

Configure the application via environment variables:

<table id="bkmrk-variable-default-des"><thead><tr><th>Variable</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td>`NODE_ENV`</td><td>production</td><td>Environment mode (production/development)</td></tr><tr><td>`PORT`</td><td>3000</td><td>HTTP server port</td></tr><tr><td>`JWT_SECRET`</td><td>(auto-generated)</td><td>Secret for JWT token signing</td></tr><tr><td>`ADMIN_USERNAME`</td><td>admin</td><td>Default admin username</td></tr><tr><td>`ADMIN_PASSWORD`</td><td>admin</td><td>Default admin password</td></tr><tr><td>`DATA_DIR`</td><td>/app/data</td><td>Persistent data directory</td></tr><tr><td>`TZ`</td><td>UTC</td><td>Container timezone</td></tr><tr><td>`DIRECTOR_PORT`</td><td>9000</td><td>WebSocket port (Director mode)</td></tr><tr><td>`RESTORE_ALLOWED_ROOTS`</td><td>/host,/tmp,/data</td><td>Allowed restore destination paths</td></tr><tr><td>`DEBUG_REPOSITORIES`</td><td>false</td><td>Enable verbose repository logging</td></tr></tbody></table>

---

## Docker Deployment

### Basic Docker Compose

```
version: '3.8'

services:
  borgmatic-ui:
    image: borgmatic-ui:latest
    container_name: borgmatic-ui
    restart: unless-stopped
    ports:
      - "8080:3000"      # Web UI
      - "9000:9000"      # Director WebSocket (if using Director mode)
    volumes:
      - ./data:/app/data                    # Persistent data
      - ./borgmatic.d:/etc/borgmatic.d      # Borgmatic configs
      - /:/host:ro                          # Host filesystem access
      - ./borg-cache:/root/.cache/borg      # Borg cache
    environment:
      - ADMIN_PASSWORD=change-me-please
      - TZ=Europe/Berlin
```

### Volume Mounts Explained

<table id="bkmrk-mount-purpose-requir"><thead><tr><th>Mount</th><th>Purpose</th><th>Required</th></tr></thead><tbody><tr><td>`/app/data`</td><td>Application data, credentials, SSH keys</td><td>Yes</td></tr><tr><td>`/etc/borgmatic.d`</td><td>Generated Borgmatic YAML configs</td><td>Yes</td></tr><tr><td>`/:/host`</td><td>Access to host filesystem for backups</td><td>Yes (for local backups)</td></tr><tr><td>`/root/.cache/borg`</td><td>Borg cache (improves backup speed)</td><td>Recommended</td></tr></tbody></table>

---

## Troubleshooting

### Common Issues

<table id="bkmrk-problem-cause-soluti"><thead><tr><th>Problem</th><th>Cause</th><th>Solution</th></tr></thead><tbody><tr><td>"Cannot connect to server"</td><td>Backend not running or port blocked</td><td>Check container logs, verify port mapping</td></tr><tr><td>"Authentication failed" (SSH)</td><td>Wrong key or not in authorized\_keys</td><td>Verify public key on remote server</td></tr><tr><td>"Passphrase wrong"</td><td>Incorrect repository passphrase</td><td>Update passphrase in repository settings</td></tr><tr><td>"Repository locked"</td><td>Previous backup didn't finish</td><td>Wait or use "Break Lock" action</td></tr><tr><td>Backup stuck at 0%</td><td>Network issue or SSH timeout</td><td>Check connectivity, test SSH connection</td></tr><tr><td>Director: Client not connecting</td><td>Firewall, wrong URL, or DNS issue</td><td>Verify port 9000 accessible, check client logs</td></tr></tbody></table>

### Debug Mode

```
# Enable verbose logging
docker run -e DEBUG_REPOSITORIES=true ...

# View container logs
docker logs -f borgmatic-ui

# Check real-time backup output
# (visible in the UI during backup execution)
```

---

## API Access

Borgmatic Director UI provides a REST API for automation and integration.

### Authentication

```
# Login to get JWT token
POST /api/auth/login
Content-Type: application/json
{
  "username": "admin",
  "password": "your-password"
}

# Use token in subsequent requests
Authorization: Bearer <token>
```

### Key Endpoints

```
# Backups
GET  /api/backups              # List all backup jobs
POST /api/backups/:id/run      # Trigger backup
POST /api/backups/:id/stop     # Stop running backup

# Repositories  
GET  /api/repositories         # List repositories
POST /api/repositories/:id/check  # Check integrity

# Archives
GET  /api/archives/:repo       # List archives
GET  /api/archives/:repo/:archive/browse  # Browse contents

# Health
GET  /api/dashboard/health     # System health
GET  /api/dashboard/tools-health  # Tool versions
```

---

<p class="callout success">**Need more help?** Check the container logs (`docker logs borgmatic-ui`) for detailed error messages. Most issues are related to SSH connectivity, passphrases, or file permissions.</p>

# Dashboard Guide

<div id="bkmrk-" style="font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif; line-height: 1.6; color: #374151; background: #fff; max-width: 1200px; margin: 0 auto; padding: 24px;"><div style="margin-bottom: 24px;">  
</div></div># Borgmatic Guide

<div id="bkmrk-learn-how-borgmatic-" style="font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif; line-height: 1.6; color: #374151; background: #fff; max-width: 1200px; margin: 0 auto; padding: 24px;"><div style="margin-bottom: 24px;"><div style="color: #4b5563; font-size: 14px;">Learn how Borgmatic works and get started with your backup strategy</div></div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 18px; margin: 0 0 24px 0;"><div style="margin: 0 0 8px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="20" stroke="#1e3a8a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path> <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path> </svg> </span> <span style="font-size: 20px; font-weight: bold; color: #1e3a8a; vertical-align: middle;">What is Borgmatic Director UI?</span></div><div style="color: #1e40af; margin-top: 8px;">**Borgmatic Director UI** is a modern web-based management interface for **Borgmatic**, which is a simple, configuration-driven backup software built on top of **Borg Backup**. Borgmatic automates the creation of backups, handles encryption, compression, and provides a powerful deduplication system that saves storage space by only storing unique data chunks. Borgmatic Director UI provides an intuitive interface to manage your backups, repositories, schedules, and archives without editing configuration files manually.</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px; margin-top: 14px;"><tbody><tr><td style="width: 50%; vertical-align: top; background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px;"><div style="font-size: 16px; font-weight: bold; color: #1e3a8a; margin: 0 0 8px 0;">Key Features</div>- Automatic backup scheduling
- Deduplication (saves storage)
- Encryption and compression
- Multiple repository support
- Pre/post-backup hooks
- Template-based setup
- Database auto-discovery

</td><td style="width: 50%; vertical-align: top; background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px;"><div style="font-size: 16px; font-weight: bold; color: #1e3a8a; margin: 0 0 8px 0;">How It Works</div><div style="color: #1e40af; font-size: 14px;">Borgmatic Director UI runs in a single Docker container that includes everything you need. Configuration files (YAML) define what to backup, where to store it, and when to run. Backups execute automatically according to your schedule, creating incremental archives that only store changes. You can also use templates to quickly set up common backup configurations.</div></td></tr></tbody></table>

</div><div style="margin: 0 0 24px 0;"><div style="margin: 0 0 12px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="24" stroke="#111827" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon> </svg> </span> <span style="font-size: 24px; font-weight: 800; color: #111827; vertical-align: middle;">Quick Start Guide</span></div><div style="background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><div style="font-weight: 800; color: #14532d;">🚀 Fast Track: Use Templates</div><div style="margin-top: 8px; color: #166534;">If you're setting up backups for common applications (like WordPress, BookStack, or other Infinity Tools), you can use **Templates** to automatically configure everything. Go to "Templates" → Select a template → Test connection → Activate. This creates repositories, schedules, and backup jobs automatically!</div></div><div style="background: #fefce8; border: 1px solid #fef08a; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><div style="font-weight: 800; color: #854d0e;">Manual Setup (follow these steps in order):</div>1. Create SSH Keys (if using SSH/SFTP repositories)
2. Create a Repository (where backups will be stored)
3. Create a Schedule (when backups should run)
4. Create a Backup Job (what to backup and how)

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 52px; vertical-align: top;"><div style="width: 40px; height: 40px; border-radius: 999px; background: #dbeafe; color: #2563eb; font-weight: 800; text-align: center; line-height: 40px;">1</div></td><td style="vertical-align: top;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">SSH Keys (Optional)</div><div style="margin: 0 0 10px 0;">If you plan to use SSH or SFTP repositories, you'll need to create SSH keys first. These keys allow secure, passwordless access to remote servers.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**When needed:** Only if using SSH or SFTP repository types</div><div style="color: #4b5563; font-size: 14px;">**Where:** Go to "SSH Keys" in the navigation menu</div></div></td></tr></tbody></table>

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 52px; vertical-align: top;"><div style="width: 40px; height: 40px; border-radius: 999px; background: #dcfce7; color: #16a34a; font-weight: 800; text-align: center; line-height: 40px;"><svg fill="none" height="20" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="vertical-align: middle; margin-top: 9px;" viewbox="0 0 24 24" width="20"> <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path> </svg></div></td><td style="vertical-align: top;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">Create a Repository</div><div style="margin: 0 0 10px 0;">A **repository** is where your backups are stored. It can be local, on a remote server (SSH/SFTP), or in the cloud (S3, Rclone). Think of it as the "destination" for your backups.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Where:** Go to "Repositories" → Click "Create Repository"</div><div style="color: #4b5563; font-size: 14px;">**Tip:** Click "Read this first!" on the Repositories page to learn about different repository types and performance.</div></div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 6px; padding: 10px; margin-top: 10px;"><div style="color: #1e40af; font-size: 14px;">**💡 Example:** Create an SSH repository pointing to <span style="background: #dbeafe; padding: 2px 6px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 13px;">ssh://user@server.com/var/backups/borg</span></div></div></td></tr></tbody></table>

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 52px; vertical-align: top;"><div style="width: 40px; height: 40px; border-radius: 999px; background: #f3e8ff; color: #9333ea; font-weight: 800; text-align: center; line-height: 40px;"><svg fill="none" height="20" stroke="#9333ea" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="vertical-align: middle; margin-top: 9px;" viewbox="0 0 24 24" width="20"> <circle cx="12" cy="12" r="10"></circle> <polyline points="12 6 12 12 16 14"></polyline> </svg></div></td><td style="vertical-align: top;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">Create a Schedule</div><div style="margin: 0 0 10px 0;">A **schedule** defines when backups should run. It uses cron syntax to specify the frequency (e.g., daily at 2 AM, weekly on Sundays, etc.).</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Where:** Go to "Schedules" → Click "Create Schedule"</div><div style="color: #4b5563; font-size: 14px;">**Tip:** You can reuse the same schedule for multiple backup jobs</div></div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 6px; padding: 10px; margin-top: 10px;"><div style="color: #1e40af; font-size: 14px;">**💡 Example:** Create a schedule with cron expression <span style="background: #dbeafe; padding: 2px 6px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 13px;">0 2 \* \* \*</span> (runs daily at 2:00 AM)</div></div></td></tr></tbody></table>

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 52px; vertical-align: top;"><div style="width: 40px; height: 40px; border-radius: 999px; background: #ffedd5; color: #ea580c; font-weight: 800; text-align: center; line-height: 40px;"><svg fill="none" height="20" stroke="#ea580c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="vertical-align: middle; margin-top: 9px;" viewbox="0 0 24 24" width="20"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path> <polyline points="14 2 14 8 20 8"></polyline> <line x1="16" x2="8" y1="13" y2="13"></line> <line x1="16" x2="8" y1="17" y2="17"></line> <polyline points="10 9 9 9 8 9"></polyline> </svg></div></td><td style="vertical-align: top;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">Create a Backup Job</div><div style="margin: 0 0 10px 0;">A **backup job** (or "backup") ties everything together. It specifies:</div>- What files/directories to backup (source paths)
- Which repository to use (destination)
- Which schedule to follow (when to run)
- Retention policies (how long to keep backups)
- Pre/post-backup commands (optional)

<div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Where:** Go to "Backups" → Click "Create Backup"</div><div style="color: #4b5563; font-size: 14px;">**Tip:** You can create multiple backup jobs using the same repository and schedule</div></div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 6px; padding: 10px; margin-top: 10px;"><div style="color: #1e40af; font-size: 14px;">**💡 Example:** Create a backup job that backs up <span style="background: #dbeafe; padding: 2px 6px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 13px;">/home</span> and <span style="background: #dbeafe; padding: 2px 6px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 13px;">/etc</span> to your SSH repository, running daily at 2 AM, keeping 7 daily, 4 weekly, and 12 monthly backups.</div></div></td></tr></tbody></table>

</div></div><div style="margin: 0 0 24px 0;"><div style="margin: 0 0 12px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="24" stroke="#111827" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path> <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path> </svg> </span> <span style="font-size: 24px; font-weight: 800; color: #111827; vertical-align: middle;">Key Terminology</span></div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px;"><tbody><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><svg fill="none" height="32" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="32"> <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Repository</div><div style="margin: 0 0 10px 0;">A **repository** is the storage location where all your backups are stored. It's like a "vault" that contains multiple backup archives.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Key points:**</div>- One repository can hold multiple backup jobs
- Repositories can be local, remote (SSH), or cloud (S3)
- Repositories are encrypted and deduplicated
- You need at least one repository before creating backups

</div></td></tr></tbody></table>

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><svg fill="none" height="32" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="32"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path> <polyline points="14 2 14 8 20 8"></polyline> <line x1="16" x2="8" y1="13" y2="13"></line> <line x1="16" x2="8" y1="17" y2="17"></line> <polyline points="10 9 9 9 8 9"></polyline> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Archive</div><div style="margin: 0 0 10px 0;">An **archive** is a single backup snapshot created at a specific point in time. Each time a backup runs, it creates a new archive in the repository.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Key points:**</div>- Each archive has a unique name (usually timestamp-based)
- Archives are incremental (only store changes)
- You can restore from any archive
- Old archives are pruned based on retention policies

</div></td></tr></tbody></table>

</td></tr><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><svg fill="none" height="32" stroke="#9333ea" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="32"> <circle cx="12" cy="12" r="10"></circle> <polyline points="12 6 12 12 16 14"></polyline> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Schedule</div><div style="margin: 0 0 10px 0;">A **schedule** defines when backups should run using cron syntax. It's reusable across multiple backup jobs.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Examples:**</div>- <span style="background: #dbeafe; padding: 2px 6px; border-radius: 4px;">0 2 \* \* \*</span> - Daily at 2:00 AM
- <span style="background: #dbeafe; padding: 2px 6px; border-radius: 4px;">0 0 \* \* 0</span> - Weekly on Sunday
- <span style="background: #dbeafe; padding: 2px 6px; border-radius: 4px;">0 \*/6 \* \* \*</span> - Every 6 hours

</div></td></tr></tbody></table>

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><svg fill="none" height="32" stroke="#ea580c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="32"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path> <polyline points="14 2 14 8 20 8"></polyline> <line x1="16" x2="8" y1="13" y2="13"></line> <line x1="16" x2="8" y1="17" y2="17"></line> <polyline points="10 9 9 9 8 9"></polyline> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Backup Job</div><div style="margin: 0 0 10px 0;">A **backup job** (or simply "backup") is a configuration that defines what to backup, where to store it, when to run, and retention policies.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Components:**</div>- Source paths (what to backup)
- Repository (where to store)
- Schedule (when to run)
- Retention policy (how long to keep)

</div></td></tr></tbody></table>

</td></tr></tbody></table>

</div><div style="margin: 0 0 24px 0;"><div style="margin: 0 0 12px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="24" stroke="#111827" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <rect height="8" rx="2" ry="2" width="20" x="2" y="2"></rect> <rect height="8" rx="2" ry="2" width="20" x="2" y="14"></rect> <line x1="6" x2="6.01" y1="6" y2="6"></line> <line x1="6" x2="6.01" y1="18" y2="18"></line> </svg> </span> <span style="font-size: 24px; font-weight: 800; color: #111827; vertical-align: middle;">Director &amp; Client Modes</span></div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 18px; margin: 0 0 14px 0;"><div style="color: #1e40af;">Borgmatic Director UI supports two operating modes: **Standalone** (default) and **Director/Client** (for managing multiple backup servers from a central location).</div></div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px; margin: 0 0 14px 0;"><tbody><tr><td style="width: 50%; vertical-align: top; background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><svg fill="none" height="32" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="32"> <rect height="8" rx="2" ry="2" width="20" x="2" y="2"></rect> <rect height="8" rx="2" ry="2" width="20" x="2" y="14"></rect> <line x1="6" x2="6.01" y1="6" y2="6"></line> <line x1="6" x2="6.01" y1="18" y2="18"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Standalone Mode</div><div style="margin: 0 0 10px 0;">**Default mode** - Each server runs Borgmatic Director UI independently. Perfect for single-server deployments.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Characteristics:**</div>- Single server deployment
- No network communication required
- Simple setup and management
- Best for small deployments

</div></td></tr></tbody></table>

</td><td style="width: 50%; vertical-align: top; background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><svg fill="none" height="32" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="32"> <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path> <circle cx="9" cy="7" r="4"></circle> <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path> <path d="M16 3.13a4 4 0 0 1 0 7.75"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Director/Client Mode</div><div style="margin: 0 0 10px 0;">**Centralized management** - One Director server manages multiple Client servers remotely.</div><div style="background: #f9fafb; border-radius: 6px; padding: 10px;"><div style="color: #4b5563; font-size: 14px;">**Characteristics:**</div>- Central management dashboard
- Multiple client servers
- Secure WebSocket connections
- Best for enterprise deployments

</div></td></tr></tbody></table>

</td></tr></tbody></table>

<div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 52px; vertical-align: top;"><div style="width: 40px; height: 40px; border-radius: 999px; background: #dbeafe; color: #2563eb; font-weight: 800; text-align: center; line-height: 40px;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="vertical-align: middle; margin-top: 9px;" viewbox="0 0 24 24" width="20"> <rect height="8" rx="2" ry="2" width="20" x="2" y="2"></rect> <rect height="8" rx="2" ry="2" width="20" x="2" y="14"></rect> <line x1="6" x2="6.01" y1="6" y2="6"></line> <line x1="6" x2="6.01" y1="18" y2="18"></line> </svg></div></td><td style="vertical-align: top;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">Director Mode</div><div style="margin: 0 0 10px 0;">The **Director** is the central management server that oversees multiple backup clients. It provides a unified dashboard to monitor and manage all connected clients.</div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 6px; padding: 14px;"><div style="color: #1e40af; font-size: 14px;">**Director Capabilities:**</div>- **Unified Dashboard:** View backup status across all clients
- **Remote Sessions:** Switch between clients to view their data
- **Template Management:** Create and deploy backup configurations to multiple clients
- **Centralized Reporting:** Aggregate statistics and logs from all clients
- **Client Management:** Monitor, approve, and manage connected clients

</div></td></tr></tbody></table>

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 52px; vertical-align: top;"><div style="width: 40px; height: 40px; border-radius: 999px; background: #dcfce7; color: #16a34a; font-weight: 800; text-align: center; line-height: 40px;"><svg fill="none" height="20" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="vertical-align: middle; margin-top: 9px;" viewbox="0 0 24 24" width="20"> <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path> <circle cx="9" cy="7" r="4"></circle> <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path> <path d="M16 3.13a4 4 0 0 1 0 7.75"></path> </svg></div></td><td style="vertical-align: top;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">Client Mode</div><div style="margin: 0 0 10px 0;">**Clients** are backup servers that connect to a Director. They execute backups locally and report status back to the Director via secure WebSocket connections.</div><div style="background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 6px; padding: 14px;"><div style="color: #166534; font-size: 14px;">**Client Capabilities:**</div>- **Secure Connection:** Connects to Director via encrypted WebSocket (wss://)
- **Local Execution:** Runs backups on the client server
- **Status Reporting:** Sends backup status, logs, and statistics to Director
- **Configuration Receipt:** Accepts backup templates deployed from Director
- **Automatic Reconnection:** Reconnects automatically if connection is lost

</div></td></tr></tbody></table>

</div><div style="background: #fefce8; border: 1px solid #fef08a; border-radius: 8px; padding: 18px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 32px; vertical-align: top; padding: 0;"><svg fill="none" height="24" stroke="#ca8a04" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">Security Architecture</div><div style="color: #374151; margin: 0 0 10px 0;">Director/Client mode uses cryptographic authentication to ensure secure communication:</div>1. **Connection Token:** Client connects with a shared connection token
2. **Challenge-Response:** Director sends a cryptographic challenge
3. **Digital Signature:** Client signs challenge with private key (Ed25519)
4. **Verification:** Director verifies signature with client's public key
5. **Approval:** Connection is approved or rejected

<div style="background: #fff; border: 1px solid #fef08a; border-radius: 6px; padding: 10px;"><div style="font-size: 12px; color: #4b5563;">**Protection:** Maximum 10 failed authentication attempts, then 1-hour lockout period to prevent brute-force attacks.</div></div></td></tr></tbody></table>

</div></div><div style="margin: 0 0 24px 0;"><div style="background: linear-gradient(to right,#eef2ff,#faf5ff); border: 1px solid #c7d2fe; border-radius: 8px; padding: 18px;"><div style="font-size: 20px; font-weight: bold; color: #312e81; margin: 0 0 14px 0;">Typical Workflow</div><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="vertical-align: middle; text-align: center; padding: 8px;"><div style="background: #fff; border: 1px solid #c7d2fe; border-radius: 8px; padding: 14px; display: inline-block;"><svg fill="none" height="32" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="display: block; margin: 0 auto 8px;" viewbox="0 0 24 24" width="32"> <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path> </svg><div style="font-weight: 600; color: #111827; font-size: 14px;">1. Repository</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Create storage location</div></div></td><td style="width: 32px; vertical-align: middle; text-align: center; padding: 8px;"><svg fill="none" height="24" stroke="#4f46e5" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <line x1="5" x2="19" y1="12" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline> </svg></td><td style="vertical-align: middle; text-align: center; padding: 8px;"><div style="background: #fff; border: 1px solid #c7d2fe; border-radius: 8px; padding: 14px; display: inline-block;"><svg fill="none" height="32" stroke="#9333ea" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="display: block; margin: 0 auto 8px;" viewbox="0 0 24 24" width="32"> <circle cx="12" cy="12" r="10"></circle> <polyline points="12 6 12 12 16 14"></polyline> </svg><div style="font-weight: 600; color: #111827; font-size: 14px;">2. Schedule</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Define when to run</div></div></td><td style="width: 32px; vertical-align: middle; text-align: center; padding: 8px;"><svg fill="none" height="24" stroke="#4f46e5" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <line x1="5" x2="19" y1="12" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline> </svg></td><td style="vertical-align: middle; text-align: center; padding: 8px;"><div style="background: #fff; border: 1px solid #c7d2fe; border-radius: 8px; padding: 14px; display: inline-block;"><svg fill="none" height="32" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="display: block; margin: 0 auto 8px;" viewbox="0 0 24 24" width="32"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path> <polyline points="14 2 14 8 20 8"></polyline> <line x1="16" x2="8" y1="13" y2="13"></line> <line x1="16" x2="8" y1="17" y2="17"></line> <polyline points="10 9 9 9 8 9"></polyline> </svg><div style="font-weight: 600; color: #111827; font-size: 14px;">3. Backup Job</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Configure what to backup</div></div></td><td style="width: 32px; vertical-align: middle; text-align: center; padding: 8px;"><svg fill="none" height="24" stroke="#4f46e5" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <line x1="5" x2="19" y1="12" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline> </svg></td><td style="vertical-align: middle; text-align: center; padding: 8px;"><div style="background: #fff; border: 1px solid #c7d2fe; border-radius: 8px; padding: 14px; display: inline-block;"><svg fill="none" height="32" stroke="#ea580c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="display: block; margin: 0 auto 8px;" viewbox="0 0 24 24" width="32"> <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon> </svg><div style="font-weight: 600; color: #111827; font-size: 14px;">4. Automatic</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Backups run automatically</div></div></td></tr></tbody></table>

</div></div></div>

# Repository Guide

<div id="bkmrk-" style="font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif; line-height: 1.6; color: #374151; background: #fff; max-width: 1200px; margin: 0 auto; padding: 24px;"><div style="margin-bottom: 24px;">  
</div></div># Repository Types &amp; Performance Guide

<div id="bkmrk-understand-the-diffe" style="font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif; line-height: 1.6; color: #374151; background: #fff; max-width: 1200px; margin: 0 auto; padding: 24px;"><div style="margin-bottom: 24px;"><div style="color: #4b5563; font-size: 14px;">Understand the differences between repository types and choose the best option for your needs</div></div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 18px; margin: 0 0 24px 0;"><div style="margin: 0 0 8px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="20" stroke="#1e3a8a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path> </svg> </span> <span style="font-size: 20px; font-weight: bold; color: #1e3a8a; vertical-align: middle;">About Repositories in Borgmatic Director UI</span></div><div style="color: #1e40af; margin-top: 8px;">A **repository** is where your backups are stored. Borgmatic Director UI supports multiple repository types, each with different performance characteristics. The choice of repository type significantly impacts backup speed, resource usage, and reliability. Understanding these differences helps you make informed decisions for your backup strategy.</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px; margin-top: 14px;"><tbody><tr><td style="width: 50%; vertical-align: top; background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px;"><div style="font-size: 16px; font-weight: bold; color: #1e3a8a; margin: 0 0 8px 0;">Direct Mode</div><div style="color: #1e40af; font-size: 14px;">Borg writes directly to the remote storage. This is the fastest method as there's no intermediate step.</div></td><td style="width: 50%; vertical-align: top; background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px;"><div style="font-size: 16px; font-weight: bold; color: #1e3a8a; margin: 0 0 8px 0;">Sync Mode</div><div style="color: #1e40af; font-size: 14px;">Borg writes locally first, then a sync tool (like Rclone) copies to cloud. This adds overhead and delay.</div></td></tr></tbody></table>

</div><div style="margin: 0 0 24px 0;"><div style="margin: 0 0 12px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="24" stroke="#111827" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path> </svg> </span> <span style="font-size: 24px; font-weight: 800; color: #111827; vertical-align: middle;">Performance Comparison</span></div><div style="overflow-x: auto;"><table style="width: 100%; border-collapse: collapse; border: 1px solid #d1d5db;"><thead><tr style="background: #f9fafb;"><th style="padding: 12px 16px; text-align: left; font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; color: #374151; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb;">Repository Type</th><th style="padding: 12px 16px; text-align: center; font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; color: #374151; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb;">Speed Rating</th><th style="padding: 12px 16px; text-align: center; font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; color: #374151; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb;">Storage Mode</th><th style="padding: 12px 16px; text-align: left; font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; color: #374151; border-bottom: 1px solid #e5e7eb;">Best Use Case</th></tr></thead><tbody><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <line x1="22" x2="2" y1="12" y2="12"></line> <path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"> </path> <line x1="6" x2="6.01" y1="16" y2="16"></line> <line x1="10" x2="10.01" y1="16" y2="16"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">Local Filesystem</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Direct filesystem access on the same machine or fast local network</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #f0fdf4; color: #16a34a;">Fastest</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 100%; height: 100%; background: #22c55e; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">100%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Direct</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">Same machine backups, fast local network storage <div style="font-size: 12px; color: #dc2626; font-weight: 500; margin-top: 8px;">⚠️ Not recommended due to potential data loss in case of disk crash or malicious attacks</div></td></tr><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">SSH (Native Borg)</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Borg's native SSH protocol with optimized deduplication and compression</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #f0fdf4; color: #16a34a;">Very Fast</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 90%; height: 100%; background: #22c55e; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">90%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Direct</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">Remote servers with Borg installed, production backups</td></tr><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">S3 Direct (Native)</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Borg's native S3 support using boto3, optimized for cloud object storage</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #eff6ff; color: #2563eb;">Fast</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 75%; height: 100%; background: #3b82f6; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">75%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Direct</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">Cloud storage (AWS, Hetzner, Wasabi, Backblaze B2, MinIO)</td></tr><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#ca8a04" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <rect height="6" rx="1" width="6" x="16" y="16"></rect> <rect height="6" rx="1" width="6" x="2" y="16"></rect> <rect height="6" rx="1" width="6" x="9" y="2"></rect> <path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path> <line x1="12" x2="12" y1="12" y2="8"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">SFTP</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">SSH-based file transfer protocol, works without Borg on remote</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #fff7ed; color: #ea580c;">Moderate</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 60%; height: 100%; background: #f97316; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">60%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Direct</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">Remote servers without Borg installed</td></tr><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#ea580c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <rect height="6" rx="1" width="6" x="16" y="16"></rect> <rect height="6" rx="1" width="6" x="2" y="16"></rect> <rect height="6" rx="1" width="6" x="9" y="2"></rect> <path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path> <line x1="12" x2="12" y1="12" y2="8"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">Rclone Direct (Mounted)</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Rclone FUSE mount for 100+ cloud providers</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #fff7ed; color: #ea580c;">Moderate-Slow</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 50%; height: 100%; background: #f97316; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">50%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Direct (FUSE)</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">Cloud providers not natively supported (Google Drive, Dropbox, etc.)</td></tr><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#ea580c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <rect height="6" rx="1" width="6" x="16" y="16"></rect> <rect height="6" rx="1" width="6" x="2" y="16"></rect> <rect height="6" rx="1" width="6" x="9" y="2"></rect> <path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path> <line x1="12" x2="12" y1="12" y2="8"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">Network Mounts (NFS/SMB)</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Network filesystems like NFS, SMB/CIFS</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #fff7ed; color: #ea580c;">Slow</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 45%; height: 100%; background: #f97316; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">45%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Direct (mount)</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">Existing network storage infrastructure</td></tr><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#dc2626" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">S3 Sync Mode</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Write locally first, then sync to S3 using Rclone</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #fef2f2; color: #dc2626;">Slow</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 40%; height: 100%; background: #ef4444; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">40%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Sync</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">When S3 direct mode is not available</td></tr><tr style="background: #fff;"><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 28px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#dc2626" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <rect height="6" rx="1" width="6" x="16" y="16"></rect> <rect height="6" rx="1" width="6" x="2" y="16"></rect> <rect height="6" rx="1" width="6" x="9" y="2"></rect> <path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path> <line x1="12" x2="12" y1="12" y2="8"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: 500; color: #111827;">Rclone Sync Mode</div><div style="font-size: 12px; color: #4b5563; margin-top: 4px;">Write locally first, then sync to cloud</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="text-align: center;"><div style="display: inline-block; padding: 4px 8px; border-radius: 4px; font-size: 14px; font-weight: 600; background: #fef2f2; color: #dc2626;">Slowest</div><div style="width: 100px; height: 8px; background: #e5e7eb; border-radius: 9999px; margin: 8px auto 0; overflow: hidden;"><div style="width: 35%; height: 100%; background: #ef4444; border-radius: 9999px;">  
</div></div><div style="font-size: 12px; color: #6b7280; margin-top: 4px;">35%</div></td></tr></tbody></table>

</td><td style="padding: 16px; border-right: 1px solid #d1d5db; border-bottom: 1px solid #e5e7eb; vertical-align: top; text-align: center;">Sync</td><td style="padding: 16px; border-bottom: 1px solid #e5e7eb; vertical-align: top;">When direct mounting is not possible</td></tr></tbody></table>

</div></div><div style="margin: 0 0 24px 0;"><div style="margin: 0 0 12px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="24" stroke="#111827" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path> <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path> </svg> </span> <span style="font-size: 24px; font-weight: 800; color: #111827; vertical-align: middle;">Detailed Explanations</span></div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 18px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 56px; vertical-align: top; padding: 0;"><div style="background: #dcfce7; padding: 12px; border-radius: 8px;"><svg fill="none" height="24" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <line x1="22" x2="2" y1="12" y2="12"></line> <path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"> </path> </svg></div></td><td style="vertical-align: top; padding: 0 0 0 16px;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">Local Filesystem</div><div style="margin: 0 0 14px 0;">Direct filesystem access on the same machine or fast local network</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px;"><tbody><tr><td style="width: 50%; vertical-align: top;"><div style="color: #15803d; font-weight: bold; margin: 0 0 8px 0;">✓ Advantages</div>- Fastest performance
- No network overhead
- Lowest latency
- Simple setup

</td><td style="width: 50%; vertical-align: top;"><div style="color: #dc2626; font-weight: bold; margin: 0 0 8px 0;">✗ Limitations</div>- Requires local storage
- No off-site backup
- Vulnerable to local disasters

</td></tr></tbody></table>

</td></tr></tbody></table>

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 18px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 56px; vertical-align: top; padding: 0;"><div style="background: #dcfce7; padding: 12px; border-radius: 8px;"><svg fill="none" height="24" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon> </svg></div></td><td style="vertical-align: top; padding: 0 0 0 16px;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">SSH (Native Borg)</div><div style="margin: 0 0 14px 0;">Borg's native SSH protocol with optimized deduplication and compression</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px;"><tbody><tr><td style="width: 50%; vertical-align: top;"><div style="color: #15803d; font-weight: bold; margin: 0 0 8px 0;">✓ Advantages</div>- Highly optimized
- Native Borg protocol
- Efficient deduplication
- Secure

</td><td style="width: 50%; vertical-align: top;"><div style="color: #dc2626; font-weight: bold; margin: 0 0 8px 0;">✗ Limitations</div>- Requires Borg on remote server
- Needs SSH access

</td></tr></tbody></table>

</td></tr></tbody></table>

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 18px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 56px; vertical-align: top; padding: 0;"><div style="background: #dbeafe; padding: 12px; border-radius: 8px;"><svg fill="none" height="24" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"></path> </svg></div></td><td style="vertical-align: top; padding: 0 0 0 16px;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">S3 Direct (Native)</div><div style="margin: 0 0 14px 0;">Borg's native S3 support using boto3, optimized for cloud object storage</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px;"><tbody><tr><td style="width: 50%; vertical-align: top;"><div style="color: #15803d; font-weight: bold; margin: 0 0 8px 0;">✓ Advantages</div>- Native S3 support
- Optimized for cloud
- Scalable
- Works with many providers

</td><td style="width: 50%; vertical-align: top;"><div style="color: #dc2626; font-weight: bold; margin: 0 0 8px 0;">✗ Limitations</div>- Network latency
- S3 API overhead
- Costs per request

</td></tr></tbody></table>

</td></tr></tbody></table>

</div><div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 18px; margin: 0 0 14px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 56px; vertical-align: top; padding: 0;"><div style="background: #fef9c3; padding: 12px; border-radius: 8px;"><svg fill="none" height="24" stroke="#ca8a04" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <rect height="6" rx="1" width="6" x="16" y="16"></rect> <rect height="6" rx="1" width="6" x="2" y="16"></rect> <rect height="6" rx="1" width="6" x="9" y="2"></rect> <path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path> <line x1="12" x2="12" y1="12" y2="8"></line> </svg></div></td><td style="vertical-align: top; padding: 0 0 0 16px;"><div style="font-size: 18px; font-weight: 800; color: #111827; margin: 0 0 6px 0;">SFTP</div><div style="margin: 0 0 14px 0;">SSH-based file transfer protocol, slower than native SSH but works without Borg on remote</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px;"><tbody><tr><td style="width: 50%; vertical-align: top;"><div style="color: #15803d; font-weight: bold; margin: 0 0 8px 0;">✓ Advantages</div>- Works without Borg on remote
- Secure
- Standard protocol

</td><td style="width: 50%; vertical-align: top;"><div style="color: #dc2626; font-weight: bold; margin: 0 0 8px 0;">✗ Limitations</div>- Protocol overhead
- Slower than native SSH
- Less optimized

</td></tr></tbody></table>

</td></tr></tbody></table>

</div></div><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 18px; margin: 0 0 24px 0;"><div style="margin: 0 0 14px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="24" stroke="#1e3a8a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <line x1="5" x2="19" y1="12" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline> </svg> </span> <span style="font-size: 20px; font-weight: bold; color: #1e3a8a; vertical-align: middle;">Quick Decision Guide</span></div><div style="background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px; margin: 0 0 10px 0;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Choose SSH (Native) if:</div>- You have a remote server with Borg installed
- You want the fastest remote backup performance
- You need production-grade reliability
- You have SSH access to the remote server

</div><div style="background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px; margin: 0 0 10px 0;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Choose S3 Direct if:</div>- You're using cloud object storage (AWS, Hetzner, Wasabi, etc.)
- You want native cloud integration
- You need scalable storage

</div><div style="background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px; margin: 0 0 10px 0;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Choose Rclone Direct (Mounted) if:</div>- You need providers not natively supported (Google Drive, Dropbox, etc.)
- You can accept moderate performance
- You need unified access to multiple providers

</div><div style="background: #fff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 14px;"><div style="font-size: 16px; font-weight: bold; color: #111827; margin: 0 0 8px 0;">Avoid Sync Mode if possible:</div>- It's the slowest option due to double write overhead
- Requires local storage space
- Adds complexity and potential failure points

</div></div><div style="background: #fefce8; border: 1px solid #fef08a; border-radius: 8px; padding: 18px;"><div style="margin: 0 0 12px 0;"><span style="vertical-align: middle; display: inline-block; margin-right: 8px;"> <svg fill="none" height="24" stroke="#713f12" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon> </svg> </span> <span style="font-size: 20px; font-weight: bold; color: #713f12; vertical-align: middle;">Performance Tips</span></div>- **SSH is fastest:** If you have a remote server, SSH (native Borg) is almost always the fastest option
- **Direct beats Sync:** Always prefer direct mode over sync mode when possible
- **Avoid double writes:** Sync mode writes data twice (locally + cloud), significantly slowing backups
- **Compression helps:** Enable compression (LZ4) to reduce data transfer over network
- **Deduplication is key:** Borg's deduplication works best with direct protocols like SSH

</div></div>

# Introduction Help

<div id="bkmrk-intro-help-%26-documen" style="font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif; line-height: 1.6; color: #374151; background: #fff; max-width: 1200px; margin: 0 auto; padding: 24px;"><div style="margin-bottom: 24px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><svg fill="none" height="32" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="32"> <circle cx="12" cy="12" r="10"></circle> <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path> <line x1="12" x2="12.01" y1="17" y2="17"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"># Intro Help &amp; Documentation

<div style="color: #4b5563; font-size: 14px;">Learn how to use Borgmatic Director UI to manage your backups</div></td></tr></tbody></table>

</div><div style="background: linear-gradient(to right,#eff6ff,#eef2ff); border: 1px solid #bfdbfe; border-radius: 8px; padding: 16px; margin: 0 0 24px 0;"><div style="font-weight: bold; color: #1e3a8a; margin: 0 0 12px 0;">Quick Links</div><div style="display: flex; flex-wrap: wrap; gap: 8px;">[ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <circle cx="12" cy="12" r="10"></circle> <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path> <line x1="12" x2="12.01" y1="17" y2="17"></line> </svg> Overview ](#bkmrk-overview---what-is-b) [ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <rect height="8" rx="2" ry="2" width="20" x="2" y="2"></rect> <rect height="8" rx="2" ry="2" width="20" x="2" y="14"></rect> <line x1="6" x2="6.01" y1="6" y2="6"></line> <line x1="6" x2="6.01" y1="18" y2="18"></line> </svg> Operating Modes ](#bkmrk-operating-modes-borg) [ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path> <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> Connecting Client ](#bkmrk-connecting-a-client-) [ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path> </svg> Repositories ](#bkmrk-setting-up-repositor) [ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path> <polyline points="14 2 14 8 20 8"></polyline> <line x1="16" x2="8" y1="13" y2="13"></line> <line x1="16" x2="8" y1="17" y2="17"></line> <polyline points="10 9 9 9 8 9"></polyline> </svg> Backup Jobs ](#bkmrk-creating-backup-jobs) [ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <circle cx="12" cy="12" r="10"></circle> <polyline points="12 6 12 12 16 14"></polyline> </svg> Schedules ](#bkmrk-setting-up-schedules) [ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path> <polyline points="7 10 12 15 17 10"></polyline> <line x1="12" x2="12" y1="15" y2="3"></line> </svg> Restore ](#bkmrk-viewing-and-restorin) [ <svg fill="none" height="12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="margin-right: 4px;" viewbox="0 0 24 24" width="12"> <circle cx="12" cy="12" r="3"></circle> <path d="M12 1v6m0 6v6m9-9h-6m-6 0H3"></path> </svg> Settings ](#bkmrk-settings-overview-th)</div></div><details id="bkmrk-overview---what-is-b" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <circle cx="12" cy="12" r="10"></circle> <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path> <line x1="12" x2="12.01" y1="17" y2="17"></line> </svg> <span style="font-weight: bold; color: #111827;">Overview - What is Borgmatic UI?</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

**Borgmatic UI** is a web-based interface for managing{' '} [BorgBackup](https://www.borgbackup.org/){' '} through{' '} [Borgmatic](https://torsion.org/borgmatic/). It provides an intuitive interface for configuring backups, managing repositories, scheduling automated backups, and restoring files.

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #1e3a8a; margin: 0 0 8px 0;">Key Features</div>- Create and manage backup jobs with an easy-to-use wizard
- Configure repositories (local, SSH, SFTP, S3, Rclone)
- Schedule automated backups with cron-like scheduling
- Browse and restore files from any backup archive
- Multi-node management with Director mode
- Real-time backup monitoring and logging

</div></div></div></details><details id="bkmrk-operating-modes-borg" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <rect height="8" rx="2" ry="2" width="20" x="2" y="2"></rect> <rect height="8" rx="2" ry="2" width="20" x="2" y="14"></rect> <line x1="6" x2="6.01" y1="6" y2="6"></line> <line x1="6" x2="6.01" y1="18" y2="18"></line> </svg> <span style="font-weight: bold; color: #111827;">Operating Modes</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

Borgmatic UI can operate in two main modes, depending on your needs:

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px; margin: 0 0 16px 0;"><tbody><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 32px; vertical-align: top; padding: 0;"><svg fill="none" height="24" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <rect height="8" rx="2" ry="2" width="20" x="2" y="2"></rect> <rect height="8" rx="2" ry="2" width="20" x="2" y="14"></rect> <line x1="6" x2="6.01" y1="6" y2="6"></line> <line x1="6" x2="6.01" y1="18" y2="18"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; font-size: 18px; color: #111827; margin: 0 0 8px 0;">Client / Standalone Mode</div>Run Borgmatic UI on a single machine to manage its local backups. This is the default mode and is perfect for individual servers or workstations.

<div style="background: #f0fdf4; padding: 12px; border-radius: 6px; font-size: 14px;">**Use when:**- You have a single server to back up
- You want a simple, self-contained backup solution
- You don't need centralized management

</div><div style="margin-top: 12px; font-size: 14px; color: #6b7280;">**Note:** A standalone instance can later connect to a Director to become a managed client.</div></td></tr></tbody></table>

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 32px; vertical-align: top; padding: 0;"><svg fill="none" height="24" stroke="#9333ea" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24"> <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path> <circle cx="9" cy="7" r="4"></circle> <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path> <path d="M16 3.13a4 4 0 0 1 0 7.75"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; font-size: 18px; color: #111827; margin: 0 0 8px 0;">Director Mode</div>A central management server that can monitor and control multiple client instances. The Director doesn't run backups itself – it manages others.

<div style="background: #faf5ff; padding: 12px; border-radius: 6px; font-size: 14px;">**Use when:**- You have multiple servers to back up
- You want centralized monitoring and control
- You need to manage backups across your infrastructure

</div><div style="margin-top: 12px; font-size: 14px; color: #6b7280;">**Features:** Client management, templates, deployments, centralized passphrase vault.</div></td></tr></tbody></table>

</td></tr></tbody></table>

<div style="background: #fefce8; border: 1px solid #fef08a; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 24px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#ca8a04" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <circle cx="12" cy="12" r="10"></circle> <line x1="12" x2="12" y1="8" y2="12"></line> <line x1="12" x2="12.01" y1="16" y2="16"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; color: #854d0e; margin: 0 0 4px 0;">Choosing Your Mode</div>You choose the operating mode during initial setup. The mode can be changed later in **Settings → Operating Mode**, but this will reset mode-specific configurations.

</td></tr></tbody></table>

</div></div></div></details><details id="bkmrk-connecting-a-client-" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path> <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> <span style="font-weight: bold; color: #111827;">Connecting a Client to a Director</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

To connect a Client (or Standalone instance) to a Director for centralized management:

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dbeafe; color: #2563eb; font-weight: 800; text-align: center; line-height: 32px;">1</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; color: #111827; margin: 0 0 4px 0;">On the Director: Get Connection Details</div>In the Director's **Settings → Connection Configuration**, find or create a **Connection Token**. Also note the Director's URL (e.g., <span style="background: #f3f4f6; padding: 2px 6px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 13px;">https://director.example.com:8000</span>).

</td></tr></tbody></table>

</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dbeafe; color: #2563eb; font-weight: 800; text-align: center; line-height: 32px;">2</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; color: #111827; margin: 0 0 4px 0;">On the Client: Configure Connection</div>Go to **Settings → Client Configuration**. Enter:

- **Client Name:** A friendly name for this client (e.g., "Web Server 1")
- **Director URL:** The full URL including port (use <span style="background: #f3f4f6; padding: 2px 6px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 13px;">https://</span>)
- **Connection Token:** The token from the Director (leave empty if open access)

</td></tr></tbody></table>

</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dbeafe; color: #2563eb; font-weight: 800; text-align: center; line-height: 32px;">3</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; color: #111827; margin: 0 0 4px 0;">Save and Connect</div>Click **Save Configuration**, then **Test Connection** to verify, and finally **Connect** to establish the connection.

</td></tr></tbody></table>

</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dcfce7; color: #16a34a; text-align: center; line-height: 32px;"><svg fill="none" height="20" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" style="vertical-align: middle; margin-top: 5px;" viewbox="0 0 24 24" width="20"> <polyline points="20 6 9 17 4 12"></polyline> </svg></div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; color: #16a34a; margin: 0 0 4px 0;">Connected!</div>Once connected, the client will appear in the Director's dashboard and can be managed remotely. The connection uses WebSocket over SSL for real-time communication.

</td></tr></tbody></table>

</div><div style="background: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Troubleshooting Connection Issues</div>- **Connection refused:** Ensure the Director is running and the URL is correct (including https://)
- **Invalid token:** Double-check the connection token matches exactly
- **SSL errors:** Director mode automatically uses HTTPS – make sure to use https:// in the URL
- **Firewall:** Ensure port 8000 (default) is open between client and Director

</div></div></div></details><details id="bkmrk-switching-between-cl" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="23 4 23 10 17 10"></polyline> <polyline points="1 20 1 14 7 14"></polyline> <path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path> </svg> <span style="font-weight: bold; color: #111827;">Switching Between Clients (Director Mode)</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

When logged into a Director, you can switch between viewing the Director's own interface and any connected client's interface.

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="background: #faf5ff; border: 1px solid #e9d5ff; border-radius: 8px; padding: 16px; margin: 0 0 16px 0;"><div style="font-weight: bold; color: #7c3aed; margin: 0 0 8px 0;">Using the Client Selector</div></div></div></div>In the top navigation bar, you'll see a dropdown showing **"Director"** or the currently selected client's name. Click it to:

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="background: #faf5ff; border: 1px solid #e9d5ff; border-radius: 8px; padding: 16px; margin: 0 0 16px 0;">- Switch to **Director** - View the Director dashboard with all connected clients
- Switch to a **Client** - View that client's backups, schedules, and settings as if you were logged in directly

</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px; margin: 0 0 16px 0;"><tbody><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 20px; vertical-align: top; padding: 0;"><svg fill="none" height="16" stroke="#9333ea" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="16"> <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path> <circle cx="9" cy="7" r="4"></circle> <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path> <path d="M16 3.13a4 4 0 0 1 0 7.75"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Director View</div>- See all connected clients
- Manage templates and deployments
- Configure the vault for passphrases
- View aggregated statistics

</td></tr></tbody></table>

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 20px; vertical-align: top; padding: 0;"><svg fill="none" height="16" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="16"> <rect height="8" rx="2" ry="2" width="20" x="2" y="2"></rect> <rect height="8" rx="2" ry="2" width="20" x="2" y="14"></rect> <line x1="6" x2="6.01" y1="6" y2="6"></line> <line x1="6" x2="6.01" y1="18" y2="18"></line> </svg></td><td style="vertical-align: top; padding: 0 0 0 8px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Client View</div>- Manage backup jobs
- View/restore archives
- Configure schedules
- Edit repositories

</td></tr></tbody></table>

</td></tr></tbody></table>

<div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #1e3a8a; margin: 0 0 8px 0;">Quick Access from Dashboard</div></div></div></div>In the Director Dashboard, each connected client has a **"View"** button. Clicking it switches to that client's view and highlights the dropdown selector so you know where to switch back.

</details><details id="bkmrk-setting-up-repositor" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path> </svg> <span style="font-weight: bold; color: #111827;">Setting Up Repositories</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

A **repository** is where your backup data is stored. Before creating backup jobs, you need to set up at least one repository.

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="font-weight: bold; color: #111827; margin: 0 0 12px 0;">Supported Repository Types</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px; margin: 0 0 16px 0;"><tbody><tr><td style="width: 33.33%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Local</div><div style="font-size: 12px; color: #6b7280;">Backup to a local directory or mounted drive</div></td><td style="width: 33.33%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">SSH/SFTP</div><div style="font-size: 12px; color: #6b7280;">Backup to a remote server via SSH</div></td><td style="width: 33.33%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Borg Server</div><div style="font-size: 12px; color: #6b7280;">Connect to a dedicated Borg backup server</div></td></tr><tr><td style="width: 33.33%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">S3/MinIO</div><div style="font-size: 12px; color: #6b7280;">Amazon S3 or compatible object storage</div></td><td style="width: 33.33%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Rclone</div><div style="font-size: 12px; color: #6b7280;">Use Rclone for cloud storage (Google Drive, Dropbox, etc.)</div></td><td> </td></tr></tbody></table>

<div style="font-weight: bold; color: #111827; margin: 0 0 12px 0;">Creating a Repository</div>1. Go to **Repositories** in the sidebar
2. Click **Add Repository**
3. Select the repository type and fill in the details: 
    - **Name:** A friendly name for reference
    - **Path/URL:** Where the repository will be stored
    - **Encryption:** Choose encryption mode (repokey-blake2 recommended)
    - **Passphrase:** A strong password to encrypt your backups
4. Click **Create &amp; Initialize** to create the repository

<div style="background: #fef2f2; border: 1px solid #fecaca; border-radius: 8px; padding: 16px; margin-top: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 24px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#dc2626" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: bold; color: #991b1b; margin: 0 0 4px 0;">Important: Save Your Passphrase!</div>The repository passphrase is required to access your backups. If you lose it, your backup data will be **permanently inaccessible**. Store it securely (e.g., in a password manager).

</td></tr></tbody></table>

</div></div></div></details><details id="bkmrk-creating-backup-jobs" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path> <polyline points="14 2 14 8 20 8"></polyline> <line x1="16" x2="8" y1="13" y2="13"></line> <line x1="16" x2="8" y1="17" y2="17"></line> <polyline points="10 9 9 9 8 9"></polyline> </svg> <span style="font-weight: bold; color: #111827;">Creating Backup Jobs</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

A **backup job** defines what to back up and where. Each job specifies source directories, a target repository, and optional exclusions.

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="font-weight: bold; color: #111827; margin: 0 0 12px 0;">Creating a Backup Job</div>1. Go to **Backup Jobs** in the sidebar
2. Click **Create Backup Job**
3. Fill in the backup configuration: 
    - **Job Name:** A descriptive name (e.g., "Daily Website Backup")
    - **Source Directories:** Paths to back up (e.g., /var/www, /home)
    - **Repository:** Select a configured repository
    - **Exclusions:** Patterns to exclude (e.g., \*.log, node\_modules/)
4. Click **Save** to create the job

<div style="font-weight: bold; color: #111827; margin: 16px 0 12px 0;">Running Backups</div><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px; margin: 0 0 16px 0;"><tbody><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 24px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#16a34a" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polygon points="5 3 19 12 5 21 5 3"></polygon> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Manual Backup</div>Click the **Run Now** button on any backup job to start an immediate backup. Progress is shown in real-time.

</td></tr></tbody></table>

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 24px; vertical-align: top; padding: 0;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <circle cx="12" cy="12" r="10"></circle> <polyline points="12 6 12 12 16 14"></polyline> </svg></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Scheduled Backup</div>Set up a schedule (see next section) to run backups automatically at specified times.

</td></tr></tbody></table>

</td></tr></tbody></table>

<div style="background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #1e3a8a; margin: 0 0 8px 0;">Backup Archives</div></div></div></div>Each time a backup runs, it creates an **archive** – a point-in-time snapshot. Borg uses deduplication, so subsequent backups only store changed data, making them fast and space-efficient.

</details><details id="bkmrk-setting-up-schedules" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <circle cx="12" cy="12" r="10"></circle> <polyline points="12 6 12 12 16 14"></polyline> </svg> <span style="font-weight: bold; color: #111827;">Setting Up Schedules</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

**Schedules** automate your backups by running them at specified times. You can create multiple schedules for different backup jobs.

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="font-weight: bold; color: #111827; margin: 0 0 12px 0;">Creating a Schedule</div>1. Go to **Schedules** in the sidebar
2. Click **Add Schedule**
3. Configure the schedule: 
    - **Backup Job:** Select which job to run
    - **Frequency:** Daily, Weekly, Monthly, or Custom (cron)
    - **Time:** When to run the backup
    - **Days:** For weekly schedules, select which days
4. Click **Save** to activate the schedule

<div style="font-weight: bold; color: #111827; margin: 16px 0 12px 0;">Schedule Examples</div><div style="background: #f9fafb; border-radius: 8px; padding: 16px;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="padding: 8px 0; font-size: 14px; color: #4b5563;">Daily at 2:00 AM</td><td style="padding: 8px 0; text-align: right;"><span style="background: #e5e7eb; padding: 4px 8px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 12px;">0 2 \* \* \*</span></td></tr><tr><td style="padding: 8px 0; font-size: 14px; color: #4b5563;">Every Sunday at midnight</td><td style="padding: 8px 0; text-align: right;"><span style="background: #e5e7eb; padding: 4px 8px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 12px;">0 0 \* \* 0</span></td></tr><tr><td style="padding: 8px 0; font-size: 14px; color: #4b5563;">Every 6 hours</td><td style="padding: 8px 0; text-align: right;"><span style="background: #e5e7eb; padding: 4px 8px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 12px;">0 \*/6 \* \* \*</span></td></tr><tr><td style="padding: 8px 0; font-size: 14px; color: #4b5563;">First of every month at 3 AM</td><td style="padding: 8px 0; text-align: right;"><span style="background: #e5e7eb; padding: 4px 8px; border-radius: 4px; font-family: 'Courier New',monospace; font-size: 12px;">0 3 1 \* \*</span></td></tr></tbody></table>

</div><div style="background: #fefce8; border: 1px solid #fef08a; border-radius: 8px; padding: 16px; margin-top: 16px;"><div style="font-weight: bold; color: #854d0e; margin: 0 0 8px 0;">Best Practices</div>- Run backups during low-activity periods (e.g., night)
- Stagger multiple backup jobs to avoid resource contention
- For critical data, consider running backups multiple times per day
- Monitor backup logs to ensure schedules are running successfully

</div></div></div></details><details id="bkmrk-viewing-and-restorin" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path> <polyline points="7 10 12 15 17 10"></polyline> <line x1="12" x2="12" y1="15" y2="3"></line> </svg> <span style="font-weight: bold; color: #111827;">Viewing and Restoring Archives</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

The **View/Restore** page lets you browse your backup archives and restore files when needed.

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><div style="font-weight: bold; color: #111827; margin: 0 0 12px 0;">Browsing Archives</div>1. Go to **View/Restore** in the sidebar
2. You'll see a list of your repositories
3. Click on a repository to expand it and see archives grouped by backup job
4. Each archive shows: 
    - Creation date and time
    - Size (original and deduplicated)
    - Number of files

<div style="font-weight: bold; color: #111827; margin: 16px 0 12px 0;">Restoring Files</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dcfce7; color: #16a34a; font-weight: 800; text-align: center; line-height: 32px;">1</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Select an Archive</div>Click the **View** button on the archive you want to restore from.

</td></tr></tbody></table>

</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dcfce7; color: #16a34a; font-weight: 800; text-align: center; line-height: 32px;">2</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Browse Files</div>Navigate through the archive's directory structure to find the files you need.

</td></tr></tbody></table>

</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dcfce7; color: #16a34a; font-weight: 800; text-align: center; line-height: 32px;">3</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Select Files to Restore</div>Check the files or directories you want to restore. You can select individual files or entire folders.

</td></tr></tbody></table>

</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dcfce7; color: #16a34a; font-weight: 800; text-align: center; line-height: 32px;">4</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Choose Restore Location</div>Specify where to restore the files:

- **Original location:** Restore files to their original paths
- **Custom location:** Restore to a different directory

</td></tr></tbody></table>

</div><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="width: 40px; vertical-align: top; padding: 0;"><div style="width: 32px; height: 32px; border-radius: 999px; background: #dcfce7; color: #16a34a; font-weight: 800; text-align: center; line-height: 32px;">5</div></td><td style="vertical-align: top; padding: 0 0 0 12px;"><div style="font-weight: 600; color: #111827; margin: 0 0 4px 0;">Start Restore</div>Click **Restore** and wait for the process to complete. Progress is shown in real-time.

</td></tr></tbody></table>

</div><div style="background: #fefce8; border: 1px solid #fef08a; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #854d0e; margin: 0 0 8px 0;">Restore Tips</div>- Restoring to the original location will overwrite existing files
- For safety, consider restoring to a temporary location first
- Large restores may take time – don't close the browser window
- Check file permissions after restore if needed

</div></div></div></details><details id="bkmrk-settings-overview-th" style="background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; margin: 0 0 12px 0; overflow: hidden;"><summary style="display: flex; align-items: center; justify-content: space-between; padding: 16px; cursor: pointer; list-style: none;"><svg fill="none" height="20" stroke="#2563eb" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <circle cx="12" cy="12" r="3"></circle> <path d="M12 1v6m0 6v6m9-9h-6m-6 0H3"></path> </svg> <span style="font-weight: bold; color: #111827;">Settings Overview</span><svg fill="none" height="20" stroke="#9ca3af" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="20"> <polyline points="6 9 12 15 18 9"></polyline> </svg></summary>

The **Settings** page contains various configuration options depending on your operating mode.

<div style="padding: 16px; border-top: 1px solid #f3f4f6;"><div style="margin: 0 0 16px 0;"><table role="presentation" style="width: 100%; border-collapse: separate; border-spacing: 12px;"><tbody><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Operating Mode</div>View and change your current mode (Client/Standalone or Director). Changing modes will reset mode-specific configurations.

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Client Configuration</div>Configure connection to a Director server. Set client name, Director URL, and connection token.

</td></tr><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Connection Configuration</div>(Director only) Manage connection tokens and security settings for client connections.

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Domain &amp; Security</div>Configure custom domains, SSL certificates, and security settings for your installation.

</td></tr><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">Vault</div>(Director only) Securely store and manage repository passphrases for connected clients.

</td><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">System Settings</div>Configure backup timeouts, concurrent backup limits, log retention, and other system-wide settings.

</td></tr><tr><td style="width: 50%; vertical-align: top; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px;"><div style="font-weight: bold; color: #111827; margin: 0 0 8px 0;">User Management</div>(Admin only) Create and manage user accounts, reset passwords, and configure permissions.

</td><td> </td></tr></tbody></table>

</div></div></details><div style="text-align: center; font-size: 14px; color: #6b7280; padding: 16px 0;">  
</div></div>Borgmatic UI • Built with{' '} [BorgBackup](https://www.borgbackup.org/){' '} and{' '} [Borgmatic](https://torsion.org/borgmatic/)