
A local-only journal with serious encryption. Free, open source, and never touches the internet.
<div align="center"> <img src="https://raw.githubusercontent.com/fjrevoredo/mini-diarium/HEAD/public/logo-transparent.svg" alt="Mini Diarium" width="128" /> # Mini Diarium **A local-only journal with serious encryption.** Free, open source, and never touches the internet. [](https://github.com/fjrevoredo/mini-diarium/actions/workflows/ci.yml) [](https://codecov.io/gh/fjrevoredo/mini-diarium) [](https://sonarcloud.io/summary/new_code?id=fjrevoredo_mini-diarium) [](https://opensource.org/licenses/MIT) [](https://github.com/fjrevoredo/mini-diarium/releases) [](https://github.com/fjrevoredo/mini-diarium#download) [](https://x.com/MiniDiarium) [](https://ko-fi.com/fjrevoredo) [](DONATE.md) [](https://tauri.app) [](https://solidjs.com) [](https://www.rust-lang.org) [](https://flathub.org/apps/io.github.fjrevoredo.mini-diarium) [](https://apps.microsoft.com/detail/9PJFTX44ZS43) [mini-diarium.com](https://mini-diarium.com) · [Download](#download) · [Documentation](https://mini-diarium.com/docs) · [Features](#features) · [Philosophy](https://github.com/fjrevoredo/mini-diarium/blob/master/PHILOSOPHY.md) · [Benchmarks](https://fjrevoredo.github.io/mini-diarium/benchmarks/) <img src="https://assets.kitploit.com/production/public/readmes/11890/e23f1bbb4cd335f847972f08cc07992963040e0268f867ee26d5dee3ede58723.gif" alt="Demo" width="768" /> ## ☕ Support the Project 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. <a href="https://ko-fi.com/fjrevoredo" target="_blank"> <img src="https://assets.kitploit.com/production/public/readmes/11890/6f9d451c59aee4ba293b6a7ae6b100042f5f28390e455277d4c2fe51f1f6349a.webp" alt="Buy Me a Coffee on Ko-fi" height="48" /> </a> Prefer crypto? Monero, Bitcoin, and Lightning are below and in [DONATE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/DONATE.md). </div> <details> <summary><b>Donate with crypto (Monero · Bitcoin · Lightning)</b></summary> <br /> **Monero (XMR)**, standard mainnet address: ```text 4ApNmqczyAoWsprSrCMsPNKTGhxaH1Cs6agLVaGiKuBBVSotWK9uj3oVQkWYUX9XUGQJyC9WB7cMofE8wfp5BbUoEdcwbjv ``` **Bitcoin (BTC)**, on-chain native SegWit (bech32): ```text bc1q0y6v888ala2f8r7tm8g30vqt9ma09w9ww4jhum ``` **Bitcoin over Lightning**, a Lightning address that works with Cake Wallet, Phoenix, Zeus, Blink, and Wallet of Satoshi: ```text [email protected] ``` Always verify addresses against [DONATE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/DONATE.md) on `master` before sending. That file also covers network warnings and what donations do and do not buy. </details> ## Download Download the latest release for your platform from [GitHub Releases](https://github.com/fjrevoredo/mini-diarium/releases). Requires **Windows 10 (1809)+**, **macOS 10.15 Catalina+**, or **Linux** (Ubuntu 20.04+, Fedora 36+, Arch, or equivalent). Quick install: - Windows (Microsoft Store): [apps.microsoft.com/detail/9PJFTX44ZS43](https://apps.microsoft.com/detail/9PJFTX44ZS43) - Windows (WinGet): `winget install fjrevoredo.MiniDiarium` - macOS (Homebrew): `brew tap fjrevoredo/mini-diarium` then `brew install --cask mini-diarium` - Linux (Flatpak): `flatpak install flathub io.github.fjrevoredo.mini-diarium` - NixOS / Nix (Flakes): `nix run github:fjrevoredo/mini-diarium` For package formats, first-run notes (Gatekeeper / SmartScreen), and checksum verification, see [docs/INSTALLATION.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/INSTALLATION.md). ## Quick Start 1. Launch Mini Diarium 2. Create a password (this encrypts your journal; there is no recovery if forgotten) 3. Write your first entry. It auto-saves as you type 4. Navigate between days with `Ctrl+[` / `Ctrl+]` or click dates on the calendar 5. Lock your journal when you're done ## Background Mini Diarium is a spiritual successor to [Mini Diary](https://github.com/samuelmeuli/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. ## Philosophy First 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](https://github.com/fjrevoredo/mini-diarium/blob/master/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. ## Features - **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](https://github.com/fjrevoredo/mini-diarium/blob/master/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**: verified encrypted snapshots taken before migrations and destructive actions, with tiered retention going back a year - **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 ## Documentation - Online user docs: https://mini-diarium.com/docs - Offline / GitHub user guide: [docs/USER_GUIDE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/USER_GUIDE.md) - Installation: [docs/INSTALLATION.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/INSTALLATION.md) - Key file authentication: [docs/KEY_FILE_AUTHENTICATION.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/KEY_FILE_AUTHENTICATION.md) - Architecture diagrams and flows: [docs/ARCHITECTURE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/ARCHITECTURE.md) - Known issues / tradeoffs: [docs/KNOWN_ISSUES.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/KNOWN_ISSUES.md) - Privacy: [docs/PRIVACY.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/PRIVACY.md) - Security model + reporting: [SECURITY.md](https://github.com/fjrevoredo/mini-diarium/blob/master/SECURITY.md) - User plugins (Rhai): [docs/user-plugins/USER_PLUGIN_GUIDE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/user-plugins/USER_PLUGIN_GUIDE.md) ## Architecture For the diagrams and detailed data flows, see [docs/ARCHITECTURE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/ARCHITECTURE.md). ## Keyboard Shortcuts | Action | Shortcut | | -------------------------- | -------------- | | Previous day with an entry | `Ctrl+[` | | Next day with an entry | `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`. ## Building from Source **Prerequisites:** Rust (see `rust-toolchain.toml`), Bun 1.x, and [Tauri v2 system dependencies](https://v2.tauri.app/start/prerequisites/). For detailed platform-specific instructions (Linux package names, Fedora setup, Wayland troubleshooting), see [CONTRIBUTING.md](https://github.com/fjrevoredo/mini-diarium/blob/master/CONTRIBUTING.md). ```bash git clone https://github.com/fjrevoredo/mini-diarium.git cd mini-diarium bun install bun run tauri build ``` Artifacts will be in `target/release/bundle/` (the Cargo workspace root owns `target/`). ## Tech Stack - [Tauri 2](https://v2.tauri.app/): desktop app framework (Rust backend, web frontend) - [SolidJS](https://www.solidjs.com/): reactive UI framework - [Rust](https://www.rust-lang.org/): backend logic, encryption, database - `x25519-dalek`, `hkdf`, `sha2`: X25519 ECIES key wrapping for key file authentication - [SQLite](https://www.sqlite.org/): local encrypted database storage - [TipTap](https://tiptap.dev/): rich text editor - [UnoCSS](https://unocss.dev/): utility-first CSS - [Kobalte](https://kobalte.dev/): accessible UI primitives ## Known Issues For the full list of known limitations, deliberate tradeoffs, and technical debt, see [docs/KNOWN_ISSUES.md](https://github.com/fjrevoredo/mini-diarium/blob/master/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 runs as an in-memory scan over decrypted entries (added back after the v0.2.0 FTS removal); nothing searchable is written to disk - Importing the same file twice creates duplicate entries (no deduplication) - Plugin changes require an app restart to take effect ## Extending Mini Diarium You can add local import/export extensions using Rhai scripts in your journal's `plugins/` folder. See [docs/user-plugins/USER_PLUGIN_GUIDE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/user-plugins/USER_PLUGIN_GUIDE.md) for requirements, best practices, and a complete example plugin. ## Performance Benchmarks 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/](https://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. ## Contributing See [CONTRIBUTING.md](https://github.com/fjrevoredo/mini-diarium/blob/master/CONTRIBUTING.md) for setup instructions, development workflow, and conventions. For maintainers adding official plugins, see [docs/BUILTIN_PLUGIN_GUIDE.md](https://github.com/fjrevoredo/mini-diarium/blob/master/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](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/best-practices/README.md). ### Translations Mini Diarium ships in the following languages: <!-- supported-languages-start --> - Chinese (Simplified) (简体中文) - English - French (Français) - German (Deutsch) - Hindi (हिन्दी) - Italian (Italiano) - Portuguese (Brazil) (Português (Brasil)) - Russian (Русский) - Spanish (Español) <!-- supported-languages-end --> If you'd like to add support for another language, see [docs/TRANSLATIONS.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/TRANSLATIONS.md) for instructions on creating a locale file and submitting a PR. ## Releasing For maintainers: See [docs/releasing/RELEASING.md](https://github.com/fjrevoredo/mini-diarium/blob/master/docs/releasing/RELEASING.md) for step-by-step release instructions. ## Security See [SECURITY.md](https://github.com/fjrevoredo/mini-diarium/blob/master/SECURITY.md) for the security model and how to report vulnerabilities. ## License Mini Diarium is licensed under the MIT License. See [LICENSE](https://github.com/fjrevoredo/mini-diarium/blob/master/LICENSE). ## Credits Made with love by [Francisco J. Revoredo](https://github.com/fjrevoredo) (with a little help from Claude Code). ## Contributors Thanks to everyone who has contributed code, translations, or improvements to Mini Diarium: <a href="https://github.com/jottyfan"><img src="https://assets.kitploit.com/production/public/readmes/11890/b7e7648fdfb5d0a02174a773534e7b94e1178c3bd04326a60dbee46e855b11f4.png" width="40" height="40" alt="jottyfan" /></a> <a href="https://github.com/Yujonpradhananga"><img src="https://assets.kitploit.com/production/public/readmes/11890/0c0777d099c3dcd417cedc07e7c4df16aeda7377b2f3681d68b511916f298d2d.png" width="40" height="40" alt="Yujonpradhananga" /></a> <a href="https://github.com/albanobattistella"><img src="https://assets.kitploit.com/production/public/readmes/11890/86b85eb4a2577bc4a137c147aa92414f406e1b9e31472b4faa7724866c966294.png" width="40" height="40" alt="albanobattistella" /></a> <a href="https://github.com/tyler274"><img src="https://assets.kitploit.com/production/public/readmes/11890/ea43599a8ce89d5ce3582527f34fa3256fbf79ee0ac53d2e7feb712d972155d0.png" width="40" height="40" alt="tyler274" /></a> <a href="https://github.com/bronty13"><img src="https://assets.kitploit.com/production/public/readmes/11890/d0283f078a368dc6acadfb49a17f2d58a6df428dc52903b4fe0622c98b1449cd.png" width="40" height="40" alt="bronty13" /></a> <a href="https://github.com/kenlacroix"><img src="https://assets.kitploit.com/production/public/readmes/11890/b2f2c7258db4e635013c88f72a6e0d01911532841fb615e15f11dd5c28f82621.png" width="40" height="40" alt="kenlacroix" /></a> <a href="https://github.com/d1nch"><img src="https://assets.kitploit.com/production/public/readmes/11890/3043466f05b9ed4f6923b4596fe6eda779be95b11dc768e8c77e37217858ab01/6eefc434480fec18560df9f8630f332606bcba1e8300290b4e0fd1821c4eeff6-display-v1.webp" width="40" height="40" alt="d1nch" /></a> <a href="https://github.com/wcxu21"><img src="https://assets.kitploit.com/production/public/readmes/11890/b073f632c7ed2319df0ea12c8ee4da774e8a7eb9178f4ac75e71097d38b6a1d2/3cbb9f3bb2d03b03cd137d033a3ef39a2e9941f6c29d952fecc78418fc880cac-display-v1.webp" width="40" height="40" alt="wcxu21" /></a> ## Star History <a href="https://www.star-history.com/?repos=fjrevoredo%2Fmini-diarium&type=date&legend=top-left"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=fjrevoredo/mini-diarium&type=date&theme=dark&legend=top-left" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=fjrevoredo/mini-diarium&type=date&legend=top-left" /> <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=fjrevoredo/mini-diarium&type=date&legend=top-left" /> </picture> </a>