semaphoreui/semaphore · error
BoltDB is not supported starting from version 2.19
Error message
BoltDB is not supported starting from version 2.19
What it means
During interactive setup (`semaphore setup`), choosing option 2 (BoltDB) hits an intentional `panic`. BoltDB support was removed in Semaphore 2.19; the prompt still lists it marked NOT SUPPORTED so users migrating from old configs discover the removal explicitly rather than silently creating a broken config.
Solutions
- Choose 1 (MySQL), 3 (PostgreSQL), or 4 (SQLite) instead of BoltDB.
- If migrating old BoltDB data, export/upgrade via an intermediate Semaphore version that still supported BoltDB before 2.19.
- For scripted setups, feed the new default (MySQL/PostgreSQL) answer instead of 2.
- Store the database choice in the config file (`database.dialect`) to skip the interactive prompt entirely.
Example fix
// before (interactive answer) What database to use: 2 // after What database to use: 1 # MySQL (or 3 PostgreSQL / 4 SQLite)
Defensive patterns
Strategy: validation
Validate before calling
// in automation, sanitize the answer before feeding stdin: case "$DB_CHOICE" in 1|3|4) ;; # allowed *) echo "BoltDB unsupported; choose 1, 3, or 4" >&2; exit 1 ;; esac
Try / catch
// Go side: replace panic with a friendly error
if db == 2 {
fmt.Fprintln(os.Stderr, "BoltDB is not supported starting from version 2.19; choose MySQL, PostgreSQL, or SQLite")
os.Exit(1)
} Prevention
- Update old runbooks/scripts that still select BoltDB.
- Prefer non-interactive setup via a config.json with database.dialect set.
- Note the prompt still lists BoltDB as NOT SUPPORTED — never pick 2.
When it happens
Trigger: Answering `2` at the "What database to use" prompt of `semaphore setup`.
Common situations: Operators following old documentation or muscle memory from pre-2.19 installs; scripted/automated setup piping a legacy answer of 2 into the prompt.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Unsupported database dialect
- no admins found in database; create a admin first
- user with login not found
- err
- err
AI-assisted analysis of semaphoreui/semaphore@1774ccb71a (2026-09-07).
Data as JSON: /api/errors/74e4ae7358c208df.
Report an issue: GitHub.
Appendix: source
Thrown at cli/setup/setup.go:97
func InteractiveSetup(conf *util.ConfigType) {
fmt.Print(interactiveSetupBlurb)
dbPrompt := `What database to use:
1 - MySQL
2 - BoltDB (NOT SUPPORTED)
3 - PostgreSQL
4 - SQLite
`
var db int
askValue(dbPrompt, "1", &db)
switch db {
case 1:
conf.Dialect = util.DbDriverMySQL
scanMySQL(conf)
case 2:
panic("BoltDB is not supported starting from version 2.19")
case 3:
conf.Dialect = util.DbDriverPostgres
scanPostgres(conf)
case 4:
conf.Dialect = util.DbDriverSQLite
scanSQLite(conf)
default:
panic("Unsupported database dialect")
}
defaultPlaybookPath := filepath.Join(os.TempDir(), "semaphore")
askValue("Playbook path", defaultPlaybookPath, &conf.TmpPath)
conf.TmpPath = filepath.Clean(conf.TmpPath)
askValue("Public URL (optional, example: https://example.com/semaphore)", "", &conf.WebHost)
askConfirmation("Enable email alerts?", false, &conf.EmailAlert)
if conf.EmailAlert {View on GitHub (pinned to 1774ccb71a)