Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

ParqDB

English | 中文

Billion-scale embedded vector database built entirely on Parquet and Arrow.

PyPI CI Python 3.11-3.14 Rust 1.96 License

Browser Demo | Quick Start | Status | Documentation


ParqDB is an embedded vector database for larger-than-memory search and analytics on billion-scale multimodal data, with Parquet storage and Arrow-native execution.

ParqDB querying a published Wikipedia vector index directly from the browser
Try the live browser demo →
IVF-LVQ8 over HTTP Range · Parquet · WebAssembly · no query server

⭐ If ParqDB is useful, star the repo to help more people find it.

Key Features

  • Billion-scale search in bounded memory. Search one billion vectors (SIFT1B) at 90.3% recall with 63.05 ms median latency using just 2 CPU cores and 4 GB of memory.
  • Everything is Parquet. Source data and vector indexes use standard Parquet rather than proprietary binary formats, making indexes easy to version, publish, and share across engines and applications.
  • Publish once, query anywhere. Publish immutable IVF-LVQ indexes to object storage and search them directly from a browser over HTTP Range and WebAssembly, without a query server.
  • Multimodal data, SQL-native search. Vector search is expressed as relational operations, allowing the SQL optimizer to combine it with filters, joins, and aggregations in a single execution plan.
  • Built for serving and analytics. Use intra-query parallelism for low-latency analytical and large-k searches, and inter-query parallelism for high-throughput online serving.
  • Scale from one core to thousands. Run embedded on a single machine, then use the same Parquet index with Spark or StarRocks at cluster scale.

Quick Start

Install ParqDB:

python -m pip install parqdb

From a new working directory, build a source-encoded IVF index over the dataset included in the package and run a filtered vector query:

import parqdb

session = parqdb.connect("./parqdb-data")
session.register_parquet("documents", parqdb.datasets.uri("documents"))
documents = session.table("documents")

documents.create_index(
    "documents_embedding",
    column="embedding",
    key=["document_id"],
    config=parqdb.IVF(nlist=3),
)
documents.wait_for_index("documents_embedding")

query = (
    documents.search([0.2, 0.0], column="embedding")
    .where("tenant_id = 42 AND status = 'published'")
    .nprobes(3)
    .limit(3)
    .select(["document_id", "title", "category"])
)

print(session.collect(query).to_pylist())

Vector search remains relational rather than becoming a terminal service call. Compile it as a SQL subquery and compose it with the rest of the analysis:

session.register_parquet(
    "document_stats",
    parqdb.datasets.uri("document_stats"),
)
search_sql = session.to_sql(query)
summary = session.sql(f"""
    SELECT
        h.category,
        COUNT(*) AS matches,
        AVG(h._distance) AS avg_distance,
        MAX(s.popularity) AS max_popularity
    FROM ({search_sql}) AS h
    JOIN document_stats AS s USING (document_id)
    GROUP BY h.category
    ORDER BY h.category
""")
print(summary.to_pydict())

The packaged dataset makes this example self-contained. The getting-started guide covers persistent tables, existing indexes, query inspection, and source schema requirements.

Publish a source table and an immutable browser index in one command. For raw text, ParqDB uses the pinned MiniLM ONNX model for both offline embeddings and browser parity metadata, then builds hierarchical IVF-LVQ8 and uploads every object before exposing index/manifest.json:

python -m pip install "parqdb[publish]"

parqdb publish \
  --source documents.parquet \
  --key chunk_id \
  --text-column title \
  --text-column section \
  --text-column text \
  --nlist 4096 \
  --destination s3://my-bucket/kb/v1 \
  --s3-endpoint https://ACCOUNT_ID.r2.cloudflarestorage.com \
  --s3-region auto \
  --public-url https://data.example.com/kb/v1

Credentials come from the standard AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables. If documents.parquet already contains embeddings, replace the three --text-column options with --vector-column embedding. Publication refuses to overwrite an existing prefix and verifies public HTTP Range and CORS behavior before succeeding.

For a complete document-to-GitHub-Pages knowledge base, including token-aware chunking and the search UI, see parqdb-knowledgebase.

Status

