NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules
Last release today
13 Oct 2026
Ships fairly regularly
a new release about every 3 weeks
Some releases are documented
notes for 30 of 53 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
217 releases · first in 2021
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Upgrade dependencies and rebuild binaries with latest Go version (go1.23.1)
go1.23.1)Nothing published for this version
Nothing published for this version
Allow flags anywhere on the CLI
goose uses the default Go flag parsing library, which means flags must be defined before the
first positional argument. We've updated this behavior to allow flags to be defined anywhere. For
more details, see blog post.
WithDisableGlobalRegistry behavior (#783). When set, this will ignore globally-registered
migrationse entirely instead of the previous behavior of raising an error. Specifically, the
following check is removed:if len(global) > 0 {
return nil, errors.New("global registry disabled, but provider has registered go migrations")
}
This enables creating isolated goose provider(s) in legacy environments where global migrations may
be registered. Without updating this behavior, it would be impossible to use
WithDisableGlobalRegistry in combination with provider-scoped WithGoMigrations.
tstamp not nullable (#556)- id serial NOT NULL,
+ id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
- tstamp timestamp NULL default now(),
+ tstamp timestamp NOT NULL DEFAULT now()
- id serial NOT NULL,
+ id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
Nothing published for this version
Nothing published for this version
Nothing published for this version
Add GetVersions method to goose.Provider, returns the current (max db) version and the latest (max filesystem) version.
Add GetVersions method to goose.Provider, returns the current (max db) version and the latest
(max filesystem) version. (#756)
Clarify GetLatestVersion method MUST return ErrVersionNotFound if no latest migration is
found. Previously it was returning a -1 and nil error, which was inconsistent with the rest of the
API surface.
Add GetLatestVersion implementations to all existing dialects. This is an optimization to avoid
loading all migrations when only the latest version is needed. This uses the max function in SQL
to get the latest version_id irrespective of the order of applied migrations.
GetLatestVersion method.Nothing published for this version
Retracted. Broken release, please use v3.21.1 instead.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Expand the Store interface by adding a GetLatestVersion method and make the interface public.
Store interface by adding a GetLatestVersion method and make the interface public.goose.Provider
(#751):func (p *Provider) HasPending(context.Context) (bool, error) {}
The underlying implementation does not respect the SessionLocker (if one is enabled) and can
be used to check for pending migrations without blocking or being blocked by other operations.
.Up, .UpByOne, and .UpTo from goose.Provider will invoke .HasPending before
acquiring a lock with SessionLocker (if enabled). This addresses an edge case in
Kubernetes-style deployments where newer pods with long-running migrations prevent older pods -
which have all known migrations applied - from starting up due to an advisory lock. For more
details, refer to https://github.com/pressly/goose/pull/507#discussion_r1266498077 and #751../internal/testing and make it a separate Go module. This will allow
us to have a cleaner top-level go.mod file and avoid imports unrelated to the goose project. See
integration/README.md
for more details. This shouldn't affect users of the goose library.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Remove duckdb support. The driver uses Cgo and we've decided to remove it until we can find a better solution. If you were using duckdb with goose, pl
Bump github.com/opencontainers/runc to v1.1.12 (security fix)
redshiftGOOSE_MIGRATION_DIR documentationv1.1.12 (security fix)-- +goose annotations are now case-insensitive. This means that -- +goose Up and -- +goose up are now equivalent. This change was made to improve the user experience and to make the
annotations more consistent.Use [v3.19.1] instead. This was tagged but not released and does not contain release binaries.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Add environment variable substitution for SQL migrations.
Add environment variable substitution for SQL migrations. (#604)
This feature is disabled by default, and can be enabled by adding an annotation to the migration file:
-- +goose ENVSUB ON
When enabled, goose will attempt to substitute environment variables in the SQL migration
queries until the end of the file, or until the annotation -- +goose ENVSUB OFF is found. For
example, if the environment variable REGION is set to us_east_1, the following SQL migration
will be substituted to SELECT * FROM regions WHERE name = 'us_east_1';
-- +goose ENVSUB ON
-- +goose Up
SELECT * FROM regions WHERE name = '${REGION}';
Add native Turso support with libsql driver. (#658)
Fixed query for list migrations in YDB (#684)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
⚠️ Potential Breaking Change ⚠️
Apply() errors, add ErrNotApplied when attempting to rollback a migration
that has not been previously applied. (#660)WithDisableGlobalRegistry option to NewProvider to disable the global registry. (#645)-timeout flag to CLI to set the maximum allowed duration for queries to run. Default remains
no timeout. (#627)Provider when WithVerbose option is supplied. (#668)⚠️ Potential Breaking Change ⚠️
goose create to use UTC time instead of local time. (#242)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix sqlserver query to ensure DB version.
SetGlobalMigrations and ResetGlobalMigrations functions have been added.NewGoMigration for constructing Go migrations.goose.NewProvider.🎉 Read more about this new feature here:
https://pressly.github.io/goose/blog/2023/goose-provider/
The motivation behind the Provider was simple - to reduce global state and make goose easier to consume as an imported package.
Here's a quick summary:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix regression that prevented registering Go migrations that didn't have the corresponding files available in the filesystem.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →