GO Feature Flag doesn't compute your data - it delivers it. Every flag evaluation and every outcome you record is routed straight to your own data stack, so analytics, experimentation, and auditing stay where you already run them.
GO Feature Flag deliberately doesn’t compute, aggregate, or analyze anything. It captures a lightweight event for every flag evaluation - and any outcome you choose to record - and forwards it, untouched, to the destinations you configure.
That keeps your data yours: it lands in your warehouse, your queue, or your observability stack, where you already do the computing. Two patterns feed that pipeline - evaluation tracking built into the providers, and the OpenFeature Track API for custom outcomes.
Every flag evaluation is captured automatically by the providers and the relay proxy. No code to write - just keep trackEvents on and point it at an exporter.
Flag usage trackingCall client.track() to record what users actually did - a checkout, a click, revenue. The outcome half of experimentation, joined to the flag they saw.
Tracking APIBoth event streams flow through the exporters you configure to your warehouse, queue, lake, or observability stack - in batches or in real time.
Exporter conceptEvery time a flag is evaluated, a feature event - who saw which variation, and when - is captured automatically. The OpenFeature provider’s data collector buffers these events and the relay proxy ships them to your exporters.
How to use it: keep trackEvents: true (the default) on the flags you care about and configure an exporter. No application code changes - the exposure data just starts flowing.
trackEvents is on by default. Add an exporter and every evaluation is delivered as a feature event.
Exposures tell you who saw what; outcomes tell you what happened next. The standard OpenFeature Track API lets you record a named action - a checkout, a click, revenue - against the same context you evaluate flags with.
How to use it: call client.track(...) where the action happens, add a tracking exporter, and join exposures to outcomes in your stack to measure which variation actually won.
The same evaluation context links the outcome back to the variation the user was exposed to.
Route tracking events to their own destination with eventType: tracking.
Both event streams flow through the same exporters. Stream each event straight to a queue or endpoint, or batch them and write to storage - mix and match as many destinations as you like.
Self-hosted, OpenFeature-native, MIT-licensed. Capture every evaluation and outcome, then route it straight to the stack you already trust - no black box in between.
trackEvents: true (the default) on your flags and configure at least one exporter - evaluations start flowing with no application code. The Track API is the only part that needs a call, and only because it records outcomes your app knows about.client.track() calls. Both event types carry that key, so in your warehouse you can join exposures to outcomes and measure each variation. See the Tracking API docs.