docs/reference/feature-store-yaml.md
feature_store.yaml is a file that is placed at the root of the Feature Repository. This file contains configuration about how the feature store runs. An example feature_store.yaml is shown below:
{% code title="feature_store.yaml" %}
project: loyal_spider
registry: data/registry.db
provider: local
online_store:
type: sqlite
path: data/online_store.db
{% endcode %}
The feature_server block configures the Python Feature Server when it is used
to serve online features and handle /push requests. This section is optional
and only applies when running the Python feature server.
An example configuration:
feature_server:
type: local
metrics: # Prometheus metrics configuration. Also achievable via `feast serve --metrics`.
enabled: true # Enable Prometheus metrics server on port 8000
resource: true # CPU / memory gauges
request: true # endpoint latency histograms & request counters
online_features: true # online feature retrieval counters + store read & ODFV transform timing
push: true # push request counters
materialization: true # materialization counters & duration histograms
freshness: true # per-feature-view freshness gauges
offline_push_batching_enabled: true # Enables batching of offline writes processed by /push. Online writes are unaffected.
offline_push_batching_batch_size: 100 # Maximum number of buffered rows before writing to the offline store.
offline_push_batching_batch_interval_seconds: 5 # Maximum time rows may remain buffered before a forced flush.
The registry field can be a simple path string or an object with additional
configuration. When using the REST registry server, MCP support can be enabled:
registry:
registry_type: sql
path: postgresql+psycopg://feast:feast@localhost:5432/feast #pragma: allowlist secret
mcp:
enabled: true
| Field | Type | Default | Description |
|---|---|---|---|
registry_type | string | file | Registry backend (file, sql, etc.) |
path | string | — | Connection string or file path |
mcp.enabled | bool | false | Enable MCP (Model Context Protocol) on the REST registry server |
When registry.mcp.enabled is true, the REST registry server exposes registry
metadata (entities, feature views, feature services) as MCP tool endpoints for
LLM agents. Requires feast[mcp] to be installed.
The provider field defines the environment in which Feast will execute data flows. As a result, it also determines the default values for other fields.
When using the local provider:
When using the GCP provider:
Permissions
<table> <thead> <tr> <th style="text-align:left"><b>Command</b> </th> <th style="text-align:left">Component</th> <th style="text-align:left">Permissions</th> <th style="text-align:left">Recommended Role</th> </tr> </thead> <tbody> <tr> <td style="text-align:left"><b>Apply</b> </td> <td style="text-align:left">BigQuery (source)</td> <td style="text-align:left"> <p>bigquery.jobs.create</p> <p>bigquery.readsessions.create</p> <p>bigquery.readsessions.getData</p> </td> <td style="text-align:left">roles/bigquery.user</td> </tr> <tr> <td style="text-align:left"><b>Apply</b> </td> <td style="text-align:left">Datastore (destination)</td> <td style="text-align:left"> <p>datastore.entities.allocateIds</p> <p>datastore.entities.create</p> <p>datastore.entities.delete</p> <p>datastore.entities.get</p> <p>datastore.entities.list</p> <p>datastore.entities.update</p> </td> <td style="text-align:left">roles/datastore.owner</td> </tr> <tr> <td style="text-align:left"><b>Materialize</b> </td> <td style="text-align:left">BigQuery (source)</td> <td style="text-align:left">bigquery.jobs.create</td> <td style="text-align:left">roles/bigquery.user</td> </tr> <tr> <td style="text-align:left"><b>Materialize</b> </td> <td style="text-align:left">Datastore (destination)</td> <td style="text-align:left"> <p>datastore.entities.allocateIds</p> <p>datastore.entities.create</p> <p>datastore.entities.delete</p> <p>datastore.entities.get</p> <p>datastore.entities.list</p> <p>datastore.entities.update</p> <p>datastore.databases.get</p> </td> <td style="text-align:left">roles/datastore.owner</td> </tr> <tr> <td style="text-align:left"><b>Get Online Features</b> </td> <td style="text-align:left">Datastore</td> <td style="text-align:left">datastore.entities.get</td> <td style="text-align:left">roles/datastore.user</td> </tr> <tr> <td style="text-align:left"><b>Get Historical Features</b> </td> <td style="text-align:left">BigQuery (source)</td> <td style="text-align:left"> <p>bigquery.datasets.get</p> <p>bigquery.tables.get</p> <p>bigquery.tables.create</p> <p>bigquery.tables.updateData</p> <p>bigquery.tables.update</p> <p>bigquery.tables.delete</p> <p>bigquery.tables.getData</p> </td> <td style="text-align:left">roles/bigquery.dataEditor</td> </tr> </tbody> </table>