v1.1.0 · 2,073 tests at 100% · reproducible build gated per commit

A backend programming language built in the Netherlands.

European. Cloud‑native.
Verifiable all the way down.

GDPR, DORA and NIS2 are compiler errors, not compliance theatre. Capability-secure core, reproducible builds, zero US dependencies. 2,073 tests. 432 modules. Ships today.

main.kern
# Authority is explicit. Only main can mint it.
from std.cap_net import net_root, net_http_serve
from std.cap_ai import ai_root, ai_complete
from std.untrusted import untrusted_sanitize_html

fn summarise(ai: Cap<Ai>, doc: str) -> str:
    out = ai_complete(ai, "mistral", doc)
    # out is Untrusted<str>. To a sink raw: E0303.
    return untrusted_sanitize_html(out)

fn main():
    net = net_root()
    ai  = ai_root()
    # No cap, no IO. That is E0404.
    net_http_serve(net, 8080)

Sovereignty has a stack.
We started where Europe can win.

Sovereignty is not a budget line. It is a build. A computer is a stack of layers, each inheriting the one beneath it. The real question was never "can Europe build everything?" It was: which layer can Europe own first, and is that enough to protect people?

Sovereign European silicon is real work, but it is a decade away. The language layer sits above the hardware and the OS. It is where data is shaped, encrypted and moved. Own the language and you own the security and privacy that reach the user, today, without waiting for anyone's chip foundry.

You do not need to own the wire if you own the encryption that rides over it. Encrypt before the data leaves the machine and it no longer matters whose network carries it. That is the pattern kern applies everywhere: compile-time enforcement at the layer you can build now.

We started at the language and kept going. The compiler self-hosts. The container engine runs real OCI images with no Docker beneath it. The hypervisor boots a Linux guest with a disk and a NIC it emulates itself. The BLE Mesh stack reaches the device in a patient's home. Every layer is written in Kern, and the part you have to take on trust is 42,207 named lines of C with a written ledger. We wrote the stack, and you can check it.

No kill switch. No foreign override. Ever.

A single executive order, licence change or sanctions list can shut down software your institution depends on, overnight. kern removes that lever. Every component is EU-hosted, EU-governed and EUPL-licensed. No CLOUD Act. No FISA 702.

SEAL-4-ready at the software layer

The EU Cloud Sovereignty Framework (April 2026) scores cloud services on eight Sovereignty Objectives. kern maximises the software and supply-chain contribution: no non-EU dependency caps a deployer below the level their own infrastructure can reach. Full posture and boundary.

Component Provider Country
Source codeCodebergGermany
Package registryOVH / ScalewayFrance
CI/CDWoodpeckerGermany
Domain & DNSTransIPNetherlands
Static hostingCodeberg PagesGermany
Cloud LLMMistralFrance
Vector DBQdrantGermany

What v1.1.0 actually means.

Six claims that matter most, each carrying its own status. Shipped is in the box today; gated means a CI gate blocks the build if the property regresses.

Regulation Shipped

Compliance is a type, not a checklist

GDPR, DORA, NIS2 and the EU AI Act are enforced at compile time. Personal data reaching an LLM, a log or a database is a compile error. std.compliance maps each operation to its specific GDPR, DORA and NIS2 articles.

The 1.0 label Shipped

Stable, and precisely labelled

The language, stdlib, CLI and manifest surface is frozen under a written stability policy. Edition 2027 promotes selected warnings to errors, evolving the language without breaking existing code; the default edition stays backward-compatible. kern fix migrates between editions.

Trust Gated

Ten of eleven trust steps, gated

Deterministic IR, reproducible binary, independent bootstrap, diverse double-compilation and the supply chain are per-commit CI gates. Capability enforcement and flow soundness are machine-checked in Rocq with zero admits. Open: the capability and flow models.

Authority Shipped

Capability-secure to the syscall

Every authority-bearing entry point requires an explicit Cap<T>, enforced by compile error E0404, down to the raw syscall intrinsic and the system clock. A revocable capability cannot be stashed past its frame, so revocation gates the lifetime.

Bug classes Shipped

Whole categories fail to compile

