The Unified Project Lifecycle Manager: Backup, Restore, and Teleport Projects Anywhere.
Project description
Project Vault (pv) 🏦
The Unified Project Lifecycle Manager: Backup, Restore, and Teleport Projects Anywhere.
Project Vault (pv) is your command-line companion for managing project state. It combines the power of atomic backups, cloud synchronization, and time-travel restoration into a single, unified tool. Think of it as Time Machine for your dev projects — portable, reproducible, and cloud-ready.
⚡ Quick Start (The "5-Minute Rule")
Prerequisites
- Python 3.10+
- Pip (Python Package Installer)
- Docker (Optional, for database backups)
Installation
# Clone the repository
git clone https://github.com/dhruv13x/project-vault.git
cd project-vault
# Install in editable mode with development tools
pip install -e .[dev]
Run
Verify the installation:
pv --version
Demo
Create a snapshot of your current project and list it:
# 1. Initialize (optional, for auto-ignore)
pv init --smart
# 2. Create a local snapshot
pv vault . --name "initial-commit"
# 3. List snapshots
pv list
✨ Features
🛡️ Core Reliability
- Atomic Snapshots: Never lose data due to a partial backup. Snapshots are verified and immutable.
- Content Addressable Storage (CAS): Deduplication at the file level. Save space by storing unique files only once.
- Symlink Support: Preserves symlinks (or optionally follows them), ensuring complex project structures remain intact.
🚀 Performance
- ZStandard Compression: High-speed, high-ratio compression for efficient storage and transfer.
- Incremental Backups: Only changed files are processed, making subsequent backups lightning fast.
☁️ Cloud & Security
- Cloud Sync (S3/B2): Push and pull your vaults to any S3-compatible storage.
- Encrypted Configuration: Securely handle credentials (optional integration).
- Integrity Checks: Verify the health of your local vault and cloud storage.
🧩 Developer Experience
- TUI (Textual UI): Browse snapshots and restore files using an interactive terminal interface (
pv browse). - Smart Ignorance: Auto-generates
.pvignorebased on project type (Python, Node, Rust, etc.). - Rich Output: Beautiful, color-coded terminal output using
rich.
🛠️ Configuration
Project Vault can be configured via environment variables, a local pv.toml, or pyproject.toml.
Environment Variables
| Variable | Description | Default | Required |
|---|---|---|---|
PV_BUCKET |
The default cloud bucket name. | None | No (unless pushing) |
PV_ENDPOINT |
The S3-compatible endpoint URL. | None | No (unless pushing) |
PV_VAULT_PATH |
Default local path to store the vault. | ~/.project-vault |
No |
PV_RESTORE_PATH |
Default path to restore projects. | ./restored |
No |
PV_TELEGRAM_BOT_TOKEN |
Telegram Bot Token for notifications. | None | No |
PV_TELEGRAM_CHAT_ID |
Telegram Chat ID for notifications. | None | No |
PV_DB_PASSWORD |
Database password for backups. | None | No |
CLI Arguments
Common arguments for pv vault (create snapshot):
| Flag | Description |
|---|---|
--name |
Tag the snapshot with a custom name. |
--cloud |
Push to cloud immediately after creating. |
--symlinks |
Preserve symlinks instead of copying targets. |
--bucket |
Override configured bucket. |
--endpoint |
Override configured endpoint. |
--include-db |
Include database snapshot in the backup. |
Common arguments for pv list:
| Flag | Description |
|---|---|
--cloud |
List snapshots from the cloud instead of local. |
--limit |
Number of snapshots to show (default: 10). |
🏗️ Architecture
Project Vault is a self-contained monorepo orchestrating specialized internal engines for backup and restore.
Directory Tree
project-vault/
├── src/ # Source Code
│ ├── cli.py # Entry Point (pv)
│ ├── cli_dispatch.py # Command Routing
│ ├── common/ # Shared Utilities (Config, Crypto, S3/B2)
│ ├── projectclone/ # Backup Engine (Snapshot Creation)
│ ├── projectrestore/ # Restore Engine (Snapshot Application)
│ ├── projectvault/ # Database & Driver Logic
│ └── tui.py # Textual User Interface
└── tests/ # Orchestration & Integration Tests
Data Flow
- Input: User runs
pv vaultin a project directory. - Filter: Rules from
.pvignoreare applied. - Capture: The internal Clone Engine scans files, computes hashes, and stores unique objects in the CAS (Content Addressable Storage).
- Manifest: A JSON manifest is created, linking file paths to CAS objects.
- Sync (Optional):
pv pushuploads new CAS objects and the manifest to Cloud Storage (S3/B2). - Restore:
pv vault-restoreuses the Restore Engine to read the manifest, fetch objects from CAS, and reconstruct the directory state.
🐞 Troubleshooting
Common Issues
| Error Message | Possible Cause | Solution |
|---|---|---|
B2ConnectionError / 403 |
Invalid credentials or endpoint. | Check pv.toml or PV_ENDPOINT. Ensure keys are correct. |
Snapshot not found |
Local vault is empty or path is wrong. | Run pv list to see available snapshots. Check PV_VAULT_PATH. |
Permission denied |
Lack of write access to vault/restore path. | Ensure you have permissions for the directory. |
Docker not found |
Docker daemon not running. | Start Docker if using pv db or --include-db. |
Debug Mode
To enable verbose logging and see stack traces, you can run the CLI module directly:
# Run with python directly for detailed tracebacks
python3 src/cli.py [command]
🤝 Contributing
We welcome contributions! Please see CONTRIBUTING.md for details on how to get started, report bugs, or suggest features.
Dev Setup
-
Clone & Install:
git clone https://github.com/dhruv13x/project-vault cd project-vault # Install package in editable mode with dev dependencies pip install -e .[dev]
-
Run Tests:
python3 -m pytest
🗺️ Roadmap
- Encryption: Client-side encryption for zero-knowledge cloud backups.
- Daemon Mode: Background watcher for auto-backups on file change.
- Web UI: A lightweight web interface for browsing vaults remotely.
- Plugin System: Hooks for custom pre/post backup actions (e.g., database dumps).
Project details
Release history Release notifications | RSS feed
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 project_vault-13.0.0.tar.gz.
File metadata
- Download URL: project_vault-13.0.0.tar.gz
- Upload date:
- Size: 161.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b620b9211026a3c5e80ff63f23a3e36edabaf62e639363f84b864d332b852c2b
|
|
| MD5 |
1fba488a1aeb571ef29018d6e6725ce7
|
|
| BLAKE2b-256 |
3f9841ae8e3d768848928a4efe5710b41da808dfe33f010b3a3eaa878391c00b
|
Provenance
The following attestation bundles were made for project_vault-13.0.0.tar.gz:
Publisher:
publish.yml on dhruv13x/project-vault
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
project_vault-13.0.0.tar.gz -
Subject digest:
b620b9211026a3c5e80ff63f23a3e36edabaf62e639363f84b864d332b852c2b - Sigstore transparency entry: 1198316539
- Sigstore integration time:
-
Permalink:
dhruv13x/project-vault@c453f4a2dd425c400d6fa8968addfff34ff51fce -
Branch / Tag:
refs/tags/v13.0.0 - Owner: https://github.com/dhruv13x
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c453f4a2dd425c400d6fa8968addfff34ff51fce -
Trigger Event:
push
-
Statement type:
File details
Details for the file project_vault-13.0.0-py3-none-any.whl.
File metadata
- Download URL: project_vault-13.0.0-py3-none-any.whl
- Upload date:
- Size: 182.0 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 |
d1476f06d16214bec596096c910ce5767f96deae4ec40bb70db36c9618baad65
|
|
| MD5 |
5c9c655653b2fa36b334694625f157ef
|
|
| BLAKE2b-256 |
a4ccd61cb9ff4ba0103b0957a298d59d9919c5c48f50f58ec75c83cb5c7aa3e2
|
Provenance
The following attestation bundles were made for project_vault-13.0.0-py3-none-any.whl:
Publisher:
publish.yml on dhruv13x/project-vault
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
project_vault-13.0.0-py3-none-any.whl -
Subject digest:
d1476f06d16214bec596096c910ce5767f96deae4ec40bb70db36c9618baad65 - Sigstore transparency entry: 1198316555
- Sigstore integration time:
-
Permalink:
dhruv13x/project-vault@c453f4a2dd425c400d6fa8968addfff34ff51fce -
Branch / Tag:
refs/tags/v13.0.0 - Owner: https://github.com/dhruv13x
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c453f4a2dd425c400d6fa8968addfff34ff51fce -
Trigger Event:
push
-
Statement type: