Skip to main content

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.

Next Steps