Skip to main content

Project Vault (pv) 🏦

The Unified Project Lifecycle Manager: Backup, Restore, and Teleport Projects Anywhere.

Project Vault Logo

Build Status License: MIT Python Version Code Style: Black Ruff Maintenance

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 .pvignore based 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

  1. Input: User runs pv vault in a project directory.
  2. Filter: Rules from .pvignore are applied.
  3. Capture: The internal Clone Engine scans files, computes hashes, and stores unique objects in the CAS (Content Addressable Storage).
  4. Manifest: A JSON manifest is created, linking file paths to CAS objects.
  5. Sync (Optional): pv push uploads new CAS objects and the manifest to Cloud Storage (S3/B2).
  6. Restore: pv vault-restore uses 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

  1. 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]
    
  2. 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).

Built with ❤️ by Dhruv13x

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

project_vault-15.0.0.tar.gz (158.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

project_vault-15.0.0-py3-none-any.whl (179.3 kB view details)

Uploaded Python 3

File details

Details for the file project_vault-15.0.0.tar.gz.

File metadata

  • Download URL: project_vault-15.0.0.tar.gz
  • Upload date:
  • Size: 158.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for project_vault-15.0.0.tar.gz
Algorithm Hash digest
SHA256 469b415ca06441c6a0afe8c5b79251e629e3f345cafbaa7efe070caa5ec5b78e
MD5 11a226dfcdd3cf4d1b73b0ee231dc289
BLAKE2b-256 1cc71f70fb1d78506851f0a6adc9bdca58841c0569864387d3a93f949c925207

See more details on using hashes here.

Provenance

The following attestation bundles were made for project_vault-15.0.0.tar.gz:

Publisher: publish.yml on dhruv13x/project-vault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file project_vault-15.0.0-py3-none-any.whl.

File metadata

  • Download URL: project_vault-15.0.0-py3-none-any.whl
  • Upload date:
  • Size: 179.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for project_vault-15.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bfffbd26a4fea215a41f6fd611265508cfb9178e9cdceba2e97d592c0f94b88a
MD5 f70cf1a4f43d162fb04f5f421de304c4
BLAKE2b-256 9a73268dfec36f4568da78492f0860f1f7171e8f9b53973da7c6a2a98f331e6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for project_vault-15.0.0-py3-none-any.whl:

Publisher: publish.yml on dhruv13x/project-vault

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

15.0.0 This release

2 files

14.0.0

2 files

13.1.0

2 files

13.0.0

2 files

11.0.0

2 files

10.0.0

2 files

9.0.0

2 files

7.0.0

2 files

6.0.1

2 files

5.0.3

2 files

5.0.2

2 files

5.0.1

2 files

5.0.0

2 files

3.6.0

2 files

3.2.0

2 files

1.1.0

2 files

1.0.14

2 files

1.0.13

2 files

1.0.11

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page