Features
A complete database migration toolkit. Engine, CLI, SDK, AI integration, and web UI — all open source.
Columnar processing for maximum throughput
Apache Arrow Engine
Bani uses Apache Arrow as a universal columnar interchange format. Source data is read into Arrow RecordBatches, then written to the target database. This N-mapper architecture means you only need one reader and one writer per database, not an N-to-N matrix of converters.
- Zero-copy batch processing with pyarrow RecordBatch
- Memory-efficient streaming for large tables
- Automatic type mapping between database-specific types and Arrow types
- Consistent in-memory representation regardless of source or target
Declarative, version-controlled migrations
Bani Definition Language (BDL)
Define your migration in XML or JSON using BDL. Specify source and target connections, table mappings, column transformations, and index handling. Check your BDL files into version control alongside your application code.
- XML and JSON format support
- Table-level and column-level mapping control
- Schema evolution and transformation rules
- Environment variable references for secrets management
Pluggable architecture, community extensible
Connector System
Each database is supported through a connector plugin. Connectors implement a standard interface for reading schema, reading data, writing schema, and writing data. New connectors can be installed as Python packages and discovered via entry points.
- 5 built-in connectors: PostgreSQL, MySQL, MSSQL, Oracle, SQLite
- Standard connector interface for consistent behavior
- Entry-point-based discovery for community connectors
- Source-agnostic design: connectors work for both reading and writing
10 tools for AI-driven migrations
AI Integration (MCP Server)
Bani includes a built-in MCP (Model Context Protocol) server that exposes 10 tools. Connect it to Claude Desktop, Cursor, or any MCP-compatible AI agent. The agent can inspect databases, generate BDL configurations, validate them, and run migrations through natural language.
- Schema inspection and comparison tools
- BDL generation and validation
- Migration execution and progress monitoring
- Secure environment variable references (no plaintext credentials)
Real-time progress monitoring
Web Dashboard
A React-based web dashboard provides visual monitoring of running migrations. Track progress per table, view logs, and manage multiple migration projects. The backend uses Server-Sent Events (SSE) for real-time updates without polling.
- React UI with real-time SSE updates
- Per-table progress bars and row counts
- Structured log viewer with filtering
- Project management and history
11 commands for every workflow
CLI
The Bani CLI provides 11 commands covering the entire migration lifecycle. Initialize projects, inspect schemas, validate configurations, preview migrations, and run them. JSON output mode makes the CLI scriptable and CI/CD-friendly.
- bani init, run, validate, preview, status
- bani schema inspect, schema diff
- bani connectors list, connectors info
- bani mcp serve, mcp tools
- JSON output mode for automation
Programmatic control with a fluent API
Python SDK
The Python SDK provides a ProjectBuilder API for constructing migration projects programmatically. SchemaInspector enables analysis and comparison of database schemas. Use the SDK in scripts, notebooks, CI/CD pipelines, or your own applications.
- Fluent ProjectBuilder API
- SchemaInspector for schema analysis
- Full control over migration lifecycle
- Type-hinted API with comprehensive docstrings
Run everywhere your databases live
Cross-Platform
Bani ships as a Python package (pip install bani), a macOS menu bar application, a Docker image, and platform-specific installers. The same migration engine runs identically across all platforms.
- macOS .dmg with menu bar app
- Docker image for containerized deployments
- Linux .deb and .rpm packages
- Windows installer
- pip install for any Python environment
Ready to get started?
Install Bani in seconds and run your first migration.