Skip to content
jc-rs
GitHub

v0.5.1 · 237 parsers · one static binary

Convert command output to JSON. Pipe anything into jq.

jc-rs turns the output of the commands you already run into JSON. One static binary, nothing to install alongside it. The converter below is the real parser, compiled to WebAssembly and running in your browser.

dfeditable
jc-rs --dfloading WebAssembly
Use the Left and Right arrow keys to highlight the matching value in the input.
[
  {
    "filesystem": "/dev/mapper/VolGroup00-LogVol00",
    "type": "ext3",
    "1024_blocks": 6030784,
    "used": 1147932,
    "available": 4571556,
    "mounted_on": "/",
    "capacity_percent": 21
  },
  {
    "filesystem": "proc",
    "type": "proc",
    "1024_blocks": 0,
    "used": 0,
    "available": 0,
    "mounted_on": "/proc",
    "capacity_percent": null
  },
  {
    "filesystem": "sysfs",
    "type": "sysfs",
    "1024_blocks": 0,
    "used": 0,
    "available": 0,
    "mounted_on": "/sys",
    "capacity_percent": null
  }
]

Hover over a JSON value, or focus the JSON pane and use the Left and Right arrow keys, to highlight its source. Edits are parsed in this page by the same WebAssembly parser code that ships in the binary; jc-rs does not send pasted input to a server.

The measurement

100%

934 of 934 oracle-valid pairs drawn from the full corpus have no structural or value differences under the published JSON comparison. Checked on every commit, the number cannot quietly drift.

What the number excludes, and why it says so

A pair counts only when the reference implementation matches its own fixture under the same structural JSON comparison. Everything else is reported by category: a harness that silently skips what it cannot handle can report 100% while remaining blind to a third of the evidence.

Tested, and matchingthe reference matches it under the comparison, so do we
934
Oracle rejectthe reference does not match its own fixture here
9
Unmappedthe filename resolves to no parser
149
No inputexpected output ships without an input file
18

176 pairs reported but not tested. How this is produced

Startup is where it shows

The measured cold-start invocation takes 4 ms for jc-rs and 109 ms for jc. A loop, git hook, or run across many hosts pays that whole-process cost each time. The larger fixtures in the chart measure parsing and process overhead together. Full comparison.

jcjc-rsmilliseconds per run, lower is better
Cold start
jc-rs -v
27.3×
109 ms
4 ms
ps aux
110 lines
18.7×
112 ms
6 ms
traceroute
1.5 KB
11.9×
119 ms
10 ms
ifconfig
1.3 KB
8.1×
122 ms
15 ms
clf
10,000 log lines
2.9×
516 ms
178 ms
csv
10,000 rows
5.8×
167 ms
29 ms
pkg-index-deb
1.5 MB
5.2×
241 ms
46 ms
One harness timing both sides, fastest of 5 to 15 runs, one process per run. jc 1.25.7 on Python 3.12.3, Linux x86_64, static musl, 2026-08-09. Run it on your own machine with make bench-vs-jc.

Install

Five channels, all cut from the same tag. The binary is jc-rs, never jc: release archives carry a jc alias you can enable deliberately, and nothing installs it by default because it would shadow the original in PATH.

Cargo, prebuilt

$ cargo binstall jc-rs

Cargo, from source

$ cargo install jc-rs

Homebrew

$ brew install OlegSotnikov/tap/jc-rs

Docker

$ docker pull appmasterio/jc-rs

npm, WebAssembly

$ npm install jc-rs-wasm

Or take a static binary from the releases: five targets, with completions for bash, zsh and fish and SHA256SUMS in every archive.

237 parsers

Every one of them has a reference page with its platforms, its magic command and a real fixture pair where the corpus has one.

Browse all