Glossary
Atomic swap
An update model where configuration is replaced in a single atomic step, so readers observe either the old snapshot or the new snapshot, never a partially-applied mix.
Learn more: Atomic evaluation snapshots, Theory: Atomicity Guarantees
Allowlist
A set of StableIds that bypass a rule's ramp-up check after the rule matches by criteria. Allowlists do not force a
rule to match; they only bypass the
rollout gate.
Learn more: Ramp-up allowlisting
AxisValue
A custom targeting value along a named axis (environment, tenant, region, etc.). Axis values provide a stable string
id used for rule matching and snapshot
serialization.
Learn more: Axis targeting, API Reference: Core Types
Bucketing
Deterministically assigning a context (via StableId) to a bucket in a fixed space so percentage ramp-ups are stable
and reproducible. Konditional derives the
bucket from SHA-256("$salt:$flagKey:${stableIdHex}") and reduces it into [0, 10_000).
Learn more: Deterministic ramp-up bucketing, Theory: Determinism Proofs
Configuration
The in-memory snapshot used for evaluation: a map of registered features to their effective definitions (defaults, rules, salt, active state), plus optional metadata.
Learn more: Configuration lifecycle
ConfigurationPatch
An incremental update to a Configuration that can add/update flag definitions and remove keys, producing a new
Configuration snapshot when applied.
Learn more: Incremental updates via patches
Context
The runtime inputs to evaluation (for example: locale, platform, app version, and stable ID). Rules match against context, and evaluation requires an explicit context value.
Learn more: Context primitive
Determinism
- Guarantee: Given the same active configuration snapshot and the same context, evaluation produces the same value.
- Mechanism: Stable rule precedence (specificity ordering + tie-break by definition order) and deterministic rollout bucketing.
- Boundary: Determinism assumes a stable
StableId, a stable salt, and a stable configuration snapshot.
Learn more: Deterministic evaluation
Discriminated Union
A JSON encoding pattern for polymorphic types (like Kotlin sealed classes) where a type field identifies which variant
is being represented. In OpenAPI
schemas, discriminators map type values to schema references for proper client codegen.
Examples in Konditional: FlagValue (BOOLEAN/STRING/INT/DOUBLE/ENUM/DATA_CLASS) and VersionRange (
UNBOUNDED/MIN_BOUND/MAX_BOUND/MIN_AND_MAX_BOUND).
Learn more: Persistence format: Value encoding, Kontracts: Discriminated Unions
Extension predicate
A custom, typed predicate attached to a rule via extension { ... }. Extensions let you express domain-specific
targeting beyond built-in criteria (
platform/locale/version/axes) and contribute to a rule's specificity.
Learn more: Custom predicates via extension, Core Types
Feature
A typed configuration value (boolean/string/int/enum/custom) declared as a delegated property on a Namespace. Features
always have a required default, so
evaluation is non-null.
Learn more: Feature primitive
Kill-switch
A namespace-scoped override that disables all rules in a registry, causing evaluations to return declared defaults for that namespace (without changing feature definitions).
Learn more: Emergency kill switch, API Reference: Namespace Operations
Namespace
An isolation boundary with its own registry and independent configuration lifecycle (load/rollback/disable). Namespaces prevent unrelated domains from sharing configuration state.
Learn more: Namespace primitive
ParseResult
An explicit boundary type used for JSON parsing and patch application: Success(value) or Failure(error). Parse
failures return structured errors instead of
throwing, so invalid remote input can be rejected before it affects evaluation.
Learn more: ParseResult boundary, API Reference: Serialization, Theory: Parse Don't Validate
Ramp-up
A percentage rollout gate applied after a rule matches by criteria. Ramp-ups use deterministic bucketing so increasing a
percentage only adds users (for a
stable (stableId, flagKey, salt)).
Learn more: Percentage ramp-up
Rollback
Restoring a prior configuration snapshot from a bounded history maintained by the registry. Rollbacks are namespace-scoped and revert the active configuration without changing code-defined features.
Learn more: Rollback support, API Reference: Namespace Operations
Rule
A typed mapping from criteria to a concrete value: if all criteria match the context (AND semantics) and the context passes rollout/allowlist gates, the rule's value is returned.
Learn more: AND semantics inside a rule
Salt
A per-feature string included in the bucketing input. Changing the salt intentionally redistributes bucket assignments for that feature (useful when re-running experiments).
Learn more: Bucketing input and salt
Shadow evaluation
Evaluating a feature against a baseline registry (returned value) while also evaluating against a candidate registry for comparison telemetry. This supports migrations by surfacing mismatches without changing behavior.
Learn more: Shadow evaluation, Theory: Migration and Shadowing
Snapshot
A serialized JSON representation of configuration state used as a storage/transport format. Snapshots are parsed at a validated trust boundary before they can be loaded into a namespace.
Learn more: Persistence & storage format
Specificity
A rule precedence metric: more specific rules are evaluated first. In Konditional, total specificity is the sum of base targeting criteria ( platforms/locales/version bounds/axes) plus extension specificity.
Learn more: Specificity ordering
StableId
A stable identifier used for deterministic bucketing and allowlists. StableId.of(input) normalizes a non-blank string
into a hex id; StableId.fromHex(hex)
uses a precomputed canonical hex id.
Learn more: StableId
Total evaluation
- Guarantee: Evaluating a registered feature returns a value for every context.
- Mechanism: A default is required, and it is returned when no rule produces a value (or when a registry/flag is inactive/disabled).
- Boundary: Totality assumes the feature is registered and evaluation reads from a valid configuration snapshot.
Learn more: Total evaluation
Trust boundary
The point where untrusted input (typically JSON) enters the system. Konditional treats JSON configuration as a trust
boundary: it must be validated into domain
types (ParseResult.Success) before it can be loaded and influence evaluation.
Learn more: Trust boundaries
VersionRange
A version constraint used in rules (min/max/unbounded) to target contexts by semantic app version. Version ranges participate in rule matching and contribute to specificity when bounds are present.
Learn more: Version ranges, API Reference: Core Types