Custom Targeting Axes
Add domain-specific targeting dimensions such as tenant tier, region, or environment.
Prerequisites: You understand Context and Targeting.
Step 1: Define Axis Values
import io.amichne.konditional.context.Context
import io.amichne.konditional.core.Namespace
import io.amichne.konditional.context.axis.AxisValue
import io.amichne.konditional.context.axis.KonditionalExplicitId
@KonditionalExplicitId("tenant-tier")
enum class TenantTier(override val id: String) : AxisValue<TenantTier> {
FREE("free"), PRO("pro"), ENTERPRISE("enterprise")
}
By default, axis IDs are derived from the enum fully-qualified class name.
Apply @KonditionalExplicitId when you need a stable custom axis ID that will
survive enum package moves.
Step 2: Register Axis in Namespace
object BillingFlags : Namespace("billing") {
val tenantTierAxis = axis<TenantTier>()
val premiumReporting by boolean<Context>(default = false) {
rule(true) { axis(tenantTierAxis, TenantTier.PRO, TenantTier.ENTERPRISE) }
}
}
Step 3: Supply Axis Values in Context
import io.amichne.konditional.api.axisValues
val axisValues = axisValues {
set(BillingFlags.tenantTierAxis, TenantTier.ENTERPRISE)
}
Attach those axis values in your context implementation so rules can resolve them consistently.
Expected Outcome
After this guide, your feature rules can target custom dimensions with compile-time axis typing.