github Kha-kis/arr-dashboard v2.3.0
v2.3.0 - Backup & Restore with Scheduled Backups

latest releases: v2.24.1, v2.24.0, v2.23.0...
10 months ago

🎉 Version 2.3.0 - Backup & Restore System

This release introduces a comprehensive backup and restore system with scheduled backups, automatic retention management, and complete data portability.

✨ New Features

🔐 Complete Backup & Restore System

  • Encrypted Backups: AES-256-GCM encryption with PBKDF2 key derivation
  • Complete Data Export: Database + secrets + metadata in a single encrypted file
  • Password Protection: User-defined passwords for backup encryption (not stored anywhere)
  • Portable Backups: Move backups between different servers and Docker installations
  • Automatic Restart: Application automatically restarts after restore (production/Docker)

⏰ Scheduled Backups

  • Configurable Intervals: Hourly, Daily, or Weekly backup schedules
  • Automatic Execution: Background scheduler checks every 60 seconds for due backups
  • Retention Management: Automatically keeps N most recent scheduled backups
  • Separate Tracking: Manual vs scheduled backups tracked separately
  • Persistent Settings: Backup schedule configuration stored in database

📦 Backup Management UI

  • Dedicated Settings Tab: New Backup tab in Settings page
  • Backup List: View, download, and manage all existing backups
  • One-Click Operations: Create, restore, download, and delete backups
  • Progress Indicators: Loading states and status messages for all operations
  • Backup Metadata: View timestamp, size, type (manual/scheduled), and app version

🔧 System Management

  • Manual Restart Endpoint: API endpoint for graceful application restart
  • Backup Password Salvage: Preserves backup passwords when recovering from malformed secrets
  • Defensive Error Handling: Multiple layers of error handling for file operations

🛠️ Technical Improvements

Backend

  • New BackupScheduler service for automatic scheduled backups
  • New BackupSettings database model for schedule persistence
  • Enhanced LifecycleService with exit code 42 for launcher-managed restarts
  • Backup files stored in backups/manual/ and backups/scheduled/ directories
  • Rate limiting on backup/restore/restart endpoints

Frontend

  • React Query hooks with optimistic updates
  • Zod schemas for backup settings validation
  • Typed API client functions for all backup operations
  • Themed components matching existing UI design

Security

  • Double encryption: Service API keys encrypted in DB, then encrypted again in backup
  • Password-based backup access with PBKDF2 key derivation
  • Rate limiting protection on sensitive endpoints
  • No backup passwords stored or logged

📚 Documentation

  • BACKUP_RESTORE.md: Comprehensive 664-line guide covering:
    • Feature overview and usage instructions
    • Security considerations and best practices
    • Troubleshooting common issues
    • API usage examples
    • Migration workflows between servers

🔄 Database Changes

New BackupSettings model:
```prisma
model BackupSettings {
id Int @id @default(1)
enabled Boolean @default(false)
intervalType BackupIntervalType @default(DISABLED)
intervalValue Int @default(24)
retentionCount Int @default(7)
lastRunAt DateTime?
nextRunAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedat
}

enum BackupIntervalType {
DISABLED
HOURLY
DAILY
WEEKLY
}
```

🐛 Bug Fixes

  • Fixed TypeScript production build errors in authentication hooks
  • Moved 401 error handling to useEffect to comply with React rules
  • Fixed backup password preservation when recovering from invalid JSON
  • Removed redundant optional chaining in user display components
  • Added explicit return types to prevent type inference issues

📋 API Endpoints

New endpoints added:

  • `GET /api/backup` - List all backups
  • `POST /api/backup/create` - Create manual backup
  • `POST /api/backup/restore` - Restore from uploaded file
  • `POST /api/backup/restore-from-file` - Restore from server-side backup
  • `GET /api/backup/:id/download` - Download backup by ID
  • `DELETE /api/backup/:id` - Delete backup
  • `GET /api/backup/settings` - Get backup settings
  • `PUT /api/backup/settings` - Update backup settings
  • `POST /api/system/restart` - Manual restart endpoint

🔧 Breaking Changes

None. This is a purely additive release with full backward compatibility.

🐳 Docker Images

Published to:

  • Docker Hub: `khak1s/arr-dashboard:2.3.0`, `khak1s/arr-dashboard:latest`
  • GitHub Container Registry: `ghcr.io/kha-kis/arr-dashboard:2.3.0`, `ghcr.io/kha-kis/arr-dashboard:latest`

Both `linux/amd64` and `linux/arm64` platforms supported.

📥 Installation

Docker (Recommended)

```bash
docker pull khak1s/arr-dashboard:2.3.0
docker run -d
--name arr-dashboard
-p 3000:3000
-v /path/to/data:/app/data
khak1s/arr-dashboard:2.3.0
```

Unraid

Update the template to version 2.3.0 or use the Community Applications auto-update feature.

🙏 Contributors

  • @Kha-kis
  • AI-assisted development with Claude Code

Full Changelog: v2.2.0...v2.3.0

Don't miss a new arr-dashboard release

NewReleases is sending notifications on new releases.