Skip to content

Technology Stack ​

Medipal is built from a small number of well-known open technologies. This page lists what each part of the platform is built with and what that technology is used for, so that developers and IT teams can judge how it fits their environment.

API server ​

TechnologyUsed for
Python 3.12Runtime for the API server and its command line interface.
FastAPIHTTP framework: routing, request validation and the generated OpenAPI document.
PydanticRequest and response models, generated from the platform schema.
SQLAlchemy 2Object-relational mapping over PostgreSQL; the model classes are generated from the platform schema.
AlembicVersioned database migrations, applied automatically before an upgraded server starts serving.
PostgreSQL 15The only database. Structured questionnaire definitions and answers are stored as JSONB, so they can be queried and indexed in place.
APSchedulerBackground jobs: event delivery, webhook retries, housekeeping, directory synchronisation and heartbeats.
CloudEvents-style event envelopeEvery domain change is recorded as an event with a stable envelope, consumed by workflows, subscriptions and webhooks.
JSON LogicPortable rule language used for workflow conditions and data resolution.
JSON Schema and OpenAPIThe single source of the data model and API contract.
JSON Web Tokens, TOTP, bcryptSession tokens, multi-factor authentication and password storage.

Web app ​

TechnologyUsed for
Nuxt 4 / Vue 3, TypeScriptThe administrator and clinician application, rendered in the browser.
Nuxt UI and Tailwind CSSThe component library and styling system shared with the questionnaire engines.
PiniaClient-side state.
JSON FormsSchema-driven forms for plugin configuration, engine options and question settings.
Interactive charting libraryAnalytics charts and dashboards.
Node-based graph editorThe visual workflow editor.
Full-featured calendar componentScheduling and the per-patient calendar.
Microsoft Authentication LibrarySign in with Microsoft Entra ID.
SentryError reporting from the browser.
Vercel AI SDKThe AI assistant conversation layer (the provider is configured per instance).

Mobile app ​

TechnologyUsed for
Nuxt / Vue 3 with CapacitorOne codebase for iOS and Android, packaged as native apps.
Encrypted SQLiteOffline storage of questionnaires, schedules and unsent answers.
Native local notifications and background runnerReminders and background synchronisation.
Over-the-air update pluginDelivery of updated questionnaire engines and app content without a store release.

Questionnaire engine ​

TechnologyUsed for
Vue 3 single-file componentsQuestion components (renderers) written by Medipal or by third parties.
Shared UI library inside the coreThe same Nuxt UI components as the web app, exposed to renderers so every engine looks and behaves the same.
Single-file HTML bundlesAn engine is one self-contained file, versioned and published to a content delivery network.

Schema and code generation ​

The data model and the API contract live in one YAML/JSON Schema source. A generation pipeline produces the Pydantic request and response models, the SQLAlchemy models, the OpenAPI document and the typed TypeScript clients used by the web and mobile apps. Nothing is written twice, and a model change reaches every component in the same release. See Architecture.

Delivery and operations ​

TechnologyUsed for
DockerEvery server-side component ships as a container image for both amd64 and arm64.
Kubernetes and HelmOne namespace per organisation, deployed and upgraded from versioned Helm charts.
Gateway API routingHTTPS routing to the web app and the API, with TLS terminated at the gateway.
Private container and package registryImages, charts, Python packages and SDKs are distributed to partners through a private registry.
GitHub ActionsContinuous integration and release automation.

Quality ​

  • Automated tests run on every change: unit and API tests for the server, contract fuzzing against the OpenAPI document, component tests for the apps and end-to-end browser tests.
  • Releases follow strict semantic versioning; release candidates are promoted unchanged to production.
  • Container images are always referenced by an exact version, never by a moving tag.

See Deploying an Instance for what a partner needs to run the platform.