Open-source project
rhysd/kiro-editor avatar
rhysd/kiro-editor

Kiro is a kilobyte-scale terminal editor that a Rust port made more useful

A small terminal UTF-8 text editor written in Rust 📝🦀

765 stars33 forksRustMIT

At a glance

What is it?
Kiro is a small UTF-8 terminal text editor written in Rust, started as a port of kilo and extended with multi-byte editing, undo and redo, true colour and multiple buffers, with a last tagged release in March 2021 and pushes continuing afterwards.
Who is it for?
Adopt Kiro if you want a terminal editor with no dependency on a mouse, no modal vocabulary to learn beyond a single cheat sheet, and a codebase small enough to read in an afternoon. Do not adopt it if you need syntax highlighting for a language outside the ones it covers, or if you need emoji made of zero width joiners, which the documentation lists as unsupported.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A kilo port that outgrew the tutorial it came from

Kiro is a tiny UTF-8 text editor for the terminal, written in Rust, and its origin explains both its shape and its ambitions. The project was started as a Rust port of the minimal text editor kilo, and the documentation says it has grown with various extensions and improvements since. The base feature set is the tutorial set: open and save text files, create new files or an empty buffer in memory, edit text including putting and deleting characters and lines, simple syntax highlighting and simple incremental text search. The author also says the project was written while following the Build Your Own Text Editor guide, and points readers at the implementation section for the interesting parts. The comparison with kilo is not decorative, because the README lists the differences one by one, and the differences are the actual feature list: UTF-8 editing where kilo only handles ASCII, undo and redo, Alt modifier shortcuts, 24-bit and 256 colour support with a gruvbox palette, more efficient screen rendering since kilo redraws the whole screen every time, multiple open files with buffer switching on Ctrl-X and Alt-X, terminal resizing, more highlighted languages and items, an auto-closing message bar, a modular implementation instead of one kilo.c full of globals, and an incremental search that highlights every match rather than only the current one and only once per line.

One cheat sheet covers the whole key map

Kiro is a mode-less editor, and the documentation compares that model to Nano, Emacs, Gedit and Notepad. There is no insert and normal mode to trip over, which makes it a reasonable first editor for someone who has only ever used a word processor. What it has instead is a large set of Ctrl and Alt bindings, and the solution to that is built into the binary. Pressing Ctrl-? shows all the key mappings on the editor screen, so the manual is always one keystroke away. The operations table is short. Ctrl-Q quits, and has to be pressed twice if the text is not saved, Ctrl-S saves and prompts for a filename on an unnamed buffer, Ctrl-G opens incremental search, Ctrl-O opens a file or an empty buffer, Ctrl-X and Alt-X move between buffers, and Ctrl-L refreshes the screen. Editing is covered by Ctrl-H or backspace to delete a character, Ctrl-W to delete a word, Ctrl-J to delete to the head of the line, Ctrl-K to delete to the end of the line, Ctrl-M to insert a newline, and Ctrl-U and Ctrl-R for undo and redo.

UTF-8 is handled, with one documented exception

The multi-byte support is the feature that most separates Kiro from the tutorial it grew out of, and it reaches into the rendering layer. Kiro is a UTF-8 editor, so it can open, create, insert, delete and search UTF-8 text, including double width characters, and the repository includes a demonstration of exactly that. The dependency list explains why: unicode-width is a direct dependency, because a terminal has to be told how many cells a character occupies, and a multi-byte character that is not a full width character still needs to advance the cursor by the right amount. There is one documented gap. Emojis that use U+200D, the zero width joiner, are not supported yet, which affects composed family and profession emoji. That is a narrow limitation rather than a general one, but it is the kind of detail that shows the difference between claiming UTF-8 support and implementing it.

Colours degrade, and the terminal is resized rather than assumed

