maki
What it is
Section titled “What it is”maki is a personal terminal editor whose author states the goal plainly: it “aims to primarily be my personal solution to the excessive battery consumption of normal IDEs, and a way to learn how stuff like vim works on the inside.” It’s small, modal, and unfinished-by-design (“expect bugs”). Structure: a file-tree sidebar you navigate in NAV mode, a tab strip for open files, minimal chrome, and a :-command line.
The defining interaction is a two-mode model, vim-derived but pared down:
- NAV mode — arrow keys walk the file tree;
Enter/Spaceexpands a directory or opens a file in a new tab;:begins a command;$begins a shell command. You navigate and operate, you don’t type into the buffer. - INS mode — actual text editing;
Home/End/PageUp/PageDownnavigation,Backspace/Enter/Tab(Tab inserts 4 spaces — maki has no tab characters). Inserttoggles between them. INS cannot be entered with no tabs open — the mode is gated on there being something to edit.
Commands work by keybind or by typing them after : — e.g. :w / ^S to save, :q / ^W to close a tab, :tl / <m-Q> to switch tab left, :t 3 / <m-3> to jump to the nth tab, :wqa to save-all-and-quit. The source is a handful of small C# files (Page.cs, Nav.cs, Prompt.cs, CommandRegistry.cs, Program.cs) — no framework, the editor is the console loop.
Deckline relevance
Section titled “Deckline relevance”maki contributes two distinct things: a lean modal-UI pattern and an explicit power-consciousness design thesis that aligns with KN-86 being battery-powered handheld hardware.
- NAV/INS mode toggle → a register for KN-86’s surfaces. maki’s split between a navigation/command mode and an insert/edit mode is the same split KN-86 already lives with: the mission-board / SYS surfaces are navigate-and-operate (Lisp primitives, no free text entry), while the REPL (
software/runtime/repl.md) and nEmacs structural editor (ADR-0008) are insert-and-edit. maki is a tiny, legible reference for making that mode boundary explicit and visible — a one-word mode indicator (NAV/INS) the operator can always read, gated transitions (no INS without a buffer), and a:-command escape hatch shared across modes. On the Ferris Sweep, where a single context-sensitive TERM key already changes meaning by surface (per Canonical Hardware Specification), an explicit mode label is the right way to tell the operator which interpretation is live. :-command line as a universal escape hatch. Both maki’s modes can reach the command line; KN-86’s TERM-key → REPL is the analog. maki’s$for “shell command” vs:for “editor command” is a clean two-character convention worth noting for any KN-86 surface that wants to distinguish “evaluate Lisp” from “run a runtime command.”- No-framework console loop. maki proves a usable modal editor (file tree + tabs + commands) can be built directly on the raw console with zero TUI dependency — the same minimal-stack posture as nino.md (C) and microsoft-edit.md (own framebuffer). Reinforces that KN-86’s hand-rolled nOSh render path is in good company.
Single-color adaptation
Section titled “Single-color adaptation”maki is essentially monochrome-ready already — it’s plain console text with no color dependency in its core idioms:
- The
NAV/INSmode label is a text token in a fixed screen position. It ports to amber-on-black untouched and is the canonical single-color way to communicate mode: a word, in a known place, not a color shift. KN-86 should adopt exactly this — mode communicated by a labelled indicator in the firmware status row, not by tinting the cursor or border. - File-tree selection and the active tab port via inversion (black-on-amber for the selected node / focused tab) and marker glyphs (
▸for expandable dirs,[•]for the active tab) — no color needed. - Tree depth reads through indentation + box-drawing connectors (
├─ └─ │), the standard monochrome tree idiom.
Battery-conscious design philosophy
Section titled “Battery-conscious design philosophy”This is maki’s most KN-86-specific contribution, and it’s the reason to cite it at all: maki exists because IDEs burn battery, and a terminal editor that idles cheaply does not. KN-86 is a battery-powered handheld with a measured runtime envelope (per Canonical Hardware Specification) and active power-idle work — CPU governor, screen blank, the draw band that bring-up will validate.
- maki’s posture — minimal redraws, event-driven console loop, no animation churn, no background work — is the editor-side expression of the same discipline KN-86’s nOSh runtime already practices: the render loop idles when there’s no input and only redraws on event or at a capped animation rate. maki is an external data point that this isn’t merely a nicety; for portable hardware it’s the reason the thing is usable on battery at all.
- The read-across for KN-86: any cart or surface that animates continuously (a spinning CIPHER ticker, a clip loop) is a battery cost, and the event-driven-idle default should be the rule, with continuous animation the deliberate exception. maki is the citation for “an editor’s job is to sit still and draw nothing until the operator acts.”
- The single-self-contained, trimmed binary (
PublishTrimmedstrips unused .NET) is the deployment-side analog of KN-86’s small static nOSh runtime — relevant to the system-image footprint, not just runtime power.
LISP / extension angle
Section titled “LISP / extension angle”maki has no scripting layer, but its CommandRegistry.cs + dual keybind/:-typed dispatch is a small, clean model for the thing KN-86’s REPL and nEmacs surfaces do need: a single registry where every command is reachable both by a bound key and by typing its name. KN-86’s KEC Lisp surfaces should let a command (save, eval, clear, a cart-registered verb) be invoked either as a keystroke or as a typed/(symbol) form against the same registry — maki demonstrates the one-registry-two-entry-points shape at minimum scale. Contrast with micro.md, where config.MakeCommand + config.TryBindKey does the same thing at plugin scale.
- Batch 8. Lead reference for the NAV/INS modal toggle and the battery-conscious thesis.
- The battery angle is the one to surface in the power-idle / device-config conversation — maki is a concrete “editor designed around idle power” example to point at, even though KN-86 already does the event-driven-idle thing.
- Cross-link nino.md and microsoft-edit.md — the minimal-stack, no-TUI-framework end of the batch (C, Rust-own-framebuffer, and maki’s raw-console respectively).
- Cross-link micro.md for the keybind-and-typed-command dual dispatch at a larger, plugin-driven scale.
- Cross-link
software/runtime/repl.md— the KN-86 surface where an explicit NAV/INS-style mode label and a:-style command escape are most applicable.

TODO (human): The repo ships an asciinema demo (
demo.cast/ asciinema idhlllT22nBTfSRhiZ8SqNu9wQj). Grab a frame showing the file tree, a couple of tabs, and the mode indicator. Drop atinspiration/screenshots/maki.png. The mode label is the element this entry is about.