Offline Encrypted Container Manager β seal your files into portable, password-protected containers on your own device. AES-256-GCM + Argon2id, 100% offline, zero telemetry.
π cryptainer.forked.online Β· β¬οΈ Download Β· π Docs
Cryptainer is free and open source. Grab a build, or compile from source.
| Platform | Download | Notes |
|---|---|---|
| π§ Linux | AppImage Β· .deb | AppImage runs on any distro β no install |
| π€ Android | APK | universal, signed release |
| πͺ Windows | coming soon | build from source |
| π macOS | coming soon | build from source |
| π± iOS | coming soon | build from source |
All releases & checksums β github.com/mrvigneshvt/Cryptainer/releases
One Rust + Tauri core runs everywhere, so a .ctnr sealed on one platform opens, byte-for-byte, on another.
- π Military-Grade Encryption: AES-256-GCM authenticated encryption with Argon2id key derivation
- π¦ Encrypted Containers: Store multiple files in a single encrypted container
- π Password Protection: Unlock containers with your password β no keys stored on disk
- β‘ Lazy Decryption: Open a container instantly β files decrypt on-demand when you preview them
- βοΈ Edit Mode: Add or remove files from existing containers with automatic re-encryption
- πΎ Portable Format: Export/import containers using the
.ctnrfile format - ποΈ Local Storage: All data stored locally β no cloud, no servers, 100% offline
- Memory-Safe Key Handling: AES keys are wrapped in
Zeroizing<>and wiped from memory immediately when containers are locked - LRU Cache with Zeroization: Decrypted file data is cached (50 MB) and zeroized on eviction or explicit release
- Session Management: Unlocked containers held in memory only, cleared on lock/app close
- Integrity Protection: SHA-256 checksums + GCM authentication tags detect tampering or corruption
- V1 β V2 Auto-Migration: Legacy containers are automatically migrated to the v2 per-file encryption format on unlock
- Configurable Security Levels: Choose from Fast, Standard, High, or Paranoid Argon2id settings
- Auto-Lock: Automatically lock containers after configurable period of inactivity (default 5 minutes)
- Images: PNG, JPG, GIF, WebP (with preview)
- Videos: MP4, WebM (with playback)
- Audio: MP3, WAV, OGG (with playback)
- Documents: PDF (with embedded viewer)
- Code Files: 20+ languages with syntax highlighting (Rust, TypeScript, Python, etc.)
- Text Files: UTF-8 text with line numbers
- Binary Files: Hex dump view with offset/hex/ASCII display
- π Search & Filter: Search containers by name or tags
- π·οΈ Tag System: Organize containers with custom tags, filter by tag
- π Sort Options: Sort by name, date, size, or file count
- βοΈ Settings: Configure auto-lock timeout
- π Password Hints: Optional hints to help remember passwords
- πͺ Password Strength: Visual indicator for password strength
- π¨ Themes: PRISM (light, frosted glass) and CIPHER (dark, terminal) β two complete design systems
- Rust β Systems programming with memory safety (edition 2021)
- Tauri v2 β Secure cross-platform app framework (desktop + mobile)
- AES-256-GCM β Authenticated encryption (via
aes-gcmv0.10) - Argon2id β Memory-hard password hashing (via
argon2v0.5) - SQLite β Local metadata storage (via
sqlxv0.7) - LRU Cache β Bounded in-memory cache with zeroization (via
lruv0.12) - Zeroize β Automatic secure memory wiping (via
zeroizev1.7)
- React 18 β UI framework
- TypeScript β Type-safe JavaScript
- Vite β Fast build tooling
- Zustand β Lightweight state management
- Prism.js β Syntax highlighting (via
prism-react-renderer) - react-dropzone β Drag-and-drop file selection
# Clone the repository
git clone https://github.com/mrvigneshvt/Cryptainer.git
cd cryptainer
# Install dependencies
npm install
# Run in development mode
npm run tauri dev
# Build a release bundle (.AppImage, .deb, .dmg, .msi β¦)
npm run tauri build# One-time: initialise the Android project (needs Android SDK + NDK)
npm run tauri android init
# Build a signed release APK / AAB
npm run tauri android buildSee docs/SETUP.md for detailed setup instructions and platform-specific dependencies.
- Click "+ New Container"
- Select files to encrypt (drag-and-drop or file picker)
- Choose security level (Standard recommended)
- Set a strong password (min 8 characters)
- Optional: Add password hint and tags
- Click "Create & Encrypt"
- Click on a container card in the vault grid
- Enter your password
- Browse files β click any file to preview it
- Files decrypt on-demand; previews stream for videos/audio
- Open an unlocked container
- Click "Edit"
- Remove files or add new ones
- Enter password to verify and save changes
- Container is automatically re-encrypted with fresh nonces
- Export: Click the β button on a container card β save
.ctnrfile - Import: Click "Import .ctnr" β select one or more files β containers appear in vault
βββββββββββββββββββββββ
β React App β UI components, Zustand store, previews, auto-lock
β (TypeScript) β
βββββββββββββββββββββββ€
β Tauri IPC Layer β 10 type-safe invoke() commands
βββββββββββββββββββββββ€
β Rust Backend β AES-256-GCM, Argon2id, SQLite, LRU cache
β (src-tauri/src/) β
β β
β βββββββββββββββββ β
β β crypto.rs β β Encrypt/decrypt, key derivation
β βββββββββββββββββ β
β βββββββββββββββββ β
β β storage.rs β β SQLite CRUD (sqlx)
β βββββββββββββββββ β
β βββββββββββββββββ β
β β session.rs β β Session store + LRU cache with zeroization
β βββββββββββββββββ β
β βββββββββββββββββ β
β β export.rs β β .ctnr file format
β βββββββββββββββββ β
β βββββββββββββββββ β
β β commands.rs β β 10 IPC command handlers
β βββββββββββββββββ β
βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β File System + DB β .enc blobs on disk + SQLite metadata DB
βββββββββββββββββββββββ
See docs/ARCHITECTURE.md for the complete module graph, component tree, and data flow.
Cryptainer uses two container formats:
| Format | Description | Status |
|---|---|---|
| v1 (legacy) | Single-blob encryption β entire payload encrypted as one AES-256-GCM output | Migrated to v2 on unlock |
| v2 (current) | Per-file encryption β metadata encrypted separately, each file encrypted individually, lazy decryption, LRU cache | Active |
See docs/CRYPTO.md for the full cryptographic specification and blob layout.
- β File contents (AES-256-GCM authenticated encryption)
- β File names and metadata (inside encrypted metadata section)
- β Container structure and organization
- β Integrity (SHA-256 checksums + GCM authentication tags)
- Container name (shown in UI for identification)
- Creation/modification dates
- File count and total size
- Password hint (intentionally visible for user convenience)
- Algorithm and KDF parameters
- Protects against: Unauthorized access, offline attacks, database theft, blob tampering
- Does NOT protect against: Compelled disclosure (password required), memory attacks on unlocked containers, keyloggers/malware on the host system
# Rust unit tests
cargo test
# TypeScript type checking
npx tsc --noEmit
# Rust linting
cargo clippy -- -D warningsSee docs/SETUP.md for full development workflow and docs/CHANGELOG.md for release history.
cryptainer/
βββ astro-landing/ # Marketing site β cryptainer.forked.online
βββ docs/ # Documentation
βββ src/ # React frontend
βββ src-tauri/ # Rust backend
β βββ src/ # Rust source modules
β βββ tests/ # Integration tests
β βββ migrations/ # SQLite migrations
βββ package.json # npm dependencies
βββ vite.config.ts # Vite configuration
| Document | Description |
|---|---|
docs/IDEA.md |
Project vision, design philosophy, threat model |
docs/ARCHITECTURE.md |
Module graph, component tree, data flow, dependencies |
docs/API.md |
Complete IPC command reference |
docs/CRYPTO.md |
Cryptographic specifications, blob format, key handling |
docs/SETUP.md |
Development setup guide |
docs/CHANGELOG.md |
Release history |
MIT License β see LICENSE for details.
- Tauri for the secure app framework
- Argon2 for password hashing
- AES-GCM for authenticated encryption
- Prism.js for syntax highlighting
Made with Rust + Tauri Β· cryptainer.forked.online Β· built by forked.online