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
3
pkgname=pencil-dev-appimage
4
pkgver=1.2.0
5
pkgrel=1
6
pkgdesc="Design on canvas. Land in code. Increases engineering speed by bringing designing directly into your IDE. (AppImage)"
7
arch=('x86_64')
8
url="https://pencil.dev"
9
license=('custom')
10
provides=('pencil-dev')
11
conflicts=('pencil-dev' 'pencil-dev-bin')
12
depends=('fuse2' 'zlib' 'hicolor-icon-theme')
13
install="${pkgname}.install"
14
options=('!strip' '!debug')
15
source=("Pencil-linux-x86_64-${pkgver}.AppImage::https://www.pencil.dev/download/Pencil-linux-x86_64.AppImage"
16
"LICENSE"
17
"${pkgname}.install")
18
sha256sums=('f1220a87d52da551fa729e2c53014388a3774ed4634428559aa0eb10dcc30510'
19
'SKIP'
20
'SKIP')
21
noextract=("Pencil-linux-x86_64-${pkgver}.AppImage")
22
23
prepare() {
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
28
package() {
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
37
exec /opt/pencil-dev-appimage/pencil-dev.AppImage --no-sandbox "$@"
38
LAUNCHER
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]
55
Name=Pencil
56
Comment=Design on canvas. Land in code.
57
Exec=pencil-dev %U
58
Icon=pencil-dev
59
Type=Application
60
Categories=Development;Graphics;
61
MimeType=x-scheme-handler/pencil;
62
EOF
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) | Severity | Rules |
|---|---|---|
| 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 |