Skip to main content

Embedded vector database using the TurboQuant algorithm (arXiv:2504.19874) — zero training, 2-4 bit compression, fast inner-product search

Project description

TurboQuantDB

License PyPI

An embedded vector database with a Python API, built around the TurboQuant algorithm (arXiv:2504.19874) — two-stage quantization that achieves near-optimal vector compression with zero training time.

Goal: make massive embedding datasets practical on lightweight hardware. A 100k-vector, 1536-dim collection that would occupy 586 MB as raw float32 fits in 108 MB on disk with TQDB b=4, or just 59 MB with b=2 — enabling laptop-scale RAG over millions of documents without a dedicated server.

Two deployment modes:

  • Embeddedtqdb Python package (pip install tqdb), runs in-process (no daemon)
  • Server — Axum HTTP service in server/, with multi-tenancy, RBAC, quotas, and async jobs

Key Properties

  • Zero training — No train() step. Vectors are quantized and stored immediately on insert.
  • 5–10× compression — b=4 reduces 1536-dim float32 embeddings from 586 MB to 108 MB (5.4×); b=2 reaches 59 MB (9.9×) at 100k vectors.
  • Two quantizer modes — default (dense, best recall) and a faster ingest variant (srht) for streaming/high-d workloads. See docs/QUANTIZER_MODES.md for a full breakdown.
  • Optional ANN index — Build an HNSW graph after loading data for fast approximate search.
  • Metadata filtering — MongoDB-style filter operators on any metadata field.
  • Crash recovery — Write-ahead log (WAL) ensures durability without explicit flushing.
  • Python nativepip install tqdb; no server or sidecar required.

Installation

pip install tqdb

Building from source (Rust toolchain required): see DEVELOPMENT.md.


Recommended Setup

Default config: fast_mode=False, rerank=True — QJL residual stored and used during reranking for best recall at d ≥ 1536.

Note: At d < 512, QJL projections are too noisy and fast_mode=False reduces recall below the MSE-only baseline. Use fast_mode=True, rerank=False for d < 512.

from tqdb import Database

# High-d (d ≥ 1536) — default config, QJL reranking enabled
db = Database.open(path, dimension=DIM, bits=4)
results = db.search(query, top_k=10)
# 92.2% Recall@1, 99.9% Recall@4 at 100k×1536  |  108 MB disk

# Low-d (d < 512) — MSE-only for best recall at low dimensions
db = Database.open(path, dimension=DIM, bits=4, fast_mode=True, rerank=False)
results = db.search(query, top_k=10)

# Optional: build an HNSW index after bulk load for sub-10ms queries
db.create_index()
results = db.search(query, top_k=10, _use_ann=True)

Full parameter reference: docs/PYTHON_API.md


Quick Start

import numpy as np
from tqdb import Database

db = Database.open("./my_db", dimension=1536, bits=4, metric="ip", rerank=True)

db.insert("doc-1", np.random.randn(1536).astype("f4"), metadata={"topic": "ml"}, document="Machine learning intro")
db.insert("doc-2", np.random.randn(1536).astype("f4"), metadata={"topic": "systems"}, document="Rust memory model")

results = db.search(np.random.randn(1536).astype("f4"), top_k=5)
for r in results:
    print(r["id"], r["score"], r["document"])

Python API

Full reference: docs/PYTHON_API.md

# Open / create
db = Database.open(path, dimension, bits=4, seed=42, metric="ip",
                   rerank=True, fast_mode=False, rerank_precision=None,
                   collection=None, wal_flush_threshold=None,
                   quantizer_type=None)  # None/"dense" = default (Haar QR + Gaussian); "srht" = fast O(d log d) ingest
# NOTE: rerank=True only improves recall when fast_mode=False (the default).
#       With fast_mode=True, rerank=True adds latency but no recall gain.

# Write
db.insert(id, vector, metadata=None, document=None)
db.insert_batch(ids, vectors, metadatas=None, documents=None, mode="insert")  # "insert"|"upsert"|"update"
db.upsert(id, vector, metadata=None, document=None)
db.update(id, vector, metadata=None, document=None)        # RuntimeError if not found
db.update_metadata(id, metadata=None, document=None)       # RuntimeError if not found

# Delete & retrieve
db.delete(id)                        # → bool
db.delete_batch(ids)                 # → int (count deleted)
db.get(id)                           # → {id, metadata, document} | None
db.get_many(ids)                     # → list[dict | None]
db.list_all()                        # → list[str]
db.list_ids(where_filter=None, limit=None, offset=0)       # paginated
db.count(filter=None)                # → int
db.stats()                           # → dict
len(db) / "id" in db                 # container protocol

# Search — brute-force by default; pass _use_ann=True to use HNSW index
results = db.search(query, top_k=10, filter=None, _use_ann=False,
                    ann_search_list_size=None, include=None)
# include: list of "id"|"score"|"metadata"|"document" (default all)
# ann_search_list_size: HNSW ef_search override (only used when _use_ann=True)

all_results = db.query(query_embeddings, n_results=10, where_filter=None)
# query_embeddings: np.ndarray (N, D) — returns list[list[dict]]

