tmnl

A GPU-rendered macOS terminal. Hosts your $SHELL like any terminal — and also hosts apps that draw directly into its cell grid via the tmnl-protocol wire format.
Three small Rust tools by Chris McLennan. Each runs standalone. Together they form a host (tmnl) and two reference native-mode clients (mnml, mixr).
tmnl

A GPU-rendered macOS terminal. Hosts your $SHELL like any terminal — and also hosts apps that draw directly into its cell grid via the tmnl-protocol wire format.
mnml
mixr
These tools were each built standalone, but they kept growing toward each other. Three shared threads now run through all three:
Shared aesthetic. Same > name prompt-style wordmark on the app icons (orange caret, monospace name on a charcoal gradient bezel). Same charcoal + warm-orange palette in the UIs. The icons are obviously siblings on the dock.
Shared settings UI convention. All three apps’ Settings modals follow the same idiom — a sectioned scrollable list, ▸ focus marker, [bracket] for the current choice, * for “modified from default”, ←→ to adjust a row, r to reset the focused row, R to reset all, Enter to save, Esc to cancel back to the opened-state snapshot. No shared crate — each app implements its own ~150-200 lines — but the muscle memory transfers.
Shared protocol. The tmnl-protocol crate is the wire format for native-mode tabs. tmnl is the server (owns the window + GPU), and any app that wants to run as a native tab is a client. mnml and mixr both ship a --blit <socket> flag that connects them as tmnl native tabs — the cell grid streams over a Unix socket, no ANSI in between. See Native tabs for the protocol walkthrough.
tmnl-protocol.♪ chip on mnml’s statusline reads mixr’s ~/.mixr/quick.txt so the now-playing track surfaces in your editor without flipping windows.Each app works fine without the others. mnml runs in any terminal. mixr runs in any terminal. tmnl works as a regular terminal emulator hosting your shell. The integration is purely additive — and entirely opt-in via the --blit flag — so you can adopt one tool without committing to the rest.