pencil-dev-appimage

maintainer Crosery · 1 votes · scanned 2026-08-03 00:08:14.047287
MEDIUM
View on AUR ↗
Why flagged The package downloads a prebuilt AppImage from a non-whitelisted host (pencil.dev), which is an unverifiable executable; if the domain were compromised, an attacker could silently replace the binary, posing a supply-chain risk.

Triggered rules

MEDIUM source=() URL on a non-standard host source_untrusted_domain

One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).

  • PKGBUILD:15 source=("Pencil-linux-x86_64-${pkgver}.AppImage::https://www.pencil.dev/download/Pencil-linux-x86_64.AppImage"
MEDIUM AI review llm_review

An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is MEDIUM (confidence 90%): The package downloads a prebuilt AppImage from a non-whitelisted host (pencil.dev), which is an unverifiable executable; if the domain were compromised, an attacker could silently replace the binary, posing a supply-chain risk.

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: Crosery <luoxi2024@gmail.com>
2
3pkgname=pencil-dev-appimage
4pkgver=1.2.0
5pkgrel=1
6pkgdesc="Design on canvas. Land in code. Increases engineering speed by bringing designing directly into your IDE. (AppImage)"
7arch=('x86_64')
8url="https://pencil.dev"
9license=('custom')
10provides=('pencil-dev')
11conflicts=('pencil-dev' 'pencil-dev-bin')
12depends=('fuse2' 'zlib' 'hicolor-icon-theme')
13install="${pkgname}.install"
14options=('!strip' '!debug')
15source=("Pencil-linux-x86_64-${pkgver}.AppImage::https://www.pencil.dev/download/Pencil-linux-x86_64.AppImage"
16 "LICENSE"
17 "${pkgname}.install")
18sha256sums=('f1220a87d52da551fa729e2c53014388a3774ed4634428559aa0eb10dcc30510'
19 'SKIP'
20 'SKIP')
21noextract=("Pencil-linux-x86_64-${pkgver}.AppImage")
22
23prepare() {
24 chmod +x "${srcdir}/Pencil-linux-x86_64-${pkgver}.AppImage"
25 "${srcdir}/Pencil-linux-x86_64-${pkgver}.AppImage" --appimage-extract >/dev/null 2>&1
26}
27
28package() {
29 # Install AppImage
30 install -Dm755 "${srcdir}/Pencil-linux-x86_64-${pkgver}.AppImage" \
31 "${pkgdir}/opt/${pkgname}/pencil-dev.AppImage"
32
33 # Create launcher script
34 install -d "${pkgdir}/usr/bin"
35 cat > "${pkgdir}/usr/bin/pencil-dev" << 'LAUNCHER'
36#!/bin/bash
37exec /opt/pencil-dev-appimage/pencil-dev.AppImage --no-sandbox "$@"
38LAUNCHER
39 chmod 755 "${pkgdir}/usr/bin/pencil-dev"
40
41 # Install desktop entry from extracted AppImage
42 if [ -f "${srcdir}/squashfs-root/pencil.desktop" ]; then
43 install -Dm644 "${srcdir}/squashfs-root/pencil.desktop" \
44 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
45 # Fix desktop entry
46 sed -i 's|^Exec=.*|Exec=pencil-dev %U|' \
47 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
48 sed -i 's|^Name=.*|Name=Pencil|' \
49 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
50 else
51 # Fallback desktop entry
52 install -d "${pkgdir}/usr/share/applications"
53 cat > "${pkgdir}/usr/share/applications/pencil-dev.desktop" << EOF
54[Desktop Entry]
55Name=Pencil
56Comment=Design on canvas. Land in code.
57Exec=pencil-dev %U
58Icon=pencil-dev
59Type=Application
60Categories=Development;Graphics;
61MimeType=x-scheme-handler/pencil;
62EOF
63 chmod 644 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
64 fi
65
66 # Install icons from extracted AppImage
67 for size in 16 32 48 64 128 256 512; do
68 icon="${srcdir}/squashfs-root/usr/share/icons/hicolor/${size}x${size}/apps/pencil.png"
69 if [ -f "${icon}" ]; then
70 install -Dm644 "${icon}" \
71 "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/pencil-dev.png"
72 fi
73 done
74
75 # Fallback: use any .png found in squashfs-root
76 if [ ! -f "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pencil-dev.png" ]; then
77 for icon in "${srcdir}"/squashfs-root/*.png; do
78 if [ -f "${icon}" ]; then
79 install -Dm644 "${icon}" \
80 "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pencil-dev.png"
81 break
82 fi
83 done
84 fi
85
86 # Install MCP server to a stable path (AppImage mount point changes on each launch)
87 if [ -f "${srcdir}/squashfs-root/resources/app.asar.unpacked/out/mcp-server-linux-x64" ]; then
88 install -Dm755 "${srcdir}/squashfs-root/resources/app.asar.unpacked/out/mcp-server-linux-x64" \
89 "${pkgdir}/opt/${pkgname}/mcp-server"
90 fi
91
92 # Install license
93 if [ -f "${srcdir}/LICENSE" ]; then
94 install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
95 fi
96}
97
98

Changes since previous scan

--- PKGBUILD @ 2026-07-21 00:24
+++ PKGBUILD @ 2026-08-03 00:08
@@ -1,7 +1,7 @@
# Maintainer: Crosery <luoxi2024@gmail.com>
pkgname=pencil-dev-appimage
-pkgver=1.1.70
+pkgver=1.2.0
pkgrel=1
pkgdesc="Design on canvas. Land in code. Increases engineering speed by bringing designing directly into your IDE. (AppImage)"
arch=('x86_64')
@@ -15,7 +15,7 @@
source=("Pencil-linux-x86_64-${pkgver}.AppImage::https://www.pencil.dev/download/Pencil-linux-x86_64.AppImage"
"LICENSE"
"${pkgname}.install")
-sha256sums=('1b32cb8f28256dfe47e45f889e0c6a76ad3a7c3dc91423cb8eb797dc927d005b'
+sha256sums=('f1220a87d52da551fa729e2c53014388a3774ed4634428559aa0eb10dcc30510'
'SKIP'
'SKIP')
noextract=("Pencil-linux-x86_64-${pkgver}.AppImage")

Scan history

Scanned at (UTC)SeverityRules
2026-08-03 00:08:14 MEDIUM 2
2026-08-02 00:16:08 MEDIUM 2
2026-08-01 00:11:18 MEDIUM 2
2026-07-31 00:14:10 MEDIUM 2
2026-07-30 00:17:23 MEDIUM 2
2026-07-29 00:25:53 MEDIUM 2
2026-07-28 00:07:28 MEDIUM 2
2026-07-27 00:24:32 MEDIUM 2
2026-07-26 00:07:32 MEDIUM 2
2026-07-25 00:13:44 MEDIUM 2
2026-07-24 00:02:28 MEDIUM 2
2026-07-23 00:14:47 MEDIUM 2
2026-07-22 00:29:32 MEDIUM 2
2026-07-21 07:16:26 MEDIUM 2
2026-07-21 00:24:15 LOW 2
2026-07-20 00:19:49 LOW 2
2026-07-19 00:17:08 LOW 2
2026-07-18 00:14:48 LOW 2
2026-07-17 00:06:16 LOW 2
2026-07-16 00:05:41 LOW 2

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion