FOR DATA ENGINEERS

Debug the payload
before it breaks the DAG.

Event streams, webhook payloads, dead-letter records, config blobs — inspect the one malformed message, count events by type, or catch schema drift by asking. QDev writes the jq and runs it locally.

  • Find the record with the null field without a scratch script
  • Counts & rollups are exact — jq computes them, not a model
  • Production data & PII stay on your machine — never uploaded
⌘K
try
● EVENTS.NDJSON — 128,400 RECORDS · LOCAL
{ "events": [ { "ts": "2026-07-04T09:14:02Z", "type": "page_view", "user_id": "u_1204", "status": "ok" }, { "ts": "2026-07-04T09:14:03Z", "type": "purchase", "user_id": null, "status": "ok" }, { "ts": "2026-07-04T09:14:05Z", "type": "checkout", "user_id": "u_0098", "status": "error" } ] }
↑ Ask a rollup or a validation — jq scans all 128k records locally. Only the schema is ever sent.
exact rollups · reproducible jq · nothing uploaded
SOUND FAMILIAR?

3am, the pipeline's red

Schema drift, silently
An upstream service started sending user_id: null and half a partition got dropped before anyone noticed.
The dead-letter queue
A few thousand records failed to parse. You need the one field that's wrong across all of them — fast.
NDJSON too big to grep
A 300 MB export won't open, and jq on the CLI means quoting a filter three times to get the escaping right.
ASK, DON'T SSH INTO A NOTEBOOK

From a bad record to a root cause

Catch schema drift
Find records missing a field, with a wrong type, or a value outside the enum you expected.
events where status isn't ok or error
Roll up & count
Events by type, error rate per source, volume per hour — exact counts, computed by jq.
count events by type per hour
Triage the DLT
Isolate the malformed records and see exactly which field failed, across the whole batch.
records where amount is not a number
Flatten nested records
Explode a nested payload into flat rows ready to reload or diff against the source.
flatten payload.items into one row each
FITS YOUR STACK

Wherever your JSON lands

STREAMS
Kafka / events
Event and message payloads — grouped, counted, and validated locally.
NDJSON
Line-delimited
Log exports and batch files too big to open elsewhere.
WEBHOOKS
API payloads
Inspect the exact body that failed a downstream contract.
CONFIG
Configs & manifests
dbt, Airflow, package manifests — read the shape at a glance.
# QDev: "records where user_id is null" → paste the jq into your DLT replay [.events[] | select(.user_id == null)] | length # 412 dropped
● PROD DATA STAYS IN PROD

Payloads never leave the tab.

Customer records, PII, tokens caught in an event — the values stay local. Only the schema (field names & types) and your question are ever sent, and only on the hosted tier. Handling regulated data? Run local AI, free, and nothing leaves at all.

jq runs in a sandboxed Web Worker — no network access
Hosted proxy is stateless & zero-retention by default — logs nothing unless you opt in to training sharing
No data pipeline to a vendor, no sampling, no copy of your stream

One record is malformed. Find it.

Install free, keep your stream local, and let ⌘K write the jq that isolates the bad payload.

QDevQDev

The JSON viewer that answers back. Free for personal use, on Chrome and Firefox.

PRODUCT
RESOURCES
ACCOUNT
Source-available · zero-retention by default · your data stays yours
PrivacyTerms© 2026 qdev