{"id":20576498,"url":"https://github.com/zalky/reflet","last_synced_at":"2025-07-21T12:03:44.683Z","repository":{"id":65730256,"uuid":"536371428","full_name":"zalky/reflet","owner":"zalky","description":"Tools for building Re-frame + React based web apps with graph and non-graph data models","archived":false,"fork":false,"pushed_at":"2023-05-01T13:20:24.000Z","size":2132,"stargazers_count":76,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-06-27T23:44:09.872Z","etag":null,"topics":["clojure","clojurescript","finite-state-machines","graphs","re-frame","react","reagent"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zalky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-09-14T01:37:19.000Z","updated_at":"2025-05-24T12:46:01.000Z","dependencies_parsed_at":"2025-04-14T18:33:11.896Z","dependency_job_id":"c0be477d-011d-4285-bf85-3c60b8ffd7f1","html_url":"https://github.com/zalky/reflet","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/zalky/reflet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalky%2Freflet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalky%2Freflet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalky%2Freflet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalky%2Freflet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zalky","download_url":"https://codeload.github.com/zalky/reflet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zalky%2Freflet/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266296802,"owners_count":23907012,"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","status":"online","status_checked_at":"2025-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["clojure","clojurescript","finite-state-machines","graphs","re-frame","react","reagent"],"created_at":"2024-11-16T05:45:59.319Z","updated_at":"2025-07-21T12:03:44.650Z","avatar_url":"https://github.com/zalky.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Reflet\n\n[![Clojars Project](https://img.shields.io/clojars/v/io.zalky/reflet?labelColor=blue\u0026color=green\u0026style=flat-square\u0026logo=clojure\u0026logoColor=fff)](https://clojars.org/io.zalky/reflet)\n\n\u003cimg src=\"https://i.imgur.com/1nfbVFZ.jpg\" title=\"zalky\" align=\"right\" width=\"250\"/\u003e\n\n**Reflet** is a set of tools for building\n[Re-frame](https://github.com/day8/re-frame) + React based web apps\nwith graph and non-graph data models.\n\nAt the core of Reflet is a single macro, `with-ref`, that generates\nreferences to any kind of thing, and also transparently manages the\nlifecycles of those things throughout your application. This leads to\nhighly extensible components, and excellent APIs.\n\nBesides `with-ref`, Reflet also provides:\n\n1. Performant multi-model DB with graph queries and mutations\n2. Data-driven descriptions: a new kind of polymorphic query\n3. Simple but powerful hierarchical FSMs\n4. JS and DOM interop utilities\n5. Novel API-driven visual debugging of complex apps (don't sleep on\n   this!)\n\nAnd more!\n\nReflet aims to be a natural progression on top of Re-frame to support\ncomplex, data-driven requirements. In that sense, it is both easy to\nlearn, but powerful. You could say it's sort of like Re-frame++ (or\nFulcro for Re-frame). Its main design goals are:\n\n1. A la carte feature set: it is not a \"framework\", so use as much or\n   as little of it as you want\n2. Power up existing Re-frame applications: iterative, minimal\n   approach to integration, so big re-writes can be avoided\n3. Graph and non-graph data models can be mixed freely with a single\n   source of truth: a Clojure map\n4. Entity references connect things together: this encourages\n   excellent, pluggable APIs\n5. Makes very few assumptions about your application boundaries\n6. Performance and stability: Reflet has already been deployed in\n   complex, data-driven production applications for 4+ years\n   (e.g. in Bioinformatics, Business analytics... )\n\n\u003cimg src=\"https://i.imgur.com/6MAwZgS.jpg\" title=\"zalky\" align=\"center\" width=\"1000\"/\u003e\n\n## Who Is This For?\n\n1. Anyone who needs a powerful graph data model for Re-frame\n2. You already have an existing non-graph Re-frame application, and\n   need to take it to the next level\n3. You are learning Re-frame, and want to get started right away with\n   scalable data models and well-built component APIs\n\n## Installation\n\nAt minimum include the following in your `deps.edn`:\n\n```clj\n{:deps {io.zalky/reflet {:mvn/version \"0.3.0-rc1\"}}}\n```\n\nOr `project.clj`:\n\n```clj\n[io.zalky/reflet \"0.3.0-rc1\"]\n```\n\nAdditionally, React is considered a peer dependency, so you will have\nto [ensure that it is\navailable](https://github.com/zalky/reflet/wiki/Configuration#react). The\nsame approach you would use to provide React for\n[Reagent](https://github.com/reagent-project/reagent) or\n[Re-frame](https://github.com/day8/re-frame) will also work for\nReflet.\n\nSee [the additional\nnotes](https://github.com/zalky/reflet/wiki/Configuration#debugger) on\nhow to configure the debugger for development.\n\n## Resources\n\nReflet builds on top of the concepts and design patterns of Re-frame,\nand these resources assume a working knowledge of Re-frame basics. If\nyou are not familiar with Re-frame, [check out that\ndocumentation](https://day8.github.io/re-frame/re-frame/) first, it is\nvery good. Otherwise:\n\n1. [Rationale and Overview](https://github.com/zalky/reflet/wiki#overview)\n2. [Quick Start](https://github.com/zalky/reflet/wiki/Quick-Start)\n3. [Configuration](https://github.com/zalky/reflet/wiki/Configuration)\n4. Features\n   - [References and Application Design](https://github.com/zalky/reflet/wiki/References-and-Application-Design)\n   - [Multi Model DB](https://github.com/zalky/reflet/wiki/Multi-Model-DB)\n   - [Graph Queries](https://github.com/zalky/reflet/wiki/Graph-Queries)\n   - [Polymorphic Descriptions](https://github.com/zalky/reflet/wiki/Polymorphic-Descriptions)\n   - [Finite State Machines](https://github.com/zalky/reflet/wiki/Finite-State-Machines)\n   - [Mutable State](https://github.com/zalky/reflet/wiki/Mutable-State)\n   - [Debugging](https://github.com/zalky/reflet/wiki/Debugging)\n   - [Testing](https://github.com/zalky/reflet/wiki/Testing)\n   - [Advanced Usage](https://github.com/zalky/reflet/wiki/Advanced-Usage)\n5. [Example Client](https://github.com/zalky/reflet/wiki/Example-Client)\n6. [General Development Tips](https://github.com/zalky/reflet/wiki/General-Development-Tips)\n\n## Getting Help\n\nYou can either submit an issue here on Github, or alternatively tag me\n(`@zalky`) with your question in the `#re-frame` channel on the\n[Clojurians](https://clojurians.slack.com) slack.\n\n## Contribution Acknowledgements\n\nSpecial thanks to [Inge Solvoll](https://github.com/ingesolvoll).\n\n## License\n\nReflet is distributed under the terms of the Apache License 2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzalky%2Freflet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzalky%2Freflet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzalky%2Freflet/lists"}