Production-oriented React dashboard for operating QubicDB indexes, memory, lifecycle, and runtime config.
This README is aligned with:
- QubicDB OpenAPI: github.com/qubicDB/docs — openapi.yaml
- QubicDB API docs: github.com/qubicDB/docs — API.md
- Interactive API reference: qubicdb.github.io/docs
QubicDB Console is an admin/operator UI. It focuses on:
- index registry management
- index-level inspection (state, neurons, activity)
- runtime config patching
- daemon/admin actions
- query and context testing
It is not a public end-user app.
- Node.js 18+ (recommended)
- Running QubicDB server
admin.enabled=trueon server (required for login and most dashboard features)
If admin endpoints are disabled server-side, login and admin pages will fail (expected).
docker pull qubicdb/qubicdb-ui:1.0.0
docker run -d -p 8080:80 qubicdb/qubicdb-ui:1.0.0UI available at http://localhost:8080. Point it to your QubicDB server from the Settings page.
Docker Hub: hub.docker.com/r/qubicdb/qubicdb-ui
npm install
npm run devDefault UI dev URL: http://localhost:3000
Build production bundle:
npm run buildPreview production bundle locally:
npm run previewBuild image from qubicdb-ui/Dockerfile:
docker build -t qubicdb-ui:latest .Run published image:
docker run --rm -p 8080:80 qubicdb-ui:latestUI becomes available at http://localhost:8080.
qubicdb-ui/docker-compose.yml starts both services for local integration:
docker compose up -dExposed ports:
- QubicDB API:
http://localhost:6060 - QubicDB UI:
http://localhost:8080
Stop stack:
docker compose downCompatibility note:
- Compose sets
QUBICDB_ALLOWED_ORIGINS=http://localhost:8080,http://127.0.0.1:8080so browser requests from the UI origin are accepted by QubicDB.
- Login calls
POST /admin/loginwith{ user, password }. - On success, credentials are retained in client state and converted to
Authorization: Basic ...for admin routes. - The server does not issue tokens/sessions on
/admin/login; Basic Auth is used for follow-up requests.
Default server-side dev credentials are typically:
- user:
admin - password:
qubicdb
Change these before production.
- Default server URL in UI store:
http://localhost:6060 - Can be changed from Login or Settings page
- Persisted locally (Zustand persisted state)
Important:
- Browser fetch requires HTTP(S) URLs.
- Use
http://...orhttps://...here (notqubicdb://URI scheme).
- Health and global stats
- Lifecycle distribution
- Daemon status
- Live charts from polling
- List/create/delete registry entries
- Per-index neuron/synapse counts and lifecycle state
- Filtering and pagination
- Index stats and brain state
- Wake/sleep/reset/delete actions
- Search over index neurons
- Activity feed visualization
- Manual search testing (
/v1/search) - Context assembly testing (
/v1/context)
- Time-series view of worker/lifecycle metrics
- Reads
/v1/config - Patches
/v1/configfor runtime-safe fields
- Server URL update
- Admin daemon and maintenance triggers (GC/persist)
Health and metrics:
GET /healthGET /v1/stats
Registry:
GET /v1/registryPOST /v1/registryGET /v1/registry/{uuid}DELETE /v1/registry/{uuid}POST /v1/registry/find-or-create
Brain/index:
GET /v1/brain/statsGET /v1/brain/statePOST /v1/brain/wakePOST /v1/brain/sleep
Memory/query:
GET /v1/recallGET /v1/read/{id}POST /v1/writePOST /v1/searchPOST /v1/context
Visualization:
GET /v1/graphGET /v1/synapsesGET /v1/activity
Admin:
POST /admin/loginGET /admin/indexesGET /admin/indexes/{indexId}DELETE /admin/indexes/{indexId}POST /admin/indexes/{indexId}/resetGET /admin/indexes/{indexId}/exportGET /admin/daemonsPOST /admin/daemons/pausePOST /admin/daemons/resumePOST /admin/gcPOST /admin/persist
Runtime config:
GET /v1/configPOST /v1/config
Config page supports editing runtime-safe fields exposed by server config patch handler:
lifecycle.*daemons.*worker.maxIdleTimeregistry.enabledmatrix.maxNeuronssecurity.allowedOriginssecurity.maxRequestBodyvector.alpha
Startup-only fields (server addresses, storage paths, etc.) are effectively read-only at runtime.
The UI uses periodic polling (React Query) for near-live visibility.
Examples:
- health/admin status: every ~5s
- per-index state/stats: ~3s-5s
- metrics streams: ~2s-3s
- config snapshot: ~10s
For large fleets, tune usage patterns or gate dashboard access to reduce background load.
The client expects QubicDB standard error envelope:
{
"ok": false,
"error": "message",
"code": "MACHINE_CODE",
"status": 400
}Common operational codes to watch in UI flows:
UNAUTHORIZEDINDEX_ID_REQUIREDUUID_NOT_REGISTEREDQUERY_REQUIREDMUTATION_DISABLEDRATE_LIMITED
- Do not run this UI exposed to public internet without network controls.
- Always set a non-default admin password in production.
- Prefer HTTPS between browser and API.
- Restrict CORS (
security.allowedOrigins) to trusted origins.
- React 18 + TypeScript
- Vite
- TailwindCSS
- TanStack Query
- Zustand
- Recharts
- Lucide React
- MCP (
/mcp) is not used by this dashboard; it is intended for LLM clients. - Direct mutation API routes (
/v1/touch,/v1/forget,/v1/fire) are intentionally disabled by server policy.
Developed by Deniz Umut Dereli