SQL, shell, URL, regex and template injection are compile errors, not runtime checks. So are secrets reaching a log (E0316), timing-unsafe comparison (E0317) and implicit flow on secrets (E0331). CFI on every binary (BTI+PAC on ARM64, CET on x86-64). Constant-time primitives in std.ct.

Isolation Shipped

Containers and VMs, self-contained

OCI containers with no docker or runc. KVM microVMs with multi-vCPU SMP, block volumes and in-kernel virtio, one OS process per tenant. macOS sandbox via SBPL profiles. Seccomp, Landlock, cgroups and Cap<Vm>. CPU vulnerability detection and speculation barriers in std.hw.

Compliance, cloud, AI. One compile.

Compliance is a type system problem. Infrastructure is a sovereignty problem. AI is a privacy problem. One compile.

European Sovereignty

No US dependency.
Not today. Not in 2040.

Every byte of kern's supply chain is European today. No CLOUD Act exposure. No executive order risk. GDPR enforced at compile time: PersonalData<T> cannot reach analytics, logs or AI without consent. std.compliance maps operations to their GDPR, DORA and NIS2 articles. pd_forget destroys the key, so erasure is permanent.

  • Compile-time GDPR, DORA, NIS2 & EU CRA enforcement
  • Zero CLOUD Act / US jurisdiction exposure
  • Secure<T>: graduated protection with mlock & zero-on-drop
  • Built for public sector, defense & critical infrastructure
Cloud Native

Easier than Rust.
Deploys like Go.

Python's readability, Go's deployment model, Rust's safety guarantees. gRPC, HTTP/2, SSH, NATS, S3, compression and compiled regex in the stdlib. Green threads at 100K concurrent routines. Static binaries under a millisecond cold start.

  • gRPC, HTTP/2, SSH, NATS, S3 in stdlib
  • OAuth2, migrations, cron, Prometheus metrics
  • Sub-millisecond cold starts, static binaries
  • TLS via mbedTLS, PostgreSQL, JWT in stdlib
AI Native

AI that cannot leak.
Because it will not compile.

PersonalData<T> reaching an LLM is compile error E0302. Model output is Untrusted<str>, so feeding it to SQL, a shell or a file unvalidated is E0303: prompt injection stops at the type system. Multi-provider proxy (Claude, OpenAI, Mistral, Ollama), MCP server and client under the same rule, Qdrant for RAG, and EU AI Act audit logging that cannot be switched off.

  • Claude, OpenAI, Mistral, Ollama in the stdlib
  • Qdrant vector DB & RAG pipelines built in
  • PersonalData taint propagation: PII to LLM = compile error
  • Keyed HMAC-SHA256 audit logs & EU AI Act compliance

Designed after the requirements existed.

Go, Rust, Python and Node were designed before GDPR fines exceeded €4 billion, before the EU AI Act, before NIS2 made supply chain sovereignty a legal obligation. They bolt compliance on. kern compiles it in.

Feature Python Go Node.js Rust Kern
Readable syntax Yes Verbose JS baggage Complex Yes
Single binary No Yes No Yes Yes
Native async Bolted on Goroutines Yes Complex Yes
Null safety No No No Yes Yes
GDPR built in No No No No Yes
AI native stdlib No No No No Yes
Container native No No No No Yes
AI agent framework No No No No Yes
WASM target No Limited No Yes Yes
European governed No No No No Yes
Error handling Exceptions Values Exceptions Values Values
Learning curve Low Medium Medium Very high Low

Best of Go, Rust, Python.
None of the baggage.

Type-Safe by Default

Traits with static vtables and dynamic dispatch. Secure<T> zeroes on drop, mlocks confidential data and blocks plaintext logging. A secret cannot reach a log by accident.

Traits & Algebraic Types

Nine standard traits (Display, Debug, Eq, Hash, Ord, Clone, Default, Serialize, Deserialize). Result<T> and Option<T> with match guards and range patterns.

Concurrent Async Runtime

M:N cooperative scheduler with per-coroutine preemption. spawn / await on guard-paged stacks, spawn_thread for CPU-bound work. await parks the routine, never an OS thread. select over channels and Ticker timers.

