Small desktop tool to automatically backup WoW Addon configuration. Built with Kotlin and Compose Multiplatform.
Find a file
Rukira ccfb187601
Some checks are pending
Release Pipeline / Bump Version & Create Tag (push) Waiting to run
Release Pipeline / Package Linux (DEB) (push) Blocked by required conditions
Release Pipeline / Package macOS (DMG) (push) Blocked by required conditions
Release Pipeline / Package Windows (MSI) (push) Blocked by required conditions
Release Pipeline / Create GitHub & Forgejo Releases (push) Blocked by required conditions
feat(release): add Forgejo release step to GitHub Actions pipeline
Co-authored-by: Junie <junie@jetbrains.com>
2026-08-24 16:56:00 +01:00
.gitea/issue_template Housekeeping 2026-03-04 15:53:31 +00:00
.github/workflows feat(release): add Forgejo release step to GitHub Actions pipeline 2026-08-24 16:56:00 +01:00
composeApp feat(build): support dynamic appVersion in gradle and remove obsolete release.sh 2026-08-24 16:11:31 +01:00
docs feat(release): add Forgejo release step to GitHub Actions pipeline 2026-08-24 16:56:00 +01:00
gradle Docs 2026-08-24 15:22:22 +01:00
.gitignore Gitignore update 2026-08-24 16:23:03 +01:00
build.gradle.kts Config screen 2026-03-04 14:19:19 +00:00
gradle.properties Versioning 2026-03-04 16:02:28 +00:00
gradlew Docs 2026-08-24 15:22:22 +01:00
gradlew.bat Docs 2026-08-24 15:22:22 +01:00
INSTALL.md Gitignore update 2026-08-24 16:23:03 +01:00
README.md docs: add INSTALL.md and update project documentation for release pipeline 2026-08-24 16:13:38 +01:00
settings.gradle.kts Config screen 2026-03-04 14:19:19 +00:00

WoW Backup

A lightweight, native-feeling desktop application built with Kotlin and Compose Multiplatform to automatically backup and restore World of Warcraft configuration data (WTF and Interface directories) on macOS and Windows.

Overview

World of Warcraft stores all UI configurations, macros, keybindings, and addon saved variables in the WTF/ and Interface/ folders. Losing this data due to game corruption, accidental deletion, or addon errors can mean losing years of customized setups. WoW Backup runs discreetly in the system tray, automatically creates scheduled, timestamped backups (optionally compressed as ZIP archives), and will provide seamless one-click restoration.

Key Features

  • 🛡️ System Tray Native Life Cycle: Lives in the menu bar / system tray with custom template icons matching light/dark OS appearances. Closing the window hides to tray; quitting is explicit.
  • ⚙️ Smart Auto-Configuration: Automatically detects standard WoW install locations (supporting retail and classic directories) and validates folder permissions.
  • Automated & Scheduled Backups: Background scheduler powered by Cardiologist ensures dependable daily backups at a user-defined time.
  • 📦 Compression & History Management: Supports both folder replication and ZIP compression, with automatic pruning of backups beyond the configured retention limit (130 backups).
  • 🎮 Game State Detection: Checks for active WoW processes before running backups to prevent file-locking conflicts, with optional "force backup" override and safety confirmation.
  • 🔔 Native OS Notifications: Notifies the user when backups start, succeed, fail, or are skipped due to game execution.
  • 🚀 Launch at Startup: Integrated with macOS LaunchAgents (~/Library/LaunchAgents/) and Windows Registry (HKCU\...\Run).
  • 🎨 Modern Theming & Customization: Dynamic Material 3 theming supporting System/Light/Dark modes and configurable accent colors (via MaterialKolor).
  • 🔄 Restore System (In Progress): Interactive restore interface to safely roll back WTF and Interface configurations.

Tech Stack & Architecture

  • Language & Runtime: Kotlin Multiplatform targeting Desktop (JVM, Java 17+)
  • UI Framework: JetBrains Compose Multiplatform with Material 3 Design
  • Architecture: MVI / MVVM with Kotlin Coroutines and StateFlow
  • Scheduling: io.github.kevincianfarini.cardiologist for drift-free daily execution
  • Logging: logback-classic + kotlin-logging-jvm with daily rotation and size archiving in app data directories
  • Serialization: kotlinx-serialization-json for typed JSON configuration persistence
  • Theming: com.materialkolor:material-kolor for dynamic palette generation

Installation & Download

Pre-built binaries for macOS, Windows, and Linux are automatically packaged and published on each release.

👉 See INSTALL.md for download links, step-by-step installation instructions, Gatekeeper/SmartScreen bypass guidance, and initial setup notes.


Build & Run

Prerequisites

  • JDK 17 or higher installed

Development Run

  • macOS / Linux:
    ./gradlew :composeApp:run
    
  • Windows:
    .\gradlew.bat :composeApp:run
    

Package Application Distributions

  • macOS DMG:
    ./gradlew :composeApp:packageDmg
    
  • Windows MSI:
    .\gradlew.bat :composeApp:packageMsi
    
  • Linux DEB:
    ./gradlew :composeApp:packageDeb
    

Feature Implementation Status

Feature Plan Document Status Description
0. Foundation docs/plans/feature-0-foundation.md Completed Architecture, config persistence, logging, platform abstractions
1. System Tray docs/plans/feature-1-system-tray.md Completed Tray icon, menu, tray-first lifecycle, window alignment
2. Configuration docs/plans/feature-2-configuration.md Completed Full settings UI, path validation, native file dialogs, startup manager
3. Backup Engine docs/plans/feature-3-backup.md Completed Parallel copy, ZIP compression, scheduler, history pruning, notifications
4. Status Screen docs/plans/feature-4-status.md Completed Live status dashboard, progress indicator, manual backup trigger, shortcuts
5. Restore Screen docs/plans/feature-5-restore.md 🚧 Pending Backup list browser, ZIP extraction, confirmation flow, safety checks
6. Release Pipeline docs/plans/feature-6-release-pipeline.md Completed GitHub Actions multi-platform release pipeline & packaging automation

Application Data Locations

  • macOS: ~/Library/Application Support/WoWBackup/ (Logs: .../logs/wowbackup.log)
  • Windows: %APPDATA%\WoWBackup\ (Logs: ...\logs\wowbackup.log)
  • Linux: ~/.config/WoWBackup/ (Logs: .../logs/wowbackup.log)