SCUA

News

Sixteen packages, and what they let you build

August 21, 2026

A language is worth using when the ordinary things are already there. SCUA's standard library stops at a deliberate boundary: capabilities, data, text, time, numbers. Everything past that line belongs in packages, and sixteen of them now exist.

#Games and simulation

@scua/pathfind gives you A*, Dijkstra and BFS over grids and weighted graphs. There is no per-search cleanup to remember, because the arena hands each search a scratch space that disappears on its own.

@scua/bump does 2D AABB collision with a spatial hash and swept movement, so you get slide, touch, cross and bounce responses rather than objects tunnelling through walls at speed.

@scua/tween drives animation from your delta time with 31 easings, groups and sequences, and lands exactly on the target value instead of near it.

@scua/noise covers Perlin, simplex, Worley and fBM, all reproducible from a seed. @scua/behave gives behavior trees with immutable structure and per-agent state, and @scua/fsm declarative state machines with guarded transitions.

#Text, data and the web

@scua/markdown parses CommonMark with render hooks you can replace, so the same document can become HTML, a terminal view, or whatever you need. @scua/soup parses real-world HTML forgivingly and queries it with CSS selectors. @scua/yaml reads config files with proper typing and errors that point at a line.

@scua/web is a small HTTP framework whose core never touches a socket, which means your routes and handlers are testable as ordinary functions.

@scua/term renders colour, tables and bars to strings rather than writing to a terminal, for the same reason: you can assert on the output.

#Working code

@scua/iter fills in chunk, group_by, sort_by, deterministic shuffle and the table helpers you reach for constantly. @scua/jobs is a scheduler you pump yourself, with cron expressions, intervals, retries and backoff, so timing stays under your control. @scua/faker produces names, addresses, dates and internet data from a seed you choose. @scua/proptest brings property-based testing with shrinking and replay seeds, so a failure hands you the smallest case and the seed to reproduce it.

#Ten LLM providers behind one client

@scua/llm is the largest of them: one client covering OpenAI, OpenAI Responses, Anthropic, Gemini, Mistral, Groq, Grok, DeepSeek, OpenRouter and local Ollama, across four wire protocols. Chat, streaming, tool calls, tool calls while streaming, and structured output, all against the live services.

The design choice worth stealing is that the network is a function you pass in. Hand it a real one and it talks to ten providers. Hand it a fake and the entire library runs offline, with no API key and no network capability granted, exercising the same code paths. Capabilities turn out to buy you testability rather than cost you convenience.

#How they got built

Each package started from behaviour research written only from published documentation, never from the source of the library it was matching. An independent legal review then had to return a verdict before any code was written, with any doubt resolving as drop it. Three packages carry the marks: @scua/faker ships word lists written from scratch with invented place names, @scua/soup was rebuilt from published specifications, and @scua/noise generates its permutation table from the seed rather than shipping the traditional one.

Every package is its own repository, with a guide, a full reference, runnable examples, and the research and design it came from.

#What is next

The packages resolve through the package manager today, with a lock file and vendored dependencies, from a registry. The next piece of work is the public registry itself, so scua add @scua/markdown works from anywhere.

Building sixteen real libraries also fed directly back into the language. Module type checking, delete for table keys, catchable stack overflow, full TOML and unique ids all exist because writing packages made the need obvious. That loop is the plan: packages get written, the language gets better at hosting them, and the next set is easier than the last.

If you want the mechanics of installation and identity, the package manager post covers it, and the roadmap has where the registry sits.