A ClojureScript library for spreadsheet-like reactive dataflow programming with cells and formulas.
Javelin is a ClojureScript library that implements a spreadsheet-like reactive dataflow programming model. It provides cells (input and formula cells) that automatically propagate changes through dependencies, enabling declarative state management and efficient UI updates in functional frontend applications.
ClojureScript developers building interactive web applications who need a lightweight, functional approach to reactive state management without heavy frameworks.
Developers choose Javelin for its minimalistic, spreadsheet-inspired API that integrates seamlessly with ClojureScript's functional idioms, offering fine-grained reactivity without the complexity of larger FRP libraries.
Spreadsheet-like dataflow programming in ClojureScript.
Uses spreadsheet-like input and formula cells to automatically propagate changes, simplifying state management and reducing manual updates, as shown in the basic example with a, b, and c cells.
Supports dosync for batching cell updates atomically, minimizing propagation overhead and improving performance, demonstrated in the transaction examples with cells a and b.
Enables focused access and updates to nested data structures with converging and diverging lenses, allowing low-impact refactoring without modifying existing code, as illustrated with path-cell examples.
Leverages ClojureScript macros like cell= and defc= for concise formula definition, seamlessly fitting into functional programming workflows and enabling full macro expansion.
Tied exclusively to ClojureScript, making it unsuitable for projects using other languages or requiring broader JavaScript ecosystem compatibility, which limits adoption outside Clojure communities.
Relies heavily on macros for formulas, which can be opaque to debug and require familiarity with Clojure's macro system, as noted with unsupported forms like def in formulas causing errors.
Admits that circular dependencies between cells result in infinite loops at runtime, requiring careful graph design and adding complexity to error handling in reactive applications.
Has a smaller community and fewer resources compared to larger frameworks, which can slow down troubleshooting and adoption, as evidenced by the basic testing setup requiring npm and karma.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.