Software Software projects
Documents Documents and articles
Contact Contact information for the author
PGP PGP information
Public Domain Public domain dedications
Links Links to important third parties


Software projects of which I am (or have been) the primary author and/or maintainer.


abstand Interval trees.
anethum Generic parser API specification.
aradine Modular programmable synthesis.
aurantium Aurantium audio sample map format.
bishopsgate JMS → Matrix relay.
blackthorne Functional streaming XML data extraction.
bodyrecomp Body recomposition tools.
boxwood EPUB parser.
brooklime Nexus Pro staging repository API and command-line tool.
calino Strongly-specified 3D texture file format.
canonmill Directory-based Java Keystore.
cardant Inventory server.
cardant_gui Cardant JavaFX GUI.
cedarbridge Generic, strongly-typed, versioned message protocol compiler.
certusine ACME client.
changelog Software changelogs.
checkstyle_rules Common Checkstyle rules for io7m projects.
chione Opinionated builds of Apache Artemis for small-scale deployments.
cxbutton Customizable embossed CSS buttons.
darco Minimalist, opinionated database access.
digal Java FX rotary dials.
dixmont Dixmont Jackson extensions.
ervilla JUnit 5 Podman container creation.
ethermaker Ethernet MAC address generator.
flail DNS server stress testing tool.
garriga AlertManager → Matrix Alert Relay.
gatwick BOSS GT-1000 controller.
genevan Generic protocol negotiation algorithm.
gtyrell Git repository mirroring tool.
hibiscus RPC Client API Specification.
idstore Identity server.
idstore_gui GUI for idstore.
idstore_trafficgen Traffic generator for idstore.
ieee754b16 Functions for converting to/from IEEE754 binary16 values.
immutables-style annotations for io7m projects.
jaccord Java library to assist with musical analysis.
jade Java application directory etiquette.
jaffirm Simple and fast contract checking.
jarabica Type-safe OpenAL wrapper.
jattribute Observable, functional, mutable variables.
jbssio Java bytestream structural I/O.
jcamera Camera implementations for 3D simulations.
jcathinone Apache Artemis message directory spooler.
jcip Clean-room JCIP annotations.
jcolorspace Color space conversions.
jcoords Functions for specifying and converting between coordinate spaces.
jcoronado Type-safe Vulkan wrapper.
jdeferthrow Defer and combine exceptions.
jdownload Resumable HTTP downloader library.
jequality Equality handling.
jeucreader Unicode codepoint reader.
jfsm Finite state machines.
jintegers Integer handling.
jinterp Interpolation functions.
jlexing Lexer types.
jmulticlose Collective try-with-resources.
jmurmur Java implementation of the Murmur hash function.
jmutnum Trivial mutable numbers.
jnfp Normalized fixed-point value functions.
jnoisetype SoundFont® I/O.
jobj Java Wavefront OBJ parser.
jodist Coffee-flavoured source code generation.
jorchard Mutable rose-tree types.
jpita Simple text alignment algorithms.
jpplib An improved fork of the unmaintained jpplib package.
jproperties Typed property handling.
jptbox Unicode box drawing.
jpuddle Trivial object pooling.
jqpage SQL pagination functions.
jranges Range handling.
jregions Immutable area types.
jsamplebuffer Audio sample buffer types.
jsay Tiny JMS text message sender.
jserial Serial number arithmetic.
jspatial Spatial data structures.
jspearmint SPIR-V toolkit.
jspiel Java RIFF I/O.
jsx S-expression parser.
jsycamore OpenGL GUI library.
jtensors Vector/matrix math package.
junreachable Exception types for marking unreachable/unimplemented code.
junsigned Missing unsigned value conversions.
jvindicator Type-safe HTTP servlet parameter validation.
jwheatsheaf JavaFX file chooser.
jxe Hardened, boilerplate-free XML parsers.
jxtrand Utility classes for XML string resources.
kabstand Kotlin port of the Abstand package.
lanark Restricted dotted name specification.
laurel Image caption management.
looseleaf Minimalist transactional HTTP key/value store.
medrina Role-based mandatory access control.
mime2045 RFC 2045 MIME type parsing.
minisite Tiny software project static site generator.
northpike Continuous integration server.
northpike.packaging Platform-specific packaging for Northpike.
oxicoco Embeddable Java IRC server component.
pallene An ultra-minimal single-file static web server.
percentpass Percent-passing extension for JUnit 5 tests.
primogenitor Ancestor POM for io7m projects.
quarrel Strict, opinionated, typed command-line argument parser.
quixote Tiny embedded web server for unit testing.
repetoir Service directory.
scando Tiny japicmp command-line wrapper.
seltzer A specification for structured, user-facing error values.
servitor Static podman/systemd service generator.
sigiltron Mysterious symbol generator.
smfj Minimalist sequential mesh format.
streamtime Input/output stream progress tracking.
string-template-maven-plugin String Template Maven plugin.
sunburst Asset package system.
tabla Plain text table rendering.
taskrecorder UI task recorder.
tavella Podman Java interface.
timehack6435126 JVM high-resolution timer bug workaround.
trasco SQL database schema revision system.
usq Unsupervised persistent queues.
verdant Binary protocol for HTTP endpoint version announcements.
verona Semantic versioning types.
wendover Java NIO channel tools.
xoanon JUnit 5 JavaFX test harness.
xstructural XSLT implementation of the structural document language.
zelador JUnit 5 cleaning service.
zeptoblog Tiny, modular, static blog generator.