# Index
db.create_index(max_degree=32, ef_construction=200, n_refinements=5,
                search_list_size=128, alpha=1.2)

# Metadata filter operators
# $eq $ne $gt $gte $lt $lte $in $nin $exists $and $or
db.search(query, top_k=5, filter={"year": {"$gte": 2023}})
db.search(query, top_k=5, filter={"$and": [{"topic": "ml"}, {"year": {"$gte": 2023}}]})

Benchmarks

Three datasets, 100k vectors each, matching arXiv:2504.19874 Figure 5. Default config: quantizer_type=None (dense), fast_mode=False, rerank=True (QJL reranking enabled — best recall).

Benchmark recall curves — TQDB vs paper

Key results at 100k × d=1536 (DBpedia), brute-force, b=4, rerank=True:

Metric Value
Recall@1 92.2%
Recall@4 99.9%
Disk 108 MB (5.4× compression)
p50 latency ~51ms

Full tables (all 8 configs × 3 datasets), ANN guidance, and reproduction steps: docs/BENCHMARKS.md


RAG Integration

from tqdb.rag import TurboQuantRetriever

retriever = TurboQuantRetriever(db_path="./rag_db", dimension=1536, bits=4)
retriever.add_texts(texts=texts, embeddings=embeddings, metadatas=metadatas)

results = retriever.similarity_search(query_embedding=query_vec, k=5)
for r in results:
    print(r["score"], r["text"])

Server Mode

An optional Axum HTTP server in server/ adds multi-tenancy, RBAC, and async jobs. See server/README.md for setup and endpoint reference.


Research Basis

This is an independent implementation of ideas from the TurboQuant paper. The algorithm itself was authored by the original researchers.

Zandieh, A., Daliri, M., Hadian, M., & Mirrokni, V. (2025). TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate. arXiv:2504.19874

@article{zandieh2025turboquant,
  title={TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate},
  author={Zandieh, Amir and Daliri, Majid and Hadian, Majid and Mirrokni, Vahab},
  journal={arXiv preprint arXiv:2504.19874},
  year={2025}
}

License

Apache License 2.0 — see LICENSE.

Project details


Download files

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

Source Distribution

tqdb-0.5.0.tar.gz (926.1 kB view details)

Uploaded Source

Built Distributions

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

tqdb-0.5.0-cp313-cp313-win_amd64.whl (837.0 kB view details)

Uploaded CPython 3.13Windows x86-64

tqdb-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

tqdb-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

