Relay
Contact

Migrate any databaseProve every row

A desktop app that moves data between any two databases, then checks both sides

Free and open source. macOS, Windows and Linux
Overview
Search connections…

Activity

Rows migrated in the last 30 days1 284 020+18% against the previous 30 days
Sep 11Today
VerifiedTo reviewFailed
Migrations
58
Verified
93%
Discrepancies
2
Connections
6

Connections

  • Customer platformdb-primary.eu-west.internal:5432/platformProductionPostgreSQL
  • Customer platform v2localhost:3306/platform_v2TestMySQL
  • Billing replicasql-replica.eu-west.internal:1433/billingStagingSQL Server
  • Contracts export~/Exports/contracts-2026-q3.csvDevelopmentCSV
  • Product analyticsdb.kqzrtmvplx.supabase.co:5432/postgresProductionSupabase
  • Data warehouseep-quiet-sky-a1b2.eu-central-1.aws.neon.tech/warehouseStagingNeon

Works with

  • PostgreSQL
  • Supabase
  • SQL Server
  • CSV
  • MySQL
  • SQLite
  • Parquet
  • Neon

Connect the databases you already have

Connections
  • Customer platformdb-primary.eu-west.internal:5432/platformProductionPostgreSQL
  • Customer platform v2localhost:3306/platform_v2TestMySQL
  • Billing replicasql-replica.eu-west.internal:1433/billingStagingSQL Server
  • Contracts export~/Exports/contracts-2026-q3.csvDevelopmentCSV
  • Product analyticsdb.kqzrtmvplx.supabase.co:5432/postgresProductionSupabase
  • Data warehouseep-quiet-sky-a1b2.eu-central-1.aws.neon.tech/warehouseStagingNeon

Relay suggests the mapping, you decide

Map
Customer platform Production, 5 tablesCustomer platform v2 Test, 0 tables
Source columnTarget columnConfidenceReason
CUST_IDid · KeySureSame values in every row
CUST_NAMEnameSureSame values in 98% of rows
CUST_BALANCEbalanceDoubtfulDecimal amounts, two places
CUST_EMAILemailSureEvery value is an email address
CUST_FAXNot migratedNo match
CUST_REG_NOregistration_numberSureLeading zeros, kept as text

Every migration ends with a proof

Customer platformCustomer platform v2
To reviewThe migration needs review128 402 rows migrated, 128 402 verified, 2 discrepancies to review
Source
128 402
Target
128 402
Discrepancies to settle
2
Discrepancies to settle
Amount shifted beyond toleranceinvoices.total_excl_tax · invoice_id=INV-2026-0008921 740.2321 740.21Discrepancy
Different datecontracts.signed_on · contract_id=CTR-004122021-12-212021-12-22Discrepancy

Questions

What teams ask before their first migration

Another question? Write to us

Is Relay really free?

Yes. Relay is open source under the Apache 2.0 license: no license key, no subscription, no trial. Download it, use it at work, read and change the code.

Where is the source code?

On GitHub, at github.com/bstcoc/relay. Issues and pull requests are welcome.

Do my rows go through Relay’s servers?

No. The engine runs on your computer and reads your databases directly. No row and no value is ever sent to us.

Which databases does Relay work with?

PostgreSQL, Supabase, Neon, SQL Server, MySQL and SQLite, plus CSV and Parquet files. Source and target can run on different engines, with different schemas.

Do I need to write a script or a config file?

No. You connect two databases, accept the suggested mapping column by column, run a dry run, then migrate. Everything happens in the app.

Is anything written to my target before I agree?

No. Relay offers a dry run before writing anything, and writes in a single transaction when the database allows it.

What happens when a check fails?

Relay names the discrepancy, with its column and its rows, and waits for your decision. Nothing is accepted for you.

What about personal data?

A migration from production to a non-production target masks personal data by default. You can turn it off, never forget it.

Where are my passwords kept?

In your system keychain, encrypted for your team, or read from your company’s vault. A password is never written in plain text, in a file, a log or an error message.

Your next migration, proved

Free and open source, for everyone on your team