qroissant
qroissant is a minimal q/kdb+ IPC client library with first-class support for the Apache Arrow ecosystem.
- Lightweight — qroissant is a minimal library weighing in at less than 4 MiB with no required dependencies.
- Fast — qroissant is written in Rust, a safe and high-performance systems programming language. Moreover, qroissant uses your system resources to the best extent possible by leveraging zero-copy, multithreading, and other vectorization techniques such as SIMD.
- Modular — qroissant relies heavily on the Apache Arrow PyCapsule Interface for communicating with other libraries from the Apache Arrow ecosystem with zero-copy. This includes pyarrow, polars, duckdb, pandas, datafusion, and more.
- Type hints — qroissant provides type annotations for all of its functionality.
Installation
pip install qroissant
Requires Python 3.10+. Wheels are available for Linux (x86_64, aarch64), macOS (universal2), and Windows (x86_64).
Quick start
Connect and query
import qroissant as q
endpoint = q.Endpoint.tcp("localhost", 5000)
with q.Connection(endpoint) as conn:
result = conn.query("select from trade where date = .z.d")
print(result) # Table
To Arrow / Polars / PyArrow
Decoded values implement the Arrow PyCapsule protocol — pass them straight to any Arrow-aware library:
import polars as pl
import pyarrow as pa
with q.Connection(endpoint) as conn:
table = conn.query("select from trade")
# zero-copy — no intermediate Python objects
df = pl.from_arrow(table)
pa_table = pa.RecordBatch.from_batches([pa.record_batch(table)])
Async
import asyncio
import qroissant as q
async def main():
endpoint = q.Endpoint.tcp("localhost", 5000)
async with q.AsyncConnection(endpoint) as conn:
result = await conn.query("1 + 1")
print(result) # Atom → 2
asyncio.run(main())
Connection pool
pool_opts = q.PoolOptions(
max_size=10,
min_idle=2,
checkout_timeout_ms=5_000,
test_on_checkout=True,
)
with q.Pool(endpoint, pool=pool_opts) as pool:
pool.prewarm() # open idle connections eagerly
result = pool.query("count trade") # checked out and returned automatically
print(pool.metrics()) # PoolMetrics(connections=2, idle=2, …)
Streaming raw response
For large results you can stream the raw IPC bytes before decoding:
with q.Connection(endpoint) as conn:
with conn.query("select from trade", raw=True) as resp:
print(resp.header) # MessageHeader(size=…, compression=…)
value = resp.decode() # decode on demand
Standalone encode / decode
# decode an IPC payload you already have
payload: bytes = ...
value = q.decode(payload)
# encode a value back to IPC bytes
frame = q.encode(value, message_type=q.MessageType.SYNCHRONOUS)
Value types
Every conn.query() call returns a Value subclass:
| q type | Python type | Arrow export |
|---|---|---|
| scalar (atom) | Atom |
__arrow_c_array__ |
| typed list | Vector |
__arrow_c_array__ |
| mixed list | List |
__arrow_c_array__ |
| dictionary | Dictionary |
__arrow_c_array__ (StructArray) |
| table | Table |
__arrow_c_stream__ |
Decode options
Control how IPC data is projected into Arrow:
opts = (
q.DecodeOptions.builder()
.with_symbol_interpretation(q.SymbolInterpretation.DICTIONARY) # dict-encode symbols
.with_temporal_nulls(True) # map q null sentinels → None
.with_treat_infinity_as_null(True) # map ±∞ → None
.with_parallel(True) # decode table columns in parallel
.build()
)
with q.Connection(endpoint, options=opts) as conn:
result = conn.query("select from trade")
Endpoints
# TCP
endpoint = q.Endpoint.tcp(
"localhost", 5000,
username="user",
password="pass",
timeout_ms=3_000,
)
# Unix domain socket
endpoint = q.Endpoint.unix(
"/tmp/qroissant.sock",
username="user",
password="pass",
)
Error handling
from qroissant import (
QroissantError, # base class
DecodeError, # malformed IPC payload
ProtocolError, # bad frame header
TransportError, # socket / IO failure
QRuntimeError, # q process returned an error
PoolError, # pool management failure
PoolClosedError, # operation on a closed pool
)
try:
result = conn.query("invalid expression")
except q.QRuntimeError as e:
print(f"q error: {e}")
except q.TransportError as e:
print(f"connection lost: {e}")
Architecture
qroissant is organized as a Rust workspace with strict crate boundaries:
crates/
├── qroissant-core # q protocol, value types, encode/decode
├── qroissant-transport # sync & async TCP/Unix socket connections
├── qroissant-arrow # zero-copy Arrow projection
├── qroissant-kernels # SIMD / nightly-sensitive hot paths
└── qroissant-python # PyO3 bindings (the _native extension module)
The Python package at python/qroissant/ re-exports everything from the compiled _native extension. The .pyi stub files in that directory define the public API contract.
Development
# Install Python dependencies
uv sync --group dev --group docs
# Build the Rust extension (required before running Python tests)
uv run maturin develop
# Run tests
uv run pytest
cargo test --workspace
# Lint and format
uv run ruff check python/ tests/
cargo fmt --all
Transport integration tests require a q binary. Set Q_BIN to the path of your q executable before running pytest.
License
Apache 2.0 — see LICENSE.
Metadata
Release files for qroissant 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| qroissant-0.3.0.tar.gz | 105.0 kB | Details |
Built distributions (wheels)
Total release size: 35.2 MB
Release files / qroissant-0.3.0.tar.gz
| Download URL | qroissant-0.3.0.tar.gz |
|---|---|
| Size | 105.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b2114e634baefb3c851a99e2bba838c1c4f7c7546f4812561df1944b44951251
|
|
BLAKE2b-256 checksum How to use checksums |
a9ecb597cd59ec59c8fd850172cd33f7a6ff7378c4f4c9652d9515d998ca8086
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp311-abi3-win_amd64.whl
| Download URL | qroissant-0.3.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
120343e541658f80f742b3e2021681d3d6f088bfe7ce4dcff6e556909f976214
|
|
BLAKE2b-256 checksum How to use checksums |
5e7514072b312ce60d5255ddca49515665a96c89c29f8d9894b25caf603bbcc6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | qroissant-0.3.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.5 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
8048776963e58083e708d32b5888bd98a56fe142eb994fab9a93f2ac93ce8a06
|
|
BLAKE2b-256 checksum How to use checksums |
5881a7e819c21090f4934d74152b573216e109571690cf395ff4a9e25b3d4bb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp311-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | qroissant-0.3.0-cp311-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c61037fc20092933d9c1dc8f0f07df6c0e8bf618f9d4982aa6fab192131c400a
|
|
BLAKE2b-256 checksum How to use checksums |
794e0179a798f796f92d60d6f8c16847c7b1cb96ac59769dcb36d42cce1c02cf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp310-cp310-win_amd64.whl
| Download URL | qroissant-0.3.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
740683e75ccc392eaa1a717f33ddea1dfb932b2938796bdf1de2a1b2922af8be
|
|
BLAKE2b-256 checksum How to use checksums |
3f06d30de2223cf47d881a85ebbd226210bc2a644f29f044ddb6fb37e6675265
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | qroissant-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
eb005bcdf1dd356146ffcddf3c890e5514576f28159bd724bcfa7d0e90127950
|
|
BLAKE2b-256 checksum How to use checksums |
81f612328733014231121bd351bd768ce8839258f9f18a58f3a15109cf51c28e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | qroissant-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.5 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
ee5fa3730039bb1da79aaeeb4f9b5ea684482409557793b3500d9814dcd2727d
|
|
BLAKE2b-256 checksum How to use checksums |
fa5e4292ca3fb378c3e4ddf25f8372902d75aa2d6217f25bc3bac8a7568941d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | qroissant-0.3.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 6.7 MB |
| Tags | CPython 3.10 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b25f386f452e27b494521cb015506082503e12da623425c28e74f7c2f0e65114
|
|
BLAKE2b-256 checksum How to use checksums |
0e8e4953b91216cc3af66ddbf8a64ace9e45acfa0250decb62571320a7bcf280
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency logRelease files / qroissant-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | qroissant-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.8 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
eb01627af50efdd96acab3022116a5f852eb87c2849869739bb8ee26d3160288
|
|
BLAKE2b-256 checksum How to use checksums |
809dbc3bd0549f3b5051f263b6d5385734b532f0c022da6f2fa2a5928ac585b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 22, 2026.
Transparency log