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.