Flagsmith CLI
The `flagsmith-cli` is a command-line interface tool designed to fetch feature flags and environment configurations from the Flagsmith API. Its primary use case is to generate a local JSON file, typically `flagsmith.json`, which can then be baked into an application as default flag state. This enables defensive coding practices, provides offline support, and facilitates CI/CD integration for feature flag management. The current stable version is `0.2.3`. Releases occur on an as-needed basis, focusing on bug fixes, dependency updates, and minor feature additions. The CLI is built on Oclif and ships with TypeScript types, targeting Node.js environments `>=12.0.0`. It serves as a crucial component for applications leveraging Flagsmith in scenarios requiring static flag data.
Common errors
-
Missing required flag: --identity when using --trait
cause Attempting to fetch flags with traits without specifying an identity.fixAdd the `-i <identity_value>` or `--identity=<identity_value>` flag when using `-t <trait_key>=<trait_value>`. -
Error: Cannot find module './flagsmith.json'
cause The generated `flagsmith.json` file is not found at the specified import path, or your module resolver is not configured to handle JSON imports.fixVerify the `--output` path used during CLI execution matches your import path. Ensure your build tool (e.g., webpack, esbuild, TypeScript) is configured to handle JSON file imports. -
Error: No environment key provided. Please set FLAGSMITH_ENVIRONMENT or pass it as an argument.
cause The Flagsmith environment key was neither provided as an argument to the `get` command nor set in the `FLAGSMITH_ENVIRONMENT` environment variable.fixSet the `FLAGSMITH_ENVIRONMENT` environment variable (e.g., `export FLAGSMITH_ENVIRONMENT='your_key'`) or pass the key directly as an argument: `flagsmith get your_key`.
Warnings
- gotcha The Flagsmith environment key is mandatory. It must either be provided via the `FLAGSMITH_ENVIRONMENT` environment variable or passed directly as an argument to the `flagsmith get` command.
- gotcha When fetching flags for a specific identity using the `--trait` flag, you must also provide the `--identity` flag. Traits cannot be fetched in isolation.
- gotcha The CLI defaults to `https://edge.api.flagsmith.com/api/v1/` for the API URL. If you are self-hosting Flagsmith or using a different region, you must specify the correct API URL.
- gotcha The default output file is `./flagsmith.json`. If this file path is not suitable for your project structure, ensure you specify a different output.
Install
-
npm install flagsmith-cli -
yarn add flagsmith-cli -
pnpm add flagsmith-cli
Imports
- flagsmith
import { flagsmith } from 'flagsmith-cli'npx flagsmith get
- FlagsmithState
const state = require('./flagsmith.json')import state from './flagsmith.json'
- flagsmith
import { Flagsmith } from 'flagsmith'import flagsmith from 'flagsmith'
Quickstart
// 1. Install the CLI as a dev dependency
// npm install flagsmith-cli --save-dev
// 2. In your CI/CD or package.json "postinstall" script,
// set the environment key and run the CLI to fetch flags.
// (Replace 'YOUR_FLAGSMITH_ENVIRONMENT_KEY' with your actual key or use process.env)
// Example using a shell command (e.g., in a CI script or `npm run get-flags`):
// export FLAGSMITH_ENVIRONMENT="${process.env.FLAGSMITH_ENVIRONMENT_KEY ?? 'YOUR_FLAGSMITH_ENVIRONMENT_KEY'}"
// npx flagsmith get --output ./src/flagsmith.json --pretty
// 3. In your application code (e.g., src/main.ts or src/App.tsx):
import flagsmith from 'flagsmith'; // Flagsmith client SDK (install separately: npm install flagsmith)
import state from './flagsmith.json'; // The JSON file generated by flagsmith-cli
async function initializeFlagsmith() {
await flagsmith.init({
state, // Initial state fetched by the CLI
environmentID: state.environmentID, // Extracted from the generated JSON
// If you need the SDK to fetch live flags later, ensure API URL is correct:
// apiUrl: 'https://edge.api.flagsmith.com/api/v1/', // Default Flagsmith API
});
console.log('Flagsmith initialized with default state.');
// Example: Check a feature flag
const myFeatureEnabled = flagsmith.hasFeature('example_feature_name');
console.log(`Is 'example_feature_name' enabled? ${myFeatureEnabled}`);
// Get a flag value
const welcomeMessage = flagsmith.getValue('welcome_message');
console.log(`Welcome message: ${welcomeMessage}`);
}
initializeFlagsmith();