| Drop a star to support Nu ⭐ | Join the Nu Discord community |
Nu – the interaction primitive
Build apps in one primitive that spans your whole stack — databases, UIs, AI agents, and services. No glue. 50x less code.About • Quickstart • Fabrics • Apps • Spec • Examples • Documentation • Community
ℹ️ About
A tiny program is a joy to write. Three lines, one substrate:
a = 2
b = 5
print(a + b)
Real apps don't stay here. a moves into a database. b comes from a form submission. The result renders in a browser. A background job reruns it when either input changes. Three lines become three hundred: an ORM, a request handler, a template, a websocket, a queue. Almost none of it is about a + b anymore — it's all interaction between substrates.
Nu makes interaction the primitive.
- Ref — a name for a value, wherever it lives. A KV slot, a UI widget, an LLM endpoint, a remote object.
- Interaction — what you do with a Ref. Read, write, branch, iterate, compose.
- Fabric — binds Refs to a real backend.
Same program, a and b persisted in a KV store:
import nu
class DB(nu.Shape):
a = nu.kv.IntRef.slot()
b = nu.kv.IntRef.slot()
# compute a + b and print it
compute = DB.a.set(2) >> DB.b.set(5) >> nu.print(DB.a + DB.b)
# assemble: rocksdb-backed
app = nu.With(
nu.kv.rocksdb_navigator(".dbsum"),
body=nu.kv.auto_flow_atomic(compute),
)
nu.run(app)
Same program, result rendered in a live browser dashboard:
import asyncio
import nu
class DB(nu.Shape):
a = nu.kv.IntRef.slot()
b = nu.kv.IntRef.slot()
class Dashboard(nu.ui.Page):
out = nu.ui.TextRef.slot()
class App(nu.ui.Index):
pages = nu.ui.Pages({"/": Dashboard})
# compute a + b and render into the dashboard text block
compute = DB.a.set(2) >> DB.b.set(5) >> Dashboard.out.set(DB.a + DB.b)
# assemble: rocksdb-backed, served over the browser
app = nu.With(
nu.kv.rocksdb_navigator(".dbsum"),
nu.ui.server(nu.kv.auto_flow_atomic(compute)),
)
asyncio.run(nu.arun(app))
Same primitive, different substrate. One Ref for any resource, one Interaction for any op. Nu doesn't care what the backend is.
Persistence, reactivity, atomicity, observability, distribution — not features Nu has. What falls out of naming interactions instead of executing them:
- Persist across restarts — the KV slot is already durable.
- Re-render live on input changes — wrap in a
Reactinteraction. - Handle terabytes — shard the KV Fabric; the Refs don't notice.
- Run distributed across a cluster — bind through
nu.cluster; the Refs don't notice.
Full walkthrough at nustack.dev.
🏁 Quickstart
Three steps: install, run a demo, explore Nu.
01 · Install
Python 3.10+ · everything ships in the wheel.
pip install "nustack-py[all]"
02 · Run a demo
Each one boots a live browser dashboard and picks up where it left off on restart. nu demo lists them all.
| counter | sampled |
|---|---|
nu demo counter |
nu demo sampled |
| movies | |
nu demo movies |
03 · Explore Nu
- Read the docs — tutorials, how-tos, and the fabric reference.
- Browse examples — full source for every demo, plus more programs to steal from.
🧵 Fabrics
Each fabric binds Refs to a real backend and unlocks a new capability.
| Fabric | What |
|---|---|
nu.mem |
In-memory state fabric. Perfect for cache, hot state, and in-process coordination. |
nu.kv |
Persistent state fabric. Refs over a KV backend (RocksDB, LMDB); transactions, snapshots, and change notifications, built in. |
nu.ui |
Web UI fabric. Same fabric shape as the others, but the Refs are widgets — text, buttons, tables — rendered in the browser and live-updated as your state changes. |
nu.proxy |
Network fabric. Puts other fabrics on the network — bind a fabric in one process, use it from another; same Refs, same interactions, over TCP or Unix socket. |
nu.cluster |
Cluster compute fabric. Teleport a Nu tree to any worker in your Ray cluster; it runs there and returns the result. |
📦 Apps built on Nu
End-user tools written as Nu programs.
| Repo | What |
|---|---|
| nustackdev/nulog | Pure-Python, serverless logger and metrics store. Log and observe metrics from any Python code; entries persist to an embedded KV store and scale to billions, in-process. One line boots a live viewer. |
📐 Spec
Nu is a reference implementation of the interaction model — a language-agnostic specification of what an interaction is, how Refs name locations, and how Interactions compose into programs.
🛣️ Roadmap
TODO.
👥 Community
Nu README badge
Add a Nu badge to your README if you're building on Nu:
[](https://github.com/nustackdev/nu)
Contributing to Nu
Considering contributing to Nu? Start by opening an issue or a PR — the codebase is small and readable, and the model is stable enough to build on.
More questions?
License
Apache-2.0
Metadata
Release files for nustack-py 0.1.14
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nustack_py-0.1.14.tar.gz | 1.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nustack_py-0.1.14-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / nustack_py-0.1.14.tar.gz
| Download URL | nustack_py-0.1.14.tar.gz |
|---|---|
| Size | 1.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e69ab91cb3d726f2ddcdcef546c38aeb514d93d8afbc5708f34dc7e04e0a8fbf
|
|
BLAKE2b-256 checksum How to use checksums |
a97909b1081f1132cb0f78309820340e96f4a6c9b0c51e6c71bd9637a044b2d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / nustack_py-0.1.14-py3-none-any.whl
| Download URL | nustack_py-0.1.14-py3-none-any.whl |
|---|---|
| Size | 478.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
50d5d004fd650723a76f823e5a5f1cbdc16a0b95182d9326b1cf35f2e4c6fb6f
|
|
BLAKE2b-256 checksum How to use checksums |
a29c1548c84def80f0fad210573c0067efa44b14a1b2be0fb8e118842048ef70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency log