An isomorphic, bidirectional routing library for Clojure and ClojureScript with extensible, data-oriented routes.
Silk is an isomorphic routing library for Clojure and ClojureScript that provides bidirectional route matching and generation. It solves the problem of tightly coupled, unidirectional routing in web applications by treating routes as named, data-oriented structures that work seamlessly across server and client environments.
Clojure and ClojureScript developers building web applications, especially those requiring isomorphic routing (same routes on server and browser) or single-page applications with complex navigation needs.
Developers choose Silk for its pure, bidirectional routing model, extensible patterns, and data-oriented design, which offers greater flexibility and debuggability compared to macro-based routing libraries while maintaining compatibility across Clojure platforms.
Routing for Clojure & ClojureScript
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Core routing works identically in Clojure and ClojureScript, designed from the ground up for seamless server-client routing, as stated in the README's design goals.
Named routes support both URL matching and generation, preventing broken links by reducing coupling, which is a key philosophy highlighted in the documentation.
Routes are plain data structures, not macros, making them easy to create, transform, and inspect at runtime, enhancing debuggability and flexibility.
Custom patterns can be defined via the Pattern protocol, allowing environment-specific constraints like HTTP methods, as demonstrated in the README examples.
The README explicitly states that the 'Reasonably Performant' goal is not yet met and there are no benchmarks, leaving performance unverified for real-world use.
Status section warns it's 'very much a work-in-progress' with everything subject to change, making it risky for production deployments.
Currently lacks browser-specific code, which may hinder advanced client-side routing features until future updates, as noted in the README.