{"id":26400565,"url":"https://github.com/carocad/rata","last_synced_at":"2026-04-02T01:35:22.977Z","repository":{"id":62432911,"uuid":"151778118","full_name":"carocad/rata","owner":"carocad","description":"State management through Datascript and Reagent","archived":false,"fork":false,"pushed_at":"2019-03-31T12:17:48.000Z","size":20,"stargazers_count":41,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-01-14T07:39:40.066Z","etag":null,"topics":["datascript","react","reagent","state-management"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carocad.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}},"created_at":"2018-10-05T21:07:21.000Z","updated_at":"2024-02-11T06:38:05.000Z","dependencies_parsed_at":"2022-11-01T21:16:17.652Z","dependency_job_id":null,"html_url":"https://github.com/carocad/rata","commit_stats":null,"previous_names":["hiposfer/rata"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/carocad/rata","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carocad%2Frata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carocad%2Frata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carocad%2Frata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carocad%2Frata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carocad","download_url":"https://codeload.github.com/carocad/rata/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carocad%2Frata/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293960,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:05:07.454Z","status":"ssl_error","status_checked_at":"2026-04-02T00:56:46.496Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["datascript","react","reagent","state-management"],"created_at":"2025-03-17T14:26:49.569Z","updated_at":"2026-04-02T01:35:22.960Z","avatar_url":"https://github.com/carocad.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rata\n\n[![Build Status](https://travis-ci.com/hiposfer/rata.svg?branch=master)](https://travis-ci.com/hiposfer/rata)\n[![Clojars Project](https://img.shields.io/clojars/v/hiposfer/rata.svg)](https://clojars.org/hiposfer/rata)\n\n\nState management through [Datascript](https://github.com/tonsky/datascript/)\nand [Reagent's](https://github.com/reagent-project/reagent) track mechanism\n\n## usage\n\nRata hooks itself into the transactor of Datascript. So you just need to register\nit against Datascript's connection. From that point onwards, you should use\n`rata/q!` and `rata/pull!` with the **connection**. Rata also provides a `transact!`\nfunctions which accepts a sequence of middlewares; middlewares are useful to add\nextra capabilities like transaction logging, data based effects, etc.\n\nCheck the [example](example) directory for a working project\n\n```clojure\n(ns example.core\n  (:require [reagent.core :as reagent :refer [atom]]\n            [datascript.core :as data]\n            [hiposfer.rata.core :as rata]))\n\n(def schema {:user/input {:db.unique :db.unique/identity}})\n\n(defn- logger\n  [middleware]\n  (fn log* [db transaction]\n    (let [transaction (middleware db transaction)]\n      (apply js/console.log (clj-\u003ejs transaction))\n      transaction)))\n\n;; state is a standard Clojure Atom containing a Datascript DB\n(defonce state (rata/listen! (data/create-conn schema)\n                             [logger])) ;; middleware chain\n\n(defn example\n  []\n  (let [click-count @(rata/q! '[:find ?count .\n                                :where [?input :user/input \"click\"]\n                                       [?input :click/count ?count]]\n                              state)]\n    [:div \"For each click, you get a greeting :)\"\n     [:input {:type \"button\" :value \"Click me!\"\n              ;; rata/transact! usage here instead of data/transact! ------\n              :on-click #(rata/transact! state [{:user/input \"click\"\n                                                 :click/count (inc click-count)}])}]\n     (for [i (range click-count)]\n       ^{:key i}\n       [:div \"hello \" i])]))\n\n(reagent/render-component [example] (. js/document (getElementById \"app\")))\n\n(defn on-js-reload [])\n```\n\n\n## License\n\nCopyright © 2018\n\nDistributed under LGPLv3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarocad%2Frata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarocad%2Frata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarocad%2Frata/lists"}