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.
