NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #337 by repository stars
Last release 4 days ago
02 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 29 of 29 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
780 releases · first in 2021
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Adds avi decoder and replace raw with more convenient bits and bytes format. Otherwise mostly small updates and bug fixes.
Adds avi decoder and replace raw with more convenient bits and bytes format. Otherwise mostly small updates and bug fixes.
Increase minor version. fq does not use semantic versioning (yet) but it's probably a good idea to start increase minor version when adding features to be able to do patch releases.
In other fq related news:
raw format with bits and bytes format that decodes directly to a binary with different unit size.$ echo -n 'hello' | fq -d bytes '.[-3:]' > last_3_bytes
$ echo 'hello' | fq -d bytes '.[1]'
101
$ echo 'hello' | fq -c -d bits '[.[range(8)]]'
[0,1,1,0,1,0,0,0]
avc_au Support annexb format (used in AVI). #476avi Add AVI (Audio Video Interleaved) decoder. #476# extract samples for stream 1
$ fq '.streams[1].samples[] | tobytes' file.avi > stream01.mp3
bits Replaces raw but is a binary using bit units. #485bytes Replaces raw but is a binary using byte units. #485bplist
flac_frame Correctly decode zero escape sample size. #461id3v2 Fix decoding of COMM and TXXX with missing null terminator. #468matroska Updated to latest specification. #455mp3_frame Use frame size calculation from spec instead of own as it seems to not work in some cases. #480mp3_frame_tags Replaces xing and also decodes "lame extensions" for both Xing and Info. #481raw Removed. #485wav More codec symbol names and now shares RIFF code with AVI decoder. #476yaml Fix type panic for large integers. #462Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Add bplist Apple Binary Property List decoder. Thanks David McDonald @dgmcdona #427
bplist Apple Binary Property List decoder. Thanks David McDonald @dgmcdona #427markdown decoder. #422fq tovalue file etc), #440debug (and some other native go iterator functions) inside path(...), which is used by assign (... = ...) expressions etc. #439toactual and tosym work more similar to tovalue. #432# or help(matroska) in the REPL
$ fq -h matroska
matroska: Matroska file decoder
Decode examples
===============
# Decode file as matroska
$ fq -d matroska . file
# Decode value as matroska
... | matroska
Lookup element using path
=========================
$ fq 'matroska_path(".Segment.Tracks[0)")' file.mkv
Get path to element
===================
$ fq 'grep_by(.id == "Tracks") | matroska_path' file.mkv
References
==========
- https://tools.ietf.org/html/draft-ietf-cellar-ebml-00
- https://matroska.org/technical/specs/index.html
- https://www.matroska.org/technical/basics.html
- https://www.matroska.org/technical/codec_specs.html
- https://wiki.xiph.org/MatroskaOpus
ar Allow empty integer strings. For example owner id can be an empty string. #428bitcoin_blkdat Assert that there is a header. As the format is part of the probe group this speeds up probing. #402bplist Add Apple Binary Property List decoder.$ fq '.objects.entries[0] | .key, .value' Info.plist
│00 01 02 03 04 05 06 07 08 09│0123456789│.objects.entries[0].key{}:
0x32│ 5c │ \ │ type: "ascii_string" (5) (ASCII encoded string)
0x32│ 5c │ \ │ size_bits: 12
│ │ │ size: 12
0x32│ 43 46 42 75│ CFBu│ value: "CFBundleName"
0x3c│6e 64 6c 65 4e 61 6d 65 │ndleName │
│00 01 02 03 04 05 06 07 08 09│0123456789│.objects.entries[0].value{}:
0x1ea│ 5f │ _ │ type: "ascii_string" (5) (ASCII encoded string)
0x1ea│ 5f │ _ │ size_bits: 15
0x1ea│ 10 │ . │ large_size_marker: 1 (valid)
0x1ea│ 10 │ . │ exponent: 0
0x1ea│ 18 │ . │ size_bigint: 24
│ │ │ size: 24
0x1ea│ 41 70 70 6c│ Appl│ value: "AppleProResCodecEmbedded"
0x1f4│65 50 72 6f 52 65 73 43 6f 64│eProResCod│
0x1fe│65 63 45 6d 62 65 64 64 65 64│ecEmbedded│
torepr$ fq torepr.CFBundleName Info.plist
"AppleProResCodecEmbedded"
elf
# extract entry opcodes and disassemble with ndisasm
$ fq -n '"f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAeABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAOAABAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAIAAAAAAAsDxmvwYADwU=" | frombase64 | . as $b | elf | $b[.header.entry-.program_headers[0].vaddr:]' \
| ndisasm -b 64 -
00000000 B03C mov al,0x3c
00000002 66BF0600 mov di,0x6
00000006 0F05 syscall
markdown Add decoder. Is used in fq to render CLI help. #422# array with all level 1 and 2 headers
$ fq -d markdown '[.. | select(.type=="heading" and .level<=2)?.children[0]]' README.md
[
"fq",
"Usage",
"Presentations",
"Install",
"TODO and ideas",
"Development and adding a new decoder",
"Thanks and related projects",
"License"
]
matroska Add support for sample lacing. Used by FLAC samples etc. #404mp4 More codec names and also use official names from mp4ra.org. #424<br># show details of first two track in file
$ fq -o line_bytes=10 '.tracks[0,1]' big_buck_bunny.mp4
│00 01 02 03 04 05 06 07 08 09│0123456789│.tracks[0]{}: track
0x00910a│20 68 10 01 a0 40 0e 20 8c 1b│ h...@. ..│ samples[0:1295]:
0x009114│c2 2b 99 09 84 42 60 a8 c4 60│.+...B`..`│
* │until 0x541697.7 (5473678) │ │
│ │ │ id: 1
│ │ │ data_format: "mp4a" (MPEG-4 Audio)
│00 01 02 03 04 05 06 07 08 09│0123456789│.tracks[1]{}: track
0x00a5e6│ 00│ .│ samples[0:1440]:
0x00a5f0│00 00 0c 06 00 07 8b 71 b0 00│.......q..│
0x00a5fa│00 03 00 40 80 00 00 00 15 06│...@......│
* │until 0x540959.7 (5464939) │ │
│ │ │ id: 2
│ │ │ data_format: "avc1" (Advanced Video Coding)
html Handle leading doc type and processing directives. #414Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
3c21b058 lint: Fix ioutil deprecation, reformat for new doc standard
wasm WebAssembly Binary Format decoder by Takashi Oguma @bitbears-dev<br># show part of code_section
$ fq '.sections[4].content.code.x[0].code.e | d' add.wasm
│00 01 02 03 04 05 06 07 08 09│0123456789│.sections[4].content.code.x[0].code.e[0:4]:
│ │ │ [0]{}: in
0x3c│ 20│ │ opcode: "local.get" (0x20)
0x46│01 │. │ x: 1 (valid)
│ │ │ [1]{}: in
0x46│ 20 │ │ opcode: "local.get" (0x20)
0x46│ 00 │ . │ x: 0 (valid)
│ │ │ [2]{}: in
0x46│ 6a │ j │ opcode: "i32.add" (0x6a)
│ │ │ [3]{}: in
0x46│ 0b │ . │ opcode: "end" (0xb)
# count opcode usage
$ fq '.sections[] | select(.id == "code_section") | [.. | .opcode? // empty] | count | map({key: .[0], value: .[1]}) | from_entries' add.wasm
{
"end": 1,
"i32.add": 1,
"local.get": 2
}
# list exports and imports
$ fq '.sections | {import: map(select(.id == "import_section").content.im.x[].nm.b), export: map(select(.id == "export_section").content.ex.x[].nm.b)}' add.wasm
{
"export": [
"memory",
"add"
],
"import": []
}
--unicode-output/-U argument to force use of Unicode characters to improve output readability. #377
fq -cU d file | less -rto_entries now preserves struct field order. #340csv Correctly handle decode values when tocsv normalize to strings. Before array and object ended up being JSON serialized to strings. #341
$ fq -n '[[1,true,null,"a"]] | tocsv'
"1,true,,a\n"
dns DNS over UDP format was accidentally used to probe TCP streams #366elf Remove redundant program_header structflac
jsonl Add decoder. Decodes JSON lines. There is also fromjsonl and tojsonl. #374macho
macho_fat format which also fixed handling of file offsets in sections. #362matroska Remove new lines in descriptions. Messes up tree. #369mp3_frame
pcap Support files with nanosecond precision. Has a different magic. #382prores_frame Add basic decoder. Decodes container and fram header. #396 Thanks @Doctor-love for test filestar Fix regression when decoding number fields. Now ok again to be empty string. #372wasm Add WebAssembly Binary Format decoder. #383 Thanks to Takashi Oguma @bitbears-dev
yaml Fail on trailing data. Before it succeeded with the last value. #373zip
xml Correctly handle decode values when toxml normalize to strings. Before array and object ended up being JSON serialized to strings. #341xml
@ instead of - and make it an option attribute_prefix. #401.[1] will be attributes and so on. #357$ fq -nr '{a: {"-boolean": true, "-number": 123, "-null": null}} | toxml'
<a boolean="true" null="" number="123"></a>
<?procinstr?> and improve trailing data error message. #368#seq is found and also properly sort negative #seq. #384make doc-timeout 20m for go test to workaround ci test failgolangci-lint run --fixNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →