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.0.tar.gz (69.5 kB view details)

Uploaded Source

Built Distributions

semgrep-0.31.0-cp36.cp37.cp38.py36.py37.py38-none-macosx_10_14_x86_64.whl (49.1 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.0-cp36.cp37.cp38.py36.py37.py38-none-any.whl (51.9 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.0.tar.gz.

File metadata

  • Download URL: semgrep-0.31.0.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.24.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.0.tar.gz
Algorithm Hash digest
SHA256 239ee37c87f45ed6e9cb332abeff4f7c5db68012b7eb8ae1f2206e3ab4e24933
MD5 af2df507cf8a97c2f8ddbe8baad68d2b
BLAKE2b-256 ba3c5806bc495291cddbd771568c50695fb5898414762dd53a7184a28297db9a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: semgrep-0.31.0-cp36.cp37.cp38.py36.py37.py38-none-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 49.1 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.24.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.0-cp36.cp37.cp38.py36.py37.py38-none-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 ab30fba9541905b6e82bae82217c20750372813eb373f23469e10715337eeeea
MD5 4657e357a5341df01cf1cee745369e91
BLAKE2b-256 25cfea46118fb70f8ce18d0621e9e9b3feb9cfbe19234ff9e7217c16c7f3b71b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: semgrep-0.31.0-cp36.cp37.cp38.py36.py37.py38-none-any.whl
  • Upload date:
  • Size: 51.9 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.24.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.0-cp36.cp37.cp38.py36.py37.py38-none-any.whl
Algorithm Hash digest
SHA256 af0ecb8ac4a76628bb01e3e867640a0d611af95038fb20e337d3ce2765eca5a2
MD5 5bea2cc137897298fd2865c4fc7be9d6
BLAKE2b-256 cdd9aa43743945d752f419849aa88cb74ac03a695586fc7f3a2fe0d9237e4e88

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