SCUA

News

SCUA 0.15.0 is out

August 18, 2026

Two things got most of the work in this release: the HTTP client, and running a project that has dependencies.

scua main.scua now runs a project with dependencies and no extra flags. Once scua vendor has written deps/, SCUA finds your project by looking for scua.toml beside your file and upward, stopping at the top of your repository so a stray manifest somewhere above cannot capture your script, then resolves imports from the lock. Every dependency file is hashed against the record that shipped with it before anything runs, so a file edited under deps/ stops the program and gets named rather than running. That check takes about a millisecond and is on by default. There is also --mod-override name=DIR for testing a local copy of one dependency, which reports what it replaced.

The HTTP client is much more complete. http.request(url, opts) takes headers and any method. Failures come back as Error({ kind, message }) with a kind you can branch on, instead of a string you have to pattern match. http.open stops at the response head and hands you a stream, so a large body does not have to land in memory first. Requests take a timeout_ms that bounds the whole exchange rather than one stage of it. Response bodies are now bytes rather than string, because the old string was never checked for valid text, and json.decode accepts bytes so a response decodes without a conversion step. bytes.find and bytes.concat fill in the two primitives incremental framing was missing.

Table keys no longer have to be identifiers. A header map, JSON with hyphens or dots, or data exported from another tool is one expression now instead of a run of assignments.

On the fixes side, a cluster node could stop ticking permanently when two nodes connected to each other at the same instant and one connection was collapsed as a duplicate. It looked like a mesh going quiet under load for no visible reason. Separately, a wait_all or map_all arm can now use a variable from the handler around it, which is the most natural way to write one and previously read the wrong value or stopped the run outright.

The package manager is still moving. Every verb works against directory registries, and this is the release where the toolchain reads the lock itself rather than leaning on the tool to arrange things first. There is no public registry yet. The changelog has the full accounting.