| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| sbom.cdx.json | 2026-07-14 | 8.3 kB | |
| image-sbom.cdx.json | 2026-07-14 | 1.4 MB | |
| image-sbom.cdx.json.sha256 | 2026-07-14 | 86 Bytes | |
| openmed-image-sbom_767877b06732ba8ae94415ea1af9c6edb0651119.cyclonedx.json | 2026-07-14 | 1.4 MB | |
| OpenMed v1.9.0 source code.tar.gz | 2026-07-14 | 25.0 MB | |
| OpenMed v1.9.0 source code.zip | 2026-07-14 | 25.8 MB | |
| README.md | 2026-07-14 | 16.5 kB | |
| Totals: 7 Items | 53.6 MB | 0 | |
OpenMed + ONNX: Faster on CPU, runs in your browsers, and Android phones! ❤️
OpenMed v1.9.0 is ready: one token-classification model repository can now run across Python, browsers, Node.js, and Android without rebuilding tokenizer or tensor plumbing for every platform.
The release introduces OnnxModel for Python, loadOnnxModel in the new public openmed npm package, and OpenMedKit.fromDirectory for Android. It adds automatic INT8 selection, Hugging Face tokenizer offset parity, BIO/BILOU entity aggregation, ONNX external-data support, WebGPU/WebAssembly execution, immutable Android installation through JitPack, and resumable catalog publication.
Beyond the shared ONNX contract, v1.9.0 includes the work already present on the release branch after v1.8.1: richer clinical extraction and service clients, full Korean and Romanian PII packs for a 17-language model-backed allow-list, stronger multilingual and privacy evaluation gates, new developer-quality tooling, and refreshed documentation and product messaging.
Install or upgrade:
:::bash
pip install --upgrade "openmed==1.9.0"
npm install openmed@1.9.0
Swift Package Manager:
:::swift
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.9.0")
Android through JitPack:
:::kotlin
implementation("com.github.maziyarpanahi:openmed:v1.9.0")
Release notes: https://openmed.life/docs/release/v1.9.0/
Full changelog: https://github.com/maziyarpanahi/openmed/compare/v1.8.1...v1.9.0
Release scope
This release contains 35 release-scope pull requests: 34 pull requests merged onto master after the v1.8.1 release branch was cut, plus release pull request [#1550]. GitHub's generated notes also surface [#1545] and [#1546], but those two pull requests are already part of the v1.8.1 release topology and are not counted again in v1.9.0.
The completed PR head contains origin/master as an ancestor: PR head 767877b06732ba8ae94415ea1af9c6edb0651119, master d47c238099238e1651e566fe6bdf4c6f71ffeb4a, and merge base d47c238099238e1651e566fe6bdf4c6f71ffeb4a. The completed release range contains 333 reachable commits and 34 first-parent merges after v1.8.1, with 330 files changed, 39,752 insertions, and 1,991 deletions. Recompute these values only if the PR head changes again before tagging.
Highlights
- Cross-platform ONNX:
OnnxModel.from_pretrained(...)for Python CPU,loadOnnxModel(...)for browsers and Node.js, andOpenMedKit.fromDirectory(...)for Android consume the same exported token-classification repository (#1550). - Browser and Node.js package: the public
openmednpm package ships ESM/CommonJS exports, TypeScript definitions, ONNX Runtime Web support, WebGPU/WebAssembly selection, offline-local loading controls, package tests, audits, and provenance-backed publishing (#1550). - Android distribution: OpenMedKit uses DJL Hugging Face tokenization, preserves character offsets, validates sidecar artifacts, and installs from immutable Git tags through JitPack (#1550).
- Safer model rollout: resumable Android/ORT conversion, automatic INT8 preference, external-data handling, model-card runtime metadata, fail-closed artifact reuse, and Xet-disabled batch publication make the catalog rollout repeatable (#1550).
- MLX usability: direct
OpenMed/...-mlxrepository IDs resolve as pre-converted artifacts, optional tokenizer imports remain lazy, and runnable token-classification and GLiNER examples document the intended paths (#1550). - Clinical extraction and clients: relation metrics, strict/relaxed scoring and release gates, dataframe output, an immunization zero-shot domain, a Go REST client, a Postman collection, REST recipes, and a Jupyter result widget (#1159, [#1211], [#1212], [#1224], [#1379], [#1382], [#1385], [#1387]).
- Multilingual privacy: Korean and Romanian join the model-backed PII allow-list; Canadian and Australian identifier validators, CJK honorific handling, RTL rendering, translation augmentation, multilingual section detection, and surrogate quality gates broaden locale fidelity (#1544, [#1389], [#1340], [#1342], [#1346], [#1384], [#1221], [#1225], [#1226]).
- Evaluation and safety: critical-finding recall, leakage-under-extraction, multilingual benchmark aggregation, false-negative exploration, throughput/accuracy reporting, memory profiling, property-based fuzzing, a redactor threat model, and a synthetic burned-in-PHI DICOM benchmark strengthen release evidence (#1213, [#1214], [#1223], [#1343], [#1347], [#1349], [#1350], [#1352], [#1388]).
- Developer quality and documentation: artifact-backed model-card datasheets, Hub model-pull helpers, public-API docstring checks, PEP 561 typing, persona quickstarts, troubleshooting guidance, bounded long-note pipeline latency, and refreshed OpenMed branding round out the release (#1228, [#1339], [#1341], [#1348], [#1380], [#1383], [#1386], [#1415]).
Cross-platform ONNX contract
The release packages tokenizer assets, ONNX graphs, optional external data, and runtime metadata once so each platform can expose a native API without recreating model-specific preprocessing.
Python supports local paths and Hugging Face repositories, automatic INT8 preference, tokenizer offset mapping, BIO/BILOU aggregation, external-data graphs, zero-valued token_type_ids when required, and CPU execution through optional ONNX Runtime dependencies.
The openmed npm package supports browsers and Node.js with ESM/CommonJS entry points, generated declarations, ONNX Runtime Web loading, WebGPU/WASM capability selection, cache reuse, and offline-only local model loading by default.
Android OpenMedKit loads the same repository layout through OpenMedKit.fromDirectory, uses DJL's Apache-2.0 Hugging Face tokenizer implementation to preserve tokenizer.json behavior and character offsets, and packages the library as a release AAR available from immutable Git tags through JitPack.
Standard token-classification repositories are compatible with this contract. GLiNER zero-shot span models and privacy-filter mixture-of-experts models remain explicitly excluded because they do not use the standard token-classification graph contract.
Clinical, multilingual, and evaluation additions
Clinical extraction gains relation metrics, synthetic gold loading, strict and relaxed scoring, an RE release gate, dataframe output, and an immunization domain with FHIR-aligned labels. Service consumers gain a Go SDK, Postman collection, REST recipes, and a rich notebook display.
The model-backed PII allow-list now contains 17 codes: ar, de, en, es, fr, he, hi, id, it, ja, ko, nl, pt, ro, te, th, and tr. Korean and Romanian add native identifier validation, locale-aware surrogates, synthetic fixtures, and model/service wiring. Additional locale work covers Canadian SIN and provincial cards, Australian Medicare and TFN identifiers, CJK honorifics, RTL rendering, multilingual section detection, translation augmentation, and surrogate-quality validation.
Release evidence expands through critical-finding recall and leakage-under-extraction gates, multilingual benchmark aggregation, false-negative exploration, throughput-versus-accuracy reports, memory profiling, property-based de-identification fuzzing, a redactor threat model and leakage-bypass catalog, and a synthetic burned-in-PHI DICOM benchmark.
Security and release engineering
- Fixable vulnerability waivers were replaced with dependency and base-image upgrades, and the vulnerability gate rejects a waiver when a fixed version exists.
- Python, npm, Swift, Android, Helm, OpenAPI, container, and demo version surfaces align on
1.9.0. - Stable Swift and Android documentation uses immutable version coordinates rather than moving branch/snapshot references.
- Generated Android/ORT model cards use the package version as their stable JitPack coordinate.
- Python wheels and sdists, npm artifacts, Android AARs, Swift package builds, strict documentation, Helm templates, OpenAPI output, workflow references, repository policy, and vulnerability policy all retain explicit validation gates.
- Local-first privacy defaults remain unchanged: no mandatory network calls after model download, no telemetry by default, and no raw PHI in logs, caches, temp files, or audit artifacts.
Migration notes
- Python users should upgrade to
openmed==1.9.0and install only the optional runtime extras they need. - Browser and Node.js users should install
openmed@1.9.0; the earlier scoped package name is not the public v1.9 package. - Swift users should pin the minimum compatible package version to
1.9.0. - Android users should add JitPack and install
com.github.maziyarpanahi:openmed:v1.9.0;master-SNAPSHOTis a moving development coordinate and is not release-stable. - Applications using the shared ONNX contract must retain the repository tokenizer and runtime sidecar files with the graph. Android publication fails closed when required artifacts are incomplete.
- The v1.8.1 architecture-safe attention-selection fix remains included. Explicit
eager,sdpa, andflash_attention_2selections retain their existing behavior.
Validation completed on 2026-07-14
- Hosted PR checks on final head
767877b06732ba8ae94415ea1af9c6edb0651119:30successful,1expected PR-only manifest-publication skip,0pending, and0failures; GitHub reports the PR mergeable with a clean merge state. - Full Python suite:
4669 passed, 43 skipped. - Focused model-card and release-version suite:
29 passed. - Ruff fix/lint/format gates: passed across 763 Python files.
- Strict MkDocs build: passed; only the repository's existing unnavlisted-page notes and the expected no-git-history warning for the new v1.9 page were emitted.
- Release-version preflight: passed for Python, README, Swift, Android, MkDocs, website, OpenAPI, Helm, npm, and demo bundle surfaces.
- Repository policy, lockfile consistency, GitHub Actions lint/reference checks, OpenAPI regeneration consistency, and
git diff --check: passed. - Python wheel and sdist: built successfully; both passed
twine check. - Swift OpenMedKit: formatting and lint passed;
65tests executed with0failures and14expected local-artifact skips. - Android OpenMedKit: debug AAR assembly and debug unit tests passed; Gradle completed
44actionable tasks successfully. openmednpm package: build, typecheck,9Node tests, audit with zero vulnerabilities, and dry-run package inspection passed.- React Native package: typecheck,
4parity/privacy tests, and audit with zero vulnerabilities passed. - Helm: default and optional ServiceMonitor/PodDisruptionBudget lint and template paths passed.
- Image assets were left unchanged at maintainer direction.
Pull-request inventory
- Cross-platform runtime and distribution: [#1550], [#1339].
- Clinical extraction, service clients, notebooks, and documentation: [#1159], [#1211], [#1212], [#1224], [#1379], [#1380], [#1382], [#1383], [#1385], [#1386], [#1387].
- Multilingual privacy and locale handling: [#1544], [#1389], [#1340], [#1342], [#1346], [#1384], [#1221], [#1225], [#1226].
- Evaluation, safety, and developer quality: [#1213], [#1214], [#1223], [#1228], [#1341], [#1343], [#1347], [#1348], [#1349], [#1350], [#1352], [#1388].
- Brand and product messaging: [#1415].
Contributor note
Thank you to @Ankitha101003 for the Korean PII language-pack contribution in [#1544] and to everyone whose merged work is represented in this release.
What's Changed
- feat: consolidate OpenMed brand and on-device messaging by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1415
- fix: make attention auto-selection architecture-safe for v1.8.1 by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1545
- fix: skip unchanged Android release artifacts by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1546
- feat: add immunization domain to NER catalog and label maps (#897) by @AlyanPremani05 in https://github.com/maziyarpanahi/openmed/pull/1159
- Add Korean (ko) PII language pack by @Ankitha101003 in https://github.com/maziyarpanahi/openmed/pull/1544
- Add relation metrics and synthetic gold loader by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1211
- Add a strict/relaxed clinical relation-extraction scoring engine and RE release gate by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1212
- Add critical-finding recall safety gate by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1213
- Add leakage-under-extraction gating by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1214
- Add offline translation augmentation for low-resource NER by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1221
- Add multilingual clinical NER benchmark aggregator by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1223
- Clinical extraction dataframe API by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1224
- Add multilingual surrogate quality gate by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1225
- Add multilingual clinical section detection by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1226
- Add artifact-backed model card datasheets by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1228
- Add Hugging Face Hub model-pull convenience helpers by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1339
- feat: add Canadian SIN and provincial health-card validators by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1340
- Add a docstring coverage check for the public API surface by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1341
- Add Australian Medicare and TFN health-ID validators by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1342
- Add a false-negative explorer CLI over benchmark runs by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1343
- Add CJK family-name-first honorific stripping for PERSON spans by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1346
- Add a throughput-versus-accuracy frontier report by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1347
- Add py.typed and type-hint coverage for the new v1.6 modules by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1348
- Add a memory profiler command for the inference path by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1349
- Add a property-based fuzz harness for the de-identification path by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1350
- Write the redactor threat model and a leakage-bypass abuse-case catalog by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1352
- feat: add Romanian (ro) PII language pack with CNP validator by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1389
- Add a Go REST client SDK for the de-identification service by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1379
- Add Jupyter/IPython rich display widget for de-identification results by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1382
- Bound 10-stage pipeline latency on long clinical notes by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1383
- feat: add synthetic burned-in-PHI DICOM benchmark by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1388
- feat: add RTL-aware redacted-output renderer by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1384
- docs: add troubleshooting and common-errors guide by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1380
- docs: add persona quickstarts and harden offline loading by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1386
- feat: add Postman collection for REST service endpoints by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1385
- docs: add copy-paste REST API recipes guide by @maziyarpanahi in https://github.com/maziyarpanahi/openmed/pull/1387
New Contributors
- @Ankitha101003 made their first contribution in https://github.com/maziyarpanahi/openmed/pull/1544
Full Changelog: https://github.com/maziyarpanahi/openmed/compare/v1.8.1...v1.9.0