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

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?

At the bottom are the chips and the machines. Sovereign European silicon is real, necessary work, but it is a decade away, maybe two. The operating system sits on that hardware, bound so tightly it inherits whatever the hardware decides. You would expect that to be where you start. It is not. You cannot wait two decades for your data to be safe.

So we asked a different question: which layer can we own today? The language, the layer above the operating system, where the applications live. That is something we can build now, in the core, with the software written on top of it.

Take the network, where a cloud-native language lives. kern is built for the cloud: your software runs as services talking to other services and clients constantly, over networks and infrastructure you do not own. The cables and undersea fibre your data crosses are foreign-owned, and will be for a generation. But 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 everywhere. The language is where data is shaped, encrypted, and moved, so owning it means owning the security and privacy that reach the user. That is kern: not a promise to out-build the world's chip foundries, but the layer we can build today that walls off your data, so no foreign party, and no foreign nation, can follow your citizens, your patients, or your state.

v1.0.0-rc2. The implementation is 1.0-grade: self-hosting, full suite green (807 + 235), thread-safe GC (TSan-verified), reproducible build. 1,042 tests at 100%. Capability-secure core (E0404), injection prevention as a compile error, compile-time SQL schema validation, Linux boots on Kern's hypervisor, a self-contained native container engine (no docker, no podman), generics, async, Secure<T, State> with EU cloud KMS, CapTP, kern-pkg in Kern. All shipped.

European. Cloud‑native.
AI‑first.

The backend language for European digital sovereignty. GDPR, DORA, NIS2, and the EU AI Act enforced at compile time and verified at runtime, with article-level mapping (GDPR Art. 5 to 44, DORA Art. 5/9/10/11, NIS2 Art. 21/23). v1.0.0-rc2: 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 RC label is deliberate and honest: the headline goal, verifiable trust, is mid-roadmap (Steps 2 to 7 of 12 done), so the trust claims are real: the compiler IR now reproduces byte-for-byte across two machines and two operating systems (macOS and Linux, manually verified 2026-07-13), with the end-to-end binary byte-identical on the Linux box, but not yet gated by per-commit CI or externally audited. The core is capability-secure: all authority-bearing entry points require explicit Cap<T> capabilities, enforced unconditionally by compile error E0404. SQL, shell, URL, regex and template injection are compile errors rather than runtime checks. The container engine is self-contained — it pulls and runs real OCI images with no docker, podman or runc — and Linux now boots on Kern's own hypervisor (ARM64 via Virtualization.framework on macOS) for native macOS container development. Generics (selective monomorphization), async on cooperative kern routines with libuv-backed IO (spawn / spawn_thread / await), Secure<T, State> compile-time IO governance with EU-sovereign cloud KMS, CapTP distributed object-capability protocol, and kern-pkg ported to Kern. All shipped. 1,042 tests at 100% pass. 272 stdlib modules with 1,961 public functions. Zero US dependencies.

main.kern
import std.ai.llm as llm

async fn main():
    model = llm.ollama("mistral")

    prompts = [
        {"role": "Summarize this document"},
        {"role": "Translate to German"},
    ]

    results = await async.all(
        prompts.map(|p| model.complete(prompt: p))
    )

    for r in results:
        print(r)

Three pillars. One language.

Compliance is a type system problem. Infrastructure is a sovereignty problem. AI is a privacy problem. kern solves all three at compile time.

European Sovereignty

No US dependency.
Not today. Not in 2040.

Every byte of kern's supply chain is European. No CLOUD Act exposure. No executive order risk. GDPR is enforced at compile time. std.compliance maps every operation (collect, store, transfer, delete, encrypt) to its specific GDPR Art. 5–44, DORA Art. 5/9/10/11, and NIS2 Art. 21/23 obligation — auditor-readable. net.tls classifies cipher suites against BSI TR-02102-2. PersonalData<T> can't reach analytics, logs, or AI without consent. user.forget() implements Article 17 directly.

  • 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.

kern sits in the sweet spot: Python's readability, Go's deployment model, Rust's safety guarantees, and more opinionated than all three on security and privacy. gRPC with real protobuf, HTTP/2 via nghttp2, SSH, NATS, S3 — all 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