Fully Bootstrapped Compiler

13 compiler files self-host: 59K lines of Kern. LLVM backend plus a native ARM64 codegen (Mach-O writer, instruction encoder, zero LLVM dependency). Selective monomorphization, DWARF debug info, kern fmt with round-trip safety gate, and WebAssembly (wasm32-wasip1) target.

Integrated Toolchain

15-feature LSP (go-to-definition, references, rename, semantic tokens, inlay hints). kern mod / kern get with MVS resolution and kern.sum. 11 fuzz targets, ASAN/UBSAN/TSAN in CI. kern doctor in one command.

Pipe-First & String Interpolation

Data flows left to right, readable like Python. "Hello ${name}" interpolation over any expression, int() / float() conversions and default field values.

Expressive by nature.

kern's syntax reads as easily as it's written. See for yourself.

user_service.kern
# In Python, this compiles and ships:
#   analytics.track(user.email)  -- GDPR violation
#   send_to_ml(user.email)       -- GDPR violation
# In Kern, it's a compile error:

fn send_email(user: User):
    analytics.track(user.email.value)
    # ERROR E0302: PersonalData<str> cannot reach a
    # sink that does not declare PersonalData

# The safe path: validate consent first.
from std.compliance import check_consent

fn send_email_safe(user: User, consent: str):
    check_consent("process", consent)
    analytics.track_event("signup")  # OK
    send(user.email_plain, "Welcome!")

GDPR enforced by the compiler

No other language enforces GDPR at the type system level. PersonalData<T> cannot be passed to analytics, logging, or AI models without explicit consent and a documented reason. Violations are compile errors, not fines.

  • PersonalData<T> tracks consent at the type level
  • Every access is logged with reason and consent
  • Passing PII to AI models is a compile error
  • pd_forget destroys keys: GDPR Article 17
service.kern
from std.cap_net import net_root
from net.http_server import new_server,
    server_get, serve

# A cloud-native HTTP service in 12 lines

fn handle_user(body: str, headers: str) -> str:
    id = http_param("id")
    return "{\"id\":" + id + "}"

fn main():
    net = net_root()   # only main mints it
    server = new_server(net, 8080)
    http_route_handler("GET", "/users/:id", handle_user)
    server_get(server, "/health", "{\"status\":\"ok\"}")
    serve(server)

Cloud-native by default

An HTTP service with path parameters, a health endpoint, and capability-gated network access. No reverse proxy, no framework, no third-party package. A module without Cap<Net> cannot listen or dial at all.

  • Path parameters with http_param
  • Middleware via http_use
  • Static binaries, sub-millisecond cold starts
support_agent.kern
from std.cap_ai import ai_root, ai_complete
from std.untrusted import untrusted_validate_length

# Model output is Untrusted<str> at the source.
# EU AI Act audit logging is automatic.

fn answer(ai: Cap<Ai>, question: str) -> Result<str>:
    reply = ai_complete(ai, "mistral", question)

    # Straight to a sink would be E0303.
    return untrusted_validate_length(reply, 1, 4000)

fn main():
    ai = ai_root()   # only main mints it
    print(answer(ai, "How do I deploy?"))

Multi-provider LLM with audit trail

Anything a model returns is Untrusted<str> at the source, so feeding a reply into SQL, a shell or a file without validating it is a compile error, and prompt injection stops at the type system. Personal data reaching an LLM is rejected the same way. Claude, OpenAI, Mistral and Ollama sit behind one proxy, with Qdrant for RAG.

  • Claude, OpenAI, Mistral, Ollama in stdlib
  • Qdrant vector DB & RAG pipelines
  • PersonalData taint propagation
  • Keyed HMAC-SHA256 audit logs & EU AI Act compliance
deploy.kern
from std.cap_container import container_root,
    cc_pull, cc_run, cc_wait_ready, cc_logs, cc_stop
from std.cap_time import time_root

# Nothing on the host but this binary,
# a 5.15 kernel and libc.

fn main():
    c     = container_root()
    clock = time_root()

    cc_pull(c, "debian:bookworm-slim")
    id = cc_run(c, "debian:bookworm-slim")

    cc_wait_ready(c, id)
    print(cc_logs(c, id))
    cc_stop(clock, c, id)

