macOSWindowsLinux

fq - jq for binary formats. Tool, language and decoders for working with binary formats.

jqbinaryhexdumpgojsondecodequeryreplclipcapxmlgolang
스타 성장
스타
10.6k
포크
253
주간 성장
+6
이슈
36
4k6k8k10k
2021년 12월2023년 7월2025년 2월2026년 9월
아티팩트Go Modules
README

fq

Tool, language and decoders for working with binary formats.

fq demo

Basic usage is fq . file, fq d file or fq 'some query' file ....

For details see the manual, also available as man fq and as AsciiDoc.

Background

fq is a tool, language, and decoders for working with binary formats and data. In most cases it behaves and feels similar to jq and it also uses the same expression language. To get the most out of fq it's recommended to learn more about jq.

It features a structural hex viewer, nested format decoding, slicing and concatenating binary data, bit-level decoding and an interactive REPL with auto-completion.

Goals

  • Make binaries more accessible, queryable and sliceable.
  • Nested formats and bit-oriented decoding.
  • Quick and comfortable CLI tool.
  • Bits and bytes transformations.

Hopes

  • Make it useful enough that people want to help improve it.
  • Inspire people to create similar tools.

Supported formats

aac_frame, adts, adts_frame, aiff, amf0, apev2, apple_bookmark, ar, asn1_ber, av1_ccr, av1_frame, av1_obu, avc_annexb, avc_au, avc_dcr, avc_nalu, avc_pps, avc_sei, avc_sps, avi, avro_ocf, bencode, bitcoin_blkdat, bitcoin_block, bitcoin_script, bitcoin_transaction, bits, bplist, bsd_loopback_frame, bson, bytes, bzip2, caff, cbor, csv, dns, dns_tcp, elf, ether8023_frame, exif, fairplay_spc, fit, flac, flac_frame, flac_metadatablock, flac_metadatablocks, flac_picture, flac_streaminfo, gif, gzip, heif, hevc_annexb, hevc_au, hevc_dcr, hevc_nalu, hevc_pps, hevc_sps, hevc_vps, html, icc_profile, icmp, icmpv6, id3v1, id3v11, id3v2, ipv4_packet, ipv6_packet, jp2c, jpeg, json, jsonl, leveldb_descriptor, leveldb_log, leveldb_table, luajit, macho, macho_fat, markdown, matroska, midi, moc3, mosaic, mp3, mp3_frame, mp3_frame_vbri, mp3_frame_xing, mp4, mpeg_asc, mpeg_es, mpeg_pes, mpeg_pes_packet, mpeg_spu, mpeg_ts, msgpack, negentropy, nes, ogg, ogg_page, opentimestamps, opus_packet, pcap, pcapng, pg_btree, pg_control, pg_heap, png, prores_frame, protobuf, protobuf_widevine, pssh_playready, rtmp, safetensors, sll2_packet, sll_packet, stl, tap, tar, tcp_segment, tiff, tls, toml, tzif, tzx, udp_datagram, vorbis_comment, vorbis_packet, vp8_frame, vp9_cfm, vp9_frame, vpx_ccr, wasm, wav, webp, xml, yaml, zip

It can also work with some common text formats like URLs, hex, base64, PEM etc and for some serialization formats like XML, YAML, etc. it can transform both from and to jq values.

For details see the manual.

Presentations and media

Install

Use one of the methods listed below or download a pre-built release for macOS, Linux or Windows. Unarchive it and move the executable to PATH etc.

On macOS if you don't install using one of the method below then you might have to manually allow the binary to run. This can be done by trying to run the binary, ignore the warning and then go into security preference and allow it. Same can be done with these commands:

xattr -d com.apple.quarantine fq
# for macOS version before Sequoia you might need this also
spctl --add fq

Homebrew (macOS)

brew install wader/tap/fq

MacPorts

On macOS, fq can also be installed via MacPorts. More details here.

sudo port install fq

Windows

fq can be installed via scoop.

scoop install fq

Arch Linux

fq can be installed from the extra repository using pacman:

pacman -S fq

