yamlfmt
is an extensible command line tool or library to format yaml files.
- Create a command line yaml formatting tool that is easy to distribute (single binary)
- Make it simple to extend with new custom formatters
- Enable alternative use as a library, providing a foundation for users to create a tool that meets specific needs
This tool is not yet officially supported by Google. It is currenlty maintained solely by @braydonk.
To download the yamlfmt
command, you can download the desired binary from releases or install the module directly:
go install github.com/google/yamlfmt/cmd/yamlfmt@latest
By default, the tool will recursively find all files that match the glob path **/*.{yaml,yml}
extension and attempt to format them with the basic formatter. To run the tool with all default settings, simply run the command with no arguments:
yamlfmt
You can also run the command with paths to each individual file, or with glob paths:
yamlfmt x.yaml y.yaml config/**/*.yaml
(NOTE: Glob paths are implemented using the doublestar package, which is far more flexible than Go's glob implementation. See the doublestar docs for more details.)
The tool can be configured with a .yamlfmt
configuration file in the working directory. The configuration is specified in yaml.
If you would like to have a consistent configuration for include and exclude paths, you can also use a configuration file. The tool will attempt to read a configuration file named .yamlfmt
in the directory the tool is run on. In it, you can configure paths to include and exclude, for example:
include:
- config/**/*.{yaml,yml}
exclude:
- excluded/**/*.yaml
In your .yamlfmt
file you can also specify configuration for the formatter if that formatter supports it. To change the indentation level of the basic formatter for example:
formatter:
type: basic
indentation: 4
If the type is not specified, the default formatter will be used. In the tool included in this repo, the default is the basic formatter.
The CLI supports 3 operation modes:
- Format (default, no flags)
- Format and write the matched files
- Dry run (
-dry
flag)- Format the matched files and output the diff to
stdout
- Format the matched files and output the diff to
- Lint (
-lint
flag)- Format the matched files and output the diff to
stdout
, exits with status 1 if there are any differences
- Format the matched files and output the diff to
- Stdin (
-in
flag)- Format the yaml data from
stdin
and output the result tostdout
- Format the yaml data from
(NOTE: If providing paths as command line arguments, the flags must be specified before any paths)