Architecture

NMRKit is a FastAPI application that exposes a versioned REST API for NMR data processing, conversion, prediction, and molecule registration. Heavy lifting for spectra parsing and prediction is delegated to companion Docker containers that run the nmr-cli and nmr-respredict toolchains.

System overview

mermaid
flowchart TB
    Client[Client / NMRium / nmrxiv]
    API[NMRKit API<br/>FastAPI]
    CLI[nmr-cli container<br/>nmr-converter]
    RP[nmr-respredict container]
    PG[(PostgreSQL<br/>RDKit cartridge)]
    Redis[(Redis)]
    Minio[(MinIO)]

    Client -->|HTTP| API
    API -->|docker exec| CLI
    API -->|docker exec| RP
    API --> PG
    API --> Redis
    API --> Minio

Components

ComponentContainer namePurpose
NMRKit APInmrkit-apiFastAPI gateway, versioning, health checks, Prometheus metrics
nmr-clinmr-converterParse spectra, convert formats, predict shifts via nmrdb.org / nmrshift
nmr-respredictnmr-respredictResidual-based NMR prediction (planned integration)
PostgreSQLpgsqlMolecule registration (lwreg) and RDKit cartridge queries
RedisredisCaching and background task support
MinIOminioObject storage for uploaded files
Prometheusnmrkit_prometheusMetrics collection
Grafananmrkit_grafanaMetrics dashboards

API modules

All endpoints are mounted under a version prefix (for example /latest/ or /v1/).

ModulePrefixDescription
Chemistry/chemHOSE code generation (CDK / RDKit)
Spectra/spectraParse NMR data from files, URLs, publication strings, or peak lists
Converter/convertConvert raw NMR data to NMRium JSON
Predict/predictPredict NMR spectra from molecular structures
Registration/registrationRegister, query, and retrieve molecules via lwreg

See the interactive API reference (Scalar) or the module pages in this documentation for endpoint details.

How nmr-cli is invoked

The API container mounts the Docker socket and executes commands inside the nmr-converter container:

bash
docker exec nmr-converter nmr-cli parse-spectra -u <url>
docker exec nmr-converter nmr-cli predict -s "<mol block>" --engine nmrshift ...

A shared volume (/shared) is used to pass files between containers when uploading MOL files for prediction.

API versioning

NMRKit uses fastapi-versioning:

  • /latest/ — always points to the newest API version
  • /v1/ — stable version 1 endpoints
  • /latest/openapi.json — OpenAPI schema used by Scalar

Interactive documentation

API documentation is served by Scalar at /latest/docs and /v1/docs. The root URL (/) redirects to the docs by default.

Public instances: