SCUA Our products · SCUA

A scripting language
that keeps
your data.

SCUA is the language we wanted while building games and AI tools, so we built it. It reads like Lua, adds types only where correctness matters, and treats saved state as a first-class feature rather than a chore you write by hand.

  • Gradually typed
  • Capability-secure
  • Actor model
  • Exact decimals
  • Embeds in C
  • Faster than Python
What it is

A small, embeddable language for state that has to survive.

Games, multiplayer backends and AI tools all spend real effort on the same thing: structured data that needs to persist. Player saves, match state, config, validated input. SCUA organises that state into partitions — self-contained blocks of memory that can be written to disk, loaded on another machine and resumed, with no serialization code to write or maintain.

Dynamic by default, so it's quick to pick up. Ships as one small binary, embeds in C, and comes with decimals, dates, regex, data tables, an actor model and an HTTP server already in the box.

Persistence

Save and move state without writing serializers.

A partition is position-independent bytes, so saving it is a copy and loading it on another machine costs nothing extra. Cyclic references and shared objects survive the trip — the cases that usually break hand-rolled save code.

Types

Add types exactly where they earn their keep.

Write it untyped like any scripting language, then annotate the parts that matter for a compile-time check. Annotations are erased at runtime, so adding one can catch a bug but never changes how your code behaves.

Sandboxing

Run mods, plugins and agent scripts safely.

There is no ambient I/O. A script can't touch the filesystem, network or environment unless the host hands it a capability, and those grants narrow as they're passed on — so an untrusted script, or an AI agent's, only reaches what you allowed.

Correctness

Money, contracts and numbers that don't drift.

Built-in exact decimals keep prices and ledgers to the penny, and big integers count past 64 bits for runaway idle-game economies. Contracts report every failed condition at once, so a player sees all three reasons they can't enter, not just the first.

Concurrency

Isolated actors, no shared mutable state.

Partitions talk by message — tell to fire and forget, ask to wait for a reply. No shared mutable state means no data races, and a faulted turn is contained rather than taking the process with it.

Day one tooling

Real editor support, and a real playground.

A full language server and step-debugger in VS Code and Zed, with completion, hovers and breakpoints. The whole compiler also runs in the browser, so the playground on scua.dev is the actual language rather than an approximation.

Early access is open

Have a play with it.

SCUA is pre-1.0 and in early access — the language, tooling and docs are live, and we'd love to hear what breaks. The tutorial takes about twenty minutes, and the playground needs nothing installed.