from Hacker News

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

by klaussilveira on 5/19/25, 8:28 PM with 82 comments

  • by akkartik on 5/20/25, 2:03 AM

    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

  • by lor_louis on 5/20/25, 2:45 AM

    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...

  • by thomasdziedzic on 5/20/25, 12:24 AM

    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.

  • by 90s_dev on 5/20/25, 12:32 AM

    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.
  • by giancarlostoro on 5/20/25, 2:52 PM

    I made a similar editor using Lazarus... since it has syntax highlighting components... I guess that's cheating. The more I think about it though, I wonder if Freepascal could produce a nice GUI for Neovim.

    I did try to build one in Qt in C++ years ago, stopped at trying to figure out how to add Syntax Highlighting since I'm not really that much into C++. Pivoted it to work like Notepad so I was still happy with how it wound up.

    https://github.com/Giancarlos/qNotePad

  • by nulld3v on 5/20/25, 12:43 AM

    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.

  • by anonzzzies on 5/20/25, 2:13 PM

    Ah darn. Closing in on retirement (will never happen, coding is too much fun for profit or charity) age, I resistent building an editor but I want to. Need to. I hacked so much vim, emacs, eclipse, vs code and its all crap (the newer, the worse: all these useless gimmicks you won't use past grade school aaarrr while lacking power user features). Can I do better? This seems a good start.
  • by lbj on 5/20/25, 12:10 PM

    Funny. These days when I see a headline like that, I assume it's some type of web component.

    Why are all the commenters so eager to get out of terminals?

  • by JdeBP on 5/20/25, 2:12 PM

    One interesting thing is that even some of those 1000 lines could have been eliminated.

    It duplicates the C library's cfmakeraw() function, for instance.

    https://man.freebsd.org/cgi/man.cgi?query=cfmakeraw&sektion=...

  • by nodesocket on 5/20/25, 1:08 PM

    This seems like a great alternative for Nano; though Nano is really good and just works.
  • by jonstewart on 5/20/25, 3:22 AM

    ed is the standard text editor.
  • by revskill on 5/20/25, 11:53 AM

    So a text editor is about grid manipulation ?
  • by fuzztester on 5/20/25, 2:02 AM

    on first look, the name sounds heavy, but the product actually turns out to be very light.

    go figure.

    ;)

  • by cies on 5/20/25, 3:17 PM

    Last serious work on this was in 2020. Lacks news worthiness imho.