hugopl/devblog

31 May 2026

Why did I try to write my own code editor?

I’ve been doing pet projects since I started programming computers more than 20 years ago 👴🏽️, besides learning a lot from these pet projects, they give me joy. I’m used to saying that ”Coding pet projects is my video game”.

But pet projects are only worth it if you use them, otherwise it’s an experiment, etc… something that will last for a few weeks and you move on to another thing of interest to have fun.

I used to write ruby code on QtCreator using a ruby language plugin, the problem is that I do not enjoy coding in Qt/C++ as I did some years ago, so maintaining this plugin up to date for every QtCreator API change was a pain. Long story short: Pet project archived and now I was in need for a code editor to write Ruby code.

In 2019 I fell in love with Crystal language ❤️ it had the good things I love from Ruby and the good things I missed from typed and compiled languages like C++. At the time there weren’t many choices to code in Crystal besides the slow VSCode and the generic non-free Sublime3.

Some experimental GObject binding generator existed, so it was possible to create GTK applications in Crystal, then I thought: why not create a code editor in GTK the way I want to!?

Futurama meme!

Tijolo was born 🧱️

I named it Tijolo, means brick in Portuguese, and started the project somewhere in 2019.

I wanted Tijolo to be very fast like terminal editors, easy to work with split views like my terminal at the time (Tilix) and keyboard focused.

With LSP and GtkSourceView I just needed to glue everything together with some Crystal code, easy like that.

However when I got around the version 0.7.0 I realized a list of problems with the project:

So I decided to rewrite Tijolo, the new Tijolo would:

So far this plan is on track, however far away from an end.

Long story short, I decided to learn vim for the third time, but this time with more seriousness. I started the migration to neovim in December 2025 where things are more calm at work and it worked, since then I’ve been a happy neovim <3 user.

Conclusion

A few things happened.

comments powered by Disqus