Synthetic Data Engine for CDPs
Generate realistic user journeys with proper event sequences, timing, and cross-dataset relationships.
Quick Start
Define your journey hierarchy, then generate thousands of realistic events in seconds.
import {
defineAction,
defineAdventure,
defineJourney,
} from '@synode/core';
const pageView = defineAction({
id: 'page-view',
name: 'page_viewed',
fields: {
url: '/home',
title: 'Home Page',
referrer: (ctx) => ctx.faker.internet.url(),
},
});
const browsing = defineAdventure({
id: 'browse',
name: 'Browse Website',
actions: [pageView],
timeSpan: { min: 1000, max: 3000 },
bounceChance: 0.2,
});
const visit = defineJourney({
id: 'website-visit',
name: 'Website Visit',
adventures: [browsing],
}); import { generate, InMemoryAdapter } from '@synode/core';
const adapter = new InMemoryAdapter();
await generate(visit, {
users: 50,
lanes: 4,
adapter,
});
console.log(`Generated ${adapter.events.length} events`);
// → Generated 2,847 events Features
Everything you need to generate production-grade synthetic data for your CDP.
Journey Hierarchy
Journey, Adventure, Action, Event — with timing, bounce rates, and suppression periods.
Personas & Datasets
Weighted attribute distributions and typed datasets with compile-time safety.
Parallel Generation
Async lanes for I/O concurrency. Worker threads for true multi-core parallelism.
Output Adapters
Console, File, HTTP, Stream, BigQuery, Composite — or build your own.
Event Validation
Zod schemas with strict, warn, and skip modes. Catch bad data before it ships.
CLI & Config
synode generate | validate | init — interactive scaffolding, config-driven generation.
How It Works
Three pillars feed into a four-level generation pipeline.
Synthetic identities with weighted persona distributions
Pre-generated entity tables with typed row access
Behavioral flows with timing and prerequisites
Packages
Modular architecture. Install only what you need.