I didn't want to install Postman on a new MacBook. So I started building something to send requests instead. Then I wanted a file tree next to it. Then a proper editor for the .http and .curl files. Somewhere in there the question flipped from "can I avoid this one install" to "if I can build this, why not build the tool that does everything I want, and just keep it open all the time?" That's what mnml is now. It's where I edit, where I run my Claude sessions, where I do git — and it manages mixr, my TUI DJ app, which is also its own standalone program. One window that's already open, instead of five apps I have to go find.
Demo
Terminal previewOverview
Terminal IDE with vim and standard editing modes, LSP, git, and embedded HTTP client
A NvChad-style terminal IDE in Rust — vim or standard editing, LSP, git, embedded HTTP/CDP/DAP, AI panes, headless test harness. One binary.
From the maintainer
Copy a request as cURL from Chrome's Network tab. In mnml, click the paper-plane icon in the activity bar, hit Ctrl+V straight away, and press Enter. That's it — the paste is recognised as a curl and populates method, URL, headers and body in place, and Enter sends it. No import dialog, no re-typing a request you already have. After that, two things worth a look: the git graph, and mixr — my TUI DJ app running as a managed pane inside the editor, which is the clearest example of what "keep it open all the time" ends up meaning.
The input layer is pluggable at the architecture level rather than bolted on. Every keypress goes through a Box<dyn InputHandler> that emits a small closed set of edit operations, all funnelled through one Editor::apply chokepoint — and the editor, buffer and render layers never branch on which handler is active. Only the statusline's mode chip and the cursor-shape code know the mode exists. The payoff is that vim mode and standard mode are the same editor, not one wearing the other as a compatibility skin. Adding a feature means registering a command or an edit-op variant, not threading a conditional through every layer — which is why the HTTP client, a file manager, a git UI and AI panes could all land as panes without the editor learning about any of them.
Database integration is in progress. After that, deeper GitHub support — issues, pull requests, Actions, and a dashboard over them — so the parts of a workday that currently pull me into a browser stop doing that. The larger one is a client/server split: letting panes outlive the process, so sessions survive a disconnect or a restart instead of being rebuilt by hand.
Latest Release
Release Notes
Added
- (markdown) typing on a rendered preview swaps to the editor
- (md) rendered-first stays the default, but becomes an option
- (files) a "Delete permanently" button on the confirm modal
- (files) Option on the delete confirm skips the trash
- (files) a trash view, and widen the panel gutter to 3 cells
- (files) a delete is undoable — it moves to the workspace trash
- (editor) the breadcrumb is clickable
Fixed
- (ui) FINDINGS gets a cursor; panel caches refresh on fs changes
- (ui) the TODOS/NOTES gutter never painted its accent bar
- (#1238) markdown preview tabs carry no marker glyph at all
- (#1238) .http had the preview bug in both directions
- (#1238) glancing at an image left a permanent tab, same as markdown
- (md) a markdown preview was always a permanent tab
- (files) migrate the old trash index; say "Delete permanently" in there
- (files) deleting inside the trash re-trashed it; hide the index
- (picker) "Open file" ignored a pasted path, silently
- (ui) hide the terminal caret while a dropdown is open
- (files) bound the trash by size, and verify the symlink case
- (files) two ways the undoable delete still destroyed data
- (test) Windows path separator broke the TODO-prompt assertion
- (git) the repo chip was a dead end once you closed your repo tabs
Other
- rename crates/fim-engine/ -> crates/mnml-fim-engine/
- (v0.2.20) the file-manager release
Install mnml-rs 0.2.21
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/chris-mclennan/mnml/releases/download/v0.2.21/mnml-rs-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/chris-mclennan/mnml/releases/download/v0.2.21/mnml-rs-installer.ps1 | iex"
Download mnml-rs 0.2.21
| File | Platform | Checksum |
|---|---|---|
| mnml-rs-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| mnml-rs-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| mnml-rs-x86_64-pc-windows-gnu.zip | x64 MinGW | checksum |
| mnml-rs-x86_64-pc-windows-gnu.msi | x64 MinGW | checksum |
| mnml-rs-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| mnml-rs-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Discussions