Write faster. Think further.
A markdown editor that gets there before you do.
Download the latest release (Windows, Linux, macOS) · Website · Install notes
A GPU-accelerated native Markdown editor, built for reading and editing pasted LLM output. It aims to start as fast as a scratchpad and edit like Typora: one pane, inline WYSIWYG, no WebView.
- Rendering: GPUI (Zed's UI framework): DirectX on Windows, Vulkan via wgpu on Linux, Metal on macOS.
- Parsing:
pulldown-cmark, reparsed incrementally per block. - Editing model: block swap. The block under the cursor shows raw Markdown; every other block
shows rendered rich text. Files that aren't Markdown by extension open in plain-text mode
instead (no syntax hiding at all);
Ctrl+Shift+Mtoggles a document between the two. - Platforms: Windows first, then Linux and macOS.
- Website: https://daileng.github.io/tachyon/, published from
site/by the Pages workflow.
Status: 1.0. Block-swap editing, incremental parsing, everyday editing (find/replace, themes, zoom, links, the command palette), writing comfort (lists, code highlighting, hot exit, session restore, Copy as HTML), files and settings, distribution, large-file stability and Markdown-mode memory efficiency are done (Phases 1-9), each held to its measured budget. What remains is owner-only (macOS signing and notarization) or a documented measurement follow-up - see ROADMAP. Download it from the latest release, or use the install buttons on the website.
- Block swap: the block under the caret shows raw Markdown; every other block is rendered
rich text.
Ctrl+Shift+Mtoggles a document into plain-text mode instead, for files that aren't Markdown. - Large files stay responsive: a 200 MB log opens in about 400 MB of memory with the window responsive throughout; a 1 GB log opens in about 1.4 GB and stays responsive; files over 2 GiB are refused with a message rather than crashing.
- Markdown memory tracks the text, not the worst block: a 15 MiB Markdown file shaped like one giant fenced code block used to peak near 5.7 GB; it now peaks around 300 MB.
- Speed, measured: launch into the resident instance is p95 20-35 ms on the reference Windows machine (Core Ultra 7 155H, Intel Arc, 4K; a cold direct launch is 300-450 ms, which is why resident mode is the default on Windows); a keystroke paints within one frame (reparse p99 about 45-55 µs against a 0.5 ms budget); a 5 MB paste never drops a frame (worst 5-9 ms).
- Signed Windows builds:
tachyon.exeis signed with Azure Trusted Signing; an optional MSIX install auto-updates itself from GitHub Releases, and shows what changed as a Markdown document the first time the new version starts. - Session restore: Quit remembers every open window - file or unsaved scratch text, position,
size, caret and scroll - and the next start with no files on the command line reopens all of
them, in place; a launch with files restores the session first, then opens and focuses those.
restore_session = true(default on) insettings.tomlturns it off if you would rather always start fresh, keeping hot exit's own unsaved-document restore either way. - Everyday editing: find and replace (Replace All is one undo step), light and dark themes
following the system or a setting, zoom,
Ctrl+clicklinks, list continuation andTabnesting, syntax highlighting in fenced code (Rust, Python, JS/TS, C family, Go, Java, C#, shells, PowerShell, SQL, JSON, TOML, YAML), a command palette, Go to heading, quick open, Open recent, hot exit, Copy as HTML, local images, Mermaid diagrams, external file change reload, a Preferences panel over a plain settings file, and math.
Ctrl is Cmd on macOS unless noted.
| Action | Shortcut |
|---|---|
| New window | Ctrl+N |
| Open | Ctrl+O |
| Save / Save As | Ctrl+S / Ctrl+Shift+S |
| Close window / Quit | Ctrl+W / Ctrl+Q |
| Command palette | Ctrl+Shift+P (also F1); right-click the document |
| Preferences (every setting, editable in place) | Ctrl+, |
| Open recent / quick open (the same picker) | Ctrl+R or Ctrl+P |
| Find | Ctrl+F |
| Find next / previous | F3 / Shift+F3 (also Ctrl+G / Ctrl+Shift+G) |
| Replace | Ctrl+H (Cmd+Alt+F on macOS) |
| Replace all, in the replace bar | Ctrl+Enter |
| Go to heading | Ctrl+Shift+O |
| Copy as HTML | Ctrl+Shift+C |
| Toggle plain-text mode | Ctrl+Shift+M (same on every platform) |
| Toggle view mode (read-only) | Ctrl+E (same on every platform) |
| Zoom in / out / reset | Ctrl+= (or Ctrl++) / Ctrl+- / Ctrl+0 |
| Frame-time overlay | Ctrl+Alt+F (same on every platform) |
| Cut / copy / paste | Ctrl+X / Ctrl+C / Ctrl+V |
| Undo / redo | Ctrl+Z / Ctrl+Shift+Z (redo also Ctrl+Y) |
| Select all | Ctrl+A |
| Move by word | Ctrl+Left / Ctrl+Right (Alt+Left / Alt+Right also work); add Shift to select |
| Delete previous / next word | Ctrl+Backspace / Ctrl+Delete (Alt+Backspace / Alt+Delete also work) |
| Line start / end | Home / End (Cmd+Left / Cmd+Right on macOS); add Shift to select |
| Document start / end | Ctrl+Home / Ctrl+End (Cmd+Up / Cmd+Down on macOS) |
| Page up / down | Page Up / Page Down; add Shift to select |
| Previous match, in the find bar | Shift+Enter |
| Hard line break within a paragraph | Shift+Enter (inserts \ and a newline) |
| Indent / outdent a list item | Tab / Shift+Tab |
| Toggle a note's always-on-top pin | Ctrl+Shift+T (sticky notes only) |
| New sticky note from anywhere | Win+Shift+N (Windows; the sticky_hotkey setting changes it) |
| Leave editing (click, type or move the caret to resume) | Escape |
A sticky note is a small scratch window meant to stay open and out of the way. It starts editable and can be locked for reading (view mode).
Open one with tachyon --note on the command line, the global hotkey in the sticky_hotkey
setting (default win+shift+n, Windows only - see below), the command palette's "New sticky
note" row (which shows that hotkey), or, on Windows, the tray icon's "New sticky note" item.
Reopen a closed one from the palette's "Reopen sticky note..." row, or the tray's matching item:
the list is the notes folder, newest first, and a note already open is focused instead of opened
again.
Each note is a Markdown file, autosaved as you type (after a short pause, like hot exit's own
backup) with no Save prompt, in <Documents>/tachyon/notes/ (~/Documents/tachyon/notes/ on
Linux and macOS; the shell's real Documents folder on Windows, which may be OneDrive-redirected).
Its file name comes from its first Markdown heading or line the first time it saves, falling
back to a note-YYYYMMDD-HHMMSS timestamp if there is nothing usable to name it from; once
named, a note's file name never changes, even if you edit the heading later. A note with nothing
ever typed into it writes no file at all, and one that is typed into and then emptied out again
has its file deleted.
Five settings in settings.toml (Ctrl+, opens Preferences) control sticky notes:
sticky_hotkey(default"win+shift+n"): the global hotkey that opens a new note from anywhere, inCtrl+Alt+Shift+Win+<letter or digit>combinations (e.g."ctrl+shift+n"); empty turns it off. Windows only.sticky_on_top(defaulttrue): whether a new note starts always-on-top.sticky_default_mode("markdown"or"plain", default"markdown"): the mode a new note starts in."plain"shows what you type literally, for logs and snippets.sticky_folder(default empty, meaning<Documents>/tachyon/notes): where notes are saved, as a plain path (no~or variables). It applies to notes saved from then on: nothing is moved, an existing note keeps its file, and "Reopen sticky note" lists the folder that is set. The command palette's "Open sticky notes folder" opens it.sticky_unfocused_opacity(default1.0, range0.3-1.0): a note's opacity while its window is not focused;1.0turns this off. A focused note is always fully opaque, and ordinary (non-note) windows are never affected.
start_without_active_block (default false): when true, opening a file, restoring a session,
or pasting a whole document leaves every block rendered. A click or keystroke starts editing.
scrollbar ("auto" or "never", default "auto"): an overlay thumb while scrolling or while
the pointer is on the right edge. It hides a second later and does not change the text width.
Each note has its own compact header instead of the native title bar, with a drag area, a
MD/TXT button that switches the note between Markdown and plain text (also Ctrl+Shift+M;
each note remembers its own mode across restarts, and the file stays .md), an EDIT/VIEW
button that locks the note for reading and copying (also Ctrl+E: nothing can be typed or pasted,
links open on a click, task boxes still tick, and the note reopens locked), a pin button and a
close button. The pin button and Ctrl+Shift+T toggle that note's always-on-top
state on or off individually (Windows: SetWindowPos(HWND_TOPMOST)); always-on-top is not
implemented on Linux yet, so the pin button does not appear there.
Every note that is open when a resident instance quits reopens, in the same place, pin state and mode,
the next time that instance starts - including a windowless --background start (login
autostart) - kept in its own state file, entirely separate from the regular session file and
hot exit's backups.
Linux: Wayland has no general system-wide hotkey API, so sticky_hotkey does nothing there.
Bind a key to tachyon --note in your compositor instead. On Hyprland with
omarchy's Lua bindings, add a line to a file under
~/.config/hypr/bindings/ (or ~/.local/share/omarchy/default/hypr/bindings/):
o.bind("SUPER + SHIFT + N", "New sticky note", "tachyon --note")On a plain hyprland.conf (no omarchy Lua layer), the equivalent is:
bind = SUPER SHIFT, N, exec, tachyon --note
Pick a combination that is not already bound to something else in your config; omarchy's own
default bindings use SUPER SHIFT N for its terminal editor, so choose a different one if you
use those defaults.
| Budget | Target | Measured by |
|---|---|---|
| Launch → first frame | p95 < 50 ms | cargo xtask bench-startup |
| Keystroke reparse, 1 MB document | p99 < 0.5 ms | cargo bench -p tachyon-doc |
| Paste of 5 MB | no frame over 16.6 ms | frame-time overlay (Phase 3) |
Budgets are requirements, not goals: a change that regresses one needs a recorded decision (ADRs).
Prebuilt archives for Windows, Linux and macOS are attached to each
release: a .zip on Windows, a .tar.gz
elsewhere, plus a SHA256SUMS.txt to verify the download. Extract it and run tachyon
(tachyon.exe on Windows); no installer or separate runtime is required. tachyon.exe is signed
with Azure Trusted Signing; macOS builds are not signed or notarized yet, so Gatekeeper will warn
on first launch.
Windows, with automatic updates: download
Tachyon.appinstaller
(always the latest release) and open it (or
Add-AppxPackage -AppInstallerFile Tachyon.appinstaller from PowerShell), then follow the prompt
to install. This registers Tachyon as an MSIX package (also signed with Azure Trusted Signing)
that checks for an update every time it launches and applies it in the background; a resident
Tachyon (the default) picks up the update the next time it fully quits (tray icon → "Quit
Tachyon", or tachyon --quit) or at the next sign-in. tachyon also works from any terminal, and
opening a .md or .markdown file, or a .txt, .text or .log file, offers Tachyon in "Open
with". Launches of a packaged app go through Windows' package activation, which adds about
35-40 ms per launch on the reference machine (p50 about 59 ms instead of about 21 ms), so the
.zip above is the faster choice if you would rather manage updates yourself. Uninstalling the
package does not remove the autostart entry if you turned it on; run tachyon --autostart off
first.
Windows, with Chocolatey: choco install tachyon installs the signed .zip build for all
users, with a Start menu shortcut and tachyon on the PATH; choco upgrade tachyon updates it
(new versions appear after the Chocolatey community repository's moderation).
choco uninstall tachyon closes Tachyon if it runs from the package and keeps your settings and
documents. It also removes the sign-in autostart (tachyon --autostart on) of every user signed in
at the time; for anyone else, run tachyon --autostart off before uninstalling (a leftover entry
is harmless: Windows skips it once the file is gone). Use either this or the MSIX install, not
both.
The package source is in packaging/chocolatey/.
Nightly builds: every merge to main publishes a signed MSIX to a rolling
nightly prerelease. Install once from
Tachyon.appinstaller
the same way as above; it then updates itself on every launch. An already-installed stable MSIX
(1.1.1.0) updates in place the same way, no uninstall needed, because a nightly's version is
always higher than the stable release it followed. There is no path back from nightly to the
stable release with that same version without uninstalling first (it would be a downgrade); switch
channels only if you want a tested, versioned build instead of main's latest commit.
Requires the toolchain pinned in rust-toolchain.toml; rustup installs it
automatically on first build.
Windows: Visual Studio 2022 Build Tools with the Desktop development with C++ workload and a
Windows 10/11 SDK. Release builds compile HLSL shaders with the SDK's fxc.exe.
Linux (Debian/Ubuntu):
sudo apt-get install libxkbcommon-x11-dev libwayland-dev libxcb1-dev libx11-xcb-dev \
libfontconfig-dev libfreetype-dev libvulkan-dev libzstd-devArch: sudo pacman -S libxkbcommon-x11 wayland libxcb fontconfig freetype2 vulkan-icd-loader zstd.
macOS: Xcode command-line tools.
cargo run # scratch window (debug)
cargo run --release -- notes.md # open a file
cargo run --release -- --paste # open the clipboard contentsA second launch forwards its files to the running instance and exits; pass -n to force a separate
process. On Windows the instance stays running after its last window closes, so later launches open
at once (--no-resident turns that off; on Linux and macOS it is opt-in with --resident):
tachyon --autostart on # start in the background at login
tachyon --status # is an instance running? does it start at login?
tachyon --quit # end it (documents and window layout come back next time)
tachyon --desktop-entry on # Linux: add it to the launcher and "Open with" menusOn Windows, a resident instance with hot exit on also registers to be brought back automatically after a reboot, a Windows Update install, or signing out and back in with "Automatically save my restartable apps and restart them when I sign back in" (Settings > Accounts > Sign-in options) - the same windowless start autostart uses, reopening whatever was unsaved.
cargo xtask dist builds a release archive in target/dist/. tachyon --help lists all options.
Ctrl+, opens Preferences: every setting with its current value and what it does. Picking an
on/off setting flips it, a setting with a few values steps to the next, and any other opens a
field (a value it does not accept says why and changes nothing). Changes apply to every window at
once. "Reset all settings to defaults" restores every default and keeps the old file as
settings.toml.bak; "Open settings file" in the command palette opens the file itself.
Settings live in settings.toml: theme, zoom of new windows, whether Quit
keeps unsaved documents, whether the whole session (open files, window position and size, caret
and scroll) is restored at the next start with no files given on the command line, whether a
faint rotating tip shows behind the document, whether an update opens a "What's new" window (the
command palette's "What's new" row opens it any time regardless), the text column width (a pixel
size like 820px or a percentage like 80%, always leaving a minimum gap to the window frame),
and sticky notes' own global hotkey (sticky_hotkey, Windows only), whether a new note starts
always-on-top (sticky_on_top), its opacity while unfocused (sticky_unfocused_opacity), and
whether ```mermaid code blocks show as diagrams (mermaid, on by default).
A fenced code block marked mermaid shows as a diagram when the caret is elsewhere; click it to
edit the source. Flowcharts, sequence, state, class, ER, Gantt, pie, journey, timeline, mindmap,
git graph and other diagram types render with a bundled pure-Rust renderer, in the background, so
typing never waits for one (a large graph can take a quarter second to appear). A diagram that
does not parse stays code, with the reason underneath. Documents without diagrams cost nothing
(ADR 0012).
cargo xtask ci # fmt, clippy, tests, cargo-deny: what CI requires
cargo xtask bench-startup # release build + startup latency vs. the 50 ms budget
cargo xtask bench-startup --warm # launches handed to a resident instanceRead CONTRIBUTING.md before opening a PR. Architecture: docs/ARCHITECTURE.md. Decisions: docs/adr/.
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project shall be dual licensed as above, without any additional terms or conditions.
Development was supported by a free month of Devin MAX from Cognition. The
DeepWiki for this repository is AI-generated; the
documents in docs/ and AGENTS.md are authoritative where they differ.