Multi-provider LLM.
Privacy enforced by the compiler.

Built-in LLM API proxy for Claude, OpenAI, Mistral, and Ollama — multi-turn chat, token counting, SSE streaming. Qdrant vector DB client for RAG pipelines. PersonalData<T> passed to any LLM call is a compile error, with taint propagation across variable assignments. EU AI Act audit logging is automatic and cannot be disabled. BLAKE2b cryptographic event logs for tamper-proof audit trails.

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

Designed after the requirements existed.

Go, Rust, Python, and Node are governed by US corporations or foundations. They 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

Type checker enabled on every build. Traits with Rust-model static vtables and dynamic dispatch. Secure<T> zeroes on drop, mlocks Confidential data, and blocks plaintext logging.

Traits & Algebraic Types

Trait definitions with impl blocks and Rust-model static vtables for dynamic dispatch. 9 standard traits (Display, Debug, Eq, Hash, Ord, Clone, Default, Serialize, Deserialize). Result<T>/Option<T> as first-class unions. Match guards, range patterns, and struct destructuring.

Concurrent Async Runtime

Async codegen shipped in v0.8: spawn / await on cooperative kern routines (16 KB guard-paged stack, configurable via KERN_ROUTINE_STACK_SIZE); spawn_thread routes CPU-bound work onto the libuv worker pool. Routine-aware libuv IO (file / DNS / TCP), libpq, and mbedTLS — await parks the calling routine, never an OS thread. Two spawned sleep_ms(80) tasks complete in ≈82 ms. Mark-and-sweep GC, SSE streaming, secure WebSocket (wss://), channels, Mutex, RwLock, semaphores.

Fully Bootstrapped Compiler

All 11 compiler source files self-host. 36,871 lines of Kern via LLVM. Generics shipped: selective monomorphization for stdlib hot paths (List<T>, Map<K,V>, Result<T>, Option<T>, Decimal) emitted as linkonce_odr typed wrappers; @monomorphize opt-in for user code. Module visibility (pub/private), auto-derive (Eq, Hash, Clone, Display, Debug), “Did you mean?” suggestions, DWARF debug info, kern doctor.

Integrated Toolchain

15-feature LSP (go-to-definition, references, rename, semantic tokens, inlay hints). 1,042 tests at 100% pass rate (807 conformance, 235 negative; both gates CI-blocking). 5 libFuzzer targets plus a structure-aware parser fuzzer harness (tools/fuzz_parser.sh, five mutators) waiting out its 24 h soak. ASAN/UBSAN/TSAN sanitizers in CI. Reproducible builds verified byte-for-byte identical via SOURCE_DATE_EPOCH. 6 cross-compilation targets, CycloneDX 1.5 and SPDX 2.3 SBOM, GDPR Art. 30 records.

Pipe-First & String Interpolation

Data flows left to right — readable like Python. "Hello ${name}" string interpolation, int()/float() conversions, and default field values make code concise without sacrificing clarity.

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 E0091: PersonalData<str> cannot be
    # passed without a valid ConsentRecord

# The only way to use personal data:
fn send_email_safe(user: User):
    email = user.email.access(
        reason:  "send welcome email",
        consent: user.consent_record
    )
    analytics.track_event("signup")  # OK
    send(email, "Welcome!")         # OK

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
  • user.forget() implements GDPR Article 17
service.kern
import net.http
import std.cloud.health
import std.cloud.telemetry

# A cloud-native HTTP service in 15 lines

async fn handle_user(req: http.Request) -> http.Response:
    id   = req.params.get("id")?
    user = await db.find_user(id)?
    return http.ok(user)

fn main():
    server = http.Server(port: 8080)
    server.get("/users/:id", handle_user)
    server.with(telemetry.middleware())
    server.with(health.check("/healthz"))
    server.listen()

Cloud-native by default

Health checks, structured logging, and distributed tracing are part of the standard library — not afterthoughts bolted on via third-party packages.

  • Built-in OpenTelemetry tracing
  • Kubernetes-ready health probes
  • Pipe-friendly middleware composition
support_agent.kern
import std.ai.agent as agent
import std.ai.llm as llm

# AI agent with tools, memory, and privacy
# EU AI Act audit logging is automatic.

async fn main():
    support = agent.Agent(
        name:   "support-bot",
        model:  llm.ollama("mistral"),
        system: "You help users with kern.",
        tools:  [search_docs, create_ticket],
        memory: agent.memory(max_turns: 50)
    )

    result = await support.run("How do I deploy?")?
    print(result.text)
    print(result.audit_log)  # EU AI Act

Multi-provider LLM with audit trail

Built-in LLM API proxy for Claude, OpenAI, Mistral, and Ollama. Qdrant vector DB for RAG. PersonalData passed to any LLM is a compile error — taint propagation tracks it across assignments. BLAKE2b cryptographic event logs for tamper-proof audit trails.

  • Claude, OpenAI, Mistral, Ollama in stdlib
  • Qdrant vector DB & RAG pipelines
  • PersonalData taint propagation
  • BLAKE2b audit logs & EU AI Act compliance

1.0-grade implementation.
Independently verifiable.

0 tests, 100% pass 807 conformance + 235 negative. Both gates CI-blocking. 5 libFuzzer targets + parser fuzzer harness.
0 stdlib modules gRPC, HTTP/2, SSH, OAuth2, SSE, wss://, PostgreSQL, Redis, OCI v2, cloud KMS, CapTP, 1,961 public functions
11/11 compiler files bootstrap 36K-line self-hosted compiler. 44K-line C runtime with a per-thread value-root GC stack, verified race-free under ThreadSanitizer. Self-bootstraps from source in about a minute, where it once OOMed near 145 GB. Generics + async codegen on the same ABI.
0 US dependencies Zero CLOUD Act exposure. Full European supply chain. EU-sovereign cloud KMS providers.

A real backend toolbox.
Not a language demo.

Backends need TLS, a database, an auth scheme, metrics, and config — not a roadmap. kern's standard library ships with all of them, no third-party packages required. Recently landed:

v1.0.0-rc2, and what the label means honestly

The language implementation is 1.0-grade: it self-hosts, the full suite is green (807 conformance + 235 negative, 1,042 tests at 100% pass; both gates CI-blocking), the concurrency model is race-free (thread-safe GC, ThreadSanitizer-verified) and the build is locally reproducible byte-for-byte. The release-candidate label is deliberate: the project's headline goal is verifiable trust, and that program is mid-roadmap — Steps 2 to 7 of 12 are done; cap-audit tooling, sound flow analysis, supply chain, formal proofs and the external audit remain. The conformance and negative suites are CI-blocking gates, but reproducibility is still checked by hand, not a per-commit CI gate. Reproducibility has moved past single-machine, though: the compiler IR is now byte-for-byte identical across two machines and two operating systems (all 102 .ll files match on macOS and Linux, manually verified 2026-07-13), with the end-to-end binary byte-identical on the Linux box. So the trust claims are real but not yet gated by per-commit CI or externally audited. The live TRUST.md dashboard tracks exactly what is and isn't verified; 1.0.0 final follows CI enablement and a soak. The flagship privacy claim, PersonalData<T> to AI is a compile error, now extends to every sink: display, file, database and HTTP, not just the LLM call.

On main since rc2: the type system is the seccomp profile

Every Kern binary now seals itself, before user code runs, to a seccomp-BPF filter that permits only the syscalls its capability set grants, and that set is derived by the compiler from the program's own types. A program that never mints Cap<Net> gets a kernel that denies socket(); one that never mints Cap<Process> cannot execve. E0404 already made ambient authority a compile error; the sandbox makes the same guarantee kernel-enforced at runtime, so a later RCE cannot exceed what the type system permitted. Nothing to configure, installed with NO_NEW_PRIVS so a spawned process inherits the filter. Self-hosting survives the seal: the compiler seals itself to FS|PROCESS and still bootstraps the next generation, running clang under the inherited filter. Landlock completes the filesystem story: the seccomp gate decides whether a program may open files, KERN_SANDBOX_FS_RO/RW decide which paths, layered on the seal and a clean no-op on kernels without Landlock.

On main since rc2: object-capability mesh and forensic record-replay

A Kern service's identity on the network is now the SHA-256 of its own reproducible binary: kern_attest_self_hash() measures the running executable, so peers recognise a service by a hash they can rebuild themselves, with no certificate authority. Ed25519-signed challenges prove liveness, capability tokens carry what a caller may ask, the compiler injects a per-call guard on RPC serve, and the server attests back in an X-Kern-Server-Attest header. The mesh is bidirectional: the token proves who is calling and what they may ask, the attestation proves which build is answering. Unset config means disabled, fully backward compatible. Forensic record-replay welds nondeterminism to the audit chain: KERN_RECORD captures every clock read and random draw to a SHA-256-chained trace, KERN_REPLAY re-executes the incident run with byte-identical inputs, and kern_replay_verify() detects a trace edited after the fact. Built for DORA/NIS2 incident reconstruction, and a debugging tool for the heisenbug class.

On main since rc2: rootless containers and managed TLS

The container engine's full mode (host bridge, veth pairs, NAT, inter-container networking) now runs for a non-root launcher: install-caps.sh grants cap_net_admin,cap_sys_admin to the binary once, the Docker-daemon privilege model but daemonless, and every later run by any user gets full networking. True-rootless mode adds inbound port publishing, AppArmor userns profiles and cgroup delegation (box-validated on cgroups v2), and compose service DNS resolves container names in capability and rootless mode. On the TLS side, serve_tls_managed(domain, handler) is a drop-in Caddy replacement: a built-in ACME v2 client (Let's Encrypt) issues the certificate end to end, including PKCS#10 CSR generation, and auto-renews it in the background. HTTPS without a reverse proxy, a cert file, or a cron job.

