# omcljs/om

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/omcljs-om).**

6,631 stars · 352 forks · Clojure

## Links

- GitHub: https://github.com/omcljs/om
- awesome-repositories: https://awesome-repositories.com/repository/omcljs-om.md

## Description

Om is a frontend state management library and reactive user interface framework that integrates ClojureScript functional programming with the React virtual DOM rendering engine. It provides a bridge to build responsive web interfaces where visual elements automatically update when underlying application data changes.

The project centers on a normalized state store that flattens complex data structures into a relational format. This data is accessed through a reader-based querying system, which decouples the user interface from the state by allowing components to declare specific data requirements that are resolved through a centralized read function.

State is managed via atomic mutations and transactions, ensuring that global application state transitions trigger targeted re-renders of dependent components. The framework also covers client-server data synchronization, identity-based data resolution, and the ability to render components to strings for server-side content delivery.

## Tags

### Web Development

- [ClojureScript-React Bridges](https://awesome-repositories.com/f/web-development/clojurescript-react-bridges.md) — Integrates ClojureScript functional programming models with the React rendering engine to build reactive user interfaces.
- [User Interface Frameworks](https://awesome-repositories.com/f/web-development/user-interface-frameworks.md) — Provides a functional API for interacting with a virtual DOM to create responsive web user interfaces. ([source](https://github.com/omcljs/om/blob/master/project.clj))
- [Client-Server State Synchronization](https://awesome-repositories.com/f/web-development/client-server-state-synchronization.md) — Coordinates data requests and updates using a reconciliation process that aligns local state with remote data sources. ([source](https://github.com/omcljs/om/wiki/Documentation-%28om.next%29))
- [Component State Management](https://awesome-repositories.com/f/web-development/frontend-development-tools/state-data-management/component-lifecycle-utilities/component-state-management.md) — Provides methods for managing component-level data and scheduling visual refreshes. ([source](https://github.com/omcljs/om/wiki/Documentation-%28om.next%29))

### Part of an Awesome List

- [Reader-Based State Querying](https://awesome-repositories.com/f/awesome-lists/data/data-querying/reader-based-state-querying.md) — Evaluates specific expressions to extract targeted pieces of application state using a dedicated reading function.
- [React Interface](https://awesome-repositories.com/f/awesome-lists/media/react-interface.md) — Powerful interface for building complex React-based applications.

### Data & Databases

- [Frontend State Normalization](https://awesome-repositories.com/f/data-databases/data-normalization/frontend-state-normalization.md) — Flattens complex nested data structures into a relational format for efficient storage and retrieval within the application state.
- [Data Value Normalization](https://awesome-repositories.com/f/data-databases/data-value-normalization.md) — Flattens complex data structures into a relational format and reconstructs them into trees for the interface. ([source](https://github.com/omcljs/om/wiki/Documentation-%28om.next%29))
- [Expression-Based Data Querying](https://awesome-repositories.com/f/data-databases/expression-based-data-querying.md) — Evaluates specific expressions to extract targeted pieces of application state using a dedicated reading function. ([source](https://github.com/omcljs/om/wiki/Quick-Start-%28om.next%29))
- [Frontend State Management](https://awesome-repositories.com/f/data-databases/frontend-state-management.md) — Implements a centralized state management architecture for handling data flow and synchronization in the browser.
- [State Mutations](https://awesome-repositories.com/f/data-databases/graphql-integrations/mutation-handlers/state-mutations.md) — Implements atomic state mutations to ensure global application state transitions trigger targeted re-renders of dependent components.
- [Client-Server State Synchronization](https://awesome-repositories.com/f/data-databases/client-server-state-synchronization.md) — Manages the synchronization and coherence between remote server state and local client caches.
- [Transactional Updates](https://awesome-repositories.com/f/data-databases/data-update-apis/transactional-updates.md) — Applies a group of data changes as a single unit to trigger updates across all dependent interface elements. ([source](https://github.com/omcljs/om/wiki/Documentation-%28om.next%29))
- [Dynamic Query Parameterization](https://awesome-repositories.com/f/data-databases/graph-querying/dynamic-query-execution/dynamic-query-parameterization.md) — Allows the parameters of a data request to be changed during execution to update displayed information. ([source](https://github.com/omcljs/om/wiki/Quick-Start-%28om.next%29))

### Software Engineering & Architecture

- [Atomic State Mutations](https://awesome-repositories.com/f/software-engineering-architecture/atomic-state-mutations.md) — Implements atomic state mutations to ensure global application state transitions trigger targeted re-renders of dependent components.
- [Store Normalization Architectures](https://awesome-repositories.com/f/software-engineering-architecture/data-normalization-layers/store-normalization-architectures.md) — Maintains application data in a flat map using unique identities to prevent duplication and simplify updates.
- [Declarative Data Fetching](https://awesome-repositories.com/f/software-engineering-architecture/declarative-data-fetching.md) — Specifies the exact data a component needs and manages the parameters used to fetch those updates dynamically. ([source](https://github.com/omcljs/om/wiki/Documentation-%28om.next%29))
- [Functional Reactive Programming Frameworks](https://awesome-repositories.com/f/software-engineering-architecture/functional-reactive-programming-frameworks.md) — Combines functional programming patterns with a reactive rendering engine to automatically update the user interface. ([source](https://github.com/omcljs/om/blob/master/pom.xml))
- [Identity-Based Data Resolution](https://awesome-repositories.com/f/software-engineering-architecture/identity-based-data-resolution.md) — Transforms flat data structures into hierarchical trees by resolving references between entities during the rendering phase.

### User Interface & Experience

- [Reader-Based Querying](https://awesome-repositories.com/f/user-interface-experience/component-utilities/ui-frameworks/rendering-models/declarative-frameworks/declarative-component-driven-interfaces/reader-based-querying.md) — Decouples the user interface from state by allowing components to declare data requirements resolved through a centralized read function.
- [State-to-UI Mapping](https://awesome-repositories.com/f/user-interface-experience/event-driven-state-managers/event-driven-state-synchronizers/ui-state-recomposition/state-to-ui-mapping.md) — Decouples state from the visual layer by transforming raw application state into formatted data for UI display. ([source](https://github.com/omcljs/om/wiki/Quick-Start-%28om.next%29))
- [Global State Managers](https://awesome-repositories.com/f/user-interface-experience/global-state-managers.md) — Stores shared data in a central location so any component can access it regardless of its position in the tree. ([source](https://github.com/omcljs/om/blob/master/README.old.md))
- [Reactive UI Frameworks](https://awesome-repositories.com/f/user-interface-experience/reactive-ui-frameworks.md) — Provides a framework for building interfaces that automatically update their visual state in response to data changes.
- [UI Components](https://awesome-repositories.com/f/user-interface-experience/ui-components.md) — Enables the creation of reusable UI components that encapsulate their own data requirements and identity resolution. ([source](https://github.com/omcljs/om/wiki/Quick-Start-%28om.next%29))
- [Virtual DOM Reconciliation](https://awesome-repositories.com/f/user-interface-experience/virtual-dom-reconciliation.md) — Maps a functional component tree to a real document object model using a diffing engine to update only changed elements.
- [Functional Components](https://awesome-repositories.com/f/user-interface-experience/functional-components.md) — Combines pure functional declarations with stateful lifecycle methods to build a reactive user interface hierarchy.
- [Data Merging](https://awesome-repositories.com/f/user-interface-experience/partial-page-refreshers/partial-prop-reloading/data-merging.md) — Combines new data fragments into the current application state and signals all affected components to refresh. ([source](https://github.com/omcljs/om/wiki/Documentation-%28om.next%29))