The rendering approach is worth describing because it is where a terminal editor usually gives up. Kiro outputs 24-bit colours using the gruvbox colour scheme, falling back to 256 colours and eventually to 16, so it uses as much colour as the terminal in front of it allows rather than assuming true colour. The documentation also states that screen size is responsible, and that resizing the terminal window is supported, so the editor follows the window rather than assuming a fixed geometry. Both of these are consequences of the modular layout the project claims over kilo's single file. The package depends on termios for terminal control, term_size for the window geometry, term for terminal handling, getopts for the command line, signal-hook for signal handling and jemallocator as the allocator, which is a small and understandable set rather than a framework. The README notes that the implementation is modular, with separate pieces for parsing key input, rendering the screen, calculating the highlight and modifying the text buffer, and that this is what lets the incremental search be fixed and improved without touching the rest.

Two commands to install and to run

Installation is a cargo install of the published crate, and the documentation asks for a Rust stable toolchain as new as possible:

bash
$ cargo install kiro-editor

The package is kiro-editor, and installing it puts a kiro command in your path. For NetBSD there is a package in pkgsrc, at the pkgsrc editors path, so a system package exists for that platform even if the primary route is cargo. Running it is straightforward:

sh
$ kiro                 # Start with an empty text buffer
$ kiro file1 file2...  # Open files to edit

The command line reference is in kiro --help. The Cargo manifest is a good place to see how little this program depends on. The dependencies are termios, term_size, unicode-width, term, getopts, signal-hook and jemallocator, the binary is a single target named kiro built from src/main.rs, and the release profile turns on link time optimisation and keeps debug information. The dev dependencies are minimal too, rand for tests, and cargo-husky configured to run the test suite and clippy on push. The repository also carries benches and fuzz directories, which is a signal about how the project treats correctness for a tool that manipulates buffers.

A release line from 2021 and pushes that continued afterwards

Here is the tension in the project's status. The tagged releases are v0.4.1 on 2021-01-19, v0.4.2 on 2021-01-30 and v0.4.3 on 2021-03-01, and the package version in the manifest is 0.4.3. The last push to the repository was on 2026-04-22, and the tree includes a CHANGELOG.md. At the same time the manifest still carries a crates.io badge with maintenance set to actively-developed, a value that was written when the releases were current. So the repository is not archived and work has continued, but there has been no new published version since March 2021, and a user who installs from crates.io gets the 0.4.3 code rather than whatever the current branch contains. That distinction matters when you evaluate the editor, because the improvements listed in the README may exist in the repository without having shipped to the package registry. The licence is MIT, the code is written by rhysd, and the package is published under the kiro-editor name with the binary called kiro, so a fork or a vendored build is straightforward and unobstructed.

Editorial conclusion

Adopt Kiro if you want a terminal editor with no dependency on a mouse, no modal vocabulary to learn beyond a single cheat sheet, and a codebase small enough to read in an afternoon. Do not adopt it if you need syntax highlighting for a language outside the ones it covers, or if you need emoji made of zero width joiners, which the documentation lists as unsupported. Before you install, check that your terminal is one of the xterm family the project targets, and note the version picture, since the last tagged release is 0.4.3 from 2021 while the last push was on 2026-04-22, so the manifest badge and the release history tell different stories.

Frequently asked questions

How do I install Kiro the terminal editor?

Build and install the published crate with cargo install kiro-editor, using a Rust stable toolchain as new as possible. The installation puts a kiro command in your path, and for NetBSD a package is available through pkgsrc at the editors path.

Which terminals does Kiro support?

Kiro aims to support xterm terminals on Unix-like systems, and the documentation names Terminal.app, iTerm2.app and Gnome-Terminal, with Windows Terminal on WSL described hopefully. Terminal resizing is supported and the screen size is used to lay out the editor.

How do I undo and redo in Kiro?

Ctrl-U undoes the last change and Ctrl-R redoes the last undo. The README lists undo and redo as one of the extensions over kilo, which does not have them.

Does Kiro handle emoji and other multi-byte characters?

Kiro is a UTF-8 editor and supports double width characters, with unicode-width as a direct dependency for correct cell accounting. The documentation notes one exception: emojis using the U+200D zero width joiner, such as composed family emoji, are not supported yet.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. rhysd/kiro-editor on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/rhysd-kiro-editor.svg)](https://hysenlabs.com/projects/rhysd-kiro-editor)

Was this useful?