Skip to main content

Safely extract and restore project snapshots created by projectclone — secure, atomic, integrity-checked restore engine.

Project description

projectrestore logo

PyPI version Python Wheel Release

Build status Codecov Test Coverage Code style: black Ruff Security

Downloads OS Python Versions

License: MIT

Docs

🛠️ projectrestore — Secure, Atomic, Verified Project Restore

projectrestore is the companion tool to
projectclone.

It safely restores project backups created via projectclone — with strict safety guarantees, atomic replacement, rollback, checksum verification, PID locking, and tar-bomb protection.

Mission: Restore project environments safely, predictably, and without trust assumptions — even across systems.


✅ Key Features

Capability Description
🔐 Atomic restore Extracts to temp dir → atomic swap → rollback if failed
🛡️ Zero-trust archive validation Rejects suspicious tar entries (symlink, device, traversal)
📦 Tarbomb protection Max-files & max-bytes enforcement
🧾 SHA-256 integrity check Optional digest validation before restore
🚫 Privilege-safe Strip setuid/setgid, block device nodes
🔄 Dry-run validation Verify archives without touching disk
🔒 PID locking Prevent concurrent restores
🧯 Crash-safe Best-effort rollback & cleanup
📁 Cross-platform Works on Linux, Termux/Android, VPS, containers
No dependencies Pure Python — clean install, small footprint

🧩 Installation

pip install projectrestore

Or editable dev install:

git clone https://github.com/dhruv13x/projectrestore
cd projectrestore
pip install -e .


---

🚀 Quick Start

Restore the latest backup made by projectclone:

projectrestore

Restore to a specific directory:

projectrestore --backup-dir ~/project_backups --extract-dir ./restored_project

Dry-run (validate only):

projectrestore --dry-run

Verify SHA-256 before restore:

projectrestore --checksum checksums.txt

Limit archive extraction:

projectrestore --max-files 50000 --max-bytes 2G

Debug logs:

projectrestore --debug


---

🔍 How It Works (Safety Model)

1. Validate backup archive structure & metadata


2. Create PID lock  single-instance safety


3. Extract to isolated temporary directory


4. Apply strict checks:

No absolute paths

No ../ traversal

No symlinks / hardlinks

No device nodes / FIFO

No setuid/setgid preserved



5. Optionally verify SHA-256


6. Atomic swap:

Move old dir  backup

Move new dir  destination



7. Cleanup old state (or rollback on error)




---

⚠️ Design Philosophy

> Separation of responsibilities
projectclone = capture
projectrestore = apply safely



This tool intentionally does not share codebase or execution surface with projectclone to ensure:

Security isolation

Clear trust boundary

Maintenance clarity

Lower blast radius

Independent versioning & release trains



---

🧪 Exit Codes

Code	Meaning

0	Success
1	Error
2	Interrupted / signal
3	Another instance running (PID lock)



---

📂 Compatibility

System	Supported

Linux	✅
WSL	✅
Termux / Android	✅
Docker	✅
macOS	⚠️ tar behavior varies  full support in v1.0



---

🤝 Ecosystem

Tool	Purpose

projectclone	Create stateful reproducible project snapshots
projectrestore	Securely apply snapshots with verification & rollback


These tools form a reproducible project state suite.


---

📦 Future Roadmap

Interactive restore preview (file diff, size, changeset)

Restore-to-new-path mode

Encrypted backup support

Signature verification (public key)

macOS hardened extractor extension



---

✅ Requirements

Python 3.8+

Tar archives built by projectclone



---

📜 License

MIT  free, open, audit-friendly, production-safe.


---

👨‍💻 Author

Dhruv13x  dhruv13x@gmail.com
Designed for reproducibility, disaster-recovery, and zero-trust restore paths.


---

> ⭐️ If this project saves your work or your sanity, consider starring the repo!
Issues & PRs welcome  security mindset first.



---

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

projectrestore-3.0.0.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

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

projectrestore-3.0.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file projectrestore-3.0.0.tar.gz.

File metadata

  • Download URL: projectrestore-3.0.0.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for projectrestore-3.0.0.tar.gz
Algorithm Hash digest
SHA256 522692053bdd2578638857be3beef193e38b61091ca79d6b92fc4202118fddd5
MD5 fc5e047647b507a0790cc834426891cb
BLAKE2b-256 5d672311a647b233e326039295700b3fbec51d5602a2d30b6c44d513386858d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for projectrestore-3.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 projectrestore-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: projectrestore-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 16.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for projectrestore-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 12857342ef080273c299368e05f01cefae7c4654592a50c076a07950d992a4aa
MD5 e0b3cb4da80b6c2ccea9ceac789337d5
BLAKE2b-256 9bfa726f636d725ceb54e93d3db6c0a80986386991fee968f31367fca7ef439f

See more details on using hashes here.

Provenance

The following attestation bundles were made for projectrestore-3.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.

Supported by

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