Goose
What it is
Goose is a free, open-source database migration tool for managing schema changes through incremental SQL migrations and Go functions. It is available as both a command-line utility and a library, with platforms listed for API, Linux, macOS, self-hosted use, and Windows. The CLI can apply, roll back, redo, reset, inspect, and version migrations. SQL files use an up annotation and may include a down annotation; filenames can be timestamped or sequentially numbered. Migration statements run in one transaction by default, with an annotation to run them outside one. Go migration functions can run within a SQL transaction when passed a transaction argument.
The CLI lists drivers for ClickHouse, Microsoft SQL Server, MySQL, PostgreSQL, SQLite, Turso, Vertica, and YDB. Other listed options include embedded and out-of-order migrations, data seeding, and environment variable substitution. Library users configure a provider with a dialect, database connection, migration filesystem, and optional settings. Goose is licensed under the MIT License. Its listed plan is free.
For and against
For
- CLI supports applying, rolling back, and inspecting migrations.
- SQL and Go migration formats are supported.
- Lists drivers for eight database systems.
- Supports embedded migrations and data seeding.
- Free and open source under the MIT License.
Against
- Provider does not lock the database by default.
- ClickHouse support is limited to some deployment modes.
- Building from source requires Go 1.16 or later.
The verdict
Goose combines a migration CLI with a Go library and supports both SQL and Go migration functions. Callers need to coordinate safe concurrent migrations unless they configure a session locker.
Who it suits
Goose suits developers who want to manage database schema changes from a CLI or integrate migrations through a Go library. It is relevant for teams using one of its listed database drivers or self-hosting their setup.
Plans and prices
Goose
Open-source database migration tool
Read 7 Oct 2026 · github.com
On the record
- CLI and library
- The project is both a command-line utility and a library.pressly.github.io · read 7 Oct 2026
- Concurrency
- The provider does not lock the database during migrations by default, so callers must ensure migrations run safely; a session locker can coordinate them.pressly.github.io · read 7 Oct 2026
- Concurrency limitation
- By default, the provider does not lock the database during migrations, so the caller must ensure migrations are run safely; a session locker can be configured.pressly.github.io · read 7 Oct 2026
- Database driver responsibility
- When using the provider, callers are responsible for matching the SQL dialect to the database driver.pressly.github.io · read 7 Oct 2026
- Database support
- The documented CLI drivers include ClickHouse, MSSQL, MySQL, PostgreSQL, SQLite, Turso, Vertica, and YDB.pressly.github.io · read 7 Oct 2026
- Driver caveat
- The README warns that ClickHouse support is limited to some deployment modes and may require careful configuration or workarounds.github.com · read 7 Oct 2026
- Go migrations
- Go migration functions can run within a SQL transaction when given a transaction argument.pressly.github.io · read 7 Oct 2026
- Go requirement
- Building from source requires Go 1.16 or later.pressly.github.io · read 7 Oct 2026
- Library configuration
- A Goose provider accepts a database dialect, a database connection, a filesystem for migration files, and optional configuration.pressly.github.io · read 7 Oct 2026
- Library integration
- The Goose provider accepts a database connection and filesystem abstraction, including directory or embedded filesystems.pressly.github.io · read 7 Oct 2026
- License
- The GitHub repository states that Goose is licensed under the MIT License.github.com · read 7 Oct 2026
- Migration controls
- The CLI can apply, roll back, redo, reset, inspect, and version database migrations.pressly.github.io · read 7 Oct 2026
- Migration formats
- It manages database schemas with incremental SQL changes and Go migration functions.pressly.github.io · read 7 Oct 2026
- Migration options
- The project README lists embedded migrations, out-of-order migrations, data seeding, and environment variable substitution in SQL migrations.github.com · read 7 Oct 2026
- Migration transactions
- Statements in a migration file run in one transaction by default, with an annotation to run them outside a transaction.pressly.github.io · read 7 Oct 2026
- Purpose
- Goose is a database migration tool for managing database schemas with incremental SQL changes and/or Go functions.pressly.github.io · read 7 Oct 2026
- SQL migration format
- SQL migration files use an up annotation and may include an optional down annotation; filenames use a timestamp or sequential number.pressly.github.io · read 7 Oct 2026
- Supported database drivers
- The CLI lists ClickHouse, Microsoft SQL Server, MySQL, PostgreSQL, SQLite, Turso, Vertica, and YDB drivers.pressly.github.io · read 7 Oct 2026