// the find
neilotoole/sq
sq data wrangler
sq is a CLI data wrangler that treats every data source — Postgres, MySQL, SQLite, CSV, Excel, JSON — as a queryable database, letting you run either its own jq-inspired SLQ syntax or raw SQL against any of them. The killer feature is cross-source joins: you can join a CSV file to a Postgres table or an Excel worksheet to MySQL without moving data manually. It is for developers and data engineers who live in the terminal and are tired of writing one-off scripts to shuffle data between formats.
Driver coverage is genuinely broad — SQLite, Postgres, MySQL, SQL Server, ClickHouse, Oracle, DuckDB, plus all the flat-file formats — and the architecture for adding new drivers is clean enough that the codebase reflects it rather than hides it. The `sq diff` command for comparing table schemas and row data across sources is something you'd otherwise build yourself before every migration. Output format support is exhaustive (JSON, JSONL, CSV, TSV, XLSX, Markdown, XML, YAML, HTML) and piping through jq works naturally for post-processing. The Go codebase is unusually well-tested for a solo CLI project — CI matrix includes DB integration tests and CodeQL, coverage tracked on codecov.
The SLQ query language is a layer of abstraction that leaks constantly — you still need to know SQL to understand what it's generating, and for anything non-trivial you end up dropping to `sq sql` anyway, making the DSL feel like a thin veneer you have to learn on top of SQL rather than a replacement for it. Cross-source joins almost certainly work by ingesting one side into a scratch SQLite database; at any meaningful row count this will hit memory and disk limits with no obvious way to tune it. With 2532 stars but only 40 forks and what appears to be a single maintainer, bus factor is the biggest long-term risk for anyone building this into a workflow. The config has already gone through multiple breaking upgrade paths (v0.34.0, v0.54.0 migration code visible in the tree) — adding this to a shared environment or Dockerfile means watching releases carefully.