Koi for note taking
Notes are files ⋅ Navigate longer notes ⋅ Work across multiple notes ⋅ Edit text directly ⋅ Commands become part of the note

Koi works directly with Markdown, plain text, Org Mode, and other text formats without importing them into a proprietary database.
TL;DR
Applications change. Text files should remain useful for decades.
Koi provides tools for working with notes without making Koi the owner of them.
Your notes stay where you put them. Open them with another editor, sync them with any service, put them in Git, or process them with scripts.
Notes are files
The file-over-app idea is simple: your files should survive longer than your tools.
A note does not need to exist as an object inside an application's database. It can just be:
notes.mdideas.txtjournal.orgresearch/
Files and directories on disk provide the structure. That makes the application replaceable: the same notes can be opened in Koi, another text editor, a terminal, or software that does not exist yet.
Tools such as Obsidian have helped popularize this approach by keeping notes as local Markdown files.
Koi takes the idea further toward the text-editor side. Files are files, directories are directories, and there is no special vault or workspace format.
Start with a directory
Drop a folder onto Koi to start working with it. You can also make a directory the default file explorer root:
[editor]
file_explorer_root /Users/michael/Desktop/Notes
Koi will use that directory as the File Explorer root when it launches.
There is no library to import and no database to maintain.
Organize and search
Use folders and files however you like:
Notes/
├── Work/
├── Personal/
├── Projects/
├── Reading/
└── Journal/
Search works directly across those files using ripgrep. There is no separate search database to build or keep synchronized with the filesystem.
Because everything remains on disk, the same directory can be synchronized with iCloud, Dropbox, Syncthing, Git, or whatever else you already use.
Markdown stays Markdown
Koi has built-in Markdown support, including special styling for task checkboxes.
- [ ] Finish benchmark page
- [x] Publish b207
- [ ] Write release notes
The underlying document remains ordinary Markdown.
There is no hidden task object or application-specific representation behind the checkbox.
It is still - [ ] in a text file.
The same principle applies to headings, lists, code blocks, links, and the rest of the document.
Plain text can stay plain
Koi includes a Generic Default style, inspired by Emacs, for adding minimal visual structure to otherwise plain text.
# 2026-09-24
Fixed an issue with latency on very large files.
Typing should be faster now.
# 2026-09-22
Updated base theme colors in most recent build.
This works well for scratch files, logs, lists, temporary notes, research, and documents that are mostly just text. And because Koi does not require a note format, you can use something completely different.
You could write your notes in Lua:
meeting = {
date = "2026-08-04",
attendees = {
"Alice",
"Bob",
},
action_items = {
"Fix benchmark bug",
"Publish release",
"Email customers",
},
}
Should you?
Probably not.
But if you want, you can.
Navigate longer notes
Koi builds a navigable file outline directly from headings in Markdown and Org Mode documents. A Markdown file like this becomes a navigable outline:
# Research
...
## Background
...
## Experiments
...
### First test
...
### Second test
...
## Results
...
The outline is derived from the document itself. There is no additional structure to maintain.
Work across multiple notes
Koi can open multiple files at once and display the same or different documents across multiple views.
- Keep research on one side and your draft on the other.
- Open a task list beside project notes.
- Keep several related files visible while editing all of them normally.
There is no special distinction between a "note" and another document. A note is simply a file open in the editor.
Edit text directly
Multi-cursor editing
Multi-cursor editing is useful for notes too. Select repeated lines, headings, tags, tasks, or pieces of structured text and edit them together.
For example:
FIXME benchmark page
...
FIXME release notes
...
Multiple cursors can change every selected occurrence in one edit. The same editing tools used for source code remain useful for structured notes and repetitive text.
Script your notes
Scripts can modify the current document, work with selections, manipulate files, use normal Python libraries, and expose new functionality as editor commands. For note taking, small commands can handle things like:
- Insert a checkbox or task
- Insert a code block
- Create a dated journal entry
- Collect unfinished tasks
- Generate a table of contents
Scripts aren't limited to editing text. A command could convert the current Markdown document to HTML or PDF, rename a set of notes, build an index across a directory, or invoke another tool entirely.
The editor does not need to ship with every possible note-taking workflow built in.
Commands become part of the note
Koi's inline commands work particularly well in scratch files and working notes. Run a shell command directly in the document:
% cd editorcat.com; git log --oneline -5
1cbee9c Update worker.js
8f21c28 Update index.html
629bcb2 Update worker.js
e2723f8 Update styles.css
fca3f09 dist
The output becomes ordinary text. It can then become context for another inline command:
% cd editorcat.com; git log --oneline -5
1cbee9c Update worker.js
8f21c28 Update index.html
629bcb2 Update worker.js
e2723f8 Update styles.css
fca3f09 dist
> Summarize my latest commits
Your last 5 commits in editorcat.com mostly update the Cloudflare
Worker, along with changes to the main page, styles, and distribution build.
Shell output, Python results, notes, and optional AI responses can all live in the same document. Edit them, delete them, save them, or use them as context for whatever comes next.
There is no separate terminal output or chat history to manage. The document itself becomes the working context.
In-code shell and Python eval
Multi-cursor editing