Irradia Components

datepicker Minimalist Android date picker.
fieldrush High-performance, low-allocation, type-safe, recovering stream JSON parser.
http Tiny HTTP interface.
mime RFC2045 MIME type parsing.
opds1_2 OPDS 1.2 parser.
opds2_0 OPDS 2.0 parser.
servicedirectory Android-oriented lazy application service directory.


openjdk-api-java-client Java client for the AdoptOpenJDK API.


immutables-vavr A set of Immutables encodings for Vavr.

Library For All

epubsquash Java EPUB size reduction API and tools.
lfa-android LFA fork of SimplyE.
lfa-launcher LFA Android launcher application.
opdsget OPDS feed retrieval tool.
repomaker A lightweight repository generator for the LFA Updater.
updater Application to download and install LFA applications.


lwjgl3-osgi LWJGL OSGi packages.

Palace Project

palace The Android client for The Palace Project.
palace-audiobook-android The Palace audiobook player API.
palace-ci The Palace continuous integration scripts.
palace-drm-core The Palace DRM API.
palace-http The opinionated Palace HTTP client.
palace-r2 A replacement navigator for Readium 2.

End-Of-Life / Unmaintained

blueberry End-user automated junit test runner.
cantoria Java 9+ API analysis tool.
claypot JCommander conventions for io7m projects.
coffeepick Java runtime retrieval API and shell.
coffeepick-gui CoffeePick GUI.
ftgr Fossil → Git replayer.
halite Maven plugin to accumulate dependencies and artifacts.
jareas Area types.
jaux Auxiliary library.
jboxes Box types.
jcache Generic cache algorithms.
jcage Run-time configurable JVM sandboxing.
jcalcium 3D realtime skeletal animation package.
jcanephora OpenGL plus static safety.
jdae JAXB COLLADA bindings.
jfppg Java fixed-point code generator.
jfprop Server for synchronizing Fossil repositories.
jfunctional Functional types.
jguard FreeBSD jail management tools.
jjacob High-performance, memory and type-safe bindings to the JACK API.
jlog Hierarchical logging.
jnull Null pointer handling.
jparasol Minimalist, pure functional shading language.
jpismo OpenGL text renderer.
jpra Fast, mutable, packed records for Java.
jrai Apache Artemis → IRC relay bot.
jrcl Restricted class loader.
jrpack Rectangle packing algorithms.
jstructural Java implementation of the structural document language.
jtimeline Generic timeline package.
jvvfs Virtual filesystem.
jwhere Disk cataloguing tool.
kstructural Kotlin implementation of the structural document language.
modulechaser Maven plugin for reporting on the modularization status of dependencies.
oakleaf Minimalist article schema and stylesheet.
oatfield OSGi bundle I/O and analysis.
oci-images OCI images for various projects.
plain-site-skin Boring Maven site skin.
portero Matrix Homeserver invitation token service.
r1 Aggressively minimalist deferred rendering system.
r2 Aggressively minimalist second-generation deferred rendering system.
readme Tiny README generator.
saxon-plugin Simple XSLT processing with Saxon.
sombrero Shader management and preprocessing system.
thoth Experimental, extensible OSGi-based IRC bot.
waxmill FreeBSD BHyve manager.


