A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
This report summarizes scanner evidence for wezterm/wezterm, a Rust project with 29,413 GitHub stars. SynthScan examined 528,430 lines of code across 1645 source files, recording 470 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 424 finding(s).
Are imports declared and package/API names verified? 12 finding(s).
Are wrappers, guards, and repeated structures necessary? 35 finding(s).
Which changes need focused human review? 470 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 470 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | deny.toml | 1 | # This template contains all of the possible sections and their default values | COMMENT |
| LOW | deny.toml | 21 | # `target_family = "unix"` configuration, that only having windows targets in | COMMENT |
| LOW | deny.toml | 41 | #exclude = [] | COMMENT |
| LOW | deny.toml | 61 | COMMENT | |
| LOW | deny.toml | 101 | "CC0-1.0", | COMMENT |
| LOW | deny.toml | 121 | # licensing information | COMMENT |
| LOW | deny.toml | 141 | # visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field. | COMMENT |
| LOW | deny.toml | 161 | # * simplest-path - The path to the version with the fewest edges is highlighted | COMMENT |
| LOW | deny.toml | 181 | # Wrapper crates can optionally be specified to allow the crate when it | COMMENT |
| LOW | deny.toml | 201 | # "rustls-tls-webpki-roots", | COMMENT |
| LOW | deny.toml | 221 | ] | COMMENT |
| LOW | cooldown.toml | 21 | # [[allow.package]] | COMMENT |
| LOW | wezterm-font/src/locator/font_config.rs | 161 | } | COMMENT |
| LOW | wezterm-font/src/shaper/harfbuzz.rs | 301 | for c in s.chars() { | COMMENT |
| LOW | wezterm-font/src/shaper/harfbuzz.rs | 341 | } | COMMENT |
| LOW | wezterm-font/src/shaper/harfbuzz.rs | 361 | // * Dedup | COMMENT |
| LOW | wezterm-font/src/shaper/harfbuzz.rs | 421 | // This logic essentially merges `info` into `prior` by | COMMENT |
| LOW | wezterm-font/src/shaper/mod.rs | 21 | /// into a single glyph, such as in `!=` and other ligatures. | COMMENT |
| LOW | mux/src/localpane.rs | 61 | /// This is a bit horrible; it can take 700us to tcgetpgrp, so if we have | COMMENT |
| LOW | mux/src/renderable.rs | 21 | COMMENT | |
| LOW | mux/src/tab.rs | 601 | self.inner.lock().get_size() | COMMENT |
| LOW | mux/src/tab.rs | 621 | /// tree model. | COMMENT |
| LOW | mux/src/pane.rs | 361 | pub trait WithPaneLines { | COMMENT |
| LOW | mux/src/ssh_agent.rs | 21 | /// to decide whether the client process is allowed to consume | COMMENT |
| LOW | mux/src/ssh_agent.rs | 141 | // Take first one with auth sock -> that's the path | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 41 | COMMENT | |
| LOW | wezterm-gui-subcommands/src/lib.rs | 61 | #[arg(short = 'e', hide = true)] | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 81 | /// --position 10,20 to set x=10, y=20 in screen coordinates | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 101 | #[arg(long, requires = "domain")] | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 121 | COMMENT | |
| LOW | wezterm-gui-subcommands/src/lib.rs | 141 | /// the process. | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 161 | #[arg(long, verbatim_doc_comment)] | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 181 | /// This changes the class for all windows spawned by this | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 201 | } | COMMENT |
| LOW | wezterm-gui-subcommands/src/lib.rs | 221 | /// authentication dialogs. | COMMENT |
| LOW | lua-api-crates/color-funcs/src/image_colors.rs | 1 | //! This module analyzes an image to determine a set of | COMMENT |
| LOW | lua-api-crates/time-funcs/src/lib.rs | 61 | /// The name of the registry entry that will resolve to | COMMENT |
| LOW | test-data/emoji-test.txt | 1 | # emoji-test.txt | COMMENT |
| LOW | test-data/emoji-test.txt | 21 | # unqualified — a unqualified emoji (See ED-19 in UTS #51) | COMMENT |
| LOW | test-data/braille-all-chars.txt | 1 | // [⡪] (Single one) | COMMENT |
| LOW | test-data/braille-all-chars.txt | 21 | // ⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟ | COMMENT |
| LOW | test-data/light-lines-vs-heavy-lines.txt | 1 | // [─] BOX DRAWINGS LIGHT HORIZONTAL | COMMENT |
| LOW | test-data/light-lines-vs-heavy-lines.txt | 21 | // [┎] BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT | COMMENT |
| LOW | test-data/light-lines-vs-heavy-lines.txt | 41 | // [┞] BOX DRAWINGS UP HEAVY and RIGHT DOWN LIGHT | COMMENT |
| LOW | test-data/light-lines-vs-heavy-lines.txt | 61 | // [┱] BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY | COMMENT |
| LOW | test-data/light-lines-vs-heavy-lines.txt | 81 | // [╃] BOX DRAWINGS LEFT UP HEAVY and RIGHT DOWN LIGHT | COMMENT |
| LOW | test-data/light-lines-vs-heavy-lines.txt | 101 | // [╸] BOX DRAWINGS HEAVY LEFT | COMMENT |
| LOW | licenses/ANGLE.md | 1 | // Copyright 2018 The ANGLE Project Authors. | COMMENT |
| LOW | licenses/ANGLE.md | 21 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | COMMENT |
| LOW | pty/examples/narrow.rs | 41 | }); | COMMENT |
| LOW | pty/examples/whoami_async.rs | 21 | // Move the slave to another thread to block and spawn a | COMMENT |
| LOW | pty/examples/whoami.rs | 41 | // Obtain the writer. | COMMENT |
| LOW | pty/src/unix.rs | 141 | /// On Linux, gnome/mutter leak shell extension fds to wezterm too, so we | COMMENT |
| LOW | pty/src/lib.rs | 1 | //! This crate provides a cross platform API for working with the | COMMENT |
| LOW | pty/src/lib.rs | 21 | //! // that matches the size of the selected font. That | COMMENT |
| LOW | pty/src/lib.rs | 101 | /// slave end. | COMMENT |
| LOW | pty/src/lib.rs | 121 | /// If applicable to the type of the tty, return the termios | COMMENT |
| LOW | config/src/background.rs | 221 | #[derive(Debug, Copy, Clone, FromDynamic, ToDynamic, PartialEq, Eq)] | COMMENT |
| LOW | config/src/font.rs | 241 | pub enum FreeTypeLoadTarget { | COMMENT |
| LOW | config/src/font.rs | 261 | bitflags! { | COMMENT |
| 333 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2452 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2460 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2468 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2476 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2484 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2492 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2500 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2508 | # ================================================ | COMMENT |
| MEDIUM⚡ | bidi/data/DerivedBidiClass.txt | 2516 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 10 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 46 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1087 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1258 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1278 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1295 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1334 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1349 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1369 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1381 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1391 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1405 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1918 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 1962 | # ================================================ | COMMENT |
| MEDIUM | bidi/data/DerivedBidiClass.txt | 2308 | # ================================================ | COMMENT |
| MEDIUM | wezterm-gui/src/customglyph.rs | 19 | // ╭──────╮ | COMMENT |
| MEDIUM | wezterm-gui/src/customglyph.rs | 26 | // ╰──────╯ | COMMENT |
| MEDIUM | wezterm-char-props/data/emoji-data.txt | 20 | # ================================================ | COMMENT |
| MEDIUM | wezterm-char-props/data/emoji-data.txt | 411 | # ================================================ | COMMENT |
| MEDIUM | wezterm-char-props/data/emoji-data.txt | 680 | # ================================================ | COMMENT |
| MEDIUM | wezterm-char-props/data/emoji-data.txt | 689 | # ================================================ | COMMENT |
| MEDIUM | wezterm-char-props/data/emoji-data.txt | 744 | # ================================================ | COMMENT |
| MEDIUM | wezterm-char-props/data/emoji-data.txt | 762 | # ================================================ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ci/generate-workflows.py | 370 | if ! command -v rustup &>/dev/null; then | CODE |
| HIGH | ci/generate-workflows.py | 730 | 'cd flathub && gh pr create --fill --body "PR automatically created by release automation in the wezterm | STRING |
| HIGH⚡ | ci/generate-workflows.py | 752 | "cd winget-pkgs && git config user.email wez@wezfurlong.org", | STRING |
| HIGH⚡ | ci/generate-workflows.py | 756 | "cd winget-pkgs && git config user.name 'Wez Furlong'", | STRING |
| HIGH⚡ | ci/generate-workflows.py | 764 | 'cd winget-pkgs && gh pr create --fill --body "PR automatically created by release automation in the | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | luahelper/src/enumctor.rs | 134 | // Step 1: see if this is a unit variant. | COMMENT |
| LOW | luahelper/src/enumctor.rs | 146 | // Step 2: see if this is a valid variant, and whether we can | COMMENT |
| LOW | deps/cairo/cairo/src/cairo-scaled-font.c | 281 | * The purpose of this function is to allow the user to set a | COMMENT |
| LOW | deps/cairo/cairo/src/cairo-region.c | 136 | * The purpose of this function is to allow the user to set a | COMMENT |
| LOW | deps/cairo/cairo/src/cairo-error.c | 58 | * The purpose of this function is to allow the user to set a | COMMENT |
| LOW | deps/cairo/cairo/src/cairo-surface.c | 179 | * The purpose of this function is to allow the user to set a | COMMENT |
| LOW | deps/cairo/cairo/src/cairo-pattern.c | 179 | * The purpose of this function is to allow the user to set a | COMMENT |
| LOW | deps/cairo/cairo/src/cairo.c | 392 | * The purpose of this function is to allow the user to set a | COMMENT |
| LOW | deps/cairo/cairo/src/cairo-ps-surface.c | 2411 | /* PS Output - this section handles output of the parts of the recording | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ci/make-winget-pr.sh | 19 | # Create the directory structure | COMMENT |
| MEDIUM | assets/shell-integration/wezterm.sh | 177 | # This function is installed as part of the PROMPT_COMMAND; | COMMENT |
| MEDIUM | assets/shell-integration/wezterm.sh | 185 | # This function is installed as part of the PROMPT_COMMAND. | COMMENT |
| MEDIUM | assets/shell-integration/wezterm.sh | 245 | # This function is installed as the DEBUG trap. It is invoked before each | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ci/generate-docs.py | 71 | except FileNotFoundError: | CODE |
| HIGH | ci/generate-workflows.py | 1113 | except ImportError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mux/src/lib.rs | 240 | // Don't forget to send anything that we might have buffered | COMMENT |
| LOW | mux/src/lib.rs | 242 | // for very short lived commands so that we don't forget to | COMMENT |
| LOW | wezterm-surface/src/cellcluster.rs | 151 | // Don't forget to include any pending cluster on the final step! | COMMENT |
| MEDIUM | vtparse/src/lib.rs | 1073 | // It's worth noting that we see this as final byte `t` here, which | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/update-doc-versions.py | 3 | CODE | |
| LOW | ci/update-doc-versions.py | 5 | CODE | |
| LOW | ci/generate-docs.py | 7 | CODE | |
| LOW | ci/generate-docs.py | 8 | CODE | |
| LOW | ci/generate-workflows.py | 3 | CODE | |
| LOW | ci/subst-release-info.py | 3 | CODE | |
| LOW | assets/wezterm-nautilus.py | 19 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/generate-docs.py | 17 | CODE | |
| LOW | ci/generate-docs.py | 45 | CODE | |
| LOW | ci/generate-docs.py | 203 | CODE | |
| LOW | ci/generate-workflows.py | 245 | CODE | |
| LOW | ci/generate-workflows.py | 308 | CODE | |
| LOW | ci/generate-workflows.py | 438 | CODE | |
| LOW | ci/generate-workflows.py | 570 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | config/src/wsl.rs | 91 | /// It tries to be robust in the face of future changes | COMMENT |
| MEDIUM | wezterm-gui/src/termwindow/render/screen_line.rs | 645 | // Essentially invisible: don't render it, as anti-aliasing | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | luahelper/src/enumctor.rs | 134 | // Step 1: see if this is a unit variant. | COMMENT |
| LOW | luahelper/src/enumctor.rs | 146 | // Step 2: see if this is a valid variant, and whether we can | COMMENT |
| LOW | assets/shell-integration/wezterm.sh | 98 | # WARNING: This variable is no longer used and should not be relied upon. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | assets/wezterm-nautilus.py | 28 | # Check if the this system runs under systemd, per sd_booted(3) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/javascript/fix-codeblock-console-copy-button.js | 5 | function fixCopyOnlyUserSelectable() { | CODE |