# A module without Cap<Container> cannot
# start a container at all: E0404.

Real OCI images, no Docker underneath

The container engine is compiled into the language. It pulls and runs real images using namespaces, cgroup v2, overlayfs and pivot_root, with hand-rolled netlink for networking, so there is no docker, podman, runc, skopeo or iptables on the host to install, patch or trust.

  • Pulls and runs debian and alpine images directly
  • Signature verification and digest pinning on pull
  • Rootless mode, with published ports and compose service DNS
  • kern audit-docker proves a build takes no Docker dependency
tenants.kern
from std.cap_process import process_root
from std.cap_fs import fs_root
from sys.microvm_orchestrate import vm_spawn,
    vm_stats, vm_wait, vm_audit_verify

fn main():
    p  = process_root()
    fs = fs_root()

    # One OS process per tenant, each with its own
    # cgroup, Landlock scope and seccomp jailer.
    t = vm_spawn(p, fs, "vm_runner", [], "tenant-a",
                 512 * 1024 * 1024, 100, 128,
                 "/var/log/vm.audit")

    print(vm_stats(fs, t))
    vm_wait(p, fs, t, "/var/log/vm.audit")
    vm_audit_verify(fs, "/var/log/vm.audit")

A hypervisor you can read

The monitor is written in Kern rather than borrowed, so the multi-tenant isolation boundary is auditable in one language. It boots an unmodified Linux kernel on KVM from a distro rootfs, with a virtio-blk disk and a virtio-net NIC it emulates itself.

  • Authority split by capability: only the runner mints Cap<Vm>
  • Every guest address proven inside guest RAM before use
  • Minting Cap<Vm> derives a seccomp filter for the VM host
  • Created, booted, stopped and reaped all land in a hash-chained audit log

1.0-grade implementation.
Independently verifiable.

0 tests, 100% pass 1,521 conformance + 85 compat + 467 negative. All three gates CI-blocking, alongside reproducibility, seed faithfulness and diverse double-compilation. 11 fuzz targets (7 C libFuzzer + 4 Kern-language).
0 stdlib modules 309 core + 10 bundled packages (4,846 pub fns). gRPC, HTTP/2, SSH, PostgreSQL, Redis, OCI, CSV, XML, template engine, compiled regex, Ticker timers, cloud KMS, MCP, ML-KEM, SPIFFE mTLS, BLE Mesh, KVM microVMs.
13/13 compiler files bootstrap 59K-line self-hosted compiler (LLVM + native ARM64). 67K C runtime (42,207-line audited TCB), thread-safe GC verified under ThreadSanitizer. Bootstraps from source in about 8 seconds on Apple Silicon.
0 US dependencies Zero CLOUD Act exposure. Full European supply chain. EU-sovereign cloud KMS providers.

A real backend toolbox.
Not a language demo.

TLS, a database, auth, metrics, compliance evidence and a way to ship. kern's stdlib carries all of it, with no third-party packages and no US-hosted service in the path.

v1.1.0: stable, signed, verified

Self-hosting, 2,073 tests at 100% pass, race-free, reproducible byte-for-byte. API surface frozen under a written stability policy with edition-based evolution. Ten of eleven trust-roadmap steps done and CI-gated. Capability enforcement, lexer bisimulation and flow-analysis soundness machine-checked in Rocq with zero admits. Release tags signed with pinned keys; no compiler binary published, the installer builds from source.

TLS & HTTPS

HTTPS without a reverse proxy. TLS 1.2/1.3 floor with forward secrecy, ACME v2, hot-reload on renewal.

PostgreSQL

Parameterised queries, transaction batches, LISTEN/NOTIFY, connection pooling. SQL checked against your schema before it runs.

gRPC & HTTP/2

gRPC over protobuf, HTTP/2, SSH, NATS, S3 with Sig V4. No third-party package for service-to-service work.

CycloneDX SBOM & EU CRA

CycloneDX 1.5 and SPDX 2.3 out of the box. Four dependencies to declare, not four hundred.

