11# TxLoom
22
3- Synthetic Transaction Studio — a self-hosted payments world simulator: a
4- deterministic, seeded generation engine, agent-first authoring via an MCP
5- server, four delivery sinks (files, Kafka, RabbitMQ, webhooks) with
6- history-to-live streaming, a realism report, and a six-surface React studio.
3+ Synthetic Transaction Studio — a self-hosted payments world simulator.
4+ TxLoom simulates a world of consumer personas, a merchant population, and
5+ fraud actors running multi-step campaigns, then reads transactions off of
6+ that world as they happen. Every event carries ground truth (` is_fraud ` ,
7+ ` typology ` , ` actor_id ` , ` campaign_step ` ) as a byproduct of the simulation
8+ itself. A deterministic, seeded generation engine delivers data through
9+ four sinks (files, Kafka, RabbitMQ, webhooks) with history-to-live
10+ streaming, a labeled imperfection layer (duplicates, late/out-of-order
11+ delivery, clock skew), a realism report, agent-first authoring via an MCP
12+ server, and a six-surface React studio.
713
814## Quickstart
915
@@ -16,43 +22,6 @@ Open **http://localhost:3000**. See [`specs/001-synthetic-transaction-studio/qui
1622for the full walkthrough (first dataset in three steps, optional demo
1723brokers for streaming, and the contributor development setup).
1824
19- ## Why TxLoom, not a prompt-in/rows-out generator
20-
21- Most synthetic-data tools in this space — ShadowTraffic and similar
22- prompt-driven generators among them — start from "describe the data you
23- want, get rows back." TxLoom starts somewhere different: it simulates a
24- _ world_ (consumer personas with income patterns and spend rhythms, a
25- merchant population, fraud actors running multi-step campaigns) and reads
26- transactions off of that world as they happen. The practical differences
27- that follow from that:
28-
29- - ** Ground truth, not just rows.** Every event carries a real cause — a
30- salaried consumer's monthly grocery run, a card-testing actor's third
31- probe in a burst — and the answer key (` is_fraud ` , ` typology ` , ` actor_id ` ,
32- ` campaign_step ` ) is a byproduct of simulating that cause, not a label
33- bolted on after the fact.
34- - ** A labeled imperfection layer.** Duplicate delivery, late arrival,
35- out-of-order delivery, and clock skew corrupt _ delivered_ copies only —
36- the truth record stays immutable — and every corruption is enumerated in
37- the answer key. You can test a pipeline's resilience to messy real-world
38- delivery without hand-rolling the mess yourself.
39- - ** History-to-live continuity.** A run's live-streaming phase continues the
40- exact same world (population, RNG stream) the history phase produced —
41- no reset, no discontinuity between "the batch dataset" and "the live
42- demo."
43- - ** Agent-first, not LLM-embedded.** No language model ships in the
44- product. Point any MCP-capable agent you already have (Claude Code,
45- Cursor, etc.) at the built-in agent-integration server and it authors a
46- spec against the same validator the UI uses — the agent proposes, the
47- deterministic engine enforces, and no model ever generates a transaction.
48- - ** Open source, self-hosted, no per-token cost.** Apache-2.0, one
49- ` docker compose up ` , no hosted-only dependency for core functionality.
50-
51- None of this is a claim that adjacent tools are worse at what _ they're_
52- built for — prompt-driven row generation is a different, valid tool for a
53- different job. TxLoom's bet is that fraud/payments testing specifically
54- needs a world with causes and consequences, not just plausible-looking rows.
55-
5625## Performance
5726
5827Streaming holds the configured TPS within tolerance and publishes
0 commit comments