Date Description
2016-10-18Z Baguette
2016-10-19Z Corn
2016-10-20Z Pillow
2016-10-24Z Rabbit
2016-10-29Z Workbot
2017-08-31Z Chemriver
2017-09-08Z Pine
2019-03-14Z Unbolted Frontiers
2019-09-07Z Convenience
2019-12-30Z Dimenec
2020-03-19Z The Vanishing Path 1
2020-08-23Z The Sleep Of The Engineer
2020-09-11Z Heavy Water Station
2020-09-27Z A 3D-printable shell for the MakerHawk OV5647 webcam module
2021-04-04Z Dust Yard
2022-04-08Z Calais
2022-04-08Z Turnwise Broadway
2023-12-30Z OpenPose rigs for Blender
2024-01-07Z Low carb 3D models for Stable Diffusion
2024-04-14Z Wide outpainting workflow for ComfyUI


Date Description
2012-01-19Z A Brief History Of Vertex Specification In OpenGL
2012-04-25Z 2D GPU Displacement Mapping
2012-04-26Z Lightweight Static Exceptions
2012-06-18Z Type Tricks 0 - Propositions In Constructors Of Immutable Objects
2012-06-19Z Type Tricks 1 - Phantom Types
2012-07-29Z Crash Course In Algebraic Types
2012-07-30Z Glow Maps
2013-07-24Z Type Tricks 2 - Interfaces As Capabilities
2014-06-28Z Fragment Shader Outputs - Through The Ages
2015-06-03Z Type Tricks 3 - Generic Visitors
2016-01-19Z Algebraic Types On The JVM
2016-08-20Z Reliable UDP Algorithms
2016-09-03Z A Brutal Approach To Logging In An Embedded Apache Felix
2018-09-11Z Aeron For The Working Programmer
2021-08-29Z The ATMega328P From (Almost) Nothing
2022-10-30Z Simple GPU Outline Shaders


Using PGP (and therefore, the email addresses contained within the PGP keys) is preferable. But if this is not an option, the author can be contacted at:

Contact address


All packages released on Maven Central are signed by the current release key. Personal correspondence is signed by the current personal key. The current key policy is yearly-expiring keys, with each new set of keys being signed by the previous set. Expired/revoked keys are archived here in order to allow for the verification of old releases.

Key Comment
E288 E54A 25D3 F5A9 BF68 6BB4 E64D 38C0 2097 0A85 2024 github-ci-maven-rsa-key
37A9 97D5 970E 145A B9DB 1409 A203 E72A D3BB E1CE 2024 maven-rsa-key
E362 BB4F 16A9 981D E781 2F6E 10E4 AAD0 B00D 6CDD 2024 personal

The following keys have either expired or have been revoked:

