Rene Schallner
AI Research & Technology Lab
I love writing Zig!
Back to speakersFrom 250MB Chromium to 441KB Zig on a Pi Zero — and Down the Color Emoji Rabbit Hole
For a (currently, hopefully by October not anymore) secret project, I needed to render animated scenes on a Raspberry Pi Zero 2W driving a 3.5" LCD. Being a lazy programmer, I first tried to get away with Chromium in kiosk mode — HTML/CSS is a massive ecosystem that both humans and coding agents are well-versed in, and the tooling is unbeatable. Who was I kidding — 250MB RAM on a 512MB device, a Wayland compositor just to run, 10+ seconds before anything shows up on screen.
So I designed a JSON scene graph DSL that gives you 90% of what CSS can do — familiar enough that any frontend developer, or coding agent, can pick it up without learning a foreign system. I validated the approach with a Python/pygame prototype, then ported the whole renderer to Zig + SDL2: 441KB binary, 10MB RSS, instant startup.
Everything rendered perfectly — shapes, animations, layout, text. I develop on macOS for quick iterations, so system libraries come from Homebrew. Color emoji worked in the pygame prototype, same fonts. But in the Zig build? Every emoji came back as zero-width. No crash, no error on font open — just silent nothing.
In this talk, I'll take you down the rabbit hole that followed — through SDL2_ttf, FreeType internals, font table formats, and a Homebrew system library whose dependency graph looked perfect but was quietly lying. I'll show you why pygame gets it right on the same machine, and how Zig's build system turned what would normally be an autotools/Cmake/configure nightmare into three lines of build.zig.
And of course, I'll use the same 441kB Zig renderer to deliver an animated presentation about itself 😊.
About the speaker...
Hi, I'm @renerocksai, and I love writing Zig!