IOTA V0.1.0 NATIVE MACOS · APPKIT ONE RUST BINARY NOT AN EDITOR

// agents write the code. you verify it.

When all you
want is to look.

Iota is a native macOS read-only code viewer for the agent era. First paint is the file you opened. The rest of the repo catches up in the background. One binary, zero config, no Electron. It is not an editor. That is the point.

$ curl -fsSL https://raw.githubusercontent.com/maheshkasabe/iota/main/install.sh | bash

First paint

the file

repo walk starts only when you search

Runtime

1 process

no Electron, no Node, no extension host

Config

0

point it at a path and read

Grammars

9

Rust, TS/JS, Python, Go, HTML, CSS, shell, Markdown

LSP

lazy

off until hover or jump

Writes

none

no save, no rename, no format-on-save

~/src/iota · editor.rs

⌘P
editor.rs session.rs +
12 pub struct TextBuffer {
13     text: String,
14     lines: Vec<usize>,
15     path: Option<PathBuf>,
16 }
17
18 impl TextBuffer {
19     pub fn line(&self, row: usize) -> &str {
20         let start = self.lines[row];
21         // only the visible window is painted
22         &self.text[start..]
23     }
24 }
editor.rs Ln 19 · Col 11 rust-analyzer off

01 / why

Agents write. You verify.

Code now arrives from a terminal, not a keyboard. What is left is review, jump-to-definition, and a diff against HEAD. That job does not need a gigabyte IDE. It needs a window that opens the file and stays out of the way.

  1. 01

    the terminal
    drives generation

    Agents, harnesses, and scripts write the patch, run the tests, and move the branch. You should not have to boot an editor to see what they did.

  2. 02

    you
    drive verification

    Open the worktree, follow a symbol, split a pane, diff vs git HEAD, close the window. F12, Shift+F12, Cmd+D. Then you are done.

  3. 03

    the old ide
    is overkill

    An extension host, a file watcher, and a plugin marketplace just to read a file. Iota is one AppKit process. It does not save, because saving is someone else’s job.

read-only is the feature

  • + fuzzy files, document symbols, workspace symbols
  • + in-file find and workspace substring search
  • + git diff vs HEAD, splits, tabs, a file sidebar
  • + hover, definition, and references when an LSP exists
  • + a real PTY terminal, hidden until Cmd+J
  • no typing, no save, no rename, no format-on-save
  • no Electron, no config file, no marketplace
  • language servers stay off until you ask

where it fits

  • verifying agent output open the worktree, trace the references, quit
  • reading a crate paint the file you opened; don’t index the universe first
  • beside an editor keep vim or Cursor for the edits you still type
traditional IDE vs Iota
dimension traditional IDE Iota
built for typing, plugins, a workspace that never sleeps reading, jumping, diffing, verifying
process tree Electron + extension host + watchers one native binary
first paint wait for the indexer the file you passed on the command line
language servers always on off until hover or jump
setup settings.json, extensions, runtimes zero config
writes the whole point none

02 / features

Everything for reading. Nothing else.

The chords you already have in your hands, in a window that only paints the lines you can see.

f.01 · navigate

Fuzzy everything

Cmd+P for files, Cmd+Shift+O for symbols in this buffer, Cmd+T for the workspace. Ranking is nucleo, the same feel as a tight fzf. The walk starts the first time you open a palette — not at launch.

⌘P files ⌘⇧O symbols

f.02 · git

Diff against HEAD

Cmd+D splits the current file against git HEAD. Additions and deletions keep their line numbers. Esc leaves the diff. No extra git UI, no staging, no commit box.

⌘D diff vs HEAD

f.03 · tree

A lazy sidebar

Cmd+B. Folders are listed only when you expand them. Hidden files, gitignored build dirs, and binaries stay out. Click a file to open it. No outline view, no watching the whole disk.

⌘B sidebar

f.04 · layout

Splits and tabs

Cmd+\ adds a pane. Cmd+1–9 focuses one. Each pane keeps its own tabs and scroll. Closing a tab in one pane does not close it in another.

⌘\ split ⌘1–9 focus

f.05 · lsp

Semantic when you want it

rust-analyzer, gopls, pyright/pylsp, typescript-language-server or vtsls — if they are on your PATH. Spawned on first K / F12 / Shift+F12. Missing? Jump falls back to a word search in the buffer.

F12 def K hover

f.06 · term

A real PTY

Cmd+J opens $SHELL at the workspace root. Hide it and the session stays. This is for running the agent, not for turning Iota into an IDE.

⌘J terminal

03 / keys

Hands stay on the keyboard.

The chords you already know. Esc leaves a palette or a diff. Click and scroll still work if you insist.

04 / install

Point it at a directory. That’s the setup.

One curl clones github.com/maheshkasabe/iota, installs Rust if needed, builds a release binary, and puts Iota.app in ~/Applications. Language servers are optional and picked up from $PATH when they exist.

a · one command

Install

$ curl -fsSL https://raw.githubusercontent.com/maheshkasabe/iota/main/install.sh | bash

Read the script first if you prefer: same URL, no pipe to bash.

b · from source

Clone it yourself

$ git clone https://github.com/maheshkasabe/iota.git

Then cargo run --release -- /path/to/repo

c · Dock

Bundle the app

$ ./scripts/bundle-app.sh

Writes target/release/Iota.app after a clone.

optional language servers
language server install
Rust rust-analyzer
Go gopls
TypeScript typescript-language-server
Python pyright or pylsp