Subscribe

Application Security

SAST tools that name the sink in the PR (2026)

A 2026 shortlist of static analyzers that can comment on a pull request. Public docs, not a lab bake-off.

Expertise: Application Security · Level: Intermediate · 12 min read

A PDF from last quarter is not a review.

The sink is in the PR and the scanner still talks about ‘a vulnerability was found.’ SAST earns the row if it can name the file and the call. It is not SCA. The lockfile job lives on the supply-chain list.

Six analyzers. Two rule engines you can host. One GitHub-native query. One quality platform. One commercial PR bot. One Python specialist. Public docs and licenses. Not a bake-off.

Technical check: we cross-check first-party product pages, public licenses, and live documentation. Rank is a technical recommendation, not a recap of other lists, and not a lab bake-off.

ToolBest forLicense
SemgrepRules you can read in the PRLGPL-2.1 (CLI) / commercial cloud
CodeQLQuery language on a GitHub repoGitHub CodeQL license
BearerData-flow SAST you can run locallyElastic License 2.0
SonarQubeQuality gate that includes security rulesLGPL-3.0 (Community) / commercial editions
Snyk CodeCommercial PR comments on the sinkCommercial
BanditPython AST checks you can run offlineApache-2.0
Where it sits
Rules you own
PR product
One language
Quality platform
1

Semgrep

Best for rules you can read in the PR

Semgrep matches code with a pattern that looks like the code. Rules are YAML. The CLI is open. Semgrep Cloud is paid.

Key features

  • YAML rules that look like the sink
  • OSS registry
  • CI and PR comments
  • You can write a rule in an hour

Why we like it

This is the hidden gem. A rule you can read is a rule you can fix. We prefer it over a black-box score.

Limits

You still write rules for your frameworks. Cloud features sit behind a contract. It is not a DAST.

2

CodeQL

Best for query language on a GitHub repo

CodeQL treats the repo as a database. Queries are QL. GitHub Actions can run it on public repos under GitHub’s terms.

Key features

  • QL queries
  • GitHub-hosted analysis
  • Pack of security queries
  • Results as SARIF

Why we like it

If the code is already on GitHub, this is the query shelf that can run without a second vendor.

Limits

The license is not Apache. Self-hosting has terms. QL is a language your team must learn.

3

Bearer

Best for data-flow SAST you can run locally

Bearer traces data to a sink. The CLI is open under ELv2. The product page still sells privacy and security findings.

Key features

  • Data-flow traces
  • CLI you can run in CI
  • Language support listed in the repo
  • JSON and SARIF

Why we like it

When the bug is ‘this email reached the logger,’ a regex SAST will miss it. Bearer is the open data-flow option on this list.

Limits

ELv2 is not OSI Apache. Language coverage is not every stack. You still review the trace.

4

SonarQube

Best for quality gate that includes security rules

SonarQube is the known quality platform. Security rules ship in the same gate as bugs and smells. Community is LGPL. Enterprise is paid.

Key features

  • Quality gate in CI
  • Security hotspot UI
  • Many languages
  • Self-host or SonarCloud

Why we like it

It is already in a lot of pipelines. We list it so the gem tools have a neighbor people recognize.

Limits

A hotspot is not always a sink. Edition splits hide rules. This is not a pentest.

5

Snyk Code

Best for commercial PR comments on the sink

Snyk Code is the SAST product next to Snyk Open Source. Findings land in the PR. The SCA job is a different list.

Key features

  • PR annotation
  • IDE plugin
  • Snyk rule engine
  • Same tenant as SCA if you already pay

Why we like it

If the org already bought Snyk for the lockfile, this is the SAST they will enable. We still want a Semgrep rule you can read.

Limits

Price is commercial. Rules are not a public YAML repo. We did not run a paid org.

6

Bandit

Best for python AST checks you can run offline

Bandit walks a Python AST. Tests have ids like B201. It is the language specialist on this list.

Key features

  • AST tests with stable ids
  • Config as YAML
  • CI friendly
  • Apache-2.0

Why we like it

A Python service that only needs Bandit should not wait for a platform RFP. The ids are greppable.

Limits

Python only. No data-flow across files the way Bearer claims. Framework sinks still need a test you enable.

What the internet thinks about SAST tools

Semgrep threads on HN keep landing on what a match actually proves. We agree. A clean scan is not a sink you tested.

da39a3ee on Hacker News, Apr 2021: “Since there’s no simple definition of what it’s doing, there’s no simple way to assess your false negative rate when searching for something.”

Prove Bandit runs on a file you own

On a host you own, run Bandit against an empty file. The command should start and exit clean on a fixture you control.

python3 -m pip install -q bandit
printf 'x = 1\n' > /tmp/bandit_fix.py
python3 -m bandit /tmp/bandit_fix.py; echo exit:$?

FAQs

Is SAST the same as SCA?

No. SAST reads your code. SCA reads the lockfile. Supply chain owns the lockfile list.

Does a clean SAST mean the app is safe?

No. It means these rules did not fire. IDOR and authZ still need tests. Link the authorization list.

Should I run every tool?

No. Pick one rule engine you can write for, plus the platform you already pay for.

Is this a scored bake-off?

No. Order is editorial. We did not score true-positive rates in a lab.