{"id":13850034,"url":"https://github.com/keechma/keechma","last_synced_at":"2025-10-22T02:45:18.669Z","repository":{"id":3876943,"uuid":"51198788","full_name":"keechma/keechma","owner":"keechma","description":"Micro frontend framework for ClojureScript and Reagent","archived":false,"fork":false,"pushed_at":"2022-12-06T14:34:53.000Z","size":838,"stargazers_count":326,"open_issues_count":10,"forks_count":11,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-04-14T22:25:11.421Z","etag":null,"topics":["clojurescript","keechma","reagent"],"latest_commit_sha":null,"homepage":"http://keechma.com","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/keechma.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-02-06T10:44:32.000Z","updated_at":"2024-03-23T11:18:34.000Z","dependencies_parsed_at":"2023-01-13T13:00:43.966Z","dependency_job_id":null,"html_url":"https://github.com/keechma/keechma","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keechma%2Fkeechma","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keechma%2Fkeechma/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keechma%2Fkeechma/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keechma%2Fkeechma/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keechma","download_url":"https://codeload.github.com/keechma/keechma/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225839485,"owners_count":17532305,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojurescript","keechma","reagent"],"created_at":"2024-08-04T20:00:56.781Z","updated_at":"2025-10-22T02:45:18.583Z","avatar_url":"https://github.com/keechma.png","language":"Clojure","funding_links":[],"categories":["Clojure"],"sub_categories":[],"readme":"# Keechma\n\n[![Clojars Project](https://img.shields.io/clojars/v/keechma.svg)](https://clojars.org/keechma)\n\nKeechma 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:\n\n- **Deterministic and predictable behavior**\n    + Based on the route, you can determine what the application's state will be\n    + UI never \"requests\" data it's always provided to it\n- **Unidirectional data flow**\n    1. Route params are derived from the URL\n    2. Application state is derived from the route params\n    3. UI is derived from the application state\n- **Loose coupling between components**\n    + Communication is performed through `core.async` channels\n- **Automatic synchronization of entities' states**\n    + An entity is any data loaded into the app that has an identity (e.g. `:id` column)\n    + Entities are stored in the EntityDB\n    + EntityDB propagates entity state to every place where that entity is displayed in the UI\n- **Enforced lifecycle (and memory safety)**\n    + Automatically load data on route change\n    + Automatically clean up stale data on route change\n    + Automatically set up event listeners on route change (e.g. listener on the WebSocket)\n    + Automatically tear down event listeners on route change\n- **Applications are first-class citizens**\n    + Applications can be started and stopped\n    + Applications can be passed around\n    + Applications can mount sub-applicationsns\n- **UI components are decoupled and reusable**\n    + UI components can declare it's dependencies\n    + Dependencies are injected when the application is started\n    + Each component has own context\n- **No shared globals**\n    + Router is bound to the application context\n    + App state is bound to the application context\n    + Multiple apps can run at the same time, each with own state\n\n## Documentation\n\nRead the [guides](http://keechma.com/01-introduction.html) or the [API docs](http://keechma.com/api/index.html) to find out more about Keechma.\n\n## Name\n\n\u003e Kičma (lat. columna vertebralis) is a Croatian word for backbone / spine.\n\nYes, it’s a nod to BackboneJS and SpineJS.\n\n\n## License\n\nCopyright \u0026copy; 2016 Mihael Konjevic.\n\nDistributed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeechma%2Fkeechma","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeechma%2Fkeechma","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeechma%2Fkeechma/lists"}