Feast Development Guide
Environment Setup
# Install development dependencies (uses uv pip sync with pinned requirements)
make install-python-dependencies-dev
# Install minimal dependencies
make install-python-dependencies-minimal
# Install pre-commit hooks (runs formatters and linters on commit)
make install-precommit
Running Tests
Unit Tests
# Run all unit tests
make test-python-unit
# Run a specific test file
python -m pytest sdk/python/tests/unit/test_unit_feature_store.py -v
# Run a specific test by name
python -m pytest sdk/python/tests/unit/test_unit_feature_store.py -k "test_apply" -v
# Run fast unit tests only (no external dependencies)
make test-python-unit-fast
Integration Tests (local)
# Run integration tests in local dev mode
make test-python-integration-local
Linting and Formatting
# Format Python code
make format-python
# Lint Python code
make lint-python
# Run all precommit checks (format + lint)
make precommit-check
# Type checking (entire codebase)
uv run bash -c "cd sdk/python && mypy feast"
# Type-check a single file
uv run bash -c "cd sdk/python && mypy feast/path/to/file.py"
Code Style
- Use type hints on all function signatures
- Use
from __future__ import annotations at the top of new files
- Follow existing patterns in the module you are modifying
- Do not put
pip install commands in docstrings or code comments. Security scanners flag them as runtime
package installs, which fail in air-gapped or mirror-only environments. Name the extra instead
(e.g. "Requires the glide extra (feast[glide]).") and keep install commands in docs/.
- PR titles must follow semantic conventions:
feat:, fix:, ci:, chore:, docs:
- Add a GitHub label to PRs (e.g.
kind/bug, kind/feature, kind/housekeeping)
- Sign off commits with
git commit -s (DCO requirement)
Docker Images
# Build all Docker images
make build-docker
# Build feature server Docker image
make build-feature-server-docker
Documentation
# Build Sphinx documentation
make build-sphinx
# Build templates
make build-templates
# Build Helm docs
make build-helm-docs
Documentation and Blog Posts
- Blog posts must be placed in
/infra/website/docs/blog/ — do NOT place them under docs/blog/ or elsewhere.
- Blog post files must include YAML frontmatter with
title, description, date, and authors fields matching the format of existing posts in that directory.
- All other docs go under
docs/ and must be added to docs/SUMMARY.md (GitBook navigation) or they won't appear on the website.
| Change type | Doc location |
|---|
| New online store | docs/reference/online-stores/<name>.md + update README.md and SUMMARY.md |
| New offline store | docs/reference/offline-stores/<name>.md + update README.md, overview.md, SUMMARY.md |
| New registry backend | docs/reference/registries/<name>.md + update SUMMARY.md |
| Config option | docs/reference/feature-store-yaml.md |
| CLI flag/command | docs/reference/feast-cli-commands.md |
| How-to / integration | docs/how-to-guides/customizing-feast/ or docs/how-to-guides/ + update SUMMARY.md |
| Architecture / concept | docs/getting-started/architecture/ or docs/getting-started/components/ |
Project Structure
sdk/python/feast/ # Main Python SDK
cli/cli.py # CLI entry point (feast apply, feast materialize, etc.)
feature_store.py # FeatureStore class - core orchestration
repo_config.py # feature_store.yaml configuration parsing
repo_operations.py # feast apply / feast teardown logic
infra/ # Online/offline store implementations
online_stores/ # Redis, DynamoDB, SQLite, etc.
offline_stores/ # BigQuery, Snowflake, File, etc.
transformation/ # On-demand and streaming transformations
protos/feast/ # Protobuf definitions
sdk/python/tests/ # Test suite
unit/ # Fast, no external deps
integration/ # Requires infrastructure
Key Abstractions
- FeatureStore (
feature_store.py): Entry point for all operations
- FeatureView: Defines a set of features from a data source
- OnDemandFeatureView: Computed features using request-time transformations
- Entity: Join key definition (e.g. driver_id, customer_id)
- DataSource: Where raw data lives (BigQuery, files, Snowflake, etc.)
- OnlineStore: Low-latency feature serving (Redis, DynamoDB, SQLite)
- OfflineStore: Historical feature retrieval (BigQuery, Snowflake, file)