Pari
Pari is a fast similarity indexing and deduplication engine for large datasets.
The project is built around a Rust core with Python bindings and a CLI. The goal is to let users move from an in-memory prototype to persistent or shared indexes without rewriting their similarity logic.
Status
Pari 0.2.0 alpha is the current release line for PyPI, crates.io, and GitHub Releases. Published artifacts come only from the signed v0.2.0 tag; until that tag exists, this source tree is a release candidate and 0.1.0 remains the latest published version. Pari is still pre-1.0: supported 0.2.x interfaces follow the v0.x compatibility policy, while experimental surfaces may change in a future minor release with release notes and migration guidance.
Choose the interface that fits your workload:
| Interface | Install or download | Start here |
|---|---|---|
| Python 3.10+ | python -m pip install "pari-similarity==0.2.0" |
Python API guide |
| Rust 1.81+ | cargo add pari-core@0.2.0 pari-index@0.2.0 |
Architecture and crate layers |
| CLI | Download a 0.2.0 archive | CLI guide |
The project links collect release notes, compatibility and security policies, integrations, workload guides, and benchmark evidence.
Python quick start
Install the published distribution (CPython 3.10 or newer):
python -m pip install "pari-similarity==0.2.0"
The distribution name is pari-similarity; the import name is pari:
from pari import MinHash
first = MinHash.from_values(
[b"new york", b"rust", b"search"],
num_perm=128,
seed=7,
)
second = MinHash.from_values(
[b"new york", b"python", b"search"],
num_perm=128,
seed=7,
)
print(first.jaccard(second))
See the Python API guide for persistent indexes, batch operations, and the 0.2 API surface.
Rust quick start
The four public crates are versioned and released together at 0.2.0:
| Crate | Use it for |
|---|---|
pari-core |
MinHash signatures and similarity primitives |
pari-format |
Safe codecs and the versioned index format |
pari-index |
In-memory LSH indexing and duplicate grouping |
pari-store |
Crash-safe local persistent indexes |
Add only the layers your application uses:
cargo add pari-core@0.2.0 pari-index@0.2.0 pari-store@0.2.0
Or declare them directly:
[dependencies]
pari-core = "0.2.0"
pari-index = "0.2.0"
pari-store = "0.2.0"
Add pari-format = "0.2.0" only when working directly with codecs or format metadata.
CLI quick start
Download the published archive for your platform:
| Platform | Archive |
|---|---|
| Linux x86_64 | pari-0.2.0-linux.tar.gz |
| macOS arm64 | pari-0.2.0-macos.tar.gz |
| Windows x86_64 | pari-0.2.0-windows.zip |
Linux:
curl -LO https://github.com/dipeshbabu/pari/releases/download/v0.2.0/pari-0.2.0-linux.tar.gz
tar -xzf pari-0.2.0-linux.tar.gz
./pari-0.2.0-linux/pari --version
macOS:
curl -LO https://github.com/dipeshbabu/pari/releases/download/v0.2.0/pari-0.2.0-macos.tar.gz
tar -xzf pari-0.2.0-macos.tar.gz
./pari-0.2.0-macos/pari --version
Windows PowerShell:
Invoke-WebRequest -Uri "https://github.com/dipeshbabu/pari/releases/download/v0.2.0/pari-0.2.0-windows.zip" -OutFile "pari-0.2.0-windows.zip"
Expand-Archive -Path "pari-0.2.0-windows.zip" -DestinationPath .
.\pari-0.2.0-windows\pari.exe --version
Verify downloads with the published SHA256SUMS before installing the binary on PATH.
Given JSONL records such as:
{"key":1,"values":["new york","rust","search"]}
{"key":2,"values":["new york","python","search"]}
build and verify a persistent index:
pari index --input documents.jsonl --output documents.pari --json
pari verify --index documents.pari --json
Run native duplicate grouping without sending candidate edges through Python:
pari dedup --input documents.jsonl --emit groups --json
See docs/cli.md for indexing, search, deduplication, inspection, JSONL output, verification, and shell completion.
Source users evaluating shared memory or Redis backends can follow the storage backend guide; those experimental crates are not part of the published 0.2.0 Rust set.
Project links
- PyPI:
pari-similarity - GitHub Release and binary downloads
- 0.2.0 release notes
- Compatibility policy
- Security policy and dependency maintenance
- Python guide, CLI guide, dataset integrations, text workloads, code corpus deduplication, and entity matching
- Datasketch 2.x interoperability and migration
- Weighted MinHash and SimHash evaluation
- Shardable and mergeable index evaluation
- Benchmark methodology, native-Linux and historical evidence, CPU parallelism, LSH planning, observability, and workload roadmap
Design goals
- Batch-first compute, insert, query, and remote storage paths.
- Safe, versioned persistence instead of executable object serialization.
- A persistent local index between RAM-only prototypes and remote databases.
- Shared backends without coupling LSH code to database-specific commands.
- A small Rust core shared by Python and CLI frontends.
- Correctness tests and benchmark evidence for performance-sensitive changes.
- No merge to
mainwhile required CI is failing.
Layers
pari-core: signatures and similarity primitives.pari-index: LSH and candidate generation.pari-store: crash-safe local persistent indexes.pari-backend: typed in-process and shared remote storage backends, including Redis.pari-py: PyO3 Python bindings and theparipackage.pari-cli: command-line workflows.
See docs/architecture.md, docs/compatibility.md, and the GitHub issues for the implementation roadmap.
Development
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace --all-targets --all-features
Python wheel development additionally uses maturin:
python -m pip install "maturin>=1.14,<2"
python -m pip install .
maturin build --release
Build the CLI from source with cargo build --release -p pari-cli.
License
Pari is MIT licensed. See LICENSE. Portions derived from or informed by third-party MIT-licensed projects are documented in NOTICE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 pari_similarity-0.2.0.tar.gz.
File metadata
- Download URL: pari_similarity-0.2.0.tar.gz
- Upload date:
- Size: 128.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3195923467b821493dafe2858ce71f8d1eabdca75673116e42f3bfc3378c0415
|
|
| MD5 |
f7364f66a959b019d29278e0784a7626
|
|
| BLAKE2b-256 |
f3df44bfe3a4662da5fe34524afc77c1cffe7ccafdaa15869f3f62f820a4c8b3
|
Provenance
The following attestation bundles were made for pari_similarity-0.2.0.tar.gz:
Publisher:
release.yml on dipeshbabu/pari
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pari_similarity-0.2.0.tar.gz -
Subject digest:
3195923467b821493dafe2858ce71f8d1eabdca75673116e42f3bfc3378c0415 - Sigstore transparency entry: 2669501197
- Sigstore integration time:
-
Permalink:
dipeshbabu/pari@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dipeshbabu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pari_similarity-0.2.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: pari_similarity-0.2.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 404.6 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f8000bba3dd771429c1cca332c844fbec949a4300163485c12ec80b13c813e3
|
|
| MD5 |
0a87f412bced14c061f22e7e871fb73b
|
|
| BLAKE2b-256 |
dd6d39f865b0871c6a5213fbdff0150b0ba2df36b5bb7c2c92bfaa995f8bf28e
|
Provenance
The following attestation bundles were made for pari_similarity-0.2.0-cp310-abi3-win_amd64.whl:
Publisher:
release.yml on dipeshbabu/pari
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pari_similarity-0.2.0-cp310-abi3-win_amd64.whl -
Subject digest:
7f8000bba3dd771429c1cca332c844fbec949a4300163485c12ec80b13c813e3 - Sigstore transparency entry: 2669501421
- Sigstore integration time:
-
Permalink:
dipeshbabu/pari@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dipeshbabu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pari_similarity-0.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: pari_similarity-0.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 511.2 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20f2f3ae587f71f240537cfc598948e6976a18dcd8d6668e659c095ed7731237
|
|
| MD5 |
e81b8fdb87ad6f49f8c8d1d13ad63c81
|
|
| BLAKE2b-256 |
bd6911fd518a760e2bc8dea70febec2fa387f5eef65d4f085b29b665bbb5cdec
|
Provenance
The following attestation bundles were made for pari_similarity-0.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on dipeshbabu/pari
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pari_similarity-0.2.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
20f2f3ae587f71f240537cfc598948e6976a18dcd8d6668e659c095ed7731237 - Sigstore transparency entry: 2669501254
- Sigstore integration time:
-
Permalink:
dipeshbabu/pari@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dipeshbabu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pari_similarity-0.2.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: pari_similarity-0.2.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 465.7 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a7f933a039ee01f8010c9eac694d0718b512c5b92c2f8584420850a2f5b3387
|
|
| MD5 |
404ae05660539047f4546fc77d390f9b
|
|
| BLAKE2b-256 |
a4658615b23c07a0d39a9fed04fa316761db80fea13c306c66ff732329613b93
|
Provenance
The following attestation bundles were made for pari_similarity-0.2.0-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on dipeshbabu/pari
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pari_similarity-0.2.0-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
3a7f933a039ee01f8010c9eac694d0718b512c5b92c2f8584420850a2f5b3387 - Sigstore transparency entry: 2669501336
- Sigstore integration time:
-
Permalink:
dipeshbabu/pari@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dipeshbabu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f718ff88fcf88d3bbf7918210389feb2dc0f9353 -
Trigger Event:
push
-
Statement type: