
π§© JQ::Lite β Lightweight jq in Pure Perl
JQ::Lite is a pure-Perl JSON query engine inspired by jq.
It allows you to query and transform JSON using jq-like syntax β without external binaries.
β¨ Highlights
- πͺΆ Pure Perl β no XS or C dependencies
- π jq-style filters:
.users[].name,.nickname?,select(...),map(...) - π’ Supports arithmetic & conditionals:
if ... then ... else ... end - π§ CLI tool:
jq-litewith--null-input,--slurp,--from-file,--yaml - π Built-in 100+ jq functions (see
FUNCTIONS.md) - π» Interactive mode for exploring JSON
- π§° Works with JSON or YAML input
- π Compatible with almost any Linux (even legacy or air-gapped) (see
VISION.md)
π‘ Why Pure Perl?
Unlike the original jq written in C, JQ::Lite is implemented entirely in Perl.
This design choice brings several practical advantages:
π§© Portability
No compilation, no shared libraries β it runs anywhere Perl runs.
Perfect for restricted, legacy, or air-gapped environments.
π§° Extensibility
Add or customize jq-like functions directly in Perl.
Leverage CPAN modules (LWP, DBI, etc.) to integrate with APIs, databases, or filesystems.
π§± Integration
Use it seamlessly inside Perl scripts:
use JQ::Lite;
my $jq = JQ::Lite->new;
say for $jq->run_query($json, '.users[].name');
No need to call external binaries or parse command output.
βοΈ Lightweight Installation
No XS/C libraries or make install required β just cpanm JQ::Lite or the portable installer.
Ideal for CI/CD pipelines or user-level installations.
π Maintainability
Perlβs expressive syntax allows faster development and debugging. Community patches and feature extensions are easier than C-level contributions.
βοΈ Installation
π From CPAN
cpanm JQ::Lite
πΊ Homebrew (macOS)
brew tap kawamurashingo/jq-lite
brew install --HEAD jq-lite
π§ Portable (Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/kawamurashingo/JQ-Lite/main/install.sh | bash
Installs to $HOME/.local/bin.
Add to PATH if needed:
export PATH="$HOME/.local/bin:$PATH"
π Usage
As a Perl module
use JQ::Lite;
my $jq = JQ::Lite->new;
my @names = $jq->run_query('{"users":[{"name":"Alice"}]}', '.users[].name');
print join("\n", @names);
As a CLI tool
jq-lite '.users[].name' users.json
jq-lite '.users[] | select(.age > 25)' users.json
jq-lite --yaml '.users[].name' users.yaml
π‘ Try interactive mode:
jq-lite users.json
π§± Environment Support
| Environment | jq | jq-lite | | -------------------- | -- | ------- | | Legacy CentOS / RHEL | β | β | | Alpine Linux | β οΈ | β | | Air-gapped / Proxy | β | β | | No root privilege | β οΈ | β |
β
Runs on Perl β₯ 5.14, even on CentOS 6 or Debian 7 with perlbrew or local install.
π Example Queries
jq-lite '.users[] | select(.profile.active) | .name' users.json
jq-lite '.users | sort_by(.age) | map(.name) | join(", ")' users.json
jq-lite '.users[].nickname? // .name' users.json
π§ More Functions
See the complete list in
π FUNCTIONS.md or on MetaCPAN
π€ Author
Shingo Kawamura π§ pannakoota1@gmail.com π GitHub @kawamurashingo
π License
Same terms as Perl itself.