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

PackageWhat it is
DicomKitCore: 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.ImagingDecode and render pixel data, LUTs and windowing, PNG / JPEG export, thumbnails.
DicomKit.WebDICOMweb models (DICOM JSON and XML), streaming multipart and the DICOMweb client.
DicomKit.Web.AspNetCoreDICOMweb server endpoints for ASP.NET Core.
DicomKit.CliThe 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 DicomTag and the built-in dictionary, so keywords and VRs are known without registration. Named transfer syntaxes and SOP classes have DicomUids constants, and DicomUids.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: FindAsync and FindWorklistAsync stream results as IAsyncEnumerable; MoveAsync and GetAsync report progress. Cancelling sends C-CANCEL and the association stays usable.
  • SCP: DicomServer with store, query and retrieve handlers. C-MOVE destinations come only from your configuration. Responses report pending, completed, failed and warning counts.
  • DicomQuery builds ready-made identifiers, and DicomQueryMatcher implements 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

  • DicomImage decodes 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/related reader and writer, and DicomWebClient for QIDO-RS, WADO-RS and STOW-RS.
  • app.MapDicomWeb() maps QIDO-RS, WADO-RS and STOW-RS endpoints over a pluggable IDicomWebStore, 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: OPTIONS on the base URL returns a WADL document; the client reads it with GetCapabilitiesAsync.

The DICOMweb server endpoints are an Enterprise feature; the client is in every plan. See DICOMweb.

Command-line tool

  • New .NET tool DicomKit.Cli with the command dicomkit, for .NET 8 and .NET 10: echo, store, find (Study or Patient Root, as a table or JSON), move with progress, worklist, anonymize (with a persisted salt) and dump.
  • Help for every command, --version, clean cancellation with Ctrl+C and documented exit codes.
  • Uses your DicomKit license: pass --license-key or set DICOMKIT_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.IsDeveloper and Edition say 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, or await DicomKitLicense.SetAsync(key) in other apps; or set DICOMKIT_LICENSE_KEY.
  • A license installed with the DicomKit License Activator is picked up automatically from %ProgramData%\Plgic\license.lic on Windows (/etc/plgic/license.lic or ~/.config/plgic/license.lic on Linux and macOS), or from the file named by DICOMKIT_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.0 and net10.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.