SAFE + FAST · BUILT FOR AI-GENERATED SOFTWARE
Safe code. Built for machine speed.
Kotoba is a Lisp-shaped language designed for safe, ultra-fast AI-generated software. Inspectable programs, explicit capabilities, and content-addressed artifacts connect compiler checks to controlled execution.
;; W1 pure representative: ordinary Clojure-shaped values/functions only.
(ns examples.w1-pure)
(defn double [n]
(+ n n))
(defn main []
(double 21))
-
source CID
bafkreiaeohkv2zu…IPFS CIDv1 · raw · sha2-256 of hello.kotoba -
source SHA-256
0471d55d668ed5f9…sha-256 of the exact file shown here -
checked KIR SHA-256
92635333e1e0da86…the typed, effect-checked representation the compiler admitted -
artifact identity SHA-256
cfea3b89cc022a6b…binds source, policy, compiler contract and target ABI
The source CID opens hello.kotoba. The SHA-256 digests identify source bytes, checked KIR, and artifact identity; they are not IPFS addresses.
Fastest cold build of any toolchain on this host.
11.75ms
Kotoba source to a WebAssembly artifact, process-cold — then executed, and the answer checked after the clock stopped.
Process-cold build wall time in milliseconds; shorter is faster. K=1 source, lanes interleaved on one host, 7 samples each.
All 4 orderings pass perfgate at its unrelaxed default policy — at least 5% and separated from the arms' own spread — so the ordering holds even though the host was busy. Bounded to this host, this source size and this run: build time is not execution speed, the advantage narrows as the source grows, and the released binary has a hard correctness ceiling. All five benchmarks, including the ones that go against Kotoba, are below. Measured 2026-08-31 on Apple M4.
When AI generates, builds, tests, and regenerates code continuously, build latency becomes infrastructure throughput.
No ambient authority
No implicit filesystem, network, process, clock, model, or secrets.
Authority survives compilation
Types, effects, resources, and target support are admitted before emission.
Only the grant is bound
The host and provider enforce concrete scope and record the decision.
No classical-only downgrade
New encryption and publication boundaries require ML-KEM or ML-DSA evidence and reject stripped PQ material.
AI can write faster than humans can review
Generated code may be useful and still reach a file, network, secret, process, model, or payment surface the request never intended to expose.
Build broadly, constrain later
A general-purpose program starts with ambient semantics. Sandboxes, IAM, containers, policy, and signing are added around it to recover the intended boundary.
Grant narrowly, then compile
Effects and capabilities are part of the admitted computation. If the target cannot prove and bind the grant, it does not emit or run the artifact.
Kotoba complements runtime and OS isolation; it does not make those layers unnecessary.
Where Lisp's mind and GP 2's graph rewriting meet Rust's discipline
Kotoba is a small, data-oriented, Clojure-shaped language. Its design draws on Lisp's code-as-data tradition and GP 2's rule-based graph rewriting, with static discipline around authority, effects, resources, packages, and artifact identity.
Code as readable data
Immutable values, ordinary functions, explicit data, and a composable syntax are easy for humans and models to produce and inspect.
Say what may happen
Effects, capabilities, resources, dependencies, and targets are visible inputs to admission—not surprises discovered after deployment.
Less language, harder boundary
No ambient interop, runtime code loading, unrestricted mutation, guest-defined macros, or unbounded concurrency in the admitted component surface.
SAFE + FAST · BUILT FOR AI-GENERATED SOFTWARE.This is a confinement direction, not an 'unhackable' claim. The compiler, verifier, runtime, providers, policy roots, key custody, and OS isolation remain in the trusted computing base.
Security across the whole computation
The boundary is carried from intent to execution. Each stage narrows or verifies authority; no later stage is allowed to invent a grant.
Declarative intent
A small, Clojure-shaped surface keeps programs readable and excludes ambient escape hatches.
Checked KIR
Types and transitive effects become a target-independent, inspectable representation.
Intersect authority
Requested, delegated, local-policy, resource, and target grants can only narrow.
Address the artifact
Code, dependencies, policy, compiler contract, and target ABI bind the computation's identity.
Bind at the host
The runtime and provider bind only admitted capabilities, enforce finite budgets, and emit receipts.
Content identity is not authority.CID verification, signatures, revocation, host policy, resource checks, and OS isolation remain separate boundaries.
Lisp eval, without ambient host eval
Kotoba evaluates checked code as content-addressed data. The familiar (eval request) surface lowers to the typed :code/eval ability; it never receives source text, a reader form, a namespace, or a host object.
What code?
The CID selects a hash-verified checked-KIR definition and its CID-only dependency closure.
May it run here?
The exact interface, complete effect row, current allowance, fuel, and decreasing eval depth are bound before execution.
What came back?
The typed result is persisted as content-addressed evidence. Its hash cannot retroactively authorize an effect.
Identity, authority, and result evidence are three different facts.
Machine contract: lang/typed-eval.edn. Compiler wire capability: 30. Bounded apply remains ordinary closed-module closure application.
Defaults for an AI-first computing stack
These are engineering claims with their qualification attached. Default, bounded-ready, partial, and direction are different states; none is silently promoted to universal.
Build faster. Run faster. Keep the boundary.
Kotoba publishes compiler-startup, developer-loop, native-runtime, and workload-domain measurements with exact-result checks. Current speed ranks remain withheld until their quiet-host gates pass; security admission is never removed to win a timing.
Storage without a language ceiling.
Kotobase uses content identity, range reads, immutable history, and provider-neutral storage. Physical capacity, tenancy, retention, cost, replication, and execution budgets remain explicit; this is not an infinite-disk claim.
Post-quantum cryptography by default.
Every new Kotoba cryptographic boundary must name ML-KEM or ML-DSA evidence and reject a classical-only downgrade. Existing Passkeys, transport, implementations, and key custody remain separately qualified boundaries.
Authentication present. Authority denied by default.
Passkey identity belongs at the control boundary. A verified identity still receives no filesystem, network, storage, model, secret, payment, or GPU authority until an explicit scoped grant survives local policy and host checks.
Flexible delegation that can only narrow.
Requested, delegated, local-policy, resource, and target scopes intersect. Delegation can be composed and attenuated, but cannot mint ambient authority or widen its issuer's grant.
Web3 ready, chain-neutral at the root.
A stable Kotoba Principal and Passkey controller are primary. CAIP-10 accounts, ERC-1271, and ERC-6492 are explicit linked-account proofs; a wallet address never silently becomes storage or execution authority.
Zero-copy where ownership permits; one copy where a boundary requires it.
Columnar byte views retain vector, direct ByteBuffer, and Uint8Array backing. Arrow projection can keep uncompressed buffers columnar through the authorized Kotobase lake path. Network ingress, decompression, GPU upload, and immutable persistent updates remain named copy boundaries.
Arrow-shaped data. Explicit CPU SIMD and device-native GPU kernels.
On Apple M4, an uncompressed, non-nullable Arrow float32 column retained one WebAssembly linear-memory backing while Num executed an explicit v128 f32x4 kernel over its borrowed values slice with zero Arrow-to-SIMD copies; a scalar tail covered the remaining rows. In three qualified runs of the same 262,147-element scale workload and artifact, that SIMD kernel completed 3.66-3.72x faster than scalar Wasm. This is a kernel-and-host result, not a general runtime claim. The same bounded column path also retains one ArrayBuffer through its CPU views, crosses the GPU ownership boundary with one measured WebGPU upload, executes on Metal, and returns one four-byte scalar. Nullable columns, other Arrow dtypes, unified-memory upload removal, broader kernels, and universal CPU/GPU qualification remain pending.
AI first. Agent-safe by default.
Kotoba is designed for programs written or operated by AI agents and bots. The stronger the model, the more important explicit effects, finite resources, capability confinement, receipts, and host enforcement become.
AGI-ready boundaries, not an AGI claim.
The architecture is intended to keep authority explicit as models become more capable. Kotoba does not claim that AGI exists here, that generated programs are trustworthy, or that confinement removes the compiler, runtime, provider, key-custody, and OS trusted computing base.
Machine authority: lang/product-defaults.edn. Unlimited physical storage, zero copies everywhere, universal speed rank, AGI achieved, and unhackable remain forbidden absolute claims.
What AI-written Kotoba cannot ask for
| Boundary | Why it is absent |
|---|---|
compile, load, load-file, load-string, ns-resolve, read-string, require, resolve, use
|
Components cannot manufacture code or authority from ambient process state. Source strings, reader forms, loaded namespaces, and compiled host objects were never effect-inferred and are not part of a definition CID. The admitted `(eval request)` operation is therefore separate: it selects already checked KIR by CID through :code/eval and is re-admitted by the host. |
., .., import, new
|
Arbitrary JVM/JS object and method access bypasses capability admission. Unrelaxable by grant dispatch: interop never reaches guard-component-ability-call, so grant intersection, receipts and revocation cannot see the call. Vacuous on the wasm32 ABI (no such path exists); load-bearing at portable/trusted, where the subset gate is the only boundary (no separate VM sandbox is claimed there). |
alter-var-root, atom, binding, deref, dosync, ref, reset!, set!, swap!, var, volatile!
|
External mutable state is provider-owned and capability/policy mediated; component-local state must use an explicitly bounded model. The invariant is AMBIENT, not mutation itself. Since 2026-09-02 that reading has two consequences instead of one. A cell that escapes, persists, or crosses a function is provider-owned and stays on the :state-kit-desugar path (effect row shows :state, a grant is required at instantiation, capability handles are rejected as stored values). A cell that does neither -- (let [a (atom 0)] (swap! a + 1) @a) -- needs no host at all: local-state slice 1 elaborates it into ordinary let rebindings, so nothing observes it but the straight-line code that owns it and no cell exists at runtime. atom / swap! / reset! / deref are therefore admitted-via-elaboration, and refused the moment the cell would escape. ref / dosync / volatile! / binding / var / alter-var-root / set! have no ability model decided and stay rejected fail-closed. |
agent, future, locking, pmap, send, send-off
|
Component scheduling and resources must remain tender-controlled and bounded. Neither definition CIDs nor delegated grants meter CPU or scheduling; fuel is per-instance and ambient threads would escape it. A structured-spawn ability with sub-budgeted fuel is designable but undecided; no widening path yet. |
defmacro
|
The safe component surface must be statically inspectable before execution. Unrelaxable: expansion executes code inside the compiler (build time), and the definition CID hashes post-desugar typed KIR, so unbounded macros both run early and make source identity unreviewable. defdesugar (bounded pure desugar) remains the admitted alternative. |
catch, throw, try
|
Ambient throw/try/catch is untracked non-local control flow: it exits scopes the inferred effect row never mentions and skips unwind obligations (dataspace facet retraction has no checked unwind yet). The ban is on the ambient form. Since 2026-09-02 the typed abort ability admits the heads by elaboration: the effect appears in the inferred row as :abort and the function lowers to [:result T E], so the ambient form never exists post-elaboration. Slice 2 (2026-09-02) made :abort propagate through calls and A-normalized an aborting operand or test into a let binding; neither widens the invariant, because a propagated abort is on the caller's row and an A-normalized one is the same elaboration in a different position. Where the unwind precondition would matter, the abort stays refused -- for a CALL now as well as for a throw. |
These are named security constraints in lang/surface-status.edn, not features missing from a roadmap.
Proof, with the boundary attached
Kotoba separates implementation evidence from market traction and keeps residual risk next to every safety claim.
33 cores
Internal production dogfooding
The wider Kotoba stack runs 33 inference cores internally. This proves the team operates its own stack; it is not customer traction, paid adoption, or revenue.
8 claims
Boundaries are machine-readable
Safety claims name their trusted computing base, negative evidence, and residual risk instead of collapsing into an 'unhackable' slogan.
deny by default
No grant, no host effect
An empty policy grants no filesystem, network, process, clock, model, or secret authority. Providers must also validate concrete resource scope.
Internal production use is dogfooding evidence only. It does not imply external customers, paid pilots, or revenue.
Five benchmarks. Five different questions.
Compiler startup asks how quickly one tiny source becomes an artifact. Build scaling asks what happens to that number when the source stops being tiny—and whether the artifact still answers. The developer loop separates resolution, checking, builds, and first result. Native runtime asks how fast already-built code runs. The workload-domain suite asks how strings, collections, allocation, I/O, concurrency, and a small real application behave. The results keep all five questions—and their evidence status—separate.
4 toolchains, 21 runs each
Kotoba 40.998 ms · Rust 126.422 ms · C 146.324 ms · JVM 961.248 ms median.
21 rotating process-cold samples · load1 30.79 → 39.79 · required ≤ 1 · 2026-08-29 · Apple M4
6 workloads × 5 comparators
Amu native is exercised against Rust, Clang / C11, Zig, Go c-shared, Swift through one common native call boundary.
30/30 comparator/workload pairs · exact answers verified
19 of 30 pairs
Amu native wins 19 of the 30 comparator/workload pairs by at least 5%, separated from the arms' own spread. The bounded fastest claim needs every pair, so it stays unqualified — the count is the informative half.
At least 2 of those pairs cannot be won at all. On narrow-arithmetic, amu, Apple clang -O3 and rustc -O3 compile the kernel to the same 61-instruction sequence — clang and rustc byte-identical, amu differing only in register numbers. A 5% margin over identical code does not exist, so the bounded claim is unattainable rather than merely unmet.
Median of 5 host-qualified runs; the score ranged 19–20 and 19 of the 30 pairs qualified in every one. A single noisy sample can disqualify several pairs at once, so a one-run score is not precise to one pair.
busy-CPU 0.090 → 0.069 → 0.076 · required ≤ 0.10 · 2026-09-07
11 toolchain paths
Dependency resolution, checking, clean and no-change builds, and process-cold first result are recorded separately.
7 samples per measured stage · load1 20.84 → 24.49 · required ≤ 1
8 source sizes
The same program from one function to 2048, built by every toolchain on the host and then executed. The released binary has the lowest cold-start cost here and a correctness ceiling above 128 functions.
artifacts checked after the clock stops · load1 2.73 → 2.73 · required ≤ 1 · 2026-08-31
6 domains × 6 runtime paths
Strings, collections, allocation, file I/O, four-worker concurrency, and a request-admission policy application kernel are correctness checked.
7 samples in both process-cold and amortized lanes · load1 13.87 → 12.38 · rank withheld
Build time as the source gets larger
The benchmarks above build a program small enough to fit on one screen, which measures how quickly a toolchain starts. It says little about the number a developer actually waits on, which is the slope. This fifth benchmark generates the same program at increasing sizes — K independent four-operation functions and one entry point that calls all of them — and builds it through every toolchain on the host, in rotating order.
It then runs what each toolchain produced, after the clock has stopped. That check is not decoration. The fastest way to emit an artifact is to emit a broken one, so a lane that stopped working would otherwise post its best numbers exactly where it stopped working.
Both axes are logarithmic: the sources span three orders of magnitude and so do the times. A line ends in a dot where the run ended, in a cross where that lane emitted an artifact that is not the program, and in a bar where the toolchain refused to build. Those three are not the same event and the two failures below are not the same failure.
| Toolchain / target | K=1 | K=32 | K=128 | K=129 | K=512 | K=1023 | K=1024 | K=2048 |
|---|---|---|---|---|---|---|---|---|
| Kotoba · Released CLI · WebAssembly | 11.753 ms | 35.84 ms | 111.538 ms | invalid artifact | invalid artifact | invalid artifact | build failed | build failed |
| Kotoba / Amu · WebAssembly | 733.255 ms | 825.418 ms | 1123.04 ms | 1123.847 ms | 3380.63 ms | 9242.463 ms | build failed | build failed |
| Kotoba / Amu · Native aarch64-macos | 962.198 ms | 1509.84 ms | 2973.249 ms | 3000.243 ms | 10601.87 ms | 23725.327 ms | build failed | build failed |
| Rust / rustc · WebAssembly | 38.992 ms | 45.622 ms | 66.066 ms | 65.56 ms | 151.592 ms | 277.88 ms | 280.867 ms | 595.812 ms |
| Rust / rustc · Native host | 56.023 ms | 62.849 ms | 82.107 ms | 82.277 ms | 159.519 ms | 261.586 ms | 260.934 ms | 469.277 ms |
| C / Clang · WebAssembly | no toolchain | no toolchain | no toolchain | no toolchain | no toolchain | no toolchain | no toolchain | no toolchain |
| C / Clang · Native host | 29.078 ms | 30.442 ms | 35.765 ms | 36.581 ms | 60.594 ms | 104.992 ms | 101.728 ms | 223.232 ms |
| JVM / javac · JVM class | 171.53 ms | 197.998 ms | 237.582 ms | 238.611 ms | 316.795 ms | 378.252 ms | 377.591 ms | 454.632 ms |
Measured 2026-08-31 on judahnoMac-mini.local (Apple M4). K is the number of generated functions; the Kotoba source runs from 9 to 14338 lines. Targets, ABIs, optimisation levels and runtime contracts differ across lanes, so this asks about developer feedback latency, not equivalent work. The host-load gate failed (load1 2.73–2.73, required ≤ 1), so these are observations of this run rather than portable figures. Because the lanes are interleaved, the ordering is qualified separately.
Which orderings survive the noise test
A ratio is not a ranking. perfgate refuses any ordering whose gap falls inside the two arms' own spread, however large the ratio looks, and refuses an arm with too few samples or too much noise. It runs here at its own default policy, unrelaxed — a threshold loosened to let this run through would be a benchmark measuring its own thresholds. Because the lanes are interleaved on one host, a gap that survives this test survives the host being busy.
| Size | Compared against | Kotoba faster? | Gap vs combined spread | Why not, if not |
|---|---|---|---|---|
| K=1 | C / Clang · Native host | yes, qualified | 17.1 ms vs 1.0 ms | — |
| K=1 | JVM / javac · JVM class | yes, qualified | 160.8 ms vs 5.4 ms | — |
| K=1 | Rust / rustc · Native host | yes, qualified | 44.2 ms vs 0.6 ms | — |
| K=1 | Rust / rustc · WebAssembly | yes, qualified | 27.1 ms vs 0.5 ms | — |
| K=32 | C / Clang · Native host | no | 5.3 ms vs 1.0 ms | improvement-below-threshold |
| K=32 | JVM / javac · JVM class | yes, qualified | 161.9 ms vs 1.2 ms | — |
| K=32 | Rust / rustc · Native host | yes, qualified | 26.7 ms vs 0.7 ms | — |
| K=32 | Rust / rustc · WebAssembly | yes, qualified | 9.8 ms vs 0.6 ms | — |
| K=128 | C / Clang · Native host | no | 75.8 ms vs 1.2 ms | improvement-below-threshold |
| K=128 | JVM / javac · JVM class | yes, qualified | 126.2 ms vs 2.2 ms | — |
| K=128 | Rust / rustc · Native host | no | 29.3 ms vs 1.4 ms | improvement-below-threshold |
| K=128 | Rust / rustc · WebAssembly | no | 45.8 ms vs 1.1 ms | improvement-below-threshold |
improvement-below-threshold means the Kotoba lane was not faster at that size at all. The advantage is real and qualified at cold start, and it is gone against C by K=32 and against Rust by K=128. That crossover is the result, so it is shown rather than summarised away.
Two failures that are not the same failure
Three Kotoba lanes stopped working in this run, and publishing them as one row would have been wrong. One is a defect. The other two are declared bounds being enforced exactly as specified, and reporting those as defects would mean measuring the bounds instead of the compiler.
| Observation | Reading |
|---|---|
| The released kotoba CLI emits a module that will not compile above 128 functions | A defect, and the reason to validate inside a harness. At K=129 a call has to carry function index 128, the first value that needs two LEB128 bytes, and the emitter writes one. The bytes say it is not a missing encoder but an unused one: local.set 128 is written 80 01, and call 128 one instruction later is written 80. The count of truncated operands is exactly K minus 128. The current compiler does not have it — Amu builds K=129 correctly, and the fix has been on its emitter's default branch since before this release was tagged. |
| Every Kotoba lane traps at K=512 when built with default settings | Not a defect. A Kotoba module carries a declared call-fuel budget and the compiler default is 512 calls, which this workload crosses at K=512 where the entry point calls 512 leaves. The harness declares 1,048,576 units explicitly and records that it did. C, Rust and Java have no equivalent bound to raise. |
| Amu refuses the module outright once it would hold more than 1,024 functions | Also not a defect, and the opposite of the first row. max-functions is a declared admission limit, so the compiler stops with kotoba.error/subset-reject and names what it refused, rather than emitting something that will not load. A loud ceiling and a silent one are very different results, and only a harness that executes the artifact tells them apart. Measured 2026-09-07: this is the whole program's ceiling, not one module's — max-project-functions is also 1,024 and is checked against the linked project, so no arrangement of modules compiles a 2,048-function program today. |
What this establishes
| Question | Answer from this run |
|---|---|
| How fast is a cold Kotoba build of a small module? | The released CLI builds K=1 in 11.753 ms process-cold, artifact executed and answer checked — the fastest first result of any lane measured here. |
| How large a module can the released binary build? | Up to 128 functions. Beyond that it is not slower, it is wrong, and this harness reports that as a failed lane rather than a fast one. |
| Does build time stay competitive as the source grows? | Through K=128 the released CLI is measured against Rust and C in the table above. Past that point the only Kotoba compiler that still emits a correct module is Amu, which runs on nbb rather than as a released binary, and is roughly an order of magnitude slower at every size measured — so at large sizes build speed is not currently a Kotoba strength, and this page is not going to claim otherwise. |
| How large a source has been built end to end? | K=1023 through Amu — 7163 lines of Kotoba, artifact executed and the answer checked. That is one function short of the declared 1,024 ceiling, and the next size up is refused rather than mis-built. |
| Is the emitted code fast? | Out of scope here — this measures building, not running. The native runtime suite above asks that question. |
Bottom line: At the smallest size the released binary is faster than every comparator here by a margin that survives the noise test, and it has a hard correctness ceiling at 128 functions. The compiler without that ceiling is roughly an order of magnitude slower at every size measured. Both facts come from the same run, and the harness that found them is public, so the run can be disagreed with.
How long each native workload actually takes
The grid below reports the margin between two arms. That is the number perfgate rules on, but a percentage on its own does not say whether a workload runs in five milliseconds or five hundred, and it hides the difference between a contested pair and an irrelevant one. These panels are the medians those margins are computed from. Amu native is the coloured lane in every panel — including the panels where it is not first. Each panel is scaled to its own slowest arm, because the question a panel answers is who is faster in that workload.
Narrow arithmetic
Wide register pressure
Deep spill pressure
Call preservation
Branch + call control flow
Loop call back edge
Median milliseconds over 5 host-qualified runs; shorter is faster. Every arm returned the same independently checked answer, and the candidate median is one value per workload — the suite rotates each engine pair in ABBA/BAAB order, so the same Amu artifact is timed once per workload and then compared against each arm in turn. Unlike the other four benchmarks on this page, this one's quiet-host gate PASSED (qualified-host-load), so these are figures for this host rather than observations only. The bounded fastest claim still needs all 30 pairs, which is what the grid below is for.
Every runtime pair, win or loss
The bounded claim is all-or-nothing, so a single unqualified pair makes it false. Publishing only that verdict would hide which pairs are contested, so the whole grid is here. A cell is the mean improvement of Amu native over that comparator on that workload; positive means Amu is faster, and a check marks the pairs that clear perfgate — at least 5% and separated from the arms' own spread.
| Workload | Rust | Clang / C11 | Zig | Go c-shared | Swift |
|---|---|---|---|---|---|
| Narrow arithmetic | +0.4% | -0.6% | +20.1% | +84.7% | -0.6% |
| Wide register pressure | +6.5% | +10.9% | +16.9% | +86.0% | +87.1% |
| Deep spill pressure | +4.2% | +9.3% | +5.1% | +82.2% | +92.6% |
| Call preservation | -1.0% | -0.3% | +42.9% | +85.2% | +29.6% |
| Branch + call control flow | -2.6% | -7.1% | +43.8% | +85.2% | +25.1% |
| Loop call back edge | +0.8% | -0.1% | +32.4% | +17.2% | +24.8% |
Each cell is a bar grown from a centre line: right of it Amu native is faster, left of it slower. The two directions are scaled separately — the wins run to +93% and the losses only to −7%, so one shared scale would flatten every contested pair into the same invisible sliver. Sign is also carried by the side of the line and by the signed number, so no reading of this grid depends on telling two colours apart.
19 of 30 pairs qualified (median of 5; 19 in every run) · candidate 42f092ea5b61 · Apple M4, 10 logical CPUs, 16 GiB
Optimization delivery after the published run
The dated benchmark above remains immutable. New implementation slices are listed separately until the same-artifact suite reruns and passes its qualification gates.
| Surface | Delivered | Evidence boundary |
|---|---|---|
| Native vectors / allocation | Bounded non-escaping vector literals are escape-proved and scalar-replaced on x86-64 and AArch64. | 211 backend tests / 2,442 assertions; escaping vectors retain the checked host ABI. No new ranked timing yet. |
| String SIMD | POSIX checked equality uses explicit 16-byte NEON or SSE2 comparison after handle and canonical UTF-8 validation. | Optimized assembly and both native ISA semantic vectors verified. Windows remains separately pinned; latency rank pending. |
| Async I/O capability | Root-confined eventual read/write/list/exists/delete use CompletableFuture on JVM and fs.promises on Node. | JVM and Node real-filesystem tests pass. The public standalone Wasm benchmark still has no admitted host binding, so its I/O cell remains N/A. |
| Structured concurrency | A bounded 32-child fail-fast scope joins, cancels siblings, and prevents child lifetime escape as canonical Kotoba state. | 996 parity assertions across .kotoba authority and CLJC load path. This is structured lifetime semantics, not an OS-thread throughput result. |
| Kotoba CLI | kotoba test/build consume the new compiler pin; kotoba compile emits sealed x86-64 and AArch64 KEXE directly. | Public CLI lifecycle and AArch64 vector artifact verified. Native --run stays refused until a measured loader receipt is wired. |
Compiler startup, four toolchains
Process-cold wall time for one tiny source, in milliseconds; shorter is faster. 21 rotating samples per toolchain on Apple M4. The host-load gate FAILED on this run, so these are observations of one machine, not a ranking.
| Toolchain | Output | Median | p95 | Relative elapsed time |
|---|---|---|---|---|
| Kotoba | WebAssembly | 40.998 ms | 240.415 ms | 1× Kotoba |
| Rust / rustc | WebAssembly | 126.422 ms | 770.495 ms | 3.084× Kotoba |
| C / Clang | WebAssembly | 146.324 ms | 498.618 ms | 3.569× Kotoba |
| JVM / javac | JVM class | 961.248 ms | 2223.49 ms | 23.446× Kotoba |
KOTOBA 0.7.3 · RUSTC 1.97.1 · Homebrew clang version 22.1.7 · javac 24.0.2. Kotoba, Rust, and C emit Wasm; javac emits a class file. Different targets and compiler work make this a startup observation, not a universal ranking. The recorded host-load gate failed, so the table is not a qualified speed rank.
| Toolchain / target | Resolve | Check | Clean build | No-change build | Start + execute | Clean build + first result |
|---|---|---|---|---|---|---|
| Kotoba · WebAssembly | N/A | 231.75 ms | 62.906 ms | 42.332 ms | 57.253 ms | 142.644 ms |
| Rust / Cargo · arm64 macOS native | 138.018 ms | 71.208 ms | 896.478 ms | 67.764 ms | 371.522 ms | 1299.171 ms |
| C / Clang · arm64 macOS native | N/A | 90.446 ms | 121.838 ms | 77.905 ms | 327.741 ms | 453.685 ms |
| Zig · WebAssembly | N/A | 387.713 ms | 648.665 ms | 464.795 ms | 67.523 ms | 728.007 ms |
| TinyGo · arm64 macOS native | N/A | N/A | 1059.624 ms | 395.305 ms | 203.169 ms | 1269.918 ms |
| Go · arm64 macOS native | 43.553 ms | 6979.823 ms | 3499.277 ms | 150.902 ms | 247.051 ms | 3755.431 ms |
| Swift / SwiftPM · arm64 macOS native | 1017.252 ms | 427.372 ms | 3695.557 ms | 1259.829 ms | 431.84 ms | 4016.271 ms |
| JVM / javac · JVM class | N/A | N/A | 805.822 ms | 739.957 ms | 76.252 ms | 882.074 ms |
| AssemblyScript · WebAssembly | N/A | 1074.197 ms | 895.187 ms | 1090.658 ms | 64.658 ms | 954.878 ms |
| .NET IL · .NET IL | 2309.472 ms | N/A | 4750.407 ms | 2141.103 ms | 79.248 ms | 4851.792 ms |
| .NET Native AOT · arm64 macOS Native AOT | 2236.962 ms | N/A | 11995.489 ms | 2707.907 ms | 375.7 ms | 12391.54 ms |
Every emitted artifact produced 42 in a fresh process. Targets and runtime contracts differ; N/A is never zero. The host-load gate failed, so these are reproducible observations rather than a cross-language speed ranking.
Six domains, side by side
Each panel is scaled to its own slowest lane, because the question a panel answers is who is faster in that domain, not how the domains compare to each other. Kotoba's lane is the coloured one in every panel — including the panels where it is last. Its standalone Wasm artifact runs through a Node host and pays that startup on every process-cold sample, while Rust, C and Go run as native binaries; where the target has no ambient filesystem or thread contract at all, the lane is absent rather than zero.
String
Collection
Allocation
I/O
Concurrency
Real application
Process-cold medians in milliseconds; shorter is faster. The host-load gate failed on this run, so these panels are observations rather than a ranking, and the amortized lane below tells a different story again.
| Runtime path | String | Collection | Allocation | File I/O | Concurrency | Real app |
|---|---|---|---|---|---|---|
| Kotoba / Wasm + typed JS host | 30.539 ms | 29.98 ms | 29.567 ms | N/A | N/A | 29.652 ms |
| Rust | 1.907 ms | 1.92 ms | 1.943 ms | 2.686 ms | 3.328 ms | 2.047 ms |
| C / Clang | 1.463 ms | 1.357 ms | 1.353 ms | 2.539 ms | 2.916 ms | 1.294 ms |
| Go | 1.974 ms | 1.852 ms | 1.962 ms | 6.577 ms | 3.377 ms | 1.964 ms |
| JVM / Java | 27.819 ms | 31.42 ms | 26.447 ms | 38.685 ms | 34.828 ms | 26.411 ms |
| JavaScript / Node.js | 31.628 ms | 31.818 ms | 31.055 ms | 94.124 ms | 55.105 ms | 29.534 ms |
Every sample returned the exact reference checksum. Kotoba uses its emitted Wasm and declared typed ABI; its standalone target has no ambient filesystem or thread contract, so those cells are reasoned N/A. The recorded host-load gate failed, so medians are observations, not a ranking.
| Runtime path | String | Collection | Allocation | File I/O | Concurrency | Real app |
|---|---|---|---|---|---|---|
| Kotoba / Wasm + typed JS host | 0.351 ms | 0.039 ms | 0.066 ms | N/A | N/A | 0.048 ms |
| Rust | 0.028 ms | 0.002 ms | 0.003 ms | 1.217 ms | 1.456 ms | 0.002 ms |
| C / Clang | 0.02 ms | 0.001 ms | 0.003 ms | 1.61 ms | 1.558 ms | 0.001 ms |
| Go | 0.023 ms | 0.002 ms | 0.004 ms | 5.071 ms | 1.582 ms | 0.002 ms |
| JVM / Java | 0.433 ms | 0.051 ms | 0.064 ms | 17.175 ms | 5.589 ms | 0.043 ms |
| JavaScript / Node.js | 0.336 ms | 0.033 ms | 0.067 ms | 68.507 ms | 7.771 ms | 0.032 ms |
Each larger in-process batch is divided by its declared workload multiplier. This amortizes startup but does not fully remove process, VM, or Wasm instantiation cost, so it is not labeled a perfectly warmed steady-state result. Kotoba's pure inc/dec map chains are fused into reduce without intermediate vectors; callbacks outside that proven subset keep eager materialization.
| Question | Compared implementations | Current conclusion |
|---|---|---|
| Tiny Wasm compile + execute | Kotoba, Rust, C, and JVM toolchains | Four process-cold medians published above; only Kotoba/Rust/C share the Wasm target, and no general build-speed rank is claimed |
| Tiny-project developer loop | Kotoba, Rust, C, Zig, TinyGo, Go, Swift, JVM, AssemblyScript, .NET IL, and .NET Native AOT | Seven samples per available stage are published; target differences and a failed host-load gate prohibit a universal ranking |
| Native steady-state execution | Amu native vs Rust, Clang / C11, Zig, Go c-shared, Swift | All 30 semantic comparison cells are complete; speed ranking withheld because the quiet-host gate failed |
| Strings, collections, allocation, I/O, concurrency, and real app | Kotoba, Rust, C, Go, JVM, and JavaScript runtime paths | Exact checksums and process-cold plus amortized samples are published; standalone Kotoba I/O and threads are N/A, while its pure request-admission application is measured; the failed load gate withholds ranking |
What the native suite covers
Each implementation returns an independently checked known answer. The suite rotates every engine pair in ABBA/BAAB order and measures after loading, mapping, and symbol lookup.
| Workload | What it stresses | Evidence status |
|---|---|---|
| Narrow arithmetic | Exact result verified; timing unqualified | |
| Wide register pressure | Exact result verified; timing unqualified | |
| Deep spill pressure | Exact result verified; timing unqualified | |
| Call preservation | Exact result verified; timing unqualified | |
| Branch + call control flow | Exact result verified; timing unqualified | |
| Loop call back edge | Exact result verified; timing unqualified |
Where each benchmark lives
Every number above comes from a public harness and a committed report, so a run can be repeated and a claim can be disagreed with. The in-repo paths in this table are checked against the working tree when this page is generated: a harness that moves fails the build rather than shipping a dead link.
The gate every ordering on this page is put through is kotoba-lang/perfgate, run at its own unrelaxed default policy. A threshold loosened to let a run through would be a benchmark measuring its own thresholds.
Bottom line: The artifacts, exact results and samples are real in all five benchmarks. Three of them — compiler startup, the developer loop and the workload domains — failed their quiet-host gate, so they rank nothing and are published as observations. The native runtime suite passed its gate and wins 19 of its 30 pairs, short of the every-pair claim it would need. Build scaling qualifies its cold-start ordering against every comparator on the host and finds a correctness ceiling in the same run. No universal speed rank is claimed anywhere on this page, and none of these runs licenses one.
Claims with their boundaries attached
These claims are generated from lang/safety-claims.edn. Each keeps its trusted computing base and residual risk visible, because a safety slogan without a boundary is only marketing.
Admitted components cannot address runtime/native memory and component memory operations are bounded or trap.
Trusted computing base
bounded reader · frontend admission · artifact verifier · Wasm/native runtime
Residual risk
- runtime-engine vulnerabilities remain in the TCB
- native loaders require a second OS isolation boundary
Every transitive component effect is declared and admitted before emission, including effects used by Kotoba-written providers.
Trusted computing base
effect inference · capability catalog · frontend call graph
Residual risk
- kotoba and compiler grammar/effect parity must be continuously compared
An ungranted capability is absent or unbound and cannot reach a provider or native handler.
Trusted computing base
policy intersection · compiler import emission · tender import binding · host guard
Residual risk
- provider and native implementations must independently validate resource scope
- production effective grants must forbid wildcard scope
The same admitted source, target, policy and lock produce the same observable pure result and artifact bytes.
Trusted computing base
canonical reader · deterministic lowering · pinned toolchain
Residual risk
- host effects are deterministic only where their capability contract says so
Source, admission, execution, memory and output use explicit finite bounds.
Trusted computing base
admission limits · fuel meter · runtime quota · supervisor timeout
Residual risk
- platform supervisors do not yet have equal production isolation evidence
Release admission binds artifact identity, trusted signer, validity and reproducible evidence.
Trusted computing base
signature verifier · trusted signer configuration · clock · revocation set
Residual risk
- key custody and external revocation distribution remain operational TCB
A shared portable component has equal acceptance, result and effect trace across qualified backends.
Trusted computing base
shared conformance manifest · backend adapters · comparison runner
Residual risk
- compiler-only features are not portable and must be rejected by portable profiles
A component import reaches its provider or native handler only with a concrete post-intersection resource scope and emits a receipt.
Trusted computing base
capability intersection · host guard · provider handler · receipt sink
Residual risk
- provider-specific path, redirect, symlink and tenant checks require Q5 kits
Qualification Q1, as of 2026-07-18.
Release binding
A language profile and an implementation release are separate until a signed envelope binds them.
Profile 6
package contract 1
v0.7.0
profile binding: verified
RELEASED
:docs/release-bound-profile
Kotoba v0.7.0 for darwin-arm64 is the public implementation bound to language profile 6 and package contract 1. Its signed envelope verifies the source tree, artifact digest, and 536-test / 8,580-assertion conformance result. Other platforms remain unbound.
Read the generated release evidenceStart in sixty seconds
Install and self-check
brew tap kotoba-lang/kotoba
brew trust kotoba-lang/kotoba
brew install kotoba
kotoba selfhost check --json
Accept a valid response with an empty problem list.
A first program
(defn main []
(+ 40 2))
This program requests no host imports; the emitted module has no imports.
Learn, try, then go deeper
A connected path from first program to language contracts, libraries, evidence, and deployment surfaces.
Docs by intent
Start with installation, learn the admitted language, or inspect the normative semantics and conformance data.
Open documentation mapOne source, one answer
The example below is the exact source compiled into the browser demo—not a JavaScript reimplementation.
Read the sampleExecute in this page
Load a same-origin, digest-bound WebAssembly artifact and call its exported Kotoba main function.
Open PlayLibraries and contracts
Browse bounded core names, foundational libraries, package rules, and their current maturity boundary.
Browse librariesA small Kotoba program, running for real
Amu compiles this pure Kotoba source to the wasm32-browser profile. The checked-in artifact has no imports and returns 42.
;; W1 pure representative: ordinary Clojure-shaped values/functions only.
(ns examples.w1-pure)
(defn double [n]
(+ n n))
(defn main []
(double 21))
Highlighting authority: kotoba-lang/grammar → kotoba.grammar.highlight/tokenize → build-time HTML. Editor scope contract: source.kotoba. Browser highlighter dependency: none. Inspect dependencies
Compile locally: kotoba compile double-21.kotoba --target wasm32-browser --output double-21.wasm
Run the verified artifact
The browser fetches 344 bytes, verifies SHA-256, rejects every import, instantiates the module, and calls main().
Expected result:
42
Ready. No code has run yet.
This executes a precompiled, immutable example. Editing arbitrary source in the browser is not yet a shipped compiler surface.
Interactive demos: solar-helix (guest-driven WebGPU render) · kami-survivors (a .kotoba game) · gpu-clear (WebGPU smoke). Hosted on the wasm-webcomponent GitHub Pages surface; availability is per-browser WebGPU/WebAssembly support.
Libraries, without hiding the package boundary
Kotoba libraries are content-addressed graphs. Names and GitHub repositories help people discover them; definition and signed release CIDs say exactly what they are.
Generated symbol reference
Search the names admitted by the current bounded standard-library contract.
Browse core symbolsData, effects, I/O, tooling
Start with coll, spec, json, text, wit, async, time, fs, http, test, fmt, lint, and LSP contracts.
Browse the library mapContent-addressed dependencies
Inspect exact dependency CIDs, identity layers, GitHub provenance, and the current publication boundary.
Open the library catalog and publish flowBrowse the whole organisation by tag
There are 2,215 public repositories in the kotoba-lang organisation. Every tag below is the GitHub topic of the same name, so the site filter and the org's topics are one vocabulary rather than two that drift. Pick one to open the catalogue already filtered.
Browse and filter all 2,215 repositories
A repository is not a published package. Exactly 1 library is published through the content-addressed registry; the rest of this list is discovery. Repository maturity labels do not imply 1.0 API stability, broad adoption, or production SLOs, and 255 repositories match no domain rule and are shown untagged rather than given the nearest label.
Search the checked reference
Search commands, standard-library names, diagnostics, and release status. The index is generated from machine authorities and stays in this page.
Try: compile, option-some, docs/link-missing
Release binding
Kotoba v0.7.0 for darwin-arm64 is the public implementation bound to language profile 6 and package contract 1. Its signed envelope verifies the source tree, artifact digest, and 536-test / 8,580-assertion conformance result. Other platforms remain unbound.
Open reference
kotoba id
Create a chain-neutral Kotoba principal enrollment plan controlled by a passkey. Smart accounts are explicit CAIP-10 links; no chain or provider is the identity root.
Open reference
kotoba compile
Compile Kotoba-family source to a target artifact. Web .kotoba uses checked KIR and the restricted kotoba-script backend; .cljs remains ClojureScript.
Open reference
kotoba check
Validate Kotoba source, contracts, or package metadata without running it. Compiler adapter: frontend admit + --profile pure-product (T9.2).
Open reference
kotoba graph
Query and transact the language graph store (kgraph) with Datomic-shaped operations.
Open reference
kotoba git
Expose Kotoba repository operations as data, not shell-specific behavior.
Open reference
kotoba build
Build a Kotoba project into its checked target artifact. This is the direct project lifecycle command; rad build remains a compatibility spelling.
Open reference
kotoba test
Check and run the admitted tests for a Kotoba project. This is the direct project lifecycle command; rad test remains a compatibility spelling.
Open reference
kotoba deploy
Plan and apply package desired-state to a local receipt or a murakumo fleet reside target.
Open reference
kotoba library
Inspect and publish a content-addressed library namespace through the existing Kotoba codebase and IPNS publication path.
Open reference
kotoba hinshitsu
Run software-quality checks (evidence, gates, coverage, visual regression) as data.
Open reference:command/unknown
The requested command is not in the public CLI contract. Use a command generated from lang/cli.edn.
Open reference:contract/invalid
The CLI contract failed structural validation. Inspect the structured :errors collection; do not dispatch the command.
Open reference:version/unsupported
The requested language or package contract version is unknown. Select a version listed under :supported in lang/version-policy.edn.
Open reference:version/removed
The requested contract version has been removed. Migrate to the active version before compiling or running.
Open reference:version/deprecation-expired
The compatibility window for a deprecated version has expired. Apply the migration named by the version policy.
Open reference:release/invalid-semver
A release identifier is not strict SemVer. Use MAJOR.MINOR.PATCH with an optional valid pre-release or build suffix.
Open reference:docs/no-release-bound-profile
No published implementation evidence binds the active language profile. Keep the public default blocked until a signed release envelope binds the implementation and profile.
Open reference:docs/link-missing
A checked document points to a missing local target. Restore the target or update the authority map and regenerate the reference.
Open reference:docs/profile-version-drift
Grammar, surface, and elaboration authorities disagree on the language profile. Reconcile the authorities before publishing documentation.
Open reference:docs/generated-drift
A committed generated reference does not match its machine authority. Run kbb --backend sci scripts/generate-docs-reference.cljk and commit the result.
Open reference:docs/validation-result-invalid
A user-validation observation is incomplete or overclaims an external result. Record participant class, task, outcome, evidence, and observed time.
Open referenceNo query leaves the browser.
Roadmap: widen only after the boundary holds
One versioned contract
Keep grammar, effects, checked KIR, target adapters, qualification, and first-run documentation aligned.
Close provider gaps
Expand typed request/result conformance, adversarial testing, receipts, revocation, and reproducible release operations.
Earn wider deployment
Widen production use after provider, host-isolation, rollback, and soak evidence—and grow inspectable declarative libraries.
Read the maintained roadmap and non-goals
Roadmap items are direction, not promises of shipped capability or delivery dates.
Build the community in public
Kotoba does not yet claim a large community. Today the honest public meeting points are the source repositories, issue trackers, release history, and security channel.
Language issues
Ask a design question, propose a documentation improvement, or report a reproducible language-contract problem.
Open language issuesCompiler and CLI issues
Follow implementation work, releases, target support, and runtime integration in the installable implementation.
Open implementation issuesReport privately
Use the published security policy for vulnerabilities; do not disclose exploitable details in a public issue.
Read security policyFund the public boundary, without buying authority
The Kotoba GitHub Sponsors profile is being prepared. The project page is ready now and will expose a payment action only after GitHub approves the organization profile.
GitHub Sponsors
No sponsorship payment can be made through kotoba-lang.org while the GitHub profile is not live.
Support is not authority
Sponsorship does not buy a feature, roadmap priority, support SLA, private access, or a security exception.
Sponsorship status: PREPARING. Checked 2026-09-01.
Safe code. Trusted state. Controlled execution.
Evidence before slogans
Read short engineering notes that connect product claims to measurements, authority files, and remaining gates.
Read the Kotoba blogControlled execution
Kotoba Cloud connects identity and deploy control to the execution environment. Discovery is live; hosted apply is not yet offered. Compute remains provided by separately governed services.
Open Kotoba CloudTrusted graph state
Kotobase is the content-addressed graph database for AI state and knowledge: explicit relationships, identifiable history, and scoped access.
Open KotobaseCompute and inference plane
Fleet compute and model-serving infrastructure. Availability and route qualification remain service-specific.
Open MurakumoAgent work plane
Continuing agent work across workspaces, goals, evidence, tools, approvals, and governed effects.
Open ItonamiThese services retain separate authority, availability, and qualification boundaries. Their connection is not proof that every Kotoba capability is available as a generally sold hosted service.
Read the contract or run the implementation
kotoba-lang/kotoba-lang
Grammar, semantics, capability contracts, safety claims, CLI contract, documentation, and conformance fixtures.
Read the language authoritykotoba-lang/kotoba
CLI, host integrations, providers, runtime adapters, integration tests, and target-specific qualification evidence.
Open the implementationLearn, build, or evaluate
Separate paths for first use, language reference, backend implementation, security boundaries, and maturity evidence.
Choose a documentation pathLanguage profile 6; public-default release status: RELEASED.
The primary portable platform is WebAssembly Components with WASI 0.3.0. The elaboration pipeline has 11 named, fail-closed stages.
