https://github.com/kalloslaszlo/winmachine
Windows Time Machine — open-source backup utility with NTFS hard-link snapshots, 3D time browser UI, SMB support, and system tray integration. Built with Go + Wails + React.
https://github.com/kalloslaszlo/winmachine
backup desktop-app file-recovery golang hard-link incremental-backup ntfs react smb snapshot system-tray time-machine wails windows
Last synced: 2 months ago
JSON representation
Windows Time Machine — open-source backup utility with NTFS hard-link snapshots, 3D time browser UI, SMB support, and system tray integration. Built with Go + Wails + React.
- Host: GitHub
- URL: https://github.com/kalloslaszlo/winmachine
- Owner: KallosLaszlo
- Created: 2026-04-06T16:53:29.000Z (2 months ago)
- Default Branch: master
- Last Pushed: 2026-04-07T13:07:01.000Z (2 months ago)
- Last Synced: 2026-04-07T13:27:01.088Z (2 months ago)
- Topics: backup, desktop-app, file-recovery, golang, hard-link, incremental-backup, ntfs, react, smb, snapshot, system-tray, time-machine, wails, windows
- Language: Go
- Size: 510 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# WinMachine
**Windows Time Machine — open-source backup utility with NTFS hard-link snapshots, 3D time browser UI, SMB support, and system tray integration.**
Built with [Go](https://go.dev/) + [Wails](https://wails.io/) + [React](https://react.dev())
[](LICENSE)
[](https://github.com/KallosLaszlo/winmachine/actions/workflows/codeql.yml)
[](https://ko-fi.com/laszlokallos)
---
> **⚠️ This project is under active development but already usable.** If you find any bugs or have suggestions, feel free to [open an issue](https://github.com/KallosLaszlo/winmachine/issues) or submit a pull request — contributions are welcome!
---

## Features
- **Incremental snapshots** — Only changed files are copied; unchanged files are NTFS hard-linked from the previous snapshot (zero extra disk space)
- **Time Browser** — 3D card-stack UI to browse and restore files from any point in time, with mouse wheel navigation and draggable timeline
- **Windows Explorer integration** — Mount any snapshot as a virtual drive letter via `subst`
- **SMB network share support** — Back up to NAS/network drives with saved credentials
- **Scheduled backups** — Configurable interval via cron (every 5 min to daily)
- **Per-machine snapshots** — Identified by hostname + Windows MachineGuid, safe for multi-PC backups to the same target
- **NTFS protection** — Snapshot directories are marked Hidden+System with NTFS ACLs (SYSTEM + Administrators only)
- **Retention policy** — Automatic pruning: keep hourly/daily/weekly/monthly snapshots
- **System tray** — Runs in background with tray icon, quick access to backup/pause/open
- **Auto-start** — Optional Windows startup registration via registry
- **Single .exe** — No installer needed, portable
## Tech Stack
| Component | Technology |
|-----------|-----------|
| Backend | Go 1.25+, [Wails v2](https://wails.io/) |
| Frontend | React 18 + TypeScript + Vite |
| Tray | [energye/systray](https://github.com/energye/systray) |
| Scheduler | [robfig/cron](https://github.com/robfig/cron) |
| Platform | Windows 10/11 (NTFS required) |
## Installation
Download the latest `WinMachine.exe` from the [Releases](https://github.com/KallosLaszlo/winmachine/releases) page and run it — no installer or dependencies required. It's a single portable executable.
> **Note:** Requires Windows 10/11 with an NTFS-formatted backup target drive.
## Building from Source
### Prerequisites
- **Go** 1.25+ — [download](https://go.dev/dl/)
- **Node.js** 18+ — [download](https://nodejs.org/)
- **Wails CLI** v2 — installed automatically by `buildme.bat`, or manually: `go install github.com/wailsapp/wails/v2/cmd/wails@latest`
### Quick Start
```bat
git clone https://github.com/KallosLaszlo/winmachine.git
cd WinMachine
buildme.bat
```
The script checks for Go, Node.js and Wails CLI, installs missing dependencies, and builds `build\bin\WinMachine.exe`.
## Development
```bat
wails dev
```
Runs a live-reload dev server with hot module replacement for the frontend.
## Project Structure
```
WinMachine/
├── main.go # Entry point, embeds frontend + icon
├── app.go # Wails bindings (all frontend-exposed methods)
├── internal/
│ ├── backup/
│ │ ├── engine.go # Core backup logic with hard link dedup
│ │ ├── snapshot.go # Snapshot listing, metadata, paths
│ │ ├── restore.go # File/folder restore + snapshot browsing
│ │ └── retention.go # Time-bucket pruning
│ ├── config/
│ │ └── config.go # JSON config (source dirs, target, schedule, SMB)
│ ├── fsutil/
│ │ ├── hardlink.go # NTFS hard link with copy fallback
│ │ ├── walker.go # Directory walker with excludes
│ │ ├── volume.go # NTFS detection, disk space
│ │ ├── machineid.go # Hostname + MachineGuid identifier
│ │ └── protect.go # Hidden+System attrs + NTFS ACL
│ ├── scheduler/
│ │ └── scheduler.go # Cron-based scheduled backups
│ ├── smb/
│ │ └── smb.go # Persistent SMB mount manager
│ └── tray/
│ └── tray.go # System tray icon + menu
├── frontend/
│ └── src/
│ ├── App.tsx # Main layout with sidebar navigation
│ ├── App.css # All styles including Time Machine 3D UI
│ └── pages/
│ ├── Dashboard.tsx # Status, stats, quick actions
│ ├── TimeBrowser.tsx # 3D snapshot browser
│ └── Settings.tsx # Config: sources, target, SMB, schedule
├── build/
│ └── windows/
│ └── icon.ico # Application icon
├── buildme.bat # One-click build script
└── wails.json # Wails project config
```
## Configuration
Config is stored at `%APPDATA%\WinMachine\config.json`:
| Setting | Description |
|---------|------------|
| `sourceDirs` | Folders to back up |
| `targetDir` | Local or SMB backup destination |
| `targetType` | `"local"` or `"smb"` |
| `smbTarget` | SMB share path, drive letter, credentials |
| `scheduleInterval` | Cron expression (e.g. `@every 15m`) |
| `retention` | Keep N hourly/daily/weekly/monthly snapshots |
| `autoStart` | Register in Windows startup |
| `excludePatterns` | Glob patterns to skip |
## Known Issues
- **Auto-start depends on exe location** — The auto-start feature saves the current exe path to the Windows Registry. If you move the exe to a different folder, auto-start will fail. To fix, toggle the auto-start option off and on again in Settings.
## License
MIT
## Author
Kallos László — laszlo@kallos.dev
## Tooling
AI-assisted development was used (Claude Opus 4.6) for debugging, refactoring, and optimization.