
8k stars · MIT · v3.11.2 (2026-06-27) · Track this in Scout
One command-line program that queries and edits eight structured file formats with a single selector syntax.
▶Repo detailsthe review · specs · pros & cons · install
What it does
You give it a file and a selector, and it returns the value. Selectors are dotted paths with index and filter forms, such as .users.[0].name or .users.all().name. The same selector works whatever the input format, because it parses the file first and queries the result. It writes as well as reads: dasel put sets a value, dasel delete removes one, and -w chooses the output format, which is how it converts between them. Formats covered are JSON, YAML, TOML, XML, INI, HCL, KDL and CSV. It is a single static binary with no runtime to install, which makes it easy to drop into a container image or a build step. Version 3.11.2 landed on 27 June 2026. The selector language is its own, so jq expressions do not work, and it is not a general transformation tool — complex reshaping is where it runs out.
Why it matters
Who it suits. Anyone writing scripts that touch several configuration formats, especially inside build steps and container images where installing a Python runtime is unwelcome. Also anyone who regularly needs to turn a YAML file into JSON or the reverse. Skip it if jq already covers everything you do, because a second selector language is a real cost for no gain.
Verdict. Worth the download if your scripts touch more than two formats. The honest comparison is against the two tools above it. kislyuk/yq reuses jq syntax exactly and needs jq and Python; mikefarah/yq, covered in Edition 41, is a single binary with a syntax close to jq; dasel is a single binary with a syntax of its own and the widest format coverage, including INI, HCL and KDL, which neither of the others handle. Judge it on formats and on dependencies rather than on quality — all three are good. Code was last pushed on 27 June 2026, four months ago, which is normal for a tool this finished and not a cause for concern. For plain JSON searching with grep, tomnomnom/gron solves a related problem in a completely different way.
- A single static binary. Nothing to install alongside it, which matters in a container image.
- Eight formats, including INI, HCL and KDL that the alternatives do not cover.
- Writes and converts as well as reads, so it edits configuration in place.
- Its own selector language. If you know
jq, you are learning a second one. - Complex reshaping is beyond it. It reads and edits well; it does not transform deeply.
- Fewer users than
jqor the mainyq, so searching for an unusual case finds less.
mikefarah/yqA single binary covering YAML, JSON, XML, CSV and TOML with a jq-like syntax; narrower on formats, far more widely used. Covered in Edition 41.
Track this in Scout
kislyuk/yqReuses real jq syntax by converting to JSON and back, at the cost of needing jq and Python present.
Track this in Scout- tomnomnom/gron
Flattens JSON into one assignment per line so ordinary grep can search it, then turns it back; a different answer to the same frustration.
Track this in Scout
brew install dasel