v1.0.0-rc2, static file serving and safe long-lived state

http_static(prefix, dir) now actually serves files, over both plain HTTP and HTTPS (it was a no-op that recorded the mount but never read it). Content type is set by extension, index.html is served for directories, requests are GET/HEAD only, and a strict path-traversal guard rejects any .. with a 403 before a file is ever opened (verified it will not serve /etc/passwd); the TLS path was refactored around a write sink so the same implementation serves plaintext and TLS sockets correctly. persist(s) is the epoch-GC escape hatch: under request-scoped GC (KERN_HTTP_EPOCH_GC) every object allocated during an HTTP request is reclaimed at request end, so a request-derived key stored into a long-lived global map (a rate-limiter's client-IP table, a cache) would dangle; persist copies the bytes onto the permanent heap so they survive, implemented as a thread-local allocator redirect that leaves epoch and collection semantics untouched.

v1.0.0-rc2, adopter tooling: version pinning and a Docker-independence attestation

Two adopter-requested tools turn claims into checks. A one-line .kern-version file pins the toolchain: kern build / run / check compare it to the running compiler and print warning: kern-version-mismatch when a compiler upgrade or a stale binary drifts from what the project expects (warning-only, so it never breaks a build; CI that wants hard enforcement greps for the line). kern audit-docker <file> walks a program's full resolved import graph and reports whether it takes any Docker dependency (an import of sys.docker, which shells out to the docker CLI, or a /var/run/docker.sock reference): a clean program prints audit-docker: PASS, a Docker dependency is FLAGGED and the command exits non-zero so CI can gate on it. “Docker-free” becomes auditable: a Kern binary is native and links no Docker client.

v0.9.0-rc2, injection prevention as a syntactic category

The OWASP injection family is eliminated at the level of the grammar, not patched at runtime. Five @<kind>_literal annotations (@sql_literal, @shell_literal, @url_literal, @regex_literal, @template_literal) require the decorated argument to be a string literal at every call site, so a query or command built from user input does not type-check. A Url<Trusted, Untrusted> type-state closes SSRF for URLs built at runtime: parse_url yields Url<Untrusted>, and only trust_url(raw, allowed_hosts) promotes it after a host-allowlist check. @url_literal also rejects any literal that does not start with https://. The promise is concrete: an AST shape an attacker would need to land the bug does not exist in valid Kern source.

v0.9.0-rc3, SQL checked against your schema at compile time (E0311)

Injection prevention stops a query built from user input from type-checking. The typechecker now goes one step further and validates the SQL itself against your declared schema, before the program runs. A query against a table that does not exist, or a SELECT / INSERT naming a column that is not in that table, is a compile error (E0311) — not a 500 in production at 2am. The whole class of “typo in a column name” and “migration drifted from the code” bugs moves from runtime to kern build. Combined with the @sql_literal rule, a Kern SQL statement is checked for both injection safety and schema correctness at the same compile step.

v0.9.0-rc3, a self-contained container engine (no docker, no podman)

The container subsystem used to shell out to a host Docker or Podman. It is now a complete OCI engine compiled into the language. It pulls and runs real images (debian:bookworm-slim, alpine:3.19) with nothing on the host but the Kern binary, a Linux kernel 5.15 or newer, and libc. No docker, podman, runc, crun, skopeo, iptables, nft or iproute2 required. HTTPS and tar extraction run in-tree (vendored mbedTLS plus a statically linked libarchive). Network setup is hand-rolled netlink (RTM_NEWLINK / NEWADDR / NEWROUTE), and outbound NAT installs an inet kern_nat nftables table directly over NFNETLINK_NFT. oci_pull_image_verified() checks a cosign-compatible Ed25519 signature and pins the manifest digest. A build gate (make check-container-no-shellout) fails if popen or system appears in the container runtime sources, and a CI leg apt-purges every shellout binary before running the suite under an strace execve tripwire.

Containerisation milestone: Linux boots on Kern's hypervisor

The container engine now extends beyond Linux namespaces. On macOS, Kern boots a full Linux kernel via Apple's Virtualization.framework — ARM64 with GIC emulation, virtiofs file sharing, and virtio-console. Multi-container lifecycle works on macOS: cgroups v2, NAT networking, log capture, and port forwarding, all running inside the VM. On Linux, containers run directly via namespaces as before. Production deploys still need only the Kern binary + Linux kernel 5.15+ + libc, but development on macOS now runs real Linux containers without Docker Desktop.

Hardening milestone: capability-secure core (compile error E0404)

All authority-bearing entry points — network, filesystem, process, FFI, environment access — now require explicit Cap<T> capabilities. Only the entry module can mint root capabilities; every other module must receive them as arguments. Compile error E0404 enforces this unconditionally. The entire conformance suite threads capabilities. Combined with the five @literal injection rules, kern's security model covers both ambient authority and injection attacks at compile time — two of the three classic attack surfaces (the third, memory safety, is mitigated by the GC and stack guards).

Generics + async — landed on a stable ABI

Generics (v0.7): selective monomorphization for stdlib hot paths — List<T>, Map<K,V>, Result<T>, Option<T>, Decimal — emitted as linkonce_odr typed wrappers so multiple compilation units share them without link conflicts; @monomorphize opt-in for user code; type-erased fallback. Async (v0.8): real spawn/await codegen, cooperative kern routines (16 KB guard-paged stack, configurable via KERN_ROUTINE_STACK_SIZE), routine-aware libuv IO (file/DNS/TCP), routine-aware libpq + mbedTLS, spawn_thread for CPU-bound work via the libuv worker pool. Two spawned sleep_ms(80) tasks complete in ≈82 ms. ABI-breaking decisions are now behind us, not ahead.

Also shipped: kern-pkg, cloud KMS, chain-hashed audit

kern-pkg ported to Kern (full surface): init / build / run / test / add / remove / verify / install / publish / search / update with manifest [dependencies] / [dev-dependencies] parsing. The Python shim is gone. EU-sovereign cloud KMS providers: KERN_KMS_PROVIDER routes kms_encrypt / kms_decrypt to Scaleway (EU-native), Azure Key Vault (with AAD bearer cache), or an OVH stub; local AES-256-GCM remains the default. Chain-hashed AI audit log: every record carries prev_hash + record_hash (SHA-256 over the previous hash plus canonical body); kern_ai_audit_verify() replays the file and refuses appends if any link mismatches, and the kern ai-audit verify CLI runs that replay from the shell. This closes the EU AI Act traceability gate.

TLS & HTTPS

End-to-end encryption via mbedTLS. https_serve, https_post, and tls_gen_self_signed live in net.http. No OpenSSL, no Rustls.

PostgreSQL

First-class libpq client in db.postgres. Real connections, parameterised queries, atomic transaction batches, LISTEN/NOTIFY, and a pool with per-query timeouts and utilisation metrics — finally stop bridging through Python. SQL is schema-checked at compile time (E0311).

JWT & libsodium crypto

HS256 JWT, base64url, and production-grade crypto via libsodium — Argon2, ChaCha20-Poly1305, Ed25519, X25519, BLAKE2b. The same primitives Signal uses.

Prometheus metrics

Counters, gauges, and histograms exported in OpenMetrics text format. Scrape-ready from any kern HTTP server with one import. The DB connection pool publishes its own gauges — size, in-use, idle, and waiting — so pool saturation shows up on a dashboard, not in a postmortem. SLOs without third-party agents.

gRPC & HTTP/2

Real gRPC with protobuf wire format, verified against grpcbin Docker. HTTP/2 client via nghttp2. SSH, NATS, and S3 with AWS Sig V4 — all in the standard library.

Ed25519 signed releases

Every release binary is signed with Ed25519 via libsodium. sign_file and verify_file in the stdlib. Verifiable builds from a European supply chain.

Kern routines (green threads)

Assembly context switching with guard pages and stack pools. 100,000 concurrent routines in 133ms. Lighter than goroutines, safer than threads. Production-ready concurrency without a garbage collector.

OAuth2, migrations & cron

OAuth2 authorization flows, database migrations, background job scheduling, and cron in the stdlib. Query builder with pagination. Go-parity ecosystem features without third-party packages.

BLAKE2b audit log & DORA/NIS2

Append-only BLAKE2b chain hash with flock(2) per append, periodic fsync, and full chain re-verification on open — tamper detection plus crash safety. std.compliance maps each runtime operation to GDPR Art. 5–44 / DORA Art. 5/9/10/11 / NIS2 Art. 21/23 with consent validation, classification, and adequacy/SCC checks for cross-border transfers.

CycloneDX SBOM & EU CRA

kern sbom generates CycloneDX 1.5 JSON listing all runtime dependencies — libkern_bridge, libuv, libsodium, mbedTLS. Compliance-scanner ready for the EU Cyber Resilience Act. Stack protector (-fstack-protector-strong) enabled on all binaries.

Decimal — exact base-10

std.decimal ships a real Decimal struct on top of arbitrary-precision integers. Parse, format, add/sub/mul/div, six rounding modes (HALF_EVEN/UP/DOWN, CEILING, FLOOR, DOWN, UP), locale formatting (en_US/de_DE/nl_NL/fr_FR), currency (€/$/£), JSON round-trip. IEEE-754 floats are not acceptable for currency, taxation, or regulatory reporting — this unblocks finance and government deployment.

LLM & Qdrant resilience

Per-provider circuit breaker (opens after 5 consecutive failures, stays open 30 s, then admits a single half-open probe), bounded retry (3 attempts) with exponential backoff + jitter, JSON sanity-check on every response. Thread-safe via C11 atomics. Wraps both kern_llm_api_call and kern_qdrant_request. Production resilience, not best-effort.

Event log durability

kern_eventlog_open verifies the BLAKE2b chain before accepting any new append — refuses to open a tampered log. Each append takes an exclusive flock(2). Default fsync every 16 appends; tune with eventlog_set_fsync_interval or force with eventlog_sync. Multi-process safe, crash-safe.

SSE production polish

sse_send_heartbeat emits comment frames to keep idle connections alive across reverse proxies. sse_send_event_id writes the id: line so clients can reconnect via Last-Event-ID. Server-Sent Events that survive real network paths.

net.tls passive audit

TLS version validation, cipher suite classification (forward-secrecy / AEAD / BSI TR-02102-2), connection audit reports, strict policy enforcement (TLS 1.3 + AEAD + FS). The German Federal Office for Information Security's cipher-suite recommendations, codified in the standard library.

std.compliance article mapping

Operations (collect / store / process / transfer / delete / access / encrypt) map to specific GDPR Art. 5–44, DORA Art. 5/9/10/11, and NIS2 Art. 21/23. Consent validation, data classification (standard / sensitive / special-category), cross-border transfer checks (adequacy / SCCs), retention recommendations, audit entries — auditor-readable, not lawyer-readable. std.compliance.render_art30_register() emits a GDPR Art. 30 record-of-processing-activities document.

kern-pkg — ported to Kern

The package manager is no longer a Python shim. init / build / run / test / add / remove / verify / install / publish / search / update all run on Kern. Manifest [dependencies] / [dev-dependencies] parse into a typed List<Dependency>. Lockfile read/write with chain-integrity verify. Closes the toolchain self-hosting gate.

EU-sovereign cloud KMS

Secure<T, State> with KERN_KMS_PROVIDER env routing to Scaleway (EU-native, fr-par/nl-ams) or Azure Key Vault (with AAD bearer-token caching). OVH stub awaits real-account exercise. Local AES-256-GCM via mbedTLS remains the default. The compile-time IO-sink check rejects Secure<_, Plain> flowing into db_* / http_* with a clear diagnostic.

Self-contained container engine

oci_run_image() pulls and runs real OCI images (debian, alpine) with nothing on the host but the Kern binary, a Linux kernel 5.15+, and libc. No docker, podman, runc, skopeo, iptables or iproute2. Namespaces + cgroup v2 + overlayfs + pivot_root for isolation, hand-rolled netlink and native nftables NAT for networking, all in-tree. oci_pull_image_verified() checks a cosign-compatible Ed25519 signature and pins the manifest digest. A source-level build gate refuses any popen or system shellout in the runtime.

Capability-secure core (E0404)

All authority-bearing entry points — network, filesystem, process, FFI, environment — require explicit Cap<T> capabilities. Only the entry module can mint root capabilities; every other module must receive them as arguments. Compile error E0404 enforces this unconditionally. 9 capability modules: cap_net, cap_fs, cap_db, cap_process, cap_ai, cap_container, cap_kms, cap_random, cap_time.

CapTP — distributed capabilities

Object-capability transfer protocol for distributed systems. 7 modules: codec, in-process transport, message framing, network layer, promise pipelining, vat state management, and Ed25519 signed gift tokens. Capability security that extends across network boundaries — not just within a single process.

Kern hypervisor (macOS)

Linux boots on Kern's own hypervisor — ARM64 via Apple's Virtualization.framework with full GIC emulation, virtiofs file sharing, and virtio-console. Multi-container lifecycle works on macOS without Docker Desktop: cgroups v2, NAT networking, log capture, and port forwarding inside the VM. container_run_image on macOS now runs real Linux containers.

Chain-hashed AI audit log

Every record carries prev_hash + record_hash (SHA-256 over the previous hash + canonical body). On open, kern_ai_audit_verify() replays the file and refuses appends if any link mismatches. The event-log verifier also recomputes each record's hash from seq | ts | type | data | prev_hash and rejects tampered payloads even when the chain link is kept consistent. Tamper-evident by construction — closes the EU AI Act gate.

Generics — selective monomorphization

Stdlib hot paths — List<T>, Map<K,V>, Result<T>, Option<T>, Decimal — emit monomorphized typed accessors as linkonce_odr, so multiple compilation units share them without link conflicts. Generic call sites compile to the monomorphized typed wrappers when available; type-erased path is the fallback. @monomorphize annotation is the opt-in marker for user-level generics.

Async — spawn, await, spawn_thread

Direct spawn f(args...) synthesizes a per-call-site wrapper plus kern_async_coro_spawn. await <task> calls kern_async_coro_await and unboxes the typed return. Bodies run on cooperative kern routines (16 KB guard-paged stack, configurable). await from inside a routine parks it on the awaitee — no OS thread held during suspension. kern_sleep_ms and routine-aware libuv file/DNS/TCP IO yield cooperatively. spawn_thread routes CPU-bound work onto the libuv worker pool. Two spawned 80 ms tasks complete in ≈82 ms.

Parser fuzzer harness

tools/fuzz_parser.sh <seconds> runs a corpus-mutating, structure-aware driver over tests/conformance/*.kern with five mutators (bit flip, insert, delete, truncate, token splice). Smoke run: 521 iterations / 0 crashes / 0 timeouts in 120 s. CI gate command for v1.0: tools/fuzz_parser.sh 86400 — the 24 h soak is the one remaining code-side gate.

Resilience hardening

LLM proxy: 60 s socket timeout (SO_RCVTIMEO/SO_SNDTIMEO) on the shared HTTPS-with-headers path, layered on the per-provider circuit breaker + 3-attempt retry + jitter. Qdrant client: 30 s socket timeouts + kern_qdrant_health() readiness/liveness probe. WebSocket: stdlib connect_with_backoff() (200 ms base, doubling, capped at 30 s, ±25% jitter) + send_resilient(). Event log: fcntl exclusive lock per append + tunable fsync interval.

Faster than Go, Node, and Python.
On these five workloads.

Five backend workloads. Same algorithm, same data sizes, only the standard library of each language. No JIT pre-warming, no micro-tuning, and Go runs as a native arm64 binary — no emulation handicap. kern takes all five against Go, Node.js, and Python. These are micro-benchmarks, not real-world applications — but they measure what the stdlib actually ships. The hash benchmark compares kern's BLAKE2b (software) against Go's hardware-accelerated SHA-256; both are what the stdlib gives you by default. Methodology and reproducible runner are in the repo.

Workload kern vs Go vs Node.js vs Python
Fibonacci recursive, n=35 54 ms 1.5× faster 1.9× faster 16× faster
JSON encode 100k iterations 29 ms 2.9× faster 1.8× faster 6.3× faster
Hash 1M iterations, BLAKE2b vs SHA-256 261 ms 1.2× faster 1.7× faster 1.4× faster
File I/O 10k write+read cycles 504 ms 1.1× faster 1.1× faster 1.2× faster
HTTP 1k sequential GETs 154 ms 1.4× faster 1.5× faster 1.2× 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.

Single run preceded by a discarded warm-up, single machine (macOS arm64, Apple Silicon), wall-clock milliseconds, release builds. Go is a native arm64 binary (Go 1.26); Node 22, Python 3.11. The CPU rows are single-process and single-core; run-to-run variance on a laptop is ±5–15%. Hash compares kern's BLAKE2b (libsodium, software) against each stdlib's SHA-256 — on arm64 that means Go gets hardware acceleration while kern does not, yet BLAKE2b's algorithmic advantage still leads. Micro-benchmarks are not real workloads; these numbers are signals, not proof. The runner skips any toolchain that isn't installed. Re-run the suite yourself with ./benchmarks/run_all.sh. Last measured 2026-06-20.

Up and running in seconds.

1

Install kern

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

Create a project

terminal
$ kern new my-service
  Created project `my-service` in ./my-service
$ cd my-service
3

Run it

terminal
$ kern run
   Compiling my-service v1.0.0-rc2
    Finished in 0.08s
    Running `target/release/my-service`
Server listening on :8080

European infrastructure.
No US jurisdiction. Period.

Every component of kern's toolchain is hosted, governed, and operated in Europe. No CLOUD Act. No FISA 702. No executive order can compel access to your supply chain. This is the foundation for sovereign digital infrastructure that outlasts any political cycle.

Component Provider Country
Source codeCodebergGermany
Package registrypkg.kern-lang.eu (OVH/Scaleway)France
CI/CDWoodpeckerGermany
Domain & DNSTransIPNetherlands
Static hostingCodeberg PagesGermany
Default cloud LLMMistralFrance
Default vector DBQdrantGermany
Default local LLMOllamaOpen source

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.

If your institution needs software that no foreign jurisdiction can compel, surveil, or shut down, kern is the backend language where European sovereignty is compiled in. v1.0.0-rc2 is a 1.0-grade implementation (self-hosting, full suite green, race-free, reproducible) on the way to verifiable trust: 1,042 tests at 100% pass, capability-secure core with compile error E0404 for ambient authority, a capability-derived seccomp sandbox so the kernel enforces at runtime exactly the authority the type system granted, injection prevention as a compile error, a self-contained container engine with its own hypervisor that needs no docker or podman and now runs without root, generics + async + Secure<T, State> on a stable ABI, EU-sovereign cloud KMS, chain-hashed AI audit log, CapTP distributed capabilities, multi-provider LLM with circuit breakers, Qdrant with health probes, DORA/NIS2 runtime compliance, CycloneDX 1.5 and SPDX 2.3 SBOM, GDPR Art. 30 records. 272 stdlib modules, 1,961 public functions. Zero US dependencies. Production infrastructure for the institutions that define Europe's future.