Release notes
All notable changes to DicomKit and its companion packages. The packages share one version, and versions follow Semantic Versioning.
1.0.0 2026-10-27
The first release of DicomKit: a fast, fault-tolerant DICOM toolkit for .NET 8, .NET 9 and .NET 10 on Windows, Linux and macOS, in pure managed code.
Packages
| Package | What it is |
|---|---|
DicomKit | Core: Part 10 parser and writer, large files, C-ECHO / C-STORE / C-FIND / Modality Worklist / C-MOVE / C-GET (SCU and SCP), anonymization, batch processing, mapping, conversion, audit logging. |
DicomKit.Imaging | Decode and render pixel data, LUTs and windowing, PNG / JPEG export, thumbnails. |
DicomKit.Web | DICOMweb models (DICOM JSON and XML), streaming multipart and the DICOMweb client. |
DicomKit.Web.AspNetCore | DICOMweb server endpoints for ASP.NET Core. |
DicomKit.Cli | The dicomkit command-line tool (a .NET tool). |
Files and data sets
- Parser that does not throw on bad data. Truncated files, wrong lengths, unknown VRs and mislabelled transfer syntaxes become reported parse issues with placeholder nodes, not exceptions. A streaming Part 10 reader and writer.
- Multi-gigabyte files. Bulk values are read on demand, so memory stays bounded by the metadata, with lazy per-frame pixel data and nothing on the large-object heap. See Large files.
- Dictionary and UIDs. Every tag the packages use is in
DicomTagand the built-in dictionary, so keywords and VRs are known without registration. Named transfer syntaxes and SOP classes haveDicomUidsconstants, andDicomUids.GetName(uid)returns their names. - Batch processing over all cores with per-file fault isolation. Inputs that are not DICOM are skipped and reported, never passed to your code. Also
dataset.MapTo<T>()mapping and channel-routed audit logging. - Anonymization with a PS3.15-style profile and salted, deterministic UID remapping, for sharing studies for research and AI.
- Conversion to DICOM. PDF becomes Encapsulated PDF; JPEG becomes Secondary Capture without re-compression; PNG and BMP are stored uncompressed; several images can become one multi-frame instance. The original PDF or JPEG can be extracted again. See Conversion.
Networking (DIMSE)
- C-ECHO, C-STORE, C-FIND (Patient and Study Root), Modality Worklist, C-MOVE and C-GET, as SCU and SCP, on System.IO.Pipelines with back-pressure.
- SCU:
FindAsyncandFindWorklistAsyncstream results asIAsyncEnumerable;MoveAsyncandGetAsyncreport progress. Cancelling sends C-CANCEL and the association stays usable. - SCP:
DicomServerwith store, query and retrieve handlers. C-MOVE destinations come only from your configuration. Responses report pending, completed, failed and warning counts. DicomQuerybuilds ready-made identifiers, andDicomQueryMatcherimplements PS3.4 matching (wildcards, date and time ranges, UID lists, sequences).- SCP/SCU role selection, and limits on identifier size, matches, sub-operations and timeouts. See Networking.
Imaging and codecs
DicomImagedecodes and renders frames to RGBA, makes thumbnails and exports PNG or JPEG.- Display pipeline: modality LUT, window center and width (LINEAR, LINEAR_EXACT, SIGMOID), VOI LUT, MONOCHROME1 and Presentation LUT Shape.
- 1 to 32-bit, RGB, YBR and PALETTE COLOR pixel data, multi-frame and functional groups.
- Managed codecs for RLE and JPEG baseline, extended and lossless; JPEG-LS and JPEG 2000 decoding. Register your own decoders with
DicomFrameDecoders.Register. See Imaging.
DICOMweb
- DICOM JSON and Native DICOM Model XML, a streaming
multipart/relatedreader and writer, andDicomWebClientfor QIDO-RS, WADO-RS and STOW-RS. app.MapDicomWeb()maps QIDO-RS, WADO-RS and STOW-RS endpoints over a pluggableIDicomWebStore, with in-memory and file-system stores included.- Rendered images and thumbnails. WADO-RS rendered resources for studies, series, instances and frames as JPEG or PNG, with window, viewport (fit, crop, flip) and quality, plus thumbnails.
- Decompression on the server. RLE, JPEG, JPEG-LS and JPEG 2000 instances and frames are decoded when an uncompressed transfer syntax is asked for. A request that would need an encoder gets 406 with the reason.
- QIDO-RS sequence matching with nested match keys (PS3.4 C.2.2.2.6). Only invalid keys get 400.
- STOW-RS with metadata: DICOM JSON or XML metadata plus bulk data parts, on the server and in the client.
- UPS-RS worklist: create, retrieve, search, change state and request cancellation of workitems, with an in-memory store and client methods.
- Capabilities:
OPTIONSon the base URL returns a WADL document; the client reads it withGetCapabilitiesAsync.
The DICOMweb server endpoints are an Enterprise feature; the client is in every plan. See DICOMweb.
Command-line tool
- New .NET tool
DicomKit.Cliwith the commanddicomkit, for .NET 8 and .NET 10:echo,store,find(Study or Patient Root, as a table or JSON),movewith progress,worklist,anonymize(with a persisted salt) anddump. - Help for every command,
--version, clean cancellation with Ctrl+C and documented exit codes. - Uses your DicomKit license: pass
--license-keyor setDICOMKIT_LICENSE_KEY. Without a key it prints why on one line and exits with code 10.
dotnet tool install -g DicomKit.Cli
dicomkit echo pacs.example.org 104 --called PACS
Licensing
- A license key is required. A free Developer key unlocks every feature for development and testing; production use needs a Pro or Enterprise plan (pricing). No runtime fees.
- A paid license that lapses keeps the Community features; a free Developer license stops when it expires (free renewal from the portal).
DicomKitLicense.Status.IsDeveloperandEditionsay when a Developer license is in use. - Pro adds the retrieve and worklist SCP, JPEG 2000 and JPEG-LS decoding and unlimited concurrent associations; Enterprise adds the DICOMweb server. Checks run only when an operation starts, and work in progress is never cut off.
- One-line setup:
services.AddDicomKit(...)in ASP.NET Core and worker services, orawait DicomKitLicense.SetAsync(key)in other apps; or setDICOMKIT_LICENSE_KEY. - A license installed with the DicomKit License Activator is picked up automatically from
%ProgramData%\Plgic\license.licon Windows (/etc/plgic/license.licor~/.config/plgic/license.licon Linux and macOS), or from the file named byDICOMKIT_LICENSE_FILE. - Signed licenses are verified offline, with no phoning home on every start; machines without internet can be activated offline. See Licensing & activation.
Platform
- Targets
net8.0,net9.0andnet10.0(the command-line tool: .NET 8 and .NET 10). - Strong-named assemblies, XML documentation for IntelliSense, and deterministic builds.
- Runnable samples for every area are on the examples page.
Coming in the next release: transfer syntax handling
- HTJ2K decoding (High-Throughput JPEG 2000, lossless and lossy).
- Compression on the DICOMweb server: the server will also encode to compressed transfer syntaxes when a client asks for one.
Versions
Resources
README
Runnable console samples
Release notes
Release test report
Issue tracker
NuGet packages (opens in a new tab)
Questions? Contact support, we reply within 24 hours, every day.