Skip to main content

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


Download files

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

Source Distribution

kitefs-0.3.0a0.tar.gz (56.7 kB view details)

Uploaded Source

Built Distribution

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

kitefs-0.3.0a0-py3-none-any.whl (73.6 kB view details)

Uploaded Python 3

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

Hashes for kitefs-0.3.0a0.tar.gz
Algorithm Hash digest
SHA256 b3b51822d23f994fd835ac23cf1cfd83039e93d407270a6316b8e1271f1d07ba
MD5 bf3ff31c266a4a280e5469380eaa9a40
BLAKE2b-256 75df60f384f70660d52236f1729d852bf706526273525ac831c51318ad2a5993

See more details on using hashes here.

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

Hashes for kitefs-0.3.0a0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b1e96640885a35c08d0b6621965c3d08a993f75656bd4e888dca83a2b9095b5
MD5 e8c4e8ad69ec2ea071678671e7a6437a
BLAKE2b-256 ca5b3d550080cb7583c0d8d18016b8bd7540de784b5b6b6fac3bf7ec9b4df736

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