EU-sovereign cloud KMS

Keys stay in Europe. Scaleway, Azure Key Vault, local AES-256-GCM. Plaintext secrets reaching IO sinks are compile errors.

Container engine & hypervisor

OCI containers and KVM microVMs, self-contained. No docker, podman or runc. One OS process per tenant, in-kernel virtio datapath.

Regulation article mapping

Every data operation maps to its GDPR, DORA and NIS2 article. Consent validation, data classification and adequacy checks included.

Tamper-proof audit logs

HMAC-SHA256 chain, keyed to the machine. Full re-verification on open. The artifact a DORA or NIS2 examiner asks to see.

Post-quantum crypto

Ed25519, ChaCha20-Poly1305, Argon2, BLAKE2b via libsodium. ML-KEM-768 and ML-KEM-1024 for post-quantum readiness.

Fastest where a backend lives.
Honest about the rest.

Fifty-five backend workloads on six languages, same algorithm and same data sizes on every side, using only each language's standard library. No JIT pre-warming, no micro-tuning, Go as a native binary. Five representative rows below. kern is faster than Go on Fibonacci, JSON encoding and sorting. It loses on hashing (Go links hardware-accelerated SHA-256; kern uses libsodium's portable implementation) and on file I/O (kern's file-IO cell shows 147% run-to-run spread in this matrix; the loss holds at the minimum too). Losses are stated, not framed away. Methodology and the full 55-row matrix are in the repo.

Workload kern vs Go vs Node.js vs Python
File I/O 10k write+read cycles 2,322 ms 2.7× slower 2.5× slower 2.5× slower
Fibonacci recursive, n=35 29 ms 1.2× faster startup-bounded 32× faster
JSON encode 100k iterations 43 ms 1.5× faster startup-bounded 5.3× faster
Sort 1M pseudo-random integers 46 ms 1.3× faster 11× faster 5.2× faster
Hash 1M iterations, SHA-256 on every side 299 ms 1.4× slower 5.9× faster 2.0× faster
Concurrent HTTP

~9,000 requests/second sustained at 100-way concurrency, with zero failures across 50,000 requests (measured with ab). Backed by libuv, the same event loop that powers Node.js.

Median of seven runs (first discarded), Ubuntu 24.04 x86-64 i9-10900K, CI paused, release builds. Go 1.24, Node 22, Python 3.12; full matrix also includes Rust and C. Single-process, single-core. Spread under 12% except kern file I/O (147%, noisy cell: 2,322 ms median vs 1,127 ms minimum; loss holds at min but ratio is approximate). Hash: kern uses libsodium's portable SHA-256; Go links hardware-accelerated SHA-256. Same algorithm, different silicon. Closing this gap is a named work item. "Startup-bounded" = workload under 3x the language's startup floor. Micro-benchmarks are signals, not proof. Suite and method in the repo. Last measured 2026-10-15.

Built from source, on your machine.

1

Install kern

terminal
$ curl -fsSL https://kern-lang.eu/install.sh | sh
2

Scaffold a working service

terminal
$ kern new api my-service
Created api project: my-service
$ cd my-service
3

Run it

terminal
$ kern build src/main.kern -o my-service && ./my-service
  Binary written to my-service
Build complete.
my-service listening on http://localhost:8080
# in another shell
$ curl localhost:8080/health
{"status": "ok"}

Built for the institutions
that define Europe's future.

Kern is for

  • EU institutions and member state agencies building sovereign digital infrastructure
  • Critical infrastructure operators under NIS2: energy, transport, health, water
  • Central banks, financial market infrastructure, and DORA-regulated institutions
  • Defense and intelligence services requiring sovereign, auditable tech stacks
  • Enterprise teams deploying AI agents where PII leakage is a regulatory risk

Kern is not for

  • Data scientists who need NumPy and pandas: use Python
  • Systems programmers building operating systems: use Rust
  • Teams with ten years of Go investment: switching has a cost
  • Projects that need Windows support: kern targets Linux and macOS

Sovereign infrastructure
for the next decades.

Sovereignty is not a budget line. It is a build. kern runs today: European independence compiled in, not promised. Verifiable, not asserted.