Liking cljdoc? Tell your friends :D

cli

Standalone CLI tool for bootstrapping new Wagoe projects and adding optional modules. Installed via bbin — does not require the monorepo. Generated projects are fully self-contained.

Published to Clojars as com.wagoe/wagoe-cli, in lockstep with the rest of the suite. As a CLI you normally install it with bbin rather than declaring it as a dependency.

Install

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

The installer handles all prerequisites: JVM, Clojure CLI, Babashka, bbin, and the wagoe command itself. Supports macOS, Debian/Ubuntu, Arch Linux, and WSL2.

Fallback if get.wagoe.org is unavailable:

curl -fsSL https://raw.githubusercontent.com/wagoebv/wagoe/main/scripts/install.sh | bash

Commands

Create a new project

wagoe new my-app            # Scaffold a new project
wagoe new my-app --force    # Overwrite existing directory
wagoe new my-app --no-user  # Leave out the user module

Generates a complete project with four core modules pre-wired: core, observability, platform, and user. The project is immediately runnable after clojure -M:migrate up.

--no-user

The user module brings authentication, sessions, MFA and an audit trail, and the four tables behind them: users, auth_users, user_sessions and user_audit_log. Most applications want it, so it is on by default.

An application with no accounts does not, and --no-user leaves it out. Measured on two projects generated side by side:

default--no-user

GET /health

200

200

GET /web/login

200

404

Tables created

auth_users, users, user_sessions, user_audit_log

none

JWT_SECRET required

yes

no

The choice is the :extra-modules set in the generated src/<your-project>/system_config.clj: {:wagoe/user} with the module, {} without. Turning it back on later is editing one word, not regenerating the project. It is a set in code rather than a key in config.edn because the user module is not something an application switches per environment. A database is still configured either way; if the application needs no persistence at all, remove :wagoe/sqlite from resources/conf/dev/config.edn as well.

Add a module

wagoe add payments          # PSP abstraction (Stripe / Mollie / Mock)
wagoe add cache             # Redis / in-memory caching
wagoe add search            # Full-text search (Meilisearch)
wagoe add jobs              # Background job processing

Adds the dependency to deps.edn and the module’s key to resources/conf/{dev,test}/config.edn. Nothing else has to change: the module describes its own Integrant components, and system-config builds them because the config now names it.

Diagnose a project

wagoe doctor                # Check the project, print the one thing to fix
wagoe doctor --env prod     # Check a profile other than dev
wagoe doctor --ci           # Exit non-zero when anything errors

Run from inside a project. It runs four checks in the order their answers depend on each other:

StageWhat it checksStops the run

Environment prerequisites

Java, Clojure CLI, Babashka, Node, dev ports, clj-kondo, AI providers

yes

Configuration

config.edn parses, #env refs resolve, providers are known, secrets are set

yes

Commands and aliases

every deps.edn alias resolves and the key entrypoints run

no

Project setup

dev config, module integration, migrations, seed data

no

The first two stop the run because everything after them would report the same problem in another way — a broken config.edn fails every command that boots the system, and the alias that failed is not the thing to fix.

Each stage is a bb task in the project (bb doctor:env, bb doctor, bb smoke-check, bb guide next), and CI calls those directly with --ci. wagoe doctor reads their --edn output so it can end with one next action rather than four screens.

For code quality rather than setup, run bb check.

List available modules

wagoe list modules          # Human-readable table
wagoe list modules --json   # Machine-readable JSON

Show version

wagoe version

Generated project structure

my-app/
├── deps.edn          # Clojure deps with :migrate, :repl, :test aliases
├── bb.edn            # Babashka tasks (scaffold, check, doctor, deploy, ...)
├── dev-config.edn    # Development environment config
├── test-config.edn   # Test environment config
├── src/
│   └── my_app/
│       └── system.clj    # Component system wiring
└── AGENTS.md         # AI agent context file

Manual bbin install (advanced)

If you prefer to manage your own bbin installation:

bbin install https://github.com/wagoebv/wagoe \
  --tag v1.0.0-beta-6 \
  --git/root libs/wagoe-cli \
  --main-opts '["-m" "wagoe.cli.main"]' \
  --as wagoe

AI agent tooling

The installer also installs clj-nrepl-eval and clj-paren-repair from clojure-mcp-light for REPL-over-MCP workflows:

clj-nrepl-eval --discover-ports   # Connect AI agent to running REPL

Can you improve this documentation? These fine people already did:
Thijs Creemers & thijscreemers
Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close