Drag in JSON, NDJSON, CSV, TSV, Parquet or SQLite and work with the real rows - filter, sort, reshape, edit and export by clicking. shape writes the matching jq and SQL for everything you build, so you leave knowing how.
| # | id | user | event | amount▼ | props |
|---|---|---|---|---|---|
| 88 | 4824 | turing | purchase | 149.00 | { plan: "pro" } |
| 351 | 4835 | ritchie | purchase | 99.00 | { plan: "pro" } |
| 12 | 4821 | ada.byron | purchase | 49.00 | { plan: "pro" } |
| 210 | 4830 | mccarthy | purchase | 24.00 | { plan: "team" } |
| 47 | 4823 | hopper | purchase | 12.50 | { plan: "team" } |
| 103 | 4826 | knuth | purchase | 8.00 | { plan: "pro" } |
Illustrative mock-up - a stylized rendering of the interface, not a screen capture. Sample data is fictional.
Most tools assume you already know jq or SQL. shape is for everyone who bounces off them - the whole workflow is visual, and the query is generated for you.
A virtualized table over the actual data - millions of rows scroll smoothly - beside a structure map of every field with its type, presence and distinct count.
Build type-aware AND/OR conditions by clicking, and search any value across every field. Applied live, with a cancellable exact match count.
Click a header to sort - exact over the whole result on every tier, even a multi-gigabyte streaming file. Row numbers stay the true source ordinals.
Expand a field for its full profile in place: a distribution histogram, top values, quantiles and health flags - from the single open-time pass, no rescan.
Double-click a scalar cell to change it; number literals stay exact, so a 19-digit id never loses a digit. Save back to a new file - the original is never touched.
Name a filter + search + sort + reshape and reapply it anytime - across restarts. Plus export the full result to JSON, NDJSON, CSV, TSV or Parquet.
.[] | select(.amount > 0) | {id, user, event, amount, props}
select id, user, event, amount, props from data where amount > 0 order by amount desc
The cgo-free engine also ships as a CLI: profile a file in one pass, infer a JSON Schema, and fail a pull request on breaking data-shape changes.
Gate a PR with the hoijunkim/shape@v1 GitHub Action, or install with go install github.com/hoijunkim/shape@latest.
# desktop app - grab a build for your platform → github.com/hoijunkim/shape/releases # or the CLI, anywhere Go runs $ go install github.com/hoijunkim/shape@latest