
I created PixFont Studio as a middle ground between Pentacom’s BitFontMaker2 and proper font authoring tools like FontForge and Bits’N’Picas.
The goal is to make it easy to create, open, edit and convert fonts with various target formats, from an easy-to-parse native format, to existing formats used by various programs throughout the ages (Windows .FON, BDF/PCF, and export to TTF or PNG).
I’m building the desktop application first, then will be porting it to the web (via WebAssembly) to lower the barrier to entry as much as possible.
Current state
v0.1.0 is released on GitHub and itch.io.
It currently supports the basics:
- Create a blank font
- Add glyphs from predefined sets
- Save and load your font project
- Import and export Pentacom BitFontMaker2 fonts
- Edit the glyphs
Next immediate goal is to refactor the codebase to put myself into a better position for implementing more features on top.
There’s a lot of todo!()s, panic!()s and .unwrap()s to be cleaned up.
The stack
For this project I opted to use Rust and iced. I wanted to use Rust on something real, and this fitting the bill perfectly.
It is highly portable between platforms, and it’s the nicest language out of the ones I’m aware of to build WebAssembly libraries.
The more I learn Rust, the less intimidating it feels. There are certainly fewer footguns than in other languages, and I’m more confident determining where an error crops up compared to the OOP-like languages (Ruby, JS/TS, C#).
I have heard of iced for its use in the COSMIC desktop environment. It’s still in development, but it was also my introduction to the Elm architecture, which gave me a much better model to reason about user interfaces going forward1.
Time will tell if the stack holds up for the project, but so far I have enjoyed using it. I’m fairly satisfied that time spent up-front on implementation will prevent annoying bugs down the road.
Licence
The PixFont library itself is made available under the MIT and Apache 2.0 licences, in line with most Rust libraries. I want the “native binary” format to be as widely accessible to as many people as possible.
PixFont Studio, the app itself, is licenced under the AGPL 3.0 or later. This is to make sure improvements to the editor are made available to the people using it.
AI
For this particular project, from the start, I decided not to use AI-assisted development.
This is to build this project on my own skills alone. While I’m familiar with Rust’s basics, I wanted to build the muscle memory for doing things myself on this stack before getting agents to do it for me.
Inspired by Ghostty, I’ve added instructions to the AGENTS.md file to mark AI generated code and have CI reject diffs with marked code.
I plan to add more misdirects and canaries as I go.