frontedge
The frontend layer for ML engineering: a ready-made design system and screens that mount into any FastAPI application.
from fastapi import FastAPI
import frontedge
app = FastAPI()
app.include_router(frontedge.runs(runs_provider=my_provider))
The provider returns frontedge.Run objects; the library knows nothing about authentication and
hands the request to the provider, so access control stays on the application side.
What's inside
frontedge.mount(runs_provider, evals=..., datasets=..., actions=..., config=..., path="/frontedge")— the router: the list of runs, the run details, the log stream (SSE), the metadata and the built interface.frontedge.runs(runs_provider, path="/frontedge")— the same router without the eval and dataset screens.frontedge.models— the domain model:Run,Stage,MetricPoint,Artifact,Example,LogLine,EvalSummary,EvalComparison,DatasetInfo,DatasetDetail, the statuses and the freshness.frontedge gen --out src/generated— the generator of TypeScript types and a typed client from the pydantic models. Pure Python, no Node needed.
One process, one port: the interface and the API are served by the same app.
Configuration
The configuration is data, not code — a TOML or JSON file that the same interface can edit by hand, from code and later with a visual editor:
# frontedge.toml
density = "default" # compact | default | comfortable
theme = "light" # light | dark
run_columns = ["name", "status", "ribbon", "dataset", "startedAt", "durationMs", "accuracy", "loss"]
app.include_router(frontedge.mount(my_runs_provider, config="frontedge.toml"))
UiConfig also knows eval_tabs, actions, live_refresh_seconds, baseline_run and
page_size. The configuration is served to the browser as GET /frontedge/api/config.
Actions
The interface never invents what a button does: a project declares the actions it supports, and the library calls them.
[[actions]]
id = "stop"
label = "Stop"
placement = "run" # run | runs | evals | datasets
danger = true
from frontedge import ActionResult
async def stop_run(request, payload) -> ActionResult:
run_id = payload["runId"]
await my_repository.stop(run_id)
return ActionResult(ok=True, message=f"Run {run_id} stopped")
app.include_router(
frontedge.mount(my_runs_provider, actions={"stop": stop_run}, config="frontedge.toml")
)
The handler receives the request and the payload of the interface and returns an
ActionResult; its message is shown to the user.
The full description of the product and of the visual language: design document. The full contract: docs/integration.md.
MIT.
Metadata
Release files for frontedge 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 | Actions |
|---|---|---|---|---|
| frontedge-0.1.0.tar.gz | 618.7 kB | Without provenance | Details for frontedge-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| frontedge-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for frontedge-0.1.0-py3-none-any.whl |
Total release size: 1.2 MB
Release files / frontedge-0.1.0.tar.gz
| Download URL | frontedge-0.1.0.tar.gz |
|---|---|
| Size | 618.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1e3299066cc61ccb6ecb78c4a637e0fc54f4445fbd038d3b70737a5a61b19fad
|
|
BLAKE2b-256 checksum How to use checksums |
3ab25db9f4519314f943178b1e35569d4d1b0e92f5c433795ef89bfb0fe38519
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / frontedge-0.1.0-py3-none-any.whl
| Download URL | frontedge-0.1.0-py3-none-any.whl |
|---|---|
| Size | 627.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26ce4d50d5703c092e6bba7eafcb84fa1b99f54547e68c91c63d7d77fe27d649
|
|
BLAKE2b-256 checksum How to use checksums |
3e1905484e74aa9f557276c4510b306360d4ee9e04c64391d9480944bde4df48
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for frontedge 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.