Keechma is a micro framework for Reagent written in ClojureScript. It gives you a set of utilities that allow you to build applications that have the following properties:
- Deterministic and predictable behavior
- Based on the route, you can determine what the application's state will be
- UI never "requests" data it's always provided to it
- Unidirectional data flow
- Route params are derived from the URL
- Application state is derived from the route params
- UI is derived from the application state
- Loose coupling between components
- Communication is performed through
core.async
channels
- Communication is performed through
- Automatic synchronization of entities' states
- An entity is any data loaded into the app that has an identity (e.g.
:id
column) - Entities are stored in the EntityDB
- EntityDB propagates entity state to every place where that entity is displayed in the UI
- An entity is any data loaded into the app that has an identity (e.g.
- Enforced lifecycle (and memory safety)
- Automatically load data on route change
- Automatically clean up stale data on route change
- Automatically set up event listeners on route change (e.g. listener on the WebSocket)
- Automatically tear down event listeners on route change
- Applications are first-class citizens
- Applications can be started and stopped
- Applications can be passed around
- Applications can mount sub-applicationsns
- UI components are decoupled and reusable
- UI components can declare it's dependencies
- Dependencies are injected when the application is started
- Each component has own context
- No shared globals
- Router is bound to the application context
- App state is bound to the application context
- Multiple apps can run at the same time, each with own state
Read the guides or the API docs to find out more about Keechma.
Kičma (lat. columna vertebralis) is a Croatian word for backbone / spine.
Yes, it’s a nod to BackboneJS and SpineJS.
Copyright © 2016 Mihael Konjevic.
Distributed under the MIT License.