pyclink
Embed the clink stream engine in Python. Pure Python over libclink's C ABI (ctypes, no compiled extension): the whole runtime starts inside your process - no daemons, no cluster - and results stream back as Arrow record batches, zero-copy, straight into pyarrow (and from there pandas or polars).
Install
A prebuilt wheel bundles a self-contained libclink (statically linked
Arrow/Parquet) next to the package, so nothing else is needed - no separate
build, no CLINK_LIB:
pip install pyclink-<version>-py3-none-macosx_14_0_arm64.whl
Release tags publish pyclink to PyPI (pip install pyclink) through trusted
publishing, from v0.9.1. The wheels are built by
.github/workflows/wheels.yml:
- macOS arm64 (
macosx_14_0_arm64), without connectors. - Linux x86_64 and aarch64 (
manylinux_2_28), with the Kafka connector. They install on any glibc 2.28 or later distribution (AlmaLinux 8, Debian 10+, Ubuntu 20.04+) and need nothing beyond the C and C++ runtime.
None of the wheels has the object-store filesystems or HTTPS, and the Linux Kafka connector leaves out GSSAPI and the Schema Registry formats; build from source (below) for those, or on a platform without a wheel. There is no Windows wheel.
Build from source
The supported path for local development, editable installs, and platforms without a wheel. Build libclink from the repo root (needs the SQL frontend):
cmake -S . -B build -DCLINK_BUILD_SQL=ON
cmake --build build --target clink_shared --parallel 10
Install pyclink and point it at the library:
pip install ./python # or: pip install -e ./python
export CLINK_LIB=$PWD/build/libclink.dylib # .so on Linux
Run streaming SQL and read Arrow:
import pyclink
with pyclink.Engine() as e:
e.execute("""
CREATE TABLE orders (user_id BIGINT, amount BIGINT)
WITH (connector='file', format='json', path='/tmp/orders.ndjson');
CREATE TABLE results (user_id BIGINT, amount BIGINT)
WITH (connector='collect');
INSERT INTO results SELECT user_id, amount FROM orders
""")
table = e.collect("results").read_all() # pyarrow.Table
e.await_all()
print(table.to_pandas())
Any connector compiled into libclink works as a source or sink (Kafka,
Postgres CDC, Iceberg, S3, ...). connector='collect' is the results
surface: one reader per collect table, reads block until data arrives, the
stream ends when the producing job finishes, and closing the engine wakes a
blocked reader with an error. Collect is append-only in v1 - a retracting
(changelog) query is rejected at bind time.
Engine(...) accepts parallelism, state_backend_uri, checkpoint_dir,
checkpoint_interval_ms, catalog_dir, and lib_path (which beats the
CLINK_LIB environment variable). await_all() polls in slices, so Ctrl-C
cancels the running jobs and drains before re-raising.
See docs/internals/embedded.md in the repo for the semantics underneath and
for how the wheel bundles libclink.
Tests
CLINK_LIB=$PWD/build/libclink.dylib python3 python/tests/test_pyclink.py
(Also runnable under pytest.)
Metadata
Release files for pyclink 0.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyclink-0.9.1-py3-none-manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.28+ x86-64 | Details |
| pyclink-0.9.1-py3-none-manylinux_2_28_aarch64.whl | Python 3 | none | Linux glibc 2.28+ ARM64 | Details |
| pyclink-0.9.1-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details |
Total release size: 41.3 MB
Release files / pyclink-0.9.1-py3-none-manylinux_2_28_x86_64.whl
| Download URL | pyclink-0.9.1-py3-none-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 17.2 MB |
| Tags | Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
b62b93274234416d00f7b1be5d82cfaf6c922d18cf39bc30ed096bfc8a039c2d
|
|
BLAKE2b-256 checksum How to use checksums |
dc897df6d6e7bf644338f7086029882d2d42ff5220002da0df819d8b34d75d57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 29, 2026.
Transparency logRelease files / pyclink-0.9.1-py3-none-manylinux_2_28_aarch64.whl
| Download URL | pyclink-0.9.1-py3-none-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 15.4 MB |
| Tags | Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
5ca304e00f29e578c8d30eeaaef1e7e609a6a06f6a5a5201f75b7112f5f85582
|
|
BLAKE2b-256 checksum How to use checksums |
8b999b4da9b9dd837c0a363f49feecf607eca6b082509e96aff7f69aeb347547
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 29, 2026.
Transparency logRelease files / pyclink-0.9.1-py3-none-macosx_14_0_arm64.whl
| Download URL | pyclink-0.9.1-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 8.8 MB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5df40049e20b1600b63bcc69b78c26a08e85e437bb071a21a0c2b7dc4356490e
|
|
BLAKE2b-256 checksum How to use checksums |
502037fed4080238a214164cd8e629faef4f332321948c84c92af78db60117ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 29, 2026.
Transparency log