Run AURORA at your site, without moving your data.

A node runs inside your network, against your own data, under your own governance. Nothing about a patient leaves the institution — models and queries travel instead. This page covers what you need, how a node comes up, and what each module expects.

Quickstart

A node is a container stack: an API, a worker pool, a local Postgres, an object store for derived artefacts, and a DICOM adapter that talks to your PACS. It never opens an inbound path to patient data from outside your network.

Before you start
  • A Linux host or Kubernetes namespace inside your network — 8 vCPU / 32 GB RAM for a registry-only node; a CUDA-capable GPU if you enable imaging models.
  • Container runtime and an internal registry mirror, if your site blocks external image pulls.
  • Read access to the PACS or VNA you intend to index, plus a DICOM AE title for the adapter.
  • A service account for your EHR's FHIR endpoint, scoped to the resources the module declares.
  • Ethics or IRB approval covering the intended use, before any patient data is indexed.
  • A pilot agreement and node credentials issued by the AURORA council.
01

Fetch and verify the node bundle

Every release is signed. Verify before you run it — a node that cannot prove its provenance should not be trusted with your data.

aurora node fetch --version 0.1.0-pilot
aurora node verify --signature aurora-0.1.0-pilot.sig
# expect: signature OK · issuer: AURORA Council · sha256 match
02

Configure the node

Configuration is declarative and reviewable. Nothing is enabled by default, and the config is the artefact your governance team signs off.

# aurora.node.yaml
site:
  id: karolinska-neuro
  region: eu-north
modules:
  - AURORA-CHIARI
  - AURORA-HYDRO
sources:
  dicom:
    ae_title: AURORA_SCP
    peer: pacs.internal:11112
  fhir:
    base_url: https://ehr.internal/fhir/R4
    scopes: [Patient.read, Condition.read, ImagingStudy.read]
federation:
  advertise_cohorts: true
  egress: aggregates_only
03

Bring the stack up

The node runs entirely inside your perimeter. The only outbound connection is to the federation coordinator, and it carries aggregates — never records.

aurora node up --config aurora.node.yaml
aurora node status
# api        ready
# worker     ready (2 replicas)
# dicom      listening on 11112
# federation connected · egress: aggregates_only
04

Index, then validate locally

Index a small cohort first and check module performance in your own population before anything is relied upon. Local validation is not optional — see the regulatory page for why.

aurora index run --module AURORA-CHIARI --limit 250
aurora eval local --module AURORA-CHIARI --report out/eval.html
# writes a signed evaluation report you can hand to your review board

Federation & deployment

Joining a federation means agreeing to a protocol, not shipping a dataset. Your node advertises which cohorts it can answer questions about; a study runs where the data already lives, and only aggregates or model updates return.

Leaves your network
Never leaves
Aggregate counts and cohort descriptors
Patient identifiers, MRNs, names, dates of birth
Model weight updates from local training
Images, reports, waveforms, notes — any raw record
Evaluation metrics and subgroup performance
Row-level data of any kind, including de-identified rows
Signed provenance and audit metadata
Anything your config does not explicitly allow to leave
  • Egress is allowlisted and defaults to aggregates only; there is no mode that ships records to us.
  • The federation coordinator never initiates inbound connections to your node.
  • Every job carries a signed manifest, so you can audit exactly what ran, on which cohort, under which module version.
  • A site can withdraw at any time; withdrawal removes your node's contribution from subsequent training rounds.
  • Air-gapped operation is supported for indexing and local evaluation, with federation disabled.

Module reference

Nine disease modules, each a full vertical over the same substrate. Enable only the ones your programme carries — a module you don't enable never runs and never touches your data.

Module
Subsystems
Primary inputs
Stage
Glioma
AURORA-GLIO
11
MRI, pathology, molecular markers, treatment timeline
Live
Chiari malformation
AURORA-CHIARI
5
MRI craniocervical, CSF flow, symptom timeline
Beta
Craniosynostosis
AURORA-CRANIO
8
CT, 3D photogrammetry, growth curves, ICP indicators
Live
Hydrocephalus
AURORA-HYDRO
3
CT/MRI ventricles, shunt series, revision history
Live
Encephalocele
AURORA-ENCEPH
2
Prenatal and postnatal imaging, closure planning
Beta
Spina bifida
AURORA-SPINA
6
Prenatal imaging, closure records, functional follow-up
Planned
Tethered cord
AURORA-TC
4
MRI spine, urodynamics, motor and sensory scores
Planned
Dandy-Walker
AURORA-DWM
2
Posterior fossa imaging, lifespan follow-up
Planned
Arachnoid cysts
AURORA-ARACH
3
MRI, fluid dynamics, fenestration outcomes
Planned

Tech stack

Six layers, deliberately boring where boring is safer. Every layer is versioned and signed, so a result can be traced to the exact code and weights that produced it.

Data
Layer 1

Local ingestion and normalisation. Records are indexed in place; nothing is copied to a central store.

DICOM HL7 FHIR R4 OMOP CDM Postgres
Models
Layer 2

Versioned, signed model artefacts with model cards. Federated training rounds exchange updates, not data.

PyTorch ONNX Model cards Flower
Clinical
Layer 3

Workflow surfaces for research use, built so a clinician can always see the basis of an output and override it.

SMART on FHIR OAuth 2.0 Audit log
Research
Layer 4

Cohort discovery, study definitions that run at every site, and reproducible evaluation pipelines.

Study protocol Replication runner DVC
Ethics
Layer 5

Consent scope enforcement, equity gates in the release path, and subgroup reporting that publishes regardless of result.

Equity gate DPIA IRB scope
Community
Layer 6

Open RFCs, public governance decisions, and the provenance chain that lets an outsider verify a claim.

RFC process Sigstore SBOM

FAQ

Does any patient data reach AURORA?

No. The architecture has no endpoint that accepts records. Aggregates, model updates and evaluation metrics leave your node only when your config allows it, and identifiers never do.

Can we use this clinically?

Not today. AURORA is research software and holds no device clearance in any market. Any clinical use would require the module in question to complete a conformity route first — the regulatory page sets out exactly where each framework stands.

What if our PACS or EHR is unusual?

The adapters speak standard DICOM and FHIR, and sites with older or bespoke systems have been onboarded with a translation shim. That work is done with your team during pilot onboarding rather than left to you.

Do we have to enable every module?

No. Enable only what your programme carries. A module that is not enabled is not deployed and cannot touch your data.

What happens if we want to leave?

You withdraw the node. Your contribution stops being included in subsequent training rounds, and because we never held your data there is nothing for us to delete on your behalf.

Is it really MIT licensed?

At public alpha, yes — including the module code and the evaluation harness. During the private pilot, node images are issued under a pilot agreement while the security review completes.

Who do we call when it breaks?

Pilot sites have a named engineer and a private channel. Anything that isn't site-specific gets answered in the public issue tracker so the next site doesn't hit it.

Getting help

Pilot sites get a named engineer and a private channel. Everything that isn't site-specific is answered in public so the next site doesn't have to ask.

pilot@aurora.health
engineering@aurora.health
security@aurora.health
Cookies · federation-first by default

We keep essential cookies so the site works. Everything else — analytics on which guides help, and remembering where you left off in a guide — is off until you say yes. We never sell data, and nothing you read here is tied to a clinical record.