1. Luminus
Think of Luminus as the seasoned, reliable choice for building web applications in Clojure. It’s a micro-framework that bundles a collection of well-regarded libraries into a cohesive whole, giving you a production-ready starting point out of the box.
When you create a new Luminus project, you get a fully functional web stack that you can customize. Its strength lies in its opinionated but flexible nature; it makes smart default choices for you but doesn't lock you in. With extensive documentation and a book dedicated to its architecture, it's particularly friendly for developers looking for a guided path to building robust web services.
2. Kit
Kit is the modern successor to Luminus, created by some of the same developers who wanted to incorporate lessons learned over the years. Its primary advantage is modularity. While Luminus asks you to pick your major components upfront, Kit is designed to let you add and modify dependencies more easily as your project evolves. It uses tools like the Clojure CLI and the Integrant library for state management, which makes for a more data-driven and flexible application structure. This makes Kit an excellent choice for startups or projects where requirements are likely to change.
3. Re-frame
When it comes to building user interfaces in ClojureScript (Clojure that compiles to JavaScript), re-frame is the undisputed champion. It’s a framework for creating single-page applications (SPAs) that leverages React via a library called Reagent. Its core idea is a simple, data-oriented loop: events cause changes to a central data store (the 'app-db'), and UI components 'subscribe' to that data, automatically re-rendering when it changes. This clean, unidirectional data flow makes complex UIs easier to reason about, test, and scale. It's mature, stable, and has a massive following for a reason.
4. Pedestal
If raw performance and building high-powered APIs are your goals, Pedestal is your framework. Developed by Cognitect (the stewards of Clojure), it's a set of libraries designed for building services that are sturdy and scalable. Pedestal is built around the concept of 'interceptors'—a pipeline of functions that process incoming requests and outgoing responses. This makes logic highly composable and testable. With built-in support for asynchronous processing, WebSockets, and server-sent events, it’s optimized for handling large volumes of traffic and real-time applications.
5. Duct
Duct takes a unique, data-driven approach to application architecture. Instead of relying on file structure or project templates, a Duct application is defined by an immutable configuration map. This blueprint describes all the components of your system and how they connect. Built on top of the Integrant library, Duct is highly modular and makes it easy to swap out components like databases or web servers. This focus on explicit configuration makes the system's structure transparent and easy to reason about, which is a huge benefit for long-term maintenance and managing complexity on large, server-side applications.
6. Ring & Compojure
This isn't a single framework but the foundational duo for much of Clojure's web development ecosystem. Ring is the specification that defines how Clojure web applications talk to servers—it’s the universal language. Compojure is a widely-used routing library that helps you match incoming requests to the correct handler function. While many full-featured frameworks build on top of them, you can absolutely build a web application using just Ring and a router like Compojure. This 'roll-your-own' approach gives you maximum control and a deep understanding of how everything works, though it requires more upfront decisions.
7. Biff
Biff is a full-stack framework designed to help solo developers and small teams move incredibly fast. It makes opinionated choices to create a polished, all-in-one experience, bundling everything from email authentication and deployment tooling to a simple, interactive UI system. A key feature is its focus on a simple, rapid development workflow, with changes automatically evaluated as you save files. While it provides a complete package, it's also designed to be taken apart, so you're not locked in as your project's needs become more complex. It's a pragmatic choice for getting from idea to launch quickly.













