On this page
Overview
goose is a CLI and Go library for incremental database-schema changes. It supports SQL migrations, Go-function migrations, embedded migrations, out-of-order application, seeding, environment-variable substitution, and drivers for PostgreSQL, MySQL, SQLite, Spanner, ClickHouse, MSSQL, and more.
Features and best fit
Based on official documentation; not hands-on tested · Content checked:
Key features
Manage SQL and Go-function migrations through one version workflow
Timestamped or sequential migrations can be created and moved through up, down, up-to, down-to, redo, status, and related commands.
Sources: [2]
Best fit
Fits Go projects that want schema migrations maintained alongside application code
It works as both a standalone CLI and an embeddable library, making it suitable for repositories that want SQL and Go-code migrations in the same deployment workflow.
Sources: [2]
Before adoption
v3.28.0 raises the minimum to Go 1.26 and changes some driver-specific version-table behavior
The v3.28.0 go.mod declares Go 1.26. The release adds Azure SQL and a MySQL/MariaDB table locker, and changes new ClickHouse version-table ordering plus MySQL/TiDB timestamp column types. Verify version-table schema, locking, and driver-specific behavior when upgrading.
Official sources
- [1]pressly/goose — GitHub repository(2026-10-06)
- [2]goose v3.28.0 — README(2026-10-06)
- [3]goose v3.28.0 — go.mod(2026-10-06)
- [4]goose v3.28.0 release(2026-10-06)
- [5]goose MIT license(2026-10-06)
Supplemental curator note
goose supports both SQL and Go-function migrations, including embedding and seeding. Production deployments should pin migration ordering and immutability, locking strategy, transaction expectations, and driver build tags.
Try it in 3 steps
- 1
Get the source
git clone --depth 1 https://github.com/pressly/goose.git - 2
Enter the repository
cd goose - 3
Check the official steps
Continue with the commands in the README Installation, Quick Start, or Getting Started section.
find . -maxdepth 1 -iname 'README*' -exec sed -n '1,220p' {} \; -quit
Growth
Growth trends · Last 30 days
11,544 Stars
Trend data is still being collected.
Development activity
Last 90 days · weekly
- Commits (last 30 days)
- 3
- Open PRs
- 44
Development activity is still being collected.
Built with
Categories and tags
GitHub data
GitHub dataView detailed GitHub data
GitHub Topics
- database
- sql
- migration
- schema
- postgres
- mysql
- sqlite
- golang
- go
- migrations
- database-migrations
- postgresql
Related information
Write a related articleShare a guide or use case for this OSS in Markdown. Articles are published after administrator approval.
Explore next
- PostgreSQL22,283 Stars
4 shared tag(s) · 1 shared category(s)
combine SQL transactions, constraints, indexes, and extensible types/functions in an object-relational database engine
C - Diesel14,193 Stars
4 shared tag(s) · 1 shared category(s)
validate SQL queries and schemas with Rust's type system through an ORM and query builder
Rust - node-postgres13,219 Stars
4 shared tag(s) · 1 shared category(s)
connect Node.js directly to PostgreSQL with pools, parameterized queries, and LISTEN/NOTIFY
JavaScript - MySQL Server12,441 Stars
4 shared tag(s) · 1 shared category(s)
Run relational workloads with InnoDB transactions, SQL, replication, and high-availability tooling
C++ - SeaORM9,914 Stars
4 shared tag(s) · 1 shared category(s)
manage asynchronous queries, relations, and migrations with a relational ORM for Rust
Rust - Postgres.js8,728 Stars
4 shared tag(s) · 1 shared category(s)
build parameterized SQL safely through tagged templates with a lightweight PostgreSQL client
JavaScript
Report incorrect information
Tell us if any listing information is incorrect or outdated.