Back to blog

kern v1.0.0-rc1, and what the label means honestly

The version number jumps from 0.9.x to 1.0.0-rc1, and the jump is deliberate. The language implementation is 1.0-grade: it self-hosts, the full suite is green, the concurrency model is race-free, and the build is locally reproducible. The release-candidate label is just as deliberate: the project's headline goal is verifiable trust, and that program is mid-roadmap. So the trust claims are real, but single-machine, not yet independently verified. This post draws that line exactly.

1,009
Tests, 100% pass
2-7
of 12 trust-roadmap steps done
110
Stdlib modules, 1,270 functions
0
Data races (ThreadSanitizer-verified)

What "1.0.0-rc1" means, exactly

Two things are true at the same time, and the version number has to carry both of them honestly.

So the trust claims are real, but single-machine. Everything we assert is evidenced on the machine that built it: the deterministic compiler output, the reproducible binary, the capability-secure core. What has not happened yet is the part that makes trust a property a stranger can re-derive rather than a promise you take on faith: continuous integration has not run, the diverse double-compilation gate is not wired, and no external auditor has looked. The live TRUST.md dashboard tracks exactly which rows are verified and which are still local. 1.0.0 final follows CI enablement and a soak. The -rc1 is not false modesty; it is the honest gap.

The implementation is 1.0-grade

The claim is concrete and each half of it is checkable.

SQL checked against your schema at compile time

Injection prevention already stops a query built from user input from type-checking. 1.0.0-rc1 takes the next step and validates the SQL itself against your declared schema, before the program runs. The whole "typo in a column name" and "migration drifted from the code" class of bug moves from a 500 at 2am to a failed kern build.

The checker is conservative by construction: where it cannot see the full column list, it stays silent rather than raise a false positive. Combined with the @sql_literal rule from the injection-prevention work, a Kern SQL statement is checked for both injection safety and schema correctness in the same compile step.

A thread-safe garbage collector

Concurrency is where memory-managed runtimes quietly go wrong. The fix that mattered most for 1.0.0-rc1 was moving the GC's value-root stack to be per-thread, so two threads collecting or allocating at once can no longer corrupt each other's view of the live set. ThreadSanitizer confirmed the race before the fix and confirmed its absence after, and a follow-up pass resolved the environment-config flags once in a constructor to clear the last three residual TSan reports. The result is the "0 data races" number above: not "we could not find one," but "the tool that finds them reports none."

Go-parity foundations in the standard library

A backend language is judged on the boring middle layer as much as the headline features. 1.0.0-rc1 lands the first tier of a deliberate Go-parity effort: the byte and stream spine that everything else composes on.

Those land alongside the database work that closes a long-standing backend pain point: db.postgres now has parameterised queries, atomic transaction batches, and a connection pool that publishes its own Prometheus gauges (size, in-use, idle, waiting) with a per-query timeout. The standard library is now 110 modules and 1,270 public functions.

Where verifiable trust stands: Steps 2 to 7 of 12

The trust program is a 12-step roadmap, and being honest about a release means being honest about which steps are done. The first seven are, on the machine that built the release:

What stands between rc1 and 1.0.0 final

The remaining five steps are exactly the difference between "trust we can evidence here" and "trust a third party can re-derive." None are aspirational; each has a Done-when clause on the roadmap.

Every item is on the ROADMAP with a checkbox and a Done-when clause. A trust claim with no check is not done.

By the numbers

Try v1.0.0-rc1

Install on Linux or macOS. Single binary, no runtime dependencies.

terminal
curl -fsSL https://kern-lang.eu/install.sh | bash
Get Started View on Codeberg