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.nodeon a function, or subclasselement_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.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| element_51-0.1.0.tar.gz | 227.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| element_51-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 460.9 kB
Release files / element_51-0.1.0.tar.gz
| Download URL | element_51-0.1.0.tar.gz |
|---|---|
| Size | 227.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
61bdf61a00861010d6b093c90aacacc6e4167c7ac626c0004252f5664b898372
|
|
BLAKE2b-256 checksum How to use checksums |
6c1a0638a59d88ffdbca546c859be47a6159a24972ceceac3c3d9a5c4cdad9b6
|
| 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.0-py3-none-any.whl
| Download URL | element_51-0.1.0-py3-none-any.whl |
|---|---|
| Size | 233.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f8323cca382a8b730a286a56a0d11a783815539c1ca9b21a8db64b6171cd0eae
|
|
BLAKE2b-256 checksum How to use checksums |
2c81b396a777a9a8a8155ef1ba8178eda2eb5c72a6624e9e02637c8e8668d6a4
|
| 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.0
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.