Skip to content
Try Nulang
Alpha softwareApache 2.0

Build software that survives failure.

Build services from isolated actors. When one fails, supervisors can restart it; persistent actors can recover saved state. Explore the language in your browser.

Browser playground runs Nulang Core. Actor supervision and durable recovery require the local runtime.

Type systemHM + rows
EffectsTyped + algebraic
RuntimeActors + supervision
CoreVM / browserEdit. Run. Inspect.
Local WASM
output
Compiler loads on first run.
01 / SourceTyped program
02 / EffectsCapabilities visible
03 / ActorsFailure isolated
04 / RecoveryState hydrated
Runtime model

One model from source code to recovery.

Nulang keeps the resilient-systems primitives close together: typed effects describe what code may do, actors isolate state and failure, supervisors coordinate recovery, and persistent actors can hydrate durable state after restart.

Explore the actor runtime
Language surfaceStable tier
Types + effects

HM inference, rows, variants, capabilities, algebraic effects

Actor surfaceStable tier
Actors + supervision

spawn · send · ask · link · monitor · supervisors

Runtime stateImplemented
Durable actors

snapshots · journals · restart hydration · pluggable stores

failure
supervisor restarthydrate durable state
Optional boundariesExperimental tier
Multi-node distributionTCP send/ask · gossip membership
AI runtimeproviders · pipelines · supervisor teams
Alternate backendsWASM · native AOT

From first run to local development

Run Nulang Core in the browser, then install a checksummed release for the full native runtime.

01
Try onlineRun Nulang Core in your browser, no toolchain required.
nulang.org/playground/
02
Install locallyDownload a checksummed binary for your platform.
Install a tagged release
03
Run your codeUse the installed compiler for the full native runtime.
nulang --repl

Persistence without bolting on an ORM

Ordinary actors are in-memory. Mark an actor persistent and declare durable or event-sourced state to opt into checkpointing and journaling. The CLI can reopen a durable store and hydrate persistent actors across process restarts. Nulang is still alpha, so validate recovery semantics for your workload before production use.

  • Explicit local, durable, event-sourced, and CRDT state models

  • File-backed durable storage by default for programs that declare durable state

  • Recovery and supervisor hydration are covered by runtime tests

  • Pluggable JSON, RocksDB, and Postgres store URIs where the corresponding features are enabled

durable execution
# Durable programs use .nulang/store/ by default
$ nulang counter.nula

# Or choose a store explicitly
$ nulang --store json:.nulang/store counter.nula

# Environment-based configuration is also supported
$ NULANG_STORE_PATH=.nulang/store nulang counter.nula

Durable distributed applications, with fewer moving parts

Building reliable distributed software often means combining an actor framework, workflow engine, message broker, cache and database. Nulang is exploring how typed actors, supervised recovery, durable state and Fabric messaging can live within one coherent runtime.

Compare languages and actor frameworks

Understand Nulang’s tradeoffs against Erlang, Elixir, Go, Rust, Akka, Orleans and Ray—including the maturity and production guarantees those established systems already provide.

Explore the programming language and actor framework comparisons →

The infrastructure consolidation roadmap

Experimental Fabric streams, durable workflows and early NuDB research target use cases often served by Redis, NATS, Kafka, Temporal and, eventually, databases. These are works in progress, not drop-in replacements today.

See current implementations, missing guarantees and the roadmap →

Language + runtime capabilities

Each capability is labeled by maturity so you can distinguish stable language surfaces from experimental runtime features.

Actor Runtime

Stable core · experimental multi-node

Spawn, links, monitors, supervision, and actor messaging are stable language surfaces. Multi-node transport and gossip clustering are experimental; source-level CRDT state integration is still incomplete.

Algebraic Effects

Stable

Koka-inspired row-polymorphic effects with compile-time checking. Handle, perform, resume — algebraic effect handlers compose freely without monad transformers.

Row-Polymorphic Types

Stable

Full Hindley-Milner type inference with row polymorphism for both records and effects. Pony-inspired reference capabilities (iso, trn, ref, val, box, tag) enforced at compile time.

BEAM/OTP Primitives

Stable actor surface

Supervision trees (one_for_one, one_for_all, rest_for_one, simple_one_for_one), process groups, named registration, and exit trapping — battle-tested fault tolerance patterns.

WASM Backend

Experimental

Feature-gated MIR→WASM compilation with Wasmtime execution, SIMD support, and AOT artifacts. Treat compatibility and performance as experimental while the backend matures.

AI Runtime

Experimental

Feature-gated provider integrations, agent pipelines, debate teams, supervisor hierarchies, and memory primitives. This is optional runtime functionality, not part of the frozen language core.

Measured performance · 12 Oct 2026 UTC

See the numbers, not a speed claim.

Same-host, single-CPU Savina-style message-passing baselines across Nulang, Go, Erlang/BEAM, and Rust. These are measured runtime primitives, not equivalent actor-framework implementations.

All four workloads, exact results, and methodology
Ping-pong throughput20,000 round trips · logical messages/sec
Higher is better
Go · channels6.11M
Erlang · BEAM3.37M
Nulang · actors0.59M
Rust · std channels0.25M

Shared CI hardware is noisy. Rust here uses native threads andstd::sync::mpsc; no third-party actor frameworks have been measured.

Ready to try Nulang?

Nulang is alpha software and open source under the Apache 2.0 license. Try it in the browser, install a release binary, run the examples, and pressure-test the ideas.