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
- Pass a non-nil *sqlite.Config, e.g. &sqlite.Config{DatabaseName: "app", MigrationsTable: sqlite.DefaultMigrationsTable}.
- Validate config is non-nil before calling the driver constructor in your wiring code.
- 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
- Always construct the Config literal at the call site of WithInstance/WithConnection.
- Centralize driver setup in one helper so a nil config can't slip through.
- Fail fast in config loading: return an error if the loaded config is nil.
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.