Kilo: A text editor in less than 1000 LOC with syntax highlight and search

77 klaussilveira 9 5/19/2025, 8:28:29 PM github.com ↗

Comments (9)

lor_louis · 30m ago
Kilo is a fun weekend project, but I learned the hard way that it's not a good base uppon which you should build your own text editor.

The core data structure (array of lines) just isn't that well suited to more complex operations.

Anyway here's what I built: https://github.com/lorlouis/cedit

If I were to do it again I'd use a piece table[1]. The VS code folks wrote a fantastic blog post about it some time ago[2].

[1] https://en.m.wikipedia.org/wiki/Piece_table [2] https://code.visualstudio.com/blogs/2018/03/23/text-buffer-r...

thomasdziedzic · 2h ago
How timely, I just finished going through a tutorial that builds a text editor like kilo from scratch: https://viewsourcecode.org/snaptoken/kilo/index.html

Would highly recommend the tutorial as it is really well done.

ok_dad · 1h ago
Here’s a second recommendation for that tutorial. It’s the first coding tutorial I’ve finished because it’s really good and I enjoyed building the foundational software program that my craft relies on. I don’t use that editor but it was fun to create it.
akkartik · 1h ago
Funny story: using kilo was the final straw [1] in getting me to give up on terminals. These days I try to do all my programming atop a simple canvas I can draw pixels on.

Here's the text editor I use all the time these days (and base lots of forks off of): https://git.sr.ht/~akkartik/text2.love. 1200 LoC, proportional font, word-wrap, scrolling, clipboard, unlimited undo. Can edit Moby Dick.

[1] https://git.sr.ht/~akkartik/teliva

nulld3v · 2h ago
It also inspired this similar Rust project: https://github.com/ilai-deutel/kibi#comparison-with-kilo

Although it does cheat a bit in an effort to better handle Unicode:

> unicode-width is used to determine the displayed width of Unicode characters. Unfortunately, there is no way around it: the unicode character width table is 230 lines long.

lifthrasiir · 28m ago
Personally, this is the reason I don't really buy the extreme size reduction; such projects generally have to sacrifice some essential features that demand a certain but necessary amount of code.
90s_dev · 2h ago
> It also inspired this similar Rust project

And these projects:

https://github.com/antirez/kilo/forks

90s_dev · 2h ago
Reading through this code is a veritable rite of passage. You learn how C works, how text editors work, how VT codes work, how syntax highlighting works, how find works, and how little code it really takes to make anything when you strip away almost all conveniences, edge cases, and error handling.
fuzztester · 1h ago
on first look, the name sounds heavy, but the product actually turns out to be very light.

go figure.

;)