Build apps in one primitive that spans your whole stack — databases, UIs, AI agents, and services. No glue. 50× less code.

Built for

  1. 01AI agentsLong-running agents with memory.
  2. 02Local-first appsApps that live on your machine.
  3. 03ObservabilityLogs and metrics without a server.
  4. 04Data-intensive appsTerabytes in one Python program.
  5. 05Internal toolsScalable dashboards that fit in a single file.

Apache‑2.0Python 3.10+

Build with Nu.

A few of Nu's fabrics — state, UIs, cluster, models. Same Python, same code shape.

Persistent state

Persistent state. Stores any Python type.

Reach any value by name; it survives restarts. Same code local or sharded across a cluster.

  • -Serverless, scales to terabytes
  • -Store any Python type
class DB(nu.Shape):
hits = nu.kv.IntRef.slot()
# +1 to a persistent counter
op = DB.hits.set(DB.hits + 1)
app = nu.With(
nu.kv.rocksdb_navigator(".db"),
body=nu.kv.auto_flow_atomic(op),
)

Live browser UIs

Reactive UIs from Python. No JS, no build step, no websocket you had to write.

A text block, a chart, a form — set them like variables, they render. Update the value, the browser updates itself.

  • -50+ components out of the box
  • -Live updates for free
Powered byReactZustand
class Dashboard(nu.ui.Page):
hello = nu.ui.TextRef.slot()
# renders live in the browser
op = Dashboard.hello.set("Hello, browser.")
app = nu.With(
nu.ui.server(op),
)

Distributed execution

Same code runs local or across the cluster. No worker pool to run.

Teleport any Nu tree to any worker; it runs there and returns the result. Where it runs is a binding, not a rewrite.

  • -Same code, local or remote
  • -Distribute with a single line
Powered byRay
class DB(nu.Shape):
hits = nu.kv.IntRef.slot()
# any Nu op
op = DB.hits.set(DB.hits + 1)
# same op — teleport it to a worker
remote = nu.cluster.Teleport(op, target="gpu-0")
app = nu.With(
nu.cluster.RayCluster(),
body=remote,
)

LLM calls

One wire, N providers. Ollama, OpenAI, OpenRouter, Groq, xAI — same call.

LLM chat as a Ref. Swap the model string, keep the code. Local models and hosted APIs meet at the same interface.

  • -Add intelligence to any Nu app
  • -7 providers out of the box
class Bot(nu.Service):
chat = nu.llm.ChatRef.method(temperature=0.7)
# ask the model
op = Bot.chat(prompt="one-line haiku about rust")
app = nu.With(
nu.llm.ollama(Bot, host="localhost", model="qwen2.5:7b"),
body=op,
)

And more.

Nu is batteries-included and covers the common cases.

In-memory state, proxy, HTTP, Python objects, Claude Code, local parallelism — same model, same shape, same primitive as the four above.

See Nu live.

Install, run a demo, start hacking.

01 Install

Python 3.10+ · everything ships in the wheel

pip install "nustack-py[all]"

02 Run a demo

counter demo

counter

A live counter, persistent across restarts.

nu demo counter
sampled demo

sampled

An infinite series, live-sampled into a fixed-size chart.

nu demo sampled
movies demo

movies

A movie tracker: form, filterable table, detail pages.

nu demo movies

How Nu works.

The primitive Nu is built on, in three words.

A tiny script keeps its values in memory and calls functions on them. Real apps don't stay there. Values live in a database, arrive from a browser form, render into a dashboard, get recomputed by a background job. Almost none of the code is about the values anymore — it's all interaction between systems.

Nu makes interaction the primitive.

Ref
A name for a value, wherever it lives — a KV slot, a UI text block, an LLM endpoint, a remote object.
Interaction
What you do with a Ref: read, write, branch, iterate, compose.
Fabric
Binds Refs to a real system. Compose as many as you need; they all speak the same primitive.

Same primitive, different system. One Ref for any resource, one Interaction for any op. Setting a browser text block is the same interaction as setting a KV slot.

interaction-model

the theory

The language-agnostic specification.

What an interaction is, how Refs name locations, how Interactions compose into programs. Nu is one implementation; anyone can build another.

nu

the python implementation

Batteries-included, ready to run.

The interaction model in pure Python, with fabrics for the everyday jobs: in-memory state, kv-based state, UI, network, cluster compute.

Under the hood.

Standalone Python libraries Nu is built on. Each is useful on its own.

virtuals

Virtual Python collections over any KV storage.

nustackdev/virtuals

invisibles

Transparent remote objects for Python.

nustackdev/invisibles

rdbpy

RocksDB for Python, with transactions.

nustackdev/rdbpy

kh57

Deterministic range reservoir sampling.

nustackdev/kh57

Like what you see?

The project is young. Star it, join the room, watch what we ship next.