Web dashboard and REST API for the Quant-Net quantum networking platform
Project description
Quant-Net API
Web dashboard and REST API for the Quant-Net quantum networking platform. Provides real-time monitoring of network agents, experiment management, calibration tracking, and topology visualization through a browser-based interface backed by a FastAPI server.
Prerequisites
| Tool | Version | Purpose |
|---|---|---|
| Python | ≥ 3.10 | API server runtime |
| Node.js | ≥ 18 | JavaScript bundling (development only) |
| MongoDB | ≥ 6.0 | Data persistence (via quantnet-mq) |
| MQTT Broker | Mosquitto or compatible | Real-time messaging with WebSocket support |
Quick Start
# 1. Install Python dependencies
pip install -r requirements.txt
# 2. Install JS build tools and bundle the frontend
npm install
npm run build
# 3. Start the server
python main.py
The dashboard is available at http://localhost:8081.
Configuration
The server reads its configuration from a quantnet.cfg INI file. It searches the following paths in order:
${QUANTNET_HOME}/etc/quantnet.cfg${VIRTUAL_ENV}/etc/quantnet.cfg/opt/quantnet/etc/quantnet.cfg
If no configuration file is found, the server starts with default values.
Configuration File Format
[mq]
host = 127.0.0.1 # MQTT broker host
port = 1883 # MQTT broker port
ws_host = 127.0.0.1 # MQTT WebSocket host (for browser connections)
ws_port = 8080 # MQTT WebSocket port
mongo_host = 127.0.0.1 # MongoDB host
mongo_port = 27017 # MongoDB port
rpc_server_topic = ... # RPC server topic (optional)
rpc_client_topic = ... # RPC client topic (optional)
path = ... # MQTT path prefix (optional)
[main]
request_types = spgRequest,egpRequest,bsmRequest # Known experiment request types
[schemas]
path = /path/to/schemas # JSON schema directory (optional)
Configuration Parameters
| Section | Key | Default | Description |
|---|---|---|---|
mq |
host |
127.0.0.1 |
MQTT broker hostname |
mq |
port |
1883 |
MQTT broker port |
mq |
ws_host |
127.0.0.1 |
WebSocket host for browser MQTT connections |
mq |
ws_port |
8080 |
WebSocket port for browser MQTT connections |
mq |
mongo_host |
127.0.0.1 |
MongoDB hostname |
mq |
mongo_port |
27017 |
MongoDB port |
mq |
rpc_server_topic |
— | AMQP/MQTT topic for RPC server |
mq |
rpc_client_topic |
— | AMQP/MQTT topic for RPC client |
mq |
path |
— | MQTT path prefix |
main |
request_types |
spgRequest, egpRequest, bsmRequest |
Comma-separated list of known experiment request types |
schemas |
path |
— | Path to JSON schema files for validation |
Server Options
python main.py [--host HOST] [--port PORT]
| Flag | Default | Description |
|---|---|---|
--host |
0.0.0.0 |
Network interface to bind |
--port |
8081 |
HTTP port for the dashboard and API |
The server runs with auto-reload enabled by default (via uvicorn).
JavaScript Build
The frontend is bundled with esbuild from ES module source files into a single minified bundle.
Build Commands
npm run build # Production build — minified with source map
npm run watch # Development — auto-rebuild on file changes
Build Output
static/js/dist/bundle.min.js # Minified application bundle (~57kb)
static/js/dist/bundle.min.js.map # Source map for debugging
Important: The JS bundle must be built before starting the server. The
static/js/dist/directory is git-ignored, sonpm run buildmust be run after cloning the repository.
Source Structure
static/js/
├── main.js # esbuild entry point
├── app.js # App bootstrap class
├── core/
│ ├── EventBus.js # Pub/sub event system
│ ├── ApiClient.js # REST API client
│ └── MqttClient.js # MQTT WebSocket client
├── utils/
│ └── formatters.js # UI helpers and HTML formatters
├── models/
│ ├── AgentStore.js # Agent state management
│ ├── CalibrationStore.js # Calibration data store
│ └── ExperimentStore.js # Experiment data store
├── components/
│ ├── AgentTable.js # Agent table with heartbeat tracking
│ ├── CalibrationTable.js # Calibration results table
│ ├── ExperimentTable.js # Experiment results table
│ ├── DebugPanel.js # MQTT message debug panel
│ ├── TopologyGraph.js # vis.js network topology
│ ├── modals/
│ │ ├── AgentModal.js # Agent details and calibration viewer
│ │ ├── CalibrationDetailsModal.js
│ │ ├── CalibrationFormModal.js # Calibration submission form
│ │ ├── EgpModal.js # Entanglement generation form
│ │ ├── ExperimentModal.js # Experiment details viewer
│ │ ├── PingModal.js # Agent ping form
│ │ └── SpgModal.js # Single photon / BSM experiment form
│ └── charts/
│ ├── BsmChart.js # BSM tracking scatter chart
│ ├── CalibrationChart.js # Per-task calibration charts
│ ├── DataChart.js # Time-series data chart
│ ├── HistogramChart.js # Normal distribution histogram
│ ├── HomChart.js # HOM coincidence chart
│ ├── PolTrackingChart.js # Polarization tracking chart
│ └── TimeTaggerChart.js # Wavepacket and collection rate charts
└── (vendor libs) # bootstrap, chart.js, vis-network, paho-mqtt
REST API
The API is mounted at /api and documented via OpenAPI. When the server is running, interactive docs are available at:
- Swagger UI: http://localhost:8081/docs
- ReDoc: http://localhost:8081/redoc
Key Endpoints
| Method | Path | Description |
|---|---|---|
GET |
/api/node |
List all agents or get a specific agent by ID |
GET |
/api/topology |
Get the network topology graph |
POST |
/api/pingpong |
Send ping requests to remote agents |
POST |
/api/calibrate |
Start a calibration process |
GET |
/api/calibration |
Get calibration results |
GET |
/api/experiments |
List experiments with optional filters |
GET |
/api/tasks |
Get agent task results |
POST |
/api/bsm |
Start a BSM experiment |
POST |
/api/spg |
Start single photon generation |
POST |
/api/egp |
Start entanglement generation |
Authentication
The dashboard supports optional cookie-based authentication via fastapi-login. Default credentials:
| Username | Password |
|---|---|
admin |
admin |
/— Public dashboard (no login required)/private— Authenticated dashboard/login— POST login form/logout— Clear session
Docker
DOCKER_BUILDKIT=1 docker build \
--secret id=GH_TOKEN,src=<(echo $GH_TOKEN) \
-f docker/Dockerfile .
The Docker image clones the required private repositories (quant-net-mq, quant-net-plugins, quant-net-server) during build using a GitHub token. The container runs python main.py as its entrypoint.
Environment Variables
| Variable | Description |
|---|---|
QUANTNET_HOME |
Base directory for configuration files |
QUANTNET_ENTRYPOINT_DELAY |
Seconds to wait before starting (for dependency readiness) |
QUANTNET_ENTRYPOINT_QUIET_LOGS |
Suppress entrypoint log messages |
License
Project details
Release history Release notifications | RSS feed
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 quantnet_api-1.1.0.post2.tar.gz.
File metadata
- Download URL: quantnet_api-1.1.0.post2.tar.gz
- Upload date:
- Size: 653.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf112fafc2b786ab924e7ee8b7e1bfd0cc05aa6b3512998e2491e78e5a843f76
|
|
| MD5 |
0d12360cbf7184a21bb2c58695f440a0
|
|
| BLAKE2b-256 |
0bd1172ee895516f3665075b6b0c901e5dddce140609336523cf3edc018daef3
|
File details
Details for the file quantnet_api-1.1.0.post2-py3-none-any.whl.
File metadata
- Download URL: quantnet_api-1.1.0.post2-py3-none-any.whl
- Upload date:
- Size: 671.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e4dcb5a9348fe4d445fb2498d83e6db90c3f15c8ab70a4f285375b67265148a
|
|
| MD5 |
5c68aa415be5faa2ce57dc2f06409597
|
|
| BLAKE2b-256 |
6650acd3d7e9ba177c86be9c722ade076e9aa6e4a315931a7fe843e804d53443
|