Deterministic synthetic identity graphs for privacy-system evaluation
Project description
SynthWorld
SynthWorld generates deterministic, connected identity graphs for testing privacy, PII-extraction, entity-resolution, and exposure-analysis systems without collecting or fabricating data about real people. It began as the ground-truth harness for Idcognito and is deliberately usable as an independent Apache-2.0 Python package.
Every record is explicitly marked synthetic: true. Email addresses use the
reserved example.test domain, phone numbers use the fictional North American
555-01xx block, addresses contain obvious example components, and national
identifiers carry a SYN- prefix with deliberately invalid checksums. Do not
replace these safeguards with plausible real-world identifiers.
What it provides
- seeded personas, identity attributes, and evidence-backed relationships;
- public exposure records for breach, broker, search, and social scenarios;
- exact-span extraction pages with evaluator-only answer keys;
- adversarial entity-resolution cases and relationship ground truth;
- risk-calibration cases with public observations physically separated from evaluator-only score and factor truth; and
- frozen, checksummed benchmarks plus machine-readable integrity metrics.
The core-world, exposure-corpus, extraction-corpus, connection-benchmark, and
risk-benchmark schemas are independently versioned 1.0.0 contracts. See
DATA_DICTIONARY.md for field definitions and the strict
public/oracle boundary. See GOLDEN_REVIEW.md for the frozen
benchmark review record.
Install
The distribution is published as idcognito-synthworld; the import package
and the CLI are both named synthworld, and the package ships typed
(py.typed). Release notes live in CHANGELOG.md.
pip install idcognito-synthworld
synthworld generate --seed 20260719 --persona-count 10 --output world.json
Develop from source
Install uv, clone the repository, and run:
uv sync --locked --all-groups
uv run synthworld generate --seed 20260719 --persona-count 10 --output world.json
uv run synthworld metrics --seed 20260719 --persona-count 10
Useful corpus commands include:
uv run synthworld generate-corpus --seed 20260719 --persona-count 10 --output exposures.json
uv run synthworld generate-extraction --seed 20260719 --persona-count 10 --output extraction.json
uv run synthworld generate-public-connections --seed 20260719 --persona-count 10 --output connections.json
uv run synthworld generate-risk-public --seed 20260719 --persona-count 10 --output risk.json
See examples/ for a worked exact-span extraction evaluation and annotated sample output.
The generate-connection-benchmark and generate-risk-answer commands include
or emit evaluator-only truth. Keep those artifacts outside product and demo data
paths. The public commands emit only product-safe observations.
Verify every claim
make ci runs formatting, linting, strict type checking, all tests with 100%
branch coverage, benchmark metrics at 10- and 100-persona scales, package
inspection, and an isolated-wheel smoke test. The same gates run on Python 3.12
and 3.14 in GitHub Actions; a separate workflow job scans the repository's full
history for secrets.
make ci
Generated JSON is safe for fixtures, demos, tutorials, and evaluation when its synthetic markers remain intact. SynthWorld is not a source of real identity data and must never be used to impersonate, target, or investigate a person.
License
Copyright 2026 Idcognito contributors. Licensed under the Apache License 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file idcognito_synthworld-0.7.0.tar.gz.
File metadata
- Download URL: idcognito_synthworld-0.7.0.tar.gz
- Upload date:
- Size: 107.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9177299109e3a5936e15a878b809c0ed483b8ca1c7228845a81f9c9bbee8e5e
|
|
| MD5 |
5c4e88429c15fb7d117485c11430e3ca
|
|
| BLAKE2b-256 |
5127302f85b0d7e9f8c8e12ad7e679b5cfa373df9469b33d85c13af3884e1380
|
Provenance
The following attestation bundles were made for idcognito_synthworld-0.7.0.tar.gz:
Publisher:
release.yml on bluntmachetti/synthworld
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
idcognito_synthworld-0.7.0.tar.gz -
Subject digest:
b9177299109e3a5936e15a878b809c0ed483b8ca1c7228845a81f9c9bbee8e5e - Sigstore transparency entry: 2205496736
- Sigstore integration time:
-
Permalink:
bluntmachetti/synthworld@8802fd1154bf28948f39700f7aa6ea4d790eee7c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/bluntmachetti
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8802fd1154bf28948f39700f7aa6ea4d790eee7c -
Trigger Event:
push
-
Statement type:
File details
Details for the file idcognito_synthworld-0.7.0-py3-none-any.whl.
File metadata
- Download URL: idcognito_synthworld-0.7.0-py3-none-any.whl
- Upload date:
- Size: 61.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30df71b43e97c73ca71a74ed1fab5fd15498daf2f5290f6b52b5012ef832610e
|
|
| MD5 |
20c4bbc50b030b23d9184b2f18538cb1
|
|
| BLAKE2b-256 |
7eb8c344dd45a87a8664d5fdc012baf5227e5492020e293892e4cebe790d510e
|
Provenance
The following attestation bundles were made for idcognito_synthworld-0.7.0-py3-none-any.whl:
Publisher:
release.yml on bluntmachetti/synthworld
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
idcognito_synthworld-0.7.0-py3-none-any.whl -
Subject digest:
30df71b43e97c73ca71a74ed1fab5fd15498daf2f5290f6b52b5012ef832610e - Sigstore transparency entry: 2205496749
- Sigstore integration time:
-
Permalink:
bluntmachetti/synthworld@8802fd1154bf28948f39700f7aa6ea4d790eee7c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/bluntmachetti
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8802fd1154bf28948f39700f7aa6ea4d790eee7c -
Trigger Event:
push
-
Statement type: