Shared frontend foundation and SPA app shell for the llming ecosystem — vendor JS, fonts, icons, and a lazy-loading client-side router
Project description
llming-stage
Build Vue + Quasar UIs that AI can build, drive, and debug.
llming-stage is the SPA foundation for AI-assisted frontend work. You write a real Vue + Quasar app, not a Python shim. Reactive traffic and sessions flow through llming-com, and that's the same channel an AI assistant uses to inspect state, invoke commands, and push events into the running page.
flowchart LR
User(["👤 User"]) --> Browser
AI(["🤖 AI assistant"]) <--> Com
Browser["<b>Browser</b><br/>Vue + Quasar SPA<br/>(llming-stage shell)"]
Com["<b>Python server</b><br/>llming-com<br/>sessions · auth · commands<br/>HTTP / MCP debug API"]
Browser <-->|"per-user WebSocket<br/>reactive commands · server pushes"| Com
classDef live fill:#1976d2,stroke:#1565c0,color:#fff,stroke-width:1.5px
classDef ai fill:#a855f7,stroke:#7c3aed,color:#fff,stroke-width:1.5px
class Browser,Com live
class AI ai
llming-com ships the sessions, auth, command dispatcher, and the debug surface — without it, the AI side of the picture goes away. When you eventually deploy and the app no longer needs server reactivity, the same shell + view modules can ship as a static bundle to any CDN.
What you get
- An AI-debuggable runtime — every reactive command, session, and event is browseable, invokable, and observable through one HTTP / MCP surface.
- FastAPI-native app mounting — create your own
FastAPI()app and attachStage(app), or letStage()create the default FastAPI app for compact demos. The internal/_stageroutes and development reload are ensured once; server startup stays normal FastAPI/ASGI (uvicorn main:app --reload, deployment servers, etc.). - Modern frontend, zero boilerplate — Vue 3 + Quasar 2 + bundled Tailwind utilities with a lazy-load orchestrator and an SPA router that keeps the WebSocket and view state alive across navigations.
- Per-user sessions out of the box —
llming-comruns the wire and the auth; you write JS views and Python handlers. - Static-deployable — when there's no server-side reactivity at runtime, the same code ships to GitHub Pages, S3, or any CDN.
- No third-party network — every asset is vendored. A page loaded from an
llming-stageapp makes zero requests to Google Fonts, jsDelivr, or any other external host. Privacy/GDPR-friendly by default; enforced by static and runtime tests.
See it in action
poetry install
./samples/run.sh # opens a web gallery at http://localhost:8000
Fourteen sample apps — from a tiny static app to generated decorator views, llming-com reactive loops, a Three.js particle tornado, an 8-chart ECharts dashboard, Plotly full-bundle charts, a core component workbench, and an optional-extension workbench — with dark/light theme, hot reload, and AI-debug control.
Minimal app
from llming_stage import Stage
if __name__ == "__main__":
Stage(title="Hello world").add_view("/", "hello.vue").run()
<template>
<main class="min-h-screen grid place-items-center p-8">
<h1 class="text-5xl font-bold">Hello llming-stage</h1>
</main>
</template>
For a purely static app, no Python file is needed:
llming-stage serve hello.vue
Stage() mounts the bundled assets, the Vue + Quasar shell, the SPA
router, bundled Tailwind utilities, and content-hash development reload
by default.
stage.run() is a thin local-development wrapper around uvicorn.run.
If you need workers, custom logging, TLS, or deployment process
management, run the same app directly with normal ASGI tooling.
Reactive apps add a typed session router and let Stage mount the conventional session routes:
from fastapi import FastAPI
from llming_stage import Stage
app = FastAPI()
stage = Stage(app)
sessions = stage.session()
counter = sessions.add_router("counter")
@counter.handler("inc")
async def inc(session, by: int = 1):
value = int(session.state.get("count", 0)) + by
session.state["count"] = value
await session.call("home.setCounter", value)
return {"ok": True}
stage.add_view("/", "home.vue")
The browser gets a real Vue + Quasar SPA from .vue view files.
llming-com carries the wire, the sessions, and the debug surface the
AI uses.
Learn more
Full docs in docs/content/:
- Quick start · Stage apps · App shell · Communication model
- llming-com integration · Assets & lazy loading
- Security · API reference
MIT licensed. © 2026 Michael Ikemann. Bundled third-party files are listed in THIRD_PARTY.md; no AGPL/GPL/LGPL is ever permitted.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 llming_stage-0.1.1.tar.gz.
File metadata
- Download URL: llming_stage-0.1.1.tar.gz
- Upload date:
- Size: 21.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.13.11 Darwin/25.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17c750847936deec99feef05092f245e920e28d3b4b1e2de7a6f7e0c1053f272
|
|
| MD5 |
0bd5442322f1c3e5e7ae64532c1cbe86
|
|
| BLAKE2b-256 |
4a65ea1cfbb70d2493d96bf9644d5c2c3728e85d3da734b93bcea21057258d30
|
File details
Details for the file llming_stage-0.1.1-py3-none-any.whl.
File metadata
- Download URL: llming_stage-0.1.1-py3-none-any.whl
- Upload date:
- Size: 21.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.13.11 Darwin/25.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4643d412e2e0df83ea637b84156baa9e2ffcab5b7c503d70e6c98a8d4db48b47
|
|
| MD5 |
c0021cc6209571395f2b318ba6e88dbc
|
|
| BLAKE2b-256 |
569832e5b9c077c96f4d65d22f3aba0dae8158dcf33e56b0231f593e34a9e00a
|