fabricatio-webui
Web UI service for the Fabricatio LLM application framework. Serves a Vue-based single-page application built with Vite over an axum HTTP server (Rust, bound via PyO3).
Installation
pip install fabricatio[webui]
# or
pip install fabricatio-webui
The CLI entry point requires the cli extra:
pip install fabricatio-webui[cli]
Quick Start
Start the service with the bundled frontend:
fc-webui
This serves the SPA at http://127.0.0.1:9846. Use --frontend-dir / -d to point at a custom build, and --addr / -a to change the bind address:
fc-webui --addr 0.0.0.0:3000 --frontend-dir ./dist
API
All functionality is exposed through the Rust-backed Python module fabricatio_webui.rust.
start_service(frontend_dir, data_dir, addr, node_registry_json, allowed_origins, submit_fn, cancel_fn, queue_snapshot_fn, history_snapshot_fn)
Starts an async HTTP server (axum + tokio) that serves static files from frontend_dir with SPA fallback (all unmatched routes serve index.html). CORS is permissive.
| Parameter | Type | Description |
|---|---|---|
frontend_dir |
str | PathLike |
Directory containing the built frontend |
data_dir |
str | PathLike |
Workflow persistence directory |
addr |
str |
Bind address, e.g. "127.0.0.1:9846" |
node_registry_json |
str |
JSON array of node type definitions |
allowed_origins |
Sequence[str] |
CORS allowed origins |
submit_fn |
Callable |
Worker: submit(execution_id, workflow_json, task_input_json) |
cancel_fn |
Callable |
Worker: cancel_current() -> bool |
queue_snapshot_fn |
Callable |
Worker: queue_snapshot() -> str (JSON) |
history_snapshot_fn |
Callable |
Worker: history_snapshot() -> str (JSON) |
Execution pipeline
Submissions (POST /api/execute or a WS submit message) are forwarded to an in-process asyncio worker (fabricatio_webui.worker.WorkflowWorker). The worker instantiates Action nodes from the workflow graph, executes them in topological order, and streams node_start / node_done / node_error / node_output / execution_done events back over WebSocket. POST /api/interrupt cancels the running execution (execution_done with cancelled: true). Queue and history are owned by the worker and exposed via GET /api/queue and GET /api/history.
The CLI wires everything together:
# fc-webui — worker + server run on one event loop
import asyncio, json
from fabricatio_webui.registry import build_node_registry
from fabricatio_webui.rust import rust_broadcast, start_service
from fabricatio_webui.worker import WorkflowWorker
async def main() -> None:
worker = WorkflowWorker(rust_broadcast)
await asyncio.gather(
start_service("./www", "./workflows", "127.0.0.1:9846",
json.dumps(build_node_registry()["node_types"]), [],
worker.submit, worker.cancel_current,
worker.queue_snapshot, worker.history_snapshot),
worker.run(),
)
asyncio.run(main())
Configuration
WebuiConfig is a frozen dataclass loaded from Fabricatio's configuration system:
from fabricatio_webui.config import webui_config
Dependencies
fabricatio-core— core interfaces and configurationaxum+tokio+tower-http(Rust) — HTTP server and middlewaretyper(optional, for CLI) —fc-webuicommand
Todos / Known Gaps
Scanned 2026-08-09. Grouped by category; checkboxes track completion.
Functional gaps
- WS
statusevents are dropped at the Rust boundary —WorkflowWorker._emit_statusbroadcasts{"type": "status", ...}(queue_length / running_count), and the frontendexecutionstore handlescase 'status', butsrc/webui.rsrust_broadcastdeserializes into theWsMessageenum which has noStatusvariant — parse fails and the message is silently discarded. The queue indicator can never update live over WS. Fix: addStatus { queue_length, running_count }toWsMessageinsrc/types.rs(+ serde round-trip test). -
llm_tokenprotocol surface is dead —frontend/src/types/api.tsdeclaresWSLLMToken(type: 'llm_token'), but nothing in Python ever emits it and Rust has no matching variant. Either implement streaming token events or delete the type. -
ComfyNode.vueopen-sourceemit is not wired — the title-bar dblclick emitsopen-source, but VueFlow does not propagate custom events from custom node types, soNodeCanvas.vueuses theonNodeClickdblclick path instead. Remove the dead emit or document why it is kept.
Configuration gaps
-
WebuiConfig.persist_workflowsis never read — declared inpython/fabricatio_webui/config.pybut no code consults it. -
WebuiConfig.queue_max/history_maxnever reach the worker —cli.pyconstructsWorkflowWorker(rust_broadcast, data_dir)without forwarding them; the worker's own defaults (64 / 256) can silently diverge from config.
Test gaps
-
test_blueprints.pyhas 5 failing tests — stale expectations referencingGenerateNovelDraftand novel workflows that no longer exist infabricatio-novelafter its redesign. Update or remove the tests. -
test_webui.pyis a stub —WebuiRole(LLMTestRole)tests nothing and does not importWebuidespite its docstring. Fill in or delete. -
migrate_boardhas no test coverage —test_registry.pycoversmigrate_workflowonly; the format 0/1 → 2 board migration is untested. - Frontend unit coverage is thin — only
argGroups,autoLayout,boardstore, andNodeWidgethave specs. Missing:workflow/ui/execution/loading/notificationsstores, all canvas/chrome/board components, and all composables (useWebSocket,useHotkeys,useAppActions,useOutputPreview). - No Rust tests beyond
types.rs—api.rs,state.rs,ws.rs,webui.rshave no unit/integration tests for the HTTP and WS endpoints.
Docs gaps
- README
start_servicesignature is stale — documented with 9 parameters, but the actual PyO3 signature (seerust/__init__.pyi) has 12:blueprints_jsonandrebuild_roles_fnare missing from the table and the code example. - README
WorkflowWorkerexample is wrong —WorkflowWorker(rust_broadcast)omits the requireddata_dirargument. - README does not document the board editor — no mention of roles, blueprints,
format_version2 boards, or the/api/nodes,/api/blueprints,/api/workflows(CRUD) endpoints. - README does not document the WS protocol — message types (
execution_start,node_start,node_done,node_error,node_output,execution_done,status,submit) are only discoverable from code.
Code hygiene
- Pre-existing ruff violations in
registry/_schema.py—C901(_type_to_port_type13 > 10) andPLR0912(_widget_hint15 > 12); carried over verbatim from the oldregistry.py. Refactor or extend the# noqacomments. - Vite
INEFFECTIVE_DYNAMIC_IMPORTwarning —src/api/client.tsis dynamically imported bystores/board.tsbut statically by other stores; the dynamic import never splits a chunk.
Infra / DX
- No E2E browser tests — the workspace lacks a browser-test harness for the webui package (Puppeteer unavailable in the Bun JS VM); only live API checks are possible.
- Python tests lack a package-local runner config —
python/has nopyproject.toml; tests must be invoked with an explicit path (python -m pytest packages/fabricatio-webui/python/tests/) anduv runattempts rebuilds and times out.
License
This project is licensed under the MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fabricatio_webui-0.5.20-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61168f3cfb80d7cc53e23ee5024f149a3fbb8557b40022a159b8bc454ee99654
|
|
| MD5 |
9be25c5c6ef707c784bb9758ea53b7d7
|
|
| BLAKE2b-256 |
bd669d327b79d6e15761a7efe3825cb28e228cafaecb741713081f152ca0b31e
|
File details
Details for the file fabricatio_webui-0.5.20-cp314-cp314-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp314-cp314-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 3.9 MB
- Tags: CPython 3.14, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e5da7cf60dd334a65cdd8cf7c3d02caf0fa4bc0f6e9073a80cd2fd12cf93d44
|
|
| MD5 |
f973b6fa4680a80730af95bbd9b32e4c
|
|
| BLAKE2b-256 |
e6b13f88f753f028e7f4f00d9ef46a25b9aecaf3a58ebf93dfb31cd9cb160705
|
File details
Details for the file fabricatio_webui-0.5.20-cp314-cp314-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp314-cp314-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.14, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1dc8a0bb4354e01565f18f245d8059e467d5d599f6b536b6172b7b4a0f482e23
|
|
| MD5 |
23da50ab6f765635bc83be09fdb122d2
|
|
| BLAKE2b-256 |
4816a0fd7058b431ef6461934586e62dfd38afec0caba77b2fa543d3261109ea
|
File details
Details for the file fabricatio_webui-0.5.20-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcdd0e031380483b9f3ee62ccc8ec2d7885e50438c61b60fa7e51352c76bbd4f
|
|
| MD5 |
98c942c1bc720cc74410ab0b3697788d
|
|
| BLAKE2b-256 |
ac1a3e68e3f8f181b0b0971ecbbc4e240ea759c818be614ce53138fe2eade493
|
File details
Details for the file fabricatio_webui-0.5.20-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10b51427d4efe0c9a4509ae3a01eb1b0125697b59c9ae533179005d7a9e5ac5b
|
|
| MD5 |
2cf826b40eb9247177356b9e96aa0677
|
|
| BLAKE2b-256 |
b9f9ac08c958cd8aed5c48f9937e8681d54fb0566f8f61f587a648862a678e37
|
File details
Details for the file fabricatio_webui-0.5.20-cp313-cp313-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp313-cp313-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bef5c0a74e25a6303a718cafbe9ba272d0b1dd8ebe37c37366eb293d2c3b4a24
|
|
| MD5 |
bf26664db1e2d05c65773f5166333485
|
|
| BLAKE2b-256 |
53bb2a6acfde77759f62924611f52ef54c74d00e2f6bc3b6a185c7442a7e3455
|
File details
Details for the file fabricatio_webui-0.5.20-cp313-cp313-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp313-cp313-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c22dbacd839e62204794e3b2c7c116cb0c4ecf4dff5ad77b59405c4514d5ea6
|
|
| MD5 |
3143263f58735ea05913e76ae0e48d97
|
|
| BLAKE2b-256 |
027f9f2e5e97e9e9f9c122b9f8821fa06c7c049698743d2a7d553a8dc9be154a
|
File details
Details for the file fabricatio_webui-0.5.20-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a968689bf1784f7a31d629cff2fe56fb5d2803710f92846f299518866319a6f0
|
|
| MD5 |
4ff76b820a9be639199d64032bf48912
|
|
| BLAKE2b-256 |
0a189f64b5f53b25120fd77cbd65edcbaa0bd5a7c02ed2cb814c9670475a851b
|
File details
Details for the file fabricatio_webui-0.5.20-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8dee5e066ddf4ba29170895ee3dbfca68c44af59b8d4a417f30fe83c24d053e7
|
|
| MD5 |
095eb1c6e7dcee699784017f23b2c49c
|
|
| BLAKE2b-256 |
9b8d55d30eb1bc0510ae531c92c4cf0c7ce070cf8e238a964176e41859ad39d7
|
File details
Details for the file fabricatio_webui-0.5.20-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 3.9 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75553f25d073baf90def49dd2a29a589b193438055e039f183ddd2d2271b2176
|
|
| MD5 |
528682950223092f5615ee6637258a03
|
|
| BLAKE2b-256 |
cc00d8010057f5a90b16b6ba320ed436feb2d5f8be7f81893bb18e9599ef15cf
|
File details
Details for the file fabricatio_webui-0.5.20-cp312-cp312-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp312-cp312-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d607a06f23295267789d31d84715ea573453404c15e77289d383779ed36ab3f
|
|
| MD5 |
8dae209c21f51fd9befb92b1ceafafb9
|
|
| BLAKE2b-256 |
bff4816bff818ee10405c68414a72702184abc444e1fe32fb3802154b1f79978
|
File details
Details for the file fabricatio_webui-0.5.20-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: fabricatio_webui-0.5.20-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ffe1d5516cb7f34c27c360af1e24db2f53d44a2c6333414328e15cd60ac26dc
|
|
| MD5 |
1b95b4f900f72ff90be0225466a7ce53
|
|
| BLAKE2b-256 |
f828b487972b96d2171f2892ba2c3b87797adb40542828eab6407229f386cf54
|