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-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |
| 2026-08-29 00:29:17 | Low | 2 |