Skip to main content

stella-anonymize-core

Python bindings for the stella anonymization Rust core.

Install

Prebuilt wheels are published to PyPI (this activates with the next release). Wheels ship the bundled native pipeline packages, so no monorepo checkout is needed:

uv add stella-anonymize-core
# or: pip install stella-anonymize-core

Wheels target Python 3.11+ (abi3) on manylinux x64/aarch64, macOS x64/arm64, and Windows x64. Only wheels are published; there is no source distribution. The build.rs step needs the monorepo's generated .stlanonpkg native pipeline packages, so a source build cannot be self-contained. To build from a checkout instead, run bun run build first so those packages exist, then:

uv add ./crates/anonymize-py

Usage

Prepare or load the anonymizer once, then reuse it for documents.

import stella_anonymize as anonymize

languages = anonymize.available_default_native_pipeline_languages()
prepared = anonymize.preload_default_native_pipeline(
    language="en" if "en" in languages else None
)
result = prepared.redact_text(text, redact_string="***")

print(result.redaction.redacted_text)

For related documents, create an explicit in-memory session from the prepared anonymizer. Repeated normalized entities reuse their placeholders within that session:

session = prepared.create_redaction_session("opaque_case_1")
first = session.redact_text(first_document)
second = session.redact_text(second_document)
restored_text = session.restore_text(first.redaction.redacted_text)

restore_text() restores complete known placeholders in one non-cascading pass. Other session namespaces remain unchanged; unknown placeholders owned by the session fail closed. Lifecycle sessions also require the caller-supplied observed_at_epoch_seconds argument.

session.to_plaintext_json() supports deterministic in-memory transfer between runtime instances. Its output contains original personal data in plaintext: do not log it or persist it without an application-owned protection layer. Restore validated transfer state with prepared.restore_redaction_session(json_state).

For persistence, use the authenticated binary archive API with a caller-owned 32-byte key. Restoring requires the expected session identity so an archive cannot be substituted across records:

archive = session.to_encrypted_archive(application_key)
restored = prepared.restore_encrypted_redaction_session(
    archive,
    application_key,
    session.session_id(),
)

Generate, store, rotate, and authorize access to the key outside the SDK. The archive contains personal data as ciphertext; do not log the archive or key. Lifecycle sessions use to_encrypted_archive_at() and require observed_at_epoch_seconds when restored.

Sessions can carry explicit lifecycle bounds. The engine never reads the system clock; supply the UTC epoch-second observation time for each lifecycle-aware operation:

session = prepared.create_redaction_session_with_lifecycle(
    "opaque_case_2",
    created_at_epoch_seconds=1_800_000_000,
    expires_at_epoch_seconds=1_800_086_400,
)
result = session.redact_text_at(
    document,
    observed_at_epoch_seconds=1_800_000_100,
)
metadata = session.inspect(1_800_000_100)  # contains no entity values
deletion = session.delete()

Expiry is fail-closed at its exact boundary. delete() performs logical deletion: it clears the session mappings and prevents future use, but does not revoke earlier exported copies or claim physical erasure of process memory.

Caller-produced detections use Python character indexes and enter the same resolution and redaction pipeline as built-in detections:

result = prepared.redact_text_with_caller_detections(
    "😀Alice signed.",
    [{"start": 1, "end": 6, "label": "person", "score": 0.95,
      "provider_id": "example-ner", "detection_id": "person-1"}],
)

Pass {"organization": "keep"} as the operators argument to preserve detected organizations while processing other labels normally. Kept entities remain in the result and operator map, but create no reversible mapping entry.

Use a tagged mask configuration to replace a number of visible Unicode grapheme clusters from the start or end:

operators = {
    "email address": {
        "type": "mask",
        "masking_character": "*",
        "characters_to_mask": 6,
        "direction": "start",
    }
}

provider_id and detection_id are required 1–128 byte ASCII identifiers: they start with an alphanumeric character and otherwise contain only alphanumerics, ., _, :, or -. Do not encode personal data in them. Retained entities preserve both IDs; redact_text_with_caller_detections_diagnostics_json() reports audit-safe external input and retained counts without matched text.

Regional codes use the exact package when present and otherwise fall back to the base language package, so en-US can use the shipped en artifact.

For caller-owned configs, prepare package bytes before serving documents and load them at runtime:

import stella_anonymize as anonymize

package_bytes = anonymize.prepare_search_package(config_json)
prepared = anonymize.load_prepared_package(package_bytes)
prepared.warm_lazy_regex()
result = prepared.redact_text(text, redact_string="***")

get_default_native_pipeline() defers lazy regex warmup by default so the first call only pays for regexes the document actually touches. Use preload_default_native_pipeline() or pass warmup="lazy-regex" when startup can absorb that cost before serving documents. Top-level redact_text() and redact_text_json() are available for one-off calls, but they prepare from config on each invocation. Use load_prepared_package() or load_prepared_package_file() for repeated document processing.

