Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
mnml
NvChad meets VSCode — a terminal IDE in Rust.
Vim or standard editing, first-class on both sides — without if vim {}
scattered through the codebase. NvChad-style tree / tabline / statusline
chrome; VSCode-style palette, mouse fluency, and modeless keymap. LSP, rich
git, fuzzy everything, embedded terminal & AI panes, a baked-in HTTP client,
and a headless test harness — one binary.

mnml is a terminal IDE that aims to be a real editor and a baked-in HTTP request client and a scriptable, testable surface — built so the pieces compose instead of fighting each other.
It takes NvChad's look — file-tree rail, tabline of open buffers, powerline statusline, Nerd-Font devicons, tree-sitter highlighting — and marries it to VSCode's discoverability — command palette, activity bar, right-click menus, mouse-first chrome, a modeless keymap that doesn't hide anything behind a modifier. Under both surfaces sits one design decision: a pluggable input layer. Vim modal editing and the modeless standard keymap are both first-class, both fully remappable, and swappable at runtime. The editor, buffer, and render layers never branch on which one is active.
Highlights
- Two editing modes, one codebase. A modal vim keymap (Normal / Insert /
Visual / Visual-Block / Replace + a
:ex-command line) and a modeless standard keymap. Swap live with:set input=vimor the command palette. Input handlers translate keys into a closed set of edit operations — the rest of the app is mode-agnostic. - Splits, panes, tab pages. A recursive split tree; editors, terminals,
diffs, and tool panes are all
Panes. VimCtrl-Wwindow chords and mouse drag-to-resize both work. An optional right side panel (Ctrl+Shift+Bor:set rightpanel) gives a collapsible, drag-resizable column on the right edge. - LSP, batteries included. Completion with docs, hover, go-to-definition, references, rename with preview, code actions, inlay hints, semantic tokens, document/type/call hierarchy, signature help, and a Problems pane — driven by a config-driven server table.
- Rich git + a coloured-lane commit graph. Gutter line-signs, a diff pane with per-hunk staging, blame, a staging view, a coloured-lane commit DAG, a branch/worktree/PR rail, and AI-written commit messages.
- Fuzzy everything. File finder, command palette, buffer switcher, symbol picker, and a which-key leader popup — all over one fuzzy-match core.
- Embedded terminal & AI panes. Run a shell, the
claudeCLI, or Codex as panes; on-selection AI actions (explain / fix / refactor / write tests) and Copilot-style inline suggestions, with a CLI or direct-API backend. - A baked-in HTTP client. Send
.http/.curl/.restfiles, run request chains, generate stubs from an OpenAPI spec — an editable, form-style request pane lives right in the IDE. - Headless & scriptable.
mnml --headlessrenders to a virtual screen driven over a file-IPC channel; a line-based.testformat runs end-to-end UI tests against the sameAppthe terminal uses. - 94 themes (the NvChad base46 set) and tree-sitter highlighting for 39+
languages, with language injection (highlighted fenced code blocks, embedded
<script>/<style>, and more).
See FEATURES.md for the complete, organised inventory.
Install
cargo install compiles from source and needs Zig 0.16.0
giton PATH somnml-libghostty-vt-syscan build Ghostty's VT lib (brew install zig/scoop install zig/snap install zig --classic --edge). The build script emits a helpful message if either tool is missing.
Prefer prebuilt binaries — no toolchain needed:
- Homebrew (macOS / Linux):
brew install chris-mclennan/tap/mnml - Scoop (Windows):
scoop install mnml - Direct download: releases page
A Nerd Font is recommended for devicons and
powerline glyphs. Without one, pass --ascii (or set [ui] ascii_icons = true)
for a plain-text fallback.
Quick start
Once it's open:
| 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) |
ex-command line |
Every key is remappable — see Configuration.
Editing: vim or standard
mnml ships two input handlers and lets you pick per-session or per-workspace:
# ~/.config/mnml/config.toml
[]
= "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, registers and macros, marks, :-commands
(:%s///, ranges, :g/, :norm, …), surround, and more. The standard
handler is a modeless VS Code-style keymap. Both resolve through the same
config-driven keymap, so [keys.global], [keys.vim], and [keys.standard]
rebind either of them.
Configuration
mnml reads TOML, merged lowest-to-highest precedence:
built-in defaults
→ ~/.config/mnml/config.toml
→ <workspace>/.mnml/config.toml
→ --config PATH
[]
= "standard" # "vim" | "standard"
= 4
[]
= "onedark" # any of 94 themes — gruvbox, catppuccin, kanagawa, nord, …
= false
= false
[]
= "buffer.save"
= "picker.files"
= "dap.run"
# "key" = "none" unbinds
[]
= "rust-analyzer"
= ["rs"]
# Bufferline right-cluster icons. Setting this key replaces the built-in
# Claude Code + Codex defaults. `command` is a registered command id or
# a colon-prefixed ex-cmdline string (e.g. ":term my-binary").
[[]]
= "claude_code"
= "\u{F0E2D}"
= "CC"
= "ai.claude_code"
= "orange"
= "Claude Code (right dock)"
[lsp.*], [ai], [dap.*], [linters.*], [formatters.*], [tasks.*], and
the SCM dashboard tables are all configurable too — see
FEATURES.md for the full surface.
Themed shell prompt (optional)
mnml ships a small powerline-style prompt (themes/mnml-prompt.sh)
that auto-themes against the active mnml palette. When mnml spawns
a shell it installs the script to ~/.config/mnml/prompt.sh
and exports $MNML_PROMPT_SCRIPT plus the palette colors. To enable
it, add one line to your ~/.zshrc (or .bashrc):
[ &&
Outside mnml shells the env var is unset and the line is a
no-op, so normal terminals are unaffected. The prompt shows cwd · git branch (± when dirty) · exit code (only non-zero) · clock · context-chip. Switching mnml themes auto-rethemes the next shell
spawned. No external binary required — pure bash/zsh + ANSI.
Building from source
Development convenience wrappers:
|||
Optional Cargo features:
| Feature | What it adds |
|---|---|
aws-codebuild |
Pane::CodeBuilds + Pane::LogTail — AWS CodeBuild builds browser and CloudWatch log tail, both shelling out to the aws CLI. Off by default. |
mnml builds on stable Rust (MSRV 1.87, edition 2024).
Family
mnml is one of a small family of terminal-native Rust tools:
| Project | What it is | |
|---|---|---|
| mnml | A terminal IDE | ← you are here |
| mixr | A terminal DJ app | electronic-music mixing |
| fim-engine | Embedded code completion | powers mnml's inline suggestions |
mnml runs in any terminal — Apple Terminal, iTerm2, Ghostty, kitty, WezTerm, Alacritty, and others.
Contributing
Contributions are welcome — see CONTRIBUTING.md for the
workflow, conventions, and architecture notes, and CLAUDE.md for
the load-bearing design spine; the release history lives in
CHANGELOG.md.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.