About
BXM is two small tools that share one idea: same input, same bytes, same result. They live in one repository and on one site because they solve the same kind of problem from two ends.
BXM Canon is a binary encoding with exactly one valid form for every value. When two programs encode the same data, they get the same bytes, so a hash or a signature taken on one machine holds on every other. More about Canon.
BXM Memo skips a command when its inputs haven’t changed. You tell it what a build step reads and writes, and the second time round it puts the outputs back instead of doing the work again. When it can’t, it tells you which input changed. More about Memo.
Why Two Tools Under One Roof
Both are about trust in repeatable results. Canon makes data repeatable down to the byte, so “is this the same?” has a yes or no answer. Memo makes work repeatable, so a build can skip what it has already done and prove why it didn’t skip the rest.
They meet in practice too. Memo’s cache key is a hash over a description of the job, and that description has to come out byte for byte the same every time. That’s exactly the job Canon does. Memo writes it as sorted JSON from Go’s standard library, so it stays one static binary with nothing linked in, but the problem it solves there is the same one.
How the Project Works
- Open source. Both tools are under the Apache License 2.0, with the code on GitHub.
- Measured, then said. Every number on this site comes from the recorded test output in the repository’s
test/resultsfolder, and the script that produced it is next to it. - Small on purpose. Canon’s format fits on two pages. Memo is one Go binary with no dependencies beyond the standard library.
- Releases on every platform. Each release has Linux, macOS and Windows builds, and every build is tested before it is published.
BXM is a SoftDevStudio.com project.
Questions People Ask
Do I need both?
No. They are separate binaries with separate jobs. Use Canon if you hash, sign or compare structured data. Use Memo if your builds or pipelines repeat slow steps.
Is Canon a replacement for JSON?
For storage and display, no. JSON stays the readable form, and Canon reads and writes it. Canon is for the moments when the exact bytes matter: hashing, signing, deduplicating, comparing.
Does Memo need a build system?
No. It wraps any command. Your scripts, Makefiles and CI steps stay as they are.
What platforms are supported?
Linux (x86-64 and ARM64), macOS (Apple silicon and Intel) and Windows (x86-64). The tests run on Linux and macOS for every change.