Boundary is a batteries-included Clojure web framework — the complete toolset you need without having to select and configure dozens of separate libraries.
Why Boundary?
Most Clojure projects start with a blank deps.edn. From there you gradually assemble a stack: an HTTP server here, a database library there, a templating engine, a CLI tool, a scheduler… For every problem you pick a different library, each with its own conventions and configuration style.
Boundary flips this around. You start with the complete stack and remove what you don’t need. The choices have already been made — and they work together.
The Approach
Boundary follows the FC/IS architecture: Functional Core, Imperative Shell. All business logic lives in pure functions with no side effects. The shell — HTTP handlers, database queries, the file system — sits on the outside. This makes testing straightforward and reasoning about code predictable.
;; Functional core: pure logic
(defn apply-discount [order]
(if (> (:total order) 100)
(* (:total order) 0.9)
(:total order)))
;; Imperative shell: side effect
(defn process-order! [db order]
(let [total (apply-discount order)]
(db/insert! db :orders (assoc order :total total))))
What’s Next
In upcoming posts we will go deeper into:
-
The modules Boundary provides and how they fit together
-
How to bootstrap a new Boundary application
-
FC/IS in practice: examples from real projects
Boundary is currently in alpha. Feedback welcome via GitHub.