// What You Write Is What You Mean
A fast, native macOS Markdown editor for technical writing. Plain text in, publication-quality technical preview out. GitHub-Flavored Markdown, code, math, Mermaid diagrams, and export-ready typography — all bundled, all local, all yours.
macOS 14+ on Apple Silicon. Notarized & stapled — opens without a Gatekeeper prompt.
Most Markdown editors are either Electron blobs that idle at 400 MB of RAM,
rich-text WYSIWYGs that secretly mangle your .md on save,
or cloud-locked notebooks that hold your prose hostage behind a subscription.
Writ takes the opposite stance: plain text is the canonical format, your files live where you put them, and the preview renders structure and meaning — not a fake page of decorative font choices.
The principle is WYWIWYM — What You Write Is What You Mean. You write Markdown. Writ shows you what it means — including math, diagrams, and code — without ever pretending to be the document itself.
NSTextView, not SwiftUI TextEditor. Real undo, find/replace, tabs, autosave, spellcheck — all the macOS behaviors you'd expect.WKWebView preview with debounced, off-main-thread updates so typing never blocks.apple/swift-markdown backed by cmark-gfm. Tables, task lists, strikethrough, the lot.$…$ and display $$…$$ math rendered with KaTeX. MathJax bundled as a runtime alternate.```mermaid blocks render to native SVG diagrams — flowcharts, sequence, class, state, and more..md file is your .md file..md, .markdown, .txtA native macOS app on top of a small set of local Swift packages. No IPC, no Electron, no remote services.
App/ hosts the AppKit document app, editor, preview, menu, export, and window controllers.
WritCore handles document snapshots, revisions, hashes, render jobs, large-document mode, and technical-block models.
WritParser does Markdown parsing, math preprocessing, technical-block extraction, and HTML emission.
WritRender manages preview scheduling, technical-block caching, export helpers, and the bridge payloads.
The editor is NSTextView with TextKit 2 where practical.
The preview is a persistent WKWebView loaded once per document, then updated through a small JavaScript bridge —
window.Writ.update(...). Parsing and preview scheduling run off the main thread so typing stays responsive.
Render pipeline:
WKWebView receives an update payload via the bridgeWrit is local-first: no account, no telemetry in the MVP, no remote rendering services by default. PlantUML remote servers are explicitly out of scope. KaTeX, MathJax, Mermaid, and highlight.js are bundled in the app for offline use — your prose, code, and diagrams never leave the machine.
Writ's MVP non-goals, stated up front so nobody has to ask:
WYSIWYG / Typora-style inline rich editing. Cloud sync, collaboration, accounts, proprietary storage. Plugin system. AI writing or generation features. Mobile, iPadOS, Windows, or Linux. A full publishing platform. A heavy custom theme engine.
If a feature is missing, that's the answer. If it's in TODO.md, it's on the way.