Key Comment
2EF5 6FF0 DEA1 1C9C CC5E 5C5D F4F3 4B44 5535 2F86 2011 personal key
1E47 D42C A0F4 2576 4D98 1642 CBB9 BC80 492F 580C 2011 release signing key
277E 24F7 B6D4 F684 5A66 A37A 7A45 3572 0297 BB27 2012 personal key
098E EF85 1E84 43A9 BBD7 50C1 1A78 101E 09E7 56BB 2012 release signing key
D888 CA9C 04F4 6734 7E27 E0C5 18AA A506 6082 4220 2013 personal key
42D2 06D4 F928 C8C2 A45A F938 4F47 F254 8FB0 2F3F 2013 release signing key
AC7F 360E 1C07 2C47 00EB 566E E801 55B7 1982 CC07 2014 personal key
14F0 A524 8273 4791 55C4 1574 E936 2A12 2FE7 EC66 2014 release signing key
2852 08CD EA52 43CE 0AFC 4845 AB99 78DB 38AB 74C4 2015 personal key
6F5B B84E 2D32 3F61 E5D4 1501 1C61 65A3 1016 1791 2015 release signing key
0045 13A0 36B0 CC0C 1522 9298 02AD DA75 7E46 0478 2016 personal key
70F8 92EF E93D F62A 0932 47A6 1611 A16B 44B1 A3D9 2016 release signing key
8168 DAE2 2B15 D3ED C722 C23D 0F15 B7D0 6FA8 0CB8 2017 personal key
9522 485E 761B 94D5 F98B 4259 2866 9282 EDBB 1971 2017 release signing key
E134 3512 A805 115A C1A0 1D15 C578 C3C0 C9B1 2BFF 2018 android commit signing key
29FB 7908 CFC3 2F18 3D39 63D2 A3E8 3E72 D8A5 C856 2018 maven release signing key
B84E 1774 7616 C617 4C68 D5E5 5C1A 7B71 2812 CC05 2018 personal key
F8C3 C5B8 C86A 95F7 42B9 36D2 97E0 2011 0410 DFAF 2018 release signing key
D345 CCB7 187B C973 BDD4 9192 BEC8 33E4 DCAA 5330 2019 android commit signing
5A84 144A 3B3E 11A1 83E5 F44F 6CEE 651E E6CA C870 2019 android-maven-rsa-key
0925 05DB EFCD B64B 9097 39BE DD07 2DA2 0842 C772 2019 jenkins-maven-rsa-key
33E7 E23B F949 E558 A333 38E3 562B F636 4C42 DA2E 2019 maven-rsa-key (RSA key to sign Maven Central releases)
E379 5957 1613 1DB4 E7AB 87DD 67B1 8CC1 F9AC E345 2019 personal
DD3E 9631 2A83 748C B4B3 73A5 91A8 14E2 EAF7 50A3 2019 release-signing
2AE3 1C58 EB0A C10F A8BC D579 6211 C01D F095 2649 2020 android signing
E5AC 62F5 ECDD 8F5C 389E F3F0 CD92 45F1 A9A6 2A8B 2020 jenkins-maven-rsa-key
406D 6CE4 6463 FA78 8ABB 63A3 6AF3 0ECF 4211 F11C 2020 maven-rsa-key [RSA key to sign Maven Central releases]
E369 81ED 130D B4F6 8D42 0248 BBFF DB75 5BAE D95D 2020 personal
3E10 4C4C AE29 C040 1A26 6247 177C 64B8 7BA5 CD8A 2021 android signing
FDE9 3549 7094 0B4D 5637 2157 53A8 207B C03F 0ACE 2021 jenkins-maven-rsa-key
B32F A649 B192 4235 A6F5 7B99 3EBE 3ED3 C53A D511 2021 maven-rsa-key [RSA key to sign Maven Central releases]
2C83 11D5 E344 626A E76E B866 CB39 C234 E824 F9EA 2021 personal
8EAE 10EA 3E8D F42F E58F CFD2 7863 6912 E065 EAD3 2022 jenkins-maven-rsa-key
3CCE 5942 8B30 462D 1045 9909 C560 7DA1 46E1 28B8 2022 maven-rsa-key
2680 A50E FD03 2007 FABE 8C87 B0E4 322E EE81 8BDE 2022 personal
567B 7EA4 703E D530 5B73 3FBC 10C3 9A85 438F 996F 2023 jenkins-maven-rsa-key
62AB 091D 563E 51BE 9E54 B680 7E20 DC73 5505 FE84 2023 maven-rsa-key (RSA key to sign Maven Central releases)
B61D 1DAE 9E4D B4B7 B575 7356 EFBD C8D0 6064 EF5C 2023 personal
3898 ED48 93C0 C9B8 8087 A11A 5149 8BCC 7C76 927C Coreland release signing key

Public Domain

This section records public domain dedications as they occur.

Date File
2014-12-23 jspatial.asc
2015-08-23 jrpack.asc
2016-04-27 timehack6435126.asc
2019-03-21 unbolted_frontiers.asc