open-feature/cli(opens in a new tab)
Language: Go
OpenFeature’s official command-line tool
- stars
- 66
- watchers
- 7
- forks
- 24
- open issues
- 36
- Last updated
- 10/29/2026
Language: Go
OpenFeature’s official command-line tool
Caution
The OpenFeature CLI is experimental! Feel free to give it a shot and provide feedback, but expect breaking changes.
OpenFeature is an open specification that provides a vendor-agnostic, community-driven API for feature flagging that works with your favorite feature flag management tool or in-house solution.
The OpenFeature CLI is a command-line tool designed to improve the developer experience when working with feature flags. It helps developers manage feature flags consistently across different environments and programming languages by providing powerful utilities for code generation, flag validation, and more.
The CLI bridges the gap between feature flag management systems and your application code by generating strongly typed flag accessors from a flag manifest. This approach provides:
The OpenFeature CLI can be installed using a shell command. This method is suitable for most Unix-like operating systems.
curl -fsSL https://openfeature.dev/scripts/install_cli.sh | shThe OpenFeature CLI is available as a Docker image in the GitHub Container Registry.
You can run the CLI in a Docker container using the following command:
docker run -it -v $(pwd):/local -w /local ghcr.io/open-feature/cli:latestIf you have Go >= 1.25 installed, you can install the CLI using the following command:
go install github.com/open-feature/cli/cmd/openfeature@latest
Download the appropriate pre-built binary from the releases page.
cat > flags.json << EOL { "$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json", "flags": { "enableMagicButton": { "flagType": "boolean", "defaultValue": false, "description": "Activates a special button that enhances user interaction with magical, intuitive functionalities." } } } EOL
Note
This is for demonstration purposes only. In a real-world scenario, you would typically want to fetch this file from a remote flag management service. See here, more details.
openfeature generate react
See here for all available options.
cat openfeature.ts
Congratulations! You have successfully generated your first strongly typed flag accessors. You can now use the generated code in your application to access the feature flags. This is just scratching the surface of what the OpenFeature CLI can do. For more advanced usage, read on!
The OpenFeature CLI provides the following commands:
| Command | Description |
|---|---|
init |
Initialize a new flag manifest |
manifest |
Manage flag manifest files (add, list, delete) |
compare |
Compare two flag manifests |
generate |
Generate strongly typed flag accessors |
pull |
Fetch flags from remote sources |
push |
Push flags to remote services |
version |
Display CLI version |
Initialize a new flag manifest in your project.
openfeature init
This command creates a flags.json file in your current directory with the proper schema reference.
You can customize the manifest path using configuration options.
See here for all available options.
Manage flag manifest files with subcommands for adding, listing, and deleting flags.
# Add a new flag interactively openfeature manifest add # Add a boolean flag openfeature manifest add new-feature --default-value false # Add a string flag with description openfeature manifest add welcome-message \ --type string \ --default-value "Hello!" \ --description "Welcome message for users" # List all flags in the manifest openfeature manifest list # Delete a flag from the manifest openfeature manifest delete old-feature
The manifest command provides:
See here for all available options.
Compare two feature flag manifests and display the differences.
# Compare your local manifest against another openfeature compare --against production-flags.json # Compare with different output formats openfeature compare --against other.json --output json openfeature compare --against other.json --output yaml openfeature compare --against other.json --output flat
Output formats:
See here for all available options.
Generate strongly typed flag accessors for your project.
# List available languages openfeature generate # Generate for a specific language openfeature generate typescript # With custom output directory openfeature generate typescript --output ./src/flags
Supported Languages:
| Language | Description |
|---|---|
react |
React hooks for feature flags |
go |
Go flag accessors |
csharp |
C# flag accessors |
java |
Java flag accessors |
python |
Python flag accessors |
nestjs |
NestJS flag accessors |
nodejs |
Node.js flag accessors |
angular |
Angular flag accessors |
See here for all available options.
NOTE: Angular generated code requires
@openfeature/angular-sdkversion1.1.0or newer.
Fetch feature flag configurations from a remote source.
# Pull flags from a remote API openfeature pull --flag-source-url https://api.example.com # With authentication openfeature pull --flag-source-url https://api.example.com --auth-token secret-token # Pull from a JSON file URL openfeature pull --flag-source-url https://example.com/flags.json
The pull command supports:
See here for all available options.
Push local flag configurations to a remote flag management service.
# Push flags to a remote API openfeature push --flag-source-url https://api.example.com --auth-token secret-token # Dry run to preview changes openfeature push --flag-source-url https://api.example.com --dry-run
The push command intelligently:
See here for all available options.
Print the version number of the OpenFeature CLI.
openfeature version
See here for all available options.
The flag manifest is a JSON file that defines your feature flags and their properties.
It serves as the source of truth for your feature flags and is used by the CLI to generate strongly typed accessors.
The manifest file should be named flags.json and placed in the root of your project.
The flag manifest file should follow the JSON schema with the following properties:
$schema - The URL of the JSON schema for validationflags - An object containing the feature flags
flagKey - A unique key for the flag
description - A description of what the flag doestype - The type of the flag (boolean, string, number, object)defaultValue - The default value of the flag{
"$schema": "https://raw.githubusercontent.com/open-feature/cli/refs/heads/main/schema/v0/flag-manifest.json",
"flags": {
"uniqueFlagKey": {
"description": "Description of what this flag does",
"type": "boolean|string|number|object",
"defaultValue": "default-value",
}
}
}The OpenFeature CLI supports synchronizing flags with remote flag management services through a standardized OpenAPI-based approach. This enables teams to:
The CLI uses an OpenAPI-driven architecture for remote operations:
For detailed information about implementing or extending the OpenAPI client pattern, see the OpenAPI Client Pattern documentation.
If you're building a flag management service that needs to integrate with the OpenFeature CLI, implement the endpoints defined in the sync.yaml specification:
GET /openfeature/v0/manifest - Retrieve the project manifestPOST /openfeature/v0/manifest/flags - Create new flagsPUT /openfeature/v0/manifest/flags/{key} - Update existing flagsDELETE /openfeature/v0/manifest/flags/{key} - Archive/delete flagsThe OpenFeature CLI uses an optional configuration file to override default settings and customize behavior.
This file can be in JSON or YAML format and should be named either .openfeature.json or .openfeature.yaml.
# Example .openfeature.yaml manifest: "flags/manifest.json" # Overrides the default manifest path generate: output: "src/flags" # Overrides the default output directory # Any language-specific options can be specified here # For example, for React: react: output: "src/flags/react" # Overrides the default React output directory # For Go: go: package: "github.com/myorg/myrepo/flags" # Overrides the default Go package name output: "src/flags/go" # Overrides the default Go output directory
The CLI uses a layered approach to configuration, allowing you to override settings at different levels. The configuration is applied in the following order:
flowchart LR
default("Default Config")
config("Config File")
args("Command Line Args")
default --> config
config --> args
For more information, visit our community page.
Made with contrib.rocks.