Runtime Storage Current capability Status
Embedded DataFusion Parquet Build and query IVF, IVF-LVQ4, and IVF-LVQ8 indexes Supported
Browser/WASM Public HTTPS object storage Query immutable IVF-LVQ4 and IVF-LVQ8 indexes over HTTP Range Experimental
Embedded DataFusion Iceberg Query exact table snapshots through PyIceberg Experimental
Client/server Authorized Parquet sources Build and query through the HTTP API Experimental

The first supported product surface is the embedded DataFusion runtime. The index specification remains independent of that runtime; distributed engine adapters are no longer bundled into the Python package.

See the local guide for installation and configuration.

The experimental HTTP server is documented in the server guide.

Documentation

TEngineDB-V and ParqDB

TEngineDB-V: An OLAP-Native Vector Search System for Large-k Workloads at Tencent is Tencent's production system for large-k vector search. On a 10-billion-vector deployment, its deep integration with TEngineDB delivers up to a 52x speedup over the legacy system.

Figure 7: Latency-Recall Trade-off Across Systems

Figure 13: Production performance at 10-billion scale

ParqDB shares the idea, not the implementation. It rebuilds table-native vector search around open index formats and existing SQL engines, aiming for TEngineDB-V-class performance without requiring a proprietary engine.

If you use ParqDB in your research, please cite our VLDB 2026 Industry Track paper:

@misc{wu2026tenginedbvolapnativevectorsearch,
  title         = {{TEngineDB-V}: An {OLAP}-Native Vector Search System for Large-$k$ Workloads at Tencent},
  author        = {Xufei Wu and Pengcheng Zhang and Yitong Song and Xiaobo Zhang and Anqi Liang and Kai Wang and Jijun Du and Yidi Xiong and Guangxu Cheng and Zhe Chen and Peng Chen and Guoliang Li and Xuanhe Zhou and Fan Wu},
  year          = {2026},
  eprint        = {2608.00650},
  archivePrefix = {arXiv},
  primaryClass  = {cs.DB},
  url           = {https://arxiv.org/abs/2608.00650},
}

Development

ParqDB's next phase is being designed in public. We welcome concrete use cases, benchmark results, design feedback, and implementation help:

If you are working on RAG, agent trajectory storage, Parquet performance, or embedded lakehouse systems, share your workload and requirements in the relevant issue. Comment before starting a large change so that scope and interfaces can be agreed on first.

ParqDB uses uv, Maturin, Cargo, and a small Makefile orchestration layer:

make sync
make develop
make check

See CONTRIBUTING.md for quality gates, fixtures, benchmarks, and contribution guidelines.

License

ParqDB's original code is available under the MIT License. Wheels include the vendored DataFusion Python binding under Apache-2.0; see the third-party notices.

ParqDB builds on work from LanceDB, DataFusion, DuckDB, StarRocks, Apache Spark, and Apache Iceberg, with gratitude to their contributors and communities.

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.

parqdb-0.2.0rc3-cp310-abi3-manylinux_2_28_x86_64.whl (69.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

parqdb-0.2.0rc3-cp310-abi3-macosx_11_0_arm64.whl (63.6 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file parqdb-0.2.0rc3-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for parqdb-0.2.0rc3-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7898fe97b7c14f74832d7d4ce903cdd8d90943aae61029f411376f4714861254
MD5 0e08edbcab9ca9faefc97705015d0830
BLAKE2b-256 e67698f0b0af104f51b8f3d6d6d03b34dbe70e3edd79a9d3eeeb256cf6c48df0

See more details on using hashes here.

Provenance

The following attestation bundles were made for parqdb-0.2.0rc3-cp310-abi3-manylinux_2_28_x86_64.whl:

Publisher: release.yml on parqdb-io/parqdb

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

File details

Details for the file parqdb-0.2.0rc3-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for parqdb-0.2.0rc3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1ea8d5dc38cfa52b71ce0155b13455cd2061dc030ce284fca948812ec1c425a
MD5 04d7fb28aaebce0c2af325afdf4903e4
BLAKE2b-256 0ef18da745cef37ade2d7d5679eae734eeccd23426f73196a5959db0faf4ec2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for parqdb-0.2.0rc3-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on parqdb-io/parqdb

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page