{"id":13609394,"url":"https://github.com/bhauman/figwheel-main","last_synced_at":"2025-05-14T01:04:16.013Z","repository":{"id":37484055,"uuid":"138873137","full_name":"bhauman/figwheel-main","owner":"bhauman","description":"Figwheel Main provides tooling for developing ClojureScript applications","archived":false,"fork":false,"pushed_at":"2024-06-01T11:57:32.000Z","size":2355,"stargazers_count":640,"open_issues_count":110,"forks_count":93,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-10-29T15:12:57.230Z","etag":null,"topics":["clojure","clojurescript","repl","tooling"],"latest_commit_sha":null,"homepage":"https://figwheel.org","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bhauman.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["bhauman"],"custom":"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=B8B3LKTXKV69C"}},"created_at":"2018-06-27T11:36:20.000Z","updated_at":"2024-09-14T05:08:44.000Z","dependencies_parsed_at":"2024-06-18T20:11:29.365Z","dependency_job_id":null,"html_url":"https://github.com/bhauman/figwheel-main","commit_stats":{"total_commits":699,"total_committers":61,"mean_commits":"11.459016393442623","dds":"0.15307582260371955","last_synced_commit":"eea4d680ff30d958da01ffb3aa0c9af57250093f"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhauman%2Ffigwheel-main","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhauman%2Ffigwheel-main/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhauman%2Ffigwheel-main/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhauman%2Ffigwheel-main/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bhauman","download_url":"https://codeload.github.com/bhauman/figwheel-main/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248353868,"owners_count":21089710,"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":["clojure","clojurescript","repl","tooling"],"created_at":"2024-08-01T19:01:34.595Z","updated_at":"2025-04-11T06:27:57.896Z","avatar_url":"https://github.com/bhauman.png","language":"Clojure","funding_links":["https://github.com/sponsors/bhauman","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=B8B3LKTXKV69C"],"categories":["Clojure"],"sub_categories":[],"readme":"# Figwheel Main\n\n[![Clojars Project](https://img.shields.io/clojars/v/com.bhauman/figwheel-main.svg)](https://clojars.org/com.bhauman/figwheel-main)\n\nFigwheel Main builds your ClojureScript code and hot loads it as you are coding!\n\n![Figwheel heads up example](https://s3.amazonaws.com/bhauman-blog-images/figwheel-main/figwheel-main-demo-image.png)\n\nGet a quick idea of what Figwheel does by watching the 6 minute\n[flappy bird demo of figwheel][figwheel-demo-video].\n\nLearn even more by watching a 45 minute\n[talk on Figwheel][clojure-west-figwheel-video] given at ClojureWest\n2015.\n\nRead the [introductory blog post][flappy-bird-blog-post].\n\n## Support Work on Figwheel and other Clojure tools\n\nI contribute a significant amount of time writing tools and libraries\nfor Clojure and ClojureScript. If you enjoy using figwheel,\n[rebel-readline](https://github.com/bhauman/rebel-readline),\n[spell-spec](https://github.com/bhauman/spell-spec),\n[cljs-test-display](https://github.com/bhauman/cljs-test-display) or\n[piggieback](https://github.com/nrepl/piggieback) please consider\nmaking a contribution.\n\n\u003ca href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=B8B3LKTXKV69C\"\u003e\n\u003cimg src=\"https://s3.amazonaws.com/bhauman-blog-images/Smaller%2BDonate%2BButton%402x.png\" width=\"200\"\u003e\n\u003c/a\u003e\n\n## Features\n\n#### Live code reloading\n\nIf you write\n[**reloadable code**](http://figwheel.org/docs/reloadable_code)\nfigwheel can facilitate automated live interactive programming.\n\n#### Supports Node.js\n\n#### Static file server\n\nThe inclusion of a **static file server** allows you to get a decent\nClojureScript development environment up and running quickly. For\nconvenience there is a `:ring-handler` option so you can embed a ring\nhandler into the figwheel server.\n\n#### Live CSS reloading\n\nFigwheel will reload your CSS live as well.\n\n#### Live JavaScript reloading\n\nFigwheel can live reload your JavaScript source files.\n\n#### Heads up display\n\nFigwheel has a non-intrusive heads up display that gives you feedback\non how well your project is compiling. By writing a shell script you\ncan click on errors in the heads up display and they will open in your\neditor!\n\n#### Descriptive Errors with Code Context\n\nFigwheel provides descriptive compiler errors that point to where\nthe error is in your code.  These errors appear in the REPL as well\nas the heads up display.\n\n#### Excellent Configuration Error Reporting\n\nIt can be quite daunting, when you are configuring a tool for the\nfirst time.  Figwheel currently offers excellent configuration\nerror reporting that will help you if you happen to misconfigure\nsomething.\n\n#### ClojureScript REPL\n\nWhen you launch Figwheel it not only starts a live building/reloading\nprocess but it also optionally launches a CLJS REPL into your running\napplication. This REPL shares compilation information with the\nClojureScript compiler, allowing the REPL to be aware of the code\nchanges as well. The REPL also has some special built-in control functions\nthat allow you to control the auto-building process and execute\nvarious build tasks without having to stop and rerun `figwheel.main`.\n\n#### Robust connection\n\nFigwheel's connection is fairly robust. I have experienced figwheel\nsessions that have lasted for days through multiple OS sleeps.\n\n#### Message broadcast\n\nFigwheel **broadcasts** changes to all connected clients. This means you\ncan see code and CSS changes take place in real time on your phone and\nin your laptop browser simultaneously.\n\n#### Respects dependencies\n\nFigwheel will not load a file that has not been required. It will also\nrespond well to new requirements and dependency tree changes.\n\n#### Won't load code that is generating warnings\n\nIf your ClojureScript code is generating compiler warnings Figwheel\nwon't load it. This, again, is very helpful in keeping the client\nenvironment stable. This behavior is optional and can be turned off.\n\n## Try Figwheel with Flappy Bird\n\n#### Via Leiningen\n\nMake sure you have the [latest version of leiningen installed](https://github.com/technomancy/leiningen#installation).\n\nClone this repo:\n\n```shell\n$ git clone https://github.com/bhauman/flappy-bird-demo-new.git\n```\n\nChange into the flappy-bird-demo-new directory and run:\n\n```shell\n$ lein fig:build\n```\n\n### Via Clojure Tools\n\nFirst we will want to [install][CLI tools] the `clj` and `clojure` [command line\ntools][CLI tools].\n\nClone this repo:\n\n```shell\n$ git clone https://github.com/bhauman/flappy-bird-demo-new.git\n```\n\nChange into the flappy-bird-demo-new directory and run:\n\n```shell\n$ clj -A:build\n```\n\n## Get started quickly with the template!\n\nYou can get a quick greenfield project with the [Figwheel Template][figwheel-main-template]\n\n## Learning ClojureScript\n\nIf you are brand new to ClojureScript it is highly recommended that\nyou do the [ClojureScript Quick\nStart](https://clojurescript.org/guides/quick-start)\nfirst. If you skip this you will probably suffer.\n\nThere is a **lot to learn** when you are first learning ClojureScript,\nI recommend that you bite off very small pieces at first. Smaller bites than\nyou would take when learning other languages like JavaScript and Ruby.\n\nPlease don't invest too much time trying to set up a sweet development\nenvironment, there is a diverse set of tools that is constantly in\nflux and it's very difficult to suss out which ones will actually help\nyou. If you spend a lot of time evaluating all these options it can\nbecome very frustrating. If you wait a while, and use simple\ntools you will have much more fun actually using the language itself.\n\n## Read the Tutorial\n\nThere is an [extensive getting started tutorial][tutorial] I highly\nreccomend reading it if you are new to Clojure, ClojureScript and or\nthe new Clojure CLI tools.\n\n\u003ca href=\"http://figwheel.org/tutorial\"\u003e\u003cimg width=\"216\" alt=\"tutorial-button\" src=\"https://user-images.githubusercontent.com/2624/42537600-5c61f57a-8463-11e8-9d87-604b1b61247e.png\"\u003e\u003c/a\u003e\n\n## Documentation\n\nThe [documentation][docs] a currently a good resource but is still a work in progress.\n\n## Getting Help\n\nYou can get help at both the\n[ClojureScript Google Group](https://groups.google.com/forum/#!forum/clojurescript)\nand on the **#clojurescript**, **#figwheel-main** and **#beginners**\n[Clojurians Slack Channels](http://clojurians.net)\n\n## Quick Usage\n\nThis is abbreviated usage documentation intended for experienced\nClojure/Script developers. I highly reccomend the [tutorial][tutorial]\nif you are new to Figwheel and ClojureScript.\n\n#### Clojure CLI Tools\n\nFirst, make sure you have the [Clojure CLI Tools][CLI Tools]\ninstalled.\n\nOn Mac OSX with brew:\n\n    brew install clojure\n\nNow launch a ClojureScript REPL with:\n\n```\nclj -Sdeps \"{:deps {com.bhauman/figwheel-main {:mvn/version \\\"0.2.20\\\"}}}\"  -M -m figwheel.main\n```\n\nThis will first compile browser REPL code to a temp directory, and\nthen a browser will open and a `cljs.user=\u003e` prompt will appear.\n\nFrom here you can do REPL driven development of ClojureScript.\n\n#### With Leiningen\n\nYou can also use `leiningen` by adding it to `:dependencies` in your\n`project.clj` and launching it like so:\n\n```\nlein run -m figwheel.main\n```\n\n**With Rebel Readline for much better REPL experience**\n\nFigwheel main will automatically use `rebel-readline-cljs` if it is\navailable. So, you can get Rebel Readline behavior by simply adding it\nto your dependencies.\n\n```\nclojure -Sdeps \"{:deps {com.bhauman/figwheel-main {:mvn/version \\\"0.2.20\\\"} com.bhauman/rebel-readline-cljs {:mvn/version \\\"0.1.4\\\"}}}}\"  -M -m figwheel.main\n```\n\nAs of right now using Rebel readline does create some startup overhead\n(hoping to correct this in the near future), so you may want to choose\nuse it only when you are going to interact at the REPL.\n\n## Setting up a build with Tools CLI\n\nSet up a build which will allow you to start a watch/build/reload\nprocess on a set of local ClojureScript source files.\n\n\u003e If the following doesn't work for you please see the\n\u003e [tutorial][tutorial].\n\nThe following assumes the current working directory is the root\ndirectory of your project.\n\nEnsure your `deps.edn` file has the `figwheel.main` dependencies:\n\n```clojure\n{:deps {com.bhauman/figwheel-main {:mvn/version \"0.2.20\"}\n        com.bhauman/rebel-readline-cljs {:mvn/version \"0.1.4\"}}\n ;; setup some development paths\n :paths [\"src\" \"target\" \"resources\"]\n ;; setup a helpful alias to start the build\n :aliases {:build-dev {:main-opts [\"-m\" \"figwheel.main\" \"-b\" \"dev\" \"-r\"]}}}\n```\n\nCreate a `dev.cljs.edn` build file:\n\n```clojure\n{:main example.core}\n```\n\nIn `src/example/core.cljs`, place the following ClojureScript code:\n\n```clojure\n(ns example.core)\n\n(enable-console-print!)\n\n(prn \"hello world!\")\n```\n\nThen run the command:\n\n```\nclojure -M -m figwheel.main -b dev -r\n```\n\nThis will launch a REPL and start autobuilding and reloading the `src`\ndirectory so that any files you add or change in that directory will\nautomatically be hot reloaded into the browser.\n\nThe `-b dev` or `--build dev` flag option is indicating that Figwheel\nshould read `dev.cljs.edn` for build configuration.\n\nThe `-r` or `--repl` flag indicates that a REPL should be launched.\n\nInteresting to note that the above command is equivalent to:\n\n```\nclojure -M -m figwheel.main -co dev.cljs.edn -c -r\n```\n\nYou can also start your build running with the `build-dev` alias we\ndefined in the `deps.edn` to save some typing:\n\n```\nclojure -A:build-dev\n```\n\n## Setting up a build with Leiningen\n\nSet up a build which will allow you to start a watch/build/reload\nprocess on a set of local ClojureScript source files.\n\n\u003e If the following doesn't work for you please see the\n\u003e [tutorial][tutorial].\n\nThe following assumes the current working directory is the root\ndirectory of your project.\n\nEnsure your `project.clj` file has `figwheel.main` dependencies:\n\n```clojure\n:dependencies [[com.bhauman/figwheel-main \"0.2.20\"]\n               [com.bhauman/rebel-readline-cljs \"0.1.4\"]]\n ;; setup target as a resource path\n:resource-paths [\"target\" \"resources\"]\n;; set up an alias to invoke your figwheel build\n:aliases {\"fig\" [\"trampoline\" \"run\" \"-m\" \"figwheel.main\"]\n          \"build-dev\" [\"trampoline\" \"run\" \"-m\" \"figwheel.main\" \"-b\" \"dev\" \"-r\"]}\n```\n\nCreate a `dev.cljs.edn` build file:\n\n```clojure\n{:main example.core}\n```\n\nIn `src/example/core.cljs`, place the following ClojureScript code:\n\n```clojure\n(ns example.core)\n\n(enable-console-print!)\n\n(prn \"hello world!\")\n```\n\nThen run the command:\n\n```\nlein trampoline run -m figwheel.main -- -b dev -r\n```\n\nThis will launch a REPL and start autobuilding and reloading the `src`\ndirectory so that any files you add or change in that directory will\nautomatically be hot reloaded into the browser.\n\nThe `-b dev` or `--build dev` flag option is indicating that Figwheel\nshould read `dev.cljs.edn` for build configuration.\n\nThe `-r` or `--repl` flag indicates that a REPL should be launched.\n\n**using the aliases**\n\nWe are probably better off using the helpful aliases that we created\nin the `project.clj`\n\nYou can invoke the above command using the `fig` alias like so:\n\n```\nlein fig -- -b dev -r\n```\n\nYou can also just use the `build-dev` alias to get the same result:\n\n```\nlein build-dev\n```\n\n\u003e Why use an alias here? Why not use a lein plugin? The first reason\n\u003e I'm not using a plugin here is that Leiningen boots a lot faster\n\u003e when it doesn't have to dynamically load/compile plugin\n\u003e code. Another reason is that `figwheel.main`'s command line options\n\u003e are much more expressive than `lein-figwheel`'s and lein aliases are\n\u003e better positioned to leverage that expressiveness.\n\n#### Using your own HTML to host your app\n\nIf would prefer to use your own HTML page to host your application\ninstead of the default page served by `figwheel.main`, you will first\nneed to ensure that you have added `resources` to the `:paths` key in\n`deps.edn`, as demonstrated above. After that, you can place the\n`index.html` in `resources/public/index.html` so that it will mask the\none served by the `figwheel.main` helper application.\n\nThe following is some example HTML to help you get started. The\ntrickly part is the path to the ClojureScript bootstrap file. The\ndefault output path is available at `cljs-out/[build-id]-main.js`. So\nin this case it will be: `cljs-out/dev-main.js`\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  \u003chead\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\n    \u003cdiv id=\"app\"\u003e\u003c/div\u003e\n    \u003cscript src=\"cljs-out/dev-main.js\"\u003e\u003c/script\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\nYou can place CSS and other static assets in the `resources/public` directory.\n\n## Configuring Figwheel Main\n\nIf you need to configure `figwheel.main`, you will use a\n`figwheel-main.edn` file in the root of your project directory.\n\nFor example let's explicitly set our watch directory.\n\nCreate a `figwheel-main.edn` file in the root of your project\nfolder with these contents:\n\n```clojure\n{:watch-dirs [\"cljs-src\"]\n :css-dirs [\"resources/public/css\"]}\n```\n\n`:watch-dirs` instructs `figwheel.main` to watch and compile the\nsources in the `cljs-src` directory.\n\n`:css-dirs` instructs `figwheel.main` to watch and reload the CSS\nfiles in the `resources/public/css` directory.\n\nIf you need to override some of the figwheel configuration options for a\nparticular build, simply add those options as metadata on the build edn.\n\nFor example if you want to have `:watch-dirs` that are specific to the\n**dev** build then in your `dev.cljs.edn` file:\n\n```clojure\n^{:watch-dirs [\"cljs-src\" \"dev\"]}\n{:main example.core}\n```\n\nAll the available configuration options are documented here: [https://github.com/bhauman/figwheel-main/blob/master/doc/figwheel-main-options.md](https://github.com/bhauman/figwheel-main/blob/master/doc/figwheel-main-options.md)\n\nAll the available configuration options specs are here:\n[https://github.com/bhauman/figwheel-main/blob/master/src/figwheel/main/schema/config.clj](https://github.com/bhauman/figwheel-main/blob/master/src/figwheel/main/schema/config.clj)\n\n## Classpaths, Classpaths, Classpaths\n\nUnderstanding of the Java Classpath can be very helpful when working\nwith ClojureScript. \n\nClojureScript searches for source files on the Classpath. When you add\na `re-frame` dependency like so:\n\n```clojure\n{:deps {com.bhauman/figwheel-main {:mvn/version \"0.2.20\"}\n        com.bhauman/rebel-readline-cljs {:mvn/version \"0.1.4\"}\n        ;; adding re-frame\n        re-frame {:mvn/version \"1.10.5\"}}\n :paths [\"src\" \"target\" \"resources\"]}\n```\n\nThe source files in `re-frame` are on the Classpath and the\nClojureScript compiler can find `re-frame.core` when you require it.\n\nYour sources will need to be on the Classpath so that the Compiler can\nfind them. For example, if you have a file\n`cljs-src/example/core.cljs` you should add `cljs-src` to the `:paths`\nkey so that the ClojureScript compiler can find your `example.core`\nnamespace. It is important to note that the `src` directory is on your\nClasspath by default.\n\nIn Figwheel, the embedded HTTP server serves its files from the Java\nClasspath.\n\nIt actually serves any file it finds on the Classpath in a `public`\nsub-directory. This is why we added `target` and `resources` to the\n`:paths` key in the `deps.edn` file above. With `target` and\n`resources` both on the Classpath the server will be able to serve\nanyfile in `target/public` and `resources/public`.\n\nThe compiler by default compiles artifacts to `target` for easy cleaning.\n\nIt is custmary to put your `index.html`, CSS files, and other\nweb artifacts in the `resources/public` directory.\n\n## Live CSS Reloading\n\nAs mentioned above you configure `figwheel.main` to live reload your\nCSS files as you edit them.\n\nJust add a `:css-dirs` key that lists the CSS directories to watch in\nyour figwheel configuration.\n\nFor example in your `figwheel-main.edn` file:\n\n```clojure\n{:css-dirs [\"resources/public\"]}\n```\n\n#### Using CSS Precompilers\n\nUsing SASS or LESS and still want to have the benefits of live CSS reloading?\n\nSimply run your sass or less watcher/compiler on the command line and\nmake sure the final output CSS files land in one of the directories\nthat you have listed in your `:css-dirs` configuration option (mentioned\nabove).\n\n## Working with Node.js\n\nUnlike `cljs.main`, with `figwheel.main` you will not specify a\n`--repl-env node` because the `figwheel.repl` handles Node.js REPL\nconnections in addition to others.\n\nYou can launch a Node REPL like so:\n\n    clojure -M -m figwheel.main -t node -r\n    \nYou can quickly get a hot reloading CLJS node build up an running using the\n`deps.edn`, `example.core` and `dev.cljs.edn` above. Simply add a `--target node`\nor `-t node` to the compile command.\n\n    clojure -M -m figwheel.main -t node -b dev -r\n\nThis will launch a CLJS Node REPL initialized with `example.core` you\ncan now edit `example/core.cljs` and it will be hot reloaded.\n    \nOf course if you add `:target :nodejs` to `dev.cljs.edn` like so:\n\n```clojure\n{:main example.core\n :target :nodejs}\n```\n\nYou be able to run the build more simply:\n\n    clojure -M -m figwheel.main -b dev -r\n\n## Reload hooks\n\nIt is common to want to provide callbacks to do some housekeeping\nbefore or after a hot reload has occurred.\n\nYou can conveniently configure hot reload callbacks at runtime with\nmetadata. You can see and example of providing callbacks below:\n\n```clojure\n;; first notify figwheel that this ns has callback defined in it\n(ns ^:figwheel-hooks example.core)\n\n;; mark the hook functions with ^:before-load and ^:after-load \n;; metadata\n\n(defn ^:before-load my-before-reload-callback []\n    (println \"BEFORE reload!!!\"))\n\n(defn ^:after-load my-after-reload-callback []\n    (println \"AFTER reload!!!\"))\n```\n\nThe reload hooks will be called before and after every hot code reload.\n\n## Quick way to understand the command line options\n\nIf you supply a `-pc` or `--print-config` flag to `figwheel.main`, it\nwill not execute the command. It will instead print out the computed\nconfiguration.\n\nFor example:\n\n```\nclojure -M -m figwheel.main -pc -b dev -r\n```\n\nWill output:\n\n```clojure\n---------------------- Figwheel options ----------------------\n{:ring-server-options {:port 9550},\n :client-print-to [:repl :console],\n :pprint-config true,\n :watch-dirs (\"src\"),\n :mode :repl}\n---------------------- Compiler options ----------------------\n{:main exproj.core,\n :preloads [figwheel.core figwheel.main figwheel.repl.preload],\n :output-to \"target/public/cljs-out/dev-main.js\",\n :output-dir \"target/public/cljs-out/dev\",\n :asset-path \"cljs-out/dev\",\n :aot-cache false,\n :closure-defines\n #:figwheel.repl{connect-url\n                 \"ws://localhost:9550/figwheel-connect?fwprocess=c8712b\u0026fwbuild=dev\",\n                 print-output \"repl,console\"}}\n```\n\n## Using figwheel.main from a script\n\nSee the `figwheel.main/start` function and the `figwheel.main/start-join` functions.\n\n## Contributing to the Helper App\n\nFigwheel main comes with a helper Ring app that is served when there\nis no other html page to host the REPL JavaScript env.\n\nIf you are interested in contributing to this app:\n\nFirst hit me up in the #figwheel-main channel on the clojurians Slack\nso that we can co-ordinate a bit.\n\nTo work on the helper app:\n\nCheckout this repository and change directory to the `figwheel-main`\ndirectory where this README is located.\n\nThen the command \n\n```shell\nclj -M -m figwheel.main -b helper -r\n```\n\nshould launch a live development workflow for the Helper application. \n\n**tweaking the CSS**\n\nThe **CSS** files for the helper app are located at\n`helper-resources/public/com/bhauman/figwheel/helper/css` and you\nshould be able to edit them live.\n\n**working on the app itself**\n\nBoth the server-side and client side code are located in\n`src/figwheel/main/helper.cljc` and you should be able to work on them\nlive.\n\nIf you change the behavior of the CLJS in\n`src/figwheel/main/helper.cljc` it will not be reflected in the actual\nhelper app until you compile with `make helper`\n\n**editing helper content**\n\nThe helper app content is generated from the Markdown files in the\n`helper-content` directory. You must compile the markdown with `make\nhelper-docs` this currently requires `ruby` and **kramdown** (`gem\ninstall kramdown`)\n\n**keep it simple**\n\nThe helper app is intended to be very simple in structure. We do not want to\nadd more dependencies and slow the startup time of `figwheel.main`,\nand we also do not want to do anything that will interfere with the\nusers running code.\n\n## License\n\nCopyright © 2018 Bruce Hauman\n\nDistributed under the Eclipse Public License either version 1.0 or any\nlater version.\n\n[tutorial]: http://figwheel.org/tutorial\n[docs]: http://figwheel.org/docs\n[figwheel-main-template]: http://rigsomelight.com/figwheel-main-template\n[clojure-west-figwheel-video]: https://www.youtube.com/watch?v=j-kj2qwJa_E\n[figwheel-demo-video]: https://www.youtube.com/watch?v=KZjFVdU8VLI \n[flappy-bird-blog-post]: http://rigsomelight.com/2014/05/01/interactive-programming-flappy-bird-clojurescript.html\n[figwheel-main]: https://github.com/bhauman/figwheel-main\n[install-lein]: https://github.com/technomancy/leiningen#installation\n[CLI Tools]: https://clojure.org/guides/getting_started#_installation_on_mac_via_code_brew_code\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhauman%2Ffigwheel-main","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbhauman%2Ffigwheel-main","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhauman%2Ffigwheel-main/lists"}