A package build system for Termux.
This report summarizes scanner evidence for termux/termux-packages, a Shell project with 17,276 GitHub stars. SynthScan examined 241,378 lines of code across 4461 source files, recording 359 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 1.5 (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? 347 finding(s).
Are imports declared and package/API names verified? 6 finding(s).
Are wrappers, guards, and repeated structures necessary? 25 finding(s).
Which changes need focused human review? 359 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 359 distinct pattern matches across 11 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 | build-package.sh | 281 | # Optional host build. Not to be overridden by packages. | COMMENT |
| LOW | disabled-packages/termux-x11/termux-x11.c | 1 | #include <unistd.h> | COMMENT |
| LOW | disabled-packages/qt5-qtquickcontrols/build.sh | 21 | ## | COMMENT |
| LOW | ndk-patches/langinfo.h | 41 | #define _NL_ITEM_INDEX(nl) ((nl) & 0x3ff) | COMMENT |
| LOW | ndk-patches/langinfo.h | 61 | #define ABDAY_5 19 | COMMENT |
| LOW | ndk-patches/langinfo.h | 81 | #define ABMON_6 39 | COMMENT |
| LOW | scripts/generate-apt-packages-list.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/check-repository-health.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/setup-termux.sh | 81 | COMMENT | |
| LOW | scripts/properties.sh | 1 | # shellcheck shell=bash | COMMENT |
| LOW | scripts/properties.sh | 21 | # Additionally, the Termux packages build system is an unsafe mess of | COMMENT |
| LOW | scripts/properties.sh | 41 | # - `invalid_termux_prefix_paths`: Path variable must not match | COMMENT |
| LOW | scripts/properties.sh | 61 | ## | COMMENT |
| LOW | scripts/properties.sh | 121 | ## | COMMENT |
| LOW | scripts/properties.sh | 141 | # separators `/` are not allowed. The path component characters must | COMMENT |
| LOW | scripts/properties.sh | 161 | # with a `/`). Duplicate or trailing path separators `/` are not | COMMENT |
| LOW | scripts/properties.sh | 181 | # specific Filesystem Hierarchy Standard paths or paths used by Termux | COMMENT |
| LOW | scripts/properties.sh | 201 | # Same reasoning as `TERMUX_REGEX__INVALID_TERMUX_ROOTFS_PATHS`, | COMMENT |
| LOW | scripts/properties.sh | 221 | ## | COMMENT |
| LOW | scripts/properties.sh | 241 | # - https://cs.android.com/android/platform/superproject/+/android-14.0.0_r1:frameworks/base/core/java/android/content/p | COMMENT |
| LOW | scripts/properties.sh | 341 | # Following is a list of `TERMUX_` variables that are safe to modify when forking. | COMMENT |
| LOW | scripts/properties.sh | 361 | # - `TERMUX_API_APP__PACKAGE_NAME`. | COMMENT |
| LOW | scripts/properties.sh | 381 | TERMUX__LNAME="${TERMUX__NAME,,}" | COMMENT |
| LOW | scripts/properties.sh | 401 | # `TERMUX__NAME`, `TERMUX_APP__PACKAGE_NAME` and urls.** | COMMENT |
| LOW | scripts/properties.sh | 421 | COMMENT | |
| LOW | scripts/properties.sh | 441 | ## | COMMENT |
| LOW | scripts/properties.sh | 461 | # - `TERMUX_APP__NAMESPACE`. | COMMENT |
| LOW | scripts/properties.sh | 481 | # The directory set will be deleted by `clean.sh` if `TERMUX__PREFIX` | COMMENT |
| LOW | scripts/properties.sh | 501 | COMMENT | |
| LOW | scripts/properties.sh | 521 | # | COMMENT |
| LOW | scripts/properties.sh | 541 | COMMENT | |
| LOW | scripts/properties.sh | 561 | __termux_build_props__add_variables_validator_actions "TERMUX__CORE_DIR" "safe_absolute_path" | COMMENT |
| LOW | scripts/properties.sh | 581 | # - https://man7.org/linux/man-pages/man7/unix.7.html | COMMENT |
| LOW | scripts/properties.sh | 601 | ## | COMMENT |
| LOW | scripts/properties.sh | 621 | ## | COMMENT |
| LOW | scripts/properties.sh | 641 | ## | COMMENT |
| LOW | scripts/properties.sh | 661 | # Termux subdirectory path for `TERMUX__APPS_DIR_BY_UID`. | COMMENT |
| LOW | scripts/properties.sh | 681 | # numbers and must not start with a `0`. | COMMENT |
| LOW | scripts/properties.sh | 701 | COMMENT | |
| LOW | scripts/properties.sh | 721 | ## | COMMENT |
| LOW | scripts/properties.sh | 741 | ## | COMMENT |
| LOW | scripts/properties.sh | 761 | ########### | COMMENT |
| LOW | scripts/properties.sh | 781 | # the `TERMUX_APP__DATA_DIR` if compiling packages for the Android | COMMENT |
| LOW | scripts/properties.sh | 801 | # | COMMENT |
| LOW | scripts/properties.sh | 821 | COMMENT | |
| LOW | scripts/properties.sh | 841 | TERMUX_ANDROID_HOME="$TERMUX__HOME" # Deprecated alternative variable for `TERMUX__HOME` | COMMENT |
| LOW | scripts/properties.sh | 861 | # Default value: `usr` | COMMENT |
| LOW | scripts/properties.sh | 881 | # are installed under the `usr` subdirectory under rootfs, like under | COMMENT |
| LOW | scripts/properties.sh | 901 | # `TERMUX__PREFIX`, or a custom directory other than `usr`. In this | COMMENT |
| LOW | scripts/properties.sh | 921 | # - `TERMUX__PREFIX` must not be equal to `TERMUX__HOME` and | COMMENT |
| LOW | scripts/properties.sh | 961 | ## | COMMENT |
| LOW | scripts/properties.sh | 981 | # Termux `glibc` prefix directory path under `TERMUX__PREFIX` | COMMENT |
| LOW | scripts/properties.sh | 1001 | # | COMMENT |
| LOW | scripts/properties.sh | 1021 | # commands will fail with exit code 1 without any error on `stderr`, | COMMENT |
| LOW | scripts/properties.sh | 1081 | ## | COMMENT |
| LOW | scripts/properties.sh | 1101 | # | COMMENT |
| LOW | scripts/properties.sh | 1121 | COMMENT | |
| LOW | scripts/properties.sh | 1141 | ## | COMMENT |
| LOW | scripts/properties.sh | 1161 | ## | COMMENT |
| LOW | scripts/properties.sh | 1181 | TERMUX__PREFIX__MULTI_LIB_SUBDIR="lib32" | COMMENT |
| 228 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | build-all.sh | 23 | # Set TERMUX_INSTALL_DEPS to -s unless set to -i | COMMENT |
| LOW | build-package.sh | 456 | # Check if the package is in the compiled list | COMMENT |
| LOW | build-package.sh | 472 | # Check if the package is in the compiling list | COMMENT |
| LOW | scripts/run-docker.sh | 213 | # Set traps to ensure that the process started with docker exec and all its children are killed. | COMMENT |
| LOW | scripts/utils/termux_reuse_pr_build_artifacts.sh | 70 | # Print output only in the case of error | COMMENT |
| LOW | scripts/utils/termux_reuse_pr_build_artifacts.sh | 85 | # Check if we can perform CI fast path. | COMMENT |
| LOW | scripts/utils/termux/package/termux_package.sh | 9 | # Check if package on device builds are supported by checking | COMMENT |
| LOW | scripts/utils/termux/package/termux_package.sh | 34 | # Check if a specific version of a package has been built by checking | COMMENT |
| LOW | scripts/utils/termux/package/termux_package.sh | 59 | # Check if the package name has a prefix called `glibc` or `glibc32`. | COMMENT |
| LOW | scripts/updates/internal/termux_github_graphql.sh | 108 | | "GIT|\($pkgName)|\($tag)" # Print results | CODE |
| LOW | scripts/updates/utils/termux_pkg_upgrade_version.sh | 42 | # Check if it isn't the full version and add ':'. | COMMENT |
| LOW | packages/libheif/build.sh | 33 | # Check if SONAME is properly set: | COMMENT |
| LOW | packages/liblzma/build.sh | 29 | # Check if SONAME is properly set: | COMMENT |
| LOW | packages/libplacebo/build.sh | 44 | # Check if SONAME is properly set: | COMMENT |
| LOW | packages/libxml2/build.sh | 63 | # Check if SONAME is properly set: | COMMENT |
| LOW | packages/libjpeg-turbo/build.sh | 21 | # Check if SONAME is properly set: | COMMENT |
| LOW | packages/libexpat/build.sh | 36 | # Check if SONAME is properly set: | COMMENT |
| LOW | packages/zstd/build.sh | 46 | # Check if SONAME is properly set: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | build-package.sh | 420 | # Create the build deb file. Not to be overridden by package scripts. | COMMENT |
| MEDIUM | build-package.sh | 424 | # Create the build .pkg.tar.xz file. Not to be overridden by package scripts. | COMMENT |
| MEDIUM | disabled-packages/unnethack/build.sh | 22 | # Create a host build for the makedefs binary | COMMENT |
| MEDIUM | scripts/setup-cgct.sh | 28 | # Creating a directory for CGCT in tmp | COMMENT |
| MEDIUM | packages/prowlarr/build.sh | 36 | # Create a host wrapper for yarn since the one in $TERMUX_PREFIX/bin | COMMENT |
| MEDIUM | packages/radarr/build.sh | 28 | # Create a host wrapper for yarn since the one in $TERMUX_PREFIX/bin | COMMENT |
| MEDIUM | packages/zsh/build.sh | 128 | # Create a symlink for zsh-$version instead of the hardlink: | COMMENT |
| MEDIUM | packages/sonarr/build.sh | 28 | # Create a host wrapper for yarn since the one in $TERMUX_PREFIX/bin | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/buildorder.py | 40 | def parse_build_file_dependencies_with_vars(path, vars): | CODE |
| LOW⚡ | scripts/buildorder.py | 56 | def parse_build_file_dependencies(path): | CODE |
| LOW⚡ | scripts/buildorder.py | 60 | def parse_build_file_antidependencies(path): | CODE |
| LOW⚡ | scripts/buildorder.py | 64 | def parse_build_file_excluded_arches(path): | CODE |
| LOW | scripts/buildorder.py | 77 | def parse_build_file_variable(path, var): | CODE |
| LOW | scripts/buildorder.py | 88 | def parse_build_file_variable_bool(path, var): | CODE |
| LOW | scripts/buildorder.py | 91 | def add_prefix_glibc_to_pkgname(name): | CODE |
| LOW | scripts/buildorder.py | 215 | def resolve_package_dependencies(all_packages, pkgs_map): | CODE |
| LOW | scripts/buildorder.py | 231 | def read_packages_from_directories(directories, fast_build_mode, full_buildmode): | CODE |
| LOW | scripts/buildorder.py | 352 | def generate_target_buildorder(target_path, pkgs_map, fast_build_mode): | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 74 | def find_leading_assignment_end(lines: list[str]) -> int: | STRING |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 103 | def has_blacklisted_top_level_assignment(lines: list[str]) -> bool: | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 115 | def starts_with_leading_assignment(lines: list[str]) -> bool: | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 132 | def first_top_level_target_index(lines: list[str]) -> int | None: | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 172 | def first_scope_target_index_with_scopes( | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 185 | def find_scope_jumbo_import_index_with_scopes( | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 210 | def scope_import_indent_with_scopes( | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 222 | def find_scope_jumbo_import_index(lines: list[str], scope_depth: int) -> int | None: | CODE |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 350 | def module_path_from_build_file(path: Path, root: Path) -> str: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/foundry/build.sh | 58 | # ── 1. Boost components ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/foundry/build.sh | 76 | # ── 2. libsolutil link line ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/foundry/build.sh | 82 | # ── 3. boost::process ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/foundry/build.sh | 100 | # ── 4. Configure ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/foundry/build.sh | 173 | # ── 5. Build ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/foundry/build.sh | 178 | # ── 6. Install ───────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/timidity++/timidity.cfg | 46 | # alternatively, you can use the fluid-soundfont: | COMMENT |
| MEDIUM | .github/workflows/codeql.yml | 47 | # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how | COMMENT |
| MEDIUM | x11-packages/openbox/configs/rc.xml | 706 | # used by a shell. you can use * to match any characters and ? to match | COMMENT |
| MEDIUM | x11-packages/openbox/configs/rc.xml | 746 | # you can use fractions such as 1/2 or percentages such as 75% in which | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/buildorder.py | 64 | CODE | |
| LOW | scripts/buildorder.py | 215 | CODE | |
| LOW | scripts/buildorder.py | 231 | CODE | |
| LOW | scripts/get_hash_from_file.py | 5 | CODE | |
| LOW | x11-packages/movit/make_bundled_shaders.py | 16 | CODE | |
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 154 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | x11-packages/libadwaita/gir/Adw-1.xml | 882 | <property name="placeholder" type="GtkWidget" flags="1073742051"/> | CODE |
| LOW | x11-packages/libadwaita/gir/Adw-1.xml | 1219 | <property name="placeholder" type="GtkWidget" flags="1073742051"/> | CODE |
| LOW | x11-packages/gtk3/gir/Gtk-3.0.xml | 3097 | <member name="GTK_UI_MANAGER_PLACEHOLDER" nick="placeholder" value="8"/> | CODE |
| LOW | x11-packages/gtk4/gir/Gtk-4.0.xml | 1213 | <member name="GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER" nick="placeholder" value="10"/> | CODE |
| LOW | x11-packages/gtk2/gir/2.24.33/Gtk-2.0.xml | 713 | <member name="GTK_UI_MANAGER_PLACEHOLDER" nick="placeholder" value="8"/> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/delve/build.sh | 1 | TERMUX_PKG_HOMEPAGE=https://github.com/go-delve/delve | CODE |
| MEDIUM | packages/delve/build.sh | 8 | TERMUX_PKG_SRCURL=https://github.com/go-delve/delve/archive/refs/tags/v${TERMUX_PKG_VERSION}.tar.gz | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | disabled-packages/qt5-qmake/termux-build-qmake.sh | 6 | ## Usage: | COMMENT |
| LOW | scripts/generate-apt-packages-list.sh | 10 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ckages/chromium-host-tools/scripts/rewrite_gn_jumbo.py | 15 | CODE |