
One syntax.
Data to platform.
Agentic ready.
Reach for CX whenever the data is the point. One bracketed syntax is the document, the query, the program and the compiler's own tree, so the file you read is the file you transform, validate, hash, store and serve — with no second language in between.
The answer on the right was computed twice: by the cx that built this page, and — if your browser carries our engine — by libcx.wasm just now.
prog.cx
[?let [= $subtotal 19.99] [= $shipping 5.01] [total [+ $subtotal $shipping]]]
$ cx prog.cx
[total 25.00]
Recorded when this page was built · looking for the engine…
Fixture ap-decimal-float-mix-right in conformance/llm/antipatterns.cxd — replayed against this cx when the page was built.
What it is
CX starts from a single axiom: computing is data transformation, nothing more. Languages, frameworks and processes are ceremony around that fact. CX is the principle made a language: transform.
We write the data and the code in one shape, so a query is a pattern over the document — the [user [name $n] [email $e]] you would have parsed into objects is the very form that matches them.
input.cx
[users
[user [name Alice] [email a@x.com]]
[user [name Bob] [email b@x.com]]]
prog.cx
[?for [user [name $n] [email $e]]
[yield [pair name=$n email=$e]]]
$ cx --data=input.cx prog.cx
[pair name=Alice email='a@x.com']
[pair name=Bob email='b@x.com']
Fixture program-for-003-name-email-pair in deps/cx-core-code/conformance/code.cxd — replayed against this cx when the page was built.
Why
We make exactness the default and every effect a grant: a fraction is an exact decimal, a program reads nothing it was not given, and a refusal is an ordinary value that names the flag which would allow it.
prog.cx
[?lib 'cx-stdlib/io']
[$io:read-file "/var/log/app.log"]
$ cx prog.cx
[err code=cx-err:CXER0271 message='E_CAP_DENIED: read capability required for io-read-file; none granted (grant via --allow-read)' at='2:1']
Fixture io-001-read-file-cap-denied in deps/cx-core-code/conformance/stdlib/io.cxd — replayed against this cx when the page was built.
Proof
We speak the agents' protocols as plain values — an MCP request is a CX element projected to its wire form, with no serializer in the path — and every one of the 4 examples on this page was replayed byte for byte by the cx that built it, which refuses the page when one stops holding.
prog.cx
[?lib 'cx-platform/mcp' as=mcp]
[?lib 'cx-stdlib/json' as=json]
[$json:emit [$mcp:call-tool-request 1 "get_weather" {location: "NYC"}]]
$ cx prog.cx
'{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"location":"NYC"},"name":"get_weather"}}'
Fixture mcp-001-call-tool-request-shape in deps/cx-platform-agent/conformance/x/mcp.cxd — replayed against this cx when the page was built.
The journey
llms.txt for one fetch, and MCP as a module of the platform group.