A secure, local-first database migration tool
Project description
🐬 dbferry
A secure, local-first database migration tool — move your data safely between 2 Postgres Databases.
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).
- Verifiable — Check row counts and checksums for consistency.
- Simple YAML config — Readable, declarative, and versionable.
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
host: localhost
port: 5432
database: my-awesomedb
user: postgres
password: postgres
sslmode: require
target:
type: postgres
host: localhost
port: 5432
database: targetdb
user: postgres
password: postgres
sslmode: require
options:
tables:
- "*"
verify_after_migration: 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dbferry-0.1.2.tar.gz.
File metadata
- Download URL: dbferry-0.1.2.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09ea1e58cf9d1619dda64d05570d4e16a0871fd1f84fb74958743e27ccfb212c
|
|
| MD5 |
11f8cf228a7f5ea0112c892532a2afa7
|
|
| BLAKE2b-256 |
6420019f07760ea2b6afcefa86bd0b8dbf2c5c3c004d4d1aee9a3d98c12e515e
|
File details
Details for the file dbferry-0.1.2-py3-none-any.whl.
File metadata
- Download URL: dbferry-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b31d5d5fedbe096a861e2a4febf20278f26ad7801db618863dedd2342e73f832
|
|
| MD5 |
6a464b8763cb7afca919cf00dc46bebb
|
|
| BLAKE2b-256 |
d026d36579d5485ad143d477c915fdf8e61e8a6e02ed5c83a7966461e8f1112e
|