{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://launchdarkly.com/schemas/launchdarkly/feature-flag.json", "title": "LaunchDarkly Feature Flag", "description": "A feature flag configuration in LaunchDarkly, including its variations, targeting rules, and environment-specific settings.", "type": "object", "required": ["key", "name", "kind"], "properties": { "key": { "type": "string", "description": "The unique key identifying this feature flag.", "pattern": "^[a-z0-9]([a-z0-9._-])*$", "minLength": 1, "maxLength": 256 }, "name": { "type": "string", "description": "The human-readable name of the feature flag.", "minLength": 1, "maxLength": 256 }, "description": { "type": "string", "description": "A description of the feature flag purpose and behavior.", "maxLength": 10000 }, "kind": { "type": "string", "description": "The type of flag, either boolean (two variations) or multivariate (multiple variations).", "enum": ["boolean", "multivariate"] }, "tags": { "type": "array", "description": "Tags applied to this feature flag for organization and filtering.", "items": { "type": "string", "pattern": "^[a-zA-Z0-9._-]+$" } }, "creationDate": { "type": "integer", "description": "Unix epoch timestamp in milliseconds when the flag was created.", "minimum": 0 }, "temporary": { "type": "boolean", "description": "Whether this flag is intended to be temporary and should be cleaned up after use." }, "archived": { "type": "boolean", "description": "Whether this flag has been archived and is no longer actively used." }, "includeInSnippet": { "type": "boolean", "description": "Whether this flag is available to client-side SDKs." }, "clientSideAvailability": { "type": "object", "description": "Controls which client-side SDKs can access this flag.", "properties": { "usingEnvironmentId": { "type": "boolean", "description": "Whether this flag is available to client-side SDKs using the environment ID." }, "usingMobileKey": { "type": "boolean", "description": "Whether this flag is available to mobile SDKs." } } }, "variations": { "type": "array", "description": "The possible values this flag can serve.", "minItems": 2, "items": { "$ref": "#/$defs/Variation" } }, "defaults": { "type": "object", "description": "Default variation settings applied when new environments are created.", "properties": { "onVariation": { "type": "integer", "description": "The index of the variation to serve when the flag is on.", "minimum": 0 }, "offVariation": { "type": "integer", "description": "The index of the variation to serve when the flag is off.", "minimum": 0 } } }, "environments": { "type": "object", "description": "A map of environment keys to their flag configurations.", "additionalProperties": { "$ref": "#/$defs/FlagEnvironment" } }, "_version": { "type": "integer", "description": "The current version number of this flag for optimistic concurrency control.", "minimum": 0 } }, "$defs": { "Variation": { "type": "object", "description": "A single variation value that a feature flag can serve.", "properties": { "_id": { "type": "string", "description": "The unique identifier of this variation." }, "value": { "description": "The value of this variation. Can be any JSON type including boolean, string, number, or object." }, "name": { "type": "string", "description": "An optional human-readable name for this variation." }, "description": { "type": "string", "description": "An optional description of what this variation represents." } } }, "FlagEnvironment": { "type": "object", "description": "The configuration of a feature flag for a specific environment.", "properties": { "on": { "type": "boolean", "description": "Whether the flag is currently enabled in this environment." }, "archived": { "type": "boolean", "description": "Whether the flag is archived in this environment." }, "salt": { "type": "string", "description": "The salt used for percentage rollout hashing." }, "lastModified": { "type": "integer", "description": "Unix epoch timestamp in milliseconds of the last modification.", "minimum": 0 }, "version": { "type": "integer", "description": "The version number of this flag configuration in this environment.", "minimum": 0 }, "targets": { "type": "array", "description": "Individual context targets for each variation.", "items": { "$ref": "#/$defs/Target" } }, "rules": { "type": "array", "description": "Targeting rules that determine which variation to serve.", "items": { "$ref": "#/$defs/Rule" } }, "fallthrough": { "$ref": "#/$defs/VariationOrRollout" }, "offVariation": { "type": "integer", "description": "The variation index to serve when the flag is off.", "minimum": 0 }, "prerequisites": { "type": "array", "description": "Flags that must be evaluated before this flag.", "items": { "$ref": "#/$defs/Prerequisite" } }, "trackEvents": { "type": "boolean", "description": "Whether to send detailed event data for this flag." }, "trackEventsFallthrough": { "type": "boolean", "description": "Whether to send events for the fallthrough rule." } } }, "Target": { "type": "object", "description": "An individual targeting entry that serves a specific variation to listed context keys.", "properties": { "values": { "type": "array", "description": "The list of context keys targeted.", "items": { "type": "string" } }, "variation": { "type": "integer", "description": "The variation index to serve to these targets.", "minimum": 0 }, "contextKind": { "type": "string", "description": "The context kind for this target." } } }, "Rule": { "type": "object", "description": "A targeting rule with clauses that must all match for the rule to apply.", "properties": { "_id": { "type": "string", "description": "The unique identifier for this rule." }, "clauses": { "type": "array", "description": "The conditions that must all be met for this rule to match.", "items": { "$ref": "#/$defs/Clause" } }, "variation": { "type": "integer", "description": "The variation index to serve when this rule matches.", "minimum": 0 }, "rollout": { "$ref": "#/$defs/Rollout" }, "trackEvents": { "type": "boolean", "description": "Whether to track events for this rule." } } }, "Clause": { "type": "object", "description": "A condition clause used in targeting rules.", "required": ["attribute", "op", "values"], "properties": { "attribute": { "type": "string", "description": "The context attribute to evaluate." }, "op": { "type": "string", "description": "The comparison operator.", "enum": [ "in", "endsWith", "startsWith", "matches", "contains", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual", "before", "after", "segmentMatch", "semVerEqual", "semVerLessThan", "semVerGreaterThan" ] }, "values": { "type": "array", "description": "The values to compare against.", "items": {} }, "negate": { "type": "boolean", "description": "Whether to negate the clause result." }, "contextKind": { "type": "string", "description": "The context kind to evaluate the attribute against." } } }, "Rollout": { "type": "object", "description": "A percentage rollout distributing traffic across variations.", "properties": { "variations": { "type": "array", "description": "The weighted variations in this rollout.", "items": { "type": "object", "properties": { "variation": { "type": "integer", "description": "The variation index.", "minimum": 0 }, "weight": { "type": "integer", "description": "The rollout weight in thousandths of a percent (0-100000).", "minimum": 0, "maximum": 100000 } } } }, "bucketBy": { "type": "string", "description": "The context attribute used for bucket assignment." }, "contextKind": { "type": "string", "description": "The context kind for rollout bucketing." } } }, "VariationOrRollout": { "type": "object", "description": "The default fallthrough rule specifying a variation or rollout.", "properties": { "variation": { "type": "integer", "description": "The variation index to serve.", "minimum": 0 }, "rollout": { "$ref": "#/$defs/Rollout" } } }, "Prerequisite": { "type": "object", "description": "A prerequisite flag that must evaluate to a specific variation before this flag is evaluated.", "required": ["key", "variation"], "properties": { "key": { "type": "string", "description": "The key of the prerequisite flag." }, "variation": { "type": "integer", "description": "The variation index that the prerequisite must serve.", "minimum": 0 } } } } }