yq is a lightweight and portable command-line YAML processor
Docker Pulls
Github Releases (by Release)
Go Report

Deprecated Notice

v3 is now deprecated, critical bug fixes and security fixes will still be applied until August 2021.


yq has pre-built binaries for most platforms - checkout the releases page for the latest build. Alternatively - you can use one of the methods below:

MacOs / Linux via Homebrew:

brew install yq@3
Note that as this is a versioned brew it will not add the yq command to your path automatically. Please follow the instructions given by brew upon installation.

On Windows:

choco install yq

Alpine Linux

  • Enable edge/community repo by adding $MIRROR/alpine/edge/community to /etc/apk/repositories
  • Update database index with apk update
  • Install yq with apk add yq

On Ubuntu and other Linux distributions supporting snap packages:

snap install yq --channel=v3/stable

Snap notes

yq installs with with strict confinement in snap, this means it doesn't have direct access to root files. To read root files you can:
sudo cat /etc/myfile | yq r - somecommand
And to write to a root file you can either use sponge:
sudo cat /etc/myfile | yq r - somecommand | sudo sponge /etc/myfile
or write to a temporary file:
sudo cat /etc/myfile | yq r - somecommand | sudo tee /etc/myfile.tmp
sudo mv /etc/myfile.tmp /etc/myfile
rm /etc/myfile.tmp

On Ubuntu 16.04 or higher from Debian package:

sudo add-apt-repository ppa:rmescandon/yq
sudo apt update
sudo apt install yq -y
Kindly maintained by @rmescandon

go get:

GO111MODULE=on go get github.com/mikefarah/yq/v3


Oneshot use:
docker run --rm -v ${PWD}:/workdir mikefarah/yq yq [flags] <command> FILE...
Run commands interactively:
docker run --rm -it -v ${PWD}:/workdir mikefarah/yq sh
It can be useful to have a bash function to avoid typing the whole docker command:
yq() {
docker run --rm -i -v ${PWD}:/workdir mikefarah/yq yq $@

Parsing engine and YAML spec support

Under the hood, yq uses go-yaml v3 as the yaml parser, which supports yaml spec 1.2. In particular, note that in 1.2 the values 'yes'/'no' are no longer interpreted as booleans, but as strings.
Last modified 2yr ago