{"id":13681859,"url":"https://github.com/weavejester/cljfmt","last_synced_at":"2026-10-19T14:36:42.383Z","repository":{"id":23420389,"uuid":"26783120","full_name":"weavejester/cljfmt","owner":"weavejester","description":"A tool for formatting Clojure code","archived":false,"fork":false,"pushed_at":"2026-09-24T21:19:33.000Z","size":733,"stargazers_count":1228,"open_issues_count":43,"forks_count":139,"subscribers_count":19,"default_branch":"master","last_synced_at":"2026-10-03T04:36:11.946Z","etag":null,"topics":["clojure","clojurescript","code-formatter"],"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/weavejester.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","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":"2014-11-17T23:50:14.000Z","updated_at":"2026-09-30T03:48:40.000Z","dependencies_parsed_at":"2026-01-27T21:01:29.454Z","dependency_job_id":null,"html_url":"https://github.com/weavejester/cljfmt","commit_stats":{"total_commits":326,"total_committers":50,"mean_commits":6.52,"dds":0.2852760736196319,"last_synced_commit":"05ee0796ec0913049210639d555014011649d720"},"previous_names":[],"tags_count":76,"template":false,"template_full_name":null,"purl":"pkg:github/weavejester/cljfmt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fcljfmt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fcljfmt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fcljfmt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fcljfmt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weavejester","download_url":"https://codeload.github.com/weavejester/cljfmt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fcljfmt/sbom","scorecard":{"id":1239165,"data":{"date":"2025-10-13","repo":{"name":"github.com/weavejester/cljfmt","commit":"71744e00820a59d5b96e5826221fa87537247e89"},"scorecard":{"version":"v5.3.1-0.20251012233417-af419a5f4ac8","commit":"af419a5f4ac865788a844e5a2e726681cf4ff42b"},"score":4.1,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":1,"reason":"Found 4/25 approved changesets -- score normalized to 1","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/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"17 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#maintained"}},{"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/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#binary-artifacts"}},{"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/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:8: update your workflow using https://app.stepsecurity.io/secureworkflow/weavejester/cljfmt/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/weavejester/cljfmt/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/weavejester/cljfmt/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/weavejester/cljfmt/test.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#pinned-dependencies"}},{"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/af419a5f4ac865788a844e5a2e726681cf4ff42b/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/af419a5f4ac865788a844e5a2e726681cf4ff42b/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/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: Eclipse Public License 1.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/af419a5f4ac865788a844e5a2e726681cf4ff42b/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/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#fuzzing"}},{"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/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.14.0 not signed: https://api.github.com/repos/weavejester/cljfmt/releases/254795399","Warn: release artifact 0.13.4 not signed: https://api.github.com/repos/weavejester/cljfmt/releases/249511543","Warn: release artifact 0.13.3 not signed: https://api.github.com/repos/weavejester/cljfmt/releases/248089883","Warn: release artifact 0.13.2 not signed: https://api.github.com/repos/weavejester/cljfmt/releases/248073504","Warn: release artifact 0.13.1 not signed: https://api.github.com/repos/weavejester/cljfmt/releases/211930318","Warn: release artifact 0.14.0 does not have provenance: https://api.github.com/repos/weavejester/cljfmt/releases/254795399","Warn: release artifact 0.13.4 does not have provenance: https://api.github.com/repos/weavejester/cljfmt/releases/249511543","Warn: release artifact 0.13.3 does not have provenance: https://api.github.com/repos/weavejester/cljfmt/releases/248089883","Warn: release artifact 0.13.2 does not have provenance: https://api.github.com/repos/weavejester/cljfmt/releases/248073504","Warn: release artifact 0.13.1 does not have provenance: https://api.github.com/repos/weavejester/cljfmt/releases/211930318"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/af419a5f4ac865788a844e5a2e726681cf4ff42b/docs/checks.md#sast"}}]},"last_synced_at":"2025-10-24T17:45:24.541Z","repository_id":23420389,"created_at":"2025-10-24T17:45:24.541Z","updated_at":"2025-10-24T17:45:24.541Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38358123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"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":["clojure","clojurescript","code-formatter"],"created_at":"2024-08-02T13:01:36.993Z","updated_at":"2026-10-19T14:36:42.375Z","avatar_url":"https://github.com/weavejester.png","language":"Clojure","funding_links":[],"categories":["Clojure","tools"],"sub_categories":[],"readme":"# cljfmt [![Test Status](https://github.com/weavejester/cljfmt/actions/workflows/test.yml/badge.svg)](https://github.com/weavejester/cljfmt/actions/workflows/test.yml) [![Release Status](https://dl.circleci.com/status-badge/img/gh/weavejester/cljfmt.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/weavejester/cljfmt)\n\ncljfmt is a tool for detecting and fixing formatting errors in\n[Clojure][] code.\n\nIts defaults are based on the [Clojure Style Guide][], but it also has\nmany customization options to suit a particular project or team.\n\nIt is not the goal of the project to provide a one-to-one mapping\nbetween a Clojure syntax tree and formatted text; rather the intent is\nto correct formatting errors with minimal changes to the existing\nstructure of the text.\n\nIf you want format completely unstructured Clojure code, the [zprint][]\nproject may be more suitable.\n\n[clojure]: https://clojure.org/\n[clojure style guide]: https://github.com/bbatsov/clojure-style-guide\n[zprint]: https://github.com/kkinnear/zprint\n\n## Breaking Changes in 0.11.x\n\nThe `--indents` and `--alias-map` keys have been removed from the CLI,\nin favor of using a configuration file instead.\n\nThe `:indents` key has been split into `:indents` and `:extra-indents`.\nThe `:indents` key **replaces** all default indents, while the\n`:extra-indents` key will **append** to the default indents.\n\nIf you need to retain backward compatibility with an older version of\ncljfmt, then you can add the `:legacy/merge-indents?` key to your\nconfiguration:\n\n```edn\n{:legacy/merge-indents? true\n :indents {example.core/foo [[:inner 0]]}}\n```\n\nThis will treat `:indents` as if it were `:extra-indents`. i.e. it is\nequivalent to:\n\n```edn\n{:extra-indents {example.core/foo [[:inner 0]]}}\n```\n\n## Usage\n\ncljfmt integrates with many existing build tools, or can be used as a\nlibrary. As an end user, you have the choice of:\n\n### Standalone\n\nThe fastest way to run cljfmt is via a precompiled binary. If you're using\nLinux or MacOS, you can run the following command to install the binary into\n`/usr/local/bin`:\n\n```bash\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/weavejester/cljfmt/HEAD/install.sh)\"\n```\n\nYou can also run this command to update cljfmt to the latest version.\n\nAlternatively, you can install cljfmt via [Homebrew][]. If you do, it's\n**highly recommended** that you use the `weavejester/brew` tap. This\nwill be much more performant than the Homebrew core `cljfmt` package.\n\n```bash\nbrew install weavejester/brew/cljfmt\n```\n\nIf you're using Windows, there's a [zipped up binary][] you can download and\nextract manually.\n\nTo use cljfmt to check for formatting errors in your project, run:\n\n```bash\ncljfmt check\n```\n\nAnd to fix those errors:\n\n```bash\ncljfmt fix\n```\n\nUse `--help` for a list of all the command-line options.\n\nFor persistent configuration, you can use a [configuration file][].\n\n[homebrew]: https://brew.sh/\n[zipped up binary]: https://github.com/weavejester/cljfmt/releases/download/0.16.6/cljfmt-0.16.6-win-amd64.zip\n[configuration file]: #configuration\n\n### Clojure Tools\n\nThe official Clojure CLI supports installation of thirdparty [tools][].\nTo install cljfmt as a tool, run:\n\n```bash\nclj -Ttools install io.github.weavejester/cljfmt '{:git/tag \"0.16.6\"}' :as cljfmt\n```\n\nTo use the tool to check for formatting errors in your project, run:\n\n```bash\nclj -Tcljfmt check\n```\n\nAnd to fix those errors:\n\n```bash\nclj -Tcljfmt fix\n```\n\n[tools]: https://clojure.org/reference/deps_and_cli#tool_install\n\n### Leiningen\n\n[Leiningen][] is a popular Clojure build tool. To use cljfmt with\nLeiningen, add the following plugin to your `project.clj` file:\n\n```clojure\n:plugins [[dev.weavejester/lein-cljfmt \"0.16.6\"]]\n```\n\nTo use the plugin to check code for formatting errors, run:\n\n```bash\nlein cljfmt check\n```\n\nAnd to fix those errors:\n\n```bash\nlein cljfmt fix\n```\n\nTo configure it, put a `:cljfmt` key and a map of options in your\nproject file. See the [configuration][] section for more details.\n\n[leiningen]: https://github.com/technomancy/leiningen\n[configuration]: #configuration\n\n### Library\n\ncljfmt can be run as a library that formats a string of Clojure code or\nrecursively checks / fixes paths like the CLI tool.\nFirst, add the dependency:\n\n```edn\n{:deps {dev.weavejester/cljfmt {:mvn/version \"0.16.6\"}}}\n```\n\nThen use the library:\n\n#### Checking strings of code:\n\n```clojure\n(require '[cljfmt.core :as fmt])\n\n(fmt/reformat-string \"(defn sum [x y]\\n(+ x y))\")\n;; =\u003e \"(defn sum [x y]\\n  (+ x y))\"\n```\n\nTo load the configuration for the current directory:\n\n```clojure\n(require '[cljfmt.config :as cfg])\n\n(fmt/reformat-string \"(+ x\\ny)\" (cfg/load-config))\n;; =\u003e \"(+ x\\n   y)\"\n```\n\n#### Checking / fixing paths recursively\n\nBe sure to set the report fn to the clojure one as shown below. Otherwise the\n`check` and `fix` fns will assume they're running in console mode and will\ncall `System/exit`, print to stdout, etc.\n\n```clojure\n(require '[cljfmt.tool :as fmt]\n         '[cljfmt.report :as report])\n\n(fmt/check {:paths [\"/path/to/check\"], :report report/clojure})\n```\n\nOr to recursively fix paths:\n\n```clojure\n(require '[cljfmt.tool :as fmt]\n         '[cljfmt.report :as report])\n\n(fmt/fix {:paths [\"/path/to/fix\"], :report report/clojure})\n```\n\n### Babashka\n\ncljfmt can also be used from [Babashka][], either as a library or as a tool that\nyou define in your `bb.edn` file like so:\n\n```edn\n{:deps  {dev.weavejester/cljfmt {:mvn/version \"0.16.6\"}}\n :tasks {fmt {:doc \"Check formatting with cljfmt\"\n              :requires ([cljfmt.tool :as fmt])\n              :task (fmt/check {})}}}\n```\n\n[babashka]: https://babashka.org/\n\n### Editor Integration\n\nYou can also use cljfmt via your editor. Several Clojure editing\nenvironments have support for cljfmt baked in:\n\n* [Calva](https://github.com/BetterThanTomorrow/calva) (Visual Studio Code)\n* [CIDER](https://github.com/clojure-emacs/cider) (Emacs)\n* [clojureVSCode](https://github.com/avli/clojureVSCode) (Visual Studio Code)\n* [vim-cljfmt](https://github.com/venantius/vim-cljfmt) (Vim)\n\n\n## Configuration\n\nIn most environments, cljfmt will look for the following configuration\nfiles in the current and parent directories:\n\n* `.cljfmt.edn`\n* `cljfmt.edn`\n\nThe configuration file should contain a map of options.\n\nSince 0.16.0, only `.edn` configuration files are loaded by default.\nYou can enable reading of `.clj` configuration files with the\n`--read-clj-config-files` flag:\n\n* `.cljfmt.clj`\n* `cljfmt.clj`\n\nIf a `.clj` configuration file is detected without this flag, a warning\nis printed.\n\n### Leiningen\n\nIn Leiningen, the configuration is found in on the `:cljfmt` key in the\nproject map:\n\n```clojure\n:cljfmt {}\n```\n\nIn order to load the standard configuration file from Leiningen, add the\n`:load-config-file?` key to the `:cljfmt` map:\n\n```clojure\n:cljfmt {:load-config-file? true}\n```\n\n### Formatting Options\n\n* `:alias-map` -\n  a map of namespace alias to fully qualified namespace names. May be\n  symbols or strings. This option is unnecessary in most cases, because\n  cljfmt will parse the `ns` declaration in each file. See [INDENTS.md][].\n\n* `:refer-map` -\n  a map of referred symbol names to fully qualified namespace names. May be\n  symbols or strings. This option is unnecessary in most cases, because\n  cljfmt will parse the `ns` declaration in each file to extract `:refer`\n  mappings. Used for indentation rules when unqualified symbols need to be\n  matched against qualified indent rules. See [INDENTS.md][].\n\n* `:aligned-forms` -\n  a map of symbols to indexes that tell cljfmt where to expect forms it\n  should align. For example, `{let #{0}}` indicates that the first\n  argument of let (the binding vector) should be aligned. This option\n  will **replace** the default aligned forms. Used by\n  `:align-form-columns?`. **Experimental.**\n\n* `:align-form-columns?` -\n  true if cljfmt should align the symbols and values within certain\n  forms (such as `let`) so that they line up in columns. The forms are\n  defined via the `:aligned-forms` and `:extra-aligned-forms` options.\n  Defaults to false. **Experimental.**\n\n* `:align-map-columns?` -\n  true if cljfmt should align the keys and values of maps such that they\n  line up in columns. Defaults to false. **Experimental.**\n\n* `:align-single-column-lines?` -\n  true if cljfmt should include lines with single columns (where the\n  value is on the next line) when calculating column alignment. When\n  false, forms with wrapped values won't cause excessive horizontal\n  padding in other lines. Only applies when `:align-form-columns?` or\n  `:align-map-columns?` is true. Defaults to false. **Experimental.**\n\n* `:max-column-alignment-gap` -\n  a positive integer that sets the maximum number of spaces allowed\n  between a key and its aligned value. When alignment would produce\n  more spaces than this limit on a given row (e.g. due to a long\n  destructuring key), that row falls back to a single space instead.\n  Rows with shorter keys are still aligned normally. Useful for\n  preventing `:align-map-columns?` from producing excessive horizontal\n  padding in maps that contain outlier keys such as destructuring\n  forms. Defaults to nil (no limit). **Experimental.**\n\n  ```clojure\n  ;; Input:\n  {{:keys [several things here]} :sub-map\n   {:keys [several things]}      :sub-map2\n   :keys                         [direct values]\n   :as                           everything}\n\n  ;; With :align-map-columns? true and :max-column-alignment-gap 10:\n  {{:keys [several things here]} :sub-map   ;; 1 space, aligned\n   {:keys [several things]}      :sub-map2  ;; 6 spaces, still aligned (6 ≤ 10)\n   :keys [direct values]                    ;; 25 spaces, falls back to 1 space\n   :as everything}                          ;; 27 spaces, falls back to 1 space\n  ```\n\n* `:max-column-alignment-width` -\n  a positive integer that limits which keys participate in column\n  alignment. Keys whose end column is at or within N are aligned\n  together; keys that end past column N are not padded and receive a\n  single space before their value. Defaults to nil (no limit).\n  **Experimental.**\n\n  ```clojure\n  ;; Input:\n  {:a 1\n   :abcde 2\n   :abcdefg 3\n   :long-name 4}\n\n  ;; With :align-map-columns? true and :max-column-alignment-width 7:\n  ;; :a and :abcde end at or within column 7 and align together;\n  ;; :abcdefg and :long-name end past column 7 and are not padded\n  {:a     1      ;; ends within column 7, padded to value column\n   :abcde 2      ;; ends at column 7, sets the value column\n   :abcdefg 3    ;; ends past column 7, 1 space\n   :long-name 4} ;; ends past column 7, 1 space\n  ```\n\n* `:blank-lines-separate-alignment?` -\n  true if cljfmt should treat blank lines as separators when aligning\n  columns. When enabled, alignment groups are separated by blank lines,\n  allowing independent alignment within each group. Defaults to false.\n  **Experimental.**\n\n* `:blank-line-forms` -\n  a map of symbols that tell cljfmt which forms are allowed to have\n  blank lines inside of them. The value may be either `:all`, which\n  means blank lines are allowed between all elements in the form, e.g.\n  `{cond :all}` to allow blank lines between any of the elements\n  inside `cond`; or it may be a set of element indexes that are allowed\n  to have blank lines, e.g. `{let #{0}}`, to allow blank lines in the\n  binding of a `let` form. This option will **replace** the default\n  blank line forms; use `:extra-blank-line` forms to add additional\n  ones. Used by `:remove-blank-lines-in-forms?`. **Experimental.**\n\n* `:extra-aligned-forms` -\n  the same as `:aligned-forms`, except that this will **append** to the\n  default aligned forms. **Experimental.**\n\n* `:extra-blank-line-forms` - the same as `:blank-line-forms`, except that this\n  will **append** to the default blank line forms. **Experimental.**\n\n* `:extra-indents` -\n  the same as `:indents`, except that this will **append** to the\n  default indents.\n\n* `:function-arguments-indentation` -\n  - `:community` if cljfmt should follow the [community style recommendation][]\n    to indent function/macro arguments by a single space when there\n    are no arguments on the same line as the function name.\n  - `:cursive` if two spaces should be used instead, unless the first\n    thing in the list (not counting metadata) is a data structure\n    literal. This should replicate Cursive's default behaviour.\n  - `:zprint` if two spaces should be used instead if the first thing\n    in the list is a symbol or keyword. This should replicate zprint's\n    default behaviour.\n\n  Defaults to `:community`\n\n* `:indent-line-comments?` -\n  true if cljfmt should align whole-line `;;` comments with the code.\n  Defaults to false.\n\n* `:indentation?` -\n  true if cljfmt should correct the indentation of your code.\n  Defaults to true.\n\n* `:indents` -\n  a map of var symbols to indentation rules, i.e. `{symbol [\u0026 rules]}`.\n  See [INDENTS.md][] for a complete explanation. This will **replace**\n  the default indents.\n\n* `:normalize-newlines-at-file-end?` -\n  true if cljfmt should ensure files end with exactly one newline\n  character. This will remove multiple trailing blank lines and ensure\n  a final newline exists. Defaults to false.\n\n* `:remove-blank-lines-in-forms?` - whether to remove blank lines inside forms\n  per the [community style recommendation][no-blank-lines]. By default, this\n  does not remove blank lines in pairwise constructs like `cond` or within\n  binding vectors; configure these with `:blank-line-forms` and/or\n  `:extra-blank-line-forms`. Defaults to false. **Experimental**.\n\n* `:remove-consecutive-blank-lines?` -\n  true if cljfmt should collapse consecutive blank lines. This will\n  convert `(foo)\\n\\n\\n(bar)` to `(foo)\\n\\n(bar)`. Defaults to true.\n\n* `:insert-missing-whitespace?` -\n  true if cljfmt should insert whitespace missing from between\n  elements. This will convert `(foo(bar))` to `(foo (bar))`.\n  Defaults to true.\n\n* `:remove-multiple-non-indenting-spaces?` -\n  true if cljfmt should remove multiple non indenting spaces. For\n  example, this will convert \u003ccode\u003e{:a 1\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;:b 2}\u003c/code\u003e\n  to `{:a 1 :b 2}`. Defaults to false.\n\n* `:remove-surrounding-whitespace?` -\n  true if cljfmt should remove whitespace surrounding inner\n  forms. This will convert \u003ccode\u003e(\u0026nbsp;\u0026nbsp;foo\u0026nbsp;\u0026nbsp;)\u003c/code\u003e to `(foo)`.\n  Defaults to true.\n\n* `:remove-trailing-whitespace?` -\n  true if cljfmt should remove trailing whitespace in lines. This will\n  convert \u003ccode\u003e(foo)\u0026nbsp;\u0026nbsp;\u0026nbsp;\\n\u003c/code\u003e to `(foo)\\n`. Defaults to true.\n\n* `:sort-ns-references?` -\n  true if cljfmt should alphanumerically sort the requires, imports and\n  other references in the `ns` forms at the top of your namespaces.\n  Defaults to false.\n\n* `:split-keypairs-over-multiple-lines?` -\n  true if cljfmt should break hashmaps onto multiple lines. This will\n  convert `{:a 1 :b 2}` to `{:a 1\\n:b 2}`. Defaults to false.\n\n[indents.md]: docs/INDENTS.md\n[community style recommendation]: https://guide.clojure.style/#one-space-indent\n[no-blank-lines]: https://guide.clojure.style/#no-blank-lines-within-def-forms\n\n### Runtime Options\n\n* `:file-pattern` -\n  a regular expression to decide which files to scan. Defaults to\n  `#”\\.clj[csx]?$”`. **Note:** if your configuration is defined in an\n  edn file, you will need to use a string with the `#re` tag. For\n  example: `#re \"\\\\.clj[csx]?$\"`.\n\n* `:parallel?` -\n  true if cljfmt should process files in parallel. Defaults to false.\n\n* `:read-clj-config-files?` -\n  true if cljfmt should read `.clj` config files. For security reasons,\n  `.clj` config files are ignored by default, as they can execute arbitrary\n  code. Set this to true to enable reading `.clj` config files. Defaults to false.\n\n* `:paths` -\n  determines which files and directories to recursively search for\n  Clojure files. Defaults to checking `src` and `test`, except in\n  Leiningen where the `:source-paths` and `:test-paths` keys are used\n  instead.\n\n  Paths can also be passed as command line arguments. If the path is\n  `-`, then the input is STDIN, and the output STDOUT.\n\n## License\n\nCopyright © 2026 James Reeves\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%2Fweavejester%2Fcljfmt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweavejester%2Fcljfmt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweavejester%2Fcljfmt/lists"}