| Name | Modified | Size | Downloads / 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_authflag toconfig.json. When active,unlock_diaryandunlock_diary_with_keypairare blocked with a clear error; a newunlock_diary_all_methodsbackend 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
dirattribute (dir="ltr"ordir="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, thedirattribute is never overwritten automatically, preserving manual overrides. A newCtrl+Shift+D/Cmd+Shift+Dkeyboard shortcut toggles the current block between RTL and LTR explicitly. Existing entries without adirattribute are handled by thedir="auto"container fallback and gain an explicit attribute on the next edit. Implementation uses a customBidiExtensionbuilt on@tiptap/pm/state(Plugin/PluginKeyalready installed) and TipTap's built-insetTextDirectioncommand — 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.tsxrefactored into three custom hooks: the 675-LOC component became a 308-LOC shell plus three focused hooks undersrc/components/layout/editor-panel/.useEditorEmptyCheckowns theeditorIsEmptysignal and theeditorHasImages/computeIsEmptyhelpers.useEntryLifecycleowns theloadRequestId/saveRequestId/pendingCreationPromise/justCreatedEntryIdrefs, the 500 ms debounced save, and the journal-lock cleanup callback.useMultiEntryNavowns the per-day navigation (prev/next/add/delete) and exportsfetchEntriesOrdered. The three pre-existing logic-mock tests were renamed to match, and a newEditorPanel.integration.test.tsxadds 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. Seedocs/wip/TECHNICAL_REVIEW_PLAN_2026-04.mdM6.
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_keypairandremove_auth_methodwould 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 byregister_password). Master key wrapping inregister_keypairnow 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-alignstyle was set on the current block, even for RTL paragraphs that the browser renders right-aligned. Clicking Left would silently writestyle="text-align: left", overridingdir="rtl"and corrupting layout. The active-state logic now reads thedirattribute of the current paragraph or heading: whendir="rtl"is set and no explicittext-alignoverride is present, Right is shown as the active alignment, matching the browser's actual rendering. Explicittext-align: lefton an RTL block continues to show Left as active. - Test discovery picking up reference repos: cloning
tiptapandtiptap-docsinto.reference/caused Vitest to discover and attempt to run the upstream test suites. Added.reference/**to theexcludelist invitest.config.ts. - Language list sync script:
bun run sync-languages(scripts/sync-languages.ts) readsAVAILABLE_LOCALESfromsrc/i18n/locales/index.tsas the single source of truth and rewrites HTML-comment-delimited regions inREADME.md(markdown bullet list) andwebsite/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 bothdocs/TRANSLATIONS.md(new step 5 between validate and open-PR) and the pre-release checklist indocs/RELEASING.md. The stale "English only" sentence inREADME.mdis replaced with the current four-language list.