Skip to main content
Trace metadata applies to the entire trace. Use it for information that’s constant across spans:
  • Environment — production, staging, development
  • Region — us-west, eu-central
  • Deployment — version numbers, feature flags, A/B test variants
  • Request context — correlation IDs, upstream service info
Set metadata early—ideally where the trace begins—so all spans share the same context.

Adding Metadata

Set metadata inside an active span context (for example, inside observe() or an @observed function). If you call it outside any span context, it won’t attach to anything.
import { Laminar, observe } from '@lmnr-ai/lmnr';

await observe({ name: 'processRequest' }, async () => {
  Laminar.setTraceMetadata({
    environment: 'production',
    featureFlag: 'new-algorithm-v2',
    region: 'us-west',
  });
});
See also: Laminar.setTraceMetadata and observe(..., { metadata })

Notes

  • Setting trace metadata again overwrites the previous metadata—set all keys in one call.
  • Keep metadata JSON-serializable and avoid sensitive data.

Filtering by Metadata

In the Laminar UI, metadata filters currently match exact key-value pairs (for example, region=us-west).

Metadata vs Tags

MetadataTags
ScopeEntire traceIndividual spans
FormatKey-value pairsString labels
Best forEnvironment, cohort, request contextCategorization, review labels

Best Practices

  • Use consistent keys (environment, region, feature_flag).
  • Keep it lightweight and JSON-serializable.
  • Avoid sensitive data (no PII).