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:
yamlfmtYou 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/**/*.yamlIn 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
indent: 4If 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 (
-dryflag)- Format the matched files and output the diff to
stdout
- Format the matched files and output the diff to
- Lint (
-lintflag)- 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 (
-inflag)- Format the yaml data from
stdinand 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)