A local-only journal with serious encryption. Free, open source, and never touches the internet.
mini-diarium.com · Download · Documentation · Features · Philosophy · Benchmarks
Mini Diarium is free, open source, and will always be. If you find it useful and want to support its development, consider buying me a coffee on Ko-fi. Every donation goes directly toward keeping this project alive and improving.
Download the latest release for your platform from GitHub Releases.
Quick install:
- Windows (WinGet):
winget install fjrevoredo.MiniDiarium - macOS (Homebrew):
brew tap fjrevoredo/mini-diariumthenbrew install --cask mini-diarium - Linux (Flatpak):
flatpak install flathub io.github.fjrevoredo.mini-diarium
For package formats, first-run notes (Gatekeeper / SmartScreen), and checksum verification, see docs/INSTALLATION.md.
- Launch Mini Diarium
- Create a password (this encrypts your journal; there is no recovery if forgotten)
- Write your first entry. It auto-saves as you type
- Navigate between days with
Ctrl+[/Ctrl+]or click dates on the calendar - Lock your journal when you're done
Mini Diarium is a spiritual successor to Mini Diary by Samuel Meuli. I loved the original tool. It was simple, private, and did exactly what a journal app should do. Unfortunately, it's been unmaintained for years and its dependencies have aged out. I initially thought about forking it and modernizing the stack, but turned out impractical. So I started over from scratch, keeping the same core philosophy (encrypted, local-only, focused) while rebuilding completely with Tauri 2, SolidJS, and Rust. The result is a lighter, faster app with stronger encryption and a few personal touches.
Mini Diarium is intentionally opinionated. The philosophy is not a side note, it is the product:
- Small, extensible core: keep core responsibilities tight (encrypt, store, authenticate) and push extras to extension points
- Boring security: use established algorithms and audited libraries, never custom crypto
- Local-only by design: no cloud sync, no telemetry, no analytics, no hidden network behavior
- Easy in, easy out: import from common formats and export in open formats to avoid lock-in
- Focused scope: private journaling over feature sprawl
- Simplicity over cleverness: fewer moving parts, smaller attack surface, easier maintenance
Read the full principles and how these translates to the architecture in PHILOSOPHY.md.
Note
Mini Diarium uses AI tooling as leverage for human engineers, never as a replacement. Every change still passes through deliberate design, careful implementation, proper testing, and direct feedback. Responsibility, authorship, and final judgment remain human.
- Key file authentication: unlock your journal with an X25519 private key file instead of (or alongside) your password, like SSH keys for your journal. See docs/KEY_FILE_AUTHENTICATION.md.
- Local-only journals: create journals that auto-unlock on your device (no password prompt) while still encrypting entries at rest.
- AES-256-GCM encryption: all entries are encrypted with a random master key. Each auth method holds its own wrapped copy of that key, so adding or removing a method is O(1), with no re-encryption of your entries.
- Multiple journals: keep separate journals for different purposes (personal, work, travel).
- Rich text editor: including images.
- Tags
- Multiple entries per day: keep separate entries for the same date without merging them together
- Calendar navigation
- Import: Mini Diary JSON, Day One JSON/TXT, and jrnl JSON with additive imports that preserve separate same-date entries
- Export: JSON for structural fidelity and Markdown for human-readable best-effort export
- Themes
- Automatic backups: backup on unlock with rotation
- Statistics
- Preferences: first day of week, future entries toggle, title visibility, spellcheck, auto-lock, password change, authentication method management
- Cross-platform: Windows, macOS, and Linux
- Zero network access: no telemetry, no analytics, no update checks
- Online user docs: https://mini-diarium.com/docs
- Offline / GitHub user guide: docs/USER_GUIDE.md
- Installation: docs/INSTALLATION.md
- Key file authentication: docs/KEY_FILE_AUTHENTICATION.md
- Architecture diagrams and flows: docs/ARCHITECTURE.md
- Known issues / tradeoffs: docs/KNOWN_ISSUES.md
- Privacy: docs/PRIVACY.md
- Security model + reporting: SECURITY.md
- User plugins (Rhai): docs/user-plugins/USER_PLUGIN_GUIDE.md
For the diagrams and detailed data flows, see docs/ARCHITECTURE.md.
| Action | Shortcut |
|---|---|
| Previous Day | Ctrl+[ |
| Next Day | Ctrl+] |
| Go to Today | Ctrl+T |
| Go to Date | Ctrl+G |
| Previous Month | Ctrl+Shift+[ |
| Next Month | Ctrl+Shift+] |
| Preferences | Ctrl+, |
Statistics, Import, and Export are available via the Journal menu (no default keyboard accelerators).
On macOS, use Cmd instead of Ctrl.
Prerequisites: Rust (see rust-toolchain.toml), Bun 1.x, and Tauri v2 system dependencies.
For detailed platform-specific instructions (Linux package names, Fedora setup, Wayland troubleshooting), see CONTRIBUTING.md.
git clone https://github.com/fjrevoredo/mini-diarium.git
cd mini-diarium
bun install
bun run tauri buildArtifacts will be in src-tauri/target/release/bundle/.
- Tauri 2: desktop app framework (Rust backend, web frontend)
- SolidJS: reactive UI framework
- Rust: backend logic, encryption, database
x25519-dalek,hkdf,sha2: X25519 ECIES key wrapping for key file authentication
- SQLite: local encrypted database storage
- TipTap: rich text editor
- UnoCSS: utility-first CSS
- Kobalte: accessible UI primitives
For the full list of known limitations, deliberate tradeoffs, and technical debt, see docs/KNOWN_ISSUES.md.
User-facing highlights:
- Concurrent access to the same journal file is not supported (by design)
- No password recovery — losing all credentials is permanent (by design)
- Full-text search is not available — removed in v0.2.0 because the FTS index stored plaintext, defeating encryption
- Importing the same file twice creates duplicate entries (no deduplication)
- Plugin changes require an app restart to take effect
You can add local import/export extensions using Rhai scripts in your journal's plugins/ folder.
See docs/user-plugins/USER_PLUGIN_GUIDE.md for requirements, best practices, and a complete example plugin.
Criterion benchmarks for the crypto and database hot paths are tracked on every push to master and published at fjrevoredo.github.io/mini-diarium/benchmarks/.
The page covers four areas: Argon2id key derivation (intentionally slow — ~200 ms to resist brute-force), AES-256-GCM encrypt/decrypt at three entry sizes, SQLite operations (insert, update, delete, date enumeration, full scan), and word-count calculation. Each card shows the latest timing and a Chart.js trend chart over the last 30 CI runs.
See CONTRIBUTING.md for setup instructions, development workflow, and conventions. For maintainers adding official plugins, see docs/BUILTIN_PLUGIN_GUIDE.md. For maintainers changing frontend UI/state, the Rust backend, Tauri IPC boundary, WebView security, or CI, see docs/best-practices.
Mini Diarium ships in the following languages:
- English
- Spanish (Español)
- German (Deutsch)
- French (Français)
- Hindi (हिन्दी)
- Italian (Italiano)
If you'd like to add support for another language, see docs/TRANSLATIONS.md for instructions on creating a locale file and submitting a PR.
For maintainers: See docs/RELEASING.md for step-by-step release instructions.
See SECURITY.md for the security model and how to report vulnerabilities.
Mini Diarium is licensed under the MIT License. See LICENSE.
Made with love by Francisco J. Revoredo (with a little help from Claude Code).