Local-only encrypted vault for macOS
Argon2id • Chunk AEAD v1 (AES-GCM / ChaCha20-Poly1305) • Post-quantum key protection
Quick Start • Protection Modes • Docs Map • Build
Aegiro is a local-first encrypted vault system for macOS:
- CLI + app workflows for encrypted vault operations
- AGVT v1 storage format with chunked encrypted file data
- APFS disk encryption support with recovery bundles
- Portable USB container flow for non-APFS filesystems
- Non-APFS USB file packing into
.agvtviausb-vault-pack
- Active on-disk format is AGVT v1 (sequential header/wrap/index/manifest/chunk-map/chunk-area layout).
- Read/write paths use v1 chunk key/AAD labels (
AEGIRO-FILE-KEY-V1,AEGIRO-CHUNK-V1) with headerversion = 1and chunk AEAD id1. - New chunk writes prefer AES-GCM on all architectures; ChaCha20-Poly1305 remains supported for fallback and compatibility with existing vault data.
- Reader paths retain legacy compatibility for vaults marked with chunk AEAD id
2, including mixed legacy/v1 chunk domains in existing vault data.
| Mode | Commands | Best for | Notes |
|---|---|---|---|
| APFS volume encryption | apfs-volume-encrypt / apfs-volume-decrypt |
Dedicated APFS external drives | In-place APFS encryption using diskutil |
| Portable encrypted container | usb-container-create / usb-container-open / usb-container-close |
exFAT/FAT/NTFS/APFS USB drives | Encrypted APFS sparsebundle stored on host filesystem |
| Non-APFS file-level vault packing | usb-vault-pack |
Existing non-APFS USB media | Packs user files into AGVT vault file (data.agvt) |
# Build package
bash scripts/build.sh
./dist/aegiro-cli --version
# Create a vault
./dist/aegiro-cli create --vault ~/AegiroVaults/alpha.agvt --passphrase "<pass>"
# Import files
./dist/aegiro-cli import --vault ~/AegiroVaults/alpha.agvt --passphrase "<pass>" ~/Downloads/file.pdf
# Batch import in one run (faster than repeated one-file imports)
./dist/aegiro-cli import --vault ~/AegiroVaults/alpha.agvt --passphrase "<pass>" \
~/Downloads/file-a.pdf ~/Downloads/file-b.pdf ~/Desktop/notes.txt
# List and export
./dist/aegiro-cli list --vault ~/AegiroVaults/alpha.agvt --passphrase "<pass>"
./dist/aegiro-cli export --vault ~/AegiroVaults/alpha.agvt --passphrase "<pass>" --out ~/Recovered
# Export keeps logical paths under --out (avoids duplicate filename collisions)
# Imported logical paths are stored as relative paths (not absolute host paths).
# Whole-folder packing (recommended for folder/USB workflows)
./dist/aegiro-cli usb-vault-pack --source ~/MyFolder --vault ~/AegiroVaults/data.agvt --passphrase "<pass>"create, import, delete, lock, unlock, list, export, preview
backup, restore, verify, status, doctor, scan, shred
apfs-volume-encrypt, apfs-volume-decrypt
usb-container-create, usb-container-open, usb-container-close
usb-vault-pack
Use ./dist/aegiro-cli --help for full options.
brew install liboqs argon2 openssl@3
bash scripts/build.shOutputs:
dist/aegiro-clidist/aegiro-cli-macos-arm64.tar.gz
Build app bundles for both Apple Silicon and Intel (plus universal app):
# Apple Silicon deps
brew install liboqs argon2 openssl@3
# Intel deps (required on Apple Silicon hosts for x86_64 build)
arch -x86_64 /usr/local/bin/brew install liboqs argon2 openssl@3
# Generate app icon (.icns) from your artwork
bash scripts/generate-app-icon.sh --source assets/aegiro-banner.png --overwrite
# Build arm64 + x86_64 + universal app bundle
bash scripts/build-app-universal.sh --configuration release --ad-hoc
# Package the universal app as a styled DMG
# (if omitted, script auto-uses assets/dmg-background.png or assets/aegiro-banner.png when present)
bash scripts/package-dmg.sh \
--app dist/Aegiro.app \
--output dist/Aegiro.dmg \
--background assets/aegiro-banner.png \
--overwriteOutputs:
dist/Aegiro-arm64.appdist/Aegiro-x86_64.appdist/Aegiro.app(universal)dist/Aegiro.dmg
If assets/AppIcon.icns exists, app build scripts include it in the app bundle automatically.
scripts/package-dmg.sh sets Finder window/icon positions so users see a drag-to-Applications layout.
Jump between project markdown pages:
- Encryption Scheme Paper (Implementation)
- USB Encryption Schematics
- USB Encryption Diagrams
- Documentation Index
- Repository Structure
- App UI Design
- macOS File Associations
- Ownership & Usage
- Agent Workflow Rules
- Default file-count limit per vault:
1,000(AEGIRO_MAX_FILES_PER_VAULTto override). - Non-APFS metadata paths are skipped in USB user-data flow.
- Prefer batched imports in one command; repeated small imports are slower because each run rewrites vault metadata/chunk map.
- Export preserves logical paths under the output directory by default.
- Chunk encryption uses per-file derived keys and opaque chunk-map file IDs (no plaintext file paths in chunk map).
- All encryption workflows are local; no telemetry endpoints are used by default.
This project uses a custom source-available license in LICENSE.txt.
- External contributions and pull requests are accepted.
- Contribution workflow and requirements are in CONTRIBUTING.md.
- Redistribution or republication (including App Store listings and DMG/binary distribution) is not allowed.
- Full terms and ownership boundaries are defined in LICENSE.txt and docs/legal/OWNERSHIP.md.
