Preamble
The Small Font Format is intended for use in embedded applications, where a small font is required. The format is monochrome only, and will remain so for the foreseeable future. In its first iteration, the format supports only 8x8 character sizes. However, 4 bytes have been reserved in the header to allow for future expansion, which could perhaps include support for variable size fonts.
Edit 2025-11-01: Relevant xkcd:
I’m fairly certain someone else has already done what this project aimed to do. I’d probably be better off adapting FBConsole to use the existing standard. And yet, here we are.
Version history
| Version | Notes |
|---|---|
| v1.0 | Initial release |
Version history
File format
Header - 8 bytes
| Offset | Length | Description | Expected value |
|---|---|---|---|
| 0x00 | 3 bytes | Magic header | 53 46 46 |
| 0x03 | 1 byte | Format version | 10 |
| 0x04 | 4 bytes | Reserved | 00 00 00 00 |
Header format
- Magic Header - The 3 bytes
53 46 46represent “SFF” in ASCII. - Version - The first nibble of this byte represents the format’s major version, the second nibble represents the format’s minor version.
- Reserved - Reserved for future expansion. See preamble.
Character data - 96 * 8 bytes
Each block of 8 bytes represents a bitmap describing how to draw a character, where the left most bit in each byte represents the left most column. Each row is represented by a single byte, with the first byte representing the top row.
In its first iteration, the format requires 96 characters to be defined. These represent ASCII codes 0x20 - 0x7E - this is the first 95 characters in the format. Character 96 should be used by a character renderer to represent bytes passed to it, which fall outside defined range. The font designer may choose to represent this with a symbol, or leave it blank.
Supporting tools
Coming soon - a tool to edit Small Font Format fonts, using WinForms on .Net 4.0. However, I don’t expect this to be the de facto editor for Small Font Format fonts - I’d like to rewrite this tool with something that allows for native cross platform use. This may be Python or C++, but will use a true cross-platform GUI toolkit.
