Self-hosted, version 1.1.0-alpha
Snapshot the databases behind a system under test. Break them. Put them back in seconds, and see exactly what changed.
What it does
A state holds data, not schema. One snapshot covers every database in a project, taken at one moment. A checkout restores the one you pick and reports what happened per database.
Compare two states, or a state against the live database. The summary says how many rows moved. Drill into a table to see which ones, before and after.
Filter, sort, page by keyset, follow a foreign key into the next table. Turn on write mode and Testate stashes the table before your first edit.
Upload a CSV or XLSX, map the columns, dry-run it, then import. Rejected rows come back as a file you fix and re-import.
Read-only, with saved queries, so the check you run after every reset stays where you left it instead of in someone's notes.
Every screen sits on the REST API. One call resets a database before a test run, and the contract is served as OpenAPI by the running instance.
Engines
| Tier | Engines | What you get |
|---|---|---|
| Tabular | PostgreSQL, MySQL, MariaDB | view, snapshot, checkout, diff, extract, edit, import |
| Document | MongoDB | view, snapshot, checkout, diff, extract |
| Files | S3, SFTP, FTP | view, download |
| REST | Any HTTP API | saved requests, hooks around checkouts |
Start
One volume holds the snapshots, the metadata and the logs.
Open localhost:7378 as admin. Testate makes you change the
password on the first login.
Add an adapter, take a snapshot, break something, and put it back. Where to aim the host is the one thing that catches people out.
Agents
Testate speaks MCP. Point Claude or any MCP client at the endpoint with an agent token and it reads schemas, pages rows, runs read-only queries and extracts fixtures. There is no write tool to call, queries run inside a read-only transaction, and column policies mask values before the agent sees them.
It does not have to be taught how. The first tool it sees is help, and the
first resource is the same guide: how the pieces relate, the order to call things in, and
the limits that refuse a call.
| Limit | Value |
|---|---|
| Rows per page, default | 200 |
| Rows per page, maximum | 1000 |
| Bytes per reply | 1 MiB |
| Seconds per query | 15 |
| Foreign-key hops | 3 |
Before you install it