Markleaf
com.markleaf.notes
Zapstore _@zapstore.dev Republished from GitHub / F-Droid by the Zapstore main account.
Markleaf is a quiet, local-first Markdown notes app for Android. Quick to open, calm to write in, and your text stays as plain Markdown — on your device, in your folder. The point isn't a knowledge-management system. It's a notebook you actually open every day. WHAT'S INSIDE • Markdown-native editor with live syntax highlighting (10+ languages in fenced code blocks) • [[Wikilinks]] and automatic backlinks between notes • #tags written inline in the body, organized in a single tags screen • Quick Switcher — jump to any note by title (Ctrl+K with a keyboard) • Find and replace inside a note • Two-pane layout on tablets, single-pane on phones • Home-screen widget, share-sheet integration, biometric lock, screenshot protection PRIVACY BY ARCHITECTURE, NOT BY POLICY • No INTERNET permission. The app cannot phone home — it has no permission to. • No account, no analytics, no ads, no tracking • No Markleaf servers; there are none to talk to • Excluded from Android Auto Backup • Open source under GNU GPLv3, also on F-Droid YOUR DATA, YOUR FOLDER Markleaf doesn't run its own sync. Instead, you pick a folder, and Markleaf mirrors your notes there as ordinary .md files. Any sync tool that watches that folder — Drive, Dropbox, Syncthing, OneDrive, a NAS app — keeps your notes in sync across devices. The mirror is one-way clean Markdown, so your notes round-trip with other Markdown editors, or just `cat note.md` in a terminal. If Markleaf disappears tomorrow, your notes are still .md files in a folder you own. DESIGNED FOR ANDROID TABLETS • Two-pane note list + editor split • Tablet typography and line widths tuned for reading distance • Touch-first toolbar, no hidden gestures YAML frontmatter, CommonMark / GFM preview, hierarchical tags, attachments, pinned notes — the small things you expect from a serious Markdown editor are in there. The big things you don't expect — accounts, telemetry, push notifications — are not. If you've been waiting for an Android Markdown editor that respects your time and your data, Markleaf is for you. Source code: __GITHUB_URL__ F-Droid: https://f-droid.org/packages/com.markleaf.notes
First release: Jul 27, 2026, 32 total releases.
Most recent release: Sep 28, 2026.
Appears in 0 app stacks.
0 sats / 0 zaps received in the past year.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Sep 28, 2026 2.54.0A widget setting, Markleaf in Android's per-app language list, and one sync fix. No permission or storage-format changes. ### Added - **Markleaf now appears in Android's per-app language setting ([#470](https://github.com/jeiel85/markleaf-android/pull/470)).** On Android 13 and later, the system's *App languages* setting lists Markleaf with its 11 languages, so you can use Markleaf in one language while the rest of the phone stays in another. Before, the only way to change Markleaf's language was to change the whole phone's. Older Android versions are unchanged. - **Home-screen widgets can let the wallpaper show through ([#469](https://github.com/jeiel85/markleaf-android/issues/469)).** Settings → Appearance → Widget background sets how opaque the Quick Note and Single Note widgets' card is: 100% (the solid card, and the default), 75%, 50%, 25% or 0%. It works with both Markleaf green and Material You, on every Android version Markleaf supports. The text keeps its colour at every step, so at low values it is up to your wallpaper whether it stays readable. The setting applies to all placed widgets at once, not per widget. Requested by [@Violet-RM](https://github.com/Violet-RM). ### Fixed - **Notes with Windows line endings now get the protection against half-finished sync writes ([#470](https://github.com/jeiel85/markleaf-android/pull/470)).** The checksum v2.51.0 added to each file's header ([#434](https://github.com/jeiel85/markleaf-android/issues/434)) could never match a note whose text holds Windows-style (CRLF) line breaks, typically one imported from a file made on Windows. For those notes the fix did not apply, and a slow sync could still leave a spurious "(copy from another device …)" note. The checksum now ignores the line-ending style. Checksums already written for other notes keep their value.
- Sep 26, 2026 2.53.2A settings-text update. No behaviour, permission or storage-format changes. ### Fixed - **Settings → Markdown → Line width now says what it does ([#465](https://github.com/jeiel85/markleaf-android/issues/465), [#466](https://github.com/jeiel85/markleaf-android/pull/466)).** The setting caps how wide the text column can grow (Narrow, Comfortable and Wide are 640, 800 and 960 dp). It applies to the editor in the tablet side-by-side layout and to the file viewer. An upright phone is narrower than every option, so on a phone all three looked the same, and the name alone read like line spacing. A short description under the options now says so in all 11 languages: it keeps lines from stretching on wide screens, nothing changes on an upright phone, and it doesn't change the spacing between lines. Thanks to [@ray4423](https://github.com/ray4423) for the report.
- Sep 24, 2026 2.53.1A translation-only update. No behaviour, permission or storage-format changes. ### Fixed - **The Slovak translation has been reviewed and corrected by a native speaker ([#458](https://github.com/jeiel85/markleaf-android/pull/458), [#461](https://github.com/jeiel85/markleaf-android/pull/461)).** [@padi-sk](https://github.com/padi-sk), who contributed Slovak in v2.53.0, went through the interface and the first-launch notes. Among the fixes: the text-size options now agree grammatically, the line-width setting is named correctly, several settings descriptions read more naturally, and the privacy screen's "100 percent local" line is worded properly. The palette keeps its name, *Markleaf green*, in both the chip and its description. First-launch notes are created only once, so an existing install keeps the notes it already has; everything else updates.
- Sep 23, 2026 2.53.0A new language and one editor fix. No permission or storage-format changes. ### Added - **Slovak ([#453](https://github.com/jeiel85/markleaf-android/pull/453)).** The app interface and the first-launch starter notes were translated by [@padi-sk](https://github.com/padi-sk); the store descriptions, the README, the website and its privacy page followed, and the tablet demo clip has Slovak captions — bringing Markleaf to 11 languages. Markleaf follows your device language. Corrections from native speakers are welcome in [Issues](https://github.com/jeiel85/markleaf-android/issues). ### Fixed - **Pressing Enter in a list no longer loses the new bullet or number with SwiftKey ([#447](https://github.com/jeiel85/markleaf-android/issues/447)).** After Enter continued a list, Microsoft SwiftKey could send its own earlier copy of the text a moment later, silently undoing the `- ` or `2. ` Markleaf had just added. Markleaf now recognises that stale copy and ignores it; ordinary typing and backspacing are unaffected. One narrow edge: removing the just-added marker in a single gesture right after Enter (a swipe-delete, for example) looks identical to that stale copy and is ignored the same way — deleting it again works. Confirmed with SwiftKey on a Galaxy S24; if another keyboard still drops the continuation, please report it. Reported by [@Akshaythorat376](https://github.com/Akshaythorat376).
- Sep 22, 2026 2.52.0Two fixes from an issue-response pass: an editor convenience, and a data-safety fix for anyone syncing notes to a folder. No permission or storage-format changes. ### Added - **Selecting several lines and tapping the checklist button now turns every line into its own item ([#446](https://github.com/jeiel85/markleaf-android/issues/446)).** A plain line becomes `- [ ] line`, an already-checked line toggles, and a blank line is left alone rather than becoming an empty item — so a list pasted in from elsewhere (a grocery list from a text message, one item per line) becomes a checklist in one tap. Previously only the first line of the selection was touched. Requested by [@Kamul-PL](https://github.com/Kamul-PL). ### Fixed - **A note whose sync folder file was emptied elsewhere no longer gets permanently deleted just for being opened and closed ([#443](https://github.com/jeiel85/markleaf-android/issues/443)).** Leaving the editor on a blank note discards it — meant for a note you created and never typed into. An existing note whose file was cleared on another device or truncated by a sync client looked exactly the same from inside the editor, so it was discarded too: the note, its attachments and its file in the sync folder, with no trash step to undo it. Markleaf now checks whether the row's last confirmed write was an import rather than something typed during this visit before discarding it. A note that has never synced is unaffected. Found while working on [#428](https://github.com/jeiel85/markleaf-android/issues/428) and [#434](https://github.com/jeiel85/markleaf-android/issues/434).
- Sep 20, 2026 2.51.0Three fixes from one issue pass, all of them about long notes and the sync folder. **One storage-format change:** note files in a sync folder now carry a `body_sha256` line in their frontmatter header — see *Changed*. No permission changes. ### Added - **A note you have open now picks up a version that arrives from the sync folder ([#428](https://github.com/jeiel85/markleaf-android/issues/428)).** The editor used to read its note once, so a change imported while you were looking at it only showed up after leaving the note and coming back. Two things it will not do: it never replaces what is on screen while you have unsaved typing — your edit wins and is saved as usual — and it never adopts a version that *empties* the note. Found by [@jcesarap](https://github.com/jcesarap), who tested the existing sync behaviour and correctly re-identified this as the real problem behind a request for sync-at-startup. ### Fixed - **Pasting a very large Markdown note no longer freezes the editor ([#437](https://github.com/jeiel85/markleaf-android/issues/437)).** Live syntax styling now switches itself off for a note that would need more than 1,500 individually styled pieces of text, or that is longer than 100,000 characters. On the reporter's phone a 200,000-character Markdown paste took around 30 seconds and ended in "Markleaf isn't responding"; the same paste with styling turned off was instant. Plain prose keeps its styling at any length, because prose produces nothing to style. Reported and then measured across four file sizes by [@angelblackcoat](https://github.com/angelblackcoat). Scrolling inside a very long note is still slower than it should be — that is a separate limitation and is not fixed here. - **An interrupted sync write no longer leaves a spurious "(copy from another device …)" note behind ([#434](https://github.com/jeiel85/markleaf-android/issues/434)).** When a write to a slow sync folder did not finish, the next sync pass could read Markleaf's own older file as though another device had edited it, and file a conflict copy next to your note. Markleaf can now tell its own unfinished write apart from a real outside edit, so that copy is not created. An edit made by another app is still imported exactly as before. Reported by [@ray4423](https://github.com/ray4423), syncing through rclone/RSAF over a slow link.
More…
### Changed - **Note files in a sync folder now carry a `body_sha256` line in their frontmatter header ([#434](https://github.com/jeiel85/markleaf-android/issues/434)).** It is a checksum of the note's own text, and it is what makes the fix above possible: without it, Markleaf's half-finished write and another app's edit are indistinguishable. Existing files gain the line the next time Markleaf saves that note — nothing is rewritten in bulk — and a file without it is read exactly as before. Other tools ignore frontmatter keys they do not recognise. - Sep 19, 2026 2.49.0Body text can now use a monospace font, which keeps table columns and indent levels lined up. No permission or storage-format changes. ### Added - **Monospace font option ([#432](https://github.com/jeiel85/markleaf-android/issues/432)).** Settings → Markdown → Font now offers Monospace next to Sans and Serif. It uses the system monospace font, so nothing is bundled, and it applies to the app's text as a whole — the editor, the preview and the screens around them — not only to notes. Sans stays the default, so nothing changes until you choose it. Code blocks were always monospaced and still are, which means they no longer stand out from the surrounding text while this is on.
- Sep 19, 2026 2.48.0You can now export notes for one tag without exporting your whole library. No permission or storage-format changes. ### Added - **Export by tag ([#424](https://github.com/jeiel85/markleaf-android/issues/424)).** In Settings → Data, choose a tag and a destination folder. Markleaf writes each matching note as a separate Markdown file, including notes carrying a child tag such as `#project/alpha` when you choose `#project`. This does not create subfolders or export attachments. Requested by [@6r4f](https://github.com/6r4f). ### Fixed - Bulk export now leaves Locked notes out ([#430](https://github.com/jeiel85/markleaf-android/issues/430)), matching the Locked space's privacy boundary. Archived notes remain eligible; Trash stays excluded.
- Sep 18, 2026 2.47.0Requested by a low-vision reader who can see the screen but not comfortably at the existing text-size ceiling. No permission or storage-format changes. ### Added - **Pinch-to-magnify on the preview ([#423](https://github.com/jeiel85/markleaf-android/issues/423)).** Two fingers now zoom the rendered note the way a browser or PDF viewer does — the exact layout you already have, magnified up to 5x, with no reflow: headings keep their size relative to body text, a table keeps its columns, line breaks don't move. Pan with one finger once zoomed in; pinch back out to return to normal size. This is separate from the Text size setting, which still controls the *unzoomed* size and reflows text to fit the screen width — pinch is for a closer look at the exact page, not a permanent size change. Links, checkboxes and text selection all keep working while zoomed, since the magnification is a visual transform over the same layout rather than a different one. Requested by [@kise82](https://github.com/kise82).
- Sep 17, 2026 2.46.1A fix for find and replace while editing. No permission or storage-format changes. ### Fixed - **Find and replace in edit mode selected the wrong text in some languages.** The editor searched a lowercased copy of the note and used positions from that copy, but lowercasing can make text longer — the Turkish dotted capital `İ` becomes two characters. Every such letter before a match pushed the selection one character late, so Replace changed the wrong text, and a match near the end could reach past it. Matches now use the same comparison as find in preview, which never changes the note's length. Found while reviewing v2.46.0.
- Sep 17, 2026 2.45.0Google Play ratings started arriving from Russia and Vietnam, so Markleaf now ships in both languages. No permission, feature, or storage-format changes. ### Added - **Russian and Vietnamese ([#418](https://github.com/jeiel85/markleaf-android/pull/418)).** The app interface, the first-launch starter notes, the store descriptions, the README, the website and its privacy page are all translated, bringing Markleaf to 10 languages. Markleaf follows your device language. The tablet demo clip on the website and README has Russian and Vietnamese captions too. These translations are new and not yet reviewed by native speakers — corrections are welcome in [Issues](https://github.com/jeiel85/markleaf-android/issues).
- Sep 16, 2026 2.43.1Opening the keyboard and moving the caret should not make an untouched note look edited. No permission or storage-format changes. ### Fixed - **A note's modification time now changes only when its text changes ([#410](https://github.com/jeiel85/markleaf-android/issues/410)).** Tapping into the editor can still trigger autosave, but an unchanged body no longer rewrites the note. If you edit and then undo all the way back to the text that was there when you opened it, the original modification time returns, even if the intermediate edit was already saved. Undo history lasts only while that editor is open, so this does not restore timestamps after closing and reopening the note. Reported by [@ray4423](https://github.com/ray4423).
- Sep 15, 2026 2.43.0Two independent changes, both reported by the same person. No permission or storage-format changes. ### Added - **GitHub-style collapsible `<details>`/`<summary>` sections now render in Preview ([#403](https://github.com/jeiel85/markleaf-android/issues/403)).** They used to be silently dropped; now they appear as a tappable row that expands and collapses its body, matching GitHub's own two source forms — the blank-line form its docs recommend, and the compact no-blank-line form from the issue's own example. A `<details>` with no `<summary>` falls back to a localized "Details" label (8 languages). Collapsed sections still print and export to PDF in full, since paper has no tap. Nested sections and several sections back to back both work. An unclosed `<details>` runs to the end of the note instead of crashing it — everything after becomes part of that one section — and a stray closing tag with no matching `<details>` is dropped rather than shown as text. Reported by [@stacsk](https://github.com/stacsk). ### Changed - **A note left with nothing in it is discarded instead of kept ([#405](https://github.com/jeiel85/markleaf-android/issues/405)).** Leaving the editor — back icon, system back, or switching to a different note — now removes a note that was never written into, or was typed into and then cleared back out completely. This only applies to a note in its ordinary state: explicitly moving a blank note to Trash, archiving it, locking it, or pinning it all still leave it exactly where you put it. Reported by [@stacsk](https://github.com/stacsk).
- Sep 14, 2026 2.41.1A band of empty screen stood between the keyboard and the note while you were editing. No permission or storage-format changes. ### Fixed - **The keyboard no longer leaves a gap above the note in edit mode ([#398](https://github.com/jeiel85/markleaf-android/issues/398)).** The strip of dead space was exactly as tall as your navigation bar, and that was the bug: the editor reserved room for the navigation bar and then again for the full height of the keyboard, when the keyboard already covers the navigation bar. Android's own rule is to take the larger of the two, never the sum. The body now sits directly above the keyboard, the caret still stays above it while you type, and nothing changes with the keyboard closed. Preview was never affected. Reported by [@stacsk](https://github.com/stacsk).
- Sep 12, 2026 2.41.0Preview rejoined lines you had broken by hand, and the Material You widget read the Theme setting backwards. Both came from one report. No permission or storage-format changes. ### Changed - **A line break you typed stays a line break in Preview ([#394](https://github.com/jeiel85/markleaf-android/issues/394)).** Markdown's own rule is that a single newline inside a paragraph is only a space, so a note written as several short lines came back as one flowing paragraph the moment you opened Preview. That rule is written for documents that get typeset afterwards; here the editor beside Preview shows exactly what you typed, so the line you broke was visibly gone. It is worst in Korean, Japanese and Chinese, where no space belongs between the characters at all and the join arrived as a gap in the middle of a sentence. A blank line still starts a new paragraph, with the wider gap it has always had, and headings still appear on one line in the outline. Reported by [@ray4423](https://github.com/ray4423). ### Fixed - **The Material You widget no longer reads the Theme setting backwards ([#394](https://github.com/jeiel85/markleaf-android/issues/394), follow-up to [#375](https://github.com/jeiel85/markleaf-android/issues/375)).** Setting Theme to **Light** painted the widget darker than **Dark** did. The night colour came from the wrong end of the wallpaper palette — a pale accent where a deep one belonged — so the two swapped places on the home screen. Light is unchanged, and dark is now the darker of the two, as the setting says. Markleaf Green widgets are unaffected, and Material You still needs Android 12. Reported by [@ray4423](https://github.com/ray4423).
- Sep 11, 2026 2.40.0Two formats the app already understood were reachable only by a slash command. They are in the formatting panel now. No permission or storage-format changes. ### Added - **Tables and callouts in the formatting panel ([#390](https://github.com/jeiel85/markleaf-android/issues/390)).** The sample notes show tables and `> [!NOTE]` callouts, and Preview has always rendered both — but the panel above the keyboard stopped at code blocks, dividers and images, so inserting either meant typing the Markdown by hand or knowing that typing `/` opens a quick-insert menu. Both now sit in the panel's **Blocks and media** group. A table goes in as its own block, so it renders as a table even when you tap the button in the middle of a paragraph, and tapping **Callout** with text selected turns that text into the callout instead of inserting an empty one. Reported by [@hawk1335](https://github.com/hawk1335).
- Sep 10, 2026 2.39.0Preview mode was a dead end for anything you wanted to keep. Both halves of this came from one report. No permission or storage-format changes. ### Added - **Preview text selects and copies ([#386](https://github.com/jeiel85/markleaf-android/issues/386)).** The rendered view used to be untouchable, so copying a sentence out of a note meant switching back to the editor and putting the keyboard up for it. Long-press any text in Preview to select it, then use the usual Copy toolbar. Reported by [@Bedz01](https://github.com/Bedz01). - **Long-press a link to copy its address ([#386](https://github.com/jeiel85/markleaf-android/issues/386)).** Preview shows a link's label and never its target, so the address was reachable only by going back and reading the raw Markdown. A long press on a link now puts its address on the clipboard. Tapping still opens the link, and a drag that starts on one still scrolls the note. Reported by [@Bedz01](https://github.com/Bedz01).
- Sep 9, 2026 2.38.0Choosing a sync folder now takes in the files that are already in it, instead of only writing your notes out. ### Fixed - **Choosing a sync folder imports what is already there ([#372](https://github.com/jeiel85/markleaf-android/issues/372), reported in [#370](https://github.com/jeiel85/markleaf-android/issues/370)).** Linking a folder ran one direction: your notes were written out, the screen said how many, and the files already sitting in the folder waited for the next sync pass — **Sync now**, or leaving and reopening the app — with nothing on screen saying so. Point sync at a folder you already keep notes in and the visible result was a message about writing notes out and a list that did not contain your files. Linking now reads the folder as part of the same step and reports both directions. - **A deeply nested note no longer closes the app ([#262](https://github.com/jeiel85/markleaf-android/issues/262)).** Opening a note in preview walked its structure one nesting level at a time with nothing stopping it, so a note with lists nested deeply enough — the kind a generator or another app can produce, well past anything typed by hand — ran the app out of room and closed it on the spot. The preview now renders as deep as it can and marks the cut with a `…` row, and a note deeper still is shown as plain text rather than not at all. Ordinary notes render exactly as before. - **The home-screen widgets follow a folder sync ([#262](https://github.com/jeiel85/markleaf-android/issues/262)).** A note changed on another device and pulled in by folder sync reached Markleaf without the widgets hearing about it, so a widget could show the old text until Markleaf was next opened and left again. Both widgets now refresh as soon as a sync actually brings something in — and the same refresh follows an edit in the editor, which the recent-notes widget was missing. ### Changed - **Markleaf asks before it adopts a folder full of files.** Reading a folder is also the moment its files become notes, and in the default metadata mode a small `---` header is written into each of them. When the folder holds files no note owns, you are told how many and asked first, with a pointer to the **Note metadata** setting — that setting is on the same screen, and linking is the last moment it can be changed without rewriting every file twice. A folder with nothing new in it asks nothing. Choosing **Beside the files** first leaves your files as plain text, and the dialog does not claim otherwise in that mode.
- Sep 8, 2026 2.37.4The Single Note widget shows a whole note on the home screen instead of stopping where the widget does. ### Fixed - **The Single Note widget scrolls ([#371](https://github.com/jeiel85/markleaf-android/issues/371)).** The note's body used to be drawn as a single block of text that was clipped at the widget's height, with no way to reach the rest. It is now a scrolling list, one row per line, so a long note can be read in place. Blank lines keep their spacing, a long line still wraps rather than being cut, and a note too long to hand over ends in a `…` row so a cut is visible rather than silent. Tapping the widget still opens the note — including the parts of the widget that are not rows, which a note with a blank body is made entirely of.
- Sep 7, 2026 2.37.3The note picker is ready even when you add a widget before opening Markleaf. ### Fixed - **Starter notes are available from the widget picker ([#262](https://github.com/jeiel85/markleaf-android/issues/262)).** The first-run sample notes are now seeded when the launcher opens the single-note widget configuration screen, not only when `MainActivity` starts. Concurrent startup paths are serialized so the same notes cannot be inserted twice.
- Sep 6, 2026 2.37.2Saving an external Markdown file as a note now mirrors it immediately when folder sync is enabled. ### Fixed - **Save as note mirrors immediately ([#366](https://github.com/jeiel85/markleaf-android/issues/366)).** Notes created from the read-only file viewer are now written to the configured sync folder at the moment you choose **Save as note**. The mirror records its imported snapshot only after the write succeeds, so a later edit can retry if the provider is unavailable.
- Sep 5, 2026 2.37.0The editor gets an undo. No permission or storage-format changes. ### Added - **Undo and redo in the editor ([#360](https://github.com/jeiel85/markleaf-android/issues/360)).** Markleaf saves as you write, which until now meant a mistake was saved too: select everything, hit a key, and the note was gone with nothing to go back to. There are now **undo** and **redo** buttons in the row above the keyboard, next to the formatting control, and **Ctrl+Z** / **Ctrl+Shift+Z** (or **Ctrl+Y**) if you have a hardware keyboard. A destructive change — typing or pasting over a selection, a replace-all, deleting the lot — is a single undo step, so that case comes back in one tap. Ordinary typing collapses into runs and breaks at line ends, so undo walks back in sensible chunks rather than one character at a time. Whatever you restore is saved, the same as any other edit. The history covers the note you have open and is dropped when you leave it — Markleaf still keeps no version history on disk. Requested by [@iamgitcat](https://github.com/iamgitcat). ### Changed - **The row above the keyboard now appears for undo alone.** With **Settings → Markdown → Show formatting button** off, the row used to be mounted only while text was selected. It now also mounts once there is something to undo, because otherwise turning that setting off would have left no way to reach undo by touch. With nothing typed yet, the row stays away exactly as before. The same applies while **Find in note** is open: the formatting controls still stand down there, but undo stays — a replace-all is the change most worth taking back.
- Sep 2, 2026 2.36.1A follow-up to the theme fix in v2.36.0, for the one place it could not reach. No permission or storage-format changes. ### Fixed - **The splash screen follows your Theme setting ([#354](https://github.com/jeiel85/markleaf-android/issues/354)).** v2.36.0 stopped Markleaf flashing the wrong colour between the notes list and a note, but opening the app still showed a splash in the system's colour rather than yours — a white one on a light phone even with Markleaf set to Dark. It now matches from the first frame. If your Theme is **System**, nothing changes. Android 12 and later; below that the splash keeps following the system as before. Reported by [@gamersat678](https://github.com/gamersat678).
- Aug 31, 2026 2.35.0Two appearance settings, both requested from outside the project. No permission or storage-format changes. ### Added - **Choose how Markleaf looks in the dark ([#345](https://github.com/jeiel85/markleaf-android/issues/345)).** Markleaf used to follow your system's dark-mode setting and nothing else. **Settings → Appearance → Theme** now lets you pick **System** (the old behaviour), **Light**, or **Dark**, so you can keep the app light while the rest of your phone is dark, or the other way round. Requested by [@gamersat678](https://github.com/gamersat678). - **Make the text bigger or smaller ([#346](https://github.com/jeiel85/markleaf-android/issues/346)).** The editor and the Markdown preview now honour a text-size setting of their own: **Settings → Markdown → Text size** offers Small, Medium, Large, and Extra Large. It scales the body text, the headings, and the footnote references, and because the checkbox glyphs and the link tap targets ride on the text, they grow with it too. The default is Medium, so nothing moves unless you ask. Requested by [@gamersat678](https://github.com/gamersat678).
- Aug 28, 2026 2.34.1A housekeeping release. The two largest source files in Markleaf were split into the parts they were already made of, so that changing them from here is safer than it was. Nothing you can see is different from v2.34.0 — the same screens, the same behaviour, the same files on disk. No feature, permission, or storage-format changes. ### Internal - **The folder-sync file and the editor screen were split along seams they already had ([#343](https://github.com/jeiel85/markleaf-android/pull/343)).** `NoteFolderMirror.kt` (1,232 lines) became five files — writing to the folder, importing from it, finding a note's file, deciding which side wins, and the metadata mode — behind a facade that keeps every existing name and signature, so nothing that calls it had to change. `EditorScreen.kt` (1,651 lines) gave up 515 lines of text helpers, the find bar, the suggestion rows and its two dialogs. The code moved; none of it was rewritten. - **The move was checked line by line rather than by eye, and that is how one lost guard was caught.** Comparing every function against the old file turned up six folder listings that had quietly dropped their "this is a file, not a directory" check along the way. A *directory* named `Plan.md` — the kind an external sync client leaves behind — would have been read as a note, and in metadata-free mode deleted along with everything inside it. The check now lives in one place where it cannot be separated from the filename rule again, and a test fails without it. This never reached a released version: the defect was introduced and repaired inside the same change.
- Aug 28, 2026 2.34.0Everything here came out of one question asked in Discussions: is it by design that the preview renders quite flat? It was not. No permission or storage-format changes. ### Fixed - **Nested list items are rows of their own again ([#339](https://github.com/jeiel85/markleaf-android/issues/339)).** The preview built each list row out of the whole item, including everything nested underneath it, and ran the text together with no separator — so a `- top item` with a nested `- nested item` rendered as the single bullet `top itemnested item`. Checklists had it worst: a nested `- [ ] task` never became a row at all, so it had no checkbox of its own, no visible done state and nothing to tap. Every item is now its own row at its own indent, with its own marker, at any depth, and tapping a nested checkbox flips exactly the line it came from. A second paragraph, a quote, a table or a rule written underneath an item becomes its own row too. Reported in [discussion #338](https://github.com/jeiel85/markleaf-android/discussions/338) by [@Stephane-30](https://github.com/Stephane-30). ### Changed - **The preview has a vertical rhythm ([#340](https://github.com/jeiel85/markleaf-android/issues/340)).** A blank line in your Markdown used to render as nothing at all, which left two paragraphs sitting closer together than two lines of the same paragraph — the reason the preview read as squashed rather than merely plain. Paragraphs now stand clearly apart, headings have real space above them (suppressed at the very top, so a note that opens with a heading does not open with a gap), and list rows indent by how deeply they are nested. A list whose items you separated with blank lines is spaced out now as well, the way every other Markdown renderer treats it, instead of being drawn exactly like a compact one.
- Aug 23, 2026 2.33.0Both changes arrived from outside the project: a complete Croatian translation, and a discussion about what sits above the keyboard while you write. No permission or storage-format changes. ### Added - **Markleaf speaks Croatian ([#329](https://github.com/jeiel85/markleaf-android/pull/329)).** The interface, the six starter notes and the store listing are all translated, which makes Croatian the eighth language and the first outside contribution complete enough that nothing falls back to English. The README and the landing page are translated too. Contributed by [@anotherus3r](https://github.com/anotherus3r). - **The formatting button can be turned off ([#331](https://github.com/jeiel85/markleaf-android/issues/331)).** With nothing selected, the `Aa` button sits on an otherwise empty row above the keyboard — a handle for the formatting panel, and for anyone who writes Markdown by typing it, a strip of screen that never does anything. **Settings → Markdown → Show formatting button** turns it off and the row goes with it. It stays on by default, so nothing moves unless you ask. What does not go away: select some text and bold, italic and link appear exactly as before, because selecting is how you ask for them, and `/` quick insert and the hardware-keyboard shortcuts are untouched either way. Requested in [discussion #328](https://github.com/jeiel85/markleaf-android/discussions/328) by [@NatJoe64](https://github.com/NatJoe64).
- Aug 15, 2026 2.32.6One fix, and it came from outside the project. No feature, permission, or storage-format changes. ### Fixed - **The launcher icon is no longer clipped by your launcher ([#318](https://github.com/jeiel85/markleaf-android/pull/318)).** Android composes the app icon from layers and then cuts them to whatever shape your launcher uses — a circle, a rounded square, a squircle — which means the artwork has to stay inside a smaller area than the canvas it is drawn on. Markleaf's leaf had been running past that area since the icon was drawn, so launchers had been quietly cutting the tip off. The leaf is now scaled to sit inside it, and the markdown `#` veins keep the weight they have in the themed (monochrome) version, so turning themed icons on no longer changes how heavy the mark looks. Contributed by [@ThatOneCalculator](https://github.com/ThatOneCalculator).
- Aug 14, 2026 2.32.5Five fixes from auditing the parts of sync and the editor that had never been tested, and one of them was losing data. No feature, permission, or storage-format changes. ### Fixed - **An interrupted folder conversion no longer duplicates your notes (#262).** Switching a synced folder to metadata-free mode rewrites every file, and if that pass was interrupted — the app killed, the phone out of battery — the files it had already converted carried nothing that identified them, so the next sync brought them back as second copies of themselves. The conversion now records what each file is *before* it touches it, and stops rather than starting if it cannot. - **Saving to a metadata-free folder no longer scans the whole folder twice (#262).** Every autosave walked the folder to find the note's file and again to find the index, so a folder of a thousand notes paid for both once a second while you typed. It now goes straight to the file it wrote last time, re-checks that it is still the right one, and falls back to the scan when anything has moved. - **The jump control appears for notes that are long on screen (#262).** A note earned the jump-to-end control by the number of lines in its source text, so forty short lines got it while five paragraphs that wrap into sixty screen lines did not. It now takes whichever is larger — the source lines, or an estimate of the lines the note actually fills — so both kinds of long note get it and short notes still get neither. - **"Where I left off" clears its saved positions when you turn it off (#262).** The positions it recorded stayed in the database until each note was deleted. They were never shown or synced, but keeping them for a setting no longer in use was not the promise; turning the setting off now removes them. - **Changing which line becomes a note's title always finishes (#262).** Switching the title rule rewrites every stored title, and if that pass was interrupted — the app killed while it ran — the new rule was already selected while part of the list still carried titles from the old one, with no way to finish it but toggling the setting away and back. The switch now records that a pass is owed in the same write that selects the rule, and resumes it the next time Settings opens. A pass that has just finished can also no longer be started a second time.
- Aug 13, 2026 2.32.4Two trash-screen refinements, both found while reviewing the previous release's fix. No feature, permission, or storage-format changes. ### Fixed - **Trash rows keep their place (#262).** The trash list was the last list in the app whose rows had no stable key, so the list tracked them by position — restoring or deleting a note could leave the wrong row briefly visible or animate oddly. Rows are now keyed by note id, the same treatment every other list already gets. - **Restore and Delete are slimmer (#262).** The two actions were filled buttons, which on a narrow phone with a long localized label (German "Wiederherstellen", for instance) left the title almost no room. They are now text buttons — the standard Material 3 shape for list-row actions — so the title keeps more space while both actions stay fully visible and tappable.
- Aug 5, 2026 2.32.2Two editor colour fixes, both found by measuring rather than by report. No feature, permission, or storage-format changes. ### Fixed - **Blockquotes and horizontal rules follow your theme (#262).** Both were drawn in a fixed grey that could not know which theme was on. Against the light page that measured 3.4:1, under the 4.5:1 contrast text needs to stay comfortably readable — a quoted line or a `---` rule faded into the paper instead of receding from it. They now take the same muted tone the editor already gives its other structural marks: 8.9:1 on light, 10.1:1 on dark. A quoted paragraph still sits back from body text; it just no longer disappears. - **The locked view-mode badge reads on a light top bar (#262).** Long-pressing the view toggle locks a note into preview and turns that icon amber. The amber measured 2.6:1 against the light top bar, under the 3:1 an icon needs to register as a signal. Light backgrounds now get a deeper amber and dark ones are unchanged, and the choice is made from the bar's own brightness rather than a theme setting — so it also holds under *Material You*, where the background comes from your wallpaper.
- Jul 27, 2026 2.32.1One editor fix, reported against an F-Droid install. No feature, permission, or storage-format changes. ### Fixed - **The text cursor follows your theme instead of staying black (#283).** The note editor is the one field in Markleaf that draws its own caret, and it never named a colour, so it kept the framework default: opaque black. On a dark background that put a black bar on a near-black page — hard to find in both *Markleaf Green* and *Material You*, and at odds with the drag handle right beside it, which was themed all along. The caret now takes the theme's accent colour, the same one the search field and the dialogs use: the light green under dark *Markleaf Green*, and your wallpaper's tone under *Material You*. Light themes keep a dark caret, and nothing else about the editor changed.