[{"data":1,"prerenderedAt":1969},["ShallowReactive",2],{"navigation_docs":3,"-integrations-analytics-mixpanel":322,"-integrations-analytics-mixpanel-surround":1964},[4,10,62,88,241,307],{"title":5,"path":6,"stem":7,"icon":8,"exact":9},"Introduction","\u002F","0.index","i-lucide-book-open",true,{"title":11,"icon":12,"modifiedAt":13,"path":14,"stem":15,"children":16,"page":12},"Getting Started",false,"2026-04-30T19:15:33.000Z","\u002Fgetting-started","1.getting-started",[17,22,27,32,37,42,47,52,57],{"title":18,"path":19,"stem":20,"icon":21},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":23,"path":24,"stem":25,"icon":26},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":28,"path":29,"stem":30,"icon":31},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":33,"path":34,"stem":35,"icon":36},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":38,"path":39,"stem":40,"icon":41},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":43,"path":44,"stem":45,"icon":46},"Testing Rules","\u002Fgetting-started\u002Ftesting-targeting-rules","1.getting-started\u002F6.testing-targeting-rules","i-lucide-flask-conical",{"title":48,"path":49,"stem":50,"icon":51},"Experiments","\u002Fgetting-started\u002Fexperiments","1.getting-started\u002F7.experiments","i-lucide-flask-round",{"title":53,"path":54,"stem":55,"icon":56},"Segments","\u002Fgetting-started\u002Fsegments","1.getting-started\u002F8.segments","i-lucide-squares-intersect",{"title":58,"path":59,"stem":60,"icon":61},"Pricing & Billing","\u002Fgetting-started\u002Fpricing-and-billing","1.getting-started\u002F9.pricing-and-billing","i-lucide-credit-card",{"title":63,"modifiedAt":64,"defaultOpen":9,"path":65,"stem":66,"children":67,"page":12},"Monitoring","2026-09-24T23:33:20.000Z","\u002Fmonitoring","2.monitoring",[68,73,78,83],{"title":69,"path":70,"stem":71,"icon":72},"Activity","\u002Fmonitoring\u002Factivity","2.monitoring\u002F1.activity","i-lucide-activity",{"title":74,"path":75,"stem":76,"icon":77},"Lifecycle","\u002Fmonitoring\u002Flifecycle","2.monitoring\u002F2.lifecycle","i-lucide-recycle",{"title":79,"path":80,"stem":81,"icon":82},"Alerts","\u002Fmonitoring\u002Falerts","2.monitoring\u002F3.alerts","i-lucide-bell",{"title":84,"path":85,"stem":86,"icon":87},"Dynamic Detection","\u002Fmonitoring\u002Fdynamic-detection","2.monitoring\u002F4.dynamic-detection","i-lucide-hat-glasses",{"title":89,"modifiedAt":64,"defaultOpen":9,"path":90,"stem":91,"children":92,"page":12},"SDKs","\u002Fsdks","3.sdks",[93,98,119,144,160,191,236],{"title":94,"path":95,"stem":96,"icon":97},"Available SDKs","\u002Fsdks\u002Favailable-sdks","3.sdks\u002F1.available-sdks","i-lucide-list",{"title":99,"modifiedAt":64,"icon":100,"defaultOpen":12,"path":101,"stem":102,"children":103,"page":12},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","3.sdks\u002F2.browser",[104,109,114],{"title":105,"path":106,"stem":107,"icon":108},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","3.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":110,"path":111,"stem":112,"icon":113},"React","\u002Fsdks\u002Fbrowser\u002Freact","3.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":115,"path":116,"stem":117,"icon":118},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","3.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":120,"modifiedAt":64,"icon":121,"defaultOpen":12,"path":122,"stem":123,"children":124,"page":12},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","3.sdks\u002F3.mobile",[125,129,134,139],{"title":126,"path":127,"stem":128,"icon":113},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","3.sdks\u002F3.mobile\u002F1.react-native",{"title":130,"path":131,"stem":132,"icon":133},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","3.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":135,"path":136,"stem":137,"icon":138},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","3.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":140,"path":141,"stem":142,"icon":143},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","3.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":145,"modifiedAt":64,"icon":146,"defaultOpen":12,"path":147,"stem":148,"children":149,"page":12},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","3.sdks\u002F4.meta",[150,155],{"title":151,"path":152,"stem":153,"icon":154},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","3.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":156,"path":157,"stem":158,"icon":159},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","3.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":161,"modifiedAt":64,"icon":162,"defaultOpen":12,"path":163,"stem":164,"children":165,"page":12},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","3.sdks\u002F5.server",[166,171,176,181,186],{"title":167,"path":168,"stem":169,"icon":170},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","3.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":172,"path":173,"stem":174,"icon":175},"Python","\u002Fsdks\u002Fserver\u002Fpython","3.sdks\u002F5.server\u002F2.python","cd-logos-python",{"title":177,"path":178,"stem":179,"icon":180},"Java","\u002Fsdks\u002Fserver\u002Fjava","3.sdks\u002F5.server\u002F3.java","cd-logos-java",{"title":182,"path":183,"stem":184,"icon":185},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","3.sdks\u002F5.server\u002F4.dotnet","cd-logos-dotnet",{"title":187,"path":188,"stem":189,"icon":190},"Go","\u002Fsdks\u002Fserver\u002Fgo","3.sdks\u002F5.server\u002F5.go","cd-logos-go",{"title":192,"modifiedAt":64,"icon":193,"defaultOpen":12,"path":194,"stem":195,"children":196},"OpenFeature Providers","cd-logos-openfeature","\u002Fsdks\u002Fopenfeature","3.sdks\u002F6.openfeature\u002Findex",[197,199,204,208,212,216,220,224,228,232],{"title":198,"path":194,"stem":195,"icon":193},"Overview",{"title":200,"path":201,"stem":202,"icon":193,"icons":203},"Web","\u002Fsdks\u002Fopenfeature\u002Fweb","3.sdks\u002F6.openfeature\u002F1.web",[193,108],{"title":135,"path":205,"stem":206,"icon":193,"icons":207},"\u002Fsdks\u002Fopenfeature\u002Fswift","3.sdks\u002F6.openfeature\u002F2.swift",[193,138],{"title":140,"path":209,"stem":210,"icon":193,"icons":211},"\u002Fsdks\u002Fopenfeature\u002Fandroid","3.sdks\u002F6.openfeature\u002F3.android",[193,143],{"title":130,"path":213,"stem":214,"icon":193,"icons":215},"\u002Fsdks\u002Fopenfeature\u002Fflutter","3.sdks\u002F6.openfeature\u002F4.flutter",[193,133],{"title":167,"path":217,"stem":218,"icon":193,"icons":219},"\u002Fsdks\u002Fopenfeature\u002Fnode-js","3.sdks\u002F6.openfeature\u002F5.node-js",[193,170],{"title":172,"path":221,"stem":222,"icon":193,"icons":223},"\u002Fsdks\u002Fopenfeature\u002Fpython","3.sdks\u002F6.openfeature\u002F6.python",[193,175],{"title":177,"path":225,"stem":226,"icon":193,"icons":227},"\u002Fsdks\u002Fopenfeature\u002Fjava","3.sdks\u002F6.openfeature\u002F7.java",[193,180],{"title":182,"path":229,"stem":230,"icon":193,"icons":231},"\u002Fsdks\u002Fopenfeature\u002Fdotnet","3.sdks\u002F6.openfeature\u002F8.dotnet",[193,185],{"title":187,"path":233,"stem":234,"icon":193,"icons":235},"\u002Fsdks\u002Fopenfeature\u002Fgo","3.sdks\u002F6.openfeature\u002F9.go",[193,190],{"title":237,"path":238,"stem":239,"icon":240},"Maven Repository","\u002Fsdks\u002Fmaven-repository","3.sdks\u002F7.maven-repository","i-lucide-package",{"title":242,"modifiedAt":64,"defaultOpen":9,"path":243,"stem":244,"children":245,"page":12},"Integrations","\u002Fintegrations","4.integrations",[246,251,256,261,266,270,275,280],{"title":247,"path":248,"stem":249,"icon":250},"MCP","\u002Fintegrations\u002Fmcp","4.integrations\u002F1.mcp","cd-logos-mcp",{"title":252,"path":253,"stem":254,"icon":255},"Agent Skills","\u002Fintegrations\u002Fagents","4.integrations\u002F2.agents","i-lucide-bot",{"title":257,"path":258,"stem":259,"icon":260},"CLI","\u002Fintegrations\u002Fcli","4.integrations\u002F3.cli","cd-logos-cli",{"title":262,"path":263,"stem":264,"icon":265},"Terraform","\u002Fintegrations\u002Fterraform","4.integrations\u002F4.terraform","cd-logos-terraform",{"title":267,"path":268,"stem":269,"icon":41},"Admin API","\u002Fintegrations\u002Fadmin-api","4.integrations\u002F5.admin-api",{"title":271,"path":272,"stem":273,"icon":274},"Webhooks","\u002Fintegrations\u002Fwebhooks","4.integrations\u002F6.webhooks","i-lucide-webhook",{"title":276,"path":277,"stem":278,"icon":279},"Analytics integrations","\u002Fintegrations\u002Fanalytics-integrations","4.integrations\u002F7.analytics-integrations","i-lucide-blocks",{"title":281,"modifiedAt":282,"icon":283,"defaultOpen":12,"path":284,"stem":285,"children":286,"page":12},"Analytics","2026-11-08T06:12:58.000Z","i-lucide-chart-line","\u002Fintegrations\u002Fanalytics","4.integrations\u002F8.analytics",[287,291,295,299,303],{"title":288,"path":289,"stem":290,"icon":283},"Amplitude","\u002Fintegrations\u002Fanalytics\u002Famplitude","4.integrations\u002F8.analytics\u002F1.amplitude",{"title":292,"path":293,"stem":294,"icon":283},"Mixpanel","\u002Fintegrations\u002Fanalytics\u002Fmixpanel","4.integrations\u002F8.analytics\u002F2.mixpanel",{"title":296,"path":297,"stem":298,"icon":283},"Google Analytics 4","\u002Fintegrations\u002Fanalytics\u002Fga4","4.integrations\u002F8.analytics\u002F3.ga4",{"title":300,"path":301,"stem":302,"icon":283},"Segment","\u002Fintegrations\u002Fanalytics\u002Fsegment","4.integrations\u002F8.analytics\u002F4.segment",{"title":304,"path":305,"stem":306,"icon":283},"PostHog","\u002Fintegrations\u002Fanalytics\u002Fposthog","4.integrations\u002F8.analytics\u002F5.posthog",{"title":308,"modifiedAt":309,"defaultOpen":9,"path":310,"stem":311,"children":312,"page":12},"Migration Guides","2026-10-16T17:57:49.000Z","\u002Fmigration-guides","5.migration-guides",[313,318],{"title":314,"path":315,"stem":316,"icon":317},"From LaunchDarkly","\u002Fmigration-guides\u002Flaunchdarkly","5.migration-guides\u002F1.launchdarkly","i-lucide-baggage-claim",{"title":319,"path":320,"stem":321,"icon":317},"From Firebase Remote Config","\u002Fmigration-guides\u002Ffirebase-remote-config","5.migration-guides\u002F2.firebase-remote-config",{"id":323,"title":292,"body":324,"description":1955,"extension":1956,"links":1957,"meta":1958,"navigation":1959,"path":293,"seo":1960,"stem":294,"__hash__":1963},"docs\u002F4.integrations\u002F8.analytics\u002F2.mixpanel.md",{"type":325,"value":326,"toc":1947},"minimark",[327,331,340,343,347,362,415,419,440,1132,1139,1152,1164,1168,1175,1839,1851,1855,1858,1879,1897,1901,1904,1918,1933,1936,1943],[328,329,5],"h2",{"id":330},"introduction",[332,333,334,335,339],"p",{},"To compare an ",[336,337,338],"a",{"href":49},"experiment","'s variations in Mixpanel, your application tells Mixpanel which variation each user saw. You add a handler once, and Mixpanel joins those exposures to the events you already send it.",[332,341,342],{},"Nothing passes through ConfigDirector, and ConfigDirector never holds your Mixpanel project token.",[328,344,346],{"id":345},"what-mixpanel-reads","What Mixpanel reads",[332,348,349,350,361],{},"Mixpanel's Experiment report reads an ",[336,351,356,360],{"href":352,"rel":353,"target":355},"https:\u002F\u002Fdocs.mixpanel.com\u002Fdocs\u002Fexperiments#implementation-for-experimentation",[354],"noopener","_blank",[357,358,359],"code",{},"$experiment_started"," event"," with two properties:",[363,364,365,381],"table",{},[366,367,368],"thead",{},[369,370,371,375,378],"tr",{},[372,373,374],"th",{},"Property",[372,376,377],{},"What you send",[372,379,380],{},"Example",[382,383,384,400],"tbody",{},[369,385,386,392,395],{},[387,388,389],"td",{},[357,390,391],{},"Experiment name",[387,393,394],{},"The config key",[387,396,397],{},[357,398,399],{},"checkout-cta-copy",[369,401,402,407,410],{},[387,403,404],{},[357,405,406],{},"Variant name",[387,408,409],{},"The variation's name",[387,411,412],{},[357,413,414],{},"treatment-a",[328,416,418],{"id":417},"add-the-handler","Add the handler",[332,420,421,422,425,426,430,431,434,435,439],{},"Add a handler for the ",[357,423,424],{},"configEvaluated"," hook where you create the client, in the ",[336,427,429],{"href":428},"\u002Fsdks\u002Fbrowser\u002Fjavascript#hooks","browser"," or in ",[336,432,167],{"href":433},"\u002Fsdks\u002Fserver\u002Fnode-js#hooks",". This handler sends each exposure once, because sending more ",[336,436,438],{"href":437},"#when-the-handler-runs","can raise your Mixpanel bill",":",[441,442,443,812],"code-group",{},[444,445,451],"pre",{"className":446,"code":447,"filename":448,"language":449,"meta":450,"style":450},"language-ts shiki shiki-themes github-light-high-contrast github-light github-dark","import { createClient } from \"@configdirector\u002Fclient-sdk\";\nimport mixpanel from \"mixpanel-browser\";\n\nmixpanel.init(\"YOUR-MIXPANEL-PROJECT-TOKEN\");\n\nconst sentExposureKeys = new Set\u003Cstring>();\n\nexport const client = createClient(\"YOUR-CLIENT-SDK-KEY\", {\n  hooks: {\n    configEvaluated: ({ evaluation }) => {\n      const variationName = evaluation.variation?.name;\n      if (!variationName) return;\n\n      const exposureKey = `${evaluation.context?.id}\u002F${evaluation.key}\u002F${variationName}`;\n      if (sentExposureKeys.has(exposureKey)) return;\n      sentExposureKeys.add(exposureKey);\n\n      mixpanel.track(\"$experiment_started\", {\n        \"Experiment name\": evaluation.key,\n        \"Variant name\": variationName,\n      });\n    },\n  },\n});\n\nawait client.initialize({ id: \"user-42\" });\n","Browser","ts","",[357,452,453,476,491,497,516,521,549,554,579,585,607,621,641,646,693,711,723,728,744,753,762,768,774,780,786,791],{"__ignoreMap":450},[454,455,458,462,466,469,473],"span",{"class":456,"line":457},"line",1,[454,459,461],{"class":460},"sLDKn","import",[454,463,465],{"class":464},"sbRM4"," { createClient } ",[454,467,468],{"class":460},"from",[454,470,472],{"class":471},"suztq"," \"@configdirector\u002Fclient-sdk\"",[454,474,475],{"class":464},";\n",[454,477,479,481,484,486,489],{"class":456,"line":478},2,[454,480,461],{"class":460},[454,482,483],{"class":464}," mixpanel ",[454,485,468],{"class":460},[454,487,488],{"class":471}," \"mixpanel-browser\"",[454,490,475],{"class":464},[454,492,494],{"class":456,"line":493},3,[454,495,496],{"emptyLinePlaceholder":9},"\n",[454,498,500,503,507,510,513],{"class":456,"line":499},4,[454,501,502],{"class":464},"mixpanel.",[454,504,506],{"class":505},"sEIia","init",[454,508,509],{"class":464},"(",[454,511,512],{"class":471},"\"YOUR-MIXPANEL-PROJECT-TOKEN\"",[454,514,515],{"class":464},");\n",[454,517,519],{"class":456,"line":518},5,[454,520,496],{"emptyLinePlaceholder":9},[454,522,524,527,531,534,537,540,543,546],{"class":456,"line":523},6,[454,525,526],{"class":460},"const",[454,528,530],{"class":529},"sxMNI"," sentExposureKeys",[454,532,533],{"class":460}," =",[454,535,536],{"class":460}," new",[454,538,539],{"class":505}," Set",[454,541,542],{"class":464},"\u003C",[454,544,545],{"class":529},"string",[454,547,548],{"class":464},">();\n",[454,550,552],{"class":456,"line":551},7,[454,553,496],{"emptyLinePlaceholder":9},[454,555,557,560,563,566,568,571,573,576],{"class":456,"line":556},8,[454,558,559],{"class":460},"export",[454,561,562],{"class":460}," const",[454,564,565],{"class":529}," client",[454,567,533],{"class":460},[454,569,570],{"class":505}," createClient",[454,572,509],{"class":464},[454,574,575],{"class":471},"\"YOUR-CLIENT-SDK-KEY\"",[454,577,578],{"class":464},", {\n",[454,580,582],{"class":456,"line":581},9,[454,583,584],{"class":464},"  hooks: {\n",[454,586,588,591,594,598,601,604],{"class":456,"line":587},10,[454,589,590],{"class":505},"    configEvaluated",[454,592,593],{"class":464},": ({ ",[454,595,597],{"class":596},"syyZu","evaluation",[454,599,600],{"class":464}," }) ",[454,602,603],{"class":460},"=>",[454,605,606],{"class":464}," {\n",[454,608,610,613,616,618],{"class":456,"line":609},11,[454,611,612],{"class":460},"      const",[454,614,615],{"class":529}," variationName",[454,617,533],{"class":460},[454,619,620],{"class":464}," evaluation.variation?.name;\n",[454,622,624,627,630,633,636,639],{"class":456,"line":623},12,[454,625,626],{"class":460},"      if",[454,628,629],{"class":464}," (",[454,631,632],{"class":460},"!",[454,634,635],{"class":464},"variationName) ",[454,637,638],{"class":460},"return",[454,640,475],{"class":464},[454,642,644],{"class":456,"line":643},13,[454,645,496],{"emptyLinePlaceholder":9},[454,647,649,651,654,656,659,661,664,667,670,673,676,678,680,683,685,688,691],{"class":456,"line":648},14,[454,650,612],{"class":460},[454,652,653],{"class":529}," exposureKey",[454,655,533],{"class":460},[454,657,658],{"class":471}," `${",[454,660,597],{"class":464},[454,662,663],{"class":471},".",[454,665,666],{"class":464},"context",[454,668,669],{"class":471},"?.",[454,671,672],{"class":464},"id",[454,674,675],{"class":471},"}\u002F${",[454,677,597],{"class":464},[454,679,663],{"class":471},[454,681,682],{"class":464},"key",[454,684,675],{"class":471},[454,686,687],{"class":464},"variationName",[454,689,690],{"class":471},"}`",[454,692,475],{"class":464},[454,694,696,698,701,704,707,709],{"class":456,"line":695},15,[454,697,626],{"class":460},[454,699,700],{"class":464}," (sentExposureKeys.",[454,702,703],{"class":505},"has",[454,705,706],{"class":464},"(exposureKey)) ",[454,708,638],{"class":460},[454,710,475],{"class":464},[454,712,714,717,720],{"class":456,"line":713},16,[454,715,716],{"class":464},"      sentExposureKeys.",[454,718,719],{"class":505},"add",[454,721,722],{"class":464},"(exposureKey);\n",[454,724,726],{"class":456,"line":725},17,[454,727,496],{"emptyLinePlaceholder":9},[454,729,731,734,737,739,742],{"class":456,"line":730},18,[454,732,733],{"class":464},"      mixpanel.",[454,735,736],{"class":505},"track",[454,738,509],{"class":464},[454,740,741],{"class":471},"\"$experiment_started\"",[454,743,578],{"class":464},[454,745,747,750],{"class":456,"line":746},19,[454,748,749],{"class":471},"        \"Experiment name\"",[454,751,752],{"class":464},": evaluation.key,\n",[454,754,756,759],{"class":456,"line":755},20,[454,757,758],{"class":471},"        \"Variant name\"",[454,760,761],{"class":464},": variationName,\n",[454,763,765],{"class":456,"line":764},21,[454,766,767],{"class":464},"      });\n",[454,769,771],{"class":456,"line":770},22,[454,772,773],{"class":464},"    },\n",[454,775,777],{"class":456,"line":776},23,[454,778,779],{"class":464},"  },\n",[454,781,783],{"class":456,"line":782},24,[454,784,785],{"class":464},"});\n",[454,787,789],{"class":456,"line":788},25,[454,790,496],{"emptyLinePlaceholder":9},[454,792,794,797,800,803,806,809],{"class":456,"line":793},26,[454,795,796],{"class":460},"await",[454,798,799],{"class":464}," client.",[454,801,802],{"class":505},"initialize",[454,804,805],{"class":464},"({ id: ",[454,807,808],{"class":471},"\"user-42\"",[454,810,811],{"class":464}," });\n",[444,813,815],{"className":446,"code":814,"filename":167,"language":449,"meta":450,"style":450},"import { createClient } from \"@configdirector\u002Fserver-sdk\";\nimport { LRUCache } from \"lru-cache\";\nimport Mixpanel from \"mixpanel\";\n\nconst mixpanel = Mixpanel.init(\"YOUR-MIXPANEL-PROJECT-TOKEN\");\n\nconst sentExposureKeys = new LRUCache\u003Cstring, true>({ max: 100_000 });\n\nexport const client = createClient(\"YOUR-SERVER-SDK-KEY\", {\n  hooks: {\n    configEvaluated: ({ evaluation }) => {\n      const variationName = evaluation.variation?.name;\n      const userId = evaluation.context?.id;\n      if (!variationName || !userId) return;\n\n      const exposureKey = `${userId}\u002F${evaluation.key}\u002F${variationName}`;\n      if (sentExposureKeys.has(exposureKey)) return;\n      sentExposureKeys.set(exposureKey, true);\n\n      mixpanel.track(\"$experiment_started\", {\n        distinct_id: userId,\n        \"Experiment name\": evaluation.key,\n        \"Variant name\": variationName,\n      });\n    },\n  },\n});\n\nawait client.initialize();\n",[357,816,817,830,844,858,862,882,886,917,921,940,944,958,968,980,1004,1008,1037,1051,1065,1069,1081,1086,1092,1098,1102,1106,1110,1115,1120],{"__ignoreMap":450},[454,818,819,821,823,825,828],{"class":456,"line":457},[454,820,461],{"class":460},[454,822,465],{"class":464},[454,824,468],{"class":460},[454,826,827],{"class":471}," \"@configdirector\u002Fserver-sdk\"",[454,829,475],{"class":464},[454,831,832,834,837,839,842],{"class":456,"line":478},[454,833,461],{"class":460},[454,835,836],{"class":464}," { LRUCache } ",[454,838,468],{"class":460},[454,840,841],{"class":471}," \"lru-cache\"",[454,843,475],{"class":464},[454,845,846,848,851,853,856],{"class":456,"line":493},[454,847,461],{"class":460},[454,849,850],{"class":464}," Mixpanel ",[454,852,468],{"class":460},[454,854,855],{"class":471}," \"mixpanel\"",[454,857,475],{"class":464},[454,859,860],{"class":456,"line":499},[454,861,496],{"emptyLinePlaceholder":9},[454,863,864,866,869,871,874,876,878,880],{"class":456,"line":518},[454,865,526],{"class":460},[454,867,868],{"class":529}," mixpanel",[454,870,533],{"class":460},[454,872,873],{"class":464}," Mixpanel.",[454,875,506],{"class":505},[454,877,509],{"class":464},[454,879,512],{"class":471},[454,881,515],{"class":464},[454,883,884],{"class":456,"line":523},[454,885,496],{"emptyLinePlaceholder":9},[454,887,888,890,892,894,896,899,901,903,906,909,912,915],{"class":456,"line":551},[454,889,526],{"class":460},[454,891,530],{"class":529},[454,893,533],{"class":460},[454,895,536],{"class":460},[454,897,898],{"class":505}," LRUCache",[454,900,542],{"class":464},[454,902,545],{"class":529},[454,904,905],{"class":464},", ",[454,907,908],{"class":529},"true",[454,910,911],{"class":464},">({ max: ",[454,913,914],{"class":529},"100_000",[454,916,811],{"class":464},[454,918,919],{"class":456,"line":556},[454,920,496],{"emptyLinePlaceholder":9},[454,922,923,925,927,929,931,933,935,938],{"class":456,"line":581},[454,924,559],{"class":460},[454,926,562],{"class":460},[454,928,565],{"class":529},[454,930,533],{"class":460},[454,932,570],{"class":505},[454,934,509],{"class":464},[454,936,937],{"class":471},"\"YOUR-SERVER-SDK-KEY\"",[454,939,578],{"class":464},[454,941,942],{"class":456,"line":587},[454,943,584],{"class":464},[454,945,946,948,950,952,954,956],{"class":456,"line":609},[454,947,590],{"class":505},[454,949,593],{"class":464},[454,951,597],{"class":596},[454,953,600],{"class":464},[454,955,603],{"class":460},[454,957,606],{"class":464},[454,959,960,962,964,966],{"class":456,"line":623},[454,961,612],{"class":460},[454,963,615],{"class":529},[454,965,533],{"class":460},[454,967,620],{"class":464},[454,969,970,972,975,977],{"class":456,"line":643},[454,971,612],{"class":460},[454,973,974],{"class":529}," userId",[454,976,533],{"class":460},[454,978,979],{"class":464}," evaluation.context?.id;\n",[454,981,982,984,986,988,991,994,997,1000,1002],{"class":456,"line":648},[454,983,626],{"class":460},[454,985,629],{"class":464},[454,987,632],{"class":460},[454,989,990],{"class":464},"variationName ",[454,992,993],{"class":460},"||",[454,995,996],{"class":460}," !",[454,998,999],{"class":464},"userId) ",[454,1001,638],{"class":460},[454,1003,475],{"class":464},[454,1005,1006],{"class":456,"line":695},[454,1007,496],{"emptyLinePlaceholder":9},[454,1009,1010,1012,1014,1016,1018,1021,1023,1025,1027,1029,1031,1033,1035],{"class":456,"line":713},[454,1011,612],{"class":460},[454,1013,653],{"class":529},[454,1015,533],{"class":460},[454,1017,658],{"class":471},[454,1019,1020],{"class":464},"userId",[454,1022,675],{"class":471},[454,1024,597],{"class":464},[454,1026,663],{"class":471},[454,1028,682],{"class":464},[454,1030,675],{"class":471},[454,1032,687],{"class":464},[454,1034,690],{"class":471},[454,1036,475],{"class":464},[454,1038,1039,1041,1043,1045,1047,1049],{"class":456,"line":725},[454,1040,626],{"class":460},[454,1042,700],{"class":464},[454,1044,703],{"class":505},[454,1046,706],{"class":464},[454,1048,638],{"class":460},[454,1050,475],{"class":464},[454,1052,1053,1055,1058,1061,1063],{"class":456,"line":730},[454,1054,716],{"class":464},[454,1056,1057],{"class":505},"set",[454,1059,1060],{"class":464},"(exposureKey, ",[454,1062,908],{"class":529},[454,1064,515],{"class":464},[454,1066,1067],{"class":456,"line":746},[454,1068,496],{"emptyLinePlaceholder":9},[454,1070,1071,1073,1075,1077,1079],{"class":456,"line":755},[454,1072,733],{"class":464},[454,1074,736],{"class":505},[454,1076,509],{"class":464},[454,1078,741],{"class":471},[454,1080,578],{"class":464},[454,1082,1083],{"class":456,"line":764},[454,1084,1085],{"class":464},"        distinct_id: userId,\n",[454,1087,1088,1090],{"class":456,"line":770},[454,1089,749],{"class":471},[454,1091,752],{"class":464},[454,1093,1094,1096],{"class":456,"line":776},[454,1095,758],{"class":471},[454,1097,761],{"class":464},[454,1099,1100],{"class":456,"line":782},[454,1101,767],{"class":464},[454,1103,1104],{"class":456,"line":788},[454,1105,773],{"class":464},[454,1107,1108],{"class":456,"line":793},[454,1109,779],{"class":464},[454,1111,1113],{"class":456,"line":1112},27,[454,1114,785],{"class":464},[454,1116,1118],{"class":456,"line":1117},28,[454,1119,496],{"emptyLinePlaceholder":9},[454,1121,1123,1125,1127,1129],{"class":456,"line":1122},29,[454,1124,796],{"class":460},[454,1126,799],{"class":464},[454,1128,802],{"class":505},[454,1130,1131],{"class":464},"();\n",[332,1133,1134,1135,663],{},"Only an experiment's evaluations carry a variation, so the check skips every other config, along with the in-code default value. It also skips a variation without a name, so ",[336,1136,1138],{"href":1137},"\u002Fgetting-started\u002Fexperiments#create-the-experiment","name each one",[332,1140,1141,1142,1144,1145,1148,1149,1151],{},"In the browser, Mixpanel attaches the exposure to the user you have identified to it. In Node.js, the handler passes the context's ",[357,1143,672],{}," as the ",[357,1146,1147],{},"distinct_id",", so it has to be the ID your other Mixpanel events use. A context without an ",[357,1150,672],{}," is skipped, since it does not take part in the split on a server.",[332,1153,1154,1155,1158,1159,1163],{},"The handler needs version 1.11.0 or later of the JavaScript SDK, or 1.13.0 or later of the Node.js SDK. React, Vue and React Native take the same handler in their ",[357,1156,1157],{},"hooks",". The ",[336,1160,1162],{"href":1161},"\u002Fgetting-started\u002Fexperiments#send-exposures-to-your-analytics-tool","Experiments guide"," lists the hook for every other SDK.",[328,1165,1167],{"id":1166},"with-openfeature","With OpenFeature",[332,1169,1170,1171,1174],{},"In an OpenFeature application, a hook does the same job, with the ",[357,1172,1173],{},"variant"," as the variation's name. Every config has a variant, not only experiments: on any other config it is ConfigDirector's ID for the value. So attach the hook to the reads of your experiments instead of registering it for every read:",[441,1176,1177,1488],{},[444,1178,1180],{"className":446,"code":1179,"filename":200,"language":449,"meta":450,"style":450},"import { OpenFeature, type Hook } from \"@openfeature\u002Fweb-sdk\";\nimport mixpanel from \"mixpanel-browser\";\n\nmixpanel.init(\"YOUR-MIXPANEL-PROJECT-TOKEN\");\n\nconst sentExposureKeys = new Set\u003Cstring>();\n\nconst reportExposure: Hook = {\n  after: (hookContext, details) => {\n    if (!details.variant) return;\n\n    const exposureKey = `${hookContext.context.targetingKey}\u002F${hookContext.flagKey}\u002F${details.variant}`;\n    if (sentExposureKeys.has(exposureKey)) return;\n    sentExposureKeys.add(exposureKey);\n\n    mixpanel.track(\"$experiment_started\", {\n      \"Experiment name\": hookContext.flagKey,\n      \"Variant name\": details.variant,\n    });\n  },\n};\n\nconst client = OpenFeature.getClient();\n\nconst buttonLabel = client.getStringValue(\"checkout-cta-copy\", \"Start free trial\", {\n  hooks: [reportExposure],\n});\n",[357,1181,1182,1202,1214,1218,1230,1234,1252,1256,1273,1296,1312,1316,1359,1373,1382,1386,1399,1407,1415,1420,1424,1429,1433,1449,1453,1479,1484],{"__ignoreMap":450},[454,1183,1184,1186,1189,1192,1195,1197,1200],{"class":456,"line":457},[454,1185,461],{"class":460},[454,1187,1188],{"class":464}," { OpenFeature, ",[454,1190,1191],{"class":460},"type",[454,1193,1194],{"class":464}," Hook } ",[454,1196,468],{"class":460},[454,1198,1199],{"class":471}," \"@openfeature\u002Fweb-sdk\"",[454,1201,475],{"class":464},[454,1203,1204,1206,1208,1210,1212],{"class":456,"line":478},[454,1205,461],{"class":460},[454,1207,483],{"class":464},[454,1209,468],{"class":460},[454,1211,488],{"class":471},[454,1213,475],{"class":464},[454,1215,1216],{"class":456,"line":493},[454,1217,496],{"emptyLinePlaceholder":9},[454,1219,1220,1222,1224,1226,1228],{"class":456,"line":499},[454,1221,502],{"class":464},[454,1223,506],{"class":505},[454,1225,509],{"class":464},[454,1227,512],{"class":471},[454,1229,515],{"class":464},[454,1231,1232],{"class":456,"line":518},[454,1233,496],{"emptyLinePlaceholder":9},[454,1235,1236,1238,1240,1242,1244,1246,1248,1250],{"class":456,"line":523},[454,1237,526],{"class":460},[454,1239,530],{"class":529},[454,1241,533],{"class":460},[454,1243,536],{"class":460},[454,1245,539],{"class":505},[454,1247,542],{"class":464},[454,1249,545],{"class":529},[454,1251,548],{"class":464},[454,1253,1254],{"class":456,"line":551},[454,1255,496],{"emptyLinePlaceholder":9},[454,1257,1258,1260,1263,1265,1269,1271],{"class":456,"line":556},[454,1259,526],{"class":460},[454,1261,1262],{"class":529}," reportExposure",[454,1264,439],{"class":460},[454,1266,1268],{"class":1267},"sA9AF"," Hook",[454,1270,533],{"class":460},[454,1272,606],{"class":464},[454,1274,1275,1278,1281,1284,1286,1289,1292,1294],{"class":456,"line":581},[454,1276,1277],{"class":505},"  after",[454,1279,1280],{"class":464},": (",[454,1282,1283],{"class":596},"hookContext",[454,1285,905],{"class":464},[454,1287,1288],{"class":596},"details",[454,1290,1291],{"class":464},") ",[454,1293,603],{"class":460},[454,1295,606],{"class":464},[454,1297,1298,1301,1303,1305,1308,1310],{"class":456,"line":587},[454,1299,1300],{"class":460},"    if",[454,1302,629],{"class":464},[454,1304,632],{"class":460},[454,1306,1307],{"class":464},"details.variant) ",[454,1309,638],{"class":460},[454,1311,475],{"class":464},[454,1313,1314],{"class":456,"line":609},[454,1315,496],{"emptyLinePlaceholder":9},[454,1317,1318,1321,1323,1325,1327,1329,1331,1333,1335,1338,1340,1342,1344,1347,1349,1351,1353,1355,1357],{"class":456,"line":623},[454,1319,1320],{"class":460},"    const",[454,1322,653],{"class":529},[454,1324,533],{"class":460},[454,1326,658],{"class":471},[454,1328,1283],{"class":464},[454,1330,663],{"class":471},[454,1332,666],{"class":464},[454,1334,663],{"class":471},[454,1336,1337],{"class":464},"targetingKey",[454,1339,675],{"class":471},[454,1341,1283],{"class":464},[454,1343,663],{"class":471},[454,1345,1346],{"class":464},"flagKey",[454,1348,675],{"class":471},[454,1350,1288],{"class":464},[454,1352,663],{"class":471},[454,1354,1173],{"class":464},[454,1356,690],{"class":471},[454,1358,475],{"class":464},[454,1360,1361,1363,1365,1367,1369,1371],{"class":456,"line":643},[454,1362,1300],{"class":460},[454,1364,700],{"class":464},[454,1366,703],{"class":505},[454,1368,706],{"class":464},[454,1370,638],{"class":460},[454,1372,475],{"class":464},[454,1374,1375,1378,1380],{"class":456,"line":648},[454,1376,1377],{"class":464},"    sentExposureKeys.",[454,1379,719],{"class":505},[454,1381,722],{"class":464},[454,1383,1384],{"class":456,"line":695},[454,1385,496],{"emptyLinePlaceholder":9},[454,1387,1388,1391,1393,1395,1397],{"class":456,"line":713},[454,1389,1390],{"class":464},"    mixpanel.",[454,1392,736],{"class":505},[454,1394,509],{"class":464},[454,1396,741],{"class":471},[454,1398,578],{"class":464},[454,1400,1401,1404],{"class":456,"line":725},[454,1402,1403],{"class":471},"      \"Experiment name\"",[454,1405,1406],{"class":464},": hookContext.flagKey,\n",[454,1408,1409,1412],{"class":456,"line":730},[454,1410,1411],{"class":471},"      \"Variant name\"",[454,1413,1414],{"class":464},": details.variant,\n",[454,1416,1417],{"class":456,"line":746},[454,1418,1419],{"class":464},"    });\n",[454,1421,1422],{"class":456,"line":755},[454,1423,779],{"class":464},[454,1425,1426],{"class":456,"line":764},[454,1427,1428],{"class":464},"};\n",[454,1430,1431],{"class":456,"line":770},[454,1432,496],{"emptyLinePlaceholder":9},[454,1434,1435,1437,1439,1441,1444,1447],{"class":456,"line":776},[454,1436,526],{"class":460},[454,1438,565],{"class":529},[454,1440,533],{"class":460},[454,1442,1443],{"class":464}," OpenFeature.",[454,1445,1446],{"class":505},"getClient",[454,1448,1131],{"class":464},[454,1450,1451],{"class":456,"line":782},[454,1452,496],{"emptyLinePlaceholder":9},[454,1454,1455,1457,1460,1462,1464,1467,1469,1472,1474,1477],{"class":456,"line":788},[454,1456,526],{"class":460},[454,1458,1459],{"class":529}," buttonLabel",[454,1461,533],{"class":460},[454,1463,799],{"class":464},[454,1465,1466],{"class":505},"getStringValue",[454,1468,509],{"class":464},[454,1470,1471],{"class":471},"\"checkout-cta-copy\"",[454,1473,905],{"class":464},[454,1475,1476],{"class":471},"\"Start free trial\"",[454,1478,578],{"class":464},[454,1480,1481],{"class":456,"line":793},[454,1482,1483],{"class":464},"  hooks: [reportExposure],\n",[454,1485,1486],{"class":456,"line":1112},[454,1487,785],{"class":464},[444,1489,1491],{"className":446,"code":1490,"filename":167,"language":449,"meta":450,"style":450},"import { OpenFeature, type Hook } from \"@openfeature\u002Fserver-sdk\";\nimport { LRUCache } from \"lru-cache\";\nimport Mixpanel from \"mixpanel\";\n\nconst mixpanel = Mixpanel.init(\"YOUR-MIXPANEL-PROJECT-TOKEN\");\n\nconst sentExposureKeys = new LRUCache\u003Cstring, true>({ max: 100_000 });\n\nconst reportExposure: Hook = {\n  after: (hookContext, details) => {\n    const userId = hookContext.context.targetingKey;\n    if (!details.variant || !userId) return;\n\n    const exposureKey = `${userId}\u002F${hookContext.flagKey}\u002F${details.variant}`;\n    if (sentExposureKeys.has(exposureKey)) return;\n    sentExposureKeys.set(exposureKey, true);\n\n    mixpanel.track(\"$experiment_started\", {\n      distinct_id: userId,\n      \"Experiment name\": hookContext.flagKey,\n      \"Variant name\": details.variant,\n    });\n  },\n};\n\nconst client = OpenFeature.getClient();\n\nconst buttonLabel = await client.getStringValue(\n  \"checkout-cta-copy\",\n  \"Start free trial\",\n  { targetingKey: \"user-42\" },\n  { hooks: [reportExposure] },\n);\n",[357,1492,1493,1510,1522,1534,1538,1556,1560,1586,1590,1604,1622,1633,1654,1658,1690,1704,1716,1720,1732,1737,1743,1749,1753,1757,1761,1765,1779,1783,1801,1809,1817,1828,1834],{"__ignoreMap":450},[454,1494,1495,1497,1499,1501,1503,1505,1508],{"class":456,"line":457},[454,1496,461],{"class":460},[454,1498,1188],{"class":464},[454,1500,1191],{"class":460},[454,1502,1194],{"class":464},[454,1504,468],{"class":460},[454,1506,1507],{"class":471}," \"@openfeature\u002Fserver-sdk\"",[454,1509,475],{"class":464},[454,1511,1512,1514,1516,1518,1520],{"class":456,"line":478},[454,1513,461],{"class":460},[454,1515,836],{"class":464},[454,1517,468],{"class":460},[454,1519,841],{"class":471},[454,1521,475],{"class":464},[454,1523,1524,1526,1528,1530,1532],{"class":456,"line":493},[454,1525,461],{"class":460},[454,1527,850],{"class":464},[454,1529,468],{"class":460},[454,1531,855],{"class":471},[454,1533,475],{"class":464},[454,1535,1536],{"class":456,"line":499},[454,1537,496],{"emptyLinePlaceholder":9},[454,1539,1540,1542,1544,1546,1548,1550,1552,1554],{"class":456,"line":518},[454,1541,526],{"class":460},[454,1543,868],{"class":529},[454,1545,533],{"class":460},[454,1547,873],{"class":464},[454,1549,506],{"class":505},[454,1551,509],{"class":464},[454,1553,512],{"class":471},[454,1555,515],{"class":464},[454,1557,1558],{"class":456,"line":523},[454,1559,496],{"emptyLinePlaceholder":9},[454,1561,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584],{"class":456,"line":551},[454,1563,526],{"class":460},[454,1565,530],{"class":529},[454,1567,533],{"class":460},[454,1569,536],{"class":460},[454,1571,898],{"class":505},[454,1573,542],{"class":464},[454,1575,545],{"class":529},[454,1577,905],{"class":464},[454,1579,908],{"class":529},[454,1581,911],{"class":464},[454,1583,914],{"class":529},[454,1585,811],{"class":464},[454,1587,1588],{"class":456,"line":556},[454,1589,496],{"emptyLinePlaceholder":9},[454,1591,1592,1594,1596,1598,1600,1602],{"class":456,"line":581},[454,1593,526],{"class":460},[454,1595,1262],{"class":529},[454,1597,439],{"class":460},[454,1599,1268],{"class":1267},[454,1601,533],{"class":460},[454,1603,606],{"class":464},[454,1605,1606,1608,1610,1612,1614,1616,1618,1620],{"class":456,"line":587},[454,1607,1277],{"class":505},[454,1609,1280],{"class":464},[454,1611,1283],{"class":596},[454,1613,905],{"class":464},[454,1615,1288],{"class":596},[454,1617,1291],{"class":464},[454,1619,603],{"class":460},[454,1621,606],{"class":464},[454,1623,1624,1626,1628,1630],{"class":456,"line":609},[454,1625,1320],{"class":460},[454,1627,974],{"class":529},[454,1629,533],{"class":460},[454,1631,1632],{"class":464}," hookContext.context.targetingKey;\n",[454,1634,1635,1637,1639,1641,1644,1646,1648,1650,1652],{"class":456,"line":623},[454,1636,1300],{"class":460},[454,1638,629],{"class":464},[454,1640,632],{"class":460},[454,1642,1643],{"class":464},"details.variant ",[454,1645,993],{"class":460},[454,1647,996],{"class":460},[454,1649,999],{"class":464},[454,1651,638],{"class":460},[454,1653,475],{"class":464},[454,1655,1656],{"class":456,"line":643},[454,1657,496],{"emptyLinePlaceholder":9},[454,1659,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688],{"class":456,"line":648},[454,1661,1320],{"class":460},[454,1663,653],{"class":529},[454,1665,533],{"class":460},[454,1667,658],{"class":471},[454,1669,1020],{"class":464},[454,1671,675],{"class":471},[454,1673,1283],{"class":464},[454,1675,663],{"class":471},[454,1677,1346],{"class":464},[454,1679,675],{"class":471},[454,1681,1288],{"class":464},[454,1683,663],{"class":471},[454,1685,1173],{"class":464},[454,1687,690],{"class":471},[454,1689,475],{"class":464},[454,1691,1692,1694,1696,1698,1700,1702],{"class":456,"line":695},[454,1693,1300],{"class":460},[454,1695,700],{"class":464},[454,1697,703],{"class":505},[454,1699,706],{"class":464},[454,1701,638],{"class":460},[454,1703,475],{"class":464},[454,1705,1706,1708,1710,1712,1714],{"class":456,"line":713},[454,1707,1377],{"class":464},[454,1709,1057],{"class":505},[454,1711,1060],{"class":464},[454,1713,908],{"class":529},[454,1715,515],{"class":464},[454,1717,1718],{"class":456,"line":725},[454,1719,496],{"emptyLinePlaceholder":9},[454,1721,1722,1724,1726,1728,1730],{"class":456,"line":730},[454,1723,1390],{"class":464},[454,1725,736],{"class":505},[454,1727,509],{"class":464},[454,1729,741],{"class":471},[454,1731,578],{"class":464},[454,1733,1734],{"class":456,"line":746},[454,1735,1736],{"class":464},"      distinct_id: userId,\n",[454,1738,1739,1741],{"class":456,"line":755},[454,1740,1403],{"class":471},[454,1742,1406],{"class":464},[454,1744,1745,1747],{"class":456,"line":764},[454,1746,1411],{"class":471},[454,1748,1414],{"class":464},[454,1750,1751],{"class":456,"line":770},[454,1752,1419],{"class":464},[454,1754,1755],{"class":456,"line":776},[454,1756,779],{"class":464},[454,1758,1759],{"class":456,"line":782},[454,1760,1428],{"class":464},[454,1762,1763],{"class":456,"line":788},[454,1764,496],{"emptyLinePlaceholder":9},[454,1766,1767,1769,1771,1773,1775,1777],{"class":456,"line":793},[454,1768,526],{"class":460},[454,1770,565],{"class":529},[454,1772,533],{"class":460},[454,1774,1443],{"class":464},[454,1776,1446],{"class":505},[454,1778,1131],{"class":464},[454,1780,1781],{"class":456,"line":1112},[454,1782,496],{"emptyLinePlaceholder":9},[454,1784,1785,1787,1789,1791,1794,1796,1798],{"class":456,"line":1117},[454,1786,526],{"class":460},[454,1788,1459],{"class":529},[454,1790,533],{"class":460},[454,1792,1793],{"class":460}," await",[454,1795,799],{"class":464},[454,1797,1466],{"class":505},[454,1799,1800],{"class":464},"(\n",[454,1802,1803,1806],{"class":456,"line":1122},[454,1804,1805],{"class":471},"  \"checkout-cta-copy\"",[454,1807,1808],{"class":464},",\n",[454,1810,1812,1815],{"class":456,"line":1811},30,[454,1813,1814],{"class":471},"  \"Start free trial\"",[454,1816,1808],{"class":464},[454,1818,1820,1823,1825],{"class":456,"line":1819},31,[454,1821,1822],{"class":464},"  { targetingKey: ",[454,1824,808],{"class":471},[454,1826,1827],{"class":464}," },\n",[454,1829,1831],{"class":456,"line":1830},32,[454,1832,1833],{"class":464},"  { hooks: [reportExposure] },\n",[454,1835,1837],{"class":456,"line":1836},33,[454,1838,515],{"class":464},[332,1840,1841,1842,1846,1847,663],{},"A variation without a name also has ConfigDirector's ID for the value as its variant, so name each one. The hook needs version 1.11.0 or later of the ",[336,1843,1845],{"href":1844},"\u002Fsdks\u002Fopenfeature\u002Fweb#evaluation-details-and-hooks","Web provider",", or 1.13.0 or later of the ",[336,1848,1850],{"href":1849},"\u002Fsdks\u002Fopenfeature\u002Fnode-js#evaluation-details-and-hooks","Node.js provider",[328,1852,1854],{"id":1853},"when-the-handler-runs","When the handler runs",[332,1856,1857],{},"The handler runs once per evaluation, whenever your application reads the config. So read an experiment where the user reaches the change rather than at startup, or users who never see it count as exposed.",[332,1859,1860,1861,1866,1867,1872,1873,1878],{},"Mixpanel ",[336,1862,1865],{"href":1863,"rel":1864,"target":355},"https:\u002F\u002Fdocs.mixpanel.com\u002Fdocs\u002Fexperiments#when-to-track-an-exposure-event",[354],"only needs an exposure the first time a user sees a variation",", and sending more can cost you. It ",[336,1868,1871],{"href":1869,"rel":1870,"target":355},"https:\u002F\u002Fdocs.mixpanel.com\u002Fdocs\u002Fexperiments\u002Fexposure-event-metering",[354],"meters experiments"," by the distinct users exposed each month, but once your users average more than 30 exposure events a month, it ",[336,1874,1877],{"href":1875,"rel":1876,"target":355},"https:\u002F\u002Fdocs.mixpanel.com\u002Fdocs\u002Fexperiments#does-it-matter-how-many-experiments-a-user-is-exposed-to-within-the-month",[354],"divides your total exposure events by 30 instead",". A config read on every render would get there quickly, which is why the handler checks what it has already sent:",[1880,1881,1882,1894],"ul",{},[1883,1884,1885,1886,1889,1890,1893],"li",{},"In the browser, ",[357,1887,1888],{},"sentExposureKeys"," holds one entry per variation the page reads for each user, and it empties when the page loads again. So a site that reloads on every navigation sends once per page, and a single-page app sends once until the next reload. To send less, keep the entries in ",[357,1891,1892],{},"localStorage"," and remove them when the run ends.",[1883,1895,1896],{},"In Node.js, each server process remembers the latest 100,000 it has sent. A user who drops out of that cache, or who evaluates after a restart, is sent once more, which does not change your results.",[328,1898,1900],{"id":1899},"compare-the-variations","Compare the variations",[332,1902,1903],{},"The outcomes you compare are the events your application already sends to Mixpanel, so there is nothing more to add to your code.",[332,1905,1906,1907,1912,1913,1917],{},"The ",[336,1908,1911],{"href":1909,"rel":1910,"target":355},"https:\u002F\u002Fdocs.mixpanel.com\u002Fdocs\u002Fexperiments",[354],"Experiment report"," compares them per variation, and it is available on Mixpanel's Free, Growth and Enterprise plans. Click ",[1914,1915,1916],"strong",{},"New Experiment"," in the report menu and pick your config key from the dropdown, which lists the experiments that received an exposure in the last 30 days. Mixpanel then counts a user's later events toward the variation they were exposed to.",[332,1919,1920,1921,1928,1929,1932],{},"The handler also runs outside the split: before the run starts, after you ship and when a conditional rule serves a variation. So set the report to the dates of the run, which the ",[336,1922,1924,1927],{"href":1923},"\u002Fgetting-started\u002Fexperiments#read-the-exposures",[1914,1925,1926],{},"Experiment"," tab"," lists. A conditional rule above the split can still make Mixpanel's numbers higher than the ",[1914,1930,1931],{},"Exposures"," card, which counts only the contexts the split served.",[332,1934,1935],{},"Keep each variation's name for the length of the run, because Mixpanel treats a new name as a new variant.",[332,1937,1938,1939,663],{},"To mark each run's start, split change, ship and stop on these charts without code, set up a ",[336,1940,1942],{"href":1941},"\u002Fintegrations\u002Fanalytics-integrations#mixpanel","Mixpanel integration",[1944,1945,1946],"style",{},"html pre.shiki code .sLDKn, html code.shiki .sLDKn{--shiki-light:#A0111F;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbRM4, html code.shiki .sbRM4{--shiki-light:#0E1116;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .suztq, html code.shiki .suztq{--shiki-light:#032563;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sEIia, html code.shiki .sEIia{--shiki-light:#622CBC;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxMNI, html code.shiki .sxMNI{--shiki-light:#023B95;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .syyZu, html code.shiki .syyZu{--shiki-light:#702C00;--shiki-default:#E36209;--shiki-dark:#FFAB70}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA9AF, html code.shiki .sA9AF{--shiki-light:#702C00;--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":450,"searchDepth":478,"depth":478,"links":1948},[1949,1950,1951,1952,1953,1954],{"id":330,"depth":478,"text":5},{"id":345,"depth":478,"text":346},{"id":417,"depth":478,"text":418},{"id":1166,"depth":478,"text":1167},{"id":1853,"depth":478,"text":1854},{"id":1899,"depth":478,"text":1900},"Report experiment exposures to Mixpanel from your application, so you can compare the variations next to the events you already track there.","md",null,{"modifiedAt":282},{"title":292,"icon":283},{"title":1961,"description":1962},"Analyze Experiments in Mixpanel","Send ConfigDirector experiment exposures to Mixpanel as $experiment_started events from the browser, Node.js or an OpenFeature hook, then compare the variations in the Experiment report.","POoDN27gHe_DjXIeJ58QL9JdInTR43a8s2j1_GMXy3Q",[1965,1967],{"title":288,"path":289,"stem":290,"description":1966,"icon":283,"children":-1},"Report experiment exposures to Amplitude from your application, so you can compare the variations next to the events you already track there.",{"title":296,"path":297,"stem":298,"description":1968,"icon":283,"children":-1},"Report experiment exposures to Google Analytics 4 from your application, so you can compare the variations next to the events you already track there.",1794120696527]