# WoW Backup ![WoW Backup](docs/screenshots/hero.png) ## Installation & Download Pre-built binaries for **macOS**, **Windows**, and **Linux** are provided on each release. 👉 **See [here](INSTALL.md)** for download links and step-by-step installation instructions. ## Key Features - ⚙️ **Smart Auto-Configuration**: Automatically detects standard WoW install locations (supporting retail and classic directories) and validates folder permissions. - ⏰ **Automated & Scheduled Backups**: Background scheduler ensures regular backups at a user-defined time. - 📦 **Compression & History Management**: Supports both folder replication and ZIP compression, with automatic pruning of backups beyond the configured limit. - 🎮 **Game State Detection**: Checks for running WoW processes before running backups to prevent file-locking conflicts. - 🔔 **Native OS Notifications**: Notifies the user when backups start, succeed, fail, or are skipped. - 🚀 **Launch at Startup**: Integrated with macOS LaunchAgents (`~/Library/LaunchAgents/`) and Windows Registry (`HKCU\...\Run`). - 🎨 **Theming & Customization**: Dynamic theming supporting Light/Dark mode, with configurable accent colors. --- ## Application Data Locations The app uses a configuration file to store user preferences. This file and runtime logs are stored in the following locations: - **macOS**: `~/Library/Application Support/WoWBackup/` (Logs: `.../logs/wowbackup.log`) - **Windows**: `%APPDATA%\WoWBackup\` (Logs: `...\logs\wowbackup.log`) - **Linux**: `~/.config/WoWBackup/` (Logs: `.../logs/wowbackup.log`) --- ## Tech Stack & Architecture - **Language & Runtime**: Kotlin Multiplatform targeting Desktop (JVM, Java 17+) - **UI Framework**: JetBrains Compose Multiplatform with Material 3 Design - **Architecture**: MVVM with Kotlin Coroutines - **Scheduling**: `io.github.kevincianfarini.cardiologist` - **Logging**: `logback-classic` + `kotlin-logging-jvm` with daily rotation and archiving - **Serialization**: Settings stored in a JSON file using `kotlinx-serialization-json` - **Theming**: `com.materialkolor:material-kolor` for dynamic palette generation --- ## Build & Run ### Prerequisites - JDK 17 or higher installed ### Development Run - **macOS / Linux**: ```shell ./gradlew :composeApp:run ``` - **Windows**: ```shell .\gradlew.bat :composeApp:run ``` ### Package Application Distributions - **macOS DMG**: ```shell ./gradlew :composeApp:packageDmg ``` - **Windows MSI**: ```shell .\gradlew.bat :composeApp:packageMsi ``` - **Linux DEB**: ```shell ./gradlew :composeApp:packageDeb ``` --- ## License This project is released into the public domain. See the [LICENSE](LICENSE) file or [unlicense.org](https://unlicense.org/) for details.