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.
Every app is a set of interactions between systems: a database, a UI, AI agents, and services. Nu makes interaction the primitive:
- Ref names what you touch. A KV slot, a UI widget, an LLM endpoint, a memory slot, a remote object.
- Interaction describes what to do with it. Read, write, branch, iterate, compose.
- Fabric binds Refs to a real backend. Swap the Fabric, keep the tree.
Persistence, reactivity, atomicity, observability, and scalability are inherent, not bolted on.
The interaction model
Nu, the one core atom, splits into two:
- Ref: address to any resource.
- Interaction: the work over Refs.
Interaction has five kinds:
- Query: pure evaluation, yields values.
- Command: mutation, yields nothing.
- Action: mutation, yields values.
- Span: scope wrapping a body.
- Flow: orchestration of mutations.
Compose them into a tree. That is a Nu program.
Example
A dashboard on a live counter that persists across restarts. One Nu tree, two Fabrics.
import nu
class Counter(nu.Shape):
value: nu.v.IntRef
class Dashboard(nu.ui.Page):
count: nu.ui.TextRef
class App(nu.ui.Index):
pages = nu.ui.Pages({"/": Dashboard})
app = nu.With(
nu.v.presets.rocksdb_navigator(".dbtest"),
nu.ui.presets.server(
nu.v.auto_flow_atomic(
nu.ReactForever(
Counter.value.on_change(),
Dashboard.count.set(Counter.value),
),
),
),
body=(
nu.IfDo(Counter.value.missing(), Counter.value.set(0))
>> nu.ForeverDo(
Counter.value.inc() >> nu.Delay(1.0),
)
),
)
if __name__ == "__main__":
import asyncio
asyncio.run(nu.arun(nu.v.auto_flow_atomic(app)))
Run it, open the browser tab. The counter ticks once a second, the dashboard mirrors it live. Kill it, run again, it picks up where it left off.
More examples in examples/. Full walkthrough at nustack.dev/docs.
Fabrics
A Fabric implements Refs against one backend. Nu ships five in-tree.
| Fabric | What |
|---|---|
nu.m |
In-process substrate. Zero-config default for tests, notebooks, cache. |
nu.v |
Persistent substrate backed by virtuals. Virtual Python collections over RocksDB, LMDB, more. |
nu.ui |
Refs on screen. Binds Nu Refs to a live browser tab. |
nu.invisibles |
Location-independent Nus. Transparent RPC across processes and machines. |
nu.ray |
Compute across the cluster. Scale Nu on Ray without leaving the model. |
Swap the Fabric, keep the tree. Same program runs against different substrates.
Install
From source. Python 3.12+. See nustack.dev/docs/how-to/install for the full guide (Python side, UI bundle, verify).
Apps built on Nu
- nulog. Structured logging as a Nu app. Handles billions of entries, UI dashboard out of the box.
Status
v0.1.0. APIs will break, no backwards compatibility guarantees.
License
Apache-2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nustack_py-0.1.1.tar.gz.
File metadata
- Download URL: nustack_py-0.1.1.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce3eaeb9b0c6b08eea67bd32f3033df61fa5a4264f993d69bfcde7c9b1242d4c
|
|
| MD5 |
30239600031b9e49f613cfcc77be31ed
|
|
| BLAKE2b-256 |
f68d702ad49065b1b1bd1b802cba392cfd65cbfb2fa1a72c9d766b360b46604e
|
Provenance
The following attestation bundles were made for nustack_py-0.1.1.tar.gz:
Publisher:
publish-nu.yml on nustackdev/nu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nustack_py-0.1.1.tar.gz -
Subject digest:
ce3eaeb9b0c6b08eea67bd32f3033df61fa5a4264f993d69bfcde7c9b1242d4c - Sigstore transparency entry: 2349245893
- Sigstore integration time:
-
Permalink:
nustackdev/nu@b2091b2543dd84357d42e1013cb4680febc4a62a -
Branch / Tag:
refs/tags/nu@0.1.1 - Owner: https://github.com/nustackdev
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-nu.yml@b2091b2543dd84357d42e1013cb4680febc4a62a -
Trigger Event:
push
-
Statement type:
File details
Details for the file nustack_py-0.1.1-py3-none-any.whl.
File metadata
- Download URL: nustack_py-0.1.1-py3-none-any.whl
- Upload date:
- Size: 427.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f051c6ffaf13ab47094f9a53a15161650aade7ae17efaa513f5487e54c24ffc3
|
|
| MD5 |
dbcf47f1b660b8dbda4ef092293d8dcd
|
|
| BLAKE2b-256 |
169f8d9efdc9498eab8cbc233cc218877f2bdfd16dcab808c6a5efc4e286d92c
|
Provenance
The following attestation bundles were made for nustack_py-0.1.1-py3-none-any.whl:
Publisher:
publish-nu.yml on nustackdev/nu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nustack_py-0.1.1-py3-none-any.whl -
Subject digest:
f051c6ffaf13ab47094f9a53a15161650aade7ae17efaa513f5487e54c24ffc3 - Sigstore transparency entry: 2349246464
- Sigstore integration time:
-
Permalink:
nustackdev/nu@b2091b2543dd84357d42e1013cb4680febc4a62a -
Branch / Tag:
refs/tags/nu@0.1.1 - Owner: https://github.com/nustackdev
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-nu.yml@b2091b2543dd84357d42e1013cb4680febc4a62a -
Trigger Event:
push
-
Statement type: