A reactive dataflow programming toolkit for Clojure/Script providing functional effect and streaming primitives.
Missionary is a reactive dataflow programming toolkit for Clojure and ClojureScript that provides functional effect and streaming primitives. It unifies continuous-time signals, discrete event streams, and IO actions into a consistent model, enabling glitch-free incremental computations and strict process supervision. The toolkit is designed to serve as a foundation for building sophisticated real-time applications, particularly in web and collaborative environments.
Clojure and ClojureScript developers building real-time, reactive, or data-intensive applications, such as collaborative tools, streaming systems, or UI frameworks. It is also suitable for those interested in functional effect systems and FRP/dataflow programming paradigms.
Developers choose Missionary for its rigorous unification of functional effects and reactive programming, glitch-free computations, and strong resource cleanup guarantees. Its design prioritizes low-level control and seamless integration with Clojure's core abstractions, making it a practical yet powerful alternative to other reactive systems.
A functional effect and streaming system for Clojure/Script
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Ensures atomic propagation of changes without inconsistent states, as shown in the README example where intermediate values like 3 are skipped in diamond-shaped DAGs.
Automatically handles cancellation and failure propagation with strong resource cleanup, reducing error management boilerplate and enhancing reliability.
Combines continuous signals and discrete streams under a single Flow protocol, bridging functional effects and FRP for consistent reactive programming.
Leverages familiar Clojure abstractions like atoms and transducers, making it practical and accessible for existing Clojure developers.
The README states documentation is a current development priority, meaning learning resources are limited and may be incomplete for complex use cases.
Requires deep understanding of functional programming and reactive paradigms, leading to a steep learning curve compared to simpler libraries like core.async.
As a newer, specialized toolkit, it has a smaller community and fewer real-world examples than established alternatives, potentially slowing troubleshooting and integration.