API

  • prepare_search_package(config_json | config_bytes | config_mapping, compressed=True) -> bytes
  • load_prepared_package(package_bytes) -> PreparedAnonymizer
  • load_prepared_package_file(package_path) -> PreparedAnonymizer
  • available_default_native_pipeline_languages() -> tuple[str, ...]
  • read_default_native_pipeline_package_file(language=None) -> bytes
  • get_default_native_pipeline(language=None, package_path=None, warmup="none") -> PreparedAnonymizer
  • preload_default_native_pipeline(language=None, package_path=None) -> PreparedAnonymizer
  • PreparedAnonymizer.warm_lazy_regex()
  • PreparedAnonymizer.warm_lazy_regex_diagnostics_json()
  • PreparedAnonymizer.create_redaction_session(session_id) -> PreparedRedactionSession
  • PreparedAnonymizer.create_redaction_session_with_lifecycle(...) -> PreparedRedactionSession
  • PreparedAnonymizer.restore_redaction_session(plaintext_json) -> PreparedRedactionSession
  • PreparedRedactionSession.restore_text(full_text, observed_at_epoch_seconds=None) -> str
  • PreparedAnonymizer.redact_text(text, operators=None, redact_string=None)
  • PreparedAnonymizer.redact_text_json(text, operators=None, redact_string=None)
  • PreparedAnonymizer.diagnostics_json(text, operators=None, redact_string=None)

PreparedSearch is an alias for PreparedAnonymizer.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

stella_anonymize_core-2.0.2-cp311-abi3-win_amd64.whl (26.3 MB view details)

Uploaded CPython 3.11+Windows x86-64

stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26.4 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ x86-64

stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.2 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64

stella_anonymize_core-2.0.2-cp311-abi3-macosx_11_0_arm64.whl (26.0 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

stella_anonymize_core-2.0.2-cp311-abi3-macosx_10_12_x86_64.whl (26.3 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file stella_anonymize_core-2.0.2-cp311-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for stella_anonymize_core-2.0.2-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 30bef7e444d982e96e6056f765659eb59b751a48bcb80d1d9b5b7ee4c03fb7ba
MD5 4670556f7193717638268c1e3d6c5fcd
BLAKE2b-256 5f58097caa9358ac039b6775d7e3933dd3fafe270a6578bf10d98f644bba5898

See more details on using hashes here.

Provenance

The following attestation bundles were made for stella_anonymize_core-2.0.2-cp311-abi3-win_amd64.whl:

Publisher: release.yml on stella/anonymize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aec3a83b250472ba516ff55ddf082bf35e387b12634ac8bf1c751329dd7baa72
MD5 717f0713d0100a99bbc73340c09c0474
BLAKE2b-256 b3ae2174c93bb923a74d3064806beab63e8613316965a901bb21b32d1d7f5d5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on stella/anonymize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 eba7b4c3481b459921518366f7036afc9d40a53ff87662ad121db914c4d50370
MD5 a34b968ccbbf16b5d386c80895750cab
BLAKE2b-256 b5a2169dff799416ebb45756002a009763694a928a70219e1312d8b475312a46

See more details on using hashes here.

Provenance

The following attestation bundles were made for stella_anonymize_core-2.0.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on stella/anonymize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file stella_anonymize_core-2.0.2-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for stella_anonymize_core-2.0.2-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5f7fced8d23ab1043175928d1245f67fd41ce5ca5e778764259327012f2654c
MD5 366c000359eec00ab2c19fd918eb3b2e
BLAKE2b-256 7efb35d24749b1c36f8355d6f11105e3814b832ba427a9c22c2de2662ab5dfcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for stella_anonymize_core-2.0.2-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on stella/anonymize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file stella_anonymize_core-2.0.2-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for stella_anonymize_core-2.0.2-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9d5adbfd19321a56304c58493b49ad7fcff23ea600f7abd9f2a4eda8b2438569
MD5 251ab384575082927f59492baf202e71
BLAKE2b-256 c3f1ba9596bde1d53ec3269e9a62fc2f6ef00f3c0a5114e5b38c67e3b8cd8026

See more details on using hashes here.

Provenance

The following attestation bundles were made for stella_anonymize_core-2.0.2-cp311-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on stella/anonymize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

2.9.1

5 files

2.9.0

5 files

2.8.3

5 files

2.8.2

5 files

2.8.1

5 files

2.8.0

5 files

2.7.8

5 files

2.7.6

5 files

2.7.5

5 files

2.7.4

5 files

2.7.3

5 files

2.7.2

5 files

2.7.1

5 files

2.7.0

5 files

2.6.3

5 files

2.6.2

5 files

2.6.1

5 files

2.6.0

5 files

2.5.0

5 files

2.4.2

5 files

2.4.1

5 files

2.4.0

5 files

2.3.0

5 files

2.2.0

5 files

2.1.0

5 files

This release

2.0.2 This release

5 files

2.0.1

5 files

2.0.0

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page