A Python feature store library for offline/online feature storage, registry, validation, and serving
Project description
KiteFS
KiteFS is a Python feature store library for machine learning. It manages the full lifecycle of ML features — defining feature groups as Python code, registering them in a versioned registry, storing historical data as Parquet, retrieving point-in-time-correct training datasets, and serving the latest values for real-time predictions.
KiteFS is library-first: no running server, no Docker, no infrastructure to manage. Install it, define your features, and start building.
Alpha: KiteFS is in early development (
0.3.0a0). APIs may change between releases.
Features
- Define feature groups as Python code with typed features and validation rules.
- Compile definitions into a versioned, deterministic registry.
- Store historical feature rows as Hive-partitioned Parquet (offline store).
- Retrieve point-in-time-correct training datasets, with optional point-in-time joins.
- Materialize and serve the latest value per entity for real-time inference (online store).
- Run locally (Parquet + SQLite) or on AWS (S3 + DynamoDB).
Installation
KiteFS is currently a pre-release, so you must opt in to alpha versions.
pip install --pre kitefs
With uv:
uv add --prerelease=allow kitefs
For the AWS backend (S3 + DynamoDB):
pip install --pre "kitefs[aws]"
Once a stable release is published, pip install kitefs (or uv add kitefs) will work without the pre-release flag.
Requires Python 3.12+.
Quick start
Scaffold a project:
kitefs init
Define a feature group (e.g. feature_store/definitions/town_market_features.py):
from kitefs import (
EntityKey,
EventTimestamp,
Expect,
Feature,
FeatureGroup,
FeatureType,
StorageTarget,
ValidationMode,
)
town_market_features = FeatureGroup(
name="town_market_features",
storage_target=StorageTarget.OFFLINE_AND_ONLINE,
entity_key=EntityKey(name="town_id", dtype=FeatureType.INTEGER),
event_timestamp=EventTimestamp(name="event_timestamp"),
features=[
Feature(
name="avg_price_per_sqm",
dtype=FeatureType.FLOAT,
expect=Expect().not_null().gt(0),
),
],
ingestion_validation=ValidationMode.ERROR,
)
Compile definitions into the registry:
kitefs apply
Ingest data, build a training dataset, and serve the latest values from the SDK:
from kitefs import FeatureStore
store = FeatureStore()
# Append validated rows to the offline store (DataFrame, .csv, or .parquet).
store.ingest("town_market_features", "town_market_2025.csv")
# Retrieve a point-in-time-correct training dataset.
training_df = store.get_historical_features(
from_="town_market_features",
select=["avg_price_per_sqm"],
)
# Populate the online store with the latest value per entity.
store.materialize("town_market_features")
# Serve the latest features for one entity.
features = store.get_online_features(
from_="town_market_features",
select=["avg_price_per_sqm"],
where={"town_id": {"eq": 1}},
)
CLI
| Command | Description |
|---|---|
kitefs init |
Scaffold a new producer project. |
kitefs init-config |
Create a consumer-only configuration. |
kitefs apply |
Compile feature definitions into the registry. |
kitefs list |
List registered feature groups. |
kitefs describe <name> |
Show full details for a feature group. |
kitefs ingest <group> <path> |
Append validated rows to the offline store. |
kitefs materialize [group] |
Populate the online store from the latest offline rows. |
Documentation
License
Apache-2.0.
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 Distribution
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 kitefs-0.3.0a0.tar.gz.
File metadata
- Download URL: kitefs-0.3.0a0.tar.gz
- Upload date:
- Size: 56.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3b51822d23f994fd835ac23cf1cfd83039e93d407270a6316b8e1271f1d07ba
|
|
| MD5 |
bf3ff31c266a4a280e5469380eaa9a40
|
|
| BLAKE2b-256 |
75df60f384f70660d52236f1729d852bf706526273525ac831c51318ad2a5993
|
File details
Details for the file kitefs-0.3.0a0-py3-none-any.whl.
File metadata
- Download URL: kitefs-0.3.0a0-py3-none-any.whl
- Upload date:
- Size: 73.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b1e96640885a35c08d0b6621965c3d08a993f75656bd4e888dca83a2b9095b5
|
|
| MD5 |
e8c4e8ad69ec2ea071678671e7a6437a
|
|
| BLAKE2b-256 |
ca5b3d550080cb7583c0d8d18016b8bd7540de784b5b6b6fac3bf7ec9b4df736
|