SkillAgentSearch skills...

Opengrep

๐Ÿ”Ž Static code analysis engine to find security issues in code.

Install / Use

/learn @opengrep/Opengrep
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<br /> <p align="center"> <a href="https://github.com/opengrep"> <picture> <source media="(prefers-color-scheme: light)" srcset="images/opengrep-github-banner.svg"> <source media="(prefers-color-scheme: dark)" srcset="images/opengrep-github-banner.svg"> <img src="https://raw.githubusercontent.com/opengrep/opengrep/main/images/opengrep-github-banner.svg" width="100%" alt="Opengrep logo"/> </picture> </a> </p>

Welcome to Opengrep, a fork of Semgrep, under the LGPL 2.1 license

Opengrep is the most advanced open source SAST engine.

Let's make secure software development a shared standard. Opengrep provides every developer and organisation with open and advanced static code analysis.

Opengrep is backed by a consortium of 10+ AppSec organisations, including: Aikido, Arnica, Amplify, Endor Labs, Jit, Kodem, Legit, Mobb, Orca Security, and Phoenix Security. To learn more, read the manifesto at opengrep.dev.

Why Opengrep?

Opengrep was created when Semgrep moved critical features behind a commercial licence. We believe advanced static analysis should remain open and accessible to all.

Key advantages:

  • Compatible with Semgrep rules - your existing rules and rulesets work unchanged
  • Standard outputs - JSON and SARIF formats for easy integration
  • Open governance - contributions accepted on merit, not commercial interest
  • Long-term assurance - committed to open-source under LGPL 2.1

Key Improvements

Opengrep has introduced significant improvements since the fork. Highlights include:

Superior Taint Analysis (--taint-intrafile):

  • Constructor and field assignment tracking
  • Inter-method taint flow
  • Higher-order function support across 12 languages
  • Collection method tainting (map, filter, reduce, etc.)

See the Intrafile Tainting Tutorial and Higher-Order Functions Tutorial for details.

Language Support:

  • Visual Basic - not available in Semgrep CE or Pro
  • Apex, Elixir - not in Semgrep CE
  • Improved: Clojure (tainting support), PHP 8.4, C# 14

Distribution:

  • Self-contained binaries via Nuitka (no Python required)
  • Signed releases with Cosign

See OPENGREP.md for the full list of improvements since the fork.

Opengrep: Fast and Powerful Code Pattern Search

Opengrep is an ultra-fast static analysis tool for searching code patterns with the power of semantic grep. Analyze large code bases at the speed of thought with intuitive pattern matching and customizable rules. Find and fix security vulnerabilities, fast โ€“ ship more secure code.

Opengrep supports 30+ languages, including:

Apex ยท Bash ยท C ยท C++ ยท C# ยท Clojure ยท Dart ยท Dockerfile ยท Elixir ยท Go ยท HTML ยท Java ยท JavaScript ยท JSON ยท Jsonnet ยท JSX ยท Julia ยท Kotlin ยท Lisp ยท Lua ยท OCaml ยท PHP ยท Python ยท R ยท Ruby ยท Rust ยท Scala ยท Scheme ยท Solidity ยท Swift ยท Terraform ยท TSX ยท TypeScript ยท Visual Basic ยท XML ยท YAML ยท Generic (ERB, Jinja, etc.)

Installation

Quick Install (Recommended)

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/opengrep/opengrep/main/install.sh | bash

Or if you've cloned the repo:

./install.sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/opengrep/opengrep/main/install.ps1 | iex

Or with a specific version:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/opengrep/opengrep/main/install.ps1))) -Version v1.16.0

Manual Install

Binaries are available on the releases page.

Getting started

Create rules/demo-rust-unwrap.yaml with the following content:

rules:
- id: unwrapped-result
  pattern: $VAR.unwrap()
  message: "Unwrap detected - potential panic risk"
  languages: [rust]
  severity: WARNING

and code/rust/main.rs with the following content (that contains a risky unwrap):

fn divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        return Err("Division by zero".to_string());
    }
    Ok(a / b)
}

fn main() {
    let result = divide(10, 0).unwrap(); // Risky unwrap!
    println!("Result: {}", result);
}

You should now have:

.
โ”œโ”€โ”€ code
โ”‚   โ””โ”€โ”€ rust
โ”‚       โ””โ”€โ”€ main.rs
โ””โ”€โ”€ rules
    โ””โ”€โ”€ demo-rust-unwrap.yaml

Now run:

โฏ opengrep scan -f rules code/rust

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Opengrep CLI โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


Scanning 1 file (only git-tracked) with 1 Code rule:

  CODE RULES
  Scanning 1 file.

  PROGRESS

  โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 100% 0:00:00


โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 1 Code Finding โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

    code/rust/main.rs
    โฏโฏ rules.unwrapped-result
          Unwrap detected - potential panic risk

            9โ”† let result = divide(10, 0).unwrap(); // Risky unwrap!



โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Scan Summary โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Ran 1 rule on 1 file: 1 finding.

To obtain SARIF output:

โฏ opengrep scan --sarif-output=sarif.json -f rules code
  ...
โฏ cat sarif.json | jq
{
  "version": "2.1.0",
  "runs": [
    {
      "invocations": [
        {
          "executionSuccessful": true,
          "toolExecutionNotifications": []
        }
      ],
      "results": [
        {
          "fingerprints": {
            "matchBasedId/v1": "a0ff5ed82149206a74ee7146b075c8cb9e79c4baf86ff4f8f1c21abea6ced504e3d33bb15a7e7dfa979230256603a379edee524cf6a5fd000bc0ab29043721d8_0"
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "code/rust/main.rs",
                  "uriBaseId": "%SRCROOT%"
                },
                "region": {
                  "endColumn": 40,
                  "endLine": 9,
                  "snippet": {
                    "text": "    let result = divide(10, 0).unwrap(); // Risky unwrap!"
                  },
                  "startColumn": 18,
                  "startLine": 9
                }
              }
            }
          ],
          "message": {
            "text": "Unwrap detected - potential panic risk"
          },
          "properties": {},
          "ruleId": "rules.unwrapped-result"
        }
      ],
      "tool": {
        "driver": {
          "name": "Opengrep OSS",
          "rules": [
            {
              "defaultConfiguration": {
                "level": "warning"
              },
              "fullDescription": {
                "text": "Unwrap detected - potential panic risk"
              },
              "help": {
                "markdown": "Unwrap detected - potential panic risk",
                "text": "Unwrap detected - potential panic risk"
              },
              "id": "rules.unwrapped-result",
              "name": "rules.unwrapped-result",
              "properties": {
                "precision": "very-high",
                "tags": []
              },
              "shortDescription": {
                "text": "Opengrep Finding: rules.unwrapped-result"
              }
            }
          ],
          "semanticVersion": "1.100.0"
        }
      }
    }
  ],
  "$schema": "https://docs.oasis-open.org/sarif/sarif/v2.1.0/os/schemas/sarif-schema-2.1.0.json"
}

Documentation

Community

More


Opengrep is a fork of Semgrep v1.100.0, created by Semgrep Inc. Opengrep is not affiliated with or endorsed by Semgrep Inc.

View on GitHub
GitHub Stars2.3k
CategoryDevelopment
Updated13m ago
Forks189

Languages

OCaml

Security Score

95/100

Audited on Mar 31, 2026

No findings