Feature Flags

@if (loading()) { } @else if (rows().length === 0) { } @else { @for (f of rows(); track f.FeatureFlagId) { } }
IdFeatureFlag NameStatusRollout Rollout %Release
Loading…
No feature flags defined.
{{ f.FeatureFlagId }} {{ f.FeatureId }} {{ f.FlagName }} {{ f.RolloutType === RolloutType.Percentage ? f.RolloutPercent + '%' : '—' }} {{ f.ReleaseVersion || '—' }} @if (f.FlagStatus !== FlagStatus.KillSwitch) { } @else { }
@if (showForm()) {

{{ form.value.FeatureFlagId ? 'Edit Feature Flag' : 'New Feature Flag' }}

Kill switch can only be set via "Activate Kill Switch" below.
{{ rolloutDescriptions[form.value.RolloutType ?? 0] }}
@if (form.value.RolloutType === RolloutType.Percentage) {
Deterministic bucketing: SHA256(userId + featureCode) % 100 < RolloutPercent. This must byte-match the backend's algorithm — no client-side re-implementation is offered here.
}
Evaluated every 5 min by a background job.
}
@if (detail(); as d) {
} @if (ksTarget(); as t) {

{{ ksMode() === 'activate' ? 'Activate Kill Switch' : 'Lift Kill Switch' }}

@if (ksMode() === 'activate') {

This immediately disables {{ t.FlagName }} for every client and user, overriding all rollout targeting. This cannot be bypassed elsewhere — lifting it later requires this same confirm flow with a recorded reason.

} @else {

This clears the kill switch on {{ t.FlagName }} and restores its prior rollout configuration. Record why it's safe to lift now.

}
{{ ksReason().trim().length }} / 1000
}