A modern, cross-platform desktop application for file backups, inspired by Apple's Time Machine. It provides a user-friendly interface to manage, browse, and restore your files.
The application combines a powerful Python backend for file system monitoring and backup operations with a sleek and modern user interface built using Electron.js.
- Real-time File Monitoring: Uses
watchdogto efficiently detect file changes in real-time, ensuring your backups are always up-to-date. - Automated Backups: A background daemon manages the backup process automatically without user intervention.
- Modern Desktop UI: A clean and intuitive interface built with Electron, HTML, and CSS for managing your backups.
- Theme Support: Light/dark mode with optional system preference and native UI integration.
- Easy Restore: A simple interface to browse your backup history and restore files or folders.
- Desktop Integration: Includes a
.desktopfile for seamless integration with application menus on Linux. - Dashboard: A central view to monitor backup status and system health.
- Most Frequently Modified Files: Smart recency-weighted analysis to highlight files you're actively using, rather than old archived files.
- Backend: Python, Flask
- Frontend: Electron.js, Vanilla JavaScript (ESM)
- Core Dependencies:
watchdog(Python) for file system monitoring.axios(JavaScript) for communication between the frontend and backend.
The easiest way to install the application is by using the provided installation script.
bash install.shThis script will:
- Copy all necessary application files to
~/.local/share/timemachine. - Create a launcher command
timemachinein~/.local/bin. - Add an application entry to your desktop menu.
After running the installation script, you can launch the application in two ways:
- Open your terminal and run
timemachine. - Find "TimeMachine" in your computer's application menu.
The daemon needs to be running for backups to occur. Starting with the recent update the application automatically manages its own startup entry whenever you toggle Automatic Backups in the settings – there is no longer any separate "launch at startup" switch.
Enabling automatic backups does three things immediately:
- starts the daemon process (if it isn’t already running),
- writes a
.desktopfile to~/.config/autostart, and - creates a
systemd --userunit for systems that use it.
Disabling the feature stops the daemon and removes those startup entries. The UI will display a notification when the settings are saved and will attempt to start/stop the service on your behalf, so you should never see a situation where backups are “on” but the daemon isn’t running.
⚠️ If the daemon still doesn’t start after toggling backups, inspect the contents of~/.config/autostart/timemachine.desktopand confirm theExecline points to an existing Python executable andpy/main.py. Likewise, if you prefer systemd management you can manually enable the unit withsystemctl --user enable --now timemachine.service.
On headless boots (no graphical session) only the systemd unit is relevant; the autostart entry is ignored.
Update checks are automatic on every launch; the application queries the backend and shows a toast notification when a new version is detected. The notification includes a "Tell me more" button which opens the project's GitHub releases page in the user's browser. The dedicated update window and sidebar update page have been removed — updates are detected and surfaced only via the notification bubble.
If you want to run the application in a development environment:
-
Clone the repository:
git clone https://github.com/GeovaneJefferson/timemachine.git cd timemachine -
Install Python dependencies:
pip install -r requirements.txt
-
Install Node.js dependencies:
npm install
-
Start the application:
npm start
Note for Wayland users: The application launcher forces the use of X11 (
GDK_BACKEND=x11) to ensure proper windowing and display behavior, as Electron can have compatibility issues with Wayland.
To remove the application from your system, run the uninstallation script:
bash uninstall.sh