A fast, native Markdown editor for macOS.
Write on the left, read on the right, or go full screen with nothing but the text.
Neon is built on GPUI, the GPU-accelerated UI framework behind the Zed editor. It draws with Metal, parses off the main thread, and stays responsive in files tens of thousands of lines long. The Apple Silicon build is about 16 MB.
Writing
- Markdown highlighting in the editor, with line numbers you can hide.
- Lists that continue themselves. Enter starts the next bullet, number or task; Tab and Shift+Tab indent and outdent the item.
- Slash commands. Type
/on an empty line to insert a list, task list, code block, link, image or table. Add a size or language:/table 4x5,/bullet 5,/code rust. - Find and replace in a compact bar at the editor's corner.
Reading
- Live preview in Charter, a book face, of headings, links, nested and numbered lists, task lists, block quotes, code, tables with alignment, images and footnotes.
- Outline and table of contents. The sidebar lists the document's headings and lights the section you are in; click one to go there. Write
[TOC]for a table of contents in the preview and the exports, and link to any heading with#anchoror[[Note#Heading]]. - Obsidian-style notes: callouts (
> [!tip]),==highlights==, front matter as properties, and[[wikilinks]]that open the linked note in Neon. - Three layouts: Editor, Split and Preview. In Split, the preview follows the cursor; in Editor, the text sits in a centered column of readable width.
- Zen Mode. The document alone, full screen, in a centered column. The paragraph you are writing stays bright while the rest fades, and the line you type on stays at the middle of the screen.
Files
- Tabs, each with its own edits, undo history and scroll position.
- Folder sidebar for nested Markdown files, with new file and new folder.
- Search the folder from the sidebar, with match case, whole word and regular expressions. Unsaved edits are searched as they read, in English and Chinese.
- Git for a folder in a Git repository: see what changed since the last commit, word by word, then stage, commit and push from the sidebar, and browse the history as a branch graph.
- Picks up where you left off: Neon reopens the last folder and file at launch.
- Export to HTML, PDF or Word in the preview's font, with local images embedded.
Look
- Light and dark themes that follow the system, or a fixed choice in Settings.
- Separate fonts and sizes for the editor and the preview, remembered between launches.
- Download
Neon-<version>-macos.dmgfrom the latest release. - Open it and drag Neon to Applications.
Neon runs natively on Apple Silicon and Intel, macOS 11 or later. It is signed with an Apple Developer ID and notarized, so macOS opens it without a warning.
Neon updates itself. On the second launch it asks whether to check for updates automatically; when one is out, it shows what changed and installs it on request. Neon › Check for Updates… checks right away. Updates are signed, and Neon refuses one that is not.
Verify a download
Each release lists SHA256SUMS and a build provenance attestation. To check that a file was built by this repository's release workflow:
gh attestation verify Neon-<version>-macos.dmg --repo michaelmjhhhh/neon| Files | View | ||
|---|---|---|---|
| New file | ⌘ N | Editor / Split / Preview | ⌘ 1 2 3 |
| New tab | ⌘ T | Zen Mode | ⌃ ⌘ Z |
| New folder | ⌘ ⇧ N | Toggle sidebar | ⌘ ⇧ B |
| Open file | ⌘ O | Toggle line numbers | ⌘ ⇧ L |
| Open folder | ⌘ ⇧ O | Settings | ⌘ , |
| Save | ⌘ S | Bigger / smaller / default text | ⌘ = / ⌘ - / ⌘ 0 |
| Save As | ⌘ ⇧ S | Editing | |
| Next / previous tab | ⌃ Tab / ⌃ ⇧ Tab | Bold / Italic | ⌘ B / ⌘ I |
| Close tab | ⌘ W | Find | ⌘ F |
| Close window | ⌘ ⇧ W | Find and replace | ⌥ ⌘ F |
| Files / Changes in sidebar | ⌘ ⇧ E / ⌃ ⇧ G | Indent / outdent list item | Tab / ⇧ Tab |
| Search in folder | ⌘ ⇧ F | ||
| Outline in sidebar | ⌃ ⌘ 1 | ||
| Commit, in the message | ⌘ ↩ |
⌘ } and ⌘ { also switch tabs. In the search field, ↩ or ↓ opens the next match and ⇧ ↩ or ↑ the previous one. In the preview, Space and ⇧ Space page down and up, and ⌘ ↑ ↓ jump to the top and bottom.
Each keystroke is drawn and submitted as soon as it is handled, instead of waiting for the next display refresh. Syntax highlighting reparses in the background, and only the editor redraws while you type.
Measured in an 8,600-line document on a 60 Hz display:
| Mean | p99 | |
|---|---|---|
| Keystroke → frame submitted | 1.6 ms | 5.2 ms |
| Keystroke → first refresh it can appear on | 10.5 ms | 17.9 ms |
To reproduce, keep the Neon window in front and run:
script/latency-bench my-run 3 # JSON reports go to output/latency/Memory use is covered by a separate memory benchmark.
Requires macOS, Xcode with the Metal toolchain, and rustup. The Rust version is pinned in rust-toolchain.toml.
cargo run --release # build and launch
cargo test --workspace # run the tests
script/bundle-mac --native # package dist/Neon.app, .dmg and .zip for this Mac
script/bundle-mac # universal binary for Apple Silicon and IntelBuilds from source have no updater: cargo run leaves Sparkle out, and so does script/bundle-mac unless sparkle_public_key in it is set. script/appcast writes the update feed for a release.
If the Metal compiler is missing, run xcodebuild -downloadComponent MetalToolchain.
| Crate | Purpose |
|---|---|
crates/neon |
App entry point, menus and windows |
crates/workspace |
Document window: editor, tabs, sidebar, status bar, file handling |
crates/markdown_preview |
Virtualized, incrementally updated preview |
crates/markdown |
Markdown parsing into blocks, with source ranges |
crates/export |
HTML, PDF and Word export |