Skip to main content

A secure, local-first database migration tool

Project description

🐬 dbferry

A secure, local-first database migration tool — move your data safely between PostgreSQL, MySQL, SQLite, and more.

dbferry lets you migrate databases without exposing credentials or data to any third-party service. It’s open-source, local-first, and transparent by design.


✨ Key Features

  • 🔐 Local-first security — No telemetry, no external calls, no remote logs.
  • 🧱 Schema + Data migration — Migrate structure and contents seamlessly.
  • 🧩 Cross-engine support — PostgreSQL, MySQL, SQLite, and more (extensible via adapters).
  • 🧠 Resumable — Continue failed migrations without losing progress.
  • 📊 Verifiable — Check row counts and checksums for consistency.
  • 🧰 Simple YAML config — Readable, declarative, and versionable.
  • 🌐 Optional Local UI — Inspect and manage migrations with FastAPI-based web UI.

🚀 Quick Start

# Install using pip (simplest method)
pip install dbferry

# Install using uv tool
uv tool install dbferry

# Install using pipx (recommended for CLI tools)
pipx install dbferry

# Install directly from GitHub (latest development version)
pip install git+https://github.com/AbdLim/dbferry.git

Initialize your migration:

dbferry init

Then edit your generated migration.yml:

source:
    type: postgres
    url: postgresql://user:password@localhost/source_db

target:
    type: mysql
    url: mysql://user:password@localhost/target_db

options:
    migrate_schema: true
    migrate_data: true

Run the migration:

dbferry migrate --config migration.yml

Verify:

dbferry verify --config migration.yml

🧭 Philosophy

dbferry is built on a few simple but strict principles:

Principle Meaning
Local-first Everything runs on your machine. Nothing is sent out.
Transparent Open code, auditable behavior.
Composable Extend it for new databases or workflows.
Safe by default Never modifies the source database.
Verifiable Trust built through evidence, not claims.

🧩 Roadmap

  • PostgreSQL → MySQL/SQLite migrations
  • Checkpoint + resume system
  • Incremental sync support
  • CLI + Web UI parity
  • Plugin API for non-SQL engines (Mongo, ClickHouse, etc.)

🛡️ Security Promise

dbferry will never:

  • Send telemetry or logs to external servers
  • Store credentials outside your environment
  • Require network access beyond your databases

Everything happens locally — inspect the source and verify it yourself.


🤝 Contributing

We welcome community contributions!
Open an issue or PR at github.com/AbdLim/dbferry


📜 License

Licensed under the Apache License — see LICENSE for details.


“Move your data safely. Locally. Transparently.”
— The dbferry Project

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dbferry-0.1.0.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dbferry-0.1.0-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file dbferry-0.1.0.tar.gz.

File metadata

  • Download URL: dbferry-0.1.0.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for dbferry-0.1.0.tar.gz
Algorithm Hash digest
SHA256 608f30a4d4e5e2225efe65c79c3a2521c2b04f131dfbee3e2e9baf98788fdd72
MD5 aebfefcde02a979f48cb4f8d386588dc
BLAKE2b-256 3659c0b349ece9629c887d7d55ad3d50c96eae4e620577030b79d960c0ee9523

See more details on using hashes here.

File details

Details for the file dbferry-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: dbferry-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for dbferry-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 80bb31c1b2965c05becedc06e443037b06980a7f65a266116abb41909e7126ef
MD5 1377375a0e7a3ba506ac942a839cfe31
BLAKE2b-256 b153cac61cf3a76c414bed373a92b91e6b785e480dc3916c83f4f3467fa25e38

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page