Metadata-Version: 2.4
Name: privaci
Version: 0.1.0b4
Summary: In-VPC PostgreSQL masking and anonymization engine
Author-email: BoundaryLogic <hello@boundarylogic.io>
License: Elastic License 2.0
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Classifier: Topic :: Security
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: asyncpg==0.30.0
Requires-Dist: click<8.5,>=8.1.7
Requires-Dist: cryptography==48.0.1
Requires-Dist: pydantic==2.10.6
Requires-Dist: pyyaml==6.0.2
Requires-Dist: typer==0.16.0
Provides-Extra: nlp
Requires-Dist: spacy==3.8.7; extra == "nlp"
Provides-Extra: dev
Requires-Dist: black==26.3.1; extra == "dev"
Requires-Dist: cosmic-ray==8.4.6; extra == "dev"
Requires-Dist: hypothesis==6.127.6; extra == "dev"
Requires-Dist: isort==6.0.1; extra == "dev"
Requires-Dist: mkdocs-material==9.6.11; extra == "dev"
Requires-Dist: mkdocs==1.6.1; extra == "dev"
Requires-Dist: mypy==1.15.0; extra == "dev"
Requires-Dist: pip-audit==2.7.3; extra == "dev"
Requires-Dist: pip-tools==7.4.1; extra == "dev"
Requires-Dist: pre-commit==4.1.0; extra == "dev"
Requires-Dist: pytest-asyncio==1.4.0; extra == "dev"
Requires-Dist: pytest-cov==6.0.0; extra == "dev"
Requires-Dist: pytest-mock==3.14.0; extra == "dev"
Requires-Dist: pytest==9.0.3; extra == "dev"
Requires-Dist: ruff==0.9.6; extra == "dev"
Requires-Dist: types-PyYAML==6.0.12.20241230; extra == "dev"
Dynamic: license-file

# PrivaCI

**One command. Sanitized staging data. No data leaves your VPC.**

PrivaCI is a stateless batch engine that reads from a PostgreSQL source
(typically a production replica), masks PII with a three-tier pipeline, and
writes realistic synthetic data to a staging database with referential
integrity preserved.

## Prerequisites

- Python **3.12+**, or the official container image
  (`ghcr.io/boundarylogic/privaci`)
- A PostgreSQL **source** (typically a production replica) and an empty
  **target** database

## Quickstart

**Fastest path** — self-contained evaluation stack (~60 s):

```bash
export ANONYMIZATION_SALT="$(openssl rand -hex 32)"
make eval-up
```

See [`docs/quickstart.md`](docs/quickstart.md) for the full walkthrough.

**Your own databases:**

```bash
pip install -e .
privaci gen-salt > .privaci-salt && chmod 600 .privaci-salt
export ANONYMIZATION_SALT=$(cat .privaci-salt)
export SOURCE_DB_URL=postgresql://user:pass@source-host:5432/app
export TARGET_DB_URL=postgresql://user:pass@target-host:5432/staging

privaci validate && privaci dry-run && privaci run && privaci verify
```

Browse the docs site locally: `pip install -e ".[dev]" && make docs-serve`

## Documentation

Start with the [documentation index](docs/README.md) or [quickstart](docs/quickstart.md).
Key pages:

**Using PrivaCI**

- [CLI reference](docs/cli-reference.md) — every command, its options, and examples
- [Configuration reference](docs/configuration.md) — the `mask-rules.yaml` format
- [Error codes](docs/error-codes.md) — exit codes and message format
- [State & audit schema](docs/state-schema.md) — what runs write to `_privaci`
- [Extending PrivaCI](docs/extending-privaci.md) — the plugin contract model

**Developing PrivaCI**

- [Local development & testing](docs/local-development.md)
- [Test fixtures — MedicalHelpDesk Corp](docs/test-fixtures.md)
- [Architecture decision records](docs/adr/README.md)

## License

The engine is licensed under the [Elastic License 2.0](LICENSE). Optional
paid features ship as a separate plugin layer via the
[plugin contracts](docs/extending-privaci.md).
