Populars: Dades actualitzades el 27 d’octubre del 2026

Categories

Internet1.356
Comunicació321
Àudio i vídeo898
Gràfics i disseny539
Ofimàtica i productivitat1.124
Eines per a desenvolupadors3.134
Eines d’IA529
Seguretat i privadesa385
Eines del sistema3.114
Jocs523
Educació i ciència239
Xarxa i TI284

Mini Diarium: baixar versions anteriors

Encrypted, local-first journaling app

fjrevoredo Paquets ofimàtics #61 Paquets ofimàtics

Aquí hi ha 32 versions de Mini Diarium, des de 6 de març del 2026 fins a l’actual, 0.7.6. Cadascuna enllaça amb els instal·ladors del mateix desenvolupador.

2026: 32 32 26
VersióDataMidaFitxers
0.7.6Darrera versió 26 d’octubre del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Mini Diarium now offers the full interface in Russian and Simplified Chinese, and the native menu
follows the selected language. The Linux Flatpak also ships the ru_RU spell check dictionary, while
Chinese spell check stays a documented exception.

Added

- Russian translation (#344): The full interface (733 strings) is available in Russian. Select
"Русский" in Preferences → General → Language. The native menu ("Файл", "Настройки...") follows
the selected language, and on Linux spell check uses the ru_RU dictionary, which the Flatpak now
bundles. Thanks to @d1nch (https://github.com/d1nch) for the translation. Known limitation: the
app has only singular and plural word forms, so counts such as 2–4 use the Russian "many" form.
- Simplified Chinese translation (#354): The full interface (733 strings) is available in Simplified
Chinese. Select "简体中文" in Preferences → General → Language. The native menu ("文件", "首选项...")
follows the selected language. On Linux, Chinese is a documented spell check exception: the
Flatpak does not bundle a zh_CN dictionary, so the spell check warning remains until you install
one. Thanks to @wcxu21 (https://github.com/wcxu21) for the translation.

[](https://sourceforge.net/projects/mini-diarium/files/v0.7.6/)
0.7.5 12 d’octubre del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

The Esc key has a new action: you can now set it to lock your journal. Locking is also more
dependable in every situation. Attachments, backup restores, and tag filters are more reliable too,
and journals keep the exact filename you picked.

Added

- Escape can lock the journal (#313, TODO-0125): The ESC key action in Preferences → General has a
third choice, "Lock the journal". With it, pressing Escape locks the journal in the same way as
the Lock button in the header: it saves the open entry and shows the lock animation. Escape does
not lock while a dialog, the Preferences window, or the onboarding tour (also when minimized) is
shown; these keep their own Escape behavior. If you hold Escape down, the journal locks only one
time. "Do nothing" and "Quit the app" do not change.

Fixed

- The Lock button no longer starts a second lock while the journal is locking: The Lock button in
the header was disabled only during a lock that it started itself. If the lock came from Escape,
auto-lock, or focus loss, and the "reduce motion" system setting hid the lock animation, a click
on the button in the 700 ms before the lock finished started a second lock. The button is now
disabled during every lock.
- An attach error no longer shows on a different entry (TODO-0144): If you started to attach a large
file and then opened another entry before it finished, a failure of that attach showed on the
entry that was open now. The Attach button of that entry also stayed disabled until the old attach
ended. Now the result of an attach only shows on the entry it was started for, and the Attach
button of the new entry is available at once. The other picked files still go to the first entry.
The same applies to errors from "Save a copy" and "Remove". The tag list also keeps the newest
result when two tag-list loads overlap.
- Escape in the entry body runs the ESC key action again (#329, TODO-0150): with the ESC key action
set to Quit, pressing Escape while writing in the entry body quits the app again. This stopped
working in v0.7.4.
- "Open backups folder" stays inside the journal's own folder (TODO-0113): When a journal had no
snapshots yet, the button opened the shared backups/ folder, which also shows the backups folders
of other journals in the same directory. It now always opens the journal's own backups/{name}/
folder. When there is nothing to open yet, it shows a translated "There are no backups to show
yet" message, not the untranslated backend text. SECURITY.md, docs/KNOWN_ISSUES.md (KI-13), and
the Backups docs now say that journals sharing one folder can see each other's filenames.
- Restoring entries from a backup no longer leaves a half-restored entry when an attachment or tag
fails to copy (TODO-0133): Each entry's text, attached files, and tags are now restored as one
unit. If one part fails, the entry is not added at all, and no unlinked file is left in the
journal. Entries restored before the failing one stay.
- A partly failed entry restore no longer hides the entries it added (W-02): When one entry failed,
the restore stopped and showed only an error. The entries before it were already in the journal,
but the dialog did not refresh and kept them selected, so a retry added them a second time. The
restore now reports which entries it added and which entry stopped it. The added entries leave the
selection, and the calendar, tags, and open editor refresh. The failed entry and the entries after
it stay selected, with a translated message that the restore stopped. An entry selected two times
in one request is restored once.
- Restore and import no longer link an unrelated image (N-01): An entry image that a backup does not
contain kept its stored image reference, so the restored entry showed an unrelated image of the
live journal with the same id. Restore now finds each image by its id in the backup, so an image
the backup holds comes back even when its link row is missing, and an image the backup does not
hold is left ou
0.7.4 9 d’octubre del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Attachments on entries, a Timeline that filters by tag, and a feedback dialog. The app also refuses
to open a journal saved by a newer version, and Escape no longer quits the app from inside editor
dialogs.

Added
- Tag-aware Timeline (TODO-0124, #315, #314): While a tag filter is active, the Timeline lists only
the entries that have the tag. The filter applies per entry, so an untagged entry on the same day
stays hidden. On a narrow window, where the sidebar is hidden, the Timeline shows its own filter
banner with a clear button, and a message when no entry has the tag. A new Preferences → Writing →
Timeline → Show tags option (off by default) shows each entry's tags as chips under its row. Click
a chip to set or clear the filter. Tag chips come from tag data that is stored unencrypted, so the
change adds no decryption cost and no database schema change.
- File attachments on entries (TODO-0114): Attach documents, PDFs, short videos, or any other file
(up to 20 MB each) to an entry. Attachments show as email-style chips under the editor, next to
the tags. Click a chip to save a decrypted copy to a location you choose. The copy must keep the
attachment's file extension. You can also place an optional inline 📎 reference to an attachment
in the entry text. The reference only points to the attachment and shows as missing if you remove
it. A locked entry hides the attach, remove, and insert-reference controls but still allows saving
a copy. An entry with attachments is never auto-deleted as empty.
- Export: Markdown export writes each attachment as a decrypted file into the assets/ folder and
links it from the entry. JSON export adds an attachments array (name, MIME type, size) per entry.
Print / PDF lists the attachment names. Custom Rhai export plugins do not receive attachment data.
- Restore: Restoring entries from a backup snapshot also restores their attachments and remaps
inline references.
- Schema v14: Adds attachment storage, where identical files are stored once. Older app versions
cannot delete an entry that has attachments, so the app removes the attachment links itself when you
delete an entry. The migration runs automatically on unlock.
- Older app versions: Versions before 0.7.4 cannot delete an entry that has attachments. When they
edit and save such an entry, they drop its inline 📎 references. The files in the strip are kept.
Update every computer that shares the journal.
- Send feedback from the app (TODO-0115): The ⋮ menu has a new Send feedback item, and the unlock
screen has a Send feedback link next to View backups. Both open a dialog with three choices:
Report a bug, Suggest a feature, and Email the developer. The first two open a GitHub issue form
in your browser. The email choice opens your mail client with a subject that includes only the app
version. Nothing is sent automatically, and opening a link does not trigger the focus-loss
auto-lock.

Fixed
- Escape in editor dialogs no longer quits the app (TODO-0127): Pressing Escape to close the Insert
Link or Insert Timestamp dialog, or the tag suggestions, no longer also quits the app when the ESC
key action is set to Quit. App shortcuts no longer fire behind those dialogs. An Escape that
cancels IME input also no longer triggers the ESC key action.
- Ctrl+[ / Ctrl+] jump to the previous/next day with an entry (TODO-0126, #312): The shortcuts
stepped one calendar day, so they landed on empty days, although the docs say "day with an entry".
They now skip empty days. While a tag filter is active, they visit only days that have an entry
with that tag. At the first or last entry they do nothing. The Header ◀/▶ buttons still step one
day. Ctrl+Shift+[ / Ctrl+Shift+] still move by month.
- Timeline row opens the clicked entry (TODO-0124): On a day with more than one entry, clicking a
Timeline row opened the day's newest entry. It now opens the entry you clicked.
- Calendar tag filter refreshes after tag edits (TODO-0124): When you added or remov
0.7.3 15 de setembre del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

This release adds a manual "Recalculate Word Counts" action in Settings, an agent-friendly Markdown
mirror for every documentation page, and a file-based "Create New Journal" flow that lets you pick
the exact file. It also fixes Day One JSON and TXT imports, and corrects two website issues around
screenshot layout and sitemap freshness.

Added

- Agent-friendly docs mirrors (Copy page, llms-full.txt): Each documentation section page now has a
"Copy page" dropdown (Copy page, View as Markdown, Open in ChatGPT/Claude/Perplexity), a per-page
Markdown mirror at website/docs/<slug>.md, and a <link rel="alternate" type="text/markdown">
discovery tag. website/llms-full.txt adds the full concatenated Markdown text of every docs
section as a sibling to the curated llms.txt. An nginx Link: rel="canonical" header canonicalizes
each Markdown mirror to its HTML page rather than noindex, so ranking signal consolidates onto the
HTML page.
- Manual word count recalculation (TODO-0111, #275): Settings → Advanced now has a "Recalculate Word
Counts" button that rescans every entry in the journal and rewrites any stale word_count. The
recalculation skips locked entries and never touches an entry's last-modified date. It runs only
on demand, so there is no automatic or background recalculation.

Changed

- File-based "Create New Journal" flow (TODO-0112): Creating a journal no longer forces a new folder
per journal. On Windows/macOS/non-Flatpak Linux, + Create New Journal now opens a native Save
dialog (pre-filled with the default location and diary.db) so you pick or rename the exact file,
the same way Open Existing already worked. On the Flathub build, Create still shows a dialog-free
form (a native save dialog there can return an unusable temporary path), now with an editable
Filename field so you can create a second journal in the same default folder. If a database file
already exists at the location you choose, the app refuses with a clear error instead of a raw
filesystem failure.

Fixed

- Day One JSON import failed on entries with no text (#294): Day One omits the "text" key entirely
for blank entries, but the importer required it, so the whole file was rejected with a
missing-field error instead of importing anything. text now defaults to empty when absent, and
entries with no text content (after trimming) are skipped rather than imported as blank entries.
- Day One TXT import didn't recognize the current export date format: the date parser only ever
accepted the legacy "DD MMMM YYYY" layout, but Day One's own current export guide documents "MMMM
D, YYYY at H:MM:SS AM/PM TZ" (e.g. "June 24, 2016 at 10:59:06 AM MDT"), and a real export in that
format would fail every entry's date parse. The importer now tries the modern format first and
keeps the legacy format as a fallback. Also fixed: tab-delimited Weather:/Location: metadata lines
that real exports place after the date line were previously leaking into the imported title/text
instead of being skipped, and a blank entry (title and body both empty, including one with an
unparseable date) is now silently skipped instead of importing an empty entry or, for the bad-date
case, failing the whole import.
- Docs screenshot layout shift + sitemap freshness drift (SEO audit): Documentation pages now set
explicit image dimensions, read from the shipped image file at build time, so the page reserves
layout space and screenshots no longer shift as they load. The homepage and the fixed pages now
take their sitemap freshness date from a manually maintained date instead of the file's
modification time, so an unrelated CSS or JS rebuild no longer bumps those pages' freshness
signal.
- Website docs: Added screenshots and diagrams to 10 of the 11 user guide pages (FAQ excluded as
reference-only). Screenshots are live-captured from the real dev app (journal creation, the editor
toolbar and multi-entry Timeline, calendar/search/import/export, three Preferences tabs,
Statistics, and two Backup
0.7.2 31 d’agost del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Mini Diarium 0.7.2 fixes two problems with non-Latin text. Word counts now treat each Han, Hiragana,
or Katakana character as one word instead of counting a whole sentence as a single word, and search
accepts one-character queries when they contain CJK text, so common two-character Chinese and
Japanese words and phrases are findable again.

Fixed

- CJK word counts and short search queries were wrong (#275): Chinese and Japanese text has no
spaces between words, so the word counter (which only split on whitespace) counted an entire
sentence as a single word; it now counts each Han, Hiragana, or Katakana character individually
while Latin and Korean text keep the existing whitespace-delimited counting, and the saved word
count and the live in-editor count use the identical rule. Separately, the search box's
three-character minimum blocked common two-character Chinese and Japanese words and phrases; the
minimum now drops to one character for queries that contain CJK text and stays at three for
everything else.
0.7.1 27 d’agost del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

This release fixes a regression where pressing Enter at the true end of a paragraph silently did
nothing, caused by a duplicate TipTap editing dependency introduced in v0.7.0.

Fixed

- Enter key silently did nothing at the end of a paragraph (#273): pressing Enter with the cursor at
the true end of a paragraph produced no new line, with no visible error. The cause was a duplicate
copy of a TipTap editing dependency, introduced by the v0.7.0 dependency bump: one copy ended up
nested inside another, and TipTap's node-splitting code crashed silently when crossing that
boundary. Only operations that build a brand-new empty paragraph hit the failing path, which is
why the bug looked position-specific. Fixed by pinning the dependency so a single copy resolves. A
regression test guards against the duplicate returning. Full investigation:
docs/archive/2026-08-27-issue-273-enter-key-rca.md
(docs/archive/2026-08-27-issue-273-enter-key-rca.md).
0.7.0 25 d’agost del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Mini Diarium has taken automatic backups since early versions, but they lived entirely in the
background. There was no way to see one existed, confirm it actually opened with your key, or use it
without digging through files by hand. That gap closes here. Backups now have a real interface,
reachable from Preferences after you unlock and from the lock screen itself before you do, since a
backup you can't reach when the journal won't open isn't much of a safety net. From there you can
check a backup's health, restore the whole journal to it, or pull back just the entries you're
missing without disturbing anything already there. The same problem also shows up earlier, before a
backup would ever be needed. An entry could quietly vanish just from editing it wrong: erase its
content, click away, and it was gone, with no backup involved at all. This version stops that at the
source. Erasing an entry no longer deletes it out from under you without asking first. Between the
two changes, the safety net you already had is now something you can actually see and use, and the
everyday accident that used to slip past it entirely no longer does. Design polish, richer
notifications, and a quiet support prompt round out the release, but they are not what it is about.

Added

- Backups are now visible and recoverable from inside the app (TODO-0098 (docs/todo/TODO.md)): the
backup system previously had no user interface at all. There was no way to see whether a backup
existed, when it was taken, or whether it was any good. A new Preferences → Backups panel lists
every backup with its date, why it was taken, how many entries it holds, its size, and whether it
has been checked against this journal's key. It also reports the folder's overall state: whether
backups are working, when the last one was taken, how much space they use against their limit, and
the retention policy in plain language. From here you can take a backup on demand, re-check one,
delete one, or open the backups folder in your file manager.
- The same panel is reachable from the unlock screen, before any password is entered, via View
backups. This is deliberate: the moment you most need to know what backups exist is the moment the
journal will not open. Backup metadata is readable without a key, so the list there is real rather
than a stub. Each backup shows its date, age, trigger, size, and checked state. Entry counts and
date ranges are deliberately held back at the lock screen: a passer-by should learn that backups
exist without learning how much has been written or over what span. Everything that genuinely needs
the master key (creating, checking, deleting) is disabled and says why.
- A failed backup is no longer invisible: backups taken as the app locks or exits run on a
background thread with nothing watching, so a journal whose backups had quietly stopped working
looked identical to one that was up to date. The failure is now recorded and reported in the panel.
The panel also flags a backups folder that cannot be used, covering both a disconnected external or
synced drive and a path that still resolves but holds nothing usable, where something else has taken
its place or it can no longer be read. That second case is detected directly rather than inferred
from a failure record, because a folder that cannot hold a backup cannot hold the record of the
failure either. The record itself carries only when and what triggered it, never an error message:
the file it lives in is plaintext, and an I/O error string is the easiest way to leak a folder path
by accident.
- Passwordless journals say what their backups cannot do: a journal with no password is encrypted
with a key held in this app's settings on this device, so copying its backups folder to another
machine is not enough to open them there. The panel states this outright rather than leaving it to
be discovered during a recovery.
- A journal can be rolled back to a backup: every row has a Restore button. Confirmi
0.6.6 8 d’agost del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

This release makes journal creation safer on Flatpak and other platforms, prevents accidental writes
to backup snapshots, and improves database error reporting. It also declares the serialization
dependency required for reliable standalone core builds.

Fixed
- Creating a journal no longer depends on the folder chooser in Flatpak (TODO-0100
(docs/todo/TODO.md)): + Create New Journal no longer opens the folder picker before showing the
form. The form starts with a working location, so you can create a journal without browsing for a
folder. Browse… remains available when you want to choose a different location.
- The default location is your Documents folder, or the app's own data folder where Documents is not
writable — as on the Flathub build, where the sandbox holds no filesystem permission. The location
is shown in the form before you create anything. Previously a Documents folder that could not be
prepared left the location empty and Add disabled: a create form that could not create.
- Each journal created at the default location gets a folder of its own, named after the journal.
Every journal uses the same diary.db filename, so without this a second journal would have been
registered against the first one's database. Unlocking it would then ask for the first journal's
password under the second one's name.
- A journal already in your list is refused rather than added twice, with an explanation. A folder
you browse to is still used exactly as you chose it.
- The app now rejects a temporary sandbox location as a journal folder and explains why instead of
showing a generic failure (KI-10 (docs/KNOWN_ISSUES.md)). This covers both ways a journal gets a
location: adding one, and Preferences → Data → Change journal directory. The app rejects a move
before touching the database file, because relocating a journal into a path that later stops
resolving is worse than a bad config entry. Existing journals already stored that way are not
repaired automatically; re-add them from their real folder.
- Opening a backup snapshot no longer destroys it: a snapshot is an ordinary encrypted database. +
Open Existing accepted one, and opening it as a journal wrote to it, overwriting the untouched
restore point you were reaching for. backup-*.db files, and anything inside a backups/ folder, are
now refused with instructions to copy the file elsewhere and open the copy. This affected every
platform (KI-11 (docs/KNOWN_ISSUES.md)).
- Database failures are no longer reported as permission problems: database failures were previously
shown as "A file operation failed. Check that you have the necessary permissions", which sent
diagnosis in the wrong direction for weeks. The app now reports the actual problem, and journal
creation records the underlying cause.
0.6.5 5 d’agost del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

This release makes the minimum OS requirements visible to users before download and fixes broken
title-bar buttons on Linux with Wayland.

Added
- Published minimum supported OS versions: the minimum version for each platform (Windows 10 1809+,
macOS 10.15 Catalina+, Linux with glibc 2.31+ / WebKitGTK 4.1) was only recorded in
tauri.conf.json and appeared nowhere a user could find it. It is now stated in the README download
section, a new "System requirements" section in docs/INSTALLATION.md (docs/INSTALLATION.md), the
Getting Started documentation page, and on each platform card in the website download section.
Requested in issue #241 (https://github.com/fjrevoredo/mini-diarium/issues/241) by a user who
could not tell whether the app would run on their Mac before downloading it.

Fixed
- Title-bar buttons did nothing on Linux/Wayland (issue #238
(https://github.com/fjrevoredo/mini-diarium/issues/238), reported on Arch + KDE Plasma 6 +
Flatpak): the minimize, maximize, and close buttons were drawn but ignored every click, and the
only way to make them work was to double-click the title bar first, which had to be repeated on
every launch. The cause is upstream in tao, the windowing library Tauri uses: on Wayland it draws
its own title bar and covers it with a transparent input layer that intercepted the clicks before
the buttons could see them. That layer is re-applied every time the window is shown, and Mini
Diarium deliberately starts hidden so your saved window position is restored before the window
appears, which is why it was broken from the first frame. The app now removes the layer after
showing the window. The fix is Linux-only, turns itself off on X11, and will be dropped once a
Tauri release includes the upstream fix (tao#1218 (https://github.com/tauri-apps/tao/pull/1218),
TODO-0097).
0.6.4 29 de juliol del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Fixed a potential content-loss bug when editing and quickly navigating to the timeline or another
entry, fixed text that could jump into the title field on blank days, and brought the debug dump up
to date with current app features.

Changed

- The debug dump is up to date with the app again (TODO-0090): the diagnostics file under
Preferences → Advanced dated from when Mini Diarium was much smaller, so it described almost
nothing the app does today (no tags, images, custom fonts, entry locking, multiple journals, or
plugins) and a few of its numbers were misleading. It now covers all of those, adds your OS and
WebView versions, backup age and size, and the recent app and in-app log records, and reports the
schema version stored in your database next to the one the app expects, so an upgrade that did not
finish is visible at a glance. The practical effect: a bug report with this file attached can
usually be diagnosed without a round of follow-up questions.
- What it never contains has not changed, and is now enforced by a test: no password, no encryption
key, no device key, no diary content, no entry titles, no tag names, no unlock-method labels, no
journal names, and no file or folder paths. Paths are stripped from the log records before they are
written. The in-app guide and the website docs now list every field the file does contain, so you
can check it yourself before sending it.

Fixed

- Entry content loss when navigating quickly: an entry could be left with its title intact and its
body wiped after typing and immediately switching entries, changing the date, or toggling the
Timeline. The editor committed which entry it was editing (id and title) separately from what that
entry contained, so any interruption in between (a superseded load, a failed image lookup, a
keystroke that beat the load) left a window where the next save paired a real entry with an empty
document.
- Atomic entry commits: id, title, body, and metadata are now written as one indivisible update,
after the entry's images have been resolved, never before
- Hydration guard: a save is refused outright unless the body in the editor actually belongs to the
entry being written
- Snapshot-based saves: the save-vs-delete decision is captured together with the content instead of
being re-derived when the autosave timer fires up to half a second later
- Unmount now flushes: closing the editor (including the Timeline toggle) saves the last few hundred
milliseconds of typing instead of discarding it
- Backend veto restored: the auto-delete command re-checks the real entry body it is given and
refuses to remove anything that is not genuinely blank. It recognises empty editor markup (<p></p>,
<p><br></p>, &nbsp;, and blank paragraphs carrying alignment or text-direction attributes) and
treats everything else as content: an image, a rule, a table, or any markup it does not recognise
keeps the entry
- Typing before an entry loads no longer creates a duplicate entry, and the editor no longer
auto-focuses until the entry it is about to show has finished loading
- Reopening the editor no longer blanks the entry: switching to the Timeline and back reloaded the
entry correctly but then immediately replaced it with an empty document and saved that over the real
one. The editor library emits an "update" event for things that are not edits, including the
internal call that keeps the read-only state in sync, and one of those fired in the moment between
the entry's body being loaded and being handed to the editor, so the still-empty document was
mistaken for the user having deleted everything. Only genuine document changes now count as edits
- Text typed on a blank day could jump into the title field: the title input re-focused itself every
time the day's entry list changed, which happens as soon as the first keystroke creates the entry,
so the rest of the sentence was typed into the title instead of the body. It now takes focus once,
when it appears
0.6.3 27 de juliol del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

This release completes the in-app navigation migration with header day controls and a ⋮ menu, adds
timeline display preferences and a donation page, and fixes Linux spell check. Internally, the
backend is now a three-crate open-core workspace with a sealed API façade, and the Microsoft Store
update pipeline is live.

Added
- Website donation page: added a donation page at mini-diarium.com/donate/
(https://mini-diarium.com/donate/), reachable from a "Support the project" section on the homepage
and a Donate link in the site-wide footer. It lists Ko-fi (card, PayPal, Apple Pay) and the
Monero, Bitcoin, and Bitcoin-over-Lightning addresses, each with a copy-to-clipboard button, plus
the same network-mismatch and traceability notes as DONATE.md. Donations were previously reachable
only from the GitHub repo.
- Day navigation in the header (TODO-0063): the header date is now flanked by previous-day (◀) and
next-day (▶) buttons, and clicking the date opens the Go to Date picker. These actions no longer
require opening the OS menu bar. The next-day button respects the "allow future entries"
preference, stopping at today when future entries are disabled.
- Statistics, Import, and Export are now always available from the app (TODO-0065): the header ⋮
menu always shows Preferences, Statistics, Import, and Export. None of them require a trip to the
OS menu bar anymore.
- Timeline display preferences (TODO-0072, addressing #205
(https://github.com/fjrevoredo/mini-diarium/issues/205)): a new Timeline section under Preferences
→ Writing lets you shrink the timeline date column and hide the entry preview. Date format offers
Full ("Monday, January 15, 2024"), Long, Medium, Short, and ISO (2024-01-15). Every style except
ISO follows your interface language, and each option in the dropdown shows a live example using
today's date. Show entry preview collapses each row to just the date and title when turned off,
fitting more entries on screen. Both default to the previous behavior, so nothing changes unless
you opt in. Screen readers always hear the full date, even when the visible column uses a short
format.

Changed
- The native OS menu is now just Preferences and Exit (TODO-0065): every other native menu item
(Previous/Next Day, Go to Today, Go to Date, Previous/Next Month, Statistics, Import, Export,
About) is gone now that all of them are reachable inside the app, from the header controls and the
⋮ menu. On Windows and Linux the menu bar is a single File menu. On macOS the Mini Diarium app
menu keeps Preferences and Quit alongside the standard Services/Hide/Show All items (Edit and
Window are untouched, since they back standard OS text-editing and window behavior). About now
opens from the ⓘ button in the header, which already did the same thing. All keyboard shortcuts
(Ctrl/Cmd+[, ], Shift+[, Shift+], T, G, F, ,) continue to work exactly as before.

Fixed
- Spell check now works on Linux (TODO-0081, addressing #227
(https://github.com/fjrevoredo/mini-diarium/issues/227)): the "Enable spellcheck" preference
silently did nothing on Linux, so misspelled words never got the red squiggly underline. It now
works. Mini Diarium turns on spell checking and picks a dictionary based on your interface
language, refined by your system locale's region when the two agree. Toggling the preference off
removes the underlines immediately, with no restart needed. Windows and macOS are unchanged. The
Flatpak build bundles dictionaries for all seven interface languages. The .deb/.rpm builds use
your system's installed hunspell dictionaries, or you can drop your own into your enchant config
directory. See Preferences → Spell check on Linux (https://mini-diarium.com/docs/preferences/) for
details.
- Missing Linux spellcheck dictionary guidance: Preferences now gives plain-language recovery steps
when spell checking is unavailable, including a link to Linux setup instructions and Flatpak
repair guidance.

Internal
- Native-menu removal and the JS sho
0.6.2 12 de juliol del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Mini Diarium 0.6.2 brings two new locking controls: auto-lock when the window loses focus so you can
minimize or switch away without leaving your journal open, and a per-entry lock that makes
individual entries read-only so you can browse without worrying about accidental edits. The
auto-lock timeout now enforces a 5-second minimum to keep the app usable.

Added
- Lock journal when the window loses focus (TODO-0068, addressing #194
(https://github.com/fjrevoredo/mini-diarium/issues/194)): a new "Lock when the window loses focus"
toggle in Preferences → Security (off by default, independent of the existing idle-timer
auto-lock) locks the journal a few seconds after the app window loses OS-level focus — minimizing,
Alt+Tab/Cmd+Tab away, clicking another window, or Cmd+H on macOS. A short debounce means a quick
misclick outside the window doesn't lock the journal if focus returns in time, and opening one of
the app's own native dialogs (export, import, key-file save) never triggers it. Detection lives in
Rust (WindowEvent::Focused) rather than the DOM visibilitychange API, which does not reliably fire
on window minimize in the bundled WebView2. Verified end-to-end on Windows; macOS/Linux rely on
the same cross-platform windowing API and have not been separately live-tested.
- Per-entry lock against accidental edits (TODO-0071, addressing #205
(https://github.com/fjrevoredo/mini-diarium/issues/205)): a lock/unlock button in the editor's
entry nav bar makes an entry read-only so you can reread older days from the calendar or timeline
without risking a stray edit. A locked entry cannot be edited, deleted, or re-tagged — the editor,
title field, formatting toolbar, delete button, and the add/remove-tag controls all disable, and
the backend rejects saveentry, deleteentry, addtagtoentry, and removetagfromentry for a locked
entry as a safety net. Locked days show a small passive lock indicator on their calendar cell and
timeline row (the toggle itself lives only in the editor). This is a convenience affordance, not a
security feature: the lock state is stored as a plaintext column and is independent of the
journal's auth-lock. Requires a database migration (schema v12 → v13) that runs automatically on
first unlock.

Fixed
- Auto-lock timeout floor (TODO-0069): the auto-lock timeout preference can no longer be set below 5
seconds. Any pre-existing stored value outside the 5–999 range is corrected automatically on next
load. Addresses #194 (https://github.com/fjrevoredo/mini-diarium/issues/194).
0.6.1 1 de juliol del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Mini Diarium 0.6.1 ships Brazilian Portuguese (pt-BR) localization covering all UI strings and the
native OS menu, and fixes the Linux AppImage to launch on Debian 12 by switching the release CI
runner to ubuntu-22.04 (glibc 2.35).

Added
- Brazilian Portuguese (pt-BR) translation: full Brazilian Portuguese localisation covering all 536
UI strings and the native OS menu, with Brazilian conventions throughout (3-letter month/day
abbreviations Jan–Dez / Dom–Sáb, gerund in -ando/-endo, "você" form). Selectable from Preferences
→ General → Language.

Fixed
- AppImage GLIBC compatibility with Debian 12 (bookworm) (TODO-0051): the Linux release build ran on
ubuntu-latest (resolves to Ubuntu 24.04, glibc 2.39), so the AppImage refused to launch on any
distro with an older glibc, including Debian 12 bookworm (glibc 2.36). The Linux leg of
.github/workflows/release.yml now builds on ubuntu-22.04 (glibc 2.35), so the AppImage now runs on
Debian 12 and other distros with glibc ≥2.35, previously ≥2.38/2.39.
0.6.0 27 de juny del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Mini Diarium 0.6.0 brings full-text search across every entry to everyone, plus a new timeline view
that lists your entries newest-first with clickable previews. Nix flake packaging is now available
for NixOS and Linux users, and several fixes also ship: the editor no longer crashes on lock/unlock,
link tooltips now respond to keyboard focus, font family names sort correctly per locale, and the
Flatpak manifest script validates commit SHAs.

Added

- Timeline view (#161 (https://github.com/fjrevoredo/mini-diarium/issues/161)): a chronological list
of every entry, newest-first, that complements the calendar with a flat date | title + 200-char
preview overview. Open it from the new header toggle (List ⇄ PenLine, timeline-toggle-button
testid); clicking a row jumps straight to that entry in the editor. The list re-fetches
automatically when entries are added or removed, so it stays in sync without a manual refresh.
Previews are generated server-side by previewfromhtml (strips HTML tags, decodes common entities,
collapses whitespace, truncates to 200 chars). Only { id, date, title, preview } crosses the IPC
boundary; the full decrypted entry body never leaves the backend, consistent with the project's
field-level encryption model. The component ships with localized strings, empty/untitled
fallbacks, a <Suspense> loading state, and Vitest coverage for row-click navigation. Contributed
by @kenlacroix (https://github.com/kenlacroix) via #173
(https://github.com/fjrevoredo/mini-diarium/pull/173).
- Full-text search (TODO-0053): search across every entry in the current journal via a palette-style
overlay, opened from the header search button or Ctrl/Cmd+F. Search is case- and
accent-insensitive with AND semantics, returns newest-first results with highlighted snippets, and
clicking a result opens that exact entry in the editor (deep-linking works even on days with
multiple entries). The overlay displays a result count ("12 results found"); when results exceed
200, a truncation notice prompts refinement ("Showing first 200..."). Keyboard navigation is
supported: ArrowDown/ArrowUp navigate results, and ArrowDown from the search input focuses the
first result. Privacy: each query decrypts entries in memory and discards them, so nothing
searchable is ever written to disk, and no plaintext index exists. Promoted both the Rust
#[cfg(feature="experimental")] gate and the frontend VITEEXPERIMENTAL guard to production in the
same PR. Backend searchentries command contributed by @kenlacroix (https://github.com/kenlacroix)
via #171 (https://github.com/fjrevoredo/mini-diarium/pull/171) (addressing #160
(https://github.com/fjrevoredo/mini-diarium/issues/160)); this change wires it into the app shell
and ships it to all users.
- Nix flake packaging: Mini Diarium can now be built and installed directly from this repository on
NixOS and any Linux system with Nix Flakes enabled (x86_64-linux, aarch64-linux). Supports three
integration styles: bare package, NixOS module (programs.mini-diarium.enable = true), and Home
Manager module. An overlay (overlays.default) is also exported for custom configurations. Try it
without installing with nix run github:fjrevoredo/mini-diarium. Contributed by @tyler274
(https://github.com/tyler274) via #159 (https://github.com/fjrevoredo/mini-diarium/pull/159)
(integrated manually).

Fixed

- Locale-aware font family sort: font family names are now sorted with localeCompare instead of the
default Unicode code-point order, which produced incorrect results for non-ASCII family names.
- Keyboard accessibility for link tooltip: the link tooltip in the editor now appears and disappears
on keyboard focus and blur in addition to mouse hover, making hyperlink previews reachable without
a pointer device.
- Flatpak manifest script validates commit SHA: flatpak/rewrite-manifest.py now rejects any COMMIT
argument that is not a 40-character lowercase hex SHA before writing it to the manifest file.
- Duplicate editor ext
0.5.4 18 de juny del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

You can now export your journal as a PDF. Bullet points and numbered lists are properly visible in
the editor again, and the export dialog no longer carries over old errors when reopened.

Added
- Print / PDF export: journal entries can now be exported as a PDF file directly from the app. In
the Export dialog, select Print / PDF from the format dropdown and optionally filter by date range
or month; clicking Print opens a native save dialog and writes a formatted PDF to the chosen path.
Output is A4 portrait with 2 cm margins, entries grouped by date with titles, tags, and full
formatted content including images.
- Page breaks: each page break is placed at natural blank rows so text lines are never cut in half,
and images stay intact without splitting across page boundaries.
- Default filename: the save dialog suggests mini-diarium-export-YYYY-MM-DD_HH-MM.pdf instead of a
plain mini-diarium-export.pdf.

Fixed
- Bullet and numbered lists now display markers in the editor: the Tailwind CSS reset (list-style:
none) was stripping bullet dots and ordinal numbers from all list elements. The editor stylesheet
now explicitly restores list-style-type: disc for unordered lists and list-style-type: decimal for
ordered lists inside the ProseMirror container. Most noticeable on Linux where the WebKit renderer
enforces the reset strictly (issue #163).
- Export dialog state clears when reopened: error and success messages now reset whenever the dialog
becomes visible, so reopening after a failed or successful export always shows a clean state.

[](https://sourceforge.net/projects/mini-diarium/files/v0.5.4/)
0.5.3 5 de juny del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Your journal images are now stored once and shared across entries — paste the same photo into ten
different days and it counts as one. Browse every image you've ever saved with the new visual media
picker, then insert any of them back with a double-click. Fonts also get a major upgrade: each entry
can have its own font family and size, independent of the app default, and the toolbar font controls
now format whatever text you've selected. Links finally work the way you'd expect — custom display
text, auto-prefixed URLs, and an "Open link" button to preview before applying. This release turns
your journal into a true rich-media notebook.

Added
- Image deduplication: images are now stored once in a content-addressed encrypted store inside
diary.db and referenced by ID. Inserting the same image into multiple entries shares one encrypted
copy. All export paths (JSON, Markdown, Rhai plugins) resolve image references back to data URLs
before exporting, preserving full compatibility. Legacy entries that still embed data URLs
continue to display and export correctly; existing saved entries migrate on their next save, and
Mini Diarium JSON imports now normalize embedded data:image/... content into the encrypted image
store during import.
- "Insert existing image" media picker: browse and reuse any image previously saved in the journal
through a visual thumbnail picker with sort, month filter, preview metadata, load-more pagination,
explicit Insert action, and double-click insertion. The picker loads encrypted thumbnail summaries
first and decrypts full image data only for the image being inserted. Inserted images are reused
verbatim (no canvas re-encode), ensuring the stored copy is deduplicated correctly.

Changed
- save_entry now extracts embedded data-URL images atomically into the image store on each save,
reducing stored entry size for entries with images. All writes (image extraction, link update,
entry text rewrite) are committed in a single database transaction.
- Link dialog now has a Display text field: you can override the visible label of a link directly in
the dialog (instead of the URL always being the label). Bare domains like example.com are
auto-prefixed with https://, email addresses become mailto: links, and phone numbers become tel:
links. The dialog also includes an "Open link" button so you can verify a URL before applying it.
- Editor toolbar font controls apply inline formatting: the font family and font size dropdowns in
the toolbar now apply inline marks to the selected text, instead of changing the global
preference. Preferences still controls the app-wide defaults that appear when an entry has no
entry default and no inline formatting on the selection.

Fixed
- External link opening now enforces safe protocols consistently: editor link opening paths now
normalize and allow only http, https, mailto, and tel targets. Unsafe stored or imported protocols
are ignored instead of being passed to the opener plugin.
0.5.2 29 de maig del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

This release adds custom font uploads and Hindi translation, streamlines the Preferences dialog with
immediate-apply settings, polishes the About dialog, and fixes editor placeholder updates on
language switches.

Added
- Custom font upload: users can now upload their own .ttf, .otf, .woff, or .woff2 font files from
Preferences → Advanced → Custom fonts and use them as the editor font. Regular and Bold weights
are uploaded separately; if only a Regular is provided, the browser synthesizes bold text and a
warning is shown in the preferences list. Custom fonts are stored as blobs inside the journal
(diary.db) so they travel to other devices automatically. Deleting the currently selected custom
font reverts the editor to System Default immediately. Schema bumped to v8 (custom_fonts table).
- Hindi (हिन्दी) translation: the app UI is now fully translated into Hindi, covering all 456
strings across every screen — auth, editor, preferences, import/export, stats, tags, onboarding,
and error messages. The native OS menu bar (Navigation, Diary, File, Help) is also translated when
Hindi is selected in Preferences → General → Language.

Changed
- Preferences lifecycle: the Preferences dialog is now close-only (no Save/Cancel footer).
Reversible settings apply immediately across General, Writing, and Security auto-lock controls.
Theme Overrides moved to Preferences → Advanced and now auto-apply as soon as JSON is valid;
invalid JSON stays local with an inline error while the last valid saved overrides remain active.
Explicit actions (password/auth operations, journal reset/move, debug dump export, and custom-font
upload/delete) remain button-driven.
- About dialog link styling: the GitHub and Documentation links are now pill-style buttons (icon +
label, rounded border) and the "Show Welcome Tour" shortcut is a ghost button with a Compass icon,
replacing the bare underlined text links.

Fixed
- Editor placeholder updates on locale switch: the body placeholder ("What's on your mind today?")
now updates immediately and reliably when changing the language in Preferences, including when
switching back to a previously used locale.
0.5.1 26 de maig del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Removed the Windows installer outbound firewall rule which was triggering false-positive errors in
winget's validation pipeline while providing no meaningful additional network isolation beyond the
existing WebView-layer defenses.

Removed
- Windows installer outbound firewall rule: removed the NSIS post-install hook that added a Windows
Firewall block rule for mini-diarium.exe. The rule covered only the main Rust process, not
WebView2 subprocess traffic, so it provided no meaningful additional isolation on top of the
existing WebView-layer defenses (CSP, WebResourceRequested COM handler, init script,
on_navigation). The hook was triggering a false-positive Validation-Defender-Error in winget's
validation pipeline.

[](https://sourceforge.net/projects/mini-diarium/files/v0.5.1/)
0.4.22 13 de maig del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Mini Diarium v0.4.22 bundles two new open-source Arabic-capable fonts (Amiri and Tajawal), replaces
the folder picker with a direct .db file selector for opening existing journals, caps the journal
picker list to 5 visible items with scrolling, and optimizes word-count calculation to
sub-microsecond performance on both plain text and TipTap HTML paths.

Added

- Amiri and Tajawal bundled fonts: two new open-source font families with Arabic script support are
now bundled — Amiri (classic Arabic serif) and Tajawal (modern Arabic sans-serif), each with
Regular and Bold weights. Both are SIL Open Font License 1.1. The editor font family dropdown now
includes these alongside the existing 5 font families.

Changed

- Journal picker scroll limit: the journal list in the picker is now capped at ~5 visible items with
a vertical scrollbar appearing for additional journals, preventing the picker card from growing
beyond the viewport. The "Your Journals" heading stays fixed above the scrollable list.
- Open Existing Journal uses a file picker: instead of picking a folder and requiring a diary.db
file inside it, the "Open Existing" flow now opens a file dialog filtered to .db files so the user
selects the database file directly. The DB filename (no longer hardcoded to diary.db) is stored in
JournalConfig.db_filename, and backups are namespaced under backups/{stem}/ so co-located journals
don't share a backup pool. Updated selectFolderTitle, noJournalFound, and chooseFolderTitle to
file-oriented text in all five locales.
- Word-count performance optimization: replaced the two-pass Rust striphtmltags + split_whitespace()
with a zero-allocation single-pass state machine; optimized TypeScript countWordsFromText and
countWordsInHtml to use match(/\S+/g) instead of split().filter(), eliminating intermediate array
allocations. Word-count now runs in sub-microsecond time for both plain text and TipTap HTML
paths.

[](https://sourceforge.net/projects/mini-diarium/files/v0.4.22/)
0.4.21 9 de maig del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

v0.4.21 adds text color and highlight formatting, export date/month filters, auto-focus on unlock,
and a French locale. It fixes bundled fonts not loading in macOS/Windows release builds, moves
Underline to the basic toolbar, and makes the Preferences dialog responsive.

Added
- Text color and highlight color formatting: the advanced formatting toolbar now includes two color
picker buttons — one for text color and one for highlight (background) color. Both use a native
color picker that lets you choose any color. The text color button shows the active color as a
small bar beneath the Type icon; the highlight button shows the active highlight color beneath the
Highlighter icon. Old default <mark> highlights (pre-existing entries without an explicit color)
continue to render as colored text for backward compatibility. New textColor and highlightColor
i18n keys added to all five locales (en, es, fr, de, it).
- Export date/month filter: you can now export entries from a specific date range or a single month
instead of always exporting everything. A new filter dropdown in the export dialog offers "All
entries", "Date range", and "Single month" options.
- Auto-focus editor on unlock: the TipTap editor now receives focus automatically after the journal
is unlocked so the user can start typing immediately. Focus fires once per unlock session — it
does not re-fire on date navigation, entry switching, or save cycles. Re-locking and re-unlocking
resets the behavior.
- French (fr) locale: full 387-key French translation with proper month/day abbreviations and plural
forms.

Changed
- Underline is now always visible: the Underline button has moved from the advanced formatting
toolbar (gated behind Preferences → Writing → Show advanced formatting toolbar) to the basic
toolbar, where it appears alongside Bold and Italic for all users regardless of the
advanced-toolbar preference.
- Preferences overlay responsive sizing: the Preferences dialog now scales its width and height with
the viewport instead of using fixed dimensions. Width grows from max-w-2xl on small screens to
max-w-3xl on medium screens and max-w-4xl on large screens; the scrollable content panel height
increases from 55vh to 75vh across the same breakpoints. The content panel also gains symmetric
horizontal padding (px-6) so form inputs no longer press against the right dialog edge.

Fixed
- Bundled fonts not working in macOS/Windows release builds: the editor font family selector was
stuck on "System Default" because installedfontdir() hardcoded platform paths without accounting
for Tauri v2's .. → up path translation during bundling. Replaced installedfontdir() and
fontdirectory() with a single resolvefont_dir() that uses app.path().resolve("../fonts",
BaseDirectory::Resource) for platform-agnostic resource resolution. Added 20 backend tests
covering font discovery, MIME detection, and family/stem name mapping.
0.4.20 6 de maig del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

v0.4.20 delivers RTL/bidirectional text editing with toolbar toggle, a multi-entry number navigation
bar, editor font selection, and timestamp insertion — plus critical security hardening that moves
the multi-auth requirement into the encrypted database with MAC integrity protection.

Added
- RTL/LTR toggle button in the editor toolbar: a new paragraph-direction toggle button (pilcrow icon
with directional arrow) is now available in the advanced formatting toolbar, placed before the
alignment controls. The icon dynamically shows PilcrowRight when the current block is LTR (click
to switch to RTL) and PilcrowLeft when RTL (click to switch to LTR), matching the convention used
by Google Docs and LibreOffice. The button reuses the same setTextDirection command as the
existing Ctrl+Shift+D / Cmd+Shift+D keyboard shortcut. New textDirection / textDirectionTitle i18n
keys are added to all four locales.
- Multi-entry number navigation bar: the entry counter (1 / 3) has been replaced with clickable
number buttons (← 1 2 3 →) that jump directly to the chosen entry. The current entry is
highlighted in bold with an aria-current="true" attribute for screen readers. The prev/next arrows
retain their existing step-by-step behaviour. A goToEntry aria-label key is added to all four
locales.
- Insert timestamp in the editor: a new clock button in the advanced formatting toolbar opens a
popup that lets you choose between 12-hour and 24-hour format, pick hours:minutes or
hours:minutes:seconds precision, and insert the current time at the cursor position. Both
selections are remembered across sessions.
- Editor font selection: a new "Editor font" dropdown in Preferences → Writing lets you choose from
five bundled open-source font families (Noto Sans, Source Sans 3, Noto Serif, JetBrains Mono, Fira
Mono). Fonts are loaded on-demand as base64 data URLs and applied to the TipTap editor only. The
selection is persisted as the editorFontFamily preference and works fully offline — no network
requests, no OS-level font enumeration.

Fixed
- unicode-bidi: plaintext CSS overrides dir attribute on paragraphs and headings: the plaintext
value in the editor CSS forced the browser to always auto-detect text direction from content,
silently overriding any explicit dir attribute set by the RTL toggle button or Ctrl+Shift+D
shortcut. The unicode-bidi override has been removed from both paragraph and heading rules,
allowing the dir HTML attribute to control direction natively while the existing BidiExtension
auto-detection plugin still sets dir on new blocks.
- bump-version scripts now inject metainfo.xml release entry: bump-version.sh and bump-version.ps1
both prepend a <release version="X.Y.Z"> element to the AppStream metainfo file during version
bumps. The .sh script was also made portable to BSD/macOS sed. The pre-release checklist now
validates the metainfo version as a fifth consistency check.

Security
- Multi-auth requirement can no longer be bypassed by re-adding a journal: the "Require All
Authentication Methods" setting was previously stored in config.json. Removing a journal from the
list and re-adding the same database file produced a fresh config entry with the flag absent,
allowing a single-credential unlock even when multi-auth was required. The flag is now stored
inside diary.db itself (new db_settings table, schema v6), so it stays with the database file
regardless of what happens to the config. Existing journals are migrated automatically on the
first unlock after updating.
- Multi-auth requirement MAC integrity: the requireallauth flag stored in dbsettings inside diary.db
was vulnerable to plaintext SQLite tampering — deleting or modifying the row would bypass the
guard and allow single-credential unlock. The flag is now bound to the master key via HKDF-SHA256
MAC (computed as HKDF-SHA256(IKM=masterkey, salt=None, info="mini-diarium:requireallauth:v1") and
stored as a 64-char hex string under the requireallauth_mac key). A fail
0.4.19 27 d’abril del 2026 — 64 bits EXE (NSIS)
Notes de la versió
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 requireallauth flag to config.json. When active, unlockdiary and
unlockdiarywithkeypair are blocked with a clear error; a new unlockdiaryall_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/TECHNICALREVIEWPLAN_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), registerkeypair and removeauthmethod would fail with
"No password auth method found". Both commands now gate the password requirement on
0.4.18 19 d’abril del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Maintenance release fixing two recurring CI failures: Flathub builds were rejected because
metainfo.xml was missing release entries for v0.4.16 and v0.4.17 (a Windows CRLF bug in
bump-version.sh), and WinGet submissions were failing when the winget-pkgs fork drifted behind
upstream.

Fixed

- Flathub CI: missing metainfo release entries: bump-version.sh silently failed to prepend <release>
entries to data/linux/io.github.fjrevoredo.mini-diarium.metainfo.xml on Windows because the file
had CRLF line endings and the sed pattern didn't match. v0.4.16 and v0.4.17 entries are
backfilled; bump-version.sh now strips \r before substituting; .gitattributes enforces eol=lf for
data/linux/.xml and .desktop going forward.
- WinGet CI: fork sync failure: wingetcreate submit failed with "forked repository could not be
synced" when the fjrevoredo/winget-pkgs fork had drifted behind upstream. The publish workflow now
calls the GitHub API to sync the fork before submitting, preventing this recurring failure.

[](https://sourceforge.net/projects/mini-diarium/files/v0.4.18/)
0.4.15 4 d’abril del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

v0.4.15 introduces local-only (device-protected) journals that auto-unlock without a password, and
fixes a bug where image-only entries were silently deleted on journal close.

Added

- Local-only (device-protected) journals: A new optional protection mode when creating a journal.
Instead of a user-chosen password, the app generates a random 32-byte key at creation time, stores
it in config.json (the OS-managed app data directory), and uses it to auto-unlock on every open —
no password prompt. Entries remain AES-256-GCM encrypted; the key is simply app-managed rather
than user-managed. Security guarantee: protects against copying only the diary.db file (e.g. from
a cloud folder or external drive) to another machine, but does not protect against someone with
access to the user's OS account. The risk is explained and must be explicitly acknowledged
(checkbox) before creation. Existing password/keypair journals are entirely unchanged.
- New creatediaryauto / unlockdiaryauto Tauri commands backed by a new AutoKeyMethod auth slot type
(auth_slots.type = 'auto'); no KDF is applied (the key is already 32 bytes of random entropy).
- The listjournals and addjournal commands now return a JournalInfo DTO with auto_protected: bool
instead of the raw JournalConfig — the auto key never crosses the IPC boundary.
- On app startup, journals with auto_protected = true are unlocked silently without showing the lock
screen. If locked by idle timeout or OS screen lock, PasswordPrompt auto-retries on mount.
- Upgrading to password protection uses the existing registerpassword + removeauth_method flow;
removing the auto slot also clears its key from config.json.
- UI: mode toggle (Password / Local-only) in PasswordCreation; warning block with three risk
bullet-points and a required acknowledgment checkbox; new i18n keys in English, German, and Spanish.

Fixed

- Paste/drop image-only entries silently lost on journal close (issue #84): pasting or drag-dropping
an image onto a blank day never persisted the entry, and an entry whose only content was one or
more images was auto-deleted by the debounced save. Root cause: three isEmpty guards in
EditorPanel.tsx used editor.getText().trim() === '' — TipTap's getText() ignores image leaf nodes
and always returns '' for image-only content, making all three guards treat the entry as empty.
Fixed by adding an editorHasImages() helper that walks the ProseMirror document tree; an entry is
now only considered empty when editor.isEmpty is true and no image nodes are present. The fix
covers all three affected paths: (1) the blank-day entry-creation gate (image pastes on a fresh
date now correctly trigger entry creation), (2) the editorIsEmpty reactive signal (the "+" button
state is correct for image-only entries), and (3) the saveCurrentById auto-delete check
(image-only entries are no longer deleted by the 500 ms debounce).
0.4.14 30 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

v0.4.14 delivers full internationalisation (i18n) with Spanish translation and live native-menu
locale switching, Markdown file import into the active entry, a benchmarking infrastructure for Rust
and frontend, and Flatpak/Flathub distribution. Three editor correctness fixes address word-count
HTML-awareness, an entry-not-saved race on fresh dates, and an auto-delete race on newly created
entries.

Added

- Benchmarking infrastructure: Rust criterion benchmarks for AES-256-GCM cipher operations,
encrypted SQLite queries, and word-count; frontend Vitest bench for Markdown parsing; CI benchmark
workflow tracks trends on each merge to master; benchmarks/CLAUDE.md domain guide.
- Markdown file import into current entry: A new "Import Markdown file" button in the advanced
formatting toolbar (next to Insert Image) allows importing a .md file from disk into the active
editor. When the current entry is empty the imported content replaces it; when the entry already
has content the Markdown is appended after a horizontal-rule separator. marked (GFM mode) handles
Markdown-to-HTML conversion on the frontend; DOMPurify sanitizes the output via the postprocess
hook before it reaches TipTap. File size is capped at 1 MB; import errors surface as a dismissible
banner in the editor footer.
- i18n / Translation support: All ~220 hardcoded English UI strings are extracted into a typed
locale file (src/i18n/locales/en.ts) using @solid-primitives/i18n. The system is designed for
community-contributed translations — add a JSON file to src/i18n/locales/ and run bun run
validate:locales to check completeness. See docs/TRANSLATIONS.md for the full translator guide
covering interpolation syntax, plural key pairs, and PR instructions.
- Language selector in Preferences: A Language dropdown is now available in Preferences → General.
The locale is stored in user preferences and applied reactively at runtime (no restart needed).
- Spanish (Español) translation: full translation of all UI strings into Spanish
(src/i18n/locales/es.json). Select "Español" in Preferences → General → Language.
- Native OS menu i18n: The native app menu (Navigation, Diary, and all items within) now updates to
the selected language in real time without an app restart. A new updatemenulocale Tauri command
stores all translatable MenuItem and Submenu handles in a TranslatableMenuItems managed-state struct
and calls set_text() on each. Adding a new community locale requires adding its ~15 menu strings to
the match block in src-tauri/src/commands/menu.rs alongside the JSON locale file.
- Flatpak / Flathub distribution: The release process is extended to automatically publish Mini
Diarium to Flathub on each release. A new flathub-publish.yml workflow generates offline-vendored
Cargo and Node source lists, patches the Flatpak manifest with the release tag and commit SHA, and
opens a PR against the Flathub repository. The Flatpak manifest (flatpak/com.minidiarium.yml)
builds via npm ci --offline → npm run build → cargo build --release, bypassing the Tauri CLI so
Bun is not required in the sandbox. Desktop entry, AppStream metainfo, and icon installs are all
included. One-time manual setup (screenshots, local manifest test, initial Flathub submission PR)
is documented in docs/RELEASING.md.

Changed

- Benchmarks revised to cover actual hot paths: added dbupdateentry (the real auto-save path
replacing dbinsertentry as primary write bench), dbgetallentrydates at 100 and 500 entries,
authargon2 group for Argon2id wrap/unwrap (the unlock path, samplesize(10)); scaled dbgetall
corpus to 500 entries alongside 100; replaced synthetic word-count input with realistic TipTap
HTML; added context comments to cipher_bench.

Fixed

- Word count live updates and HTML-awareness: two bugs corrected. (1) The word counter now updates
on every keystroke — handleContentUpdate calls setWordCount(countWordsFromText(editor.getText()))
on each TipTap transaction so the counter reflects the current
0.4.13 25 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Added

- Markdown export image handling: embedded base64 images are no longer silently stripped on export.
Two new export options appear in the Export dialog:
- Markdown (builtin:markdown) extracts images to a sibling assets/ folder and replaces <img> tags
with relative `` references — compatible with Obsidian, Typora, and VS Code
- Markdown (inline images) (builtin:markdown-inline) embeds images as `` data URIs for single-file
portability in editors that support them
- Backend test count: 249 → 265
0.4.12 25 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Fixed

- Text alignment lost after calendar navigation — final fix (issue #63): two independent bugs were
responsible. (1) Visual rendering (root cause): Tauri automatically injects a random 'nonce-...'
into all CSP directives at runtime; per the CSP spec a nonce in style-src causes 'unsafe-inline'
to be ignored, so TipTap's style="text-align: center" attributes were silently blocked by the
browser every time alignment was applied or loaded — the data was saved correctly, only the
rendering was stripped. Fixed by "dangerousDisableAssetCspModification": ["style-src"] in
tauri.conf.json, preventing nonce injection into style-src while leaving script-src
nonce-protected for Tauri's internal use. (2) Save loss: navigating from Day A to Day B with a
pre-existing blank entry caused onSetContent(isEmpty=true) to call debouncedSave() with Day B's
blank args, resetting the 500 ms timer and discarding any pending save for Day A. Fixed by
flushing the current entry (cancel + immediate saveCurrentById) at the start of loadEntriesForDate
before loading the new date; all signal reads use untrack() to prevent reactive loop. Additionally
hardened all five save paths to read from editor.getHTML() directly rather than the SolidJS
content() signal.

[](https://sourceforge.net/projects/mini-diarium/files/v0.4.12/)
0.4.10 23 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
What's Changed

Fixed

- Text alignment lost after calendar navigation (issue #63): alignment (justify, center, right)
applied to an entry was permanently overwritten after navigating away and returning. Root cause:
TipTap v3 changed setContent's emitUpdate default from false (v2) to true, causing the
programmatic content load in DiaryEditor's createEffect to fire onUpdate, which queued a debounced
save with un-aligned HTML from the production bundle's intermediate getHTML() state. Fixed by
passing { emitUpdate: false } to suppress onUpdate for programmatic loads; a new onSetContent
callback from DiaryEditor to EditorPanel (1) updates the editorIsEmpty reactive signal so the "add
entry" button state stays correct, and (2) re-triggers debouncedSave for blank entries (preserving
the auto-deletion-on-navigation behaviour that previously ran through the now-suppressed onUpdate
path). Signal reads in the callback use untrack() to avoid adding spurious reactive dependencies
to DiaryEditor's effect.
- E2E layout white gap above auth screens: three-part fix. (1) In E2E mode the Tauri window now sets
its size to 800×660 before win.show() (in lib.rs setup) — previously the window opened at the
production default (800×780). (2) All screen-filling containers (JournalPicker, PasswordCreation,
PasswordPrompt, App loading state, MainLayout) now use h-full (height: 100% via the html → body →
#root chain) instead of h-screen/min-h-screen (100vh), which may include the native app menu bar
height in WebView2 on Windows. (3) Removed browser.setWindowSize(800, 660) from the wdio.conf.ts
before hook — WebDriver setWindowRect is a post-render resize that uses a different window-size
measurement than Tauri's LogicalSize, causing a second resize after CSS 100vh/height:100% were
already computed and re-introducing the layout mismatch.
- "+" button stuck disabled after multi-entry navigation (two variants): fixed two related bugs
where the "Add entry for this day" button became permanently disabled on a day with real content.
- Variant 1 (navigation arrow): clicking "+", getting a blank second entry, then navigating back via
"←" left the "+" permanently disabled. Root cause: SolidJS re-evaluated addDisabled when
setPendingEntryId() changed, but TipTap had not yet processed the loaded entry's content, so
editor.isEmpty was stale. Fixed by adding an editorIsEmpty reactive signal updated in
handleContentUpdate (called by TipTap's onUpdate), forcing re-evaluation after TipTap reflects the
correct state.
- Variant 2 (day switch): same setup, but switching to a different day instead of using the arrow,
then switching back, also blocked the "+". Root cause: the blank entry's debounced auto-delete (500
ms) called setPendingEntryId(null) and left the editor showing stale blank content even though the
original real entry still existed. Fixed by having saveCurrentById auto-navigate to the nearest
remaining entry after deleting a blank entry, so pendingEntryId is never left as null while real
entries still exist on the day.

Added

- Multi-entry E2E tests: new e2e/specs/multi-entry.spec.ts covering (A) multi-entry persistence
after lock/unlock, (B) "+" recovery after backward navigation (v0.4.9 Variant 1 regression), and
(C) "+" recovery after day switch with blank entry (v0.4.9 Variant 2 regression). data-testid
attributes added to EntryNavBar (entry-nav-bar, entry-prev-button, entry-counter,
entry-next-button, entry-delete-button, entry-add-button) to support reliable E2E selectors.
- Backend assessment follow-up (Task 71): addressed all actionable findings from the March 2026
assessment. Two code quality fixes: deleteentry unlock guard now uses the consistent "Journal must
be unlocked to …" error message (A1); #[allow(deadcode)] suppressions in jrnl.rs now carry "why"
comments on the attribute line per project convention (A2). Ten new backend tests added:
deleteentry command logic (A3), navigatetotoday valid-date assertion (A4), updateslotlastused
NULL→non-null 
0.4.8 18 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
Fixed text-alignment feature to work with all the elements. Minor assorted fixes.
0.4.7 15 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
adds text alignment, optional entry timestamps, and advanced theme overrides, while fixing dark-mode editor text and continuing theme-system cleanup.
0.4.6 8 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
Minor update with fixes to the dark theme, specially for linux.
0.4.4 6 de març del 2026 — 64 bits EXE (NSIS)
Notes de la versió
Pretty modest update. The most significant addition is the image support. Please be mindful of the number of images you store in your journal as they can rack up storage pretty quickly as they are stored as base64 strings in this initial implementation.

El més popular a Paquets ofimàtics

Mostra-ho tot
  1. TeXstudioPaquets ofimàtics · Benito van der Zander
  2. ZettlrPaquets ofimàtics · Hendrik Erz
  3. JabRefPaquets ofimàtics · JabRef
  4. ONLYOFFICE Desktop EditorsPaquets ofimàtics · Ascensio System SIA
  5. ZoteroPaquets ofimàtics · Corporation for Digital Scholarship
  6. PDF ArrangerPaquets ofimàtics · The PDF Arranger team
  7. Portfolio PerformancePaquets ofimàtics · Andreas Buchen
  8. Office Tool PlusPaquets ofimàtics · Yerong
  9. Microsoft 365 Apps for enterprisePaquets ofimàtics · Microsoft Corporation
  10. GrampsAIOPaquets ofimàtics · The Gramps project

Etiquetes

Comparteix