Quickstart
Install the Boundary CLI
curl -fsSL https://get.boundary-app.org | bash
This installs all prerequisites (JVM, Clojure CLI, Babashka, bbin) and the boundary command.
Fallback if get.boundary-app.org is unavailable:
curl -fsSL https://raw.githubusercontent.com/thijs-creemers/boundary/main/scripts/install.sh | bash
Supports macOS, Debian/Ubuntu, Arch Linux, and WSL2. See Installation for manual setup.
Bootstrap a new project
boundary new my-app
cd my-app
This scaffolds a complete project with four core modules wired: core, observability, platform, and user.
Add optional modules before starting the system:
boundary add payments # PSP abstraction (Stripe / Mollie / Mock)
boundary add cache # Redis / in-memory caching
boundary list modules # See all 18 optional modules
Run database migrations
clojure -M:migrate up
Start the system
export JWT_SECRET="change-me-dev-secret-min-32-chars"
clojure -M:repl-clj
In the REPL:
(go)
;; => System started. Visit http://localhost:3000
;; After changing code:
(reset)
;; Full restart (after defrecord changes):
(halt)
(go)
Scaffold your first module
The interactive wizard is the standard way to create a module:
bb scaffold
If you want the same result without prompts, use the generated command directly. For example, a product module:
bb scaffold generate \
--module-name product \
--entity Product \
--field name:string:required \
--field sku:string:required:unique \
--field price:decimal:required
bb scaffold integrate product
# Apply the generated migration
clojure -M:migrate up
Then reload the system so the new routes are live:
(reset)
;; => Visit http://localhost:3000/admin/products
Run tests
clojure -M:test
clojure -M:test --focus-meta :unit
Next steps
-
Your First Module - see what the scaffolder generated
-
Key Concepts - learn the rules once, then reuse them everywhere
-
Functional Core / Imperative Shell - the pattern behind everything
-
Testing - unit, integration, and contract tests