Aiven Migration CLI Tools

Move data to Aiven, one curl away.

Shell scripts for migrating services to and from Aiven. No install step, no runtime deps — curl a script, run it, done. Like duckdb, but for your data pipelines.

Install any tool

$ curl -fsSL https://aiven.github.io/migration-hub/tools/kafka-migrate.sh | sh

Available tools

5 tools
kafka-migrate stable

Export topics and consumer group offsets from any Kafka cluster and replay into Aiven for Apache Kafka.

$ curl -fsSL tools/kafka-migrate.sh | sh
pg-migrate new

Dump a PostgreSQL database and restore into Aiven for PostgreSQL. Handles extensions and roles automatically.

$ curl -fsSL tools/pg-migrate.sh | sh
opensearch-migrate new

Snapshot indices from a self-managed OpenSearch or Elasticsearch cluster and restore into Aiven for OpenSearch.

$ curl -fsSL tools/opensearch-migrate.sh | sh
redis-export new

Stream Redis keyspace to RDB format and import into Aiven for Valkey or Caching. Preserves TTLs.

$ curl -fsSL tools/redis-export.sh | sh
mysql-migrate new

Migrate MySQL databases to Aiven for MySQL. Handles schema, data, and stored procedures with minimal downtime.

$ curl -fsSL tools/mysql-migrate.sh | sh
your-tool-here

Drop a .sh in tools/ and open a PR.

Adding a tool

Each tool is a self-contained shell script. Fork the repo, drop your script in tools/, and open a PR — that's it.

Step 01

Fork and create your script

Fork the repo and add a .sh file to tools/. The filename becomes the install URL.

$ git clone https://github.com/your-handle/migration-hub
$ cd migration-hub/tools
$ touch your-new-tool.sh
$ chmod +x your-new-tool.sh

Step 02

Add the metadata header

Five comment lines at the top tell the site what to display — name, description, status, author, and service.

#!/usr/bin/env sh
# name:        your-new-tool
# description: One line. What migrates where?
# status:      beta  # stable | beta | new
# author:      your-github-handle
# service:     kafka  # kafka | pg | opensearch…

set -e
# your migration logic here

Step 03

Open a pull request

Push your branch and open a PR against main. CI validates the header and the site updates automatically on merge.

$ git add tools/your-new-tool.sh
$ git commit -m "feat: add your-new-tool"
$ git push origin your-branch

# open a PR on GitHub
# deploys automatically on merge to main