Skip to content
DailenGPublic

About

Fast native Markdown editor in Rust (GPUI): inline WYSIWYG, sticky notes, plain-text mode. Windows, Linux, macOS.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

124 Commits

Folders and files

Tachyon

Write faster. Think further.
A markdown editor that gets there before you do.

CI Latest release Downloads Platforms: Windows, Linux, macOS License: MIT OR Apache-2.0 Ask DeepWiki Supported by Devin

Tachyon editing a Markdown document: rendered blocks with the block under the caret shown as raw Markdown

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+M toggles 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.

Highlights

  • Block swap: the block under the caret shows raw Markdown; every other block is rendered rich text. Ctrl+Shift+M toggles 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.exe is 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) in settings.toml turns 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+click links, list continuation and Tab nesting, 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.

Keyboard shortcuts

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

Sticky notes

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, in Ctrl+Alt+Shift+Win+<letter or digit> combinations (e.g. "ctrl+shift+n"); empty turns it off. Windows only.
  • sticky_on_top (default true): 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 (default 1.0, range 0.3-1.0): a note's opacity while its window is not focused; 1.0 turns 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.

Performance budgets

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).

Install

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.

Building

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-dev

Arch: 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 contents

A 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" menus

On 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).

Mermaid diagrams

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).

Development

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 instance

Read CONTRIBUTING.md before opening a PR. Architecture: docs/ARCHITECTURE.md. Decisions: docs/adr/.

License

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.

Acknowledgements

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.

About

Fast native Markdown editor in Rust (GPUI): inline WYSIWYG, sticky notes, plain-text mode. Windows, Linux, macOS.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages