Build1 distinct publisher3 min readUpdated
go-dicom covers files, pixels and the full DIMSE network surface with no C dependencies, which restores static binaries and cross-compilation. Conformance evidence is not published yet.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Amr Shadid has released go-dicom, a DICOM implementation written entirely in Go covering files, pixel data and the network protocol, with no C dependencies [1]. The interesting part is not the feature list but the build: according to the author, `CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build` produces one static binary with no shared library dependencies, which is what makes a `FROM scratch` container, an ARM box sitting next to a modality, or a Lambda function reachable from a laptop with no C headers to hunt down [2].
That is the actual problem being solved. Until now a Go team handling medical images could bind to DCMTK or a DCMTK-derived C library and accept CGO, losing static builds and easy cross-compilation, shell out to a Python process running pydicom, or write the parts of the standard it needed by hand [3]. The author says the third path is how a lot of hospital integrations quietly end up with a half-finished parser in an internal repo, and that he hit the wall himself on a medical imaging platform he maintains [4].
The claimed surface is wide. On files: standard `.dcm`, Siemens `.ima`, DICOMDIR, and raw data sets with no meta header, which is what modalities emit and what travels on the wire, across 37 transfer syntaxes including implicit and explicit VR, both endiannesses, and deflated [5]. Tag dictionaries cover 5,000-plus standard tags and 10,500-plus private vendor tags for GE, Siemens, Philips and Toshiba with O(1) lookup [6], roughly 15,500 entries in total [7]. Networking is the full DIMSE set as both SCU and SCP, including C-GET, all six N-DIMSE services, Storage Commitment, Modality Worklist, MPPS and UPS [8], with association negotiation covering presentation contexts, extended negotiation, async operations, role selection and user identity, plus TLS on both ends [9]. Above that sit structured reports with SNOMED-CT and LOINC coding, ECG and EEG waveforms with QRS detection, overlays and ROI analysis, and 169 storage SOP classes [10]. Text is decoded to UTF-8 on read across 30-plus encodings including ISO 2022, CJK, Cyrillic, Arabic and Hebrew [11].
The de-identification detail is the one that suggests someone has been bitten before. It implements the PS3.15 Annex E profiles, basic, clean descriptors, clean graphics and the retain-* variants for longitudinal studies, and it descends into sequences [12] because an object stripped at the top level that keeps its Referenced SOP Instance UIDs still links back to the original [13]. Idiomatically, the SCP spawns a goroutine per association, C-FIND results stream on a channel rather than accumulating in a list, and everything takes a `context.Context` [14]; the client API is shaped roughly like pynetdicom's `AE().associate()` [15], with handler types for echo, storage, query/retrieve and worklist, plus a composite handler and an embeddable BaseHandler [16].
Two things to check before you commit. The pixel decoder list names five codecs, JPEG Baseline, Extended, Lossless, JPEG-LS and RLE Lossless, with encoders for only RLE and JPEG-LS [17]; JPEG 2000 does not appear in it [18], so match that against what your archive actually holds before assuming 37 parsed transfer syntaxes means 37 renderable ones. And the announcement carries no benchmarks, no test coverage figure, no conformance statement and no license [19]. The install script does verify the SHA256 against the release SHA256SUMS, prefers a directory already on PATH so nothing needs sudo, and clears the macOS quarantine flag [20], which is more care than most `curl | sh` installers take, but it is still `curl | sh`.
Everything above is the author's own account of his own library [21]. Worth watching for an independent conformance run against a real PACS, and for whether the private tag dictionaries hold up against vendor data that was never meant to be read by anyone else.
Ranked by verification strength, evidence, and original report placement.
Prior options for handling medical images in Go were: bind to dcmtk or DCMTK-derived C libraries and accept CGO, losing static builds, easy cross-compilation and deployment simplicity; shell out to a Python process running pydicom; or write the needed parts of the DICOM standard yourself.
The author states that writing your own parser is how a lot of hospital integrations quietly end up with a half-finished parser in an internal repo, and that he built go-dicom after hitting that wall on a medical imaging platform he maintains.
A de-identified object that keeps its Referenced SOP Instance UIDs still links straight back to the original.
The SCP spawns a goroutine per association, C-FIND results stream back on a channel instead of accumulating in a list, and everything takes a context.Context so timeouts and graceful shutdown work as expected.
The SCU API is described as roughly the shape of pynetdicom's AE().associate().
There are handler types for the common roles (echo, storage, query/retrieve, worklist), a composite handler for mixing them, and a BaseHandler to embed for full control over one message type with defaults for the rest.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 16, 2026
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single self-authored source, no verification artifacts
All substantive claims come from one first-person dev.to announcement by the library's author. The post is detailed and internally consistent, and its code samples and CLI listing do corroborate the API and concurrency descriptions, but there is no conformance statement, test-coverage figure, benchmark, interoperability result, license or independent review anywhere in the supplied material — precisely the evidence a clinical-path dependency needs.
Announcement-stage availability only
The supplied material shows the project exists and is installable — a go get path plus checksum-verified CLI release artifacts across platforms — and one internal use, the author's own medical imaging platform. There is no third-party deployment, no user report, no download, star or dependent count, and no named PACS interoperability, so adoption sits barely above zero on availability alone.
Completeness language runs well ahead of published proof
The post repeatedly reaches for totality — 'complete DICOM implementation', 'the complete DIMSE surface', 'full association negotiation', de-identification 'per PS3.15 Annex E' — while publishing nothing that would let a reader test any of it, in a domain the author himself calls genuinely dangerous when a library quietly does the wrong thing. Two things hold the gap short of severe: the enumerations are specific and falsifiable rather than vague, and the pixel section transparently lists only five decoders and two encoders, making the JPEG 2000 omission visible instead of hidden.
Author promoting his own library, self-interest visible on the page
The sole source is the maintainer announcing his own project on a developer-publishing platform, and he states he built it for a medical imaging platform he maintains — a direct interest in the library's adoption and reputation. The incentive is disclosed rather than concealed, and no funding, employer, vendor sponsorship or monetization is described in the supplied material, so this is promotional authorship rather than an evidenced commercial conflict.
Confident about what was announced, not about whether it works
The cluster supports high-confidence statements about the announcement itself — what is claimed, what code shape is shown, what is released, and what verification is missing — because the source is primary and detailed. It supports low-confidence statements about functional reality: breadth, conformance, privacy-profile correctness and edge performance all rest on a single interested author with no external check.
Follow any of these and your For You feed starts watching them — no settings page required.
build
Go's csv reader allocates by design: what a 4 KB-buffer replacement actually buys1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
AI-written code fails the same four ways, and every gate you own reports green1 distinct publisher
build
CSA's 2026 threat list is a flat line, so ask which threats a config snapshot can prove1 distinct publisher