Skip to main content
Drop a star to support Nu ⭐ Join the Nu Discord community
Nu

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.

Discord Twitter Follow

Platform Support PyPI - Python Version PyPI Package License PyPI Downloads



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 React interaction.
  • 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
counter demo A live counter, persistent across restarts.
nu demo counter
sampled demo An infinite series, live-sampled into a line-chart.
nu demo sampled
movies
movies demo A movie tracker: form, filterable table, detail pages.
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.

nustackdev/interaction-model

🛣️ Roadmap

TODO.

👥 Community

Nu README badge

Add a Nu badge to your README if you're building on Nu:

Nu

[![Nu](https://img.shields.io/badge/built%20with-Nu-%237A4CE0)](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?

  1. Read the docs
  2. Open a feature request or report a bug
  3. Join the Discord community

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)

Source distribution for nustack-py 0.1.14
File Size Uploaded
nustack_py-0.1.14.tar.gz 1.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for nustack-py 0.1.14
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

This release

0.1.14 This release

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page