You can also build and install the development (VCS) package using an AUR helper:

paru -S fq-git

Gentoo

fq can be installed from the Gentoo package repository using emerge:

emerge dev-util/fq

Guix

guix shell fq -- fq --help # in develompen shell
guix install fq            # into current profile

Nix

nix-shell -p fq

FreeBSD

Use the fq port.

Alpine

Currently in edge testing but should work fine in stable also.

apk add -X http://dl-cdn.alpinelinux.org/alpine/edge/testing fq

Build from source

Make sure you have go 1.22 or later installed.

To install directly from git repository (no git clone needed):

# build and install latest release
go install github.com/wader/fq@latest

# build and install latest master
go install github.com/wader/fq@master

# copy binary to $PATH if needed
cp "$(go env GOPATH)/bin/fq" /usr/local/bin

To build, run and test from source:

# build and run
go run .
# build and run with arguments
go run . -d mp3 . file.mp3
# just build
go build -o fq .
# run all tests and build binary
make test fq

Development and adding a new decoder

See dev.md

This project would not have been possible without itchyny's jq implementation gojq. I also want to thank HexFiend for inspiration and ideas and stedolan for inventing the jq language.

Tools

  • HexFiend - Hex editor for macOS with format template support.
  • ImHex - A Hex Editor for Reverse Engineers.
  • binspector - Binary format analysis tool with query language and REPL.
  • kaitai - Declarative binary format parsing.
  • Wireshark - Decodes network traffic (tip: tshark -T json).
  • MediaInfo - Analyze media files (tip mediainfo --Output=JSON and mediainfo --Details=1).
  • GNU poke - The extensible editor for structured binary data.
  • ffmpeg/ffprobe - Powerful media libraries and tools.
  • hexdump - Hex viewer tool.
  • hex - Interactive hex viewer with format support via lua.
  • hachoir - General python library for working binary data.
  • scapy - Decode/Encode formats, focus on network protocols.

Projects and Standards

TODO and ideas

See TODO.md

License

fq is distributed under the terms of the MIT License.

See the LICENSE file for license details.

Licenses of direct dependencies:

관련 저장소
jqlang/jq

Command-line JSON processor

CcliOtherjq
jqlang.org
35.6k1.8k
bitfield/script

Making it easy to write shell-like scripts in Go

GoGo ModuleslibraryMIT Licenseshellcat
bitfieldconsulting.com/subscribe
7k369
ynqa/jnv

Interactive JSON filter using jq

Rustcrates.iocliMIT Licenseautocompletecli
6.1k76
jeroenjanssens/data-science-at-the-command-line

Data Science at the Command Line

HTMLtutorialOtherdata-sciencelinux
datascienceatthecommandline.com
4k765
01mf02/jaq

A jq clone focussed on correctness, speed, and simplicity

Rustcrates.iocliMIT Licensejqjson
3.7k120
kislyuk/yq

Command-line YAML, XML, TOML processor - jq wrapper for YAML/XML/TOML documents

PythonPyPIcliApache License 2.0yamljq
kislyuk.github.io/yq/
3k85
noahgorstein/jqp

A TUI playground to experiment with jq

GoGo ModulescliMIT Licensegojq
2.8k54
wellsjo/JSON-Splora

GUI app for editing, visualizing, and manipulating JSON data

JavaScriptnpmappMIT Licensejsonjson-splora
1.9k60
yshavit/mdq

like jq but for Markdown: find specific elements in a md doc

Rustcrates.iocliApache License 2.0jqmarkdown
1.7k20
Benexl/yt-x

Posix script to browse youtube plus other yt-dlp supported sites from your terminal (fzf) or app launcher (rofi) with optional previews. (supports bash, zsh and dash)

ShellcliMIT Licenseclijq
1.7k77
swoodford/aws

A collection of bash shell scripts for automating various tasks with Amazon Web Services using the AWS CLI and jq.

ShellcliApache License 2.0awsawscli
1.4k653
harehare/mq

A jq-like Markdown query language for command-line processing

Rustcrates.iocliMIT Licenseclijq
mqlang.org
1k22