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 8×8 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.

Version history

v1.0Initial release
Version history

File format

Header – 8 bytes

OffsetLengthDescriptionExpected value
0x003 bytesMagic header53 46 46
0x031 byteFormat version10
0x044 bytesReserved00 00 00 00
Header format
  • Magic Header – The 3 bytes 53 46 46 represent “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.