Skip to main content
GoldenFlow is the transform / standardize / normalize engine of the Golden Suite. Its flagship surface is the transform-op catalog: a registry of small, composable, single-purpose ops you list against columns to turn messy input into clean, match-ready values. Each op is a named function you reference by string in a config, chain in order, and (for most ops) run on a vectorized fast path with an optional owned Rust kernel underneath. The registry is the source of truth. There are 124 built-in ops today (including the ops contributed by the bundled domain packs). Ops run left to right per column, so [strip, lowercase, email_normalize] trims, lowercases, then canonicalizes in that sequence. For how ops are picked automatically in zero-config mode and how they map onto detected column types, see config matrix. For install, categories overview, and the DQBench score, see the overview.

Op catalog

Ops are grouped by category below. The “Meaning” column is the op’s registered gloss. Ops labelled “Native-first” run on an owned goldenflow-core Rust kernel when available and fall back to pure Python otherwise.

Case and whitespace

Encoding and Unicode cleanup

Names

Phone

Email

URLs

Dates and time

Address and geo

Numeric

Categorical and boolean

Company

Phonetic and blocking keys

Identifiers and validation

Checksummed and structural validators / formatters. Most run on owned Rust kernels.

Domain-pack ops

Ops contributed by the carceral domain pack (other packs reuse ops from the categories above).

Domain packs

Domain packs bundle a curated set of ops plus a ready-to-run default config for a specific vertical. Load one with goldenflow.domains.load_domain(name) (each returns a DomainPack with a name, description, its transforms list, and a default_config). Packs compose with the general catalog above, so a pack’s default config can reference both its own ops and the shared ones.

The canonicalize op

canonicalize(value, kind) is a separate, deliberately narrow surface from the frame-level transforms above. Where phone_e164 or address_standardize infer country, parse streets, and lean on parsing libraries, canonicalize is scalar (one string in, one string out), dependency-free (stdlib only), and byte-for-byte portable so the exact same canonical string can be reproduced in another language (for example, a browser JavaScript / TypeScript port). That portability is the point for privacy-preserving record linkage and clean rooms: in the true-clean-room tier each party hashes its own values client-side, so the server-side Python and the browser-side JS have to agree on the exact canonical string before hashing, or the encoded records never line up. Every canonicalizer is scalar, total (never raises on string input; None maps to ""), idempotent, locale-independent (ASCII-only case folding), and dependency-free. CanonicalizeKind accepts four kinds:

Config example

A GoldenFlowConfig drives standardization declaratively. The transforms: list holds one spec per column: a column name plus an ordered ops list. Ops run in sequence, so put trimming and casing before the semantic op that depends on clean input.
Run it over a DataFrame:
In zero-config mode GoldenFlow profiles each column, infers its type, and applies safe ops for you. The mapping from detected column type to the ops above is documented in config matrix; for install, the category overview, and the DQBench score, see the overview.