Testate

Self-hosted, version 1.1.0-alpha

Git for your test database.

Snapshot the databases behind a system under test. Break them. Put them back in seconds, and see exactly what changed.

testate checkout seeded-baseline
shop-postgres  restored  11 tables  1.2s
shop-mysql     restored   3 tables  0.4s
shop-mongo     restored   2 tables  0.3s
 
the database is where the test left it

What it does

A reset you can trust, and a record of what moved.

Snapshots

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.

Diffs

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.

The grid

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.

Fixtures

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.

SQL console

Read-only, with saved queries, so the check you run after every reset stays where you left it instead of in someone's notes.

Pipelines

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

Every one of these is real, not a stand-in.

Each engine has a contract suite that runs against the actual server.
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
338unit tests
150user stories covered in a browser
1container, one volume

Start

Running in about a minute.

  1. Run the container

    One volume holds the snapshots, the metadata and the logs.

  2. Sign in

    Open localhost:7378 as admin. Testate makes you change the password on the first login.

  3. Point it at a database

    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.

docker run -d --name testate \
-p 7378:7378 -v testate-data:/data \
-e TESTATE_SECRETS_ACTIVE_KEY="$(openssl rand -base64 32)" \
-e TESTATE_ADMIN_PASSWORD=change-me-now-1234 \
ghcr.io/pt-perkasa-pilar-utama/testate:1.1.0-alpha
 
curl -s -o /dev/null -w '%{http_code}\n' \
localhost:7378/api/v1/health/live
204

Agents

An agent can look, and only look.

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.

Caps are lower than the dashboard's, because an agent loops.
Limit Value
Rows per page, default200
Rows per page, maximum1000
Bytes per reply1 MiB
Seconds per query15
Foreign-key hops3

Before you install it

What it does not do.