feast-dev/feast/feast-architecture
- community
Checking that the SKILL.md file is still in the repository.
Internals of the Feast codebase — how each component works, where the key abstractions live, and the data flow through the system. Use when asked how feast apply works, how the registry stores data, how materialization moves data, how get_online_features retrieves features, how the feature server works, how the Kubernetes operator manages deployments, or when navigating the codebase to understand where to make a change.
Install
npx vskill@latest install feast-dev/feast/feast-architectureSKILL.md
Feast Architecture Internals
Full Component Map
Python SDK Core
FeatureStore — the orchestrator
File: sdk/python/feast/feature_store.py
FeatureStore is the single entry point for all operations. It never reads/writes data directly — it delegates to the registry (for metadata) and the provider (for infrastructure and data movement).
File: sdk/python/feast/repo_config.py — parses feature_store.yaml into typed RepoConfig. All component classes (online store, offline store, registry) are loaded dynamically from the type: string via repo_config.ONLINE_STORE_TYPE_MAP / OFFLINE_STORE_TYPE_MAP.
Registry
Purpose: Metadata store — persists definitions of entities, feature views, data sources, feature services, permissions.
Backends and their files:
| Backend | File | Notes | |
|---|---|---|---|
| File/GCS/S3 (default) | infra/registry/registry.py | Single proto blob, cached in memory | |
| SQL | infra/registry/sql.py | Per-object tables via SQLAlchemy | |
| Snowflake | infra/registry/snowflake.py | Snowflake tables | |
| Remote | infra/registry/remote.py | Delegates to a remote registry server over gRPC |
How the proto/file backend works:
- All metadata is serialized into one
Registryprotobuf (protos/feast/core/Registry.proto) - The proto blob is stored at the configured
registry:path - In-memory
cached_registry_protois refreshed on a TTL (default 10s) - Writes re-serialize and overwrite the full blob — no partial updates
Key pattern — apply:
How the SQL backend works:
- Per-object tables, each storing that object's serialized proto in a binary column.
- Binary proto columns must use `ProtoBytes`, not `LargeBinary` directly (defined at the top of
infra/registry/sql.py).ProtoBytesemitsLONGBLOBon MySQL and MariaDB and falls back toLargeBinary's default on every other dialect (BLOBon SQLite,BYTEAon PostgreSQL). PlainLargeBinarymaps to MySQLBLOB(64 KB cap), which silently truncates large protos (e.g. aFeatureView) and later fails to deserialize. Any new serialized-proto/blob-metadata column reintroduces that bug if it usesLargeBinary. - All tables are declared on the module-level
metadataobject insql.py(the source of truth).metadata.create_allonly creates missing tables — it never widens existing columns, so schema changes to existing registries require a manual migration (seedocs/reference/registries/sql.md). On MySQL/MariaDB,SqlRegistry._warn_if_narrow_blob_columnslogs an error at startup for any registry proto column still typed as the narrowBLOB— a new column is covered automatically as long as it's typedProtoBytes(the diagnostic selects columns bycolumn.type is ProtoBytes); a column typed as plainLargeBinarywould be silently missed.
Supporting files:
infra/registry/base_registry.py— abstract interfaceinfra/registry/proto_registry_utils.py— proto serialization helpersinfra/registry/caching_registry.py— adds TTL caching on top of any backend
Provider
Purpose: Infrastructure lifecycle — creates/updates/tears down online store tables. Also dispatches online_write_batch and get_historical_features.
File: sdk/python/feast/infra/provider.py
Built-in providers (set via provider: in feature_store.yaml):
local— SQLite online store, file offline (dev default)gcp— Datastore/Bigtable online, BigQuery offlineaws— DynamoDB online, Redshift offline
Custom providers extend Provider and override update_infra / teardown_infra.
Online Store
Purpose: Low-latency feature serving. Stores the latest feature values per entity key.
Interface: sdk/python/feast/infra/online_stores/online_store.py Implementations: sdk/python/feast/infra/online_stores/ (redis, dynamodb, sqlite, bigtable, postgres, snowflake, …)
Key methods:
online_write_batch— write entity→feature valuesonline_read— read by entity keysupdate— provision/deprovision tables onfeast applyteardown— clean up onfeast teardown
Offline Store
Purpose: Historical feature retrieval and training data generation (point-in-time joins).
Interface: sdk/python/feast/infra/offline_stores/offline_store.py Implementations: sdk/python/feast/infra/offline_stores/ (bigquery, snowflake, redshift, duckdb, file, …)
Returns a RetrievalJob (lazy) — no data moves until .to_df() or .to_arrow() is called.
PIT join logic (shared): sdk/python/feast/infra/offline_stores/offline_utils.py
Key methods to implement for a new backend:
Config class: subclass FeastConfigBaseModel with a type Literal (short alias + full dotted path). Register in OFFLINE_STORE_TYPE_MAP in sdk/python/feast/repo_config.py.
Data source: each offline store backend pairs with a DataSource subclass (e.g. BigQuerySource, FileSource). Add it to sdk/python/feast/data_sources/ and register in DATA_SOURCE_CLASS_FOR_TYPE.
Data Flows
feast apply
feast materialize
get_online_features
get_historical_features
Feature Servers
Python Feature Server (FastAPI)
File: sdk/python/feast/feature_server.py
A FastAPI app that wraps FeatureStore. Started with feast serve.
Endpoints:
POST /get-online-features— online feature retrievalPOST /push— push features to online/offline storePOST /materialize— trigger materializationGET /health— health check
The app loads feature_store.yaml at startup, creates a FeatureStore, and periodically refreshes the registry in the background (async timer).
Go Feature Server
Directory: go/ Entry point: go/main.go
A high-performance alternative to the Python feature server, written in Go. Supports HTTP, HTTPS, and gRPC transports:
Key packages:
go/internal/feast/— Go port of FeatureStore (reads feature_store.yaml, calls online store)go/internal/feast/server/— HTTP and gRPC server implementationsgo/internal/feast/server/logging/— feature logging to offline store
The Go server reads the registry directly (proto file or remote) and calls the online store. It does not support feast apply or materialization — those remain Python-only.
Feast Operator (Kubernetes)
Directory: infra/feast-operator/ Language: Go (controller-runtime / kubebuilder)
The operator manages the full lifecycle of a Feast deployment on Kubernetes via a FeatureStore Custom Resource Definition (CRD).
CRD: FeatureStore
API version: feast.dev/v1 File: infra/feast-operator/api/v1/featurestore_types.go
What the operator manages
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/feast-architecture/SKILL.md
Popularity
- Repository stars
- 7,128
- Repository forks
- 1,360
- 7-day trend score
- 44
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/feast-dev/feast/feast-architecture)