All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Nothing.
v3.8.1 - 2026-04-30
dasel mannow generates a reproducible manpage based on SOURCE_DATE_EPOCH.
v3.8.0 - 2026-04-26
dasel completion <shell>subcommand to generate shell completion scripts for bash, zsh, fish, and powershell (#497).dasel mansubcommand to generate a man page (#497).
- YAML string quote style (double, single, literal, folded) is now preserved on round-trip (#452).
v3.7.0 - 2026-04-25
mergefunction now performs deep merge, recursively merging nested maps (#133).
v3.6.0 - 2026-04-25
--compactflag for compact output (no indentation/newlines).
stringifyfunction now produces compact output.
- Compact/pretty output support for JSON, TOML, YAML, and XML writers (#457).
v3.5.0 - 2026-04-25
splitfunction that splits a string by a separator into an array of strings.toLowerfunction that converts a string to lowercase.toUpperfunction that converts a string to uppercase.trimfunction that trims whitespace from both ends of a string.trimPrefixfunction that trims a prefix from a string.trimSuffixfunction that trims a suffix from a string.startsWithfunction that checks if a string starts with a given prefix.endsWithfunction that checks if a string ends with a given suffix.indexOffunction that returns the index of the first occurrence of a substring, or -1 if not found.absfunction that returns the absolute value of a number.floorfunction that returns the largest integer less than or equal to the input.ceilfunction that returns the smallest integer greater than or equal to the input.roundfunction that rounds a number to the nearest integer.avgfunction that returns the average of the given numbers.flattenfunction that flattens a nested array by one level.uniquefunction that removes duplicate values from an array.firstfunction that returns the first element of an array.lastfunction that returns the last element of an array.valuesfunction that returns the values of a map as an array.entriesfunction that converts a map into an array of{key, value}objects.fromEntriesfunction that converts an array of{key, value}objects into a map.toBoolfunction that converts a value to a boolean.anyexpression that returns true if any element in an array matches the predicate.allexpression that returns true if all elements in an array match the predicate.countexpression that counts the number of elements in an array that match the predicate.stringifyfunction that serializes a structured value into a format string (inverse ofparse).- Ternary operator (
condition ? then : else).
- Fixed a bug in YAML and TOML parsers that caused them to fail when parsing non-base10 numbers (e.g. hex, binary, octal).
- Fixed a bug in the
toIntfunction that caused it to fail when parsing non-base10 numbers (e.g. hex, binary, octal). - XML child element ordering now has more comprehensive round-trip handling. Thanks @takeokunn.
- XML writer now validates element and attribute names per the XML 1.0 spec, returning a clear error for invalid names instead of producing malformed XML. Thanks @lawrence3699.
v3.4.1 - 2026-03-30
- Escape characters in query strings now work as expected, e.g.
\nwill be treated as a newline character instead of the literal string\n. - Fixed a typo in the
<=token that could cause a display issue.
v3.4.0 - 2026-03-19
keysfunc that returns the keys or indices of a node. See docs.
v3.3.2 - 2026-03-18
- Fixed a bug that caused the
getfunction to returnfalseinstead of an error when doing an invalid lookup. - Fixed an issue with reading/writing null values in YAML.
- Fixed a nil pointer dereference when reading/writing null YAML documents.
- Fixed a security issue allowing unbounded YAML expansion. Thanks to @kq5y.
v3.3.1 - 2026-02-26
- Fixed query selector parsing issue that incorrectly parsed array accessors when they followed a
filterormapcall.
v3.3.0 - 2026-02-25
replacefunction to replace occurrences of a substring in a string with another string. See docs.
v3.2.3 - 2026-02-23
- XML parser now preserves comments and processing instructions during round-trip (#175).
- Spread operator within array construction is now honoured.
v3.2.2 - 2026-02-13
- Swapped to use goccy/go-json for improved performance. Thanks @imix
- Updated model
IsScalarinternals to improve efficiency. Thanks @imix - General dependency updates.
- TOML parser sub table parsing. Thanks @pmeier
v3.2.1 - 2026-01-05
- XML parser now correctly handles empty CDATA.
v3.2.0 - 2025-12-26
joinfunction to join array elements into a single string with a specified separator. See docs.
v3.1.4 - 2025-12-18
Selectfunc in the exposed go API now correctly maps return values to the respective types.
v3.1.3 - 2025-12-18
- XML documents no longer create redundant
rootoritemelements. - Dasel no longer loses value metadata when reading/writing to internal models.
v3.1.2 - 2025-12-17
- Fix XML reading/writing when XML processing instructions are present.
v3.1.1 - 2025-12-16
- Homebrew release.
v3.1.0 - 2025-12-16
sumfunction to sum numeric values in an array. See docs.
v3.0.0 - 2025-12-15
- Major new version release.
- INI support.
- HCL support.
- Dasel syntax now supports variables and expressions.
- Files can now be read and parsed inside a dasel query.
- Variables can now be passed to dasel from the command line.
- Support for comments in queries.
- Dasel config file to define default file format.
- Interactive mode for dasel CLI (alpha).
- Go module path changed to
github.com/tomwright/dasel/v3. - Internal changes to support new version.
- Query/selector syntax revamp. See docs for more information.
- Majority of read/write operations will now maintain ordering.
- Migrated from Cobra to Kong for CLI parsing/processing.
- Removed
putanddeletecommands. Instead, modify within the query and use--rootflag.
- File redirect now works in the same way as piped input.
- Various other bug fixes and improvements.
- Whitespace in query syntax is now handled correctly.
v2.8.1 - 2024-06-30
- Fixed a bug related to yaml aliases.
v2.8.0 - 2024-06-28
- Fixed a bug that could cause a panic.
type()now returnsnullinstead ofunknownfor null values.- Added YAML support for merge tag/aliases. Thanks to pmeier. Issue 285.
v2.7.0 - 2024-03-14
null()function. See docs
- Dasel now correctly handles
nullvalues.
v2.6.0 - 2024-02-15
- Support for
--indentflag. - More descriptive errors when dasel fails to open a file.
- Docker build improvements in workflows.
v2.5.0 - 2023-11-28
- Add
manthat generates manpages for all dasel subcommands.
- Fixed an issue when parsing empty input documents.
v2.4.1 - 2023-10-18
- JSON output now acts as expected regarding the EscapeHTML flag.
v2.4.0 - 2023-10-18
orDefault()function. See docs--csv-commaflag to change the csv separator.--csv-write-commaflag to change the csv separator specifically for writes.--csv-commentflag to change the csv comment character.--csv-crlfflag to enable or disable CRLF output when working with csv files.
- Resolved an issue with YAML parser that was causing strings to be read as booleans.
- Fix a parsing issue with CSV types that forced you to expand and merge in order for it selects to work Issue 364.
v2.3.6 - 2023-08-30
- XML is now formatted correctly. (#354)
v2.3.5 - 2023-08-29
- Small internal optimisation (#341)
- Update to go 1.21
- Upgrade dependencies
- Resolved an issue with YAML parser that was causing strings to be read as numbers.
- Timestamps can now be resolved as expected in YAML.
v2.3.4 - 2023-06-01
lenfunction now works with new map type.keysfunction now works with new map type.
v2.3.3 - 2023-05-31
- Errors when selecting data are now correctly handled.
v2.3.2 - 2023-05-31
- Restored previous octal, binary and hex number parsing support in YAML and
putcommand.
v2.3.1 - 2023-05-29
versioncommand now outputs correct version information (only affected v2 onwards)
v2.3.0 - 2023-05-29
- Maps are now ordered internally.
- JSON and YAML maps maintain ordering on read/write.
all()func now works with strings.index()func now works with strings.
- Multi-document output should now be displayed correctly.
- Index shorthand selector now works with multiple indexes.
- Null values are now correctly handled.
v2.2.0 - 2023-04-17
keys()function.
v2.1.2 - 2023-03-27
- Join function.
- String function.
- Null error caused by null values in arrays. See PR 307.
v2.1.1 - 2023-01-19
- Changed go module to
github.com/tomwright/dasel/v3to ensure it works correctly with go modules.
v2.1.0 - 2023-01-11
- Ability to jump to a parent x levels up with
parent(x). Defaults to 1 level.
v2.0.2 - 2022-12-07
- Argument parsing issue that caused files to be written to the wrong place. See discussion 268.
v2.0.1 - 2022-12-07
floattype inputcommand.
- Output values are now correctly de-referenced. This fixed issues with encoded values not appearing correctly.
- Escape characters in selector strings now work as expected.
v2.0.0 - 2022-12-02
See documentation for all changes.
- Selector syntax
v1.27.3 - 2022-10-18
- The compact flag now works with the XML parser.
v1.27.2 - 2022-10-18
- Help text for select and delete commands now contain all available parsers.
- Errors now implement the
Isinterface so they are easier to use from go. - Floats are now formatted in decimal format instead of scientific notification when writing to CSV (Issue 245, Issue 229)
v1.27.1 - 2022-09-28
- Improved selector comparison parsing to allow matching on values containing special characters.
v1.27.0 - 2022-09-26
- New
value-fileflag allows you toputvalues read from a file (Issue 246)
v1.26.1 - 2022-08-24
- Make the completion command available for use (Issue 216)
- Make the
__completecommand available for use
v1.26.0 - 2022-07-09
- Search optional selector -
(#:key=value)
v1.25.1 - 2022-06-29
- Pre-commit hooks for validate command.
v1.25.0 - 2022-06-26
- Support for struct type usage in go package.
- Validate command.
v1.24.3 - 2022-04-23
- Gzip compressed binaries on releases.
v1.24.2 - 2022-04-22
- Update a package to avoid a High Vulnerability in golang.org/x/crypto with CVE ID CVE-2022-27191
v1.24.1 - 2022-03-28
storagepackage has been moved outside theinternalpackage.
- New funcs added in
v1.24.0can now be used as expected since you can now access thestorage.ReadWriteOption.
v1.24.0 - 2022-03-18
Node.NewFromFilefunc to load a root node from a file.Node.NewFromReaderfunc to load a root node from anio.Reader.Node.WriteToFilefunc to write results to a file.Node.Writefunc to write results to anio.Writer.
v1.23.0 - 2022-03-10
- Update github.com/pelletier/go-toml to consume fix for #191.
- Sprig functions to output formatter template.
v1.22.1 - 2021-11-09
- Cleaned up error output
v1.22.0 - 2021-11-09
- Type selector
[@].
- Errors are now written to stderr as expected.
v1.21.2 - 2021-10-21
- Linux arm32 build target.
v1.21.1 - 2021-09-30
--escape-htmlflag now defaults to false.
v1.21.0 - 2021-09-29
--escape-htmlflag.
put documentandput objectare now aware of the--merge-input-documentsflag.
v1.20.1 - 2021-09-28
buster-slimandalpinetags to built docker images.
- Different encodings in XML files are now handled as expected.
v1.20.0 - 2021-08-30
-v,--valueflag to workaround dash issue.
- Fixed an issue in which unicode characters could cause issues when parsing selectors.
v1.19.0 - 2021-08-14
--colour,--colorflag to enable colourised output in select command.
v1.18.0 - 2021-08-11
--formatflag toselectcommand.
v1.17.0 - 2021-08-08
- Support for
!=comparison operator in dynamic and search selectors. - Support for
-/keyValuekey in dynamic selectors.
v1.16.1 - 2021-08-02
- Fixed a bug that stopped the delete command editing files in place.
v1.16.0 - 2021-08-01
- Delete command.
v1.15.0 - 2021-05-06
--merge-input-documentsflag.
- Optional
noupdaterbuild tag to disable the self-update command.
- Empty XML documents are now parsed correctly.
v1.14.1 - 2021-04-15
- arm64 build support.
v1.14.0 - 2021-04-11
.[#]length selector.>comparison operator.>=comparison operator.<comparison operator.<=comparison operator.
v1.13.6 - 2021-03-29
- Development versions of dasel will now include more specific version information where possible.
- Fix an issue that stopped dasel being able to output CSV documents when parsed from JSON.
v1.13.5 - 2021-03-22
- Empty map values are now initialised as
map[string]interface{}rather thanmap[interface{}]interface{}.
v1.13.4 - 2021-03-11
v1.13.3 - 2021-03-05
- Blank YAML and CSV input is now treated as an empty document.
- Blank JSON input is now treated as an empty document.
v1.13.2 - 2021-02-25
- Improved information provided in
UnsupportedTypeForSelectorerrors. - Upgrade to go 1.16.
- Make sure the
-n,--nullflag has an effect in multi-select queries.
v1.13.1 - 2021-02-18
- Added
CGO_ENABLED=0build flag to ensure linux_amd64 builds are statically linked.
v1.13.0 - 2021-02-11
--lengthflag to select command.
v1.12.2 - 2021-01-05
- Fix a bug that stopped the write parser being properly detected when writing to the input file.
v1.12.1 - 2021-01-05
- Build workflows now updated to run on ubuntu-latest and use a matrix to build assets for
linux,darwinandwindowsfor bothamd64and386.
- Release asset for macos/darwin is now named
dasel_darwin_amd64instead ofdasel_macos_amd64. - Self-updater now identifies
devversion as development.
v1.12.0 - 2021-01-02
- Add
-c,--compactflag to remove pretty-print formatting from JSON output. - Defined
storage.IndentOption(indent string) ReadWriteOption. - Defined
storage.PrettyPrintOption(enabled bool) ReadWriteOption.
- Changed
storage.Parserfuncs to allow the passing of...ReadWriteOption.
v1.11.0 - 2020-12-22
- Benchmark info now contains graphs.
updatecommand to self-update dasel.
- Benchmark info now directly compares dasel, jq and yq.
v1.10.0 - 2020-12-19
- Add
dasel put documentcommand. - Benchmark information.
-r,--readand-w,--writeflags are now used indasel put object.- Fix issues that occurred when writing to the root node.
- Command names and descriptions.
v1.9.1 - 2020-12-12
- Stopped parsing XML entities in strings.
v1.9.0 - 2020-12-12
- Add keys/index selector in multi queries.
- Add
-n,--nullflag.
v1.8.0 - 2020-12-01
- Add ability to use
ANY_INDEX([*]) andDYNAMIC((x=y)) selectors on maps/objects.
v1.7.0 - 2020-11-30
- Add
-r,--readand-w,--writeflags to specifically choose input/output parsers. This allows you to convert data between formats.
v1.6.2 - 2020-11-18
- Add support for multi-document JSON files.
v1.6.1 - 2020-11-17
- Remove some validation on
dasel put objectto allow you to put empty objects.
v1.6.0 - 2020-11-17
- Add search selector to allow recursive searching from the current node.
v1.5.1 - 2020-11-14
- Fixed an issue that stopped new values being saved.
v1.5.0 - 2020-11-12
- Add ability to use
\as an escape character in selectors.
v1.4.1 - 2020-11-11
- Fix an issue when parsing dynamic selectors.
v1.4.0 - 2020-11-08
- Add
-m,--multipleflag to deal with multi-value queries. - Add
ANY_INDEXor[*]selector. - Add
NextMultipleproperty to theNodestruct - this is used when processing multi-value queries. - Add
Node.QueryMultiplefunc. - Add
Node.PutMultiplefunc.
v1.3.0 - 2020-11-08
- Add support for CSV files.
- Add support for multi-document YAML files.
- Add CodeQL step in github actions.
- Docker image is now pushed to ghcr instead of github packages.
v1.1.0 - 2020-11-01
- Add sub-selector support in dynamic selectors.
v1.0.4 - 2020-10-30
- Add
--plainflag to tell dasel to output un-formatted values.
v1.0.3 - 2020-10-29
- Command output is now followed by a newline.
v1.0.2 - 2020-10-28
- Docker image is now built and pushed when a new release is tagged.
v1.0.1 - 2020-10-28
- Add support for XML.
- Add
-as an alias forstdin/stdoutin--fileand--outputflags. - Selector can now be given as the first argument making the flag itself optional.
selectis now the default command.
v1.0.0 - 2020-10-27
- Add lots of tests.
- Add docs.
- Got accepted to go-awesome.
v0.0.5 - 2020-09-27
- Add support for TOML.
v0.0.4 - 2020-09-27
- Ability to check against the node value in a dynamic selector.
- Code coverage.
- Use reflection instead of fixed type checks.
v0.0.3 - 2020-09-24
- Use reflection instead of fixed type checks.
- Extract commands into their own functions to make them testable.
v0.0.2 - 2020-09-23
- Add ability to pipe data in/out of dasel.
- Add dasel put command.
v0.0.1 - 2020-09-22
- Everything!