API stability matrix

June 10, 2026 ยท View on GitHub

Updated: 2026-06-10

This document classifies go-joker public namespaces and major user-facing surfaces by stability. It is intentionally conservative: a namespace can be useful and well-tested while still being marked beta if its API shape may change. Its presence is guarded by make docs-check so new public surfaces have a canonical place to be classified.

Stability levels

LevelMeaning
StableExpected to remain source-compatible across patch releases. Changes should be additive or clearly documented.
BetaUsable and tested, but API shape may still evolve as examples and real usage harden edge cases.
ExperimentalUseful for advanced users, diagnostics, or performance experiments. Breaking changes are acceptable with release notes.
Internal/diagnosticPublic enough to inspect or debug the runtime, but not a general application API commitment.

Core language/runtime

SurfaceStabilityNotes
joker.core Clojure-like basicsStableCurated parity matrix is currently 271/271 pass.
Reader syntax and core data literalsStableStill receives edge-case hardening; breaking syntax changes should be avoided.
Persistent collections and scalar typesStableObject/protocol contracts and collection contracts guard behavior.
Concurrency primitives (future, promise, agent, channels, alts!, timeout)StableGIL-free/runtime concurrency behavior is guarded by runtime contract tests.
Tail-call/recur behaviorStableImportant scripting/runtime behavior; regression sensitive.

Standard namespaces

NamespaceStabilityNotes
joker.osStableCore scripting surface; native-boundary tests cover process/filesystem behavior.
joker.filepathStableCore scripting surface.
joker.ioStableCore scripting surface.
joker.stringStableCore scripting surface; string bounds/version parsing are guarded.
joker.mathStableNumeric helper surface; native-boundary contracts exist.
joker.strconvStableParse/format helpers; native-int behavior audited.
joker.timeStableDuration/time conversion guardrails exist.
joker.jsonStableCommon serialization surface.
joker.yamlBetaUseful std surface; less central than JSON/EDN.
joker.edn / ednStableCore data interchange for Joker workflows.
joker.transitBetaUseful and tested; bounded fuzz smoke covers decode robustness, but edge cases depend on Transit semantics.
joker.base64StableSmall RFC 4648 encoding/decoding API.
joker.hexStableSmall hexadecimal encoding/decoding API.
joker.cryptoStableCommon helper surface; avoid semantic churn.
joker.uuidStableSmall focused API.
joker.randomStableCommon scripting helper.
joker.logStableSmall focused API.
joker.csvStableNative-boundary options are guarded.
joker.urlStableURL parsing behavior guarded.
joker.httpBetaUseful Ring-style client/server surface with WebSocket/SSE extensions; request-map fuzzing exists, but long-running service hardening should remain explicit.
joker.http.routerBetaPure Joker routing layer; useful but not a core compatibility surface.
joker.markdownStableSmall GFM conversion API.
joker.htmlStableSmall HTML escape/unescape API.
joker.hiccupBetaUseful markup rendering surface; syntax expectations should track examples and docs.
joker.imagingBetaBroad and actively extended; procedural raster helpers, WebP decode, hashes, and native image operations are useful but API growth should be curated.
joker.svgBetaUseful generation/raster surface; coordinate guards exist.
joker.pdfBetaUseful document generation surface; native-boundary arity/dimension guards exist.
joker.termBetaRaw terminal/ANSI/key API is useful and example-backed; keep flags/key semantics source-compatible where possible, but terminal behavior remains platform-sensitive.
joker.boltBetaEmbedded database API; useful but depends on bbolt semantics and filesystem behavior.
joker.gitBetaRepository manipulation API; useful but depends on go-git behavior and external repository shape.
joker.setStableClojure-compatible set helpers; core data-structure behavior should remain compatible.
joker.walkStableGeneric data walker; small Clojure-compatible utility surface.
joker.pprintStablePretty-printing utilities; output formatting should avoid gratuitous patch-release churn.
joker.better-condStableMacro utility surface ported from common Clojure usage.
joker.templateStableMacro template helpers; small compatibility-style surface.
joker.testBetaUseful in-repo/user testing framework; keep common assertions stable, but runner/reporting details may evolve.
joker.tools.cliBetaCommand-line parsing helpers; option semantics should be documented before marking stable.
joker.replInternal/diagnosticInteractive REPL utilities; useful at the prompt, not a broad application API commitment.
joker.systemStableSystem/runtime helper surface.
joker.runtimeInternal/diagnosticRuntime inspection/profiling/memory controls; useful but not a portable app API commitment.
joker.jitExperimentalIR/WASM compiler surface. Powerful, but compiler patterns, diagnostics, host imports, and fallback behavior are still maturing.
pods / babashka.podsBetaCompatibility-oriented surface; depends on external pod protocols.

CLI surfaces

Command/surfaceStabilityNotes
joker script executionStablePrimary CLI mode.
No-argument REPL startupStableRegression tested after startup namespace fixes.
joker docStableMarkdown/JSON lookup and local docs server.
joker notebookBetaRich and heavily tested; trusted local execution model, browser UI, auth/readonly flags, and recovery/snapshot behavior are still evolving.
joker notebook run/export/status/deps/snapshotsBetaUseful automation surface; preserve flags where possible and treat EDN notebook file compatibility as user-visible.
joker --lintStableImportant development tool.
joker --compile / standalone compile pathsBetaMore specialized; short-write and runtime behavior are guarded.

Examples as supported surfaces

ExampleStabilityNotes
examples/graphics/fractal-flame.jokeBetaDemonstrates joker.jit/compile-wasm + joker.imaging/from-rgba32-domain-fn; also a WASM bridge smoke surface.
examples/games/tetris.jokeBetaDemonstrates joker.term; interactive by nature, only lint/syntax is easily automated.
examples/wiki/static.jokeBetaDemonstrates static build and dynamic serving; smoke-tested through examples-check.
examples/notebooks/*.ednBetaNotebook checks validate sample notebooks.

Policy

  • New public namespaces should be added here before release.
  • Stable namespaces should avoid breaking changes in patch releases.
  • Beta namespaces may change, but changes should be documented in release notes.
  • Experimental namespaces can change when compiler/runtime work requires it, but regressions should become tests.
  • Internal/diagnostic namespaces should not be advertised as general application APIs.