Test Against Reality. Not Mocks!
Mocks can pass in CI but fail in production. Kopi gives you a secure, idempotent, lightweight replica of your actual database environment in seconds - schema, constraints, triggers, everything - so you can build/test/ship with confidence.
Decaf Mode (Anonymization)
The biggest problem with test data is that it doesn't look real. Apps break because generated names are too long, addresses are invalid, or business logic fails.
Decaf Mode (kopi up -decaf) solves this by mirroring your production data while surgically removing PII automatically.
It reads real rows, detects sensitive columns, and transforms them deterministically.
- Zero Config: Auto-detects names, emails, phones and much more.
- Consistent: "Mick" always becomes "Arthur".
- Safe: PII is scrubbed in-memory, never written to disk.
The Workflow: kopi ai pre-generates your complex synthetic datasets offline and caches them locally.
It runs on your local workstation CPU or GPU. When you run kopi up, the engine automatically injects this cached AI data into your local database,
entirely bypassing the production source for those specific columns.
Zero-Trust Local AI (Synthetic Data)
"Lorem ipsum" is dead. Your application deserves realistic, relationally-aware test data that actually looks and behaves like your production environment.
Kopi integrates Microsoft Semantic Kernel to orchestrate local, offline LLMs (like DeepSeek-R1 or Qwen) directly on your hardware. It analyzes your schema, understands complex domain constraints, and generates perfectly correlated synthetic arrays deterministically.
- Air-Gapped: Runs 100% offline via LLamaSharp. Your schema never touches OpenAI or the cloud.
- Context-Aware: Knows a "Mountain Bike" needs "Knobby Tires", not "Slicks".
- Hardware Adaptive: Auto-scales from 8GB GPUs to heavy CPU RAM offloading.
Stop Flaky Tests
Random data is great for exploration, but terrible for automated testing.
With Deterministic Seeding, Kopi freezes time. By passing a seed, you guarantee that the exact same data (e.g. names, dates, amounts, and UUIDs) is generated every single time, on every machine.
If a test fails on Tuesday, you can reproduce it perfectly on Wednesday.
Precision Control
Sometimes "Random" isn't enough. Your application logic depends on specific data formats or exact reference tables.
1. Reverse Regex
Need an SKU that matches ^SKU-[A-Z]{3}-\d{3}$? Just put that regex in your config, and Kopi will generate data that passes your strict validation rules.
2. Passthrough Tables
Don't generate fake Countries or Currencies. Tell Kopi to treat them as Reference Data, and it will copy them row-for-row from production.