Requires Python 3.11 or later. Core dependencies: PyArrow, DuckDB, NumPy, Typer, Rich, Pydantic, Textual. Polars is not among them — it has been an optional compatibility extra since v3.1.0, and the polars-free install is the faster configuration. Neither is RapidFuzz: GoldenMatch owns its scorer math (a vendored Rust score-core::strsim plus a byte-identical pure-Python path), and RapidFuzz remains only as a dev-time parity oracle.
pip install goldenmatch now pulls the compiled goldenmatch-native kernel automatically on macOS (x86_64 + arm64), Linux (x86_64 + aarch64), and Windows (amd64). No [native] extra is needed; the [native] extra still works as a back-compat alias. The kernel accelerates the hot paths (block scoring, record fingerprints, cluster build, dedup-pairs) and lets the v3 planner pick the bucket+native backend as the suggested path up to 750k rows on common boxes.Rust is the reference implementation (the 2026-07 reference-mode change); the pure-Python + Arrow pipeline is the lossy fallback, byte-identical on the parity-gated hot paths and used automatically on any platform without a prebuilt wheel. Alpine/musl users may not get a prebuilt wheel yet (a musllinux wheel is a separate follow-up) and degrade gracefully to pure-Python.Opt out with environment variables:
GOLDENMATCH_NATIVE=0 # disable the native kernel entirelyGOLDENMATCH_PLANNER_BUCKET=0 # force the polars-direct backend
Releases since goldenmatch-pg v0.6.0 ship a .sigstore bundle alongside
each tarball. Releases published after 2026-06-05 also ship an
.intoto.jsonl build-provenance attestation next to each asset.Verify a tarball with cosign (keyless, GitHub Actions OIDC):
A successful run prints Verified OK. The .sigstore bundle contains the
certificate, transparency-log entry, and signature in a single file — no
separate key management required.
Install cosign with brew install cosign (macOS) or
go install github.com/sigstore/cosign/v2/cmd/cosign@latest (any platform).
then run dbt deps. The package provides macros for running entity resolution, quality gates, transforms, and identity-graph reads inside dbt pipelines (DuckDB, Postgres, and Snowflake).Zero-config Fellegi-Sunter dedupe needs no hand-written config:
{{ config(materialized='goldenmatch_dedupe', probabilistic=true) }}SELECT * FROM {{ ref('stg_customers') }}
probabilistic=true builds the FS model from the data (DuckDB + Postgres). Omit it for standard zero-config dedupe, or pass an explicit match_config for full control.