Building a graphical multi-user spreadsheet editor in Zig, introduction



Note: this article is part of the "Building a graphical multi-user spreadsheet editor in Zig" series. Read all the articles here:

series homepage


It's been a while since my last project (edit, a text editor in C). I've had many other project ideas since then, but I haven't taken the time to bring them to life. Now I have some free time over the next two months, and I'm willing to use some of it for a nice software project: grid, a spreadsheet editor!



Why I'm writing about it


This blog entry is (hopefully!) the first of a series documenting my progress. There are two reasons to do that.


First, I expect to explore many new topics during the project, wether it is Zig features, computer science concepts, data structures, or algorithms. Writing about my findings will allow me to clarify my understanding, and you might find them interesting as well.


Second, it might drive my motivation to carry on the project, as I will want to wrap this series up nicely.



Why a spreadsheet editor


Unlike my text editor, I very seldom use spreadsheet editors. I think it's a key point in the project: I'm not designing and building grid for my personal use, frustrated with existing tools, but for the learning experience. Thus, what do I expect to learn?






raylib



Quite an ambitious roadmap!



Why Zig


I've never used Zig. However, I figured it might be a good fit for this project.


Zig


First, Zig is advertised as a simple language, something I like and need for performance. Its great C-interoperability should allow me to use the unmodified raylib source code (in C), and to get back to C for some parts.


In addition, its cross-compilation abilities enable targeting several client types: native (any platform) or website (with WebAssembly). As I develop on WSL Linux but can only run graphical applications on Windows, cross compilation is especially precious.


Finally, I'm curious of Zig modern (compared to C) and innovative features: payload capture, tests, struct methods, optionals, defer, error management...



Goals


My goals for grid are:


And aside from the final product: