The Feast CLI comes bundled with the Feast Python package. It is immediately available after installing Feast.
Usage: feast [OPTIONS] COMMAND [ARGS]...
Feast CLI
For more information, see our public docs at https://docs.feast.dev/
Options:
-c, --chdir TEXT Switch to a different feature repository directory before
executing the given subcommand.
--help Show this message and exit.
Commands:
apply Create or update a feature store deployment
configuration Display Feast configuration
delete Delete a Feast object from the registry
demo-notebooks Generate demo Jupyter notebooks for the project
entities Access entities
feature-views Access feature views
init Create a new Feast repository
materialize Run a (non-incremental) materialization job to...
materialize-incremental Run an incremental materialization job to ingest...
permissions Access permissions
registry Manage the feature registry
registry-dump Print contents of the metadata registry
teardown Tear down deployed feature store infrastructure
version Display Feast SDK version
The Feast CLI provides the following global options. Place them before the subcommand.
chdir (-c, --chdir)
This command allows users to run Feast CLI commands in a different folder from the current working directory.
feast -c path/to/my/feature/repo apply
The repository directory can also be set with the FEATURE_REPO_DIR_ENV_VAR environment variable. An explicit --chdir option takes precedence.
feature-store-yaml (-f, --feature-store-yaml)
Use a specific YAML configuration file instead of the default feature_store.yaml in the feature repository. Pass the path to the file, not its containing directory.
feast -c path/to/my/feature/repo -f path/to/config/production.yaml configuration
An explicit relative --feature-store-yaml path is resolved from the current working directory, independently of --chdir. The FEAST_FS_YAML_FILE_PATH environment variable provides a fallback configuration file path when --feature-store-yaml is omitted.
log-level (--log-level)
Set the logging level to DEBUG, INFO, WARNING, ERROR, or CRITICAL (case-insensitive). The default is warning.
feast --log-level info -c path/to/my/feature/repo apply
Creates or updates a feature store deployment
feast applyOptions:
--skip-source-validation: Skip validation of data sources (don't check if tables exist)--skip-feature-view-validation: Skip validation of feature views. Use with caution as this skips important checks
# Skip only data source validation
feast apply --skip-source-validation
# Skip only feature view validation
feast apply --skip-feature-view-validation
# Skip both validations
feast apply --skip-source-validation --skip-feature-view-validationWhat does Feast apply do?
- Feast will scan Python files in your feature repository and find all Feast object definitions, such as feature views, entities, and data sources.
- Feast will validate your feature definitions (e.g. for uniqueness of features). This validation can be skipped using the
--skip-feature-view-validationflag if the type/validation system is being overly strict. - Feast will sync the metadata about Feast objects to the registry. If a registry does not exist, then it will be instantiated. The standard registry is a simple protobuf binary file that is stored on disk (locally or in an object store).
- Feast CLI will create all necessary feature store infrastructure. The exact infrastructure that is deployed or configured depends on the
providerconfiguration that you have set infeature_store.yaml. For example, settinglocalas your provider will result in asqliteonline store being created.
{% hint style="info" %}
The --skip-feature-view-validation flag is particularly useful for On-Demand Feature Views (ODFVs) with complex transformations that may fail validation. However, use it with caution and please report any validation issues to the Feast team on GitHub.
{% endhint %}
{% hint style="warning" %}
feast apply (when configured to use cloud provider like gcp or aws) will create cloud infrastructure. This may incur costs.
{% endhint %}
{% hint style="info" %}
Important: feast apply only registers or updates objects found in your Python files. It does not delete objects that you've removed from your code. To delete objects from the registry, you must use the feast delete command or explicit delete methods in the Python SDK. See the Delete command below and the Registry documentation for details.
{% endhint %}
Display the repository configuration as YAML, including defaults populated when the configuration is loaded. The output is not an exhaustive list of effective defaults: fields that have not been set are omitted. For example, entity_key_serialization_version can be absent from the output when it is omitted from feature_store.yaml, even though Feast uses its default value of 3.
feast configurationFor a repository that explicitly configures the following values, an excerpt of the output looks like:
project: foo
registry: data/registry.db
provider: local
online_store:
type: sqlite
path: data/online_store.db
offline_store:
type: dask
entity_key_serialization_version: 3
auth:
type: no_authDelete a Feast object from the registry by its name.
feast delete <OBJECT_NAME>What does feast delete do?
The feast delete command removes a Feast object (such as a feature view, entity, data source, feature service, etc.) from the registry. The command will:
- Search for the object by name across all object types (entities, feature views, feature services, data sources, saved datasets, validation references, etc.)
- Delete the first matching object found
- Remove any associated infrastructure
Example:
# Delete a feature view named "driver_hourly_stats"
feast delete driver_hourly_stats
# Delete an entity named "driver"
feast delete driver{% hint style="warning" %} The delete operation is permanent and will remove the object from the registry. Make sure you want to delete the object before running this command. {% endhint %}
{% hint style="info" %}
If multiple objects have the same name across different types, feast delete will delete the first one it finds. For programmatic deletion with more control, use the Python SDK methods like store.delete_feature_view(), store.delete_feature_service(), etc.
{% endhint %}
Generate tailored demo Jupyter notebooks for each Feast project found in the current directory.
feast demo-notebooksThe command searches for feature_store.yaml in the current directory and every file inside the feast-config/ directory. Each file is treated as a separate project config, and notebooks are created under ./feast-demo-notebooks/<project>/.
The generated notebooks adapt to your project configuration (online/offline store types, authentication, vector search) and cover:
- Feature store overview — explore registered entities, feature views, and services.
- Historical feature retrieval — build training datasets with point-in-time correct joins.
- Online feature serving — materialize features and retrieve them at low latency.
Options:
-o, --output-dir— Directory where the notebooks are written. Default:./feast-demo-notebooks.--overwrite— Overwrite existing notebooks if the output directory already exists.
feast demo-notebooks -o ./my-notebooks --overwriteYou can also use the --chdir global option to point at a different feature repository:
feast -c /path/to/feature_repo demo-notebooksThe same functionality is available via the Python SDK:
from feast import copy_demo_notebooks
copy_demo_notebooks(output_dir="./feast-demo-notebooks", repo_path=".")For more details see the Demo Notebooks tutorial.
List all registered entities
feast entities list
Options:
--tags TEXT Filter by tags (e.g. --tags 'key:value' --tags 'key:value,
key:value, ...'). Items return when ALL tags match.
NAME DESCRIPTION TYPE
driver_id driver id ValueType.INT64
List all registered feature views
feast feature-views list
Options:
--tags TEXT Filter by tags (e.g. --tags 'key:value' --tags 'key:value,
key:value, ...'). Items return when ALL tags match.
NAME ENTITIES TYPE
driver_hourly_stats {'driver'} FeatureView
List version history for a feature view
feast feature-views list-versions FEATURE_VIEW_NAME
VERSION TYPE CREATED VERSION_ID
v0 feature_view 2024-01-15 10:30:00 a1b2c3d4-...
v1 feature_view 2024-01-16 14:22:00 e5f6g7h8-...
Creates a new feature repository
feast init my_repo_name
Creating a new Feast repository in /projects/my_repo_name.
.
├── data
│ └── driver_stats.parquet
├── example.py
└── feature_store.yaml
It's also possible to use other templates
feast init -t gcp my_feature_repo
or to set the name of the new project
feast init -t gcp my_feature_repo
Load data from feature views into the online store.
With timestamps:
feast materialize 2020-01-01T00:00:00 2022-01-01T00:00:00Without timestamps (materializes all available data):
feast materialize --disable-event-timestampLoad data for specific feature views:
feast materialize -v driver_hourly_stats 2020-01-01T00:00:00 2022-01-01T00:00:00
feast materialize --disable-event-timestamp -v driver_hourly_stats
The --disable-event-timestamp flag lets you materialize all available data (from 1970-01-01 up to the current UTC time) without specifying start and end timestamps. Rows keep the event timestamps from the source.
Materializing 1 feature views from 2020-01-01 to 2022-01-01
driver_hourly_stats:
100%|██████████████████████████| 5/5 [00:00<00:00, 5949.37it/s]
For regular (non-on-demand) feature views, load data into the online store beginning from each feature view's most recent materialization end date.
For a regular feature view with no previous materialization, the start date is the current time minus its ttl. A zero TTL uses a lookback of 52 weeks; a feature view with no TTL must first be materialized with feast materialize to establish a start date. The initial lookback is relative to the current time, rather than the supplied end timestamp.
feast materialize-incremental 2022-01-01T00:00:00
List all registered permission
feast permissions list
Options:
--tags TEXT Filter by tags (e.g. --tags 'key:value' --tags 'key:value,
key:value, ...'). Items return when ALL tags match.
-v, --verbose Print the resources matching each configured permission
+-----------------------+-------------+-----------------------+-----------+----------------+-------------------------+
| NAME | TYPES | NAME_PATTERNS | ACTIONS | ROLES | REQUIRED_TAGS |
+=======================+=============+=======================+===========+================+================+========+
| reader_permission1234 | FeatureView | transformed_conv_rate | DESCRIBE | reader | - |
| | | driver_hourly_stats | DESCRIBE | reader | - |
+-----------------------+-------------+-----------------------+-----------+----------------+-------------------------+
| writer_permission1234 | FeatureView | transformed_conv_rate | CREATE | writer | - |
+-----------------------+-------------+-----------------------+-----------+----------------+-------------------------+
| special | FeatureView | special.* | DESCRIBE | admin | test-key2 : test-value2 |
| | | | UPDATE | special-reader | test-key : test-value |
+-----------------------+-------------+-----------------------+-----------+----------------+-------------------------+
verbose option describes the resources matching each configured permission:
feast permissions list -v
Permissions:
permissions
├── reader_permission1234 ['reader']
│ └── FeatureView: none
└── writer_permission1234 ['writer']
├── FeatureView: none
│── OnDemandFeatureView: ['transformed_conv_rate_fresh', 'transformed_conv_rate']
└── BatchFeatureView: ['driver_hourly_stats', 'driver_hourly_stats_fresh']
Describes the provided permission
feast permissions describe permission-name
name: permission-name
types:
- FEATURE_VIEW
namePattern: transformed_conv_rate
requiredTags:
required1: required-value1
required2: required-value2
actions:
- DESCRIBE
policy:
roleBasedPolicy:
roles:
- reader
tags:
key1: value1
key2: value2
The permissions check command is used to identify resources that lack the appropriate permissions based on their type, name, or tags.
This command is particularly useful for administrators when roles, actions, or permissions have been modified or newly configured. By running this command, administrators can easily verify which resources and actions are not protected by any permission configuration, ensuring that proper security measures are in place.
> feast permissions check
The following resources are not secured by any permission configuration:
NAME TYPE
driver Entity
driver_hourly_stats_fresh FeatureView
The following actions are not secured by any permission configuration (Note: this might not be a security concern, depending on the used APIs):
NAME TYPE UNSECURED ACTIONS
driver Entity CREATE
DESCRIBE
UPDATE
DELETE
READ_ONLINE
READ_OFFLINE
WRITE_ONLINE
WRITE_OFFLINE
driver_hourly_stats_fresh FeatureView CREATE
DESCRIBE
UPDATE
DELETE
READ_ONLINE
READ_OFFLINE
WRITE_ONLINE
WRITE_OFFLINE
Based on the above results, the administrator can reassess the permissions configuration and make any necessary adjustments to meet their security requirements.
If no resources are accessible publicly, the permissions check command will return the following response:
> feast permissions check
The following resources are not secured by any permission configuration:
NAME TYPE
The following actions are not secured by any permission configuration (Note: this might not be a security concern, depending on the used APIs):
NAME TYPE UNSECURED ACTIONS
List all the configured roles
feast permissions list-roles
Options:
--verbose Print the resources and actions permitted to each configured
role
ROLE NAME
admin
reader
writer
verbose option describes the resources and actions permitted to each managed role:
feast permissions list-roles -v
ROLE NAME RESOURCE NAME RESOURCE TYPE PERMITTED ACTIONS
admin driver_hourly_stats_source FileSource CREATE
DELETE
QUERY_OFFLINE
QUERY_ONLINE
DESCRIBE
UPDATE
admin vals_to_add RequestSource CREATE
DELETE
QUERY_OFFLINE
QUERY_ONLINE
DESCRIBE
UPDATE
admin driver_stats_push_source PushSource CREATE
DELETE
QUERY_OFFLINE
QUERY_ONLINE
DESCRIBE
UPDATE
admin driver_hourly_stats_source FileSource CREATE
DELETE
QUERY_OFFLINE
QUERY_ONLINE
DESCRIBE
UPDATE
admin vals_to_add RequestSource CREATE
DELETE
QUERY_OFFLINE
QUERY_ONLINE
DESCRIBE
UPDATE
admin driver_stats_push_source PushSource CREATE
DELETE
QUERY_OFFLINE
QUERY_ONLINE
DESCRIBE
UPDATE
reader driver_hourly_stats FeatureView DESCRIBE
reader driver_hourly_stats_fresh FeatureView DESCRIBE
...
Pre-create the SQL registry schema so the application does not need DDL privileges at runtime. Use this with schema_mode: verify or schema_mode: skip in your feature_store.yaml.
feast registry create-schema
This command only applies to SQL-based registries (registry_type: sql). It is safe to run multiple times — existing tables are not modified.
MLflow integration utilities for GenAI dataset sync and DataSource validation. Requires pip install 'feast[mlflow]'. See MLflow Integration.
# Sync MLflow GenAI EvaluationDataset → FeatureView (via MlflowDatasetSource)
feast mlflow sync-dataset --feature-view mlflow_labels
# Preview flattened dataset records
feast mlflow preview-dataset --source agent-feedback-v3 --limit 10
# Validate an MlflowDatasetSource-backed FeatureView
feast mlflow validate-source eval_records
# List all FeatureViews backed by MlflowDatasetSource
feast mlflow list-sourcesTear down deployed feature store infrastructure
feast teardown
Print the current Feast version
feast version