a lightweight and portable command-line YAML processor. yq uses jq like syntax but works with yaml files as well as json. It doesn't yet support everything jq does - but it does support the most common operations and functions, and more is being added continuously.
yq is written in go - so you can download a dependency free binary for your platform and you are good to go! If you prefer there are a variety of package managers that can be used as well as docker, all listed below.

Notice for v4.x versions prior to 4.18.1

Since 4.18.1, yq's 'eval/e' command is the default command and no longers needs to be specified.
Older versions will still need to specify 'eval/e'.
Similarly, '-' is no longer required as a filename to read from STDIN (unless reading from multiple files).
Prior to 4.18.1
cat file.yaml | yq e '.cool' -
cat file.yaml | yq '.cool'
When merging multiple files together, eval-all/ea is still required to tell yq to run the expression again all the document at once.

Quick Usage Guide

Read a value:
yq '.a.b[0].c' file.yaml
Pipe from STDIN:
cat file.yaml | yq '.a.b[0].c'
Update a yaml file, inplace
yq -i '.a.b[0].c = "cool"' file.yaml
Update using environment variables
NAME=mike yq -i '.a.b[0].c = strenv(NAME)' file.yaml
Merge multiple files
yq ea '. as $item ireduce ({}; . * $item )' path/to/*.yml
Multiple updates to a yaml file
yq -i '
.a.b[0].c = "cool" |
.x.y.z = "foobar" |
.person.name = strenv(NAME)
' file.yaml
Take a look at the discussions for common questions, and cool ideas


See the github page for the various ways you can install and use yq

Known Issues / Missing Features

  • yq attempts to preserve comment positions and whitespace as much as possible, but it does not handle all scenarios (see https://github.com/go-yaml/yaml/tree/v3 for details)
  • Powershell has its own...opinions on quoting yq
See tips and tricks for more common problems and solutions.
Last modified 1mo ago
Copy link
On this page
Notice for v4.x versions prior to 4.18.1
Quick Usage Guide
Known Issues / Missing Features