NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2566 most downloaded on PyPI
Lint your dbt project SQL
Last release 2 days ago
02 Oct 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
107 releases · first in 2021
One column per quarter.
fix: map deprecated semicolon_newline onto CV06 multiline_newline ( #8295 ) @dgvj-work
This minor release introduces SQLMesh integration, new linting and formatting options, and a refreshed documentation site, alongside a broad set of dialect improvements and bug fixes.
sqlfluff-templater-sqlmesh plugin. The optional templater brings SQLFluff linting to SQLMesh models, with support for model definitions and macro rendering.CV13 encourages a pure SELECT * FROM <cte> passthrough as the final query in a CTE-based model, following the dbt convention. TQ04 prefers expression AS alias over T-SQL's alias = expression syntax. Both are currently disabled by default and can be enabled with force_enable = True.--format gitlab, allowing findings to appear directly in GitLab merge requests. This joins the existing SARIF and GitHub annotation formats for integrating SQLFluff into CI.<% ... %> syntax used by Snowflake CLI. LT15 also gains an optional minimum number of blank lines between statements.Beyond that, this release expands parsing support across Snowflake, MariaDB/MySQL, ClickHouse, PostgreSQL, Oracle, Databricks, Flink, Athena, SQLite, Trino, and other dialects. Rule and templater fixes improve reliability, reduce false positives, and prevent unsafe autofixes.
This release also includes first-time contributions from forty-three new contributors. Thank you all for your contributions. 🏆
<=> (#8575) @remilepriol, @clauderules value in pyproject.toml (#8493) @udsy19-> operator (#8399) @winklemadNote truncated.
fix(config): coerce quoted allow_implicit_indents deprecation value ( #8135 ) @anxkhn
This minor release brings expanded BigQuery pipe-syntax support, a wave of ClickHouse grammar additions, a new rule, and continued progress on the Rust-backed parsing engine.
|>) is now modelled natively as a postfix operation on selectables, so pipe queries can follow a WITH clause, use EXCEPT/REPLACE after a wildcard, and get correct indentation for AGGREGATE/EXTEND clauses.TRUNCATE TABLES/TRUNCATE DATABASE, EXCHANGE, the REGEXP operator, GROUP BY WITH ROLLUP/CUBE/TOTALS, multi-column LIMIT BY, and ORDER BY ... WITH FILL ... INTERPOLATE, among other additions.RF07, flags window-clause references that shadow a SELECT alias.lint, fix, and format all gain a consistent --quiet output mode.CP01, CP03, CP04), extending the Rust engine beyond parsing and into linting for the first time — a major step toward our broader performance goals. Alongside this, numerous parity fixes (bracket matching, error messages, cache invalidation) keep the Rust and Python engines in sync.Beyond that, there are parser improvements across Oracle, PostgreSQL, Snowflake, Databricks, T-SQL, MySQL/MariaDB, Teradata, Athena, DuckDB, SQLite, Impala, and SparkSQL, plus rule fixes that remove false positives from RF01-RF03, AL05, AM04, CV10, CV12, ST06, ST07, and PG01.
This release also includes first-time contributions from forty-seven new contributors. Thank you all for your contributions. 🏆
TRUNCATE TABLES statement (#8279) @AndrewKurgTRUNCATE DATABASE (#8228) @AndrewKurgint [] (#8222) @apoorva-01AS aliasing over alias = expression (#8085) @copilot-swe-agent[bot]BaseSegment.copy (#8109) @keraionNote truncated.
This patch release brings a broad set of parser fixes and dialect enhancements across T-SQL, PostgreSQL, MariaDB/MySQL, Snowflake, Athena, Materialize
This patch release brings a broad set of parser fixes and dialect enhancements across T-SQL, PostgreSQL, MariaDB/MySQL, Snowflake, Athena, Materialize, and other dialects. T-SQL receives several improvements around privileges, labels, DROP CREDENTIAL, DROP SEQUENCE IF EXISTS, and reference handling for CONTAINSTABLE, while MariaDB/MySQL support is expanded for trigger, partitioning, system versioning, charset/collation, and ALTER TABLE syntax.
There are also rule and templater fixes, including a new Postgres-specific CV13 rule to prefer CREATE INDEX CONCURRENTLY, fewer ST11 false positives for LEFT SEMI and LEFT ANTI joins, and dbt templater support for the DBT_TARGET and DBT_TARGET_PATH environment variables. Performance is also improved by deferring parse-tree serialisation in logging calls.
Alongside the user-facing fixes, this release adds beta docs deployment, versioned documentation publishing, and support for building multiple Docker images. It also includes first-time contributions from twelve new contributors. Thank you all for your contributions. 🏆
ALTER TABLE ... ADD|DROP SYSTEM VERSIONING (#7883) @copilot-swe-agent[bot]DROP SEQUENCE IF EXISTS (#7858) @copilot-swe-agent[bot]BEGIN ATOMIC function bodies to parse UNION ALL (#7861) @copilot-swe-agent[bot]table.* in expressions as a wildcard identifier (#7845) @mokashangThis is a bugfix release primarily to change the configuration of how rust wheels are distributed for sqlfluffrs. From this release onwards, rust whee
This is a bugfix release primarily to change the configuration of how rust wheels are distributed for sqlfluffrs. From this release onwards, rust wheels use ABI3 so that a single wheel can be reused across multiple python versions, and the number of platforms which we distribute pre-compiled wheels for has been reduced. This is to ensure we remain with the storage limits set by pypi.
In addition to this we see two TSQL fixes, including the first contribution by @simondennis9 to the project. Thanks for your contributions! 🏆
This minor release contains four particular changes of note:
This minor release contains four particular changes of note:
render_variant_limit is now 5 instead of 1, so SQLFluff may report new linting violations from templated branches that were previously not inspected in Jinja and dbt projects. Documentation for the feature is now also available in Template Variant Rendering.max_parse_nodes config setting to enable parsing of larger files in their project if necessary.AL10 rule requires aliases on FROM subqueries, because omitting them causes parse errors in most major dialects.Beyond that, there are parser improvements for T-SQL, PostgreSQL, Snowflake, BigQuery, DuckDB, ClickHouse, Oracle, Hive/SparkSQL, Databricks, DB2, Athena, Trino, MariaDB/MySQL, StarRocks, Teradata, and Greenplum. There are also rule fixes for ST06, ST11, LT02, and LT09, better handling for placeholder and dbt/Jinja rendering edge cases, and a new option to fail when files are skipped for size.
This release also includes first-time contributions from twenty new contributors. Thank you all for your contributions. 🏆
DECLARE ... CURSOR FOR (#7812) @copilot-swe-agent[bot]pool.join() is called in ParallelRunner (#7686) @peterbudALTER TABLE ... ENABLE|DISABLE TRIGGER (#7811) @copilot-swe-agent[bot]${...} parameter references (#7767) @copilot-swe-agent[bot]var() placeholders under Jinja subscripting (#7793) @copilot-swe-agent[bot]WITH clauses (#7761) @copilot-swe-agent[bot]json_object() pairs in Trino and Athena (#7764) @copilot-swe-agent[bot]OPTIONS in CREATE TABLE FUNCTION (#7776) @copilot-swe-agent[bot]FROM DUAL to parse as a table reference (#7763) @copilot-swe-agent[bot]WITH TAG on dynamic table columns without a data type (#7754) @copilot-swe-agent[bot]COLLATE in Databricks CREATE TABLE column properties (#7749) @copilot-swe-agent[bot]CHECK/NOCHECK CONSTRAINT ALL in T-SQL ALTER TABLE (#7748) @copilot-swe-agent[bot]UPDATE ALL BY NAME syntax for MERGE (#7756) @ninazacharia-toastchore: Update deprecated gitwildmatch to gitignore ( #7673 ) @keraion
This minor release expands SQLFluff in four meaningful ways: recursion protection, more complete Rust-backed execution, broader dialect support, and better performance on large templated projects.
max_parse_depth config setting to enable deeper parsing in their project if necessary.Also, welcome to the nineteen new contributors! Thanks for your contributions! 🏆
vdebug behind verbose-debug feature (#7674) @keraiongitwildmatch to gitignore (#7673) @keraion:: cast (#7615) @copilot-swe-agent[bot]noqa and update docs (#7658) @mxrFROM ... INSERT ... multi-insert statements (#7633) @copilot-swe-agent[bot]SELECT * APPLY(...) (#7654) @copilot-swe-agent[bot]EXCEPT set expressions in Greenplum (#7632) @copilot-swe-agent[bot]ignore = templating disabling all lint rules with Python templater (#7617) @copilot-swe-agent[bot]IS [NOT] DISTINCT FROM comparison statement (#7556) @peterbudreturn dbt builtin (#7584) @mrichards42noqa directives in sqlfluff parse for PRS/TMP violations (#7604) @peterbudVALUES() function nested in expressions for ON DUPLICATE KEY UPDATE (#7603) @copilot-swe-agent[bot]CREATE TYPE ... FROM to support data types with precision/scale (#7596) @copilot-swe-agent[bot]CREATE EXTERNAL TABLE AS SELECT (CETAS) (#7595) @samgusickCREATE FULLTEXT STOPLIST statement support (#7574) @copilot-swe-agent[bot]json_array with NULL ON NULL and RETURNING clauses (#7561) @copilot-swe-agent[bot]line_position and keyword_line_position (#7555) @peterbudrequire_final_semicolon (#7534) @copilot-swe-agent[bot].pkb to default sql_file_exts (#7541) @copilot-swe-agent[bot]~) (#7520) @copilot-swe-agent[bot]DEFINE keyword (#7505) @robert-norbergOPENROWSET(BULK) options (#7491) @lynndb0ColonDelimiterSegment in JSON key-value pairs grammar (#7494) @peterbudplatformdirs to <4.6.0 (#7488) @peterbud%ROWTYPE parameters in Oracle. (#7476) @joaostorrerThis is a re-release of 4.0.1 which had issues in initial deployment.
This is a re-release of 4.0.1 which had issues in initial deployment.
Testing release to confirm functionality of rust publish script.
Testing release to confirm functionality of rust publish script.
[4.0.4a1] - 2026-02-08 Pre-release
Pre-release
Compare
This is a re-release of the planned 4.0.1 which failed to publish due to deploy pipeline issues.
This is a re-release of the planned 4.0.1 which failed to publish due to deploy pipeline issues.
Normally we would use a post-release but rust doesn't support that construct.
This is a post release of 4.0.1 to fix issues in the package publish pipeline.
This is a post release of 4.0.1 to fix issues in the package publish pipeline.
This is a bugfix and dialect enhancement release following the 4.0.0 major release.
This is a bugfix and dialect enhancement release following the 4.0.0 major release.
This release also includes the first contributions from fourteen new contributors! Welcome to the project and thank you for your contributions.
sqlfluff fix (#7381) @annebelleoON expressions and INTO optional (#7394) @hamza-driINSERT ALL and error logging in INSERT in Oracle. (#7347) @joaostorrerAnyNumberOf context helper functions (#7390) @keraionGRANT and REVOKE statements in Oracle. (#7338) @joaostorrerindent_unit tab when configured (#7289) @peterbudThis major release brings support for internal rust optimisations. Rust support is still effectively in _beta_ and is available on an opt in basis. To
This major release brings support for internal rust optimisations. Rust support is still effectively in beta and is available on an opt in basis. To take advantage of these performance improvements, users can install sqlfluff[rs] to get the parser and lexer running in rust. The current implementation does yield noticeable gains on large files and projects - although for small individual files, the overhead of moving data into rust means that performance is a tiny bit slower. Functionality has proven fairly stable during pre release testing, and we anticipate that the rust implementations will become defaults from 5.0 onwards.
We advise testing the rust package in a development environment before going direct to production.
A massive shout out to @keraion, who's been leading the way on this effort.
Additionally in this release:
CREATE SYNONYM, DROP SYNONYM and ALTER SYNONYM statements in Oracle. (#7291) @joaostorrerCREATE TYPE and ALTER TYPE (#7314) @annebelleoNotImplementedError exception (#7285) @peterbudCREATE DATABASE LINK, DROP DATABASE LINK and ALTER DATABASE LINK statements in Oracle. (#7284) @joaostorrerENABLE/DISABLE clause after constraints in CREATE TABLE statements in Oracle. (#7250) @joaostorrerThis is an alpha release of SQLFluff 4.0 to continue verification of the rust portions of the codebase. In particular to verify the inclusion of a rus
This is an alpha release of SQLFluff 4.0 to continue verification of the rust portions of the codebase. In particular to verify the inclusion of a rust parser. Rust support is still in beta, but from this release, users can install sqlfluff[rs] to get the parser and lexer running in rust. Current implementation does yield noticeable gains on large files and projects - although for small individual files, the overhead of moving data into rust means that performance is a tiny bit slower.
We do not recommend that users install this release except for testing and evaluation.
Big thanks to @keraion, who's been leading the way on this effort.
Additionally in this release:
These will be added to the changelog properly in the full 4.0.0 release.
CREATE SYNONYM, DROP SYNONYM and ALTER SYNONYM statements in Oracle. (#7291) @joaostorrerCREATE TYPE and ALTER TYPE (#7314) @annebelleoNotImplementedError exception (#7285) @peterbudCREATE DATABASE LINK, DROP DATABASE LINK and ALTER DATABASE LINK statements in Oracle. (#7284) @joaostorrerENABLE/DISABLE clause after constraints in CREATE TABLE statements in Oracle. (#7250) @joaostorrerThis is an alpha release of SQLFluff 4.0 to continue verification of the rust portions of the codebase. In particular to verify version locking of pyp
This is an alpha release of SQLFluff 4.0 to continue verification of the rust portions of the codebase. In particular to verify version locking of pypi packages works, and testing users can verify that Rust is working easily. Rust support is still in beta, but from this release, users can install sqlfluff[rs] to get some of the parser running in rust. Current implementation is not expected to yield significant gains but we do expect that once mature that it will.
We do not recommend that users install this release except for testing and evaluation.
Big thanks to @keraion, who's been leading the way on this effort.
Additionally in this release:
These will be added to the changelog properly in the full 4.0.0 release.
This is an alpha release of SQLFluff 4.0 to begin verification of the rust portions of the codebase. In particular to verify that publishing to pypi w
This is an alpha release of SQLFluff 4.0 to begin verification of the rust portions of the codebase. In particular to verify that publishing to pypi works as expected, and that users can install the package. Rust support is still in beta, but from this release, users can install sqlfluff[rs] to get some of the parser running in rust. Current implementation is not expected to yield significant gains but we do expect that once mature that it will.
We do not recommend that users install this release except for testing and evaluation.
Big thanks to @keraion, who's been leading the way on this effort.
Additionally in this release:
These will be added to the changelog properly in the full 4.0.0 release.
Rule AM09: Handle ambiguous LIMIT/OFFSET without ORDER BY (non-deterministic results)
This release has 95 contributions in it!
Also, welcome to the twenty three new contributors! Thanks for your contributions!
ALTER DYNAMIC TABLE support (#7176) @keraionescape_replacements control character value (#7165) @keraion.sqlfluffignore when using stdin-filename (#7168) @keraionLIMIT or OFFSET without ORDER BY (non-deterministic results) (#6749) @d33bsDROP COLLATION statement (#7143) @keraionCOLUMN_VALUE as a bare function (#7144) @keraionpartitioned by and cluster by segments to SparkSQL Create view statement (#7137) @KikeSenpaiSTORING segment in BigQuery CREATE VECTOR INDEX (#7119) @agkphysicsDELTA to non-reserved keyword (#7031) @keraionALTER INDEX statements (#7046) @saulotoledoSELECT INTO (#7033) @keraionframe_clause to support all interval_expressions (#7034) @keraionCREATE NETWORK RULE statement (#7035) @keraionCREATE DATABASE syntax (#7055) @manmartgarcALTER TABLE ... RENAME CONSTRAINT (#7045) @saulotoledoCLUSTER BY clause (#7021) @keraionEXCEPTION WHEN clauses (#7018) @keraionSET tuple with a single expression (#7019) @keraionINVISIBLE/VISIBLE column constraints (#7020) @keraionENCODE for ALTER TABLE ADD COLUMN (#7022) @keraionALTER COLUMN clause (#7026) @keraioncolumn_properties (#7027) @keraionRELIES_ON and POLYMORPHIC keywords (#7015) @keraionLIMIT when not a limit clause (#7010) @keraionThis release adds support for two new dialects: _Apache Doris_ and _FlinkSQL_.
This release has 25 contributions in it!
Also, welcome to the five new contributors! Thanks for your contributions!
NO_COLOR environment variable (#6976) @keraionACTION a non-reserved keyword (#6970) @keraionjson_object syntax in Oracle. (#6973) @joaostorrerINSERT statements (#6955) @keraionYour coding agent can read these notes before it upgrades. Set up the MCP server →