open-design-git
The npx command is used to run a specific, version-pinned version of pnpm (10.33.2) to install dependencies and build an AppImage from the project's own source; this is a standard build practice and does not execute arbitrary remote code.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The npx command is used to run a specific, version-pinned version of pnpm (10.33.2) to install dependencies and build an AppImage from the project's own source; this is a standard build practice and does not execute arbitrary remote code.
1 higher static finding superseded - not the current verdict (shown for transparency)
remote_code_tool
`npx`/`bunx`/`pnpm dlx`/`deno run <url>` downloads AND runs a remote package at build time — the moral equivalent of piping a download into a shell. Severity downgraded: Node.js consumer context.
-
PKGBUILD:37
_pnpm() { npx --yes pnpm@10.33.2 "$@"; }
PKGBUILD
1 offending line(s) highlighted# Maintainer: motherofmilk <iulian.dita@gmail.com>
pkgname=open-design-git
pkgver=0.5.0.r356.g2bb029cb
pkgrel=1
pkgdesc='VCS build of Open Design installed from an extracted Linux AppImage AppDir'
arch=('x86_64')
url='https://github.com/nexu-io/open-design'
license=('Apache-2.0')
depends=('alsa-lib' 'gtk3' 'libnotify' 'libxss' 'libxtst' 'nss' 'xdg-utils')
makedepends=('git' 'npm' 'python' 'make' 'gcc')
provides=('open-design')
conflicts=('open-design' 'open-design-bin')
options=('!strip')
source=("${pkgname}::git+https://github.com/nexu-io/open-design.git#branch=main" 'open-design' 'open-design.desktop')
sha256sums=('SKIP'
'8c076f4471bc20f457effb61c847ae1e80eb7861638a5b78f65613179ff39311'
'0245ea0484c1bb89b74093abc3c77ce421e793dd06c5a8e36c203971bfd7f919')
prepare() {
cd "${srcdir}/${pkgname}"
git clean -fdx
}
pkgver() {
cd "${srcdir}/${pkgname}"
local _version _rev _commit
_version="$(sed -n 's/^ "version": "\([^"]*\)",$/\1/p' package.json | head -n1)"
_rev="$(git rev-list --count HEAD)"
_commit="$(git rev-parse --short HEAD)"
printf '%s.r%s.g%s' "${_version}" "${_rev}" "${_commit}"
}
build() {
cd "${srcdir}/${pkgname}"
_pnpm() { npx --yes pnpm@10.33.2 "$@"; }
_pnpm install --frozen-lockfile
# Build upstream's Linux AppImage locally; the released Linux artifact is not published yet.
_pnpm tools-pack linux build --to appimage --namespace aur --portable --dir "${srcdir}/tools-pack"
}
package() {
cd "${srcdir}/${pkgname}"
local _appimage _extract_dir
_appimage="$(find "${srcdir}/tools-pack/out/linux/namespaces/aur/builder" -maxdepth 1 -type f -name '*.AppImage' -print -quit)"
if [[ -z "${_appimage}" ]]; then
echo "no AppImage found under ${srcdir}/tools-pack/out/linux/namespaces/aur/builder" >&2
return 1
fi
_extract_dir="${srcdir}/open-design-appdir"
rm -rf "${_extract_dir}"
mkdir -p "${_extract_dir}"
(cd "${_extract_dir}" && "${_appimage}" --appimage-extract > /dev/null)
mkdir -p "${pkgdir}/opt/open-design/appdir"
cp -a "${_extract_dir}/squashfs-root/." "${pkgdir}/opt/open-design/appdir/"
chmod -R u+rwX,go+rX "${pkgdir}/opt/open-design/appdir"
install -Dm755 "${srcdir}/open-design" "${pkgdir}/usr/bin/open-design"
install -Dm644 "${srcdir}/open-design.desktop" "${pkgdir}/usr/share/applications/open-design.desktop"
install -Dm644 tools/pack/resources/linux/icon.png "${pkgdir}/usr/share/icons/hicolor/512x512/apps/open-design.png"
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Low | 2 |
| 2026-10-31 00:07:41 | Low | 2 |
| 2026-10-30 00:29:30 | Low | 2 |
| 2026-10-29 00:13:55 | Low | 2 |
| 2026-10-28 00:06:54 | Low | 2 |
| 2026-10-27 00:23:28 | Low | 2 |
| 2026-10-26 00:12:40 | Low | 2 |
| 2026-10-25 00:20:48 | Low | 2 |
| 2026-10-24 00:14:55 | Low | 2 |
| 2026-10-23 00:02:19 | Low | 2 |
| 2026-10-22 00:13:10 | Low | 2 |
| 2026-10-21 00:12:50 | Low | 2 |
| 2026-10-20 00:10:31 | Low | 2 |
| 2026-10-19 00:03:55 | Low | 2 |
| 2026-10-18 00:06:55 | Low | 2 |
| 2026-10-17 00:21:55 | Low | 2 |
| 2026-10-16 00:12:47 | Low | 2 |
| 2026-10-15 00:28:05 | Low | 2 |
| 2026-10-14 00:06:47 | Low | 2 |
| 2026-10-13 00:23:45 | Low | 2 |