Go 1.25.3
Skip go build. Ship a binary.
Write a numeric kernel in Go. zlow compiles it to a native binary, no go build, no gccgo, no gollvm. If we can't compile it correctly, we refuse it.
Faster than go
1.4 ms to run the recursive kernel. go (gc) took 9.1 ms on the same source.
A real binary
The compile path is Go source to native. No go build, no gccgo, no gollvm.
Checked against go
72/72 fixtures agree with pinned go (gc) 1.25.3, or are refused by name.
Small on purpose
v0 is float64, bool, and control flow. Keep the rest of the app in Go.
Callable from your app
Compile the kernel to a shared library and load it through the generated binding.
1.4 ms
to run the kernel
6.7×
faster than go
Lightning fast
Same kernel. The gc binary walks the call chain; the LLVM binary just runs it.
What's in v0
A kernel, not a rewrite of the Go compiler. Keep the app in Go; compile the hot path.
You can write
- float64 and bool top-level func
- var, if, for (while-form), break/continue
- arithmetic, comparisons, and boolean ops
- calls between functions in the same project
Not this
- goroutines, channels, and defer
- structs, interfaces, slices, and maps
- for range, switch, and the standard library
- go build, go.mod, and the module graph
Fully featured
Compile the hot path to native. Keep writing Go.
Native binaries
Your numeric core becomes a binary. No go run at runtime.
Skip go build
One command. No go.mod, no module cache, no go build.
Tiny output
A small native binary; no binary-size comparison is measured yet.
Fast compiles
119 ms to compile the dense corpus (zlow frontend, 32 files, 2 MB).
Familiar Go
func, var, if, for, arithmetic — the numeric Go you already write.
Simple setup
A zlow.json and one command — that’s the whole setup.
Same-project calls
Functions in the project can call each other. No import maze.
No runtime tax
Source goes straight to native. No go run in between.
One project
Every .go file compiles together. Point zlow at the folder and go.
Clear errors
Out of scope fails loudly. You never ship a binary that almost works.
Matches go
Accepted kernels match the gc compiler you already trust.
Built for the hot path
Compile the numeric core to a shared library the rest of the app can load.
Try it
Install the CLI, add a project file, then compile from that folder.
npm install @zlow/cli
zlow native .