Skip to main content

Lightweight static analysis for many languages. Find bug variants with patterns that look like source code.

Project description

Semgrep logo

Lightweight static analysis for many languages.
Find bugs and enforce code standards.

Homebrew PyPI Issues welcome! Issues welcome! 1500+ GitHub stars Follow @r2cdev


Semgrep is a fast, open-source, static analysis tool that excels at expressing code standards — without complicated queries — and surfacing bugs early at editor, commit, and CI time. Precise rules look like the code you’re searching; no more traversing abstract syntax trees or wrestling with regexes.

The Semgrep Registry has 900+ rules written by the Semgrep community covering security, correctness, and performance bugs. No need to DIY unless you want to.

Semgrep runs offline, on uncompiled code.

Language support

General availability

Go · Java · JavaScript · JSON · Python

Beta

Ruby · TypeScript · JSX · TSX

Visit Supported languages for the complete list.

Getting started

To install Semgrep use Homebrew or pip, or run without installation via Docker:

# For macOS
$ brew install semgrep

# For Ubuntu/WSL/Linux/macOS
$ python3 -m pip install semgrep

# To try Semgrep without installation run via Docker
$ docker run --rm -v "${PWD}:/src" returntocorp/semgrep --help

Once installed, Semgrep can run with single rules or entire rulesets. Visit Running rules to learn more or try the following:

# Check for Python == where the left and right hand sides are the same (often a bug)
$ semgrep -e '$X == $X' --lang=py path/to/src

# Run the r2c-ci ruleset (with rules for many languages) on your own code!
$ semgrep --config=p/r2c-ci path/to/src

Visit Getting started to learn more.

Rule examples

Visit Rule examples for use cases and ideas.

Use case Semgrep rule
Ban dangerous APIs Prevent use of exec
Search routes and authentication Extract Spring routes
Enforce the use secure defaults Securely set Flask cookies
Enforce project best-practices Use assertEqual for == checks, Always check subprocess calls
Codify project-specific knowledge Verify transactions before making them
Audit security hotspots Finding XSS in Apache Airflow, Hardcoded credentials
Audit configuration files Find S3 ARN uses
Migrate from deprecated APIs DES is deprecated, Deprecated Flask APIs, Deprecated Bokeh APIs
Apply automatic fixes Use listenAndServeTLS

Integrations

Visit Integrations to learn about Semgrep editor, commit, and CI integrations.

FAQ

Visit FAQ to learn more. Semgrep is supported by r2c.

Contributing

Visit Contributing or join the r2c Community Slack to learn more. Semgrep is LGPL-2.1 licensed.

Usage

Visit CLI Usage for usage and exit code documentation.

Upgrading

To upgrade, run the command below associated with how you installed Semgrep:

# Using Homebrew
$ brew upgrade semgrep

# Using pip
$ python3 -m pip install --upgrade semgrep

# Using Docker
$ docker pull returntocorp/semgrep:latest

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

semgrep-0.31.1.tar.gz (69.5 kB view details)

Uploaded Source

Built Distributions

semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-macosx_10_14_x86_64.whl (49.2 MB view details)

Uploaded CPython 3.6 CPython 3.7 CPython 3.8 Python 3.6 Python 3.7 Python 3.8 macOS 10.14+ x86-64

semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-any.whl (52.0 MB view details)

Uploaded CPython 3.6 CPython 3.7 CPython 3.8 Python 3.6 Python 3.7 Python 3.8

File details

Details for the file semgrep-0.31.1.tar.gz.

File metadata

  • Download URL: semgrep-0.31.1.tar.gz
  • Upload date:
  • Size: 69.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for semgrep-0.31.1.tar.gz
Algorithm Hash digest
SHA256 f428d93c2b8a1ea2b640d9a613e6cd3b55249271bbb578acc526be16d880dbc9
MD5 786fca5874ac20c7980057be6221f598
BLAKE2b-256 89fde7d6c9f9a585d8356ca63c3fab63f61fc95311a9598ad10d312b2be504cf

See more details on using hashes here.

File details

Details for the file semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 49.2 MB
  • Tags: CPython 3.6, CPython 3.7, CPython 3.8, Python 3.6, Python 3.7, Python 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 1573109f2d83c1aa7d750049f96959be1aca257e8aa45e47e789aafeca36e044
MD5 8aed61a5f06607ef2f6ddb2452cd9edc
BLAKE2b-256 20e64f00922254288f422dd6ba5bf4a561ee2c6518e8e4562f418fbccd8b9a88

See more details on using hashes here.

File details

Details for the file semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-any.whl.

File metadata

  • Download URL: semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-any.whl
  • Upload date:
  • Size: 52.0 MB
  • Tags: CPython 3.6, CPython 3.7, CPython 3.8, Python 3.6, Python 3.7, Python 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for semgrep-0.31.1-cp36.cp37.cp38.py36.py37.py38-none-any.whl
Algorithm Hash digest
SHA256 5c8c5636ad2f73741137f63b3c6effda2bdf37fe4ad510db11279b1b252e9846
MD5 f0e0ed985d42a4416bcd2088289be4e8
BLAKE2b-256 143b4925395026e90d10d817bb1743e16e6eb2ab41050acd209536d8c8dc3e51

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page