A declarative framework for building reactive web applications using a rules engine and relational data modeling.
Precept is a declarative programming framework for building reactive web applications. It uses a rules engine and relational data modeling to express application logic as declarative statements, aiming to reduce complexity by focusing on what the application should do rather than how it should do it.
Clojure and ClojureScript developers building complex, reactive web applications who want a declarative approach to state management and UI logic.
Developers choose Precept for its declarative paradigm, efficient rule-based reactivity via the Rete algorithm, and relational data model that simplifies handling complex state and derived computations.
A declarative programming framework
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Allows expressing application logic as rules with conditions and consequences, directly reducing incidental complexity by focusing on what is required rather than how, as inspired by 'Out of the Tar Pit'.
Uses the Rete algorithm via Clara for efficient re-rendering, where subscriptions only update when relevant facts change, avoiding unnecessary computations for performance-critical updates.
Models state as a graph of facts with a relational data model (entity-attribute-value tuples), enabling flexible queries, joins, and derived computations similar to Datomic.
Supports Datomic-style schemas for cardinality and uniqueness constraints, with separate client and database schemas, ensuring data integrity and easy access to persisted facts.
Provides immutable sessions through Clara, enabling advanced debugging and state inspection tools, such as tracking rule firings and fact changes, with devtools in alpha preview.
Unlike Datomic, Precept does not maintain a full history of facts to conserve browser memory, which can be a drawback for applications needing audit trails or undo/redo functionality.
Requires familiarity with Clojure/ClojureScript and tooling like Leiningen, posing a barrier for teams not already invested in this stack or preferring JavaScript/TypeScript.
Key features like advanced dev tools, general-purpose algorithms, and a ruleset API are still in development or alpha, indicating the framework is maturing and may lack polish for production use.
The Rete algorithm trades space for time by indexing nodes and storing fact memories, which could lead to higher memory usage in applications with many rules or complex state graphs.