Beava: real-time feature server with composable streaming pipelines (Python SDK + bundled Rust server binary).
Project description
beava — Python SDK
Python SDK for Beava, the single-binary real-time feature server. Author pipelines with @bv.event / @bv.table decorators; push events and read features against a running beava server over HTTP or TCP.
Install
# pip (recommended) — installs SDK + bundled Rust server binary from PyPI
pip install beava
# brew — Homebrew formula (macOS + Linuxbrew)
brew install beava-dev/beava/beava
# docker — zero deps on the host
docker run -p 8080:8080 -p 8081:8081 beavadev/beava:0.0.1
The wheel ships the SDK and the Rust beava server binary (polars-style); after install, the beava shell command is on PATH and the SDK can run against it directly — including embed mode (bv.App() with no URL). Pin a specific version with pip install beava==0.0.0.
Quickstart
import beava as bv
@bv.event
class Click:
user_id: str
page: str
@bv.table(key="user_id")
def UserActivity(e: Click):
return e.group_by("user_id").agg(
clicks_1h=bv.count(window="1h"),
unique_pages_1h=bv.n_unique("page", window="1h"),
)
app = bv.App(url="http://localhost:8080")
app.register(Click, UserActivity)
app.push("Click", {"user_id": "alice", "page": "/home"})
app.push("Click", {"user_id": "alice", "page": "/products"})
app.get("UserActivity", "alice")
# => {"clicks_1h": 2, "unique_pages_1h": 2}
Transports
The same SDK speaks three transports — pick by the URL you pass to bv.App(...).
# HTTP/JSON (curl-compatible debugging path)
app = bv.App(url="http://localhost:8080")
# Framed TCP (sub-millisecond fast-path; JSON or msgpack content)
app = bv.App(url="tcp://localhost:8081")
# Embed mode (no separate server — auto-spawns a local `beava` binary)
app = bv.App()
Embed mode finds the beava binary that ships with the curl-installed wheel automatically. Override with BEAVA_BINARY=/path/to/beava if you want to point at a different build.
Surface
| Method | Wire | Notes |
|---|---|---|
app.register(*descriptors, force=False, dry_run=False) |
POST /register |
Returns {"registry_version": <n>}. Pass force=True for destructive schema changes; dry_run=True returns a categorized diff without applying. |
app.push(event_name, fields) |
POST /push body {event, data} |
Fire-and-forget. Returns server ack. |
app.get(table, key=None, features=None) |
POST /get body {table, key} |
Returns a flat dict of feature values. key=None routes to the global-aggregation sentinel (ADR-003). features=[...] narrows to a subset. |
app.batch_get(requests) |
POST /batch_get body {requests: [...]} |
requests is a list of (table, key) or (table, key, features) tuples. Returns a list of dicts in input order. |
app.reset() |
POST /reset (test_mode-only) |
Wipes server state. Pass test_mode=True to bv.App(...) to enable. |
app.ping() |
POST /ping |
Liveness; returns {"pong": True, "registry_version": <n>}. |
app.close() |
— | Releases the transport connection. |
Pipeline DSL
@bv.event declares an event schema. Fields are typed Python class attributes; the SDK serializes them to JSON on push.
@bv.table(key=...) declares a feature table. The decorated function takes one event-typed parameter and returns e.group_by(...).agg(...) over it. The runtime maintains the table incrementally — every event updates exactly the affected key's row.
The key= kwarg accepts a string (single-column key) or a list of strings (composite key).
bv.col("name") references an event field inside a where= filter or arithmetic expression. Strings in where= are rejected — pass an _Expr (e.g. bv.col("event_type") == "click").
bv.lit(value) wraps a Python literal so it can participate in the same expression grammar.
Operator catalogue
50+ aggregation primitives are exported flat at the bv.* namespace. Inspect the live surface from Python:
import beava as bv
print([x for x in dir(bv) if not x.startswith("_")])
Selection by family:
- Core —
count,sum,mean,min,max,var,std,n_unique,quantile - Sketch —
top_k,bloom_member,entropy,histogram,hour_of_day_histogram,dow_hour_histogram - Recency —
first,last,first_n,last_n,lag,first_seen,last_seen,age,time_since - Decay —
ewma,ema,ewvar,ew_zscore,decayed_sum,decayed_count - Velocity —
rate_of_change,inter_arrival_stats,burst_count,delta_from_prev,trend,z_score - Buffer / geo —
most_recent_n,reservoir_sample,geo_velocity,geo_distance,geo_spread,distance_from_home
Deprecation aliases retained: avg → mean, variance → var, stddev → std, count_distinct → n_unique, percentile → quantile. Use the canonical form in new code.
Demo data
bv.demo exposes three pre-built pipelines + dataset loaders for trying the SDK without writing your own pipeline:
import beava as bv
adtech = bv.demo.adtech() # ad-impression / click / conversion
fraud = bv.demo.fraud() # transaction fraud
ecommerce = bv.demo.ecommerce() # cart / view / purchase
Each returns a tuple of (events, tables, dataset) ready to register and push.
Errors
Top-level error types: bv.RegistrationError (raised on register failures with structured code + message), bv.ValidationError (raised by client-side input validators), bv.BinaryNotFoundError (raised in embed mode if the beava binary isn't on PATH).
Learn more
- beava.dev — site, guide, docs
- Root README — server install, wire surface, server CLI
- Discord — questions and feedback
Project details
Release history Release notifications | RSS feed
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 beava-0.0.3.tar.gz.
File metadata
- Download URL: beava-0.0.3.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1746a14dc4818dcc6488965daf42706f46ad3fd523546b1a8ca3938fe349cdd
|
|
| MD5 |
c446fb3ae5058327f4cc72fdeb19eb54
|
|
| BLAKE2b-256 |
9cde77626dc515df42d65ee38764512f837f0322264c7ed011c639eea3081006
|
Provenance
The following attestation bundles were made for beava-0.0.3.tar.gz:
Publisher:
release-wheels.yml on beava-dev/beava
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beava-0.0.3.tar.gz -
Subject digest:
c1746a14dc4818dcc6488965daf42706f46ad3fd523546b1a8ca3938fe349cdd - Sigstore transparency entry: 1520906256
- Sigstore integration time:
-
Permalink:
beava-dev/beava@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/beava-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-wheels.yml@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Trigger Event:
push
-
Statement type:
File details
Details for the file beava-0.0.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: beava-0.0.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.7 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9455c52127ce0d2831ef205402ca5f489ff6d175b744b423225c81aa99e69e81
|
|
| MD5 |
92bc50a2a6a585e79f15c67e628eb939
|
|
| BLAKE2b-256 |
c15ed054a9e1a46e4b3b9a7b780f25ed6fe22009ceeb3f902cb35684abe937dd
|
Provenance
The following attestation bundles were made for beava-0.0.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release-wheels.yml on beava-dev/beava
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beava-0.0.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
9455c52127ce0d2831ef205402ca5f489ff6d175b744b423225c81aa99e69e81 - Sigstore transparency entry: 1520906323
- Sigstore integration time:
-
Permalink:
beava-dev/beava@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/beava-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-wheels.yml@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Trigger Event:
push
-
Statement type:
File details
Details for the file beava-0.0.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: beava-0.0.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.5 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4b1446d353daa671eabc5df66581f2348c066b7fa9bbb4b6c44bf63e0f391fe
|
|
| MD5 |
4f6b7d0431c2e52bac6f257363872b6a
|
|
| BLAKE2b-256 |
1929bfcf2583d49a20afc963c3b70d1d15180b0953dfaa07349d208c53cbd7df
|
Provenance
The following attestation bundles were made for beava-0.0.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release-wheels.yml on beava-dev/beava
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beava-0.0.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
a4b1446d353daa671eabc5df66581f2348c066b7fa9bbb4b6c44bf63e0f391fe - Sigstore transparency entry: 1520906292
- Sigstore integration time:
-
Permalink:
beava-dev/beava@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/beava-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-wheels.yml@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Trigger Event:
push
-
Statement type:
File details
Details for the file beava-0.0.3-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: beava-0.0.3-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.4 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f9b7162252ad0944243072481a10b3879635f96117dfee66d04117456436893
|
|
| MD5 |
5c8e73bb74cf8891bd57d2a9914ca6fd
|
|
| BLAKE2b-256 |
77f7f8f5660a29e19d38e46d733812e45366c7b19aefe0b6b19498923ab4ec7e
|
Provenance
The following attestation bundles were made for beava-0.0.3-py3-none-macosx_11_0_arm64.whl:
Publisher:
release-wheels.yml on beava-dev/beava
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beava-0.0.3-py3-none-macosx_11_0_arm64.whl -
Subject digest:
7f9b7162252ad0944243072481a10b3879635f96117dfee66d04117456436893 - Sigstore transparency entry: 1520906279
- Sigstore integration time:
-
Permalink:
beava-dev/beava@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/beava-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-wheels.yml@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Trigger Event:
push
-
Statement type:
File details
Details for the file beava-0.0.3-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: beava-0.0.3-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 2.6 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17b0b319fd6b6e6f9ba4d6c6e6d00349f135e51ddac085730faddaa972b7bda7
|
|
| MD5 |
d3c168862fd284fe2515555f24e6af16
|
|
| BLAKE2b-256 |
c6955ccd2d1c0aa52a1eeb676ab9df735ee1a3e24fb67865fd44ce92fdb04571
|
Provenance
The following attestation bundles were made for beava-0.0.3-py3-none-macosx_10_12_x86_64.whl:
Publisher:
release-wheels.yml on beava-dev/beava
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beava-0.0.3-py3-none-macosx_10_12_x86_64.whl -
Subject digest:
17b0b319fd6b6e6f9ba4d6c6e6d00349f135e51ddac085730faddaa972b7bda7 - Sigstore transparency entry: 1520906303
- Sigstore integration time:
-
Permalink:
beava-dev/beava@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Branch / Tag:
refs/tags/v0.0.3 - Owner: https://github.com/beava-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-wheels.yml@c31e79720bddf8d692e35aa2d28e6f9ef341b4ee -
Trigger Event:
push
-
Statement type: