The Open Source Feature Store for AI/ML
# Feast - Agent Instructions
This file provides instructions for AI coding agents (GitHub Copilot, Claude Code, OpenAI Codex, etc.) working in this repository.
## Project Overview
Feast is an open source feature store for machine learning that helps ML platform teams manage features consistently for training and serving.
Feast (Feature Store) is a Python-based project that provides:
- **Offline Store**: Process historical data for batch scoring or model training
- **Online Store**: Power real-time predictions with low-latency features
- **Feature Server**: Serve pre-computed features online
- **Point-in-time correctness**: Prevent data leakage during model training
- **Data infrastructure abstraction**: Decouple ML from data infrastructure
## Development Commands
### Setup
```bash
make install-python-dependencies-dev
make install-python-dependencies-minimal
```
### Code Quality
```bash
# Format Python code (entire codebase)
make format-python
# Lint Python code (entire codebase)
make lint-python
# Full type check (entire codebase)
uv run bash -c "cd sdk/python && mypy feast"
# Full type check including tests
make mypy-full
```
#### Single-file lint and type-check
When working on a specific file, run checks scoped to that file to get fast feedback:
```bash
uv run ruff check sdk/python/feast/path/to/file.py # lint
uv run ruff check --fix sdk/python/feast/path/to/file.py # lint + auto-fix
uv run ruff format sdk/python/feast/path/to/file.py # format
uv run bash -c "cd sdk/python && mypy feast/path/to/file.py" # type-check
```
### Testing
```bash
make test-python-unit # unit tests
make test-python-integration-local # integration tests (local)
make test-python-integration # integration tests (CI)
make test-python-universal # all Python tests
```
### Protobuf Compilation
```bash
make compile-protos-python # Python protobufs
make protos # all protos
```
### Go Development
```bash
make build-go && make test-go && make format-go && make lint-go
```
## Key Technologies
- **Languages**: Python (primary), Go
- **Dependencies**: pandas, pyarrow, SQLAlchemy, FastAPI, protobuf
- **Data Sources**: BigQuery, Snowflake, Redshift, Parquet, Postgres, Spark
- **Online Stores**: Redis, DynamoDB, Bigtable, Snowflake, SQLite, Postgres
- **Offline Stores**: BigQuery, Snowflake, Redshift, Spark, Dask, DuckDB
- **Cloud Providers**: AWS, GCP, Azure
## Agent Skills
The `skills/` directory contains tool-agnostic skills (compatible with Claude Code, OpenAI Codex, and other agent tools):
| Skill | Path | Use when⦠|
|---|---|---|
| **feast-user-guide** | `skills/feast-user-guide/SKILL.md` | Working with Feast as a user: defining features, retrieval, CLI, RAG |
| **feast-dev** | `skills/feast-dev/SKILL.md` | Contributing to Feast: setup, tests, Docker, docs, PR workflow |
| **feast-architecture** | `skills/feast-architecture/SKILL.md` | Understanding how each component works: registry, materialization, feature server, data flows |
| **feast-testing** | `skills/feast-testing/SKILL.md` | Writing tests, running targeted tests, debugging registry/online store issues |
Reference docs: `skills/references/` β feature definitions, configuration, retrieval & RAG.
Architecture & design intent: `docs/getting-started/architecture/` (overview, write patterns, RBAC), `docs/getting-started/components/` (per-component pages), `docs/adr/` (design decisions).
## Code Style
- Use type hints on all Python function signatures
- Follow existing patterns in the module you are modifying
- PR titles must follow conventional commit conventions with a lowercase type and a capitalized subject after the colon: `feat: Add ...`, `fix: Correct ...`, `ci: Update ...`, `chore: Refresh ...`, `docs: Add ...`
- Sign off commits with `git commit -s` (DCO requirement)
- Uses `ruff` for Python linting and formatting; Go uses standard `gofmt`
- Recompile protos after making changes to `.proto` files (`make protos`)
- Changes to core functionality may require updates across both Python and Go SDKs
## Documentation and Blog Posts
- **Blog posts must be placed in `/infra/website/docs/blog/`** β do NOT create blog posts under `docs/blog/` or any other location.
- Blog post files must include YAML frontmatter with `title`, `description`, `date`, and `authors` fields, following the format of existing posts in that directory.
- All other reference documentation goes under `docs/`.
## Contributing
1. Follow the [contribution guide](docs/project/contributing.md)
2. Set up your development environment
3. Run relevant tests before submitting PRs
4. Ensure code passes linting and type checking