Download Latest Version Mini-Diarium-0.6.2-windows.exe (12.8 MB)
Email in envelope

Get an email when there's a new version of Mini-Diarium

Home / v0.4.19
Name Modified Size InfoDownloads / Week
Parent folder
checksums-windows.txt 2026-04-27 196 Bytes
Mini-Diarium-0.4.19-windows.exe 2026-04-27 10.5 MB
Mini-Diarium-0.4.19-windows.msi 2026-04-27 12.3 MB
checksums-macos.txt 2026-04-27 96 Bytes
Mini-Diarium-0.4.19-macos.dmg 2026-04-27 23.9 MB
checksums-linux.txt 2026-04-27 197 Bytes
Mini-Diarium-0.4.19-linux.AppImage 2026-04-27 85.5 MB
Mini-Diarium-0.4.19-linux.deb 2026-04-27 13.0 MB
0.4.19 source code.tar.gz 2026-04-27 12.6 MB
0.4.19 source code.zip 2026-04-27 12.9 MB
README.md 2026-04-27 6.3 kB
Totals: 11 Items   170.8 MB 0

What's Changed

v0.4.19 adds mandatory multi-auth unlock enforcement and persistent RTL text direction in the editor, fixes a German locale regression and stale password requirement after auth-slot removal, and refactors the editor panel into three focused hooks.

Added

  • Mandatory multi-auth unlock setting: journals can now require all configured authentication methods simultaneously at unlock time. A "Require All Authentication Methods" toggle in Preferences → Security (hidden for auto-protected journals and when fewer than two non-auto methods are registered) writes a require_all_auth flag to config.json. When active, unlock_diary and unlock_diary_with_keypair are blocked with a clear error; a new unlock_diary_all_methods backend command opens the DB with the first credential and verifies every remaining credential against the already-open connection before committing the session — no crypto changes, no schema migration. The lock screen switches to a combined password + key-file form for affected journals. Removing a non-auto auth method while the flag is active is blocked until the flag is disabled first.
  • RTL text direction persistence: the TipTap editor now writes an explicit dir attribute (dir="ltr" or dir="rtl") into the stored HTML of each paragraph and heading block so text direction is preserved through save, export, and re-open cycles. Direction is auto-detected from the first strongly-directional Unicode character in each block (Arabic, Hebrew, Syriac → RTL; Basic Latin / Latin Extended → LTR); once set, the dir attribute is never overwritten automatically, preserving manual overrides. A new Ctrl+Shift+D / Cmd+Shift+D keyboard shortcut toggles the current block between RTL and LTR explicitly. Existing entries without a dir attribute are handled by the dir="auto" container fallback and gain an explicit attribute on the next edit. Implementation uses a custom BidiExtension built on @tiptap/pm/state (Plugin/PluginKey already installed) and TipTap's built-in setTextDirection command — no new npm dependency.

Changed

  • PHILOSOPHY.md test counts updated to v0.4.19: The implementation guide (Part II) had stale numbers from v0.4.14. Updated to reflect the current test suite: backend 276 tests across 32 modules (was 265/30), frontend 229 tests across 22 files (was ~161/17+), Markdown export 38 tests (was 12), state modules 8 (was 6). Known-gap statement narrowed — auth screens and NotificationsOverlay now have partial coverage.
  • EditorPanel.tsx refactored into three custom hooks: the 675-LOC component became a 308-LOC shell plus three focused hooks under src/components/layout/editor-panel/. useEditorEmptyCheck owns the editorIsEmpty signal and the editorHasImages / computeIsEmpty helpers. useEntryLifecycle owns the loadRequestId / saveRequestId / pendingCreationPromise / justCreatedEntryId refs, the 500 ms debounced save, and the journal-lock cleanup callback. useMultiEntryNav owns the per-day navigation (prev/next/add/delete) and exports fetchEntriesOrdered. The three pre-existing logic-mock tests were renamed to match, and a new EditorPanel.integration.test.tsx adds four flow-level tests (load-then-type, switch-day-while-unsaved, delete-empty-on-nav, create-on-first-keystroke) driving the component through a minimal TipTap shim. Behaviour is unchanged — same races guarded, same debounce, same edge cases. See docs/wip/TECHNICAL_REVIEW_PLAN_2026-04.md M6.

Fixed

  • German locale regression: German (de) was accidentally dropped from both the frontend locale map and the native menu translation table when Italian was added, causing all UI strings and native menus to silently fall back to English for users with German selected. Both wiring points are restored.
  • Stale password requirement after password slot removal: after removing the password auth slot (while retaining one or more keypair slots), register_keypair and remove_auth_method would fail with "No password auth method found". Both commands now gate the password requirement on whether a password slot actually exists — if none is present, being unlocked is sufficient (the same model used by register_password). Master key wrapping in register_keypair now always uses the session key (db.key().as_bytes()) rather than re-deriving it via the password slot. The "Change Password" section and the current-password field in "Add Key File" are now hidden in the Security preferences when no password slot exists.
  • RTL paragraph alignment toolbar active state: the alignment toolbar previously always showed Left as the active button when no explicit text-align style was set on the current block, even for RTL paragraphs that the browser renders right-aligned. Clicking Left would silently write style="text-align: left", overriding dir="rtl" and corrupting layout. The active-state logic now reads the dir attribute of the current paragraph or heading: when dir="rtl" is set and no explicit text-align override is present, Right is shown as the active alignment, matching the browser's actual rendering. Explicit text-align: left on an RTL block continues to show Left as active.
  • Test discovery picking up reference repos: cloning tiptap and tiptap-docs into .reference/ caused Vitest to discover and attempt to run the upstream test suites. Added .reference/** to the exclude list in vitest.config.ts.
  • Language list sync script: bun run sync-languages (scripts/sync-languages.ts) reads AVAILABLE_LOCALES from src/i18n/locales/index.ts as the single source of truth and rewrites HTML-comment-delimited regions in README.md (markdown bullet list) and website/index.html (plain-text <p> sentence) so the supported-language list stays in sync without manual edits. The script is idempotent, exits 1 if any marker is missing (CI-safe), and is wired into both docs/TRANSLATIONS.md (new step 5 between validate and open-PR) and the pre-release checklist in docs/RELEASING.md. The stale "English only" sentence in README.md is replaced with the current four-language list.

Download Mini-Diarium

Source: README.md, updated 2026-04-27