yq: Command-line YAML/XML/TOML processor - jq wrapper for YAML, XML, TOML documents
Installation
pip install yq
Before using yq, you also have to install its dependency, jq. See the jq installation instructions for details and directions specific to your platform.
On macOS, yq is also available on Homebrew: use brew install python-yq.
Synopsis
yq takes YAML input, converts it to JSON, and pipes it to jq:
cat input.yml | yq .foo.bar
Like in jq, you can also specify input filename(s) as arguments:
yq .foo.bar input.yml
By default, no conversion of jq output is done. Use the --yaml-output/-y option to convert it back into YAML:
cat input.yml | yq -y .foo.bar
Mapping key order is preserved. By default, custom YAML tags and styles in the input are ignored. Use the --yaml-roundtrip/-Y option to preserve YAML tags and styles by representing them as extra items in their enclosing mappings and sequences while in JSON:
yq -Y .foo.bar input.yml
yq can be called as a module if needed. With -y/-Y, files can be edited in place like with sed -i:
python -m yq -Y --indentless --in-place '.["current-context"] = "staging-cluster"' ~/.kube/config
Use the --width/-w option to pass the line wrap width for string literals; --width 0 disables wrapping. Use --explicit-start/--explicit-end to emit YAML start/end markers even when processing a single document. YAML output preserves an explicit leading --- from the input and emits one for multidocument streams. All other command line arguments are forwarded to jq. yq forwards the exit code jq produced, unless there was an error in YAML parsing, in which case the exit code is 1. See the jq manual for more details on jq features and options.
Because YAML treats JSON as a dialect of YAML, you can use yq to convert JSON to YAML: yq -y . < in.json > out.yml.
YAML frontmatter
Use --yaml-frontmatter/-F to process a YAML header followed by Markdown or other text:
yq -Y --yaml-frontmatter '.draft = false' post.md yq -iYF '.draft = false' post.md another-post.md
Only the first document is sent to jq. An initial --- opens the header; an unindented --- or ... document marker closes it. With -y or -Y, the closing delimiter and everything after it pass through unchanged, including comments, whitespace, and line endings. The filter must produce exactly one document, and each invocation accepts one input file (or multiple files with --in-place). A header without a closing delimiter is processed as ordinary YAML. Without -y/-Y, only the JSON query result is emitted, allowing queries such as yq -F .title post.md. The -f option still means jq’s --from-file.
XML support
yq also supports XML. The yq package installs an executable, xq, which transcodes XML to JSON using xmltodict and pipes it to jq. Roundtrip transcoding is available with the xq --xml-output/xq -x option. Multiple XML documents can be passed in separate files/streams as xq a.xml b.xml. Use --xml-item-depth to descend into large documents, streaming their contents without loading the full doc into memory (for example, stream a Wikipedia database dump with cat enwiki-*.xml.bz2 | bunzip2 | xq . --xml-item-depth=2). Entity expansion and DTD resolution is disabled to avoid XML parsing vulnerabilities. Use python -m yq.xq if you want to ensure a specific Python runtime.
TOML support
yq supports TOML as well. The yq package installs an executable, tomlq, which uses the tomlkit library to transcode TOML to JSON, then pipes it to jq. Roundtrip transcoding is available with the tomlq --toml-output/tomlq -t option. Use tomlq --toml-roundtrip/tomlq -T to preserve TOML comments, whitespace, and formatting metadata while editing. Use python -m yq.tomlq if you want to ensure a specific Python runtime.
Links
jq - the command-line JSON processor utility powering yq
Bugs
Please report bugs, issues, feature requests, etc. on GitHub.
License
Licensed under the terms of the Apache License, Version 2.0.
Release files for yq 4.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yq-4.3.0.tar.gz | 39.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yq-4.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.0 kB
Release files / yq-4.3.0.tar.gz
| Download URL | yq-4.3.0.tar.gz |
|---|---|
| Size | 39.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8c8d0b0022e7c8226154d5a64195f2d1f5346f40063b3cb51e58ee3303ac9190
|
|
BLAKE2b-256 checksum How to use checksums |
0bc9d678ff9fe791a7fb7bbe184220506dd6f39074d72260acb9744ec3f6bef4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / yq-4.3.0-py3-none-any.whl
| Download URL | yq-4.3.0-py3-none-any.whl |
|---|---|
| Size | 25.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b565ff341c6d67c96b873df7e82262f683f827ddf9373a746f817832927caa2b
|
|
BLAKE2b-256 checksum How to use checksums |
0f579e8176261245124391f1ba3d19dffbd1433404561e010a7db61c0f647b14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency log