Why
airc requires both jq and python3. Since #152's truth-layer migration we already have python3 as a hard dep, so jq is functionally redundant — it parses JSON, which python's stdlib does natively. Joel called this out 2026-04-28: "why do we have so many damn dependencies now?"
Current jq usage (28 occurrences in airc, plus install.sh prereq + doctor probe)
Two clusters:
- Address parsing (
airc:777-824) — host_addresses array filtering by .scope == "localhost" / "lan" / "tailscale", returning addr|port pairs.
- Gist envelope parsing (
airc:1892-1988) — extracting .invite, .name, .kind, .airc, .host.addresses, .host.machine_id, .last_heartbeat.
Both are JSON reads with no in-place mutation. Trivial to route through a new airc_core.envelope (or airc_core.json) CLI that takes JSON via stdin / --content and emits the requested field on stdout.
Outcome
- Drop
jq from install.sh / install.ps1 / doctor probes
- Drop the
jq-related fallback paths in airc (each reader currently has command -v jq guards that fall through silently — those become unnecessary)
- One fewer thing for users to install on a clean machine, one fewer thing to break on the Windows install path
Out of scope
This is bash-only — airc.ps1 already uses native PowerShell JSON parsing (ConvertFrom-Json).
Why
aircrequires bothjqandpython3. Since #152's truth-layer migration we already have python3 as a hard dep, so jq is functionally redundant — it parses JSON, which python's stdlib does natively. Joel called this out 2026-04-28: "why do we have so many damn dependencies now?"Current jq usage (28 occurrences in
airc, plus install.sh prereq + doctor probe)Two clusters:
airc:777-824) — host_addresses array filtering by.scope == "localhost" / "lan" / "tailscale", returningaddr|portpairs.airc:1892-1988) — extracting.invite,.name,.kind,.airc,.host.addresses,.host.machine_id,.last_heartbeat.Both are JSON reads with no in-place mutation. Trivial to route through a new
airc_core.envelope(orairc_core.json) CLI that takes JSON via stdin / --content and emits the requested field on stdout.Outcome
jqfrom install.sh / install.ps1 / doctor probesjq-related fallback paths in airc (each reader currently hascommand -v jqguards that fall through silently — those become unnecessary)Out of scope
This is bash-only —
airc.ps1already uses native PowerShell JSON parsing (ConvertFrom-Json).