Secure, offline-recoverable backups with printable QR documents and a browser recovery kit.
Format spec
·
Format notes
·
Security policy
Issues
·
Report Bug
·
Request Feature
Start here: Quick Start
- What Is Ethernity?
- Status (Stable v1)
- Who It's For / Not For
- Document Previews
- Quick Start
- First Backup
- First Recovery
- Troubleshooting (Quick Fixes)
- Workflow Playbooks
- Security at a Glance
- How Recovery Inputs Work
- Command Cheatsheet
- Release Artifacts
- Development Quickstart
- Contributing
- Credits
- Star History
- License
Ethernity is a Python CLI that turns sensitive files into encrypted, printable recovery artifacts. The output combines machine-readable QR payloads with human-readable fallback text, so you can recover data offline even if scanning fails.
A bundled browser recovery kit can reconstruct and decrypt backups locally, without calling cloud services or online APIs. This is designed for high-friction, low-dependency recovery scenarios where physical media matters.
Ethernity is opinionated around verifiability: formats are documented, payload structures are explicit, and release artifacts include provenance material.
- Until a
v1.0.0release is published on GitHub Releases, Ethernity remains experimental. - Once
v1.0.0is released, stable v1 backups and recovery artifacts follow the baseline indocs/format.md. - From
v1.0.0onward, future stable releases will maintain backward compatibility for stable v1 backups and recovery artifacts. - Do not use Ethernity as your only backup path; run recovery drills and keep an independent backup.
Ethernity is a good fit if you need:
- offline-capable secret recovery workflows
- printable artifacts for long-term or distributed physical custody
- threshold-shared recovery for multi-party control
- auditable data handling steps instead of black-box cloud backup behavior
Ethernity is usually not a good fit if you need:
- always-on background synchronization
- turnkey, no-maintenance backup infrastructure
- centralized managed recovery operated by a third-party service
Rendered examples from the Sentinel design on A4 paper. These are first-page previews of the generated PDFs.
Classic template previews (Maritime):
Fastest path: install, run one backup, run one recovery, then confirm outputs match.
- Python 3.13+ (for source and pip-based installs)
cosignonly if you verify release artifacts- Chromium binaries for PDF rendering (auto-installed on first backup/render run)
- local disk space for generated PDFs and optional shard documents
Download the archive matching your OS and CPU.
Artifact naming:
ethernity-{tag}-{os}-{arch}.{zip|tar.gz}
Download and verify on Linux:
TAG="v0.9.1"
OS_ARCH="linux-x64" # or linux-arm64
BASE="ethernity-${TAG}-${OS_ARCH}.tar.gz"
curl -LO "https://github.com/MinorGlitch/ethernity/releases/download/${TAG}/${BASE}"
curl -LO "https://github.com/MinorGlitch/ethernity/releases/download/${TAG}/${BASE}.sigstore.json"
cosign verify-blob --bundle "${BASE}.sigstore.json" "${BASE}"
tar -xzf "${BASE}"
./ethernity-${TAG}-${OS_ARCH}/ethernity --helpDownload and verify on macOS:
TAG="v0.9.1"
OS_ARCH="macos-arm64" # or macos-x64
BASE="ethernity-${TAG}-${OS_ARCH}.tar.gz"
curl -LO "https://github.com/MinorGlitch/ethernity/releases/download/${TAG}/${BASE}"
curl -LO "https://github.com/MinorGlitch/ethernity/releases/download/${TAG}/${BASE}.sigstore.json"
cosign verify-blob --bundle "${BASE}.sigstore.json" "${BASE}"
tar -xzf "${BASE}"
./ethernity-${TAG}-${OS_ARCH}/ethernity --helpWindows PowerShell equivalent:
$Tag = "v0.9.1"
$OsArch = "windows-x64" # currently published Windows variant
$Base = "ethernity-$Tag-$OsArch.zip"
Invoke-WebRequest "https://github.com/MinorGlitch/ethernity/releases/download/$Tag/$Base" -OutFile $Base
Invoke-WebRequest "https://github.com/MinorGlitch/ethernity/releases/download/$Tag/$Base.sigstore.json" -OutFile "$Base.sigstore.json"
cosign verify-blob --bundle "$Base.sigstore.json" "$Base"
Expand-Archive -Path $Base -DestinationPath .
.\ethernity-$Tag-$OsArch\ethernity.exe --helpFor full verification and provenance guidance, use Wiki: Release Artifacts.
pipx is recommended when you want isolated CLI installation:
pipx install ethernity-paper
ethernity --helppip is acceptable inside an existing Python environment:
pip install ethernity-paper
ethernity --helpgit clone https://github.com/MinorGlitch/ethernity.git
cd ethernity
uv sync --extra dev --extra build
uv run ethernity --helpCreate a backup:
ethernity backup --input ./secrets.txt --output-dir ./backup-demoCommon outputs:
| File | Purpose |
|---|---|
qr_document.pdf |
primary scan source for payload recovery |
recovery_document.pdf |
fallback text and metadata recovery path |
shard_*.pdf (optional) |
threshold shard artifacts when sharding enabled |
signing_key_shard_*.pdf (optional) |
separate signing-key shard artifacts |
Recover from scans:
ethernity recover --scan ./backup-demo --output ./restored.binFor fallback-text and shard-driven recovery paths, use playbooks C and D below.
ethernity kit --output ./recovery_kit_qr.pdf# 1) Create sample input
printf '{"vault":"demo"}\n' > vault-export.json
# 2) Backup
ethernity backup --input ./vault-export.json --output-dir ./demo-backup
# 3) Recover from scans
ethernity recover --scan ./demo-backup --output ./vault-export.recovered.json
# 4) Validate payload equality
cmp ./vault-export.json ./vault-export.recovered.jsonExpected result: cmp exits with status 0 and recovered JSON is byte-identical.
Use the wiki troubleshooting guide for onboarding and recovery issues:
For release verification and artifact provenance details, use:
Runbook templates and operator checklists now live in the wiki:
Use the README Quick Start above for the shortest install/backup/recovery path, then adopt a wiki playbook for your actual operating procedure.
Ethernity helps protect against:
- data loss in low-connectivity or offline-only scenarios
- accidental corruption through frame-level validation and integrity checks
- single-holder compromise when threshold sharding is used correctly
Ethernity does not protect against:
- compromised endpoints at backup or recovery time
- weak, reused, or leaked passphrases
- policy failures in shard custody distribution
- operational mistakes that skip recovery drills
Hard warning:
- do not treat generated artifacts as magically safe by default
- security outcome depends on custody controls, passphrase quality, and tested runbooks
Read full policy and reporting guidance in SECURITY.md.
For format-level guarantees and bounds, use:
Data-flow diagrams, input-mode guidance, and recovery path selection tips now live in the wiki:
Detailed command tables, config examples, and operator defaults moved to:
Quick references:
ethernity --helpethernity backup --helpethernity recover --helpethernity kit --help
Release packaging, verification, and provenance guidance is maintained in the wiki: Wiki: Release Artifacts.
git clone https://github.com/MinorGlitch/ethernity.git
cd ethernity
uv sync --extra dev --extra build
uv run playwright install chromiumCore checks:
uv run pytest tests/unit tests/integration -q
uv run ruff check src tests
uv run ruff format --check src tests
uv run mypy src
cd kit
npm ci
# Requires libdeflate-gzip (for example: apt install libdeflate-tools)
node build_kit.mjs
cd ..This rebuild emits both recovery kit variants:
src/ethernity/kit/recovery_kit.bundle.html(lean, default)src/ethernity/kit/recovery_kit.scanner.bundle.html(jsQR scanner variant)
Use CONTRIBUTING.md for workflow policy, expectations, and quality gates.
Contributions are welcome. Prefer focused PRs with tests/docs updates when behavior changes.
Before opening a PR, read CONTRIBUTING.md, SECURITY.md, and AGENTS.md.
Ethernity was heavily inspired by Paperback by cyphar. Also worth checking out:
- Rememory by eljojo
Core open-source building blocks include:
- age
- Typer, Rich, and Questionary
- fpdf2, Jinja2, and Playwright
Standards and verification ecosystem acknowledgements:
GPLv3 or later. See LICENSE for full terms.







