One binary, three jobs
Format, lint (with autofixes), and a language server — not a formatter or a linter you wire together.
One binary, three jobs
Format, lint (with autofixes), and a language server — not a formatter or a linter you wire together.
Works on broken SQL
A lossless, error-recovering CST means editors get diagnostics on half-typed statements, not a hard parse failure.
Correct by construction
Every statement is cross-checked against PostgreSQL’s own parser
(libpg_query) in a differential test.
Postgres-native
JSONB / JSONPath plus a squawk-class migration-safety pack (MG01–MG16) that generic SQL tools don’t have.
Compiled Rust, no Python or Perl runtime to start per file. Formatting a 400-statement / 60 KB Postgres file (median of 20 runs, including process startup):
| tool | median | vs banshee |
|---|---|---|
| banshee | ~11 ms | 1× |
| sqlfluff 4.2 | ~257 ms | ~24× slower |
| pgFormatter 5.10 | ~1170 ms | ~105× slower |
Reproduce with scripts/bench.sh.