maxdop

maxdop 0.1.2

An opinionated T-SQL formatter that runs in CI and checks its own work.

  • By Page Brooks
  • Open Source
  • Portable
  • Updated Aug 31, 2026
Download for Windows

About maxdop

maxdop formats T-SQL using Microsoft's own parser, ScriptDom — the one behind DacFx and SQL
database projects — so it reads stored procedures, GO batches and SQL Server 2000-era syntax the
way the server does, rather than guessing from tokens.

Every format is re-parsed and compared against the input: token stream, syntax tree and comments.
On any mismatch your original file is returned untouched with a distinct exit code, so a formatter
bug cannot corrupt your source. Measured across 2,215 real-world files it refused nothing, crashed
on nothing, and lost none of their 11,261 comments.

It is one static binary with no .NET runtime to install, and the same binary runs in your editor
and your build pipeline. Style lives in a .maxdop.json committed next to the code, so a repository
formats the same way for everyone who opens it.

What's new in 0.1.2

Casing on Built-in Functions and Globals
Built-in function names and global variables now take keyword casing. Until now CAST, COALESCE, NULLIF, LEFT, RIGHT and IIF were recased while len and
row_number beside them were not, so a single expression could come out in two cases.
New Configuration
maxdop now recases from a list of built-in names, and that makes it the only casing decision in
the formatter not derived from the parse tree, which is controllable with a new configuration value:
{
...
"recaseBuiltInFunctions": true
}
It follows keywordCase, so "lower" brings GETDATE() and @@ROWCOUNT down rather than leaving
casing half-applied.
Setting it to false keeps the casing you wrote for everything the list covers — built-in function
names, global variables, the parser-matched table functions such as STRING_SPLIT, and the aggregate
a PIVOT names — so off means off rather than mostly off.
It does not reach casing that the parse tree proves. CAST, NVARCHAR, WITHIN GROUP and
DBCC CHECKDB … WITH NO_INFOMSGS stay cased under keywordCase with the switch off, because this
switch exists for the one decision made from a list instead of from the grammar.
Caveats:
- The call must have no qualifier. SQL Server requires at least a two-part name to invoke a
user-defined function, so an unqualified len(x) can only ever bind to the built-in. If you have a
function of your own called Len, you reach it as dbo.Len(x) — which has a call target and is
left exactly as you wrote it.
- The name must be undelimited. len is untouched. Brackets are how you say "this
identifier is spelled exactly like this".
- The list is consulted in function-name position only. A column named len, a table named
replace, an alias named getdate, a variable named @len. All plain names are untouched.
Global variables
IF @@ERROR <> 0 PRINT @@SERVERNAME; -- @@rowcount, @@trancount, @@fetch_status, …
DECLARE @@MyVar INT is legal T-SQL, and ScriptDom resolves a later reference by
spelling rather than by scope, so in an expression position a
local @@MyVar arrives as the very same GlobalVariableExpression that @@ROWCOUNT does. Recasing
on the prefix quietly renames that variable under a case-sensitive collation. So the
documented globals are listed by name, and a local variable spelled like a system one keeps every
character you wrote.
WITHIN GROUP is one clause
-- 0.1.1 -- 0.1.2 …

Full release notes »

Technical details

PublisherPage Brooks
Version0.1.2
Release date2026-08-31
LicenseMIT
Installer typezip
Architecturex64, arm64
Package IDpagebrooks.maxdop

Install maxdop from the command line

Install with Windows Package Manager
winget install --id=pagebrooks.maxdop -e
Update to the latest version
winget upgrade --id=pagebrooks.maxdop -e
Uninstall
winget uninstall --id=pagebrooks.maxdop -e

maxdop adds this command to the command line: maxdop.

clidatabaseformattermssqlsqlsql-serversqlservert-sqltsql

maxdop version history

0.1.1 Aug 24, 2026

Frequently asked questions

Is maxdop free?

Yes. maxdop is free and open-source software released under the MIT license.

What is the latest version of maxdop?

The latest version is 0.1.2, released on Aug 31, 2026.

Is it safe to download maxdop?

The download button links to the official installer published on github.com, the same file Windows Package Manager installs. You can verify the downloaded file by comparing its SHA-256 checksum with 55f43288ad3fe0bdb9f354bd6ae3a047b77a0ae87061c927ea6affaf89925891.

Which Windows versions does maxdop support?

maxdop runs on Windows and is available for 64-bit (x64), ARM64 systems.

How do I uninstall maxdop?

Open Settings › Apps › Installed apps, find maxdop and select Uninstall. From the command line, run winget uninstall --id=pagebrooks.maxdop -e.

Is there a portable version of maxdop?

Yes. maxdop is available as a portable ZIP archive (maxdop-0.1.2-win-x64.zip, 64-bit (x64)) that runs without installation. Copy it to any folder or USB drive and run it from there.