{"id":13829660,"url":"https://github.com/flexsurfer/re-frisk","last_synced_at":"2025-05-14T10:10:06.044Z","repository":{"id":39974177,"uuid":"68603634","full_name":"flexsurfer/re-frisk","owner":"flexsurfer","description":"Take full control of re-frame app","archived":false,"fork":false,"pushed_at":"2025-03-14T10:31:31.000Z","size":10372,"stargazers_count":461,"open_issues_count":13,"forks_count":29,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-05-08T05:17:43.058Z","etag":null,"topics":["clj","cljs","debugger","developer-tools","devtools","electron","frisk","frisk-debugger","re-frame","re-frisk","reagent","tools","watch-events"],"latest_commit_sha":null,"homepage":"https://flexsurfer.github.io/conduit-re-frisk-demo/","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flexsurfer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2016-09-19T12:28:46.000Z","updated_at":"2025-03-14T18:12:25.000Z","dependencies_parsed_at":"2025-03-25T00:32:42.965Z","dependency_job_id":null,"html_url":"https://github.com/flexsurfer/re-frisk","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexsurfer%2Fre-frisk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexsurfer%2Fre-frisk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexsurfer%2Fre-frisk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexsurfer%2Fre-frisk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flexsurfer","download_url":"https://codeload.github.com/flexsurfer/re-frisk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254038710,"owners_count":22004157,"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":["clj","cljs","debugger","developer-tools","devtools","electron","frisk","frisk-debugger","re-frame","re-frisk","reagent","tools","watch-events"],"created_at":"2024-08-04T10:00:42.160Z","updated_at":"2025-05-14T10:10:05.997Z","avatar_url":"https://github.com/flexsurfer.png","language":"Clojure","funding_links":[],"categories":["Tools"],"sub_categories":["Debugging"],"readme":"# re-frisk\n\nTake full control of [re-frame](https://github.com/Day8/re-frame) application.\n\nLatest stable version: [![Clojars](https://img.shields.io/clojars/v/re-frisk.svg)](https://clojars.org/re-frisk) [![Clojars](https://img.shields.io/clojars/dt/re-frisk.svg)](https://clojars.org/re-frisk) [![Clojars](https://img.shields.io/clojars/v/re-frisk-remote.svg)](https://clojars.org/re-frisk-remote) [![Clojars](https://img.shields.io/clojars/dt/re-frisk-remote.svg)](https://clojars.org/re-frisk-remote)\n\n## DEMO\n\nhttps://flexsurfer.github.io/conduit-re-frisk-demo/\n\n## Features\n\n\u003cdetails\u003e\u003csummary\u003eCurrent state for app-db and subscriptions sorted by keys\u003c/summary\u003e\n\u003cimg src=\"./img/feature-app-db.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eWatching keys from app-db\u003c/summary\u003e\n\u003cimg src=\"./img/feature-watch.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eHistory for key in app-db\u003c/summary\u003e\n\u003cimg src=\"./img/feature-history.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eEvents with app-db difference for each event\u003c/summary\u003e\n\u003cimg src=\"./img/feature-event.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n### re-frame tracing (**Important**: trace should be [enabled](https://github.com/flexsurfer/re-frisk#enable-traces))\n\n(Note: With lots of events and high zoom might be slow, pause or clear events when working with timeline)\n\u003cdetails\u003e\u003csummary\u003eEvents and timeline\u003c/summary\u003e\n\u003cimg src=\"./img/feature-timeline.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eSubscriptions\u003c/summary\u003e\n\u003cimg src=\"/img/feature-subs.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eViews sorted by mount order with subscripions \u003c/summary\u003e\n\u003cimg src=\"/img/feature-views.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003ere-frame handlres statistics\u003c/summary\u003e\n\u003cimg src=\"/img/feature-stat.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eGraph for an epoch\u003c/summary\u003e\n\u003cimg src=\"/img/feature-event-subs-graph.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n(Note: with lots of subscriptions rendering might be slow!)\n\u003cdetails\u003e\u003csummary\u003e Graph accumulated for an app life with weights\u003c/summary\u003e\n\u003cimg src=\"/img/feature-subs-app-graph.png\" height=\"300\"\u003e\n\u003c/details\u003e\n\n## Usage\n\n`[re-frisk \"1.7.0\"]` \n`[re-frisk-remote \"1.6.0\"]` \n\n**Important**: Please note the following compatibility table:\n\nre-frisk Version     | React Version    | Reagent Versions \n-------------------- |------------------|-----------------\n`^1.7.0`             | ^React 18        | ^1.2.x          |\n`^1.3.4`             | React 16.13.0    | 1.x.x           |\n`1.1.0-1.3.3`        | React 16.13.0    | 0.10.x          |\n`1.0.0`              | React 16.9.0     | 0.9.x           |\n`0.5.3`              | React 16 - 16.8.6 | 0.8.x           | \n\n### Web application\n\n[![Clojars](https://img.shields.io/clojars/v/re-frisk.svg)](https://clojars.org/re-frisk)\n\nre-frisk will be embedded in the DOM of your application. So my suggestion is to use re-frisk-remote, it doesn't affect your application and has more features\n \n1. Add re-frisk as a dev dependency  `[re-frisk \"1.7.0\"]` \n\n2. Enable re-frisk\n\n    `:preloads [re-frisk.preload]`\n\n    OR if you want a hidden UI and open tool with Ctrl+H\n\n    `:preloads [re-frisk.preload-hidden]`\n\n    OR\n    \n    `(:require [re-frisk.core :as re-frisk])`\n    \n    `(re-frisk/enable)`\n      \n\n### React Native, Electron or Web applications\n\n[![Clojars](https://img.shields.io/clojars/v/re-frisk-remote.svg)](https://clojars.org/re-frisk-remote)\n\n1. Add re-frisk as a dev dependency `[re-frisk-remote \"1.6.0\"]` \n\n2. Enable re-frisk on default port (4567):\n\n    `:preloads [re-frisk-remote.preload]`\n\n    OR\n\n    `(:require [re-frisk-remote.core :as re-frisk-remote])`\n    \n    `(re-frisk-remote/enable)`\n    \n3. Start re-frisk on default port (4567):\n\n    `shadow-cljs run re-frisk-remote.core/start`\n\n    OR\n    \n    add in `deps.edn`\n    \n    `:aliases {:dev {:extra-deps {re-frisk-remote {:mvn/version \"1.6.0\"}}}}}`\n    \n    create `re_frisk.clj`\n    \n    ```clojure\n   (ns re-frisk\n     (:require [re-frisk-remote.core :as re-frisk-remote]))\n   \n   (re-frisk-remote/start)\n    ```\n    \n    `clj -R:dev re_frisk.clj`\n\nOpen re-frisk in a browser at http://localhost:4567\n\nWhen remote debugging on an Android device you might need to enable reverse socket connections on port 4567:\n\n```bash\nadb reverse tcp:4567 tcp:4567\n```\n### Enable traces\n\nshadow-cljs\n```clojure\n:compiler-options {:closure-defines {\"re_frame.trace.trace_enabled_QMARK_\" true}}\n```\n\nOR\n\n```clojure\n:compiler         {:closure-defines {\"re_frame.trace.trace_enabled_QMARK_\" true}}\n```\n\n### Settings\n\nExternal window dimensions\n\n```clojure\n(re-frisk/enable {:ext_height 1000 :ext_width 1200})\n```\n\nHidden UI, you can open and close tool by Ctrl+H\n\n```clojure\n(re-frisk/enable {:hidden true})\n```\n\n\nIf you don't need to watch events you can disable them\n\n```clojure\n(re-frisk/enable {:events? false})\n```\n\nor exclude specific events \n\n```clojure\n(re-frisk/enable {:ignore-events #{::timer-db}})\n```\n\nUsing custom IP or port\n\n```clojure\n(re-frisk-remote/enable {:host \"192.168.0.2:7890\"})\n\n(re-frisk-remote/start {\"7890\"})\n```\n\nNormalize app-db before send to re-frisk\n\n```clojure\n(re-frisk-remote/enable {:normalize-db-fn (fn [app-db] (reduce ...))})\n```\n\n\n### bonus re-frame 6-domino cascade\n\n[\u003cimg src=\"https://docs.google.com/drawings/d/1ptKAIPfb_gtwwSqYmt-JGTkwPVm_6LeWjjm-FcWznBs/pub?w=1786\u0026amp;h=916\"\u003e](\nhttps://docs.google.com/drawings/d/1ptKAIPfb_gtwwSqYmt-JGTkwPVm_6LeWjjm-FcWznBs/edit?usp=sharing)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflexsurfer%2Fre-frisk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflexsurfer%2Fre-frisk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflexsurfer%2Fre-frisk/lists"}