First run
Launch
Section titled “Launch”mnml # open the current directorymnml ~/code/project # open a specific workspacemnml --input vim # start in vim mode (default is standard)mnml --ascii # no Nerd Font? plain-text iconsmnml --headless # virtual screen + file-IPC channel (for scripts / .test)First few keys
Section titled “First few keys”| Key | Action |
|---|---|
Ctrl-P |
fuzzy file finder |
Ctrl-Shift-P / F1 |
command palette |
Ctrl-B |
toggle the file tree |
Ctrl-K / <space> |
which-key leader popup |
| `Ctrl-`` | scratch terminal |
: (vim mode) |
ex-command line |
:settings |
open the settings overlay |
F1 while hovering |
click-discovery — see what every UI element does |
Every key is remappable — see Configuration below.
Editing: vim or standard
Section titled “Editing: vim or standard”mnml ships two input handlers and lets you pick per-session or per-workspace:
[editor]input_style = "vim" # or "standard"Switch at runtime with :set input=vim / :set input=standard, or the editor.toggle_keymap command.
The vim handler covers modal editing in depth — operators and text objects (iw, ip, tree-sitter objects if/ic/ia), registers, macros, marks (buffer-local + global, persisted), the . repeat, jumplist + change-list, f/t, vim-surround, multi-cursor, flash-motion jumps, abbreviations, and a deep : ex-command surface (:%s///, ranges, :g/, :norm, :sort, :!cmd, user :commands).
The standard handler is a modeless VS Code-style keymap with multi-cursor (Ctrl-D add-next-occurrence, Ctrl-Alt-↑/↓ column cursors).
Both resolve through the same config-driven keymap, so [keys.global], [keys.vim], and [keys.standard] rebind either.
Pane types
Section titled “Pane types”Editors aren’t the only thing mnml can open in a pane. Splits + tabs let you mix-and-match these in one session:
- Editor — text buffer + LSP
- Terminal (pty) — a shell, the
claudeCLI, Codex, or any command - Diff — git diff with per-hunk staging
- Browser (CDP) — Chrome via DevTools Protocol with network/console/DOM inspectors
- DAP — Debug Adapter Protocol client (breakpoints, stepping, watches, REPL)
- HTTP request — editable form-style request pane
- SCM dashboard — Bitbucket / GitHub / GitLab / Azure DevOps PRs + pipelines
- AI —
claudeCLI, Codex CLI, or direct Anthropic Messages API with agentic tools - Test results — Playwright runner with trace viewer + flaky-test history
Open via the command palette (Ctrl-Shift-P) or the : ex-line.
Settings overlay
Section titled “Settings overlay”:settings opens a keyboard-driven overlay for everyday config toggles — section headers, ▸ row focus, * modified marker. Keys: ←→ adjust, ↑↓ move, r reset row, R reset all, Enter save, Esc cancel. v1 is discrete-choice rows only — number/text/color row kinds are v2.
Configuration
Section titled “Configuration”mnml reads TOML, merged lowest-to-highest precedence:
built-in defaults → ~/.config/mnml/config.toml → <workspace>/.mnml/config.toml → --config PATH[editor]input_style = "standard" # "vim" | "standard"tab_width = 4
[ui]theme = "onedark" # any of 94 themes — gruvbox, catppuccin, kanagawa, nord, …ascii_icons = falsewrap = false
[keys.global]"ctrl+s" = "buffer.save""ctrl+p" = "picker.files""f5" = "dap.run"
[lsp.rust]cmd = "rust-analyzer"extensions = ["rs"]
# Bufferline launcher icons (right cluster). Drop in :term entries for any# private Pty-pane binary you've built locally.[[ui.launcher_icon]]id = "myapp"glyph = "\u{F0668}"fallback = "MA"command = ":term myapp"color = "teal"tooltip = "My private Pty-pane app"Headless
Section titled “Headless”mnml --headlessRenders to a virtual screen driven over a file-IPC channel at <workspace>/.mnml/ipc/:
command(JSONL, host → mnml)screen.txt/status.json/events.jsonl(mnml → host)
Same App and draw path as the GUI. Used by the .test e2e format (mnml test and under cargo test) and any out-of-process tooling that wants to drive mnml programmatically.
Platform support
Section titled “Platform support”macOS, Linux, and Windows all run the same binary from the same release train. Windows moved to first-class in August 2026 — the full unit + e2e suite runs green on windows-latest on every push. For the deeper “what runs where” story (target choices, Git Bash on Windows, source-build prerequisites), see Platform support.
- See FEATURES.md for the complete feature inventory.
- File an issue or feature request: https://github.com/chris-mclennan/mnml/issues