Skip to main content

Global App Metadata

Attach typed, non-PII metadata about the running app to every event's context — app name/version/variant, OTA update info, deployment environment, enabled features, and user entitlements.

const client = await SunglassesCore.create({
adapters: [/* ... */],
storage,
appName: 'my-app',
appVersion: '1.4.2',
appVariant: 'pro',
appUpdate: { id: 'upd_abc', channel: 'production', runtimeVersion: '1.4.0', embedded: false },
environment: 'production',
features: ['new-onboarding', 'dark-mode'],
entitlements: ['premium'],
});

// Update at runtime
client.setEntitlements(['premium', 'team-seat']);
client.setFeatures(['new-onboarding']);
client.setAppUpdate({ id: 'upd_def', embedded: false });

Every event carries:

{
"context": {
"app": { "name": "my-app", "version": "1.4.2", "variant": "pro", "update": { ... } },
"environment": "production",
"features": ["new-onboarding", "dark-mode"],
"entitlements": ["premium"]
}
}

Scoping and lifecycle​

FieldScopeSurvives reset()?
environment, appVariant, appUpdate, featuresApp-scopedYes
entitlementsUser-scopedNo

All metadata is in-memory only — re-supply on each app boot. Use register() for free-form per-event super properties instead.

Runtime API​

client.setEnvironment('production');
client.setAppUpdate({ id, channel, embedded });
client.setFeatures(['flag-a']);
client.setEntitlements(['premium']);
client.setAppMetadata({ environment, features });
client.getAppMetadata();