A native Rust/GPUI markdown editor with live preview.
  • Rust 98.4%
  • Shell 1.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
ultrablob 3f0865934a Add macOS support and app bundle/DMG packaging
- Gate Wayland blur and primary selection to Linux; AppKit blur on macOS
- Native traffic lights, Cmd shortcuts, macOS text navigation, menu bar
- Open files and folders handed over by Finder, reusing the blank window
- scripts/bundle-macos.sh builds a universal Inkwell.app and DMG

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 14:30:55 -04:00
assets Inkwell: native GPUI markdown editor with live preview 2026-09-27 13:58:12 -04:00
packaging Add macOS support and app bundle/DMG packaging 2026-09-27 14:30:55 -04:00
scripts Add macOS support and app bundle/DMG packaging 2026-09-27 14:30:55 -04:00
src Add macOS support and app bundle/DMG packaging 2026-09-27 14:30:55 -04:00
.gitignore Inkwell: native GPUI markdown editor with live preview 2026-09-27 13:58:12 -04:00
Cargo.lock Inkwell: native GPUI markdown editor with live preview 2026-09-27 13:58:12 -04:00
Cargo.toml Add macOS support and app bundle/DMG packaging 2026-09-27 14:30:55 -04:00
README.md Add macOS support and app bundle/DMG packaging 2026-09-27 14:30:55 -04:00
rust-toolchain.toml Inkwell: native GPUI markdown editor with live preview 2026-09-27 13:58:12 -04:00

Inkwell

A fast, native markdown editor for Linux and macOS, built with Rust and GPUI. It's meant to be the app that opens when you double-click a .md file.

It edits in live preview. Headings, emphasis, links, task lists, quotes, code blocks, tables and images render inline. The line under the cursor shows its raw markdown, with the syntax dimmed and hung into the margin so the text never jumps.

The look is modelled on Writer, with the palette and window chrome taken from Zeron.

Install

./scripts/install.sh            # ~/.local/bin/inkwell + menu entry + icon
./scripts/install.sh --default  # …and make it the default app for .md files

On macOS, build a universal Inkwell.app and a drag-to-install disk image in target/macos/:

./scripts/bundle-macos.sh            # add --install to copy it to /Applications

The app is ad-hoc signed, not notarized, so the first launch of a downloaded copy needs right-click → Open. To make it the default for markdown, select a .md file in Finder, choose Get Info → Open with → Inkwell, then Change All.

The Rust toolchain is pinned in rust-toolchain.toml, and rustup fetches it automatically.

Use

inkwell notes.md        # open a file (created on first save if missing)
inkwell ~/notes         # open a folder in the sidebar
  • Files autosave half a second after you stop typing. Changes made by other programs are picked up live unless you have unsaved edits.
  • The sidebar lists the markdown files around the open file. It uses the nearest git repo or Obsidian vault if there is one, otherwise the file's folder. Toggle it with Ctrl+\.
  • Tables render as a grid until you click into one; then the whole table shows its source for editing.
  • Code blocks with a language (```rust, ```py, …) are syntax-highlighted, using the grammars from bat.
  • Images on their own line (![alt](path-or-url)) show the picture. Relative paths resolve from the document's folder, and remote URLs are fetched.
  • Frosted glass: on macOS and KDE Plasma (Wayland) the window blurs the desktop behind a translucent sidebar. Elsewhere, or with "frosted": false in ~/.config/inkwell/settings.json, the chrome is opaque.
  • Ctrl+click (⌘-click on macOS) a link to open it. Links to other .md files open in place.
  • Click a checkbox to toggle it.

On macOS, use ⌘ in place of Ctrl.

Keys Action
Ctrl+B / Ctrl+I / Ctrl+E bold / italic / inline code
Ctrl+Shift+X strikethrough
Ctrl+K insert link (pasting a URL over a selection also makes a link)
Enter continues lists, tasks and quotes; on an empty item it ends the list
Tab / Shift+Tab indent / outdent list items
Ctrl+S / Ctrl+Shift+S save / save as
Ctrl+O / Ctrl+N open file / new window
Ctrl+W / Ctrl+Q close window / quit

Not yet supported

Find and replace, inline images in the middle of a paragraph, math and Mermaid diagrams, spell check, and wiki links.

Layout

  • src/editor.rs is the editor element: buffer, undo, cursor and selection, IME, and live-preview line layout.
  • src/markdown.rs holds the per-edit pulldown-cmark pass that yields inline styles, hideable syntax, and block kinds per line.
  • src/workspace.rs is the window: title bar and caption buttons, sidebar, file loading, autosave, and file watching.
  • src/highlight.rs highlights fenced code with syntect, folding scopes into a few token classes that the theme colours.
  • src/theme.rs has colours and bundled fonts.
  • src/blur.rs does compositor blur through ext-background-effect-v1, attached to GPUI's Wayland surface. On macOS, AppKit does the blur (src/blur_macos.rs).
  • packaging/macos/ has the app bundle's Info.plist and icon, which scripts/bundle-macos.sh assembles.

Credits

Syntax grammars come from bat via two-face, under their own licenses. The Geist fonts are under the SIL OFL (assets/fonts/licenses). The icons are from Solar Icons by 480 Design, CC BY 4.0, via Zeron (MIT).