Getting started with Semgrep CLI
Installing and running Semgrep locally
Install and run Semgrep locally to scan your code. Semgrep runs offline on uncompiled code. No code leaves your computer.
Semgrep CLI installation requires Python 3.7 or later.
Install Semgrep. Use one of the following options depending on your system and preference:
- macOS
- Linux
- Windows Subsystem for Linux (WSL)
- Docker
brew install semgrep
Alternatively:
python3 -m pip install semgrep
python3 -m pip install semgrep
python3 -m pip install semgrep
docker run --rm -v "${PWD}:/src" returntocorp/semgrep semgrep --config=auto
- Confirm installation by running a simple search pattern. For example, run the following command:
semgrep --pattern '127.$A.$B.$C' --lang generic /etc/hosts
- Run recommended Semgrep Registry rules:
Substitute the optional placeholdersemgrep --config=auto PATH/TO/SRC
PATH/TO/SRC
with the path to your source code.
By default, when Semgrep Registry is used, Semgrep collects usage metrics.
Next steps
By completing this guide, you are now familiar with a simple use of Semgrep. Here are some additional resources to follow:
- Follow tutorials on Learn Semgrep to learn about Semgrep interactively.
- See Running rules to try out and understand more about Semgrep rules.
- See CLI Reference for command line options and exit codes.
- Explore the Semgrep Rules Registry to add rules to your project or writing a rule.
Testing Semgrep on vulnerable repositories
The following community projects are designed to test code scanners and teach security concepts. Try cloning and scanning them with Semgrep.
Expand for sample projects! 🎉
# juice-shop, a vulnerable Node.js + Express app:
git clone https://github.com/bkimminich/juice-shop
cd juice-shop
semgrep --config=auto
# Or if you don't have Semgrep installed, replace the semgrep command with:
docker run --rm -v "$(pwd)/juice-shop:/src" returntocorp/semgrep semgrep --config p/security-audit /src
# Try railsgoat, a vulnerable Ruby on Rails app:
git clone https://github.com/OWASP/railsgoat
cd railsgoat
semgrep --config=auto
# govwa, a vulnerable Go app:
git clone https://github.com/0c34/govwa
cd govwa
semgrep --config=auto
# Vulnerable-Flask-App, vulnerable Python + Flask:
git clone https://github.com/we45/Vulnerable-Flask-App
cd Vulnerable-Flask-App
semgrep --config=auto
# WebGoat, a vulnerable Java + Spring app:
git clone https://github.com/WebGoat/WebGoat
cd WebGoat
semgrep --config=auto
Run Semgrep continuously
Semgrep is at its best when used to continuously scan code. Check out Semgrep in CI to learn how to get results where you already work: GitHub, GitLab, Slack, Jira, and more. To get results even earlier in the development process, such as in a Git pre-commit hook or VS Code, check the available Semgrep extensions.
Check out Semgrep App to integrate CI with PR or MR comments, monitor progress, host private rules (paid tier), and much more!
Upgrading
We release new Semgrep versions often! See upgrading for more details.
Find what you needed in this doc? Join the Semgrep Community Slack group to ask the maintainers and the community if you need help.