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.2.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.2-py3-none-any.whl (21.6 MB view details)

Uploaded Python 3

File details

Details for the file llming_stage-0.1.2.tar.gz.

File metadata

  • Download URL: llming_stage-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 ec6ff9a85e5c78e24f5c5600b71c4b0307ce68bb55bdd01c59dc6f2105b59b7a
MD5 85d141150efe79daedf983eb9b9e8c8c
BLAKE2b-256 56b8fde3d6cef2ca9c50d34a5051529cf9ae2abc1c06acd2a019da2ea9b1879e

See more details on using hashes here.

File details

Details for the file llming_stage-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: llming_stage-0.1.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d30fa1d6b1cc8f8c4da7fd3f126ab1edb11cfc645ceb0064966ff14a8f0a78fa
MD5 cf840061c126aef7b22168e44362c2a5
BLAKE2b-256 738aef5ca6bfa4be215ae9ad59fb41434837c3a612dcc3f8c9b1ac259752e06f

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