{"id":26093067,"url":"https://github.com/flow-storm/flow-storm-cljs-compiler-plugin","last_synced_at":"2026-04-20T15:31:39.169Z","repository":{"id":280012309,"uuid":"940637349","full_name":"flow-storm/flow-storm-cljs-compiler-plugin","owner":"flow-storm","description":"A FlowStorm plugin to debug the ClojureScript compiler","archived":false,"fork":false,"pushed_at":"2025-09-24T13:09:31.000Z","size":639,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-24T15:16:55.813Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/flow-storm.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-28T14:27:33.000Z","updated_at":"2025-09-24T13:09:20.000Z","dependencies_parsed_at":"2025-04-03T12:40:33.738Z","dependency_job_id":null,"html_url":"https://github.com/flow-storm/flow-storm-cljs-compiler-plugin","commit_stats":null,"previous_names":["flow-storm/flow-storm-cljs-compiler-plugin"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/flow-storm/flow-storm-cljs-compiler-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flow-storm%2Fflow-storm-cljs-compiler-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flow-storm%2Fflow-storm-cljs-compiler-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flow-storm%2Fflow-storm-cljs-compiler-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flow-storm%2Fflow-storm-cljs-compiler-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flow-storm","download_url":"https://codeload.github.com/flow-storm/flow-storm-cljs-compiler-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flow-storm%2Fflow-storm-cljs-compiler-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32053176,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"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":[],"created_at":"2025-03-09T11:22:15.227Z","updated_at":"2026-04-20T15:31:39.161Z","avatar_url":"https://github.com/flow-storm.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FlowStorm ClojureScript compiler plugin\n\n![demo](./images/plugin_demo_0.png)\n![demo](./images/plugin_demo_1.png)\n![demo](./images/plugin_demo_2.png)\n\nThe ClojureScript compiler plugin helps you visualize and move aruod your ClojureScript compilations recordings\nby representing them as an interactive graph.\n\nIt can help you troubleshoting the compiler, develope it or just help you learn how it works. \n\n**Requires FlowStorm \u003e= 4.3.0**\n\n# Quick start\n\nClone the ClojureScript compiler somewhere :\n\n```bash\ngit clone git@github.com:clojure/clojurescript.git\n```\n\nAdd an extra alias to the deps.edn file :\n\n```\n{...\n :aliases\n {...\n  :storm {:classpath-overrides {org.clojure/clojure nil}\n          :extra-deps {com.github.flow-storm/flow-storm-dbg {:mvn/version \"4.3.0\"} ;; checkout the latest version\n                       com.github.flow-storm/clojure {:mvn/version \"1.12.0-9\"} ;; checkout the latest version\n                       com.github.flow-storm/flow-storm-cljs-compiler-plugin {:mvn/version \"1.0.0-beta4\"}} ;; checkout the latest version\n          :jvm-opts [\"-Dvisualvm.display.name=CLJSCompiler\"\n                     \"-Dclojure.storm.instrumentEnable=true\"\n                     \"-Xms5000m\" \"-Xmx5000m\"\n                     \"-Dflowstorm.startRecording=false\"\n                     \"-Dclojure.storm.instrumentOnlyPrefixes=cljs.\"\n                     \"-Dflowstorm.plugins.namespaces=flow-storm.plugins.cljs-compiler.all\"]}}}\n```\nYou can see the latest dependency for the plugin here [![Clojars Project](https://img.shields.io/clojars/v/com.github.flow-storm/flow-storm-cljs-compiler-plugin.svg)](https://clojars.org/com.github.flow-storm/flow-storm-cljs-compiler-plugin)\n\nStart a repl with the new `:storm` alias and start the debugger UI with recording stopped (default):\n\n```bash\n$ clj -A:storm\n...\nuser=\u003e :dbg\n```\n\nNow convert that repl into a ClojureScript one : \n\n```clojure\nuser=\u003e ((requiring-resolve 'cljs.main/-main) \"--repl\")\n\nClojureScript 0.0.398608251\ncljs.user=\u003e \n```\n\nA browser window should popup, and you should now have a ClojureScript repl.\nTry to evaluate some forms to make sure everything is working smoothly.\n\n# Usage\n\nLet's say you want to understand the compilation of `(defn sum [a b] (+ a b))`.\n\n- First start recording on the flow storm UI\n- Now evaluate the form on the ClojureScript repl\n- You should see recordings poping up on the FlowStorm UI Flows tab\n- You can now safely stop recording\n- Go to the `ClojureScript compiler` plugin tab\n- Select the flow id you recorded in (0 by default) and click the refresh button\n- You should see a graph rendering like in the screenshots above\n\n## High level overview\n\nThe graph is composed of 4 main stages, some of them with their own sub graph.\n\n- Reader (the output of the reader for your repl form)\n- Repl wrapping (the wrapping the compiler does en every form that is typed at the repl)\n- Analysis and parsing (analisys, parsing and optimizations)\n- Emission (javascript code strings generation)\n\nYou can use the mouse left click for panning and the wheel for zooming.\n\nClicking on each stage `View return` should show the return value on the right data window, while\nclicking `Goto return` should take you to the code stepper at that point in time.\n\n## Understanding analysis and parsing\n\nThe analysis/parsing subgraph is composed of nodes that represent calls to `cljs.analyzer/analyze*` and `cljs.analyzer/parse`.\n\nThe greyed out nodes are the analysis/parsing of the wrapping parts while the highlighted ones represent your form analysis and parsing,\nwhich is probably the most interesting one.\n\nEach node shows the sub-form it is working with. Use the buttons to quickly view call arguments, return values and jumping \nto the code stepper at those points in time.\n\nAnalysis nodes also contains a list of the `passes` which applied at that analysis instance. Double clicking on a pass will also take you\nto that point in time.\n\n## Understanding emission\n\nThe emission sub-graph is similar to the analysis one, but its nodes represent calls to `cljs.compiler/emit` for a certain AST `:op`.\n\nIt also contains a list of the javascript strings generated by that instance of emission. Double clicking on each strings will take \nyou to that point in time.\n\n# Notes\n\nIt will also automatically snapshot some important mutable values used by the compiler :\n\n- java.io.StringWriter\n- java.lang.StringBuilder\n- cljs.vendor.clojure.tools.reader.reader_types.SourceLoggingPushbackReader\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflow-storm%2Fflow-storm-cljs-compiler-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflow-storm%2Fflow-storm-cljs-compiler-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflow-storm%2Fflow-storm-cljs-compiler-plugin/lists"}