A FLAME analysis is a container that travels to the data. Institutions each run a node; Hub is the centre that decides what runs where — it builds the analysis image, ships it to the nodes that joined a project, and collects the results, without ever seeing a row of the underlying data.
This monorepo is the central half: five backend services, a Nuxt frontend, 19 shared TypeScript libraries, and the documentation site.
Documentation · Quick start · Services · Packages · Contributing
Requires Node.js 24, npm, and Docker. Running the backend locally also expects Authup (OAuth2), Redis, RabbitMQ, and MySQL or PostgreSQL.
npm ci # install
npm run build # build all packages (Nx, dependency-aware)
npm run test # run the test matrix
npm run lint # lintdocker compose up -d # MySQL + Postgres
npm run dev --workspace=apps/server-core # Core API
npm run dev --workspace=apps/client-ui # Nuxt frontend
npm run dev --workspace=docs # Documentation siteEvery entity endpoint answers with a { data, meta } envelope, and every query-capable GET
publishes the vocabulary it accepts under meta.schema — so a client never has to read server
source to build a valid query.
📖 Local setup · API reference · Deployment
Each backend service follows the same hexagonal (ports & adapters) architecture and ships in
the shared privateaim/hub Docker image, selected at startup with SERVICE=<name>.
| Service | Responsibility |
|---|---|
server-core |
Main REST API — analyses, projects, nodes, registries |
server-core-worker |
Background worker — Docker image build & distribution |
server-storage |
File and object storage, on MinIO / S3 or the filesystem |
server-telemetry |
Log aggregation and events, backed by VictoriaLogs |
server-messenger |
Durable store-and-forward message broker |
client-ui |
Nuxt 4 web application |
Shared libraries, published to npm as @privateaim/*.
| Package | Responsibility | Version |
|---|---|---|
kit |
Crypto, domain events, permissions, realms | |
errors |
HubError, typed subclasses, code → HTTP-status mapping |
Models, contracts and typed clients, one set per service area.
| Package | Responsibility | Version |
|---|---|---|
core-kit |
Domain models and types for the core service | |
core-http-kit |
HTTP client for the core API | |
core-realtime-kit |
WebSocket event contracts for the core API | |
storage-kit |
Storage domain types and HTTP client | |
telemetry-kit |
Telemetry domain types and validators | |
messenger-kit |
Messenger contracts and crypto types | |
messenger-http-kit |
HTTP client for the messenger broker |
Building blocks shared across the backend services.
| Package | Responsibility | Version |
|---|---|---|
server-kit |
Logging, auth, AMQP, Redis, dependency injection | |
server-db-kit |
TypeORM utilities and migration support | |
server-http-kit |
HTTP middleware and OpenAPI generation | |
server-realtime-kit |
Socket.io server helpers | |
server-storage-kit |
Storage service components | |
server-telemetry-kit |
Telemetry components and Winston transport | |
server-core-worker-kit |
Worker task definitions | |
server-test-kit |
Shared test fakes and helpers |
| Package | Responsibility | Version |
|---|---|---|
client-vue |
Vue 3 component library | |
client-vue-theme |
vuecs-based theme — design tokens and chrome |
FLAME Hub runs on a stack of open-source libraries maintained by the same author: Authup (identity and access), Routup (HTTP routing), Hapic (HTTP clients), validup (validation), ilingo (i18n), and vuecs (Vue components and theming).
Before starting work on a pull request, please review the contributing guidelines and the code of conduct.
Created and maintained by Peter Placzek (@tada5hi), with contributions from the PrivateAIM team.
If you use FLAME Hub in academic work, please cite it — citation metadata lives in
CITATION.cff, which GitHub renders as a "Cite this repository" button.
Made with 💚 · Published under Apache 2.0.
