Skip to content

fjrevoredo/mini-diarium

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

186 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Mini Diarium

Mini Diarium

A local-only journal with serious encryption. Free, open source, and never touches the internet.

CI codecov Security Rating

License: MIT Version Platform Follow @MiniDiarium Ko-fi

Tauri v2 SolidJS Rust Flathub

mini-diarium.com · Download · Documentation · Features · Philosophy · Benchmarks

Demo

☕ 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.

Buy Me a Coffee on Ko-fi

Download

Download the latest release for your platform from GitHub Releases.

Quick install:

  • 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

For package formats, first-run notes (Gatekeeper / SmartScreen), and checksum verification, see 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 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.

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.
  • 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

Documentation

Architecture

For the diagrams and detailed data flows, see docs/ARCHITECTURE.md.

Keyboard Shortcuts

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.

Building from Source

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 build

Artifacts will be in src-tauri/target/release/bundle/.

Tech Stack

  • 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

Known Issues

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

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 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/.

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 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.

Translations

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.

Releasing

For maintainers: See docs/RELEASING.md for step-by-step release instructions.

Security

See SECURITY.md for the security model and how to report vulnerabilities.

License

Mini Diarium is licensed under the MIT License. See LICENSE.

Credits

Made with love by Francisco J. Revoredo (with a little help from Claude Code).

Website crawler policy artifacts

About

A local-only journal with serious encryption. Free, open source, and never touches the internet.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors