Quantum
Declarative web apps in XML, with AI and RAG built into the language. No build chain, no JavaScript, no frontend framework.
Quantum is a full-stack framework whose language is markup. State, database queries, forms, LLM calls and retrieval-augmented generation are all tags — not libraries you wire together. It takes its philosophy from ColdFusion and Adobe Flex: the markup is the app.
⚠️ Pre-1.0, and honest about it. See Stability — the table there reflects what has actually been executed end-to-end, not what is aspirational.
The part that isn't like the others
Retrieval-augmented generation, as a language construct:
<q:component name="DocsBot">
<q:knowledge name="docs" model="phi3" embedModel="nomic-embed-text">
<q:source type="directory" path="./docs/" pattern="*.md" />
</q:knowledge>
<q:query name="answer" datasource="knowledge:docs" mode="rag">
SELECT answer FROM chunks WHERE content SIMILAR TO :question
<q:param name="question" value="{form.question}" type="string" />
</q:query>
<p>{answer.answer}</p>
</q:component>
That indexes a directory, embeds it, stores the vectors, retrieves the relevant chunks and asks the model — in the markup. There is no Python file behind it.
An agent with its own tools, same idea:
<q:agent name="calc" model="phi3" max_iterations="4">
<q:instruction>Use the add tool, then answer.</q:instruction>
<q:tool name="add" description="Add two numbers">
<q:param name="a" type="number" required="true" />
<q:param name="b" type="number" required="true" />
<q:function name="doAdd">
<q:set name="sum" value="{a + b}" type="number" />
<q:return value="{sum}" />
</q:function>
</q:tool>
<q:execute task="What is 17 plus 25?" />
</q:agent>
The tool body is Quantum, not Python. The reasoning loop, the tool call and the type coercion of the model's arguments are the runtime's job.
The rest of the language
<q:component name="Orders">
<q:query name="orders" datasource="db">
SELECT id, customer, total FROM orders WHERE total > :min
<q:param name="min" value="100" type="decimal" />
</q:query>
<table>
<q:loop query="orders">
<tr><td>{orders.customer}</td><td>{orders.total}</td></tr>
</q:loop>
</table>
</q:component>
Save it as components/orders.q, run quantum start, and it is served at
http://localhost:8080/orders.
q:query refuses to run SQL with an undeclared :param — parameterised queries are
enforced by the parser, not by discipline.
Also core: q:set with session. / application. / request. scopes, q:if,
q:function, q:action for form handling, q:data for CSV/JSON/XML import,
q:import / q:slot for composition.
Quick start
Requirements: Python 3.12+ and pip.
pip install quantum-framework
Create hello.q:
<q:component name="HelloWorld" xmlns:q="https://quantum.lang/ns">
<q:return value="Hello World!" />
</q:component>
quantum run hello.q
[EXEC] Executing component: HelloWorld
[SUCCESS] Result: Hello World!
For a web app, put .q files in components/ and run quantum start
(components/index.q is served at /). quantum stop stops it.
For the AI examples you also need an Ollama server and the RAG extra:
pip install "quantum-framework[rag]"
ollama pull phi3 && ollama pull nomic-embed-text
export QUANTUM_LLM_BASE_URL=http://localhost:11434
Declare datasources in quantum.config.yaml (next to components/) and q:query works
with nothing else running — SQLite needs no extra; PostgreSQL and MySQL drivers come with
pip install "quantum-framework[db]":
datasources:
db:
driver: sqlite
database: ./data/app.db
CLI
| Command | What it does |
|---|---|
run <file.q> |
Execute a component, app, or API |
start |
Start the web server (port 8080 by default; --port to change) |
stop |
Stop the server started by start |
deploy [path] · apps |
Deploy an application, manage deployed ones |
pkg · jobs · mq · migrate |
Packages, jobs, message queues, migrations |
From source
To work on Quantum itself:
git clone https://github.com/danielgregorio/quantum.git
cd quantum
pip install -e ".[dev]"
quantum run examples/hello.q
See CONTRIBUTING.md for the test suite and the architecture.
Documentation
Full docs at danielgregorio.github.io/quantum:
- Getting Started · Installation · Quick Start
- Components · State · Loops · Conditionals
- Queries · Functions
Releases and their notes are on the GitHub Releases page.
Stability
Support levels are defined in SUPPORT_TIERS.md. Short version:
| Surface | Status |
|---|---|
Core language — q:component, q:set, q:if, q:loop, q:function, q:query, q:action, q:invoke, q:data |
Stable |
AI — q:llm, q:knowledge, q:agent |
Beta — validated end-to-end against a live Ollama server |
q:team (multi-agent handoff) |
Beta, less exercised |
Jobs, messaging, websockets, mail, file uploads, ui:*, terminal target |
Experimental — they run, but no API stability promise |
Python scripting (q:python, q:pyclass, q:pyimport) |
Experimental, and a full-trust escape hatch — see SECURITY.md |
A functional audit in 2026-09 found that several of these surfaces had never been run end-to-end despite being documented as complete. They were fixed or re-labelled, and feature status is now verified by execution rather than asserted by hand.
Pre-1.0: APIs may change between minor versions.
Project layout
quantum/
├── quantum/
│ ├── core/ # Parser & AST (registry-based, modular)
│ ├── runtime/ # Execution engine, web server, renderer
│ └── cli/ # Command-line entry point
├── examples/ # runnable .q examples
├── tests/ # pytest suite (~3.8k tests)
├── scripts/ # dev tools
└── docs/ # VitePress documentation
Adding a tag is one parser + one executor + a registry entry — see CONTRIBUTING.md.
Contributing
Read CONTRIBUTING.md for dev setup and how the modular parser/executor architecture works. By participating you agree to the Code of Conduct.
Found a security issue? Follow SECURITY.md — do not open a public issue.
License
MIT — see LICENSE.
Release files for quantum-framework 0.18.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 | |
|---|---|---|---|
| quantum_framework-0.18.0.tar.gz | 1.1 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| quantum_framework-0.18.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.2 MB
Release files / quantum_framework-0.18.0.tar.gz
| Download URL | quantum_framework-0.18.0.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f7158627289f86c9874c097a92a2ac98a165b9cec50010b134cf3f1f9dc7bb75
|
|
BLAKE2b-256 checksum How to use checksums |
09b0fe60fe635fdb1a8e5554bccd6c1db23ac55d177299ccc02d192d8a1ae9f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / quantum_framework-0.18.0-py3-none-any.whl
| Download URL | quantum_framework-0.18.0-py3-none-any.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
587b6da10216ed18413ccc14db30c85c73da30f6bd54de06d047549c716c044b
|
|
BLAKE2b-256 checksum How to use checksums |
fb9ee2b7ed65417bcee5cf0a3c4d6aaa65b3d14bff007a3fec2a36f59d98af68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log