golang-migrate/migrate · error

no config

Error message

no config

What it means

ErrNilConfig is a sentinel error returned by the sqlite driver's WithInstance and WithConnection when the *Config argument is nil. The driver needs a Config (database name / migrations table) to build the Driver. It signals a caller programming error rather than a database problem.

Source

Thrown at database/sqlite/sqlite.go:25

	"io"
	nurl "net/url"
	"strconv"
	"strings"
	"sync/atomic"

	"github.com/golang-migrate/migrate/v4"
	"github.com/golang-migrate/migrate/v4/database"
	_ "modernc.org/sqlite"
)

func init() {
	database.Register("sqlite", &Sqlite{})
}

var DefaultMigrationsTable = "schema_migrations"
var (
	ErrDatabaseDirty  = fmt.Errorf("database is dirty")
	ErrNilConfig      = fmt.Errorf("no config")
	ErrNoDatabaseName = fmt.Errorf("no database name")
)

type Config struct {
	MigrationsTable string
	DatabaseName    string
	NoTxWrap        bool
}

type Sqlite struct {
	db       *sql.DB
	isLocked atomic.Bool

	config *Config
}

func WithInstance(instance *sql.DB, config *Config) (database.Driver, error) {
	if config == nil {

View on GitHub (pinned to 01a9643f14)

Solutions

  1. Pass a non-nil *sqlite.Config, e.g. &sqlite.Config{DatabaseName: "app", MigrationsTable: sqlite.DefaultMigrationsTable}.
  2. Validate config is non-nil before calling the driver constructor in your wiring code.
  3. Alternatively use migrate.Open with a sqlite:// URL so the driver builds its own config.

Example fix

// before
d, err := sqlite.WithInstance(db, nil)
// after
cfg := &sqlite.Config{
    DatabaseName:    "app",
    MigrationsTable: sqlite.DefaultMigrationsTable,
}
d, err := sqlite.WithInstance(db, cfg)
Defensive patterns

Strategy: validation

Validate before calling

if cfg == nil {
    return fmt.Errorf("sqlite config must not be nil")
}

Type guard

func hasConfig(cfg *sqlite.Config) bool { return cfg != nil }

Try / catch

d, err := sqlite.WithInstance(db, cfg)
if err != nil {
    if errors.Is(err, sqlite.ErrNilConfig) {
        return fmt.Errorf("programming error: pass a *sqlite.Config: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Calling sqlite.WithInstance(db, nil) or sqlite.WithConnection(conn, nil) — passing a nil *Config pointer.

Common situations: Copy-pasted setup code with the Config literal removed or commented out; conditional config construction hitting a nil branch; DI containers injecting nil when a config file/env was absent.

Related errors


AI-assisted analysis of golang-migrate/migrate@01a9643f14 (2026-09-02). Data as JSON: /api/errors/bb1d129c594ac055. Report an issue: GitHub.