A fast data-driven routing library for Clojure and ClojureScript with bi-directional routing and pluggable coercion.
Reitit is a fast, data-driven routing library for Clojure and ClojureScript that handles both server-side and client-side routing. It solves the problem of defining, matching, and generating URLs in a consistent, extensible way across different web frameworks like Ring, Pedestal, and frontend applications.
Clojure and ClojureScript developers building web applications, REST APIs, or single-page apps who need a robust, performant routing solution with strong validation and framework integration.
Developers choose Reitit for its combination of speed, modularity, and excellent developer experience—offering bi-directional routing, pluggable coercion with popular validation libraries, and seamless integration with the Clojure ecosystem.
A fast data-driven routing library for Clojure/Script
Routes are defined as plain Clojure data structures, enabling easy composition and programmatic manipulation, as shown in the quick start with vector-based definitions.
Integrates seamlessly with Malli, Schema, and clojure.spec for automatic request/response validation, reducing boilerplate and ensuring data integrity, demonstrated in the Ring example with coercion errors.
Offers first-class support for Ring, HTTP interceptors, Pedestal, and frontend routing, allowing consistent routing logic across server and client applications.
Core routing is separated from optional modules like OpenAPI and Swagger, enabling lean deployments and customization, though this adds setup complexity.
Benchmarked as fast with efficient route matching and generation, crucial for high-traffic applications, as highlighted in the README's performance section.
The modular design requires selecting and integrating multiple dependencies for features like coercion and middleware, complicating initial setup compared to all-in-one solutions.
Mandates Clojure 1.11 and Java 11+, which may hinder adoption in legacy projects or environments with older JVM versions.
The data-driven approach and extensive use of route data can be challenging for developers unfamiliar with Clojure's functional idioms or coming from imperative routing libraries.
Common functionalities like middleware and interceptors are in separate modules, adding dependency management overhead versus integrated frameworks.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.