NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2987 most downloaded on PyPI
Local-first SDK for clinical extraction and de-identification workflows on hardware you control.
Last release 19 days ago
15 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 41 of 44 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
50 releases · first in 2025
One column per month.
…verification, API compatibility output, vulnerability policy, SBOM and provenance workflows, and signed evidence contracts strengthen the release path…
OpenMed v2.0.0 is here, expanding the local-first healthcare privacy and clinical AI platform across Python, Swift, Kotlin/Android, JavaScript, MCP, REST, and container deployments.
This major release adds 34 built-in PII language codes, deterministic identifier and safety-sweep paths, native-script surrogates, offset-preserving CJK and Indic processing, structured-data privacy-risk analysis, exact reference-population assessment, signed expert-review evidence, richer clinical extraction, new interoperability adapters, and broader on-device support.
OpenMed 2.0 also introduces radiology extraction, serial measurement trends, longitudinal document linking, clinical coreference and temporal normalization, multilingual relations, flowsheets, lab panels, discharge structures, typed MCP tools, watchOS and visionOS targets, Android span metadata, WebGPU and GGUF guidance, and reproducible release-evidence workflows.
The documented v1 Python entry points remain available, the REST surface retains the same 15 paths and 12 component schemas, and the static public Python inventory grows from 14,488 to 20,538 symbols with 6,050 additions and no removed, narrowed, or newly deprecated public symbols.
Install or upgrade:
pip install --upgrade "openmed==2.0.0"
npm install openmed@2.0.0Swift Package Manager:
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.0.0")Android through JitPack:
implementation("com.github.maziyarpanahi:openmed:v2.0.0")Container:
docker pull ghcr.io/maziyarpanahi/openmed:v2.0.0Release notes: https://openmed.life/docs/release/v2.0.0/
Migration guide: https://openmed.life/docs/migration/1.9-to-2.0/
Full changelog: v1.9.1...v2.0.0
The audited v1.9.1..v2.0.0 candidate contains 540 reachable commits, including 142 merge commits and 299 first-parent commits, with 1,025 files changed. The release inventory maps 197 merged pull requests and every direct, integration, and release-preparation commit to the exact Git ancestry recorded in CHANGELOG.md.
The release contains 255,162 insertions and 12,770 deletions across the Python package, tests, documentation, examples, website, Swift, Android, JavaScript, service, MCP, deployment, evaluation, security, and release-engineering surfaces.
openmed risk gate command, deterministic review records, and expert-authored Ed25519 attestations bind conclusions to data, schema, policy, integrity, and freshness evidence without claiming automated Expert Determination.openmed-mcp entry point, an MCP-enabled container, and llms.txt documentation feeds make OpenMed easier to use from local agents without moving PHI into a hosted control plane.OpenMedSpan and EntityPrediction metadata, and guidance for WebGPU, WebAssembly, GGUF, and constrained ARM devices.OpenMed 2.0 includes a 72-skill catalog that works unchanged in Claude Code, OpenAI Codex, OpenCode, and compatible agents. The multi-agent onboarding delivered in #1866 installs every skill in one command and safely preserves existing files, directories, and unrelated symlinks.
git clone https://github.com/maziyarpanahi/openmed
cd openmed
./install-skills.shOr install for one client:
./install-skills.sh claude # ~/.claude/skills/
./install-skills.sh codex # ~/.codex/skills/
./install-skills.sh opencode # ~/.config/opencode/skills/
./install-skills.sh agents # ~/.agents/skills/Then ask the agent for a concrete local workflow using synthetic input:
Build a local OpenMed pipeline that de-identifies a synthetic discharge note and extracts medication entities. Keep the example synthetic.
The agent can combine deidentifying-clinical-text and extracting-clinical-entities into runnable OpenMed code:
import openmed
note = "Synthetic patient Jane Example (MRN 12345), seen 2024-03-02, started on metformin 500mg BID."
deid = openmed.deidentify(
note,
method="mask",
policy="hipaa_safe_harbor",
)
meds = openmed.analyze_text(
deid.deidentified_text,
model_name="pharma_detection_superclinical",
)After the one-time model download, inference runs locally. Keep real PHI out of cloud-hosted agent prompts, logs, and copied examples.
The language-pack catalog is now the shared source of truth for runtime routing, model-backed languages, deterministic identifier-only packs, locale capabilities, service metadata, CLI reporting, fixtures, and documentation.
Chinese processing adds word-aware Pinyin romanization, Simplified and Traditional conversion through OpenCC, source-aligned numeral parsing, mixed-variant detection, address handling, name surrogates, and tone-insensitive consistency keys. Indic processing adds native-digit folding, grapheme-safe offsets, ISO 15919 transliteration, ITRANS and Harvard-Kyoto parsing, and cross-script name linkage.
African coverage adds Hausa, Yoruba, Igbo, Swahili-oriented documentation and safety sweeps, regional locale providers, Nigerian and Nigerien identifiers, context-aware clinical patterns, and data-residency evidence. Arabic coverage gains explicit Gulf, Levant, Egyptian, Algerian, and Moroccan locale routes with conservative fallbacks.
Russian and Vietnamese receive full local PII packs, while Czech, Hungarian, and additional regional routes add validator-backed national identifiers. Pattern-only packs remain explicit about their capabilities and do not silently claim a default neural model.
Surrogate generation preserves locale and script behavior where supported, validates checksum-bearing identifiers, and maintains deterministic identity consistency without writing raw identifiers into release evidence.
The new structured release workflow separates advisory quasi-identifier discovery from reviewed policy. Every source column requires an explicit disposition, and every materialized output is revalidated before publication.
Patient-level privacy units can span multiple rows. The risk engine supports k-anonymity, distinct and entropy l-diversity, variational t-closeness, bounded hierarchy search, whole-unit suppression, utility constraints, and conservative failure behavior.
Reference-population analysis requires an explicit caller-supplied population and explicit thresholds. It does not infer that an available table represents the attack population, and it records separate data, schema, policy, and integrity digests.
Aggregate dashboards and audit artifacts report counts, hashes, provenance, thresholds, and risk scores rather than raw quasi-identifier values. Expert attestations verify authorship and evidence binding but do not replace qualified legal, statistical, or privacy review.
Radiology workflows can segment sections, extract findings, bind laterality, measurements, and anatomy with provenance spans, and capture only explicitly stated BI-RADS or Lung-RADS categories.
Longitudinal tooling adds deterministic near-duplicate clustering, amendment relationships, retained superseded documents, source provenance, serial measurement normalization, timeline ordering, and conservative handling for incompatible units.
Clinical relation extraction expands to Chinese and Hindi with source character offsets, assertion propagation, constrained graph decoding, and language-specific evaluation. Additional domains cover procedures, devices, pulmonology, pediatrics, immunization, flowsheets, laboratory panels, and discharge summaries.
Interoperability adapters remain optional and local. Large frameworks, licensed terminologies, gated datasets, UMLS, SNOMED CT, CPT, MIMIC, i2b2, and n2c2 assets are not bundled.
The documented root imports remain stable:
from openmed import OpenMedConfig, analyze_text, deidentify, extract_piiCLI commands now expose consistent --json success and error envelopes for automation while keeping human-readable output as the default.
The typed MCP registry provides annotations and structured outputs through openmed-mcp. Existing MCP clients should refresh cached schemas, and applications pinned to an older MCP runtime should retest against the new optional mcp>=1.27,<2 route.
The REST/OpenAPI contract retains the same 15 paths and 12 component schemas as v1.9.1. Regenerating clients is optional when only the release metadata is needed.
Swift OpenMedKit continues to use the repository-root package and adds watchOS and visionOS alongside iOS, iPadOS, and macOS. Span handling remains source-aligned and gains grapheme-safe parity across supported Apple platforms.
Android OpenMedKit adds OpenMedSpan, richer EntityPrediction metadata, immutable JitPack installation, and offline ONNX guidance while retaining the existing package coordinate.
The public npm package remains the unscoped openmed package and provides ESM and CommonJS exports for browsers and Node.js.
The service container, MCP container path, Compose configuration, Helm chart, multi-architecture image workflow, image SBOM, and provenance paths are synchronized on v2.0.0.
ICU identifier, and carry the complete ICU notice in Python distributionsThe static public Python comparison against v1.9.1 records 6,050 additions, no removals, no narrowed callable signatures, and no newly deprecated symbols.
The new DEVICE canonical label is additive. Applications that treat canonical labels as an exhaustive enum or switch must add DEVICE; applications that accept arbitrary canonical-label strings require no change.
Pattern-only language packs no longer imply a neural default. Pass an explicit model identifier when combining deterministic language capabilities with model-backed inference, and validate that model against local fixtures before deployment.
The optional ONNX and multimodal routes require ONNX 1.21+ and are isolated from the scispaCy NumPy 1.x route. Applications needing both should use separate environments.
Structured-data release workflows now require explicit column dispositions and reviewed quasi-identifier policy. Existing text-only deidentify, extract_pii, and analyze_text calls are unaffected.
MCP clients should refresh cached schemas, closed label enums must recognize DEVICE, and custom CLI automation should select --json rather than scrape human-readable output.
See the complete migration guide at https://openmed.life/docs/migration/1.9-to-2.0/.
twine check, passed content inspection, and installed and imported successfully in clean isolated environments.Registry availability, live documentation, immutable consumer coordinates, and published release assets are verified after the tag-driven release workflows complete.
OpenMed keeps local processing as the default, but no de-identification system can guarantee zero residual risk. Validate direct-identifier recall, critical leakage, span integrity, language and script coverage, policy behavior, quantized-model deltas, and device behavior against deployment-specific fixtures before production use.
Clinical extraction is assistive software, not a medical device or a source of clinical ground truth. Outputs require qualified review and must not automatically trigger diagnosis, treatment, billing, or other clinical decisions.
Build hashes and package checksums establish artifact identity; they do not prove model quality. Model-specific evidence should be evaluated independently for each selected model, language, quantization, and runtime.
Thank you to every contributor whose work is included in this release. The complete pull-request and commit inventory, including every merged branch commit and every direct release-preparation commit, is recorded in CHANGELOG.md.
Note truncated.
OpenMed 2.0 expands the local-first privacy, clinical extraction, evaluation, and deployment stack across Python, Swift, Kotlin/Android, JavaScript, MCP, and container environments. The release preserves the documented v1 Python entry points and REST paths while establishing explicit multilingual, structured, agent-tool, and release-evidence contracts for the v2 line.
Added an offline nursing-care observation zero-shot domain with display label mappings (IntakeOutput, LineDrainTube, RiskScore, MobilityStatus, CareIntervention, PainScore, SkinAssessment), canonical policy label metadata, synthetic per-label fixture coverage for risk-score and line/drain/tube spans, and domain-coverage evaluation integration (#910).
Expanded built-in PII routing to 34 language codes and added deterministic identifier, date, phone, address, and surrogate support across Chinese, Indic, African, Nordic, Central and Eastern European, Russian, Urdu, Vietnamese, and regional Arabic workflows.
Added offset-preserving normalization and segmentation for full-width and half-width text, native digits, Simplified and Traditional Chinese, Chinese numerals and word boundaries, Indic graphemes and legacy encodings, cross-script transliteration, code-mixed Hinglish, and confusable text.
Added China PIPL, India DPDP and ABDM, South Africa POPIA, Nigeria NDPA, Kenya DPA, Egypt PDPL, Morocco Law 09-08, pan-African Malabo, GDPR, EU AI Act, ISO 27701/27001, consent-tag, and data-residency evidence workflows.
Added script-correct multilingual surrogates, Chinese address and Pinyin name handling, India identifier and transliterated-name consistency, African locale providers, and checksum-valid national-identifier replacements.
Added deterministic SMS, low-resource CPU, air-gapped installation, model integrity verification, crash-safe batch resume, tamper-evident audit, Safe Harbor attestation, k-anonymity, adversarial-PHI, and leakage-dashboard paths.
Added an offline structured-data release-risk workflow with advisory quasi-identifier discovery, explicit reviewer overrides, patient-level k-anonymity, distinct or entropy l-diversity, variational t-closeness, bounded hierarchy and suppression search, whole-privacy-unit suppression, materialized-output revalidation, and rollback-safe publication.
Added exact offline reference-population assessment over row-level or keyed longitudinal profiles, with k-map, exact-linkage risk, delta-presence, conservative unmatched-profile handling, explicit model assumptions, and separate data, schema, policy, and integrity digests. Aggregate results do not serialize raw profiles or privacy-unit values.
Added aggregate-only structured-risk dashboards, a strict openmed risk gate
CI command, deterministic expert-review evidence, and expert-authored
Ed25519 attestations that independently verify signature, evidence binding,
conclusion, and freshness without claiming automated Expert Determination.
Added radiology section and finding extraction, serial measurement trends, longitudinal document linking, clinical coreference, temporal normalization, abbreviation disambiguation, multilingual relations, flowsheets, lab panels, discharge summaries, procedures, pulmonology, and pediatrics coverage.
Added local adapters and packaging for OpenMRS, DHIS2, OpenHIM, community health forms, WHO SMART profiles, PySpark, Prefect, scrubadub, LlamaIndex, scispaCy, QuickUMLS, and offline ICD-11 grounding.
Added a typed MCP tool registry with annotations and structured output,
an openmed-mcp entry point, an MCP-enabled container and Compose service,
and portable repository skills plus agent-oriented documentation feeds.
Added Chinese and Indic throughput gates, multilingual golden fixtures, annotation-agreement and corpus-quality evidence, parser fuzzing, regression tracking, model-size and ARM latency budgets, and a fail-closed signed release-readiness decision.
Added watchOS and visionOS OpenMedKit targets, grapheme-safe Swift span
parity, compact on-device segmenters, Android EntityPrediction metadata and
OpenMedSpan, GGUF and WebGPU export guidance, and reproducible Nix
development environments.
Added deterministic, fully local longitudinal document linking with MinHash-based near-duplicate clustering, directional amendment edges, retained superseded documents, and non-text source/target provenance on every relationship (#1835).
Added a PySpark pandas_udf adapter (openmed.interop.spark_udf) for
redacting free-text Spark DataFrame columns at warehouse scale via
make_deidentify_udf() and the deidentify_columns() convenience helper,
with the OpenMed model loaded lazily and cached per executor worker
process. pyspark is imported lazily and stays behind the existing spark
extra; the adapter is registered as spark in openmed.interop (#1816).
Added a procedures zero-shot domain for surgical and diagnostic procedures,
devices, and surgical approach, with a new DEVICE canonical label,
keyword routing metadata, and canonical label normalization (#313).
Added deterministic serial measurement trends that group repeated entities, normalize compatible units, order points through the clinical timeline, preserve source spans and incomparable readings, and emit a clinician-review advisory with synthetic offline direction and grouping gates (#1831).
Added word-aware Chinese Pinyin romanization with tone-mark, numeric-tone, and heteronym output, plus deterministic Han name surrogates and tone-insensitive Pinyin vault keys for consistent Chinese name matching.
Added a fail-closed, signed release-readiness gate that verifies signed model gate evidence, release documentation, a machine-readable API compatibility report, the public clinical disclaimer, and workflow-produced golden-suite evidence before a release can proceed (#1814).
Added a scrubadub adapter with to_canonical()/from_canonical() span
conversion and canonical label mapping for scrubadub's core Filth types
(including the en_US/en_GB locale detectors), splitting credential
matches into separate USERNAME/PASSWORD entities using scrubadub's
named regex groups, flattening scrubadub overlap wrappers without label loss,
and losslessly recombining credential matches on the return trip. Scoreless
scrubadub spans default to fallback priority during OpenMed arbitration.
scrubadub stays an optional scrubadub extra, and the adapter is
registered lazily as scrubadub in openmed.interop (#281).
Added a full Russian (ru) PII language pack, including Cyrillic date,
phone, postal-index, and street-address patterns, SNILS (insurance account
number) and OMS (health-insurance policy number) validators with
checksum-backed surrogates, and service/SDK wiring. Russian uses the
documented multilingual default-model placeholder until dedicated weights
ship; the release-wide supported PII language-code allow-list now covers
34 codes (#1860).
Added opt-in token-level language identification for Hinglish clinical text, with exact offset-only decisions, deterministic local fallback routing, optional caller-supplied model hooks, and synthetic token-accuracy and de-identification recall gates (#1490).
Added an offline, native ARM64 SMS-scale INT8 latency benchmark with a committed synthetic corpus, exact model artifact provenance, aggregate p50/p95/throughput/peak-RSS reporting, a Raspberry Pi 5 target envelope, and a CI gate that fails regressions beyond the permitted 20% tolerance (#1456).
Added opt-in Simplified/Traditional Chinese normalization through OpenCC, including Taiwan and Hong Kong conversion configs, mixed-variant detection, and offset-preserving span projection back to original text (#1467).
Added source-aligned Chinese numeral parsing for everyday and financial forms, valid year/month/day normalization, and contextual Chinese date, medical-record identifier, and clinical-quantity PII patterns (#1469).
Added a Swahili README and an African developer onboarding guide covering bandwidth-aware model sizing and offline setup, POPIA/NDPA policy pointers, OpenMRS FHIR and DHIS2 Tracker recipes, community links, and shared translation-drift enforcement (#1455).
Added an offline-first openmed models size command with committed download,
disk, and peak-RAM estimates, cache-aware remaining bytes, per-task bandwidth
recommendations, JSON output, and explicitly opt-in remote refinement (#1453).
Added an opt-in, offline FHIR R4 profile checker for locally supplied WHO SMART Guidelines implementation-guide packages, including cardinality, fixed-value, locally enumerable binding, identifier/category slice, and post-de-identification conformance checks (#1451).
Added local, structure-preserving de-identification for ODK Central, CommCare HQ, and KoBoToolbox JSON/CSV form exports, including XForm path semantics, repeat fidelity, safe unknown-text handling, geopoint generalization, and value-free policy manifests (#1450).
Added an opt-in OpenHIM de-identification mediator with authenticated registration and heartbeats, FHIR and text transformation envelopes, byte-preserving opaque pass-through, and an offline container smoke fixture for deployment inside an HIE trust boundary (#1448).
Added data-driven African healthcare-context safety-sweep terms for named facilities, mobile-money references, and context-gated ethnic affiliations, with non-keep defaults across the initial African policy profiles and synthetic no-leak fixtures (#1447).
Added PHI-free, hash-verifiable Africa data-residency attestations for audited local de-identification runs, with data-driven jurisdiction wording, exact policy and model provenance, conservative captured offline evidence, a public JSON Schema, and an offline deployment and review guide (#1446).
Added an Igbo (ig) PII pack for Nigerian clinical text with NFC, NFD, and
unmarked context support, native ig_NG surrogates, shared Nigerian NIN and
phone patterns, and grapheme-safe replacement of dot-below names (#1441).
Added a Yoruba (yo) PII pack with NFC, NFD, and unmarked context support,
native yo_NG surrogates, and grapheme-safe normalized span remapping and
replacement boundaries for stacked dot-below and tone marks (#1440).
Added a deterministic Hausa (ha) PII pack for Boko and numeric Ajami text,
including Nigerian NINs, Nigerian and Nigerien phone numbers, exact-offset
native-digit matching, ha_NG surrogates, and Arabic-script arbitration
without claiming Ajami lexical coverage (#1439).
Added build-generated llms.txt and llms-full.txt documentation feeds with
curated quickstart, API, de-identification, agent, MCP, and REST coverage,
plus strict local and Pages build checks (#1787).
Added character-offset Chinese and Hindi clinical relation extraction over existing multilingual NER spans, including the versioned 44-predicate CMeIE mapping, constrained graph decoding, assertion propagation, synthetic gold, and distinct per-language relation F1 reporting (#1205).
Added a Prefect integration with a deidentify_file_task task and a
deidentify_dataset_flow flow that fan the local dataset redaction runner
over lists of files and return PHI-free count summaries. Prefect stays an
optional prefect extra, and the adapter is registered lazily as
prefect in openmed.interop (#471).
Added a deterministic radiology report parser that separates findings, impression, and recommendation text with provenance spans, captures only explicitly stated BI-RADS or Lung-RADS categories, and includes synthetic offline accuracy gates (#1838).
Added a deterministic radiology-finding extractor that binds laterality, measured size, and anatomic location with per-field provenance, supports caller-supplied offline RadLex JSON mappings, and includes a synthetic finding-tuple-F1 gate (#1837).
Added a deterministic, offline ISO 15919 transliteration pivot for nine Indic scripts, ITRANS and Harvard-Kyoto parsing, offset-preserving romanization, and cross-script person-name linkage in surrogate vaults (#1483).
Added an offline Vietnamese (vi) PII language pack with context-gated CCCD
and legacy CMND detection, Vietnamese dates, phone numbers, addresses and
five-digit postal codes, plus vi_VN surrogates and a synthetic golden
fixture (#819).
Added region-qualified Arabic Faker locales (ar-SA, ar-AE, ar-JO,
ar-PS, and explicit ar-EG) so Gulf and Levant text receives in-region
surrogates; bare ar still defaults to ar_EG. Locales missing from the
installed Faker fall back to ar_EG with a one-time warning, and
list_regional_locales('ar') enumerates the supported tags (#483).
Added curated conceptual surrogate locales for Senegal, Côte d’Ivoire,
Cameroon, Mozambique, and Angola (fr_SN, fr_CI, fr_CM, pt_MZ, and
pt_AO), including in-country names, addresses, cities, phone formats, and
context-only Senegal CNI and Angola BI detection. Arabic regional overrides
now also document ar-DZ and ar-MA; unavailable Faker backends retain the
existing one-time-warning fallback to ar_EG (#1443).
Added conservative Egypt PDPL and Morocco Law 09-08 policy profiles with
complete mask action maps, no reversible mappings, mandatory safety sweeps,
declarative ar_EG/ar_MA clinical identifier formats, and a decision-support
compliance checklist covering sensitive-data and transfer controls (#1444).
Added a release evidence job that keylessly signs each wheel and source distribution with Sigstore and attaches the SLSA provenance bundle, the release artifact digest manifest, and the Sigstore bundles to the tagged GitHub release, so a release can be verified offline without the GitHub attestation API. Evidence generation stays best effort and cannot gate the PyPI upload, but evidence that is produced must verify against the signing workflow identity and the release commit before it is attached (#1540).
Added a Hungarian (hu) national-ID-only PII pack with validator-backed TAJ
detection, hu_HU locale-aware synthetic surrogates, Hungarian date, phone,
address, and postcode patterns, and an offline synthetic golden fixture
(#816).
Added a Czech (cs) national-ID-only PII pack with validator-backed rodné
číslo detection, Czech date, phone, address, and postcode cues, cs_CZ
locale-aware synthetic surrogates, and an offline synthetic golden fixture
(#815).
Added a release run-ledger builder that records, per family, which candidate
artifact was published under which gate decision, binding the artifact digest
to a recomputed GateReport hash so a published artifact provably passed the
gate it claims. Non-RELEASABLE families are quarantined with no publish
target, the run outcome is reconstructable offline from
gates/release_runs.jsonl, and the ledger carries only identifiers and
hashes. Adds compute_canonical_payload_hash() to openmed.core.repro_hash
as the generic counterpart to the training-shaped
compute_reproducibility_hash() (#1805).
DEVICE canonical clinical label. Consumers that treat canonical
labels as a closed enum must add the new value before adopting v2.v1.9.1; the static API comparison
records 6,050 additions, no removals or narrowed signatures, and no newly
deprecated symbols.DEVICE.OpenMedConfig,
analyze_text, deidentify, and extract_pii.ICU
identifier, pinned the immutable ICU 57.1 source revision, retained the full
source copyright and permission notice in Python distributions and standalone
model bundles, and added fail-closed Python, Swift, and release-policy
validation.The audited 1ab2eca4cc89..6525adb5722c range contains 539 commits and 197 merged pull requests. The ledger below is generated from exact Git ancestry; pull-request entries include every branch commit reachable through their merge commit, while direct and integration commits remain explicit.
The final changelog-only commit that records this ledger is represented by this inventory section itself; a commit cannot contain its own content-derived SHA.
<details> <summary>Merged pull requests and their included commits</summary>
4d2eb1d77321 feat: add full-width/half-width normalization with offset preservation81237954a3c7 fix: register cjk_width_convention in OpenMedConfig.from_dict8710f526dbfc Merge current master into PR #1547a6663eff65db fix: integrate CJK width normalization into PII detection413db39b2468 Merge pull request #1547 from pardeep-singh/pardeep/issue1468-zh-width-normalized9dde39fa33d feat: add Indic native-digit folding with offset preservationf398af89c4d0 Merge current master into PR #1548081e817a84b1 Merge PR #1547 normalization integration into PR #1548211f93fa0642 fix: integrate Indic digit folding into PII detection240557c8cb74 Merge current master into PR #1548 after #154756e05d7c0fb1 Merge pull request #1548 from pardeep-singh/pardeep/issue1485-indic-numerals614bda8ec16c feat: add Unified Social Credit Code recognizer and MOD-31-3 validatorf27a75c169a3 Merge current master into PR #1596ba9ccb5769ea fix: harden Unified Social Credit Code handling5ec3721d0e8f Merge current master into PR #1596 after prior mergesb7b0e0d4ff49 Merge pull request #1596 from pardeep-singh/pardeep/issue1476-uscc-recognizercb2445b92b4b feat(ner): add pulmonology domain with spirometry and respiratory labels3b3e90b61a63 Merge current master into PR #159523c1e3c7dfe8 Merge pull request #1595 from PouyanJay/feat/pulmonology-domain-labelsa3506aa1e08a feat: add Estonian (et) PII language pack with isikukood validator9606fa9518ad Merge current master into PR #1592b0f2253a06c1 fix: align Estonian personal-code validation60615e797776 Merge remote-tracking branch 'origin/master' into review/pr-1592c7c9ccdebca7 fix: reject non-string Estonian codes5e66ceb95ec3 Merge pull request #1592 from PouyanJay/feat/estonian-isikukood-pii42d86399d753 feat: add Hungarian TAJ language pack705414f0449c test: expose Hungarian TAJ generator4cfab5d63bb9 Merge current master into PR #1593022ef0574907 fix: harden Hungarian TAJ handlinga4adcb8ce46f Merge remote-tracking branch 'origin/master' into review/pr-15938efee76aef71 Merge PR #1592 integration into PR #1593b36854fb939f Merge branch 'review/pr-1592' into review/pr-159397c8cf13ace1 Merge remote-tracking branch 'origin/master' into review/pr-1593abb671812926 Merge pull request #1593 from thangldw/feat/hungarian-taj-language-packbaf84a547829 feat: add Serbian (sr) PII language pack with JMBG validator729147ba9173 Merge current master into PR #1597e391fd08a907 fix: enforce strict Serbian JMBG shape519740766194 Merge PR #1593 integration into PR #1597e716e0b992e2 Merge branch 'review/pr-1593' into review/pr-1597dc068af35f67 Merge remote-tracking branch 'origin/master' into review/pr-1597875236ad3f74 Merge remote-tracking branch 'origin/master' into review/pr-1597ae188fe01921 Merge pull request #1597 from PouyanJay/feat/serbian-jmbg-pii2c23eca49408 feat: add Croatian (hr) PII language pack with OIB validator217cd4779a6a Merge current master into PR #15980655fbf88e1a fix: harden Croatian OIB handlingeb38fc903554 Merge PR #1597 integration into PR #1598048249f82327 Merge remote-tracking branch 'origin/master' into review/pr-1598d7a8abb7a885 Merge remote-tracking branch 'origin/master' into review/pr-1598e4ec9ee962cf Merge remote-tracking branch 'origin/master' into review/pr-15984ce92e3e9e82 Merge pull request #1598 from PouyanJay/feat/croatian-oib-piia1b37c2c4088 feat: add Bulgarian (bg) PII language pack with EGN validatora7ef18421da3 Merge branch 'master' into review/pr-1599fb569c99a1f9 fix: enforce strict Bulgarian EGN shape137af1344e83 Merge PR #1598 integration into PR #1599854339246f93 Merge remote-tracking branch 'origin/master' into review/pr-159982bbd143bee6 Merge remote-tracking branch 'origin/master' into review/pr-1599700b77f11b02 Merge remote-tracking branch 'origin/master' into review/pr-1599292bd9342382 Merge remote-tracking branch 'origin/master' into review/pr-1599e6919c6d1fd4 Merge pull request #1599 from PouyanJay/feat/bulgarian-egn-pii2a758d6092e1 feat: add Finnish (fi) PII language pack with HETU validator3401354a6816 Merge branch 'master' into review/pr-1600979b924fe551 fix: harden Finnish HETU validationae12d3b6441d Merge PR #1599 integration into PR #160076db11b978ae Merge remote-tracking branch 'origin/master' into review/pr-16009011c9cd8f93 Merge remote-tracking branch 'origin/master' into review/pr-160016331a268132 Merge remote-tracking branch 'origin/master' into review/pr-1600defd1bd228eb Merge remote-tracking branch 'origin/master' into review/pr-1600cda1e865f7db Merge remote-tracking branch 'origin/master' into review/pr-1600ee9d5189f375 Merge pull request #1600 from PouyanJay/feat/finnish-hetu-piid2d9d8aad070 feat: add Czech (cs) PII language pack with rodne cislo validatord03663555e09 Merge master into Czech PII language packa8539f11bb3a feat(pii): expand Czech locale coverage and regression tests012021d20852 fix(pii): finalize Czech language pack validation291f40ec2562 Merge pull request #1602 from PouyanJay/feat/czech-rodne-cislo-pii48cfe1c69677 Delete apple-touch-180.htmld5e62412fd60 Delete avatar-circle-400.html11e53def2d66 Delete avatar-linkedin-300.html7790f60106fb Delete avatar-square-512.html14c1cf13fbbe Delete favicon-64.htmlce6bf7369b72 Delete github-social.htmlac891cf1a5f6 Delete hf-card.htmle15591ccd4fc Delete og.htmla949b8a8d5dd Delete readme-banner.htmlcd444f67a0b8 Delete x-header.html1cff6d19b7d1 Update hf-card.png0615a4e9cc38 Update og.png262dc2abe637 Update readme-banner.png5a02809a5eec Update x-header.pngf667dad4f3dc fix: remove deleted social card test targetc2b582f893ce Merge pull request #1612 from maziyarpanahi/fix/social-cards-fix4fe919994d4e test(security): add telemetry-off-by-default enforcement guard981134bd9c76 Merge pull request #1617 from PouyanJay/feat/no-telemetry-guard1a7d40213f98 feat(android): add EntityPrediction description and OpenMedSpan data modelf9e0429bc4db fix(android): match Swift half-even rounding in EntityPrediction.toStringaac3019394ce Merge pull request #1613 from PouyanJay/feat/android-entityprediction-openmedspan8535b504b2d0 test: cover help for every CLI command12aae0364648 Merge pull request #1618 from ShiHuiwen-creat/test/485-cli-help-coveragea7fc761dd641 fix(clinical): scope experiencer cues across contrastive clausesa556bf303aac docs(clinical): note the contrastive-clause terminator set is intentional00eb7e0a92b9 fix: cover FHx experiencer cue25765c0019b5 Merge pull request #1614 from PouyanJay/feat/experiencer-context-axisbd91e1fe1afe docs: add per-language PII de-identification guide05a22712351a style: format language docs coherence test384282bc6f2d Merge pull request #1615 from cycsmail/docs-per-language-pii-guide-287719e0cfdaee7 docs: decide and document the on-device Android tokenization strategye3644bdbead3 Merge pull request #1608 from PouyanJay/docs/android-tokenization132826d2d6c5 docs: add Android quickstart covering setup, model load, and redactiond45635306acb Merge pull request #1606 from PouyanJay/docs/android-quickstart4c115aad70c4 feat: add Greek (el) PII language pack with AMKA validator079a8f8c2ea2 Merge pull request #1603 from PouyanJay/feat/greek-amka-pii1f7903005271 feat: add Portuguese NIF validator distinct from Brazilian CPFb71f382c0261 Merge pull request #1605 from PouyanJay/feat/portuguese-nif-validatorbd65981f23b7 test(eval): add per-language i18n golden fixtures for wired languages107607449f4f test: complete multilingual golden fixtures2256fa941576 Merge master into multilingual fixture updatebea669d76c99 Merge pull request #1616 from PouyanJay/feat/i18n-golden-fixtures-supportedc31ba257ccbd feat: sign release distributions and attach verifiable evidence7653158682b4 Merge remote-tracking branch 'origin/master' into maintainer/pr-1604-followup7ba52f9af461 fix: require complete release evidenceabe12f6a2a7d Merge pull request #1604 from DrVelvetFog/security/attach-release-provenance-and-verify-docs44c4c44adc51 feat(locales): add regional Arabic Faker-locale overrides (OM-285)eb2ceac94358 Merge branch 'master' into feat/ar-regional-locales-om285218bcb3467b6 Merge master into regional locale update8740c7687406 Merge remote-tracking branch 'origin/master' into maintainer/pr-1549-followup7de01dbe49fa Merge remote-tracking branch 'origin/master' into maintainer/pr-1549-followupaba65fe93c2e Merge pull request #1549 from chawki-nasrallah/feat/ar-regional-locales-om2851f5edb88c5b8 feat: add Vietnamese PII language pack93d2b67ae140 fix: align Vietnamese CCCD validation with current law425b79d736c9 Merge master into Vietnamese PII updatefe26421f80c0 Merge commit 'refs/pr-review/1549' into maintainer/pr-1601-followup0050e1410cdd Merge pull request #1601 from thangldw/feat/vietnamese-pii-language-packced09f8839d8 fix: raise TypeError for malformed policy argument types550af1ae1492 Merge remote-tracking branch 'origin/master' into fix/policy-type-validation8344228d758d test: cover policy profile error guidance9662c4acb2dd Merge current master into policy type validation43c7e8e0a461 Merge pull request #687 from abdouloued/fix/policy-type-validation1bf2b95ddd41 feat: pediatrics growth-parameter domain to NER model and labels mapb5cca3a9de52 Merge remote-tracking branch 'origin/master' into review-1611-202607181c96952ba827 fix: polish pediatrics growth metadataba9407e8fb57 Merge pull request #1611 from mrfeathers/feature/om-896-pediatrics-labelsd7c49a4afb21 Add synthetic datasets walkthrough example30a375473013 Merge pull request #1702 from otmanm/codex/om-281-datasets-walkthrough0942b32b28a6 feat: add inter-annotator agreement metrics for extraction gold sets3ab7912b08b3 fix: complete span-overlap agreement coveragee3eb2801bd5c Merge pull request #1697 from pardeep-singh/pardeep/issue1317-inter-annotator-agreement0102bf1f3cac feat: add synthetic multi-annotator gold corpus and consensus loaderb9953896be6a fix: preserve annotator relation evidence1e48420df8f1 Merge pull request #1698 from pardeep-singh/pardeep/issue1318-consensus-corpusa61e5bdb2625 Merge branch 'pardeep/issue1318-consensus-corpus' into pardeep/issue1321-quality-report25a60961b668 feat: add gold-corpus quality report and evidence-bundle output9ffa461aa779 Merge master into pardeep/issue1321-quality-reportfb1c2d75b8cc fix: report annotator relation agreementd3625ef85e90 Merge pull request #1700 from pardeep-singh/pardeep/issue1321-quality-report195c09c9b267 feat: add Prefect task and flow for batch de-identification27a5ac11c19c fix: harden Prefect batch integration6a6f3acca788 Merge pull request #1716 from RonitGandhi/fix/issue-47129f991e742a9 feat: add flowsheet and vitals time-series structurer505fe34b5efe fix: complete flowsheet continuation handling76268507702f Merge pull request #1746 from pardeep-singh/pardeep/issue941-flowsheetddf40bb96daf feat: add lab-panel structurer mapping results into analyte rowsdc24b8593de0 Merge master into pardeep/issue940-lab-panels34ce90783509 fix: complete lab panel report parsing9d9dc19912a1 Merge pull request #1744 from pardeep-singh/pardeep/issue940-lab-panels1623bf04c1dd feat: add portable Agent Skills catalog for building with OpenMed (#1743)cdc195321c2e test: locate py.typed as package resourced60a6f82ee44 Merge pull request #1778 from lntutor/feat/py-typed-254a38f7c8c78ce fix: format skills catalog test2f0cbbaf22f8 Merge pull request #1840 from maziyarpanahi/fix/skills-catalog-formatebb19df3676e docs: add v1 to v2 migration guidee87bae08272f Merge remote-tracking branch 'origin/master' into review/pr-1755ddb01ef4226f docs: correct v2 migration history08f866c7965e Merge remote-tracking branch 'origin/master' into review/pr-1755dedd914832a8 Merge pull request #1755 from lntutor/docs/v1-v2-migration-30119fbdfb6fb87 docs: define detector plugin SDK stability712385d3a948 Merge remote-tracking branch 'origin/master' into review/pr-176285477c699ca6 docs: fix detector example spancde710f8e9e9 Merge pull request #1762 from lntutor/docs/plugin-sdk-stability-13278b5a9ad6fdb6 Add language pack registry foundationc5fadb9512ca fix: defer optional model imports027bd0ad4b0d Merge remote-tracking branch 'origin/master' into review/pr-158645f2b27c4285 fix: scope language pack foundationa89626b03300 Merge remote-tracking branch 'origin/master' into review/pr-15866736c213b175 Merge pull request #1586 from maziyarpanahi/feature/om-678-language-pack-plugin-framework950f977c4b9f feat: add MCP console entry pointafa170d9d3b5 Merge remote-tracking branch 'origin/master' into review/pr-17614488346765e2 Merge pull request #1761 from lntutor/feat/mcp-console-clients-173994de85e2f278 feat: adapt language maps to registryae813ab0c1c5 Merge remote-tracking branch 'origin/master' into feature/language-pack-adapters-1583e4922c631630 Merge pull request #1844 from maziyarpanahi/feature/language-pack-adapters-158325f1722ab551 feat(cli): add uniform --json output, error envelopes, and a tool-schema drift guard6b9ebe6732af Merge remote-tracking branch 'origin/master' into review/pr-1780aec3f342009f fix: complete CLI JSON error handling754715ba9db0 Merge remote-tracking branch 'origin/master' into review/pr-1780b1c9ebf59836 Merge remote-tracking branch 'origin/master' into review/pr-1780f3c9745053b6 Merge pull request #1780 from PouyanJay/feat/cli-json-uniform2239d923e62b feat(core): add language-pack coherence validation and capability coverage52f21a10655b Merge branch 'feature/language-pack-adapters-1583' into review/pr-17798bee055e5a4d fix: harden language pack coherence2da34471ec5c Merge remote-tracking branch 'origin/master' into review/pr-177983754a07dc18 Merge remote-tracking branch 'origin/master' into review/pr-1779142e99aac33d Merge pull request #1779 from PouyanJay/feat/language-pack-coherencefa9319010dff docs: add Windows uv installation steps973dc3484c48 Merge pull request #1845 from maziyarpanahi/agent/windows-uv-install-docs7631f08b23b6 build: consolidate dependency updates91a2fe0ae6a9 Merge pull request #1850 from maziyarpanahi/chore/dependency-refresh-july-20260cef3e621c80 feat: generate llms.txt and llms-full.txt as requested in #178762d60213b203 Merge origin/master into fix-llms-txta07077d2d9cc docs: generate LLM documentation feedsdad3f6f2837e build: update Pillow security locke380dcf7f355 Merge pull request #1839 from vamshiss/fix-llms-txt8604ed52c49f feat: add offset-safe Indic Unicode normalization (#1566)84fc7fa537fa feat: add Indic script routing metadata (#1573)2f087f039e0c feat: add script-aware grapheme span refinement (#1587)4e3906199439 feat: add script-stratified leakage gates (#1588)7277a1fe18b6 feat: add pluggable Chinese word segmentation (#1558)d472a38a8f35 fix: block confusable mixed-script PII evasion (#1669)1a2ae86dad70 feat: add token- and document-level language routing (#1665)c0435ebf7f24 feat: add Chinese Resident ID protection (#1563)5858d32952b4 feat: add Chinese name detection and surrogates (#1564)85fdacdd6740 feat: add China PIPL policy profile (#1565)5ae1fa3a363e feat: add India DPDP policy profile (#1575)93959a225c0b feat: add India ABDM de-identification mode (#1576)6905448c456a feat: add Nigerian NIN and BVN recognition (#1620)2e3029f93007 feat: add Ghana and Kenya identity recognizers (#1621)d53bd2f14dca feat: add Swahili PII language pack (#1623)c0b097b37020 feat: add isiZulu and isiXhosa PII packs (#1625)12a7d05c8aaf feat: add MasakhaNER evaluation suite (#1626)e9118835e31f feat: add South Africa POPIA policy profile (#1627)cb7078075c05 feat: add Nigeria NDPA policy profile (#1628)d4aac730334d feat: add Kenya DPA policy profile (#1629)1b05eb865b21 feat: add privacy-safe DHIS2 exporter (#1631)f325d28b7d54 feat(clinical): add radiology report section parser with stated RADS capturef6810cd6e6ff fix(clinical): harden radiology report parsing3fafae7ba562 fix: keep radiology changelog mergeablee4d57be15d82 Merge pull request #1849 from PouyanJay/feat/radiology-report-parsereaadb395a24f feat: add resilient integrity-checked model downloads (#1632)b4b30fe68ab9 feat: Add an Urdu (ur) RTL PII language pack with Pakistani CNIC validatorcb0f276f6eaf Merge branch 'master' into urdu_lang_packc09ede04e1fc Merge remote-tracking branch 'origin/master' into urdu_lang_pack1013c62da2f5 fix: complete Urdu CNIC language packa6ae3df40b17 Merge remote-tracking branch 'origin/master' into urdu_lang_packf9cead16b1f7 Merge pull request #1852 from AlyanPremani05/urdu_lang_pack3d4273e604fb feat: add CPU-only low-resource de-identification profile (#1634)449ce08f97bf feat: add crash-safe batch checkpoints and resume (#1635)e2658f963362 feat: add Chinese clinical NER evaluation foundation (#1562)05adab7cce8c feat: add Indic grapheme-safe span offsets (#1567)f19754a1d37b feat: harden Aadhaar de-identification (#1574)8bc252ad8e79 feat: add synthetic India clinical de-identification corpus (#1581)d6ecd85bf22e feat: add Chinese and Indic optional extras (#1589)7268d6ac9939 feat: audit PII tokenizer script coverage (#1590)e0896dfe83c1 feat: verify cached model integrity (#1591)29c4398aa34b feat: add South African ID and mobile phone recognizers (#1619)d23616b474ad feat: add Egypt and Morocco identity recognizers (#1622)bedef9103ff4 feat: add Amharic PII language pack (#1624)675c2114fb67 feat: add local-first OpenMRS handoff adapter (#1630)37c9cd07f94c feat: add air-gapped install kit builder (#1633)02eca8dde552 feat: add SMS short-text de-identification (#1841)7796a8a405e9 feat: add clinical abbreviation and acronym sense disambiguation (#1636)ffccf9559daa feat: add shared free-vocabulary lexical matcher (#1637)70e800c3a8a2 feat: add tamper-evident audit chains (#1638)95376dc58e22 Add a HIPAA Safe Harbor attestation report generator (#1639)49d3f56b657c Add clinical coreference resolution linking entity mentions and pronouns (#1640)aecb78218c99 Normalize TIMEX3 temporal expressions to ISO values (#1641)16330e94924f Render a public benchmark leaderboard from archived eval reports (#1642)65471ff0ffe8 Add a k-anonymity engine for tabular outputs (#1643)e5904a0969c3 Add an eval-result provenance and reproducibility-hash ledger (#1644)6436a26e70cd Add Chinese sentence segmentation honoring CJK punctuation (#1647)de26a4cfc4b1 feat: add Chinese terminology grounding (#1648)cd8d5160e030 feat: add Chinese hierarchical address de-identification (#1649)5c854800f003 feat: add Chinese identifier recognizers (#1650)8a7a68853a77 feat: add cross-script Indic transliteration (#1651)675766269ee1 feat: add Indic sentence and word tokenization (#1652)779fdf684d0d feat: add optional Indic NER evaluation (#1656)2cced3bab6a2 feat: add code-mixed Hinglish de-identification (#1658)e1c8404aaf0f feat: add India health-ID de-identification mode (#1660)4e15672fffb1 feat: add India code-mixed clinical NER (#1661)0f6c2313b604 feat: add license-aware India terminology grounding (#1662)7e5132501661 feat: add India locale surrogate providers (#1663)60ab34c39cad feat: add consistent India transliterated-name surrogates (#1664)adf50eefe325 feat: add license-aware CMeEE and Naamapadam eval suites (#1666)c2781792b683 feat: add script-correct multilingual surrogates (#1667)be19eada6064 feat: package compact on-device segmenters (#1668)d73cec9979b1 docs: enforce Chinese README parity (#1670)5f117a09cfe5 docs: bring Hindi README to parity (#1671)f2135575ff80 docs: add China mirror and offline-cache onboarding (#1673)7eb132d82053 docs: add India DPDP onboarding guide (#1674)b9dcce966a3c feat: add Chinese and Hindi de-identification examples (#1675)9351049ab9ec feat: add multilingual de-identification Space demo (#1676)dd9d40a5dd40 Add API-surface migration completeness gate (#1678)4410103f5320 Add East African national ID recognizers (#1679)ce304e269592 Add pan-African mobile phone patterns and prefix-preserving surrogates (#1680)9a31ba3399f2 Add M-Pesa transaction code protection for Kenya and Tanzania (#1681)cf1fc8371f3d feat: recognize mobile-money billing identifiers (#1683)a5350ff8a2da feat: add African health facility code support (#1684)64758633f9fc feat: add Hausa Boko and Ajami PII pack (#1685)3c67a01573c1 Add deterministic radiology finding extractorea240d9e5dd0 Merge remote-tracking branch 'origin/master' into pr-18550ffb352c081d fix: complete radiology finding extraction241ed36bff90 Merge pull request #1855 from Udaytaneja/feature/radiology-finding-extractorb1541bd11e30 feat: add Yoruba PII pack with grapheme-safe offsets (#1686)78e45e6cc674 feat: add Igbo PII language pack (#1687)bde6c377fcf9 feat: add African French and Portuguese locale surrogates (#1688)5cff74175c39 fOpenMed 2.0.0 establishes the v2 local-first healthcare privacy and clinical
AI platform across Python, Swift, Kotlin/Android, JavaScript, MCP, and
container deployments.
Release date: 2026-07-28.
Reviewed range: v1.9.1..v2.0.0. The exact candidate head is re-audited
immediately before tagging. The complete ancestry-derived pull-request and
commit ledger is recorded in CHANGELOG.md.
ICU identifier, and carry the complete
ICU notice inside Python distributions and every standalone converted-model
bundle.OpenMed 2.0 ships a catalog of 72 portable Agent Skills for building healthcare workflows with Claude Code, OpenAI Codex, OpenCode, and compatible agents. The catalog covers de-identification, clinical entity extraction, FHIR and OMOP handoffs, evaluation, compliance, document intake, analytics, and deployment. The multi-agent onboarding from #1866 installs every skill in one command and safely preserves existing files, directories, and unrelated symlinks.
git clone https://github.com/maziyarpanahi/openmed
cd openmed
./install-skills.sh
Or target one client:
./install-skills.sh claude # ~/.claude/skills/
./install-skills.sh codex # ~/.codex/skills/
./install-skills.sh opencode # ~/.config/opencode/skills/
./install-skills.sh agents # ~/.agents/skills/
Then ask the agent for a concrete local workflow using synthetic input:
Build a local OpenMed pipeline that de-identifies a synthetic discharge note and extracts medication entities. Keep the example synthetic.
The agent can combine the deidentifying-clinical-text and
extracting-clinical-entities skills into runnable OpenMed code:
import openmed
note = (
"Synthetic patient Jane Example (MRN 12345), seen 2024-03-02, "
"started on metformin 500mg BID."
)
deid = openmed.deidentify(
note,
method="mask",
policy="hipaa_safe_harbor",
)
meds = openmed.analyze_text(
deid.deidentified_text,
model_name="pharma_detection_superclinical",
)
After the one-time model download, inference runs locally. Keep real PHI out of cloud-hosted agent prompts, logs, and copied examples.
The static public Python comparison against v1.9.1 grows from 14,488 to
20,538 symbols: 6,050 additions, zero removals or narrowed signatures, and zero
new deprecations. The REST surface retains the same path and component-schema
set.
The new DEVICE canonical label is additive, but applications that model
labels as a closed enum must add it. Optional dependency and tool-schema
changes are covered in the
1.9-to-2.0 migration guide.
Documented v1 root imports remain available:
from openmed import OpenMedConfig, analyze_text, deidentify, extract_pii
pip install --upgrade "openmed==2.0.0"
Install only the extras needed by the application, for example:
pip install --upgrade "openmed[hf,zh,indic]==2.0.0"
pip install --upgrade "openmed[service,mcp]==2.0.0"
npm install openmed@2.0.0
The package remains unscoped and provides ESM and CommonJS exports.
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.0.0"),
]
OpenMedKit supports iOS, iPadOS, macOS, watchOS, and visionOS through the repository-root package.
Add JitPack and use the immutable tag:
dependencies {
implementation("com.github.maziyarpanahi:openmed:v2.0.0")
}
Use ghcr.io/maziyarpanahi/openmed:v2.0.0. The Helm chart defaults to
2.0.0; when selecting the release image explicitly, set
image.tag=v2.0.0.
OpenMed keeps local processing as the default. Model downloads are explicit; after the required artifacts are present, runtime PHI processing does not require a cloud service. Telemetry remains off by default, and release evidence uses hashes, counts, offsets, and provenance rather than raw identifiers.
No de-identification system can guarantee zero residual risk. Validate direct identifier recall, leakage, span integrity, language coverage, policy behavior, and quantized-model deltas locally before deployment.
Clinical extraction is assistive software, not a medical device or a source of clinical ground truth. Outputs require qualified review and must not automatically trigger diagnosis, treatment, billing, or other clinical decisions.
Before the v2.0.0 tag is created, the exact candidate head must pass:
READY readiness decision.A skipped or missing candidate report is incomplete evidence. Registry availability, live documentation, and consumer installation are verified only after publication and are not claimed by candidate preparation.
Full Changelog: https://github.com/maziyarpanahi/openmed/compare/v1.9.1...v2.0.0
OpenMed v1.9.1: SwiftPM and release distribution fixes
OpenMed 1.9.1 completes the cross-platform 1.9 release rollout with a
Swift Package Manager packaging fix, hardened Android release behavior,
current public model examples, and a clean dependency-security gate.
Release date: 2026-07-14.
Reviewed range: v1.9.0..v1.9.1. This is a compatibility-preserving patch;
the Python, npm, Android, Swift, service, and model inference APIs introduced
in 1.9.0 are unchanged.
Package.swift now processesimport OpenMedKit through the documented Git tag. Swift CI nowOpenMed/OpenMed-PII-ClinicalE5-Small-33M-v1-onnx-android; genericdslim/bert-base-NER; causalTinyLlama/TinyLlama-1.1B-Chat-v1.0.setuptools version includes the fix forpip install --upgrade "openmed==1.9.1"Add only the optional extras needed by the application, for example
openmed[onnx-runtime]==1.9.1 or openmed[service]==1.9.1.
npm install openmed@1.9.1The package retains ESM and CommonJS exports and the same
loadOnnxModel(...) API.
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.9.1"),
]This is the minimum recommended Swift package version because it contains the
root-package resource fix.
Add JitPack and use the immutable tag:
dependencies {
implementation("com.github.maziyarpanahi:openmed:v1.9.1")
}Use ghcr.io/maziyarpanahi/openmed:v1.9.1. The Helm chart defaults to
1.9.1; when selecting the release image explicitly, set
image.tag=v1.9.1.
The patch is gated by the complete Python suite, Ruff lint and formatting,
dependency audit, package builds, strict MkDocs, root Swift package tests,
Android AAR unit/build checks, npm build/typecheck/tests/audit, Helm
lint/rendering, OpenAPI consistency, multi-architecture container smokes,
SBOM generation, and provenance verification. Post-publish checks install and
exercise the public PyPI, npm, JitPack, SwiftPM, GHCR, Helm, and documentation
coordinates exactly as shown above.
Full Changelog: v1.9.0...v1.9.1
This patch completes the 1.9 distribution rollout without changing the
public inference APIs introduced in 1.9.0.
setuptools build dependency to a non-vulnerable release
so the master and release pip-audit gates pass without a waiver.Fixable vulnerability waivers were replaced with dependency and base-image upgrades, and the vulnerability gate rejects a waiver when a fixed version…
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:
pip install --upgrade "openmed==1.9.0"
npm install openmed@1.9.0Swift Package Manager:
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.9.0")Android through JitPack:
implementation("com.github.maziyarpanahi:openmed:v1.9.0")Release notes: https://openmed.life/docs/release/v1.9.0/
Full changelog: v1.8.1...v1.9.0
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.
OnnxModel.from_pretrained(...) for Python CPU, loadOnnxModel(...) for browsers and Node.js, and OpenMedKit.fromDirectory(...) for Android consume the same exported token-classification repository (#1550).openmed npm 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).OpenMed/...-mlx repository IDs resolve as pre-converted artifacts, optional tokenizer imports remain lazy, and runnable token-classification and GLiNER examples document the intended paths (#1550).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 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.
1.9.0.openmed==1.9.0 and install only the optional runtime extras they need.openmed@1.9.0; the earlier scoped package name is not the public v1.9 package.1.9.0.com.github.maziyarpanahi:openmed:v1.9.0; master-SNAPSHOT is a moving development coordinate and is not release-stable.eager, sdpa, and flash_attention_2 selections retain their existing behavior.767877b06732ba8ae94415ea1af9c6edb0651119: 30 successful, 1 expected PR-only manifest-publication skip, 0 pending, and 0 failures; GitHub reports the PR mergeable with a clean merge state.4669 passed, 43 skipped.29 passed.git diff --check: passed.twine check.65 tests executed with 0 failures and 14 expected local-artifact skips.44 actionable tasks successfully.openmed npm package: build, typecheck, 9 Node tests, audit with zero vulnerabilities, and dry-run package inspection passed.4 parity/privacy tests, and audit with zero vulnerabilities passed.Thank you to @Ankitha101003 for the Korean PII language-pack contribution in #1544 and to everyone whose merged work is represented in this release.
Full Changelog: v1.8.1...v1.9.0
This release adds one model-repository contract for ONNX token-classification
inference across Python, browsers, Node.js, and Android, then extends the
clinical, multilingual privacy, evaluation, documentation, and developer
surfaces delivered after v1.8.1.
OnnxModel for Python CPU,
loadOnnxModel for WebGPU/WebAssembly, and OpenMedKit.fromDirectory for
Android with Hugging Face tokenizer offset parity. The same exported model
repository can now serve every supported runtime without application-level
tokenizer or tensor plumbing (#1550).openmed npm package for browser and Node.js inference, with
synchronized release versions, ESM/CommonJS exports, WebGPU/WebAssembly
examples, package tests, npm audit enforcement, and provenance-backed tag
publishing (#1550).ko) and Romanian (ro) PII language packs, including
native identifier validation, locale-aware surrogates, synthetic fixtures,
and model/service wiring. The model-backed PII allow-list now covers 17
language codes (#1544, #1389).py.typed packaging
and scoped type-hint coverage for the expanded module surface (#1341, #1348).token_type_ids at runtime (#1550).tokenizer.json before publication, and kept
resumable batch cleanup from deleting valid artifacts (#1550).OpenMed/...-mlx repository IDs resolve as pre-converted MLX
artifacts and kept optional tokenizer loading lazy, avoiding unintended
PyTorch conversion and eager pandas imports (#1550).1.9.0 and immutable release coordinates (#1550).OpenMed 1.9.0 is the cross-platform ONNX inference, clinical extraction,
multilingual privacy, and release-evidence release.
Release date: 2026-07-14.
Reviewed range: v1.8.1..v1.9.0 release target. The inventory covers 35
release-scope pull requests: 34 merged after the v1.8.1 release branch was cut,
plus the v1.9.0 release pull request. Pull requests #1545 and #1546 are already
part of the v1.8.1 release topology and are not counted again here.
openmed npm package with ESM/CommonJS exports and
WebGPU/WebAssembly inference support.v1.9.0 Git tag through
JitPack, with DJL Hugging Face tokenization and preserved character offsets.The v1.9 model contract packages tokenizer assets, ONNX graphs, optional external data, and runtime metadata once so applications do not need to rebuild tokenization or tensor plumbing for each platform.
OnnxModel.from_pretrained(...) supports local and Hugging Face
repositories, automatic INT8 preference, tokenizer offsets, BIO/BILOU
aggregation, and external-data graphs.loadOnnxModel(...) is published in the openmed npm
package with ESM/CommonJS exports and ONNX Runtime Web support for WASM and
WebGPU.OpenMedKit.fromDirectory(...) loads validated sidecar artifacts,
uses DJL Hugging Face tokenization, preserves source character spans, and
exposes the same entity contract through Kotlin.OpenMed/...-mlx repository IDs resolve as pre-converted
artifacts, with runnable token-classification and GLiNER zero-shot examples.Standard token-classification repositories are compatible with the shared contract. GLiNER zero-shot span models and privacy-filter mixture-of-experts models remain excluded because they use different graph contracts.
The model-backed PII language allow-list now contains 17 codes: ar, de,
en, es, fr, he, hi, id, it, ja, ko, nl, pt, ro, te,
th, and tr.
The release adds persona quickstarts, hardened offline-loading guidance, a troubleshooting and common-errors guide, Postman examples, and REST recipes (#1386, #1380, #1385, #1387). OpenMed's repository, documentation, and website also use a consolidated on-device clinical-AI message (#1415).
1.9.0.openmed==1.9.0 and add only the optional extras required by
your runtime.openmed@1.9.0..package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.9.0").com.github.maziyarpanahi:openmed:v1.9.0. The moving master-SNAPSHOT
coordinate is not release-stable.eager, sdpa,
and flash_attention_2 choices keep their existing behavior.The release pull request validates the full Python suite, release-sensitive tests, Ruff formatting and lint, scoped typing, package builds, npm tests and artifact checks, Android unit/AAR builds, Swift package tests, strict MkDocs, Helm lint/template, OpenAPI consistency, vulnerability policy, and repository release-version surfaces. Final run results are recorded on the release pull request and in the maintainer announcement artifact.
Full Changelog: https://github.com/maziyarpanahi/openmed/compare/v1.8.1...v1.9.0
OpenMed v1.8.1 — architecture-safe attention hotfix
Bug fix: Resolved the
DebertaV2ForTokenClassificationscaled-dot-product-attention loading error. Automatic attention selection now uses Transformers architecture compatibility checks instead of forcing PyTorch SDPA from runtime availability alone.
OpenMed 1.8.1 fixes a model-loading regression for DeBERTa-v2 token-classification models, including OpenMed/OpenMed-NER-DiseaseDetect-SuperClinical-434M, across NVIDIA, AMD, and CPU environments.
torch_attention_backend="auto" no longer forces SDPA from runtime availability alone. Transformers now chooses an implementation that the model architecture supports.v1.8.1 is a verified linux/amd64 and linux/arm64 manifest.Install with:
pip install --upgrade "openmed[hf]==1.8.1"Full Changelog: v1.8.0...v1.8.1
auto no longer forces SDPA onto Transformers architectures that do not support it, including DebertaV2ForTokenClassification; explicit eager, sdpa, and flash_attention_2 selections remain available.Added release and supply-chain hardening: trusted publishing, SLSA provenance, image signing, container SBOMs, vulnerability gates, baseline-aware sec…
1.8.0 is the cross-platform runtime, production service, privacy coverage, clinical extraction, and release-evidence release.This release extends the v1.7 multimodal and browser foundation into a coordinated Python, Swift, Kotlin/Android, TypeScript, React Native, browser, REST, gRPC, and deployment surface. It also adds deeper clinical terminology and event extraction, broader multimodal privacy coverage, stronger privacy gates, and supply-chain evidence for containers and releases.
Release date: 2026-07-09.
Release target: release/openmed-180 at cdee44e77662c74c68967ec38f4a5b29ce4ec105.
Previous release: v1.7.0 at 82dece146bed8bbbae7fc731afee1448534b2b29.
openmed.core.pii_i18n.SUPPORTED_LANGUAGES.Android is now a first-class OpenMedKit target. The release adds a standalone Gradle project, Kotlin API types, de-identification engine, token decoder, semantic-unit merger, ONNX token classifier, ORT Mobile export path, ML Kit OCR adapter, model catalog, offline cache manager, document/image intake, Compose demo, scan demo, parity fixtures, and Android CI.
Users building mobile apps can validate Python-to-Android span equivalence, exercise model download/cache behavior, and prepare AAR publishing through the guarded Central Portal workflow.
The JavaScript surface moves beyond static export. The new typed web package wraps token-classification decoding and ONNX Runtime Web loading for WASM/WebGPU. React Native gains a bridge for on-device de-identification, and client parity tests keep generated REST client surfaces aligned with the committed OpenAPI document.
The Swift package remains the Apple-native surface. v1.8.0 adds Swift-Kotlin API parity checks, mobile benchmarking, Core ML residency gates, ONNX/Core ML optimization checks, and the OPENMED_MLX_MMAP toggle for debugging eager vs. memory-mapped MLX weight loading.
The FastAPI service gained production controls around identity, observability, scale, and failure handling.
Batch and data-platform integrations expanded through object-storage runners, SMART-on-FHIR bulk ingestion, Spark structured streaming, Dask accessors, DuckDB UDFs, pandas/polars accessors, streaming columnar redaction, lakehouse column redaction, and a dbt-style warehouse transformation package.
v1.8.0 broadens both file-format and identifier coverage.
The per-language PII extraction API still uses the 15 model-backed SUPPORTED_LANGUAGES entries: ar, de, en, es, fr, he, hi, id, it, ja, nl, pt, te, th, and tr. New validator-backed ID coverage is exposed through locale and national-ID provider paths where those languages are marked as ID-only.
Clinical extraction moved from individual helpers toward a richer structured layer.
This release adds evidence infrastructure for model quality, privacy leakage, and reproducibility.
Key fixes include replacing optimizer-stripped bare assert statements with explicit exceptions, adding explicit UTF-8 handling in MLX/Core ML and other file/subprocess paths, guarding JSON decoding and malformed manifest logging, chaining re-raised exceptions cleanly, pinning MLX Swift for iOS builds, fixing multilingual test span offsets, constraining DSAR matching by vault key, adapting HPO linker tests to the vocabulary loader, keeping Pages deployments from canceling in-progress docs publishes, and completing F401/F541 cleanup after the large v1.8 merge train.
v1.8.0 adds and strengthens no-raw-PHI logging, offline mode socket blocking, privacy-gateway redaction before external LLM calls, policy compiler coverage proofs, DP surrogate budgeting, k-anonymity/l-diversity/t-closeness enforcement, membership-inference defenses, adversarial de-identification robustness, federated leakage evaluation, secret scanning, pre-commit hook scanning, and vulnerability gates.
1.7.0 to 1.8.0 in Swift Package Manager, Docker image tags, Helm values, and deployment runbooks.1.8.0; the committed OpenAPI spec is regenerated from openmed.__version__ and reports 1.8.0.1.8.0 and chart appVersion: "1.8.0".1.8.0.ar, de, en, es, fr, he, hi, id, it, ja, nl, pt, te, th, and tr. Additional locale work in this release adds validator-backed national-ID paths rather than full default PII model entries for every new locale.docs/serving/ and docs/deploy/helm.md before enabling them in production.release/openmed-180cdee44e77662c74c68967ec38f4a5b29ce4ec105v1.7.0 at 82dece146bed8bbbae7fc731afee1448534b2b29v1.7.0: 434v1.7.0...v1.8.0: 144scripts/release/check_release_version.py --version 1.8.0scripts/release/check_repo_policy.pyuv lock --checkmake lintmake format-checkmake docs-build.venv/bin/python -m pytest tests/ -q (3915 passed, 37 skipped)make buildswift test in swift/OpenMedKit./gradlew :openmedkit:assembleDebug :openmedkit:testDebugUnitTest --stacktrace in androidnpm test in js/openmedkit-webnpm test in js/openmedkit-react-nativescripts/export_openapi.pygit diff --checkNon-blocking validation notes: MkDocs reports existing docs pages that are intentionally not in nav, Swift skips local MLX artifact smoke tests when private local artifacts are not configured, Gradle reports deprecation warnings from the current Android toolchain, and the web package has one low-severity dev-only esbuild audit advisory while production npm dependencies report zero vulnerabilities.
Note truncated.
This release summarizes the cross-platform runtime, service hardening, multimodal privacy, clinical extraction, and release-evidence work merged after v1.7.0. The reviewed range is broad: 434 commits from v1.7.0 through the final release/openmed-180 branch tip prepared for the v1.8.0 tag, covering Android, browser, and React Native runtimes, production service controls, structured health-data pipelines, and the privacy/evaluation gates that keep those surfaces aligned.
examples/gradio_deid_app.py, an interactive Gradio demo that runs
deidentify over synthetic text with a mask/replace/hash method
selector and shows the redacted output alongside the detected PII entities.
gradio stays an optional, example-local dependency with a graceful install
hint, and the example is covered by import-safe smoke tests (#484).OPENMED_MLX_MMAP toggle to openmed.mlx.models.load_model:
safetensors weights load through MLX's memory-mapped, lazy path by default
(keeping cold-start peak RSS low on the phone/laptop tiers), with
OPENMED_MLX_MMAP=0 forcing eager materialization as a documented fallback
for debugging (#296).OpenMed 1.8.0 is the cross-platform runtime, production service, privacy coverage, clinical extraction, and release-evidence release.
This release extends the v1.7 multimodal and browser work into a coordinated Python, Swift, Kotlin/Android, TypeScript, React Native, browser, REST, gRPC, and deployment surface. It also adds deeper clinical terminology and event extraction, broader multimodal privacy coverage, stronger privacy gates, and supply-chain evidence for containers and releases.
Release date: 2026-07-09.
Reviewed range: v1.7.0..v1.8.0 release target.
openmed.core.pii_i18n.SUPPORTED_LANGUAGES.The Android surface is now a first-class OpenMedKit target. The release adds a standalone Gradle project, Kotlin API types, de-identification engine, token decoder, semantic-unit merger, ONNX token classifier, ORT Mobile export path, ML Kit OCR adapter, model catalog, offline cache manager, document/image intake, Compose demo, scan demo, parity fixtures, and Android CI.
Users building mobile apps can now validate Python-to-Android span equivalence, exercise model download/cache behavior, and prepare AAR publishing through the guarded Central Portal workflow.
The JavaScript work moves beyond static export. The new typed web package wraps token-classification decoding and ONNX Runtime Web loading for WASM/WebGPU. React Native gains a bridge for on-device de-identification, and client parity tests keep generated REST client surfaces aligned with the committed OpenAPI document.
The Swift package remains the Apple-native surface. v1.8.0 adds Swift-Kotlin API parity checks, mobile benchmarking, Core ML residency gates, ONNX/Core ML optimization checks, and the OPENMED_MLX_MMAP toggle for debugging eager vs. memory-mapped MLX weight loading.
The FastAPI service gained production controls around identity, observability, scale, and failure handling:
Batch and data-platform integrations also expanded through object-storage runners, SMART-on-FHIR bulk ingestion, Spark structured streaming, Dask accessors, DuckDB UDFs, pandas/polars accessors, streaming columnar redaction, lakehouse column redaction, and a dbt-style warehouse transformation package.
v1.8.0 broadens both file-format and identifier coverage:
The per-language PII extraction API still uses the 15 model-backed SUPPORTED_LANGUAGES entries. New validator-backed ID coverage is exposed through the locale and national-ID provider paths where those languages are marked as ID-only.
Clinical extraction moved from individual helpers toward a richer structured layer:
This release adds evidence infrastructure for model quality, privacy leakage, and reproducibility:
Key fixes include:
assert statements with explicit exceptions1.7.0 to 1.8.0 in Swift Package Manager, Docker image tags, Helm values, and deployment runbooks.1.8.0; the committed OpenAPI spec should be regenerated from openmed.__version__ when the version changes.ar, de, en, es, fr, he, hi, id, it, ja, nl, pt, te, th, and tr. Additional locale work in this release adds validator-backed national-ID paths rather than full default PII model entries for every new locale.docs/serving/ and docs/deploy/helm.md before enabling them in production.v1.7.0 at 82dece146bed8bbbae7fc731afee1448534b2b29release/openmed-180 branch tip prepared for the v1.8.0 tagv1.7.0..HEAD on release/openmed-180v1.7.0...v1.8.0: 144First-parent direct commits reviewed separately from top-level merge commits:
4a017e7f - scaffold Android OpenMedKit module (#1114)fd96321e - versioned agent tool schema registry (#1081)46afd4c1 - .gitignore cleanup13fcc458 - HPO linker test adaptationa2e65d75 - deterministic batch sharding (#1074)a14834f3 - exactly-once streaming checkpointing (#1067)30762ad4 - mobile performance benchmark runner (#1172)038662af - conformal abstention risk control (#1056)8c1a034b - paged KV-cache attention (#1017)5e79abbe - F401/F541 cleanup8e110f75 - multilingual context cue lexicons (#1219)af27e519 - training provenance reproducibility gate (#1220)713f4fd5 - cross-lingual lexical grounding aliases (#1292)bd38b145 - OMOP CDM loader foundation (#1299)83d4612b - update CHANGELOG.md for v1.8.0dbbcba43 - update Helm chart app version654e8627 - update Helm CI image tag054fa0fd - update Helm default image tagc92873b0 - update anonymization documentation4c6a2800 - regenerate committed OpenAPI version metadata24b78a0b - update Helm deployment guidec9ded79c - update examples documentation48123c87 - update FAQ release language077090b5 - update feature map release links1feb8d24 - update docs landing page release links28fcd53a - update SemVer and channel documentationc3c809f7 - add v1.8.0 release notes4d2a8a1d - update Swift OpenMedKit documentationbd840a72 - update static website release copya2ad7188 - add v1.8.0 page to MkDocs navigation43407867 - update Python package version7e15d3e0 - update README release surfacesd53740c0 - make OpenAPI export import the local checkout56be42e7 - update OpenMed demo bundle version38da7b90 - update OpenMed scan demo bundle version70529b59 - update Helm chart version testMajor PR groups reviewed:
tag_name=v1.8.0, previous_tag_name=v1.7.0, and the release/openmed-180 target.Full Changelog: https://github.com/maziyarpanahi/openmed/compare/v1.7.0...v1.8.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →