The Feast Web UI is a React-based web application that provides a graphical interface for browsing and exploring the Feast feature registry. It enables users to discover features, feature views, entities, data sources, and their relationships without requiring direct interaction with the Python SDK or CLI.
For information about serving features for model inference, see Python Feature Server, Go Feature Server, and Java Feature Server.
The Web UI provides the following capabilities:
The UI is currently in Beta status and is primarily designed for development and exploration workflows rather than production monitoring.
Sources: docs/SUMMARY.md160 README.md63-66 docs/roadmap.md76
The Web UI is a standalone React application that is bundled and served when users run the feast ui command from the Feast CLI. The CLI starts a local web server that serves the static files from the ui/build/ directory and provides API endpoints for the React application to fetch feature store metadata from the registry.
Sources: ui/package.json1-161 docs/getting-started/quickstart.md36 docs/reference/registries/README.md1-36
The UI is published as an npm package @feast-dev/feast-ui with the following structure:
| Entry Point | Type | Path | Description |
|---|---|---|---|
| CommonJS | Main | ./dist/feast-ui.cjs | Node.js compatible bundle |
| ES Module | Module | ./dist/feast-ui.module.js | Modern JavaScript module |
| TypeScript | Types | ./dist/FeastUI.d.ts | Type definitions |
The package can be used both as a standalone application (via feast ui) and as a library that can be embedded in other applications.
Sources: ui/package.json8-10
| Dependency | Version | Purpose |
|---|---|---|
react | 18.3.1 | UI framework |
react-dom | 18.3.1 | DOM rendering |
@elastic/eui | 95.12.0 | Component library and design system |
@emotion/react | 11.13.3 | CSS-in-JS styling |
react-query | 3.39.3 | Async state management and data fetching |
react-router-dom | 6.28.0 | Client-side routing |
reactflow | 11.11.4 | Interactive node-based diagrams |
dagre | 0.8.5 | Graph layout algorithms |
protobufjs | 7.4.0 | Protocol Buffer serialization |
moment | 2.29.1 | Date/time manipulation |
query-string | 7.1.1 | URL query parameter parsing |
zod | 3.11.6 | Schema validation |
Sources: ui/package.json25-46
The build system uses:
Sources: ui/package.json61-139
The UI uses Protocol Buffers to communicate with the Feast registry and ensure type safety across the system.
The proto generation is handled by the generate-protos script:
This script:
pbjs to generate JavaScript from .proto files in ../protos/feast/src/protos.jspbts to generate TypeScript definitions in src/protos.d.tsstart, build, build:lib, and test scriptsSources: ui/package.json49-56
The UI provides utilities for converting Protocol Buffer timestamps to JavaScript Date objects:
The toDate function handles both Long and number types for timestamp seconds, ensuring compatibility across different protobuf implementations.
Sources: ui/src/utils/timestamp.ts1-14
| Script | Command | Purpose |
|---|---|---|
start | npm run generate-protos && node scripts/start.js | Start development server |
build | npm run generate-protos && node scripts/build.js | Production build for standalone app |
build:lib | npm run generate-protos && rimraf ./dist && tsc --project ./tsconfig.build-lib.json && rollup -c | Library build for npm distribution |
test | npm run generate-protos && node scripts/test.js | Run test suite |
format | prettier --write . | Format code |
format:check | prettier --check . | Check code formatting |
Sources: ui/package.json48-56
The development server is configured in ui/config/webpackDevServer.config.js1-109 and provides:
Sources: ui/config/webpackDevServer.config.js1-109 ui/config/webpack.config.js1-753
The production build:
build/ directorySources: ui/config/webpack.config.js1-753
For embedding the UI in other applications, the library build uses Rollup:
Rollup produces:
feast-ui.cjs): For Node.js environmentsfeast-ui.module.js): For modern JavaScript bundlersFeastUI.d.ts): For type checkingSources: ui/package.json51
The UI uses Jest with Happy DOM for testing:
Key testing configuration:
@happy-dom/jest-environment for DOM simulationsrc/**/*.{spec,test}.{js,jsx,ts,tsx}src/setupTests.ts configures testing library and polyfillsSources: ui/jest.config.js1-54 ui/src/setupTests.ts1-10
| File Type | Transform | Output |
|---|---|---|
.js, .jsx, .ts, .tsx | config/jest/babelTransform.js | Transpiled JavaScript |
.css | config/jest/cssTransform.js | Empty object |
| Other assets | config/jest/fileTransform.js | Filename string |
Sources: ui/jest.config.js19-24 ui/config/jest/cssTransform.js1-15 ui/config/jest/fileTransform.js1-30
Jest is configured to transform node_modules that use ESM:
This ensures that ESM-only packages are properly transpiled for the CommonJS test environment.
Sources: ui/jest.config.js1
The Web UI is started via the Feast CLI:
This command (implemented in the CLI at the feast command entrypoint):
FeatureStore instance from the current repository's feature_store.yamlui/build/http://localhost:3000)The UI communicates with the Feast Python SDK through the web server to retrieve and display metadata. Users can browse:
driver_activity_v1)FileSource, BigQuerySource)reactflow libraryThe UI is read-only and does not modify the registry. For applying changes to feature definitions, users must use feast apply via the CLI or Python SDK.
Sources: README.md63-68 docs/getting-started/quickstart.md495-496 ui/package.json40
The Web UI can be deployed on Kubernetes using the Feast Operator. A sample configuration is available at infra/feast-operator/config/samples/v1_featurestore_with_ui.yaml:
The operator will:
FeatureStore CRThe complete list of sample configurations, including the UI sample, is defined in infra/feast-operator/config/samples/kustomization.yaml1-6
Sources: infra/feast-operator/config/samples/kustomization.yaml1-6 infra/feast-operator/README.md1-166
The UI reads from the Feast registry to display metadata. It supports all registry implementations through the FeatureStore class:
SqlRegistrySnowflakeRegistryRemoteRegistryThe registry type is configured in feature_store.yaml under the registry section. The UI automatically adapts to whatever registry backend is configured.
Sources: docs/reference/registries/README.md1-36 sdk/python/feast/infra/registry/contrib/hdfs/hdfs_registry_store.py1-122 sdk/python/tests/unit/infra/registry/test_sql_registry.py1-59
The UI enables discovery through:
Sources: README.md236-241 docs/roadmap.md70-77
The UI requires Node.js version 22.13.1 as specified in ui/.nvmrc1
For development, it is recommended to use a Node version manager (nvm) to ensure the correct version:
Sources: ui/.nvmrc1
The UI build system uses several configuration files:
| File | Purpose |
|---|---|
config/webpack.config.js | Webpack bundler configuration for dev and prod |
config/webpackDevServer.config.js | Development server settings |
config/paths.js | Path resolution for build system |
config/modules.js | Module resolution configuration |
config/getHttpsConfig.js | HTTPS/SSL certificate handling |
config/jest/babelTransform.js | Babel transform for Jest |
config/jest/cssTransform.js | CSS mock for Jest |
config/jest/fileTransform.js | Asset mock for Jest |
jest.config.js | Jest test configuration |
tsconfig.json | TypeScript compiler settings |
tsconfig.build-lib.json | TypeScript settings for library build |
rollup.config.js | Rollup bundler for library build |
Sources: ui/config/webpack.config.js1-753 ui/config/webpackDevServer.config.js1-109 ui/config/paths.js1-76 ui/config/modules.js1-131 ui/jest.config.js1-54
The UI supports modern browsers as specified in the browserslist configuration:
This targets:
Sources: ui/package.json58-60
Refresh this wiki
This wiki was recently refreshed. Please wait 3 days to refresh again.