Changelog
This project follows a simple changelog discipline:
- keep user-visible changes in
Unreleaseduntil the next cut - group entries by impact, not by file
- call out migration-impacting changes explicitly
Unreleased
Section titled “Unreleased”--diffnow works with--checkand non-human--report-formatmodes; previously both suppressed the unified diff output
0.3.0 — 2026-04-08
Section titled “0.3.0 — 2026-04-08”--dump-schemaflag — prints the JSON Schema for the.cmakefmt.yaml/.cmakefmt.tomlconfig file to stdout and exits; schema is also published atcmakefmt.dev/schemas/latest/schema.jsonfor zero-config YAML autocomplete in editors withredhat.vscode-yamlor similar plugins--lspflag — starts a stdio JSON-RPC Language Server Protocol server supportingtextDocument/formattingandtextDocument/rangeFormatting; enables format-on-save in any editor with LSP client support (Neovim, Helix, Zed, Emacs, …) without a dedicated extension- Guide pages on cmakefmt.dev: editor integration, CI integration, tool comparison, badge, and “Projects using cmakefmt”
0.2.0 — 2026-04-07
Section titled “0.2.0 — 2026-04-07”- interactive browser playground at cmakefmt.dev/playground — format CMake code, edit config, and define custom command specs entirely in the browser via WebAssembly
format.disableconfig option — global kill-switch that returns the source file unchanged; useful for temporarily opting out of formatting without removing the config fileformat.line_endingconfig option — controls output line endings:unix(LF, default),windows(CRLF), orauto(detects predominant ending in the input and preserves it)format.always_wrapconfig option — list of command names that are always rendered in vertical (wrapped) layout, never inline or hanging; thealways_wrapflag in per-command specs (commands:) is now also honouredformat.require_valid_layoutconfig option — whentrue, the formatter returns an error if any output line exceedsline_width; useful for strict CI enforcementformat.fractional_tab_policyconfig option — controls sub-tab-stop indentation remainders whenuse_tabsistrue:use-space(default) keeps them as spaces,round-uppromotes them to a full tabformat.max_rows_cmdlineconfig option — maximum number of rows a positional argument group may occupy before the hanging-wrap layout is rejected and vertical layout is used instead (default:2)markup.explicit_trailing_patternconfig option — regex pattern (default#<) that marks an inline comment as trailing its preceding argument, keeping it on the same line rather than wrapping to a new line
0.1.1 — 2026-04-06
Section titled “0.1.1 — 2026-04-06”- Homebrew installation support (
brew install cmakefmt/cmakefmt/cmakefmt) - shell completion installation instructions
- site metadata and crate status badge on docs.rs
Changed
Section titled “Changed”- improved docs.rs readability and tightened public API surface
- documentation clarity and wording improvements
0.1.0 — 2026-04-05
Section titled “0.1.0 — 2026-04-05”- full CLI workflow:
--check,--diff,--in-place,--staged,--changed,--files-from,--parallel,--dump-config,--list-input,--list-changed,--explain-config,--quiet,--keep-going - recursive file discovery with
.cmakefmtignoreand--exclude-regexsupport - YAML and TOML config file support with automatic discovery
- comment preservation and fence/barrier support (
# cmakefmt: off/on) - pragma-gated rollout mode
- formatter result caching
- colored diff output and in-place progress bar
- CI-oriented report formats (JSON, JUnit, SARIF, GitHub Actions, GitLab CI)
- legacy
cmake-formatconfig conversion (--convert-config) - built-in and module-command spec coverage audited against CMake 4.3.1
- custom command specifications via config
- real-world regression corpus covering LLVM, Qt, protobuf, and more
- performance benchmarks: ~20× geometric-mean speedup over
cmake-format - parallel formatting with
--parallel - comprehensive docs site at cmakefmt.dev
- shell completion generation (
--completions) - dual MIT/Apache-2.0 licensing with full REUSE compliance
- Windows, macOS, and Linux support
Compatibility Notes
Section titled “Compatibility Notes”cmakefmtaims to be easy to migrate to fromcmake-format, but output is not intended to be byte-for-byte identical- config option names differ from
cmake-formatin places; use--convert-configto migrate