# Monoleaf A desktop markdown editor. Comments, tracked changes, page setup and metadata live inside the same `.md` file as plain text, so the document you edit is the file you can read, diff and hand to a language model. Windows, macOS, Linux. MIT licensed. Version 1.2.1, released 24 August 2026. Home: > [!NOTE] > This file is the website, written as markdown. That is not a gimmick: a page > arguing that plain text is the better container should be readable as plain > text. Open it in Monoleaf and it renders as a document. Open it in anything > else and you are reading it right now. ## The file is the document Monoleaf edits `.md` files as documents. There is no hidden document model, no sidecar and no database: what you can read is all there is. It is also a document you can safely hand to a language model, because a model does not rewrite the file. It marks up what it would change, and you accept or reject each edit yourself. ## Why plain text, specifically now The usual document formats are zip archives of XML that describe a document. A `.md` **is** the document. That difference used to be a matter of taste. Now it decides whether a model can work on your writing at all. - **A model reads it directly.** No converter, no unzipping, no XML tree to walk and rebuild. Fidelity is not something the pipeline can lose, because there is no pipeline. - **The context window holds your writing, not your markup.** Markdown gives about a tenth of a file to structure. The same document as zipped XML gives roughly seven tenths of it to markup, and stripping that back out to make room throws the headings, tables and tracked changes away with it. Markdown keeps both. Measured by character; a tokeniser splits tags harder than prose, so the real gap is wider. - **AI edits arrive as suggestions.** Tracked changes are just `{++text++}` and `{--text--}`, so a model proposes edits inside the file and you accept or reject each one. Nothing is silently rewritten. - **A review can be proved harmless.** Revert every mark in a reviewed file and you should get the original back, byte for byte. That is a check a script can run. - **`git diff` works on prose.** Every revision is a real diff with real line history, not a binary blob and a compare-documents dialog. - **Open it, save it, get the same bytes back.** Line endings, byte order mark, missing trailing newline and all. Enforced by tests. - **One file, no sidecars.** Everything travels with the document. ## What it does | Area | What you get | | ---- | ------------ | | Editing | Live preview in the same buffer as the markdown. No second pane. | | Review | Tracked changes as CriticMarkup, accept or reject individually or all at once | | Review | Comments attached to any span, threaded, resolvable, stored in the file | | Writing | Note and warning boxes, footnotes, LaTeX maths, syntax-highlighted code | | Output | Page setup, export to PDF or to a single self-contained HTML file | | Import | PDF back to markdown, structure reconstructed from page geometry | | Import | Paste from a word processor, a spreadsheet or a web page as clean markdown | | Privacy | Images from the web stay unloaded until you enable them | | Discipline | Strict and Enhanced modes flag anything beyond CommonMark and GFM | Also: tables you can edit in place, outline sidebar and table of contents, find and replace, word and page count, page layout view with zoom, document properties kept in the file, change case, light and dark themes, autosave with crash recovery. ## Exactly what a plain reader sees The honest table, including every place the syntax shows through. "Other readers" means any CommonMark and GFM viewer, and the column states the *weakest* behaviour among them. | Construct | Monoleaf | Other readers | Plain text | | --------- | -------- | ------------- | ---------- | | Headings, emphasis, lists, tables, code | renders | renders | clean | | `` `` `
` | renders | renders | tags visible | | `> [!NOTE]` callouts | renders | reads as a quote | reads as a quote | | `[^1]` footnotes | renders | renders | clean | | `$…$` and `$$…$$` maths | renders | varies | reads as LaTeX | | `` | opt-in | renders | tag visible | | `` page setup | applied | invisible | invisible | | `` metadata | applied | invisible | invisible | | `` comments | renders | invisible | invisible | | `{++ ++}` `{-- --}` tracked changes | renders | literal | literal | | `H~2~O` `E = mc^2^` `:smile:` | renders | literal | literal | "Invisible" means the construct is an HTML comment: the reader sees clean prose and nothing else. "Literal" means the syntax itself shows up. Three things can do that: tracked changes, where it is the point; subscript, superscript and emoji shortcodes, which Enhanced mode flags as you type; and maths in a reader with no maths support, which Monoleaf does not currently flag. ## Getting it Windows is the tested, primary build. Monoleaf is a Tauri application, so the same source also ships as a macOS disk image and a Linux AppImage, both best-effort rather than exercised as broadly as Windows. - Installers: - Source: Windows installs per-user, no administrator rights. The installer fetches the Microsoft WebView2 runtime if it is missing. It is **not code-signed**, so SmartScreen will warn about an unknown publisher: choose More info, then Run anyway. Signing means paying a certificate authority every year, which is hard to justify for a free tool with one maintainer, so it is not planned rather than pending. macOS is unsigned and unnotarized too, for the same reason (no Apple Developer account, none planned) with a harder consequence: Gatekeeper refuses a plain double-click as "damaged" rather than just warning. Right-click (or Control-click) the app and choose Open, then confirm Open again. Linux is community-tested rather than verified as broadly as Windows. ## Privacy Monoleaf runs on your machine. No account, no sync, no telemetry, and your documents are never transmitted anywhere. This website sets no cookies, stores nothing on your device and runs no analytics. It serves its own fonts, so nothing is fetched from Google. It makes one outbound request, to the GitHub API, to read the current release number. Details: --- Copyright 2026 vibingbiochemist. Released under the MIT License. Every open-source component is listed at .