Define feature flags as CRDs. Deliver them via environment variables, ConfigMaps, or a real-time sidecar API. No external dependencies.
A complete platform for managing feature flags at scale across your Kubernetes infrastructure.
Feature flags as CRDs. No external services. Fully integrated with RBAC, namespaces, and the Kubernetes API.
Environment variables for simplicity, ConfigMaps for hot-reload, or sidecar API with real-time SSE streaming.
Canary and linear rollout strategies with configurable steps. Safely deploy flag changes to a percentage of workloads.
Manage flags across multiple Kubernetes clusters from a single dashboard. Auto-discover workloads and their configuration.
Deliver different values based on namespace, labels, annotations, or workload name. Multiple operators including regex matching.
Admin, editor, and viewer roles. Full audit trail of every flag change with actor, timestamp, and diff.
Manage flags, discover workloads, and browse audit logs from a modern web portal.
Manage feature flags across your clusters
Three components working together to deliver feature flags at the Kubernetes layer.
Create a FeatureFlag CRD with your flag type, value, targeting rules, and delivery method.
kind: FeatureFlag
spec:
type: boolean
defaultValue: "false"
delivery:
envVar:
selector:
matchLabels:
app: my-app
The operator watches for flag changes and injects values into matching workloads automatically.
Read flags from your application using environment variables or one of the client SDKs.
// Go
client, _ := vexil.New(
vexil.WithEnvProvider(),
)
darkMode := client.Bool(
"dark-mode", false,
)
// or just read the env var
os.Getenv("FEATURE_DARK_MODE")
Read flags from any language. Same API everywhere.
client, _ := vexil.New(
vexil.WithSidecarProvider("localhost:8514"),
)
dark := client.Bool("dark-mode", false)
limit := client.Int("rate-limit", 100)
client = Client(provider="env")
dark = client.bool("dark-mode", default=False)
limit = client.int("rate-limit", default=100)
const client = new Client({ provider: 'env' });
const dark = await client.bool('dark-mode');
const limit = await client.int('rate-limit', 100);
using var client = new VexilClient(
new EnvProvider()
);
var dark = client.Bool("dark-mode");
var limit = client.Int("rate-limit", 100);
Deploy Vexil to your cluster in under 5 minutes.
$ helm install vexil deploy/helm/vexil \
-n vexil-system --create-namespace