Skip to main content

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

llming-stage

Python 3.14+ License: MIT PyPI version Code style: ruff

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 attach Stage(app), or let Stage() create the default FastAPI app for compact demos. The internal /_stage routes 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 boxllming-com runs 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-stage app 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/:


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

llming_stage-0.1.1.tar.gz (21.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llming_stage-0.1.1-py3-none-any.whl (21.6 MB view details)

Uploaded Python 3

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

Hashes for llming_stage-0.1.1.tar.gz
Algorithm Hash digest
SHA256 17c750847936deec99feef05092f245e920e28d3b4b1e2de7a6f7e0c1053f272
MD5 0bd5442322f1c3e5e7ae64532c1cbe86
BLAKE2b-256 4a65ea1cfbb70d2493d96bf9644d5c2c3728e85d3da734b93bcea21057258d30

See more details on using hashes here.

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

Hashes for llming_stage-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4643d412e2e0df83ea637b84156baa9e2ffcab5b7c503d70e6c98a8d4db48b47
MD5 c0021cc6209571395f2b318ba6e88dbc
BLAKE2b-256 569832e5b9c077c96f4d65d22f3aba0dae8158dcf33e56b0231f593e34a9e00a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page