"btprnt", or "bitprint", or "bitmap printer", is a library for generating monochrome bitmap graphics.

An initial implementation can be found on github.


BTPRNT will be used to generate informational charts and outlines, as well as musical scores. I can imagine these being used in "postcard form" to give summaries of some projects and ideas.

The codebase will be designed to be simple and portable.

Aesthetic is another important aspect as well. I like the sharpness of monochrome pixel art. It reminds me of the elegence seen on the old macintosh computers.

One feature that I am hoping to implement is the idea of an infinite canvas. This is something I feel like I am missing in my toolset.


Here is the plan as I see it in my head today.

WIP Part 1: intial API

Begin writing the core API. This includes textbox primitives (with integer scaling), as well as some basic drawing routines (lines, rectangles, circles, rounded rectangles, etc).

TODO Part 2: Janet Integration

This step involves creating bindings for the Janet language.

At this point, BTPRNT should be ready for some work! My hope is to initially use BTPRNT for things like generating outlines, diagrams, and visual documentation.

Janet would be used to build larger more useful programs on top of the core BTPRNT C library. For the time being, the intention is to manage this separately from the BTPRNT codebase, and perhaps maintain it in Monolith.

TODO Part 3: Simple Interaction

The idea here is to build some interactive interfaces in a platform neutral sort of way, and then building an example that uses it with an SDL backend. Sliders, buttons, and XY pads will probably be one of the first things to appear. The idea is to mimic PD a little bit here. The infinite canvas concept will be important here. Somehow, users will be able to move to items offscreen. I also envision having a form of hyperlinks that allows jumping to specific locations.

TODO Part 4: Intermediate Interaction

Actually getting btprnt to be used in an application setting. It would be cool to build interactive canvases that can help drive sounds made in Monolith. I'm imagining something in between PD and hypercard. These would be read-only displays for now, generated using some kind of markup or scriping language.

TODO Part 5: Advanced Interaction

Get the BTPRNT interactive graphics to the point where things can be created/deleted/modified on-the-fly. The testing ground will be in Monolith.

Bitmap font tilesets

Found some good bitmap font resources here: is a collection of fonts of various sizes. is a gigantic collection of fonts from the commodore64 (mostly 8x8).

It would be fair to say that discovering these motivated me to try and build something like BTPRNT.