{"id":13393137,"url":"https://github.com/plexus/chestnut","last_synced_at":"2025-10-21T23:45:08.349Z","repository":{"id":20025445,"uuid":"23293363","full_name":"plexus/chestnut","owner":"plexus","description":"Application template for Clojure + ClojureScript web apps","archived":true,"fork":false,"pushed_at":"2022-06-23T20:16:06.000Z","size":619,"stargazers_count":1311,"open_issues_count":11,"forks_count":94,"subscribers_count":34,"default_branch":"master","last_synced_at":"2025-09-25T19:24:27.515Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/plexus.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-24T21:27:18.000Z","updated_at":"2025-07-05T12:26:59.000Z","dependencies_parsed_at":"2022-08-27T03:15:47.771Z","dependency_job_id":null,"html_url":"https://github.com/plexus/chestnut","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/plexus/chestnut","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plexus%2Fchestnut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plexus%2Fchestnut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plexus%2Fchestnut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plexus%2Fchestnut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plexus","download_url":"https://codeload.github.com/plexus/chestnut/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plexus%2Fchestnut/sbom","scorecard":{"id":737763,"data":{"date":"2025-08-11","repo":{"name":"github.com/plexus/chestnut","commit":"684b668141586ed5ef4389f94a4dc7f4fde13112"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":4,"reason":"Found 10/21 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Eclipse Public License 1.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T16:24:29.984Z","repository_id":20025445,"created_at":"2025-08-22T16:24:29.984Z","updated_at":"2025-08-22T16:24:29.984Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277084426,"owners_count":25758090,"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-09-26T02:00:09.010Z","response_time":78,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":[],"created_at":"2024-07-30T17:00:43.925Z","updated_at":"2025-09-28T21:31:07.466Z","avatar_url":"https://github.com/plexus.png","language":"Clojure","funding_links":["https://patreon.com/plexus)."],"categories":["Clojure","Awesome ClojureScript"],"sub_categories":["Web Framework \u0026 Template"],"readme":"# chestnut\n\n[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/plexus/chestnut?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n[![Clojureverse](https://rawgit.com/clojureverse/clojureverse-assets/master/clojureverse-org-green.svg)](https://clojureverse.org/c/projects/chestnut)\n\n[![Clojars Project](http://clojars.org/chestnut/lein-template/latest-version.svg)](http://clojars.org/chestnut/lein-template)\n\n\u003cimg align=\"left\" alt=\"Mr. Chestnut\" src=\"resources/chestnut.png\"\u003e\n\n\n**Getting value out of Chestnut? Consider making [a small donation](https://patreon.com/plexus).**\n\nChestnut is a Clojure/ClojureScript application template. It takes the pain out\nof getting a working ClojureScript setup with live reloading plus a browser\nconnected REPL.\n\nIt provides a solid default configuration for a REPL driven workflow, a\nClojureScript setup with separate dev/prod/test builds, Figwheel integration,\nand a basic setup for running CLJ and CLJS unit tests. It provides a basic web\nbackend setup with Compojure, and a frontend based on one of the React wrappers\n(your choice of Reagent, Rum, om-next, re-frame, or Vanilla JS). It works out of the\nbox on popular cloud providers like Heroku.\n\nWhile Chestnut it's quite \"complete\" in a sense, it also tries to be minimal.\nBoilerplate code is kept to a minimum, and there is only just enough structure\nto get you started. How you build and structure your app from there is up to\nyou.\n\nChestnut should appeal to beginners because it allows you to get started quickly\nand with minimal baggage, it should appeal to more seasoned developers because\nit provides all the \"obvious\" configuration for a comfortable setup, without\nbeing so opinionated that it becomes a straight jacket.\n\nFor deployment you get uberjar support, meaning you can get all your code\ncompiled, optimized, and packaged in a single executable JAR file. It also\ncontains the necessary artifacts to work on Heroku out of the box.\n\n**Need help?** Ask [on the mailing list](http://clojureverse.org/c/chestnut)\n(issues on GitHub are for bugs. Feature requests can be done either on the\nmailing list or on Github.)\n\nThis README may describe unreleased features. Please compare the\n[version number on Clojars](https://clojars.org/chestnut/lein-template) to the\n[changelog below](https://github.com/plexus/chestnut/blob/master/README.md#changelog),\nand check the README in your generated project for instructions pertaining to\nyour version.\n\n## Usage\n\n**This README may describe unreleased features, instead you can check the [README for the latest stable release](https://github.com/plexus/chestnut/tree/v0.15.1/README.md)**\n\n```\nlein new chestnut \u003cname\u003e \u003coptions\u003e\n\ne.g.\n\nlein new chestnut my-app +garden +reagent +http-kit\n```\n\nIf you're using the snapshot version, then make sure to add a `--` to separate Leiningen's and Chestnut's arguments\n\n```\nlein new chestnut my-app --snapshot -- +garden +reagent +http-kit\n```\n\nYou can get an overview of all recognized options with\n\n```\nlein new chestnut +help\n```\n\nAfter that open the README of your generated project for detailed instructions.\n\n### Lighttable\n\nLighttable provides a tighter integration for live coding with an inline\nbrowser-tab. Rather than evaluating cljs on the command line with weasel repl,\nevaluate code and preview pages inside Lighttable.\n\nSteps: After running `(go)`, open a browser tab in Lighttable. Open a cljs file\nfrom within a project, go to the end of an s-expression and hit Cmd-ENT.\nLighttable will ask you which client to connect. Click 'Connect a client' and\nselect 'Browser'. Browse to [http://localhost:10555](http://localhost:10555)\n\nView LT's console to see a Chrome js console.\n\nHereafter, you can save a file and see changes or evaluate cljs code (without\nsaving a file). Note that running a weasel server is not required to evaluate\ncode in Lighttable.\n\n### Emacs/Cider\n\nStart a repl in the context of your project with `M-x cider-jack-in`.\n\nAfter that it's the regular\n\n```\n(go)\n(cljs-repl)\n```\n\nas described above.\n\n## List of Contents\n\nThis template gives you everything you need to start developing\nClojure/ClojureScript apps effectively. It comes with\n\n* [Figwheel](https://github.com/bhauman/lein-figwheel) Automatically reload your\n  ClojureScript and CSS as soon as you save the file, no need for browser\n  refresh.\n* A ClojureScript interface to Facebook's React. You can choose between\n  Reagent (default), Om-next (`+om-next`), re-frame (`+re-frame`),\n  Rum (`+rum`), or use `+vanilla` to do without a React wrapper.\n* [Ring](https://github.com/ring-clojure/ring) + Compojure. Clojure's de facto\n  HTTP interface. Chestnut uses a Jetty or HttpKit server to serve the\n  Clojurescript app. This way you already have an HTTP server running in case\n  you want to add server-side functionality. Chestnut also inserts a Ring\n  middleware to reload server-side Clojure files.\n* Heroku support. Chestnut apps have all the bits and pieces to be deployable to\n  Heroku. Getting your app on the web is as simple as `git push`.\n* Unit tests for both Clojure and CLJS. Both specs and CLJS tests can be run in\n  \"auto\" mode.\n\n## Options\n\nGeneral options:\n\n- `+help` Show an overview of all recognized options, then exit.\n- `+no-poll` Opt out of usage statistics poll.\n- `+http-kit` Use [HTTP Kit](http://http-kit.org/server.html) instead of Jetty.\n- `+bidi` Use [bidi](https://github.com/juxt/bidi) instead of Compojure.\n- `+site-middleware` Use the `ring.middleware.defaults.site-defaults` middleware (session, CSRF), instead of `ring.middleware.defaults.api-defaults` (see\n  [ring.defaults documentation](https://github.com/ring-clojure/ring-defaults)).\n- `+code-of-conduct` / `+coc` Add the [contributor covenant](http://contributor-covenant.org/) Code of Conduct.\n- `+edge` Use the latest available version of all libraries/plugins. This includes alpha/beta versions, but does not include SNAPSHOT versions.\n- `+bleeding-edge` Like `+edge`, but also use SNAPSHOT versions when available.\n\nChoice of UI library:\n\n- `+vanilla` Don't include Reagent, use this if you intend to use some other view library.\n- `+om-next` Use om.next, instead of Reagent.\n- `+re-frame` Use Reagent and re-frame.\n- `+rum` Use Rum instead of Reagent.\n\nChoice of CSS style:\n\n- `+less` Use [less](https://github.com/montoux/lein-less) for compiling Less CSS files.\n- `+sass` Use SASS for generating CSS.\n- `+garden` Use Garden for generating CSS.\n\n## Local copy\n\nIf you want to customize Chestnut, or try unreleased features, you can\nrun directly from master like this:\n\n``` sh\ngit clone https://github.com/plexus/chestnut.git\ncd chestnut\nlein install\n```\n\nNote that master may be partially or wholly broken. I try to do\nextensive manual testing before releasing a new stable version, so if\nyou don't like surprises then stick to the version on Clojars. Issue\nreports and pull requests are very welcome.\n\n## Requirements\n\n* Java 1.7 or later\n* Leiningen 2\n\n## FAQ\n\n* **Q:** How can I get the features in the SNAPSHOT version? \u003cbr\u003e\n  **A:** Use leiningen's `--snapshot` flag, e.g. `lein new chestnut\n         my-project --snapshot`\n* **Q:** I'm seeing warnings while compiling ClojureScript. \u003cbr\u003e\n  **A:** There are a few known warnings, but they should not affect the\n         functioning of your app.\n* **Q:** I changed the `{:text \"Hello Chestnut!\"}` portion and saved\n         the file, but the changes don't show up. \u003cbr\u003e\n  **A:** It's a feature. The `app-state` is defined with `defonce`, so your\n         application state doesn't reset every time you save a file. If you do\n         want to reset after every change, change `(defonce app-state ..)` to\n         `(def app-state ...)`.\n* **Q:** I just want to compile ClojureScript to fully optimized JavaScript, so\n         I can use it in a static HTML site. \u003cbr\u003e\n  **A:** Compile the \"min\" ClojureScript build, like this: `lein cljsbuild once min`, then look\n         for `resources/public/js/app.js`.\n* **Q:** I gave my project a very generic name like `cljs` or `clojure` and now\n         it's not working. \u003cbr\u003e\n  **A:** This is due to namespace clashes. Try picking\n         a more unique name. In particular avoid namespace prefixes used by\n         Clojure, Clojurescript, or existing libraries.\n\n## Sources\n\nI used the\n[browser-connected-repl](https://github.com/cemerick/austin/tree/master/browser-connected-repl-sample)\nthat's included with [Austin](https://github.com/cemerick/austin) as a\nstarting point, then pulled in bits from\n[cljs-liveedit-webapp](https://github.com/ejlo/cljs-liveedit-webapp)\nuntil things worked. Figwheel's\n[Flappy Bird Demo app](https://github.com/bhauman/flappy-bird-demo)\nalso provided some ideas. The concept of refreshing Om when Figwheel\nreloads was taken from\n[this blog post](http://blog.michielborkent.nl/blog/2014/09/25/figwheel-keep-Om-turning/)\nby [Michiel Borkent](https://github.com/borkdude).\n\nFor Heroku support I looked at Heroku's\n[clojure-getting-started](https://github.com/heroku/clojure-getting-started)\nexample app.\n\n\n## Other Templates\n\nWe hope Chestnut is great for you, but there are also many other templates that tackle\nsimilar tasks.. Each has a slightly different perspective, so it is worth taking a look\nat a few. Here is a [comparison chart](https://goo.gl/ZZH8fm) of many interesting\nClojure/ClojureScript templates.\n\n\n## License\n\nCopyright © 2014-2018 Arne Brasseur\n\nDistributed under the Eclipse Public License either version 1.0 or (at\nyour option) any later version.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplexus%2Fchestnut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplexus%2Fchestnut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplexus%2Fchestnut/lists"}