Back to blog
2026-07-31 Thijs Creemers

Release: v1.0.0-beta-3 — the documented first run now works


1.0.0-beta-2 advertised a first-run flow that did not work on a machine with nothing installed. This release fixes that. Every failure below was measured in a clean ubuntu:24.04 container, not inferred.

If you tried Wagoe in the last week and gave up somewhere between the install one-liner and a running app, this is the release to try again with.

Fixed: install.sh failed three ways on clean Linux

Three separate bugs (BOU-226), each of which alone was enough to stop a new user:

  • No prerequisite check. A bare image died after about a second on sdkman’s own "Please install unzip" — an error about a tool the user never asked for, printed under a screenful of sdkman ASCII art, never once naming Wagoe. The installer now checks curl, git, unzip and zip up front and prints the exact install command for the detected OS.

  • sdkman aborted right after saying "All done!". Sourcing its init script under set -euo pipefail failed on SDKMAN_CANDIDATES_API: unbound variable. The source and the subsequent sdk install now run under set +u.

  • sudo was assumed to exist, which it does not in containers or minimal images. Worse, the steps were written sudo ./installer && rm installer, and set -e exempts every command in an && list except the last — so a failed install fell straight through and printed ✓ Clojure CLI installed having installed nothing at all. There is now an as_root() helper and reachable || fail handling.

Fixed: a new project could not complete its own quickstart

The setup wizard listed PostgreSQL first and defaulted to it (BOU-228). Both a non-interactive run and a user simply pressing Enter therefore selected a database server that was not installed and whose driver was not on the classpath. Migration died on ClassNotFoundException: org.postgresql.Driver, and nothing ever served.

The generated config also used :database-path where the platform’s config reader looks for :db, producing database-path nil and a Malli validation abort at migration time.

Changed: new projects default to SQLite

Previously H2. SQLite needs no server and, unlike in-memory H2, the data survives a restart. org.xerial/sqlite-jdbc now ships in a generated project’s deps.edn, and the generated config reader gained the :wagoe/sqlite branch it had been missing.

bb setup defaults to SQLite on all three entry points — the interactive menu, bb setup ai, and flag invocations such as bb setup --payment mock.

Changed: quickstart tells the truth

bb quickstart no longer runs the configuration wizard over a config that wagoe new has just written. Pass --preset <name> when you want to reconfigure deliberately.

Its banner now says it will verify rather than start. It never started the app, and claiming otherwise sent people hunting for a failure that had not happened.

Known gaps

Two things a new project still cannot do. Both are tracked and neither is fixed here:

  • /admin returns 404. com.wagoe/wagoe-admin ships in deps.edn, but :wagoe/admin is not wired into the generated config (BOU-229).

  • There is no :run alias, no -main and no :build alias, so a generated app can only be started from a REPL via (go) (BOU-254).

Version alignment

All 29 published artifacts are at v1.0.0-beta-3 under the com.wagoe group, maintaining lockstep versioning.

Upgrade

Re-run the installer to pick up the latest release:

curl -fsSL https://get.wagoe.org | bash

No API changes. If you generated a project on beta-2 and hit the PostgreSQL default, the quickest path is to regenerate it with wagoe new on beta-3 rather than patch the config by hand.