Open-Awesome
CategoriesAlternativesStacksSelf-HostedExplore
Open-Awesome

© 2026 Open-Awesome. Curated for the developer elite.

TermsPrivacyAboutGitHubRSS
  1. Home
  2. ClojureScript
  3. Javelin

Javelin

Clojurev3.9.2

A ClojureScript library for spreadsheet-like reactive dataflow programming with cells and formulas.

GitHubGitHub
817 stars43 forks0 contributors

What is Javelin?

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.

Target Audience

ClojureScript developers building interactive web applications who need a lightweight, functional approach to reactive state management without heavy frameworks.

Value Proposition

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.

Overview

Spreadsheet-like dataflow programming in ClojureScript.

Use Cases

Best For

  • Building reactive UIs in ClojureScript with Hoplon or other libraries
  • Implementing declarative state management in functional frontend apps
  • Creating computed values that automatically update based on dependencies
  • Managing complex dataflow graphs with transactional updates
  • Refactoring existing code using lenses for surgical state updates
  • Educational projects exploring reactive programming concepts in Clojure

Not Ideal For

  • Projects built with JavaScript or TypeScript that cannot adopt ClojureScript
  • Teams needing a full-stack framework with built-in UI components and routing
  • Applications requiring extensive third-party library integration outside the Clojure ecosystem
  • Developers uncomfortable with macro-based DSLs or functional reactive programming concepts

Pros & Cons

Pros

Declarative Dataflow

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.

Transactional Updates

Supports dosync for batching cell updates atomically, minimizing propagation overhead and improving performance, demonstrated in the transaction examples with cells a and b.

Bi-directional Lenses

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.

ClojureScript Integration

Leverages ClojureScript macros like cell= and defc= for concise formula definition, seamlessly fitting into functional programming workflows and enabling full macro expansion.

Cons

ClojureScript-Only

Tied exclusively to ClojureScript, making it unsuitable for projects using other languages or requiring broader JavaScript ecosystem compatibility, which limits adoption outside Clojure communities.

Macro Complexity

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.

Circular Dependency Risks

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.

Limited Tooling

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.

Frequently Asked Questions

Quick Stats

Stars817
Forks43
Contributors0
Open Issues6
Last commit2 years ago
CreatedSince 2013

Tags

#functional-programming#clojurescript#lenses#reactive-programming#frontend#dataflow#clojure#state-management

Built With

C
ClojureScript

Included in

ClojureScript1.1k
Auto-fetched 8 hours ago
Community-curated · Updated weekly · 100% open source

Found a gem we're missing?

Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.

Submit a projectStar on GitHub