The native Markdown app for macOS.
Your coding agents write too much Markdown. Downright renders it exactly, reviews rewrites live, and never touches your bytes.
Free · MIT · macOS 14+ · no WebView
# Downright renderer showcase**Inline** · **bold** · _italic_ · ~~strike~~ · `code`**Links** · [open](https://x.com) · [[wiki]] · <https://x.com> · note[^1]**Math** · $e^{i\pi}+1=0$ · $\sqrt{x^2+y^2}$ · `$PATH`| Surface | Proof ||---|---|| `Model` | **pass** |> [!NOTE]> Native: prose + source + state + media.- [x] Code · math · Mermaid · table · task**Syntax** · comments, keywords, types, strings, numbers, calls:```swift@MainActor func render(_ source: String) -> NSImage? { let features = ["math", "mermaid"] return cache.image(for: source) { print(features.count) }}```**Math**$$\mathop{\mathrm{read}}(source) \longrightarrow \mathop{\mathrm{render}}(surface)$$**Mermaid**```mermaidflowchart LR A[MD] --> B{?} B -->|no| C[Keep] B -->|yes| D[Render]```## Lower anchorsThis lower shelf gives the document map real structure without competing with the proof above.### Source`sample.md` stays the source of truth while the rendered surface stays native.### StateLinks, callouts, tasks, and math retain their local state as the page grows.### FinishThe rail is now a compact section index, not a lone tick.[^1]: Footnotes resolve locally without moving the reader away from the line.
Downright renderer showcase
Inline · bold · italic · strike · code
Links · open · [[wiki]] · https://x.com · note1
Math · eiπ+1=0 · x2+y2 · $PATH
| Surface | Proof |
|---|---|
Model | pass |
Code · math · Mermaid · table · task
Syntax · comments, keywords, types, strings, numbers, calls:
swift@MainActor func render(_ source: String) -> NSImage? {
let features = ["math", "mermaid"]
return cache.image(for: source) { print(features.count) }
}
Math
Mermaid
Lower anchors
This lower shelf gives the document map real structure without competing with the proof above.
Source
sample.md stays the source of truth while the rendered surface stays native.
State
Links, callouts, tasks, and math retain their local state as the page grows.
Finish
The rail is now a compact section index, not a lone tick.
This window is real. Type in it.
The difference
Press Space on a Markdown file today. This is what macOS shows you.
- MathReal symbols, inline and block. No screenshots.
- DiagramsMermaid, drawn as part of the document.
- TablesPipe rows become a real table.
- CalloutsGitHub alerts, drawn natively.
- FootnotesNumbered and linked, at the bottom.
- CodeSyntax colours from the app's own themes.
Real capture · qlmanage on macOS 26 · nothing retouched. The lines above are the same bytes, live. See the capture ↗
There is more of it every day.
Your agents wrote 3,000 words while you read this sentence. One of them matters. Good luck finding it.
The file changes while you are reading it.
An agent writes to the file you have open. Downright marks every word that changed and waits for you to decide what to keep.
That is what reviewing agent work should feel like.
Every change lands on a timeline, so you can compare any two versions later. Setup is three checkboxes and one default: nothing leaves your Mac.
Every number here has a limit beside it.
These are the app's own measurements. The corpus, the date, and the things we did not measure are all listed below the table.
| Measurement | p50 | p95 | Budget |
|---|---|---|---|
| Parse 100 KB | 12.078 ms | 12.395 ms | <250 ms |
| Source edit and paragraph map | 0.146 ms | 0.153 ms | <8 ms |
| Text diff, external rewrite | 2.099 ms | 2.164 ms | Informational |
| End-to-end semantic convergence | 30.583 ms | 31.445 ms | <100 ms |
| Syntax highlight, 10 KB Swift | 0.093 ms | 0.094 ms | Informational |
Your median parse this visit: waiting for a keystroke. Type in the living document and the measured result joins this table.
Corpus 120,825 characters / 4,885 lines. Date 2026-08-06. Machine single unrecorded machine.
Baseline only. Not a cross-machine claim. Missing: TextKit layout, scroll frames, IME input, live window frame time.
Your text stays in charge.
One window handles reading, editing, and source. Downright adds styling on top of your file. It never changes what is in it.
Read the repository- Your text is the only source of truth
- One window for reading, editing, and source
- No WebView anywhere
- Downright never changes a byte of your file
This page keeps its source too. Press ⌘⇧E.
It opens your files from anywhere.
Open a file from Finder. Preview it with Space. Flick a card and it slides — the cards have real weight. Or pipe a file through the down command.
Six themes. One document.
This page uses the app's theme engine. Pick a theme and the whole page changes with it.
Free. Open source. MIT. No account.
No telemetry, no cookies, no server. This page has none of them. Your Markdown stays on your Mac.
macOS 14.0+ · direct download · Downright.dmg when verified · orbrew install --cask downrightBuilt by one person, funded by people, not telemetry. If Downright earns its place in your dock — sponsor it.