Skip to main content
UserContext provides user-specific information during graph execution. It consists of user attributes (key-value pairs) and a targeting key that determines which graph variant a user receives.

Why Use UserContext?

  • A/B Testing: Enable sophisticated targeting rules for experiments
  • Session Consistency: User context’s targeting key ensures the same user always gets the same experience across sessions
  • Personalization: Pass user attributes to customize graph behavior

What Happens Without UserContext?

If running A/B experiments, always pass UserContext with a unique targeting key. Otherwise, all users get the same variant regardless of your split percentages.
Without UserContext: The system uses a single default targeting key for all requests, causing 100% of users to get assigned to the same variant instead of distributing according to your configured splits (50/50, 30/70, etc.).

How to Use UserContext

Basic Usage

import { Graph, UserContext } from '@inworld/runtime';
import { v4 } from 'uuid';

// Create UserContext
const userContext = new UserContext(
  {
    user_id: 'user_12345',
    age: '25',
    country: 'US',
    user_tier: 'premium'
  },
  'user_12345' // targeting key
);

// Execute graph with context
const outputStream = graph.start(inputData, userContext);

Schema

new UserContext(
  attributes: { [key: string]: string }, // Required if creating UserContext
  targetingKey: string                   // Required if creating UserContext
)

Common Attributes

Attributes are flexible key-value pairs. Common examples:
  • user_id: Primary user identifier
  • age: User age for demographic targeting
  • country: Country code (‘US’, ‘CA’, ‘UK’)
  • user_tier: Subscription level (‘free’, ‘premium’)
  • app_version: Version of your application

Next Steps