A simple, decomplected, isomorphic HTML UI library for Clojure and ClojureScript that wraps React.
Rum is a simple, decomplected HTML UI library for Clojure and ClojureScript that wraps React. It provides an isomorphic solution for building user interfaces, functioning as a React wrapper in ClojureScript for dynamic client-side apps and as a static HTML generator in Clojure for server-side rendering. The library solves the need for a flexible, non-opinionated UI tool that doesn't enforce a specific state model.
Clojure and ClojureScript developers building web applications who want a minimal, flexible alternative to larger frameworks like Om or Reagent. It's ideal for teams needing isomorphic rendering or those who prefer to manage state independently.
Developers choose Rum for its simplicity, small codebase, and lack of enforced state model, allowing integration with any storage solution. Its decomplected design lets users pick only needed features, and it supports both client-side React interop and efficient server-side rendering.
Simple, decomplected, isomorphic HTML UI library for Clojure and 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.
Rum's source code is only about 900 lines, making it easy to understand and master, as highlighted in the README's principles section.
It does not enforce state storage, working seamlessly with atoms, DataScript, or custom solutions, allowing developers to choose their own architecture without constraints.
Supports both client-side React rendering in ClojureScript and server-side static HTML generation in Clojure, enabling efficient full-stack applications with hydration.
Offers a stable API for custom mixins to hook into component lifecycle stages, providing fine-grained control over behavior, as detailed in the 'Writing your own mixin' section.
The project is explicitly in support mode with no new development, which risks compatibility with future React versions and limits community-driven enhancements.
Optimizations like the rum/static mixin require manual implementation, and the Daiquiri compiler has limitations with certain Clojure forms, leading to potential runtime performance hits if not carefully managed.
As a minimal library, it lacks out-of-the-box solutions for common needs like routing or form handling, forcing reliance on external libraries or custom code.