Feature flags & expériences
Des flags définis dans le code (façon Pennant) : une constante, un prédicat sur le contexte, ou un déploiement percentage() déterministe et collant — le même utilisateur obtient toujours la même réponse. Aucun serveur requis ; remote permet de retomber sur le moteur Rust pour les clés non définies localement.
Astuce
Entrez différents noms : « alice » et « bob » ont le bandeau bêta ; ~30 % des utilisateurs ont le nouveau checkout, ~50 % le support prioritaire — et c'est stable par utilisateur (rechargez, ça ne bouge pas). L'affectation de variante est elle aussi collante.
Entrez un identifiant pour évaluer ses flags.
import { defineFlags, percentage, forUsers } from "@bext-stack/framework/flags";
const flags = defineFlags({
flags: {
"new-checkout": percentage(30), // sticky 30% rollout
"beta-banner": forUsers("alice", "bob"),
"holiday": (ctx) => ctx.attributes?.country === "FR",
},
remote: { appId: "my-site" }, // optional: fall through to the Rust engine
});
if (await flags.isEnabled("new-checkout", { userId: user.id })) { /* … */ }
// deterministic, sticky A/B/n assignment:
const arm = flags.variant("home-hero", ["control", "b", "c"], { userId: user.id });