
π§© JQ::Lite β Lightweight jq in Pure Perl
π Project homepage
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,--arg - π 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 Installer (Online β Offline)
For air-gapped or offline systems
-
Download on a connected machine
./download.sh [-v <version>] [-o /path/to/usb]β Produces
JQ-Lite-<version>.tar.gz. -
Transfer the tarball to the target (offline) machine.
-
Install (Linux/macOS)
./install.sh [-p <prefix>] [--skip-tests] /path/to/JQ-Lite-<version>.tar.gzDefault install path:
$HOME/.localexport PATH="$HOME/.local/bin:$PATH" export PERL5LIB="$HOME/.local/lib/perl5/site_perl:$PERL5LIB"
πͺ Windows (PowerShell)
-
Open PowerShell and run:
.\install-jq-lite.ps1 [-Prefix <path>] [--SkipTests] C:\path\to\JQ-Lite-<version>.tar.gz -
Add to your PowerShell profile (optional):
$env:PATH = "$env:USERPROFILE\.local\bin;" + $env:PATH $env:PERL5LIB = "$env:USERPROFILE\.local\lib\perl5\site_perl;" + $env:PERL5LIB -
Verify:
jq-lite -v
π 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 π§ perl.jq.lite@gmail.com
π License
Same terms as Perl itself.