An application translating incoming DICOM DIMSE messages to a DICOMWeb Client or providing a DICOMWeb Server forwarding messsages to a DIMSE Client. Use it as a Windows or a Linux systemd service.
  • Rust 99.2%
  • Shell 0.5%
  • PowerShell 0.3%
Find a file
christof.schadt ebd80b6f34
Some checks failed
CI / build-and-test (push) Failing after 6m3s
Release / build-release (push) Successful in 3m0s
Merge pull request 'feat: #53 implement delete request' (#55) from implement-delete-request into main
Reviewed-on: #55
2026-07-15 20:42:22 +02:00
.forgejo/workflows chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
.vscode chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
architecture/arc42 chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
doc feat: implement delete request 2026-07-15 20:23:53 +02:00
hap chore: test HAPI FHIR server via docker 2026-07-13 20:05:37 +02:00
src feat: implement delete request 2026-07-15 20:23:53 +02:00
.gitignore chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
build_all.sh chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
Cargo.lock chore: make FHIR server more robust 2026-07-13 08:15:05 +02:00
Cargo.toml chore: make FHIR server more robust 2026-07-13 08:15:05 +02:00
config.toml chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
install-service.ps1 chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
install-service.sh chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
INSTALL.md chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
LICENSE chore: rename from dicom-broker to dicom-gateway 2026-07-09 20:41:43 +02:00
README.md feat: implement delete request 2026-07-15 20:23:53 +02:00
rust-toolchain.toml chore: update everything but gui 2026-07-03 13:26:25 +02:00

dicom-gateway

CI

Release Build

A configurable DICOM gateway written in Rust, bridging DIMSE and DICOMWeb transports, including TLS handling. Designed to run as a Windows Service or a Linux systemd service.

DICOM Gateway TUI

Features

Frontends (inbound)

Frontend Protocol TLS
DIMSE SCP C-FIND, C-GET, C-MOVE, C-STORE, C-ECHO DICOM-TLS (PS3.15)
DICOMWeb HTTP QIDO-RS, WADO-RS, STOW-RS HTTPS

Additional Frontend

Frontend Protocol TLS
FHIR R4 HTTP Patient, ImagingStudy (read + search) HTTPS (shared with DICOMWeb)

The FHIR R4 frontend is only available with the Local Archive backend. It mounts alongside the DICOMWeb HTTP server (same port, same TLS) and allows querying DICOM information via FHIR. Retrieval can then be performed via DICOM (DIMSE or DICOMweb). The ImagingStudy.endpoint parameter points to the DICOMweb endpoint.

Backends (outbound)

Backend Protocol TLS
DICOMWeb QIDO-RS, WADO-RS, STOW-RS HTTPS via URL scheme
DIMSE SCU C-FIND, C-GET, C-STORE DICOM-TLS (PS3.15)

Additional Backend

Backend Protocol TLS
Local Archive SQLite + filesystem
FHIR Patient, ImagingStudy (search, create, update) HTTPS

The local archive allows the DICOM gateway to work as a DICOM archive which can be access via DICOM DIMSE, DICOMweb and FHIR (for querying only).

For the "Local Archive" backend, the DIMSE SCP and DICOMWeb/FHIR (http) frontends can all run simultaneously (frontend.mode = "both") and share the same TLS certificate. See "Operation mapping" below.

Operation mapping

Inbound Outbound
C-FIND QIDO-RS query / Local Archive lookup
C-GET WADO-RS retrieve / Local Archive read
C-MOVE SEND-RS or WADO-RS / Local Archive read → C-STORE SCU to move destination
C-STORE STOW-RS store / Local Archive write
C-ECHO Check /health endpoint (fallback: make HEAD request)
QIDO-RS C-FIND / Local Archive lookup
WADO-RS C-GET or C-MOVE / Local Archive read
STOW-RS C-STORE / Local Archive write
SEND-RS C-MOVE
DELETE (non-standard) Local Archive delete (archive backend only, [archive] allow_delete)

Documentation


Authentication

Optional JWT Bearer token authentication can be enabled via the [auth] config section. When present, it is enforced on the DICOMWeb and FHIR HTTP frontends (Authorization: Bearer) and on the DIMSE SCP frontend (PS3.7 User Identity Negotiation, type 5). Validated tokens are transparently forwarded to the backend. Tokens are generated by the dicom-gateway-config GUI; only their SHA-256 hash is stored.


FHIR Server / Integration

When the archive backend is active, a small FHIR server frontend can expose stored DICOM data via Patient and ImagingStudy resources. It is possible to subscribe to these resources for updates via a rest-hook.

The archive backend can also connect to a FHIR server and create/update Patient and ImagingStudy resources there, along with an optional OAuth authentication.


Configuration

The gateway is configured via a TOML file (default: config.toml). Run with --config /path/to/config.toml.

See doc/manual/03_configuration_reference.md for the full key reference, TLS options, and C-MOVE destination setup.


Building & Installation

See INSTALL.md for build instructions, systemd and Windows Service setup, and how to run interactively.

Authors

Original Author:

Christof Schadt (christof dot schadt at mailbox dot org)

Icon

Icon by Freepik - Flaticon