About Bani

Open-source database migrations, built the right way.

Why Bani exists

Database migrations are one of the most common yet painful operations in software engineering. You need to move data from one database to another — maybe you are switching vendors, upgrading versions, consolidating systems, or splitting a monolith. The operation should be straightforward, but existing tools make it harder than it needs to be.

Commercial tools like FullConvert work, but they are expensive, Windows-only, and closed source. pgloader is excellent for PostgreSQL targets but cannot write to MySQL, MSSQL, Oracle, or SQLite. Most teams end up writing custom scripts that are fragile, untested, and thrown away after a single use.

Bani was created to be the open-source, cross-platform, any-to-any database migration engine that the industry needs. It uses Apache Arrow as a universal columnar interchange format, so adding a new database requires only one reader and one writer — not an N-to-N matrix of converters.

How it works

Bani reads data from a source database into Apache Arrow RecordBatches — a columnar, memory-efficient in-memory format. It then writes those RecordBatches to the target database. Schema, data, and indexes are all handled. This architecture means five connectors give you 20 migration paths (any-to-any), not 20 custom converters.

Migrations are defined declaratively using the Bani Definition Language (BDL) in XML or JSON. BDL files are designed to live in version control alongside your application code. No more undocumented one-off scripts.

About the creator

Bani was created by David Mugume, a software engineer who got tired of writing throw-away migration scripts and paying for proprietary tools that only ran on Windows. David built Bani to be the tool he wanted to use: open source, cross-platform, automation-friendly, and designed for the age of AI-assisted development.

Project values

  • Open source: Apache-2.0 licensed. Free to use, modify, and distribute. The core migration engine will always be open source.
  • Clean code: Well-tested, type-hinted Python. Comprehensive documentation. A codebase that contributors can understand and improve.
  • Agent-native: Built from the start with AI agents in mind. The MCP server is not an afterthought — it is a first-class interface alongside the CLI and SDK.
  • Data correctness: Migrations must be correct. Type mappings are carefully designed, edge cases are handled, and data integrity is validated.

Get involved

Bani is a community project. Whether you want to report a bug, request a feature, contribute code, or just star the repository, your involvement is welcome.