Skip to main content

element-51

Design node-editor GUIs from Python. You write nodes as typed functions or small classes. element-51 serves an editor in the browser where people wire them together, and Python keeps the graph, runs it and can change it while the page is open.

  • Nodes from type hints. Put @element_51.node on a function, or subclass element_51.Node. Parameters become inputs and the return type becomes the output (a pydantic model gives one output per field).
  • A fast editor. The canvas is drawn by a Rust and WebAssembly module: pan, zoom, drag, link, undo and redo, typed values in the node, a nested add-node menu with search, and refused links between ports of different types.
  • Python is in charge. The graph lives in your process. Read it, run it, save and load it as JSON, or add nodes from a script and watch an open page update.
  • Yours to restyle. Two themes ship, and a small JSON file changes any colour, size, font or port shape.
  • Embeddable. It is an ASGI app, so it mounts inside FastAPI, NiceGUI or any other ASGI host.

Installation

uv add element-51

To work on it from a clone, you also need Rust (the stable toolchain from rustup, with the wasm32-unknown-unknown target) to build the browser layer:

uv sync
uv run python tools/build_wasm.py

Example

Two nodes and a link. number is a function, Double is a class.

import element_51


@element_51.node
def number() -> float:
    return 21.0


class Double(element_51.Node):
    value: float = 0.0

    def run(self) -> float:
        return self.value * 2


app = element_51.App([number, Double])
first = app.add_node(number, x=60, y=80)
second = app.add_node(Double, x=320, y=80)
app.add_link(first, "out", second, "value")
element_51.serve(app, open_browser=True)

Run it and your browser opens on the editor. Press Run: number shows 21.0 and Double shows 42.0. Right-click the canvas to add more nodes. Stop the server with Ctrl+C.

More examples, grouped by topic, are in examples/: the basics, node types, using the graph from plain Python, editor features, themes, and embedding the editor in FastAPI or NiceGUI.

Documentation

The documentation has the guides and the API reference. To build it, run uv sync --group docs and then uv run sphinx-build -b html docs docs/_build/html.

Credits

The look of the editor is inspired by Antimony, the graph-based CAD tool by Matt Keeter. element-51 shares no code or images with Antimony; the colours, shapes and layout were drawn again from scratch.

Metadata

Release files for element-51 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for element-51 0.1.1
File Size Uploaded Provenance
element_51-0.1.1.tar.gz 227.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for element-51 0.1.1
File Interpreter ABI Platform
element_51-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 461.0 kB

Release files / element_51-0.1.1.tar.gz

Download URL element_51-0.1.1.tar.gz
Size 227.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c39a4d110ef3e871fabe0c7ad27a8c61219301d7995517fd9f50f0399889212b
BLAKE2b-256 checksum
How to use checksums
2759e29d325d946d6099061cc4d0d5d4cf7dc09d82edb188e39deac95dcc65bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / element_51-0.1.1-py3-none-any.whl

Download URL element_51-0.1.1-py3-none-any.whl
Size 233.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac1d6a2404124d4ff76891be5787d462cef82b2933935f7c5dd65f8b7b6d4563
BLAKE2b-256 checksum
How to use checksums
5483f5cf6ca3da25354c8c239c905fec1c85aec5d2da58d332a4c4869a9c6727
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for element-51 0.1.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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