โšก๏ธ ZLint

March 1, 2026 ยท View on GitHub

codecov CI Discord

An opinionated linter for the Zig programming language.

โœจ Features

  • ๐Ÿ” Custom Analysis. ZLint has its own semantic analyzer, heavily inspired by the Oxc project, that is completely separate from the Zig compiler. This means that ZLint still checks and understands code that may otherwise be ignored by Zig due to dead code elimination.
  • โšก๏ธ Fast. Designed from the ground-up to be highly performant, ZLint typically takes a few hundred milliseconds to lint large projects.
  • ๐Ÿ’ก Understandable. Error messages are pretty, detailed, and easy to understand. Most rules come with explanations on how to fix them and what exactly is wrong. diagnostic example

๐Ÿ“ฆ Installation

Pre-built binaries for Windows, MacOS, and Linux on x64 and aarch64 are available for each release.

Linux/macOS

curl -fsSL https://raw.githubusercontent.com/DonIsaac/zlint/refs/heads/main/tasks/install.sh | bash

Windows

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DonIsaac/zlint/refs/heads/main/tasks/install.ps1" | Invoke-Expression

๐Ÿ”จ Building from Source

Clone this repo and compile the project with Zig.

zig build --release=safe

โšก๏ธ Lint Rules

All lints and what they do can be found here.

โš™๏ธ Configuration

Create a zlint.json file in the same directory as build.zig. This disables all default rules, only enabling the ones you choose.

{
  "rules": {
    "unsafe-undefined": "error",
    "homeless-try": "warn"
  }
}

ZLint also supports ESLint-like disable directives to turn off some or all rules for a specific file.

// zlint-disable unsafe-undefined -- We need to come back and fix this later
const x: i32 = undefined;

๐Ÿ™‹โ€โ™‚๏ธ Contributing

If you have any rule ideas, please add them to the rule ideas board.

Interested in contributing code? Check out the contributing guide.