tellegen
Browser visualization for DC OPF, AC power flow, SOCWR, and their sensitivities. Demand and rating edits preview through KKT sensitivity columns and commit as fresh solves in WebAssembly. Case parsing uses powerio. The project is named for Tellegen's theorem.
Live demo: tellegen.dev. Documentation: eigenergy.github.io/tellegen.
Packages
npm install @tellegen/engine # case parsing and wasm solves, framework agnostic
npm install @tellegen/webmcp # WebMCP tools and host adapter
npm install @tellegen/analytics # allowlisted, cookieless usage analytics
# map, panels, and solve card as Svelte components, with the map libraries
# they take as peer dependencies
npm install @tellegen/svelte maplibre-gl @deck.gl/core @deck.gl/layers @deck.gl/maplibre
@tellegen/engine exports case parsing, browser solving, the Study preview
and commit calls, sensitivities, and generated TypeScript types.
@tellegen/svelte exports the map, panels, local file flow, and solve card.
@tellegen/webmcp exports the general OPF tools and the conditionally
registered propose_capacity_plan and apply_capacity_plan tools through an
adapter that does not depend on a UI framework. The hosted demo connects the
live Svelte controller to that adapter. See the
WebMCP guide.
Start with the
framework quickstart;
examples/browser-minimal/ and examples/svelte-minimal/ are working
integrations of each package.
Python
Python 3.11 and newer can install the native engine from PyPI:
python -m pip install tellegen
import tellegen
solution = tellegen.load("case30.m").solve()
The optional MCP server runs the engine in process over stdio:
python -m pip install "tellegen[mcp]"
tellegen-mcp
See the Python guide for calculations, source builds, and the MCP filesystem policy.
Rust
The solver itself is the tellegen crate. The packages above are WebAssembly bindings over it, so a Rust consumer skips them and calls it directly. Case parsing stays in powerio.
cargo add tellegen powerio serde_json
use tellegen::{solve_instance, SolveRequest};
let parsed = powerio::parse(powerio::Source::open("case30.m")?)?;
let network_module = tellegen::ir::balanced_module(parsed)?;
let instance = powerio::DcOpfInstance::from_network(network_module.value().clone())?;
// A DC OPF with bus 2 shifted 50 MW, and the LMP column against demand.
let request: SolveRequest = serde_json::from_str(
r#"{
"formulation": "dcopf",
"edits": { "deltas": { "2": 50.0 } },
"sensitivities": [
{ "operand": {"Price":"Active"}, "parameter": {"Demand":"Active"} }
]
}"#,
)?;
let solved = solve_instance(&instance, &request).map_err(|e| e.to_string())?;
println!("{:?} objective {:?}", solved.status, solved.objective);
solve_module_json takes and returns JSON strings for callers that hold a
stored PowerIO module. It accepts modules containing a balanced network or a
declared problem instance; it does not accept bare network JSON. Default
features carry the differentiable engine: DC OPF, AC power flow, and the KKT
sensitivities. conic adds the SOCWR relaxation and its sensitivities.
--no-default-features drops faer and num-complex and leaves the DC OPF solve
on its own.
tellegen-cli wraps the same call for scripting: it reads a stored PowerIO
module on stdin and writes the solve response to stdout. The request is
the first argument, or @PATH to read it from a file when it is larger than
the operating system's argument limit (about 128 KB on Linux). Its solve-module
command writes an exact PowerIO solution module.
The multiconductor constant-power API, supported transformer profile, units, convergence options, and raw BMOPF limitations are documented in the multiconductor power flow page, with the full API reference in the multiconductor power-flow guide.
Demo
The demo serves three TAMU ACTIVSg synthetic grids and the CATS California Test System. These are synthetic networks on geographic footprints, not surveyed infrastructure:
| case | territory | buses | branches |
|---|---|---|---|
| ACTIVSg200 | central Illinois | 200 | 245 |
| ACTIVSg500 | South Carolina | 500 | 597 |
| ACTIVSg7000 | Texas | 6717 | 9140 |
| CATS | California | 8870 | 10823 |
Self-hosted deployments can also register distribution feeders through an
optional distribution-cases.json manifest.
Portable PowerIO multiconductor modules open in the distribution viewer and
can run supported AC power flow in the browser.
Bus color is locational marginal price. Selecting a bus shows ∂LMP/∂demand at that bus; selecting a binding line shows ∂LMP/∂rating. Dragging a slider applies the sensitivity column live; releasing it re-solves exactly in WebAssembly. The calculation selector offers DC OPF (the default), AC power flow, SOCWR, and experimental nonlinear AC OPF for balanced transmission cases. The website bundles the separate POUNCE WASI solver and enables AC OPF after its browser capability probe succeeds. AC OPF currently solves the unedited base case; demand/rating edits, LMPs, sensitivities, and saving/exporting AC OPF results are not supported.
Dropped .m, .raw, .aux, .epc, .pwb, .dss, and recognized JSON cases
parse in the browser and never upload. Files with coordinates render in place;
files without can be placed by clicking the map or paired with .csv, .json,
or .geojson geography (powerio's GeoLayer reader; branch routes render as
polylines). A PowerWorld .pwd file renders as approximate substation
positions, or fills a sibling case without coordinates through its substation
numbers. Saved PowerIO modules and exports carry the placement, and the layout
downloads as a .geo.json layer.
Development
Prerequisites: Rust from rust-toolchain.toml with
rustfmt, clippy, and the wasm32-unknown-unknown target; Node.js 22 or
newer; wasm-pack 0.15.x; mdBook 0.5.x for docs.
# backend with the embedded fallback cases
TELLEGEN_ALLOW_FALLBACK=1 cargo run -p tellegen-server
# frontend demo (the dev server proxies /api to localhost:8000)
npm ci
npm run wasm
rustup target add wasm32-wasip1
npm run wasm:acopf
npm run build:engine
npm run build:webmcp
npm run build:analytics
npm run build:svelte
npm --workspace tellegen-frontend run dev
Tests:
cargo test --workspace --exclude tellegen-py
npm run check && npm run build && npm run smoke:web && npm run test:downstream
Case data comes from the operator, not the repository. With the ACTIVSg and
CATS distributions under ~/Datasets, scripts/stage-data.sh ~/Datasets
stages the complete cases into data/; the server serves whatever is staged.
Repository layout
crates/: Rust workspace —tellegen(engine),tellegen-synth(geographic synthetic grids),tellegen-wasm(WebAssembly),tellegen-server(HTTP),tellegen-cli,benchmarkspackages/engine/:@tellegen/enginebrowser packagepackages/svelte/:@tellegen/sveltecomponent packagepackages/webmcp/: reusable WebMCP tools, validation, and registrationpackages/analytics/:@tellegen/analytics, the allowlisted usage analytics shared with MapToGridapps/web/: the hosted demo, a SvelteKit consumer of the Svelte packageexamples/: minimal Vite and Svelte integrations of each packagedocs/src/: mdBook source;scripts/build-docs.shbuilds itdocs/evidence/: checked-in measurement records (generator sweeps, WebMCP challenge runs, studies, multiconductor references) and the scripts that reproduce them
The HTTP API, deployment, and roadmap pages cover the server surface, hosting, and where the project is going.
Citing
tellegen is described in Interactive Power Flow in the Browser, presented at
the Inaugural ACM Conference on Digital Transformation (ACM DXConf 2026, Ann
Arbor, October 2026; doi:10.1145/3847238.3849038,
arXiv:2610.01922). Please cite it, and the
software release you used; GitHub's "Cite this repository" button reads
CITATION.cff.
Samuel Talkington, Frederik Geth, Qian Zhang, Le Xie, and Skyler Liu. 2026. Interactive Power Flow in the Browser. In The Inaugural ACM Conference on Digital Transformation (ACM DXConf 2026), October 29–30, 2026, Ann Arbor, MI, USA. ACM, New York, NY, USA, 9 pages. https://doi.org/10.1145/3847238.3849038
@inproceedings{talkington2026tellegen,
title = {Interactive Power Flow in the Browser},
author = {Talkington, Samuel and Geth, Frederik and Zhang, Qian and Xie, Le and Liu, Skyler},
booktitle = {The Inaugural ACM Conference on Digital Transformation (ACM DXConf 2026)},
year = {2026},
month = oct,
location = {Ann Arbor, MI, USA},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
numpages = {9},
isbn = {979-8-4007-3028-3},
doi = {10.1145/3847238.3849038},
eprint = {2610.01922},
archivePrefix = {arXiv}
}
@software{tellegen2026software,
title = {tellegen: interactive power flow and optimal power flow in the browser},
author = {Talkington, Samuel and Geth, Frederik and Zhang, Qian and Xie, Le and Liu, Skyler},
year = {2026},
version = {0.4.0},
url = {https://github.com/eigenergy/tellegen},
license = {MIT}
}
License
MIT. See docs/src/third-party-notices.md for attributions.
Metadata
Release files for tellegen 0.7.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 | Actions |
|---|---|---|---|---|
| tellegen-0.7.0.tar.gz | 637.5 kB | With provenance | Details for tellegen-0.7.0.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| tellegen-0.7.0-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details for tellegen-0.7.0-cp311-abi3-win_amd64.whl |
| tellegen-0.7.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ x86-64 | Details for tellegen-0.7.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
| tellegen-0.7.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ ARM64 | Details for tellegen-0.7.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
| tellegen-0.7.0-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details for tellegen-0.7.0-cp311-abi3-macosx_11_0_arm64.whl |
| tellegen-0.7.0-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details for tellegen-0.7.0-cp311-abi3-macosx_10_12_x86_64.whl |
Total release size: 47.3 MB
Release files / tellegen-0.7.0.tar.gz
| Download URL | tellegen-0.7.0.tar.gz |
|---|---|
| Size | 637.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8ed6a39d6280a5ae6b887820ac1d0b49eb4e274870f8ae8c7c5bfee95ef3e89e
|
|
BLAKE2b-256 checksum How to use checksums |
44882987bbd9f9bf12280d43c839c2f34c3a9701df1f562bde2891d16c76bbf8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / tellegen-0.7.0-cp311-abi3-win_amd64.whl
| Download URL | tellegen-0.7.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 10.1 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
6c12a59b038c4432dc8eff4acaf0608a0c6461c097b3a5716dcbc814daf4f603
|
|
BLAKE2b-256 checksum How to use checksums |
33cd5690c7d382056d10e4dff3a8219f045aff59b0705f846be97530dd5ce143
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / tellegen-0.7.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | tellegen-0.7.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 9.8 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b541504519ff79a9524b36c302645e7483cb46f2d6d59128bc4d90b0a4e31442
|
|
BLAKE2b-256 checksum How to use checksums |
615ba965211fabbc44bfd8688e15eed071b8eb8508311bf3352ec2c8cb9292a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / tellegen-0.7.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | tellegen-0.7.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 8.7 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
3d37f4a89b6ccdce01616c159cabc995d99bf741e5d618763d6c045f48fd7346
|
|
BLAKE2b-256 checksum How to use checksums |
61bcf5ae4018034cd42f7e2b28681fa2b84423c4705a6912ee13cc4bd240f831
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / tellegen-0.7.0-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | tellegen-0.7.0-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5b7578db4a83e8675570ab20073b958434b03373bb29bc6ef95a64c1a53d817b
|
|
BLAKE2b-256 checksum How to use checksums |
949a8b5d025d0bc7d6c75c0011c51786738291bb3fa94ceed160c3017121ecf9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / tellegen-0.7.0-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | tellegen-0.7.0-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 9.4 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
0abae9308d290e22e1df2e40474c481a77fedeea9a209526a9a34f6200eb1854
|
|
BLAKE2b-256 checksum How to use checksums |
14341d8cfd48e8ae270daa51758c90ef83351a1d385023fd9fb76b76b705b5f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logSecurity for tellegen 0.7.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.
Full provenance
All 6 files in this release have been uploaded with provenance metadata.
Attestation for tellegen-0.7.0.tar.gz
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 Nov 10, 2026.
Transparency logA 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.