Time Machine-style personal backup orchestrated by Python & uv
Project description
Timeless-Py ⏳
Snapshot what matters, remember how to rebuild the rest.
Time Machine-style personal backup orchestrated by Python & uv.
Overview
Timeless-Py is a modern backup solution designed for macOS, providing:
- Hourly, daily, weekly deduplicated snapshots of user data
- Re-install manifest generation for applications and system packages
- Engine-agnostic approach with Restic, Borg, and Kopia support
- Client-side encryption (AES-256) with keys stored in Keychain
- Simple 10-minute setup:
brew install timeless-py→timeless init --wizard
Features
- Snapshot Management: Create, browse, and restore backups with ease
- Retention Policies: Define flexible retention policies (hourly/daily/weekly/monthly/yearly)
- Manifest Generation: Auto-generate reinstall manifests for your Mac software
- Built-in Security: Fully encrypted snapshots with secure key management
- FUSE Integration: Mount snapshots as regular volumes for easy browsing
- Exclude Patterns: Specify patterns for files and directories to exclude from backups
M1 Milestone Features
- Restic Engine Integration: Full integration with Restic for backup, restore, snapshot management, and repository operations
- Retention Policy DSL: Define custom retention policies in YAML to automatically manage snapshot retention
- Exclude Patterns Support: Exclude specific files or directories from backups using glob patterns
- Comprehensive CLI Interface: User-friendly command-line interface for all operations
Installation
# Coming soon - once published
brew install timeless-py
# Initialize with wizard
timeless init --wizard
Usage
# Create a backup
timeless backup
# Mount latest snapshot
timeless mount
# Restore a file or directory
timeless restore <snapshot> <path>
# List available snapshots
timeless snapshots
# Verify repository integrity
timeless check
# Reinstall software from manifests
timeless brew-replay
Development
This project requires Python 3.11 or higher.
# Setup development environment
git clone https://github.com/rappdw/timeless.git
cd timeless
uv pip install -e ".[dev]"
# Run tests
pytest
# Run linting and type checks
ruff check .
black --check .
isort --check .
mypy --strict .
License
This project is licensed under Apache-2.0. See LICENSE file for more details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file timevault-0.2.0.tar.gz.
File metadata
- Download URL: timevault-0.2.0.tar.gz
- Upload date:
- Size: 39.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5350c0ea04f807ec78b11a002ba9137c9d6637f1affad07166167e117d946ba9
|
|
| MD5 |
a83fa2f1ffefa795e93057ce84914a7a
|
|
| BLAKE2b-256 |
9cf930330ae27f6d0d2ec770e122c1fdf2ed425ed060a2baf97339ecb43b20ad
|
Provenance
The following attestation bundles were made for timevault-0.2.0.tar.gz:
Publisher:
publish.yml on rappdw/timeless
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
timevault-0.2.0.tar.gz -
Subject digest:
5350c0ea04f807ec78b11a002ba9137c9d6637f1affad07166167e117d946ba9 - Sigstore transparency entry: 977950822
- Sigstore integration time:
-
Permalink:
rappdw/timeless@45b619588a335957094ac8795e1e4e410c9e5619 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/rappdw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@45b619588a335957094ac8795e1e4e410c9e5619 -
Trigger Event:
release
-
Statement type:
File details
Details for the file timevault-0.2.0-py3-none-any.whl.
File metadata
- Download URL: timevault-0.2.0-py3-none-any.whl
- Upload date:
- Size: 28.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9db8c152c4919a258fec28390c3ae68663baf79dfd2848287961ad682eda2dd
|
|
| MD5 |
28c760c02f51800f3803e1323b5ff4da
|
|
| BLAKE2b-256 |
81849e3996f75084be014a1392c89281f7b6a34ed1302c29ab8eccecc4796530
|
Provenance
The following attestation bundles were made for timevault-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on rappdw/timeless
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
timevault-0.2.0-py3-none-any.whl -
Subject digest:
b9db8c152c4919a258fec28390c3ae68663baf79dfd2848287961ad682eda2dd - Sigstore transparency entry: 977950882
- Sigstore integration time:
-
Permalink:
rappdw/timeless@45b619588a335957094ac8795e1e4e410c9e5619 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/rappdw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@45b619588a335957094ac8795e1e4e410c9e5619 -
Trigger Event:
release
-
Statement type: