Skip to main content

Protocol conformity · open source

Stroppy Conformity

Does this database really speak PostgreSQL? MySQL? MongoDB? Elasticsearch? Redis? Measured, not claimed.

It runs the same scripted interactions against the real engine and against the engine that claims to be compatible, and compares what each does on the wire. Every verdict carries its evidence: what was sent, what the original answered, what the engine answered, and the frame trace.

  • Five protocols
  • Expected values from the real engine
  • No account needed
  • Apache-2.0

Results

The audited dataset: every engine against the original it claims, check by check. Pick an engine for what differs; the ratings put it next to TPC-C speed.
  • Works the same
  • Differs
  • Refused
  • Breaks
  • Not measured

PostgreSQL wire protocol20 engines, best first. Pick an engine for what differs; pick a column for its features.

Types
EngineScore
Referencepostgres-13 to postgres-18the originalWorks the same, 86 of 86 checks matchedWorks the same, 72 of 72 checks matchedWorks the same, 60 of 60 checks matchedWorks the same, 36 of 36 checks matchedWorks the same, 96 of 96 checks matchedWorks the same, 66 of 66 checks matchedWorks the same, 96 of 96 checks matchedWorks the same, 522 of 522 checks matchedWorks the same, 246 of 246 checks matchedWorks the same, 2004 of 2004 checks matchedWorks the same, 4380 of 4380 checks matched
98.9Refused, 11 of 12 checks matchedWorks the same, 12 of 12 checks matchedWorks the same, 10 of 10 checks matchedWorks the same, 6 of 6 checks matchedWorks the same, 16 of 16 checks matchedWorks the same, 11 of 11 checks matchedWorks the same, 16 of 16 checks matchedWorks the same, 87 of 87 checks matchedWorks the same, 41 of 41 checks matchedWorks the same, 334 of 334 checks matchedWorks the same, 735 of 735 checks matched
98.7Refused, 11 of 12 checks matchedWorks the same, 12 of 12 checks matchedWorks the same, 10 of 10 checks matchedWorks the same, 6 of 6 checks matchedWorks the same, 16 of 16 checks matchedWorks the same, 11 of 11 checks matchedWorks the same, 16 of 16 checks matchedWorks the same, 87 of 87 checks matchedDiffers, 40 of 41 checks matchedWorks the same, 332 of 332 checks matchedDiffers, 722 of 727 checks matched
97.7Refused, 11 of 12 checks matchedWorks the same, 12 of 12 checks matchedWorks the same, 10 of 10 checks matchedRefused, 5 of 6 checks matchedWorks the same, 16 of 16 checks matchedWorks the same, 11 of 11 checks matchedWorks the same, 16 of 16 checks matchedDiffers, 86 of 87 checks matchedWorks the same, 41 of 41 checks matchedWorks the same, 334 of 334 checks matchedDiffers, 732 of 733 checks matched
91.3Differs, 9 of 12 checks matchedBreaks, 11 of 12 checks matchedBreaks, 8 of 10 checks matchedDiffers, 4 of 6 checks matchedWorks the same, 16 of 16 checks matchedWorks the same, 11 of 11 checks matchedWorks the same, 16 of 16 checks matchedWorks the same, 87 of 87 checks matchedWorks the same, 41 of 41 checks matchedWorks the same, 334 of 334 checks matchedDiffers, 736 of 737 checks matched
68.2Breaks, 7 of 15 checks matchedDiffers, 11 of 12 checks matchedRefused, 9 of 10 checks matchedDiffers, 1 of 6 checks matchedDiffers, 13 of 16 checks matchedDiffers, 8 of 11 checks matchedDiffers, 9 of 16 checks matchedBreaks, 24 of 81 checks matchedDiffers, 7 of 41 checks matchedDiffers, 87 of 89 checks matchedBreaks, 281 of 332 checks matched
64.4Breaks, 6 of 12 checks matchedDiffers, 8 of 12 checks matchedDiffers, 5 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 9 of 16 checks matchedDiffers, 8 of 11 checks matchedDiffers, 4 of 16 checks matchedDiffers, 49 of 81 checks matchedDiffers, 12 of 41 checks matchedDiffers, 100 of 110 checks matchedDiffers, 429 of 517 checks matched
62.7Differs, 9 of 12 checks matchedDiffers, 9 of 12 checks matchedDiffers, 4 of 10 checks matchedDiffers, 2 of 6 checks matchedDiffers, 9 of 16 checks matchedDiffers, 4 of 11 checks matchedDiffers, 5 of 16 checks matchedDiffers, 23 of 80 checks matchedDiffers, 12 of 41 checks matchedDiffers, 75 of 82 checks matchedDiffers, 322 of 403 checks matched
46.6Differs, 10 of 14 checks matchedDiffers, 9 of 12 checks matchedDiffers, 6 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 12 of 16 checks matchedDiffers, 8 of 11 checks matchedDiffers, 2 of 16 checks matchedDiffers, 46 of 87 checks matchedDiffers, 7 of 41 checks matchedDiffers, 98 of 107 checks matchedBreaks, 84 of 698 checks matched
33.8Breaks, 6 of 14 checks matchedDiffers, 6 of 12 checks matchedDiffers, 1 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 87 checks matchedDiffers, 1 of 41 checks matchedDiffers, 68 of 110 checks matchedBreaks, 215 of 479 checks matched
31.4Differs, 5 of 12 checks matchedDiffers, 10 of 12 checks matchedDiffers, 2 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 10 of 16 checks matchedDiffers, 8 of 11 checks matchedDiffers, 3 of 16 checks matchedDiffers, 1 of 87 checks matchedDiffers, 6 of 41 checks matchedDiffers, 87 of 96 checks matchedDiffers, 1 of 80 checks matched
21.5Breaks, 3 of 12 checks matchedBreaks, 3 of 12 checks matchedBreaks, 1 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 1 of 81 checks matchedDiffers, 1 of 41 checks matchedDiffers, 139 of 141 checks matchedBreaks, 1 of 80 checks matched
20.1Differs, 5 of 12 checks matchedDiffers, 6 of 12 checks matchedBreaks, 1 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 6 of 16 checks matchedDiffers, 2 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 80 checks matchedDiffers, 2 of 41 checks matchedDiffers, 42 of 51 checks matchedDiffers, 0 of 80 checks matched
18.1Breaks, 3 of 12 checks matchedBreaks, 5 of 12 checks matchedDiffers, 1 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 8 of 16 checks matchedDiffers, 2 of 11 checks matchedDiffers, 1 of 16 checks matchedDiffers, 1 of 81 checks matchedDiffers, 2 of 41 checks matchedDiffers, 47 of 50 checks matchedBreaks, 0 of 80 checks matched
15.2Differs, 5 of 12 checks matchedDiffers, 1 of 3 checks matchedNot measured, 0 of 2 checks matchedDiffers, 1 of 4 checks matchedNot measuredNot measuredNot measuredNot measuredDiffers, 0 of 4 checks matchedDiffers, 0 of 2 checks matchedBreaks, 0 of 77 checks matched
13.7Breaks, 4 of 12 checks matchedDiffers, 5 of 12 checks matchedDiffers, 1 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 80 checks matchedDiffers, 1 of 41 checks matchedDiffers, 18 of 27 checks matchedBreaks, 0 of 80 checks matched
13.3Differs, 6 of 12 checks matchedDiffers, 2 of 12 checks matchedDiffers, 0 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 80 checks matchedDiffers, 1 of 41 checks matchedDiffers, 30 of 51 checks matchedDiffers, 1 of 80 checks matched
10.5Breaks, 4 of 12 checks matchedDiffers, 1 of 12 checks matchedDiffers, 0 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 4 of 16 checks matchedDiffers, 3 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 8 of 79 checks matchedDiffers, 1 of 41 checks matchedNot measuredDiffers, 6 of 80 checks matched
7Breaks, 2 of 12 checks matchedDiffers, 1 of 12 checks matchedDiffers, 0 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 80 checks matchedDiffers, 1 of 41 checks matchedDiffers, 23 of 25 checks matchedDiffers, 0 of 80 checks matched
4.3Breaks, 3 of 12 checks matchedDiffers, 1 of 12 checks matchedDiffers, 0 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 11 checks matchedDiffers, 0 of 16 checks matchedDiffers, 0 of 12 checks matchedDiffers, 0 of 41 checks matchedNot measuredDiffers, 0 of 80 checks matched
3.3Differs, 2 of 12 checks matchedDiffers, 1 of 12 checks matchedDiffers, 0 of 10 checks matchedDiffers, 0 of 6 checks matchedDiffers, 0 of 16 checks matchedBreaks, 0 of 11 checks matchedDiffers, 0 of 16 checks matchedNot measured, 0 of 87 checks matchedDiffers, 1 of 41 checks matchedNot measured, 0 of 334 checks matchedNot measured, 0 of 739 checks matched

Tier 0 is the wire contract only: frames, types and bulk load. It is not the SQL dialect, performance, durability or feature coverage. A high score means drivers and tools can talk to the engine as they do to the reference; it does not mean your queries behave the same.

Dataset 45a7361f915b, audited 23 October 2026.

What it covers

Five protocols, each against its own releases, at every layer a client touches: connection and authentication, query flows, errors and cancel, the type contract, bulk load, replication, the catalog queries clients send, and the originals’ own test suites.
  • PostgreSQL wire13 to 18
  • MySQL wire5.7 to 9
  • MongoDB wire6.0 to 8.0
  • Elasticsearch REST7 to 9
  • Redis7.2 and 8.2, RESP2 and RESP3

Why the numbers hold up

A refusal is loud; a different answer is quiet, because the client gets it without an error. The report keeps the two apart, and every row says exactly what was measured.
  • Expected values come from the real engine, never written by hand; each original is also run against its own recording.
  • A crash is charged only when the server is seen to go down or restart.
  • Catalog queries come from the clients themselves: pgx, pgjdbc, psql, pg_dump, the mysql CLI, mongosh, Kibana and others.
compat.json, dataset 45a7361f915b
{
"id": "cockroachdb-pgwire",
"claims": "18.0.0",
"baseline": {"reference": "postgres-18"},
"image_digest": "cockroachdb/cockroach@sha256:c26ade77…",
"measured_at": "2026-10-23T13:09:30Z"
}

Try it

Go 1.27 and Docker with compose v2. Bring up an original and an engine, record what the original answers, run the engine against it, then open out/site/report.html.
Terminal
make build
bin/conformity targets up postgres-18 cockroachdb
bin/conformity golden -t postgres-18
bin/conformity run -t cockroachdb
bin/conformity reports export --format site,html -o out/site
bin/conformity targets down postgres-18 cockroachdb

Measure your build

A branch, a nightly or a server with a compatibility switch: describe the endpoint in a small YAML file and run against it. Without a compose file the tool only connects; it never starts or stops anything. Nothing needs an account or a cloud service.
mine/my-engine.yaml
name: my-engine
engine: my-engine
version: "branch-x"
role: subject
endpoints:
- protocol: pgwire # or mysql, mongo, elastic
host: 10.0.0.5
port: 5432
user: conformity
password: secret
database: conformity

For agents

conformity compare answers a migration question from the measured data: what is lost going from one engine to another, concept by concept, with the checks behind it. An MCP server gives an agent the same answers, and says “not measured” where there is none.
Terminal
conformity compare --from postgres-17 --to cockroachdb \
--concept "Bulk load" --format json

conformity mcp --dataset /path/to/export

The other tools