IronKernel 0.6.0 — the editor release
2026-08-23. This release turns the runtime’s own machinery outward into tooling: a language server that resolves instead of guessing, diagnostics that survive a half-typed buffer, environments you can finally see, and a persistent evaluation session. The design is recorded in ADR 0009 — editor tooling grows from the runtime outward, and every piece below is a phase of it.
A language server in the runtime
ik lsp starts a Language Server Protocol server inside the IronKernel
binary — the same parser, analyzer, and bootstrapped environment your programs use. The
distinction that defines Kernel finally shows up correctly in your editor: operatives and
applicatives are colored by resolving the binding, not by matching a name
list. Define your own operative and it gets the operative color at every use site:
semantic tokens know what twice is
(define twice (vau (x) e (eval x e) (eval x e)))
(twice (print "again")) ; twice colors as an operative — it is one
Hover shows a combiner’s contract — (+ number number …) → number — pure, certified —
completion offers what is actually in scope (your buffer’s defines included), and diagnostics
arrive on every keystroke. The VS Code extension starts the server automatically in trusted
workspaces; any editor that speaks LSP can do the same.
Diagnostics that recover
ik check --json emits machine-readable diagnostics with exact source spans — a
versioned contract shared by the language server and anything else you build. And the reader
now recovers: a broken form no longer swallows the rest of the file. Every
broken region reports its own error, the forms that parse still produce trees, and the form
you are actively typing is completed with its unclosed brackets so completion and highlighting
keep working mid-edit.
every region, not just the first
$ ik check broken.ikr
Check error: broken.ikr:1:1: Parse error: …
Check error: broken.ikr:3:1: Parse error: …
The environment, visible
Three new applicatives — extensions alongside clr-opens, available under every
profile — make environments inspectable from Kernel:
enumeration, not authority
(environment-local-symbols e) ; the frame's own bindings, sorted
(environment-symbols e) ; everything visible from e
(environment-capabilities e) ; e.g. (host-io (generated-clr "safe"))
They return names and information, never parent environments as values — the
environment type stays encapsulated, so visibility does not become mutation authority.
On top of them: tab completion in the REPL, an environment view
in VS Code (capabilities, your buffer’s frame, and every frame beneath it, contracts as
tooltips), and a profile status bar that shows the active capability profile —
and flags when it overrides the project’s own <IronKernelProfile>.
Sessions
ik session is a persistent evaluation session over framed JSON-RPC: definitions
persist between evals, everything the program prints travels in the response, and errors are
structured data — message, rendered diagnostic, and spans — instead of text folded into
stdout. In VS Code, Eval Selection in Session gives you a REPL that lives
inside your editing session. The debug adapter will ride this protocol; the ADR records
exactly what it still needs.
Two new packages
IronKernel.Math
brings statistics, combinatorics, and number theory — exact wherever the mathematics allows:
means as ratios, isqrt and factorial at any size, primes and
factorizations.
IronKernel.Time
brings dates and durations over System.DateTime/System.TimeSpan,
with UTC-disciplined instants the arithmetic tower adds and subtracts directly.
One breaking change
show now renders a value to a string instead of printing it —
what its name always promised. It is pure, needs no host authority, and works under every
profile. Code that used bare (show x) to print should say what it means:
rendering and printing are two jobs
(show (list 1 2)) ; ⇒ "(1 2)" — a string, nothing printed
(print (show (list 1 2))) ; prints (1 2) — the idiom that used to be an arity error
Get it
Self-contained binaries for Linux, Windows, and macOS (arm64 and x64) — plus the
ik tool and SDK packages — are attached to the
v0.6.0 release.
The VS Code extension builds on every push; grab the VSIX from CI and install it with
Extensions: Install from VSIX… — see the
getting-started guide for runtime discovery.