Skip to content

Releases: semgrep/semgrep

Release v1.153.0

25 Feb 23:56
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.153.0 - 2026-02-25

### Added

  • Semgrep core is now optimized with flambda (flambda)
  • Scala: Support for for-yield (LANG-193)

### Fixed

  • Scala: Fixed a parsing bug where subsequent calls in an implicit block would not
    be considered at the same scope, e.g.
    def f (a: t) =
      foo()
      bar()
    ``` (lang-194)
    

Release v1.152.0

18 Feb 00:43
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.152.0 - 2026-02-17

### Added

  • Hooks (for both Claude Code and Cursor) now pull custom rules from the registry (custom-rules-hooks)

  • Turned on DNS rebinding protection for the MCP server (dns-check)

  • Environment variables can now be passed to third-party package managers invoked as part of --allow-local-builds dependency resolution via the environment variable SEMGREP_LOCAL_BUILD_ENV, which accepts a JSON object with string keys and string values. (SC-3163)

  • Memory management policies

    A memory policy defines how OCaml's garbage collector should be configured for
    a scan. There are two initial policies: "aggressive", the current behaviour,
    which trades longer scan times for lower memory use, and "balanced", which
    finds a middle ground between reclaiming heap memory in short order while
    limiting how often the garbage collector runs. The policy can be configured
    via the --x-mem-policy CLI flag for the pro engine; this flag is unused in
    the OSS engine. (engine-2055)

  • Added experimental support for the OpenFGA authorization language. Thanks to Alex Useche (@hex0punk) for the contribution! (gh-11347)

  • Allows case insensitive string comparisons using lower() and upper() like this:

    - metavariable-comparison:
        metavariable: $VALUE
        comparison: upper(str($VALUE)) == "SEMGREP"
    

    (gh-11502)

  • Blocking findings that are outputted in the CI output are now labelled as such. (#4394)

### Changed

  • pro: There should be fewer FNs when the max number of fields to track per object
    is reached. (code-9224)
  • Remove legacy combined symbol analysis computation and upload in favor of per-subproject symbol analysis (sc-3153)

### Fixed

  • pro: Improved accuracy of taint tracking through assignments, this will help
    reduce FPs in some cases. (code-9220)
  • When receiving a 429 or 5xx from the Semgrep app, the CLI will wait for a
    longer period of time before retrying the request, to spread out requests
    during periods of app instability. (engine-2550)

Release v1.151.0

04 Feb 18:36
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.151.0 - 2026-02-04

Added

  • Added progress indicators for symbol analysis calculation and upload during CI scans (sc-3103)

Fixed

  • bumped glom to at least version 23.3, which includes a fix to a SyntaxWarning
    warning log. (gh-11460)
  • Semgrep no longer prints info log lines from semgrep-core RPC calls when --trace is passed and --debug isn't (loglines)
  • Fixed the README not appearing in built wheels. (wheelreadme)

Release v1.150.0

29 Jan 22:50
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.150.0 - 2026-01-29

Added

  • Connecting to the Semgrep MCP server via streamableHttp now requires OAuth. (saf-2453)

Changed

  • Migrated from pipenv to uv for ./cli package management (uv)

Fixed

  • pro: Improved virtual method resolution in Scala (code-9213)
  • Improved performance for supply chain scans by reducing pre-computation when printing the scan status. This results in slightly less information being displayed in the case that there are no rules to run. (gh-5436)
  • Supply Chain Analysis: fixed version range matching for NPM packages with versions containing a prerelease identifier such as -alpha in 1.2.3-alpha. (sc-3001)

Release v1.149.0

21 Jan 20:21
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.149.0 - 2026-01-21

Added

  • Added a warning in --debug mode when a user runs a parallel scan with a larger
    value for -j/--jobs than the number of CPUs we detect the host has made
    available to Semgrep. Additionally, a suggested starting value for -j/--jobs
    is reported to give the user a place to start tuning their scan. (saf-2474)
  • Upload symbol analysis on a per-subproject basis during supply chain scans. (sc-3038)

Changed

  • The MCP server no longer supports SSE transport. (saf-2462)

Fixed

  • pro: Improved virtual method resolution in Java (code-9210)
  • pro: Improved virtual method resolution in Scala (code-9212)
  • Improve performance of scan planning, a part of the Python CLI, by reducing
    the cost of re-hashing Target objects. Performance should improve on
    large repo scans proportionally to the number of files in the repo. (gh-5407)
  • semgrep ci no longer applies autofixes to disk, even when the "Suggest autofixes" toggle in the app is enabled. (saf-2446)

Release v1.148.0

15 Jan 02:24
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.148.0 - 2026-01-14

Added

  • Performance: subproject discovery in Supply Chain scans is no longer
    significantly slowed down by the presence of Git-untracked files
    resulting in faster diff scans in such cases. (sc-subproject-speedup)

Fixed

  • pro: Improved virtual method resolution in Java (code-9174)
  • pro: Improved handling of parse errors during inter-file analysis. Now, these
    errors should be adequately reported back to users and in the JSON output. (code-9216)
  • Dataflow now accounts for Python for/else and while/else loops. (gh-8405)
  • Fix rare "bad file descriptor" when performing Git operations on Windows (saf-2358)

Release v1.147.0

07 Jan 21:44
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.147.0 - 2026-01-07

Added

  • Gradle lockfiles of the form gradle*.lockfile are now supported. Previously, only lockfiles named exactly gradle.lockfile were supported. (SC-2999)
  • semgrep login now supports a --force flag, which ignores existing tokens and starts a new login session. The MCP setup workflow has been updated to use --force too. (saf-2392)

Fixed

  • Deduplication should now pick the exact same findings across scans. Previously,
    findings were always equivalent, but not guaranteed to be exactly the same
    (e.g. metavariable bindings could differ). Depending on the rule and target code,
    this could cause findings' fingerprints to change from one scan to another, thus
    leading to finding flakiness and "cycling" in Semgrep App. Note that when
    upgrading to this Semgrep version, you may see different (but equivalent) findings
    wrt your current Semgrep version in the first scan, one more time. However, in
    subsequent scans/upgrades, this problem should go away or at least be greatly
    reduced. (saf-2304)

Release v1.146.0

17 Dec 20:44
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.146.0 - 2025-12-17

Added

  • Added support for Cursor post-code-generation hooks via new record-file-edit and stop-cli-scan semgrep mcp flags (cursor-hooks)
  • Added skipped_paths field to CI scan results to report files that failed to scan due to errors (timeout, OOM, etc.), preventing the app from incorrectly marking findings in those files as fixed (gh-5122)
  • Symbol analysis, if enabled, now runs for Supply Chain only scans when calling semgrep ci. (sc-2927)

Changed

  • Semgrep's Docker image base has been bumped from Alpine Linux 3.22 to 3.23 (docker-version)
  • bumped the mcp python-sdk from 1.16.0 to 1.23.3 (mcp-version)
  • pro: [experimental] enabling and disabling transitive reachability
    analysis in semgrep ci regardless of app settings is now possible with
    --x-enable-transitive-reachability (or --x-tr)
    and --x-disable-transitive-reachability. (tr-flags)

Fixed

  • The PHP AST now distinguishes between if statements with no else clause and those with an explicit but empty else {}. (gh-11330)
  • git-lfs objects are now excluded from baseline scans, as they are usually binary files, or simply too large to scan. (saf-2020)
  • Fix a OCaml stdlib bug that would cause nondeterministic UnixErrors on Windows under the multicore runtime due to a race condition in the socketpair implementation (saf-2316)
  • Fixed an issue that in rare cases could lead timeouts to be mishandled. This typically manifested only through slightly different warning messages, but it is possible that more serious consequences could have occasionally resulted. (saf-2368)
  • Fixed symbol analysis incorrectly analyzing all files instead of only the relevant language files per ecosystem. (sc-3020)

Release v1.145.0

05 Dec 02:26
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.145.0 - 2025-12-04

Added

  • Added optional user-prompting for classifying findings as true/false positives via MCP Elicitation in the MCP server (behind SEMGREP_FINDINGS_ELICITATION_ENABLED, off by default). (elicitation)
  • Added hook to inject secure-by-default library recommendations into Claude Code Agent context. (secure-defaults-hook)

Changed

  • Symbol analysis upload now runs before scan completion to ensure it is available during initial scan postprocessing. (sc-2933)

Fixed

  • Fix issue that could lead to validation failures for certain well-formed rules, such as those with emoji in their messages. (incid-293)
  • The correct range for let ... in expressions in OCaml is now reported. Previously, the location of the let was omitted. This is mainly relevant for autofix. (ocaml-let)
  • Debug log lines concerning telemetry collection that are only relevant inside
    Semgrep's managed scanning environment are not emitted if a scan runs outside
    that environment. (saf-2321)
  • pro: in 1.144.0 interfile scans no longer default to -j 1; instead, the number of available CPUs on the system was used to inform how many jobs should be spawned. This caused a change in timeouts due to how time is measured for certain parts of the pro engine. This change has now been reverted (saf-default-jobs)

Release v1.144.0

20 Nov 00:44
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

1.144.0 - 2025-11-19

Fixed

  • pro: interfile scans no longer default to -j 1; instead, the number of
    available CPUs on the system is polled as part of a heuristic to determine how
    many threads should be spawned. (gh-4952)
  • Semgrep will no longer rarely crash when --trace is passed. (incid-280)