tqdb-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (933.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tqdb-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl (959.1 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

tqdb-0.5.0-cp312-cp312-win_amd64.whl (837.0 kB view details)

Uploaded CPython 3.12Windows x86-64

tqdb-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

tqdb-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

tqdb-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (933.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tqdb-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl (959.1 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

tqdb-0.5.0-cp311-cp311-win_amd64.whl (837.7 kB view details)

Uploaded CPython 3.11Windows x86-64

tqdb-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

tqdb-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

tqdb-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (936.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tqdb-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl (960.8 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

tqdb-0.5.0-cp310-cp310-win_amd64.whl (839.9 kB view details)

Uploaded CPython 3.10Windows x86-64

tqdb-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

tqdb-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

tqdb-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (938.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

tqdb-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl (963.7 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file tqdb-0.5.0.tar.gz.

File metadata

  • Download URL: tqdb-0.5.0.tar.gz
  • Upload date:
  • Size: 926.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for tqdb-0.5.0.tar.gz
Algorithm Hash digest
SHA256 02b61c83ff188d52801d24c153b070ef9c8611ed2be05146158926c16de97e1a
MD5 c90b6b8be63fb5324058d0ad702dda05
BLAKE2b-256 623acee9ec652c58d6c55a9f31aa6df53a07fa40ddd82dc9549497d313b0021f

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: tqdb-0.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 837.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for tqdb-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 dc28dd90dbdfd42173838a39fb3a1b309c202efa92084bfc2cf9578a375278ed
MD5 4794c50734664972a76fbb561b83fb41
BLAKE2b-256 7a142eea91af4b6b92ea4055a4211dfd246ac0026fea161e6f6ef2637b5472ce

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a2f5d0c6fa2f7e0a8af4943ffb8e77f5a77e92f7cce44da6cbc7a46b8d647bd7
MD5 5877083c7f5cc12bd2fa8aa683e9bad6
BLAKE2b-256 839abe0a95db96dfa872e6970a7c31e25c42e3b7a9384f8b3428b827f3958145

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 19ff43f59068725becc260ef49784be351bb65db757abfa04627aae1690728d5
MD5 330de0e15f5c61643194dfe87024b2c3
BLAKE2b-256 13e3fd52c1757330244c8f898a3c7a802a84eac2069fa945e3c155e7fd4b9c00

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e2657a7c8a39bf821724ff73c3ea27401675cddc796d8e98ac000c1c765fd3c
MD5 269b875439641b7b790040572d440f68
BLAKE2b-256 b0876f210896058d4a9ca6a3d60ac2d0ce7c336d053fb5fc2a6faefb064dba93

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 83145eed83a3b590c023cf8dcc3665dec996dd065f9b5e5c04287014b06b3c22
MD5 d514868d59a10229fa1912f44c3a52c9
BLAKE2b-256 f7f5888c0c367215b86d2e9751e7e726a26ea079b0bc9cd1662c4b51021bf398

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: tqdb-0.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 837.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for tqdb-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ee92b8aa09e58fc01a709572514bf3c794226e0337136bbcaabc8146972c6a95
MD5 85b0b5826a2dc170597979ea715e903f
BLAKE2b-256 00ad41105929667765b6532aed1921332b77d41c7d68c9784b2e55909ce46622

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 68ad28bdae38d4b68e002a3a09714516d3106936c283f11d9fe44382941189b7
MD5 b9732bc09736d2bd7577d2e21c8d967f
BLAKE2b-256 462a7f03253ffd0d424662f3b450e3608e5e323518530c0c1e7b548908863663

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 177d7aff006a4c9b64bae8f2fc457e6280a144cdafe8d2461dcc8b954d0a76a8
MD5 47bae68fdaa62b5102cd3ba47f09865f
BLAKE2b-256 4d32166c9bb3aa4aaa80d764155b54b164061b93ab040339d71d52d0cfe6ffbe

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a2ffd5e8264340fee7620657911f29271f91849ab1b75fd440e60e755a100808
MD5 d4c1da0db1e66d500c98ee03c458d6d5
BLAKE2b-256 d58e7a111978990304353e77444f4704e6dee7989368b88969f7c06ef2121ce4

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1070f5de61f9e4ea5c86baec17fc6cc390174ce60ad32b744a41154913a101a6
MD5 a127380e8009ec2cf5acea1aa227a671
BLAKE2b-256 6fe2786f8df38a63e35510f144bbdecca52a4d8c4c1fbe914985d60acd75cce3

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: tqdb-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 837.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for tqdb-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8d742f950e851550ee5ad64eb63fb2d4788b0cd2e8837d91b5fdb54e65bb4450
MD5 d24d7b9412d42924e12d43e1b1812222
BLAKE2b-256 b41c58501e31af7b8e9e7b46409c6e28c206bf1a35ef551fb0a98b5cf5c0ad66

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bd1767edc5dbfef8e1576583b66daecb410ba8f50649005bc83bc41683e60dac
MD5 29bd7d718d4a7e8936eb26927d063b8e
BLAKE2b-256 11b9bf9ff56aceefd30c828df7e8eabe65ce7edc34c6357ea38c07a7b01550e9

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d7c1c1ce8f6914e0074d646e620caec3bdcccfd5d6bbd6c91f173fc60b769221
MD5 fa4340feb56c849695c28d32882de682
BLAKE2b-256 d6b2acb16407e4233393bf5ca5cff73a05c72808a30db6f9cb75f7512cae7609

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dc994e74b6d2601efccf5bfb31c0337f0a0e91643c26b44ddd4dc6d24d54aa85
MD5 5710ce08bd6d8cd78e8442582fd775ec
BLAKE2b-256 c0f95388ca2054359ffcd884b759ddc7df16a21c3af9bee4372a9472b5f4881b

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 03a1197b74222cee9a9ef98c8803596ac88b99f868ed781284ce68c1d3d1f71f
MD5 3ba30ab3cfb5e74f68d44ae673a74261
BLAKE2b-256 a0e517e85e042d5aea01775ca3aecbebd837950e292bcfeac095c2063c2b5d57

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: tqdb-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 839.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for tqdb-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f713fbd560b43fbda3301026b500146c68ab40a1895d963b8c3e0dfeddfdbcfd
MD5 f0b38ea87b7ee9fa7d2265eee4aab1a3
BLAKE2b-256 77432993e052521fa0a2e56b576560ca802bd9e97e6d05ff15c93784a4808513

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b10c3ca35d1923285234affb15f8b313b6f4def5de9894073865d63b2bea1374
MD5 368a094bbb54b63315d361ace5f1a5b5
BLAKE2b-256 57913e09df6f94a4c4e28eef4dec09b976190a7bfd8ef2bf364b30c3b578f099

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d0e14df918296cf8843622336db17860607da622dd97f9b1da4957c911546db2
MD5 956dce7943c57c05f406f248062c217b
BLAKE2b-256 43eff09527ad52de628ab99fa2bd4f9a9dcbc234ab5f663313f202bfc483830e

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eed990e0abc7afe8fc1fedc2d4c5a80ecdfc431558dbabe4dc12f7e48ebac298
MD5 7d3d05b2db27da7529986f4ce08720ff
BLAKE2b-256 e14b637b127ee2a9c266b5ef532b8af473bc8eca8551e8b7864fb3d3c99c9e06

See more details on using hashes here.

File details

Details for the file tqdb-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tqdb-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7ed9b9dd1e8349f6ca57f53a4a7ce5777746f29595ca35be463841fad2fa445f
MD5 b4a9284a0a652b081a17e4da6896836d
BLAKE2b-256 80771654266734e1929d993b7999b8b00ebf89e2f983864b84a5876feb1a3a1e

See more details on using hashes here.

Supported by

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