Backup Manager is a user-friendly program with an intuitive graphical interface, designed to simplify and automate the backup of folders and subfolders. Users can configure a custom time interval between automatic backups, setting the desired number of days between each operation. Additionally, manual backups can be performed at any time, providing maximum flexibility.
Each backup is carefully saved, and the program maintains a detailed log of all completed operations. Users can also view, manage, and edit the details of each backup, ensuring complete control and customization over saved data. This tool is an ideal solution for efficiently and securely protecting files, minimizing the risk of data loss.
- 📁 Automatic backup of folders and subfolders
- 🕒 Flexible scheduling for recurring backups
- 🖱️ Electron desktop app with tray icon support
- 📝 Detailed logs and backup history
- 🎨 Light/Dark themes and multilingual support (EN, IT, DE, ES, FR)
![]() |
![]() |
|---|---|
![]() |
![]() |
Runtime flow: Electron spawns java -jar BackupManager.jar --api-server → Java starts Javalin REST server on http://localhost:7089 → React renderer calls the API via Axios.
| Tool | Version |
|---|---|
| JDK | 21+ |
| Maven | 3.9+ |
| Node.js | 20+ |
| npm | 10+ |
mvn clean package -DskipTestsThis produces target/backupmanager-jar-with-dependencies.jar.
java -jar target/backupmanager-jar-with-dependencies.jar --api-serverThe API will be available at http://localhost:7089/api/status. Keep this terminal open.
cd ui
npm install
npm run devThis opens Electron in development mode with hot-reload. npm run dev rebuilds the backend JAR first when the Java sources changed, then Electron spawns the Java backend (spawnJavaBackend in src/main/index.ts). If a backend is already answering on port 7089 (e.g. you started it in step 2 or from the IDE debugger), Electron reuses it instead of starting a second one.
cd ui
npm run dev:first-launch # standard edition
npm run dev:first-launch:demo # demo edition (subscription trial), like the demo installerStarts the app against a throwaway home folder in ui/.sandbox/ (recreated on every run): the backend gets a brand-new database, logs and Electron profile, so you see the first-run behaviour (new database, language detected from the PC, demo trial) without touching your real data in Documents\Shard\data. Add -- --keep to reuse the previous sandbox and test the second launch. Close any running BackupManager first: if a backend is already answering on port 7089 the app refuses to start instead of silently using your real database.
# Build Java JAR first
./mvnw.cmd clean package -DskipTests
# Then package the Electron app (bundles the JAR and the JRE inside)
cd ui
npm run dist:winThen compile installer/BackupManager_installer.iss (standard) or installer/BackupManager_installer_demo.iss (demo) with Inno Setup. Full guide: docs/installer.md.
The "Build Windows installers" GitHub Action does all of this on a Windows runner (on every push to master, or manually from the Actions tab) and uploads both installers as workflow artifacts.
Run the "Build Linux installers" / "Build macOS installers" GitHub Actions manually (Actions tab > Run workflow); they also run on every push to master and upload the installers as workflow artifacts.
- Linux (AppImage + .deb): on a Linux machine put a Linux JRE in
jre-linux/(e.g.jlink --add-modules ALL-MODULE-PATH --strip-debug --no-man-pages --no-header-files --compress=zip-6 --output jre-linux), build the JAR and runnpm run dist:linuxfromui/ - macOS (.dmg for Apple Silicon and Intel): on a Mac put the JREs in
jre-mac-arm64/andjre-mac-x64/and runnpm run dist:macfromui/. The app is only ad-hoc signed (no Developer ID / notarization): on first launch right-click the app > Open
| Script | Description |
|---|---|
npm run dev |
Start Electron + Vite dev server with HMR |
npm run build |
Compile TypeScript + Vite bundle |
npm run preview |
Preview the built renderer in a browser |
npm run dist |
Build distributable (via electron-builder) |
npm run dist:win |
Package the Windows app into release/win-unpacked for the Inno Setup installer |
npm run dist:linux |
Build the Linux installers (AppImage + .deb) into release/ (needs jre-linux/) |
npm run dist:mac |
Build the macOS installers (.dmg) into release/ (needs jre-mac-arm64/ and jre-mac-x64/) |
mvn clean verifyRuns Checkstyle, SpotBugs and unit tests. The build fails on any violation.
- The Java backend is fully headless — it has no window of its own and no standalone
.exe. It's always launched by the Electron app (spawnJavaBackendinui/src/main/index.ts), which also owns the tray icon. - Automatic backups only run while the Electron app is running (in the tray or foreground). The Windows installer adds a per-user "start with Windows" entry (selected by default) that launches the app hidden in the tray. On Linux and macOS the app adds the equivalent entry itself on its first launch (
~/.config/autostart/backupmanager.desktop/~/Library/LaunchAgents/io.github.dennisturco.backupmanager.plist, listed under System Settings > General > Login Items > "Allow in the Background"); remove or turn it off there to disable it.
| Platform | Availability |
|---|---|
| Windows | ✅ |
| Linux | ✅ (via Electron) |
| MacOS | ✅ (via Electron) |
- Ubuntu, Debian, Mint and derivatives: download the
.deband install it with a double click, or withsudo apt install ./BackupManager-<version>-amd64.deb. BackupManager then appears in the applications menu. - Other distributions: download the
.AppImage, make it executable (chmod +x BackupManager-<version>-x86_64.AppImage) and run it. If it doesn't start and mentionslibfuse.so.2, install FUSE 2:sudo apt install libfuse2(libfuse2t64on Ubuntu 24.04+), or the equivalent package of your distribution.
| Piattaforma | Availability |
|---|---|
| English | ✅ |
| Italian | ✅ |
| Spanish | ✅ |
| German | ✅ |
| French | ✅ |
This project uses automated code quality analysis on every Pull Request targeting master.
The analysis runs the following tools and posts a summary comment directly on the PR:
| Tool | What it checks |
|---|---|
| JaCoCo | Test coverage (line & branch) |
| SpotBugs + find-sec-bugs | Bugs and security vulnerabilities |
| PMD | Code complexity and style violations |
| CPD | Code duplication (blocks > 100 tokens) |
To run the analysis locally:
./analyze.ps1Or run individual checks:
./mvnw clean verify "-Dmaven.test.failure.ignore=true" # tests + coverage
./mvnw spotbugs:spotbugs # bug analysis
./mvnw pmd:pmd pmd:cpd # complexity + duplicationFor support, email: dennisturco@gmail.com




