ipfs-desktop
maintainer RubenKelevra
· 21 votes
· scanned 2026-08-18 00:03:42.021799
LOW
View on AUR ↗
Why flagged
The package downloads a WebUI asset from a trustless gateway, but this is a static data file (CAR format) used by IPFS, not executable code, and the checksum is verified, making the risk low despite the non-standard host.
Triggered rules
LOW
AI review downgraded a static finding
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 90%): The package downloads a WebUI asset from a trustless gateway, but this is a static data file (CAR format) used by IPFS, not executable code, and the checksum is verified, making the risk low despite the non-standard host.
1 higher static finding superseded - not the current verdict (shown for transparency)
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:25
"webui-${_webui_cid}.car::https://trustless-gateway.link/ipfs/${_webui_cid}?format=car"
PKGBUILD
1 offending line(s) highlighted
1
# Maintainer: @RubenKelevra <rubenkelevra@gmail.com>
2
# Contributor: Alex Henrie <alexhenrie24@gmail.com>
3
4
_electron_pkg='electron43'
5
_webui_cid='bafybeiciqeyipumpmhxzlxnbqdbbv6u5uij4hy4wax64dmj7kvrhusiq6y'
6
7
pkgname='ipfs-desktop'
8
pkgver='0.50.0'
9
pkgrel=1
10
epoch=1
11
pkgdesc='Desktop client for the InterPlanetary File System'
12
arch=('x86_64')
13
url="https://github.com/ipfs/${pkgname}"
14
license=('MIT')
15
depends=(
16
"${_electron_pkg}"
17
'kubo>=0.43.0'
18
)
19
makedepends=(
20
'nodejs'
21
'npm'
22
)
23
source=(
24
"${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz"
25
"webui-${_webui_cid}.car::https://trustless-gateway.link/ipfs/${_webui_cid}?format=car"
26
"${pkgname}.desktop"
27
"${pkgname}-startup.sh"
28
"${pkgname}-system-kubo-autostart.patch"
29
)
30
b2sums=(
31
'c5691c946de525abb185fa44ea66ff9c5fa15b936d3dd6e7d0c3a6da8b158e4b8c883b1d948c33e7333bf5e7def1fc6677c4c721a67956db56e817260db36cff'
32
'49e1e7d4d55325d4ea05561a4ff4c64537988e5e841231a95d59328fc9f9b60f3098185bf757b70c42d2175f8a2b6394a0f2a9377df7d1603d69edbd4c3655ec'
33
'849d57fd59653ed0c6eca01769ad12a01f37f6a5316f1a83c0bf7cae576074b978e3ca555d50a56114d177e5fe4817338106698716f054a3e18ae1c81d7a8785'
34
'353367dc9c554b8decbee724713faf627e4764f77c1522d3939069e5db4e6caffc847e20e75afccdee0e1d0e025c4bb6c16a80e9655bf8d76412dc37ef8eff64'
35
'5e6b97ee8aec2cbf4e125ae2ced3f23dd77c45b7291ea63f8ed7f5cee1eb7caaab27dad979f61deefe204539389b0c18d418fc6724cec58eddcea944a46d936e'
36
)
37
38
_pkgsrc="${pkgname}-${pkgver}"
39
40
_electron_env() {
41
local _version_file="/usr/lib/${_electron_pkg}/version"
42
43
[[ -r "${_version_file}" ]] || {
44
printf 'Missing Electron version file: %s\n' "${_version_file}" >&2
45
return 1
46
}
47
48
SYSTEM_ELECTRON_VERSION=$(<"${_version_file}")
49
[[ -n "${SYSTEM_ELECTRON_VERSION}" ]] || {
50
printf 'Electron version file is empty: %s\n' "${_version_file}" >&2
51
return 1
52
}
53
54
export SYSTEM_ELECTRON_VERSION
55
}
56
57
_warn_if_electron_outdated() {
58
local _installed _latest_local _vf _v
59
60
[[ -r "/usr/lib/${_electron_pkg}/version" ]] || return 0
61
_installed=$(< "/usr/lib/${_electron_pkg}/version")
62
_latest_local=$_installed
63
64
shopt -s nullglob
65
for _vf in /usr/lib/electron*/version; do
66
_v=$(< "$_vf")
67
if [[ "$(printf '%s\n%s\n' "$_latest_local" "$_v" | sort -V | tail -n1)" != "$_latest_local" ]]; then
68
_latest_local=$_v
69
fi
70
done
71
shopt -u nullglob
72
73
if [[ $_installed != "$_latest_local" ]]; then
74
echo "==> WARNING: Packaging uses not the latest major version of electron installed. ${_electron_pkg} ${_installed} is used, but a newer local Electron version (${_latest_local}) is available on the system." >&2
75
fi
76
}
77
78
prepare() (
79
local _car_path
80
local _expected_webui_cid
81
local _ipfs_path
82
local _kubo_version
83
local _webui_path="${srcdir}/webui-${_webui_cid}"
84
85
cd -- "${_pkgsrc}" || return 1
86
patch -Np1 -i "${srcdir}/${pkgname}-system-kubo-autostart.patch"
87
88
_expected_webui_cid=$(
89
sed -nE \
90
'/"build:webui:download"/s/.*[[:space:]]-c[[:space:]]+([^[:space:]\"]+).*/\1/p' \
91
package.json
92
)
93
[[ -n "${_expected_webui_cid}" ]] || {
94
printf '%s\n' 'Unable to determine the WebUI CID expected by upstream' >&2
95
return 1
96
}
97
[[ "${_webui_cid}" == "${_expected_webui_cid}" ]] || {
98
printf 'WebUI CID mismatch: PKGBUILD has %s, upstream expects %s\n' \
99
"${_webui_cid}" "${_expected_webui_cid}" >&2
100
printf 'Update _webui_cid and its source checksum before building.\n' >&2
101
return 1
102
}
103
104
_ipfs_path=$(mktemp -d --tmpdir "${pkgname}-kubo.XXXXXXXX") || return 1
105
trap 'rm -rf -- "${_ipfs_path}"' EXIT
106
107
_car_path=$(readlink -f -- "${srcdir}/webui-${_webui_cid}.car")
108
[[ -f "${_car_path}" ]] || {
109
printf 'WebUI CAR is missing: %s\n' "${_car_path}" >&2
110
return 1
111
}
112
113
IPFS_PATH="${_ipfs_path}" ipfs init --profile=server >/dev/null
114
IPFS_PATH="${_ipfs_path}" ipfs dag import "${_car_path}" >/dev/null
115
116
rm -rf -- "${_webui_path}"
117
IPFS_PATH="${_ipfs_path}" ipfs get "/ipfs/${_webui_cid}" -o "${_webui_path}"
118
[[ -f "${_webui_path}/index.html" ]] || {
119
printf 'Materialized WebUI is missing index.html: %s\n' "${_webui_path}" >&2
120
return 1
121
}
122
123
_kubo_version=$(sed -nE 's/^[[:space:]]*"kubo":[[:space:]]*"([^"]+)".*/\1/p' package.json)
124
[[ -n "${_kubo_version}" ]] || {
125
printf '%s\n' 'Unable to determine the bundled Kubo version' >&2
126
return 1
127
}
128
129
npm pkg set "allowScripts[kubo@${_kubo_version}]=false" --json
130
npm ci --no-audit --no-fund \
131
2> >(sed '/glob@11\.1\.0: Old versions of glob are not supported/d' >&2)
132
133
[[ ! -e node_modules/kubo/kubo/ipfs ]] || {
134
printf '%s\n' 'Unexpected bundled Kubo binary found after npm install' >&2
135
return 1
136
}
137
)
138
139
build() {
140
local -a _builder_options
141
142
_warn_if_electron_outdated
143
_electron_env
144
cd -- "${_pkgsrc}" || return 1
145
146
IPFS_WEBUI_PATH="${srcdir}/webui-${_webui_cid}" \
147
npm_config_offline=true npm run build
148
149
_builder_options=(
150
"-c.electronDist=/usr/lib/${_electron_pkg}"
151
"-c.electronVersion=${SYSTEM_ELECTRON_VERSION}"
152
)
153
npm_config_offline=true npm exec -- electron-builder --linux --dir --publish never \
154
"${_builder_options[@]}"
155
}
156
157
package() {
158
mkdir -p -- "${pkgdir}/usr/lib/${pkgname}"
159
cp -a -- "${_pkgsrc}/dist/linux-unpacked/resources/." "${pkgdir}/usr/lib/${pkgname}/"
160
161
install -Dm644 -- "${_pkgsrc}/assets/webui/ipfs-logo-512-ice.png" \
162
"${pkgdir}/usr/share/pixmaps/${pkgname}.png"
163
install -Dm644 -- "${_pkgsrc}/LICENSE" \
164
"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
165
166
sed "s|@ELECTRON_PKG@|${_electron_pkg}|" \
167
"${srcdir}/${pkgname}-startup.sh" \
168
| install -Dm755 /dev/stdin "${pkgdir}/usr/bin/${pkgname}"
169
install -Dm644 -- "${srcdir}/${pkgname}.desktop" \
170
"${pkgdir}/usr/share/applications/${pkgname}.desktop"
171
172
chmod -R u+rwX,go+rX,go-w -- "${pkgdir}"
173
}
174
Changes since previous scan
--- PKGBUILD @ 2026-07-30 15:15+++ PKGBUILD @ 2026-08-18 00:03@@ -1,38 +1,57 @@-# Maintainer: @RubenKelevra+# Maintainer: @RubenKelevra <rubenkelevra@gmail.com> # Contributor: Alex Henrie <alexhenrie24@gmail.com> -_electron_pkg=electron41+_electron_pkg='electron43'+_webui_cid='bafybeiciqeyipumpmhxzlxnbqdbbv6u5uij4hy4wax64dmj7kvrhusiq6y' -_archive_extension="tar.gz"--pkgname=ipfs-desktop-pkgver=0.49.1+pkgname='ipfs-desktop'+pkgver='0.50.0' pkgrel=1 epoch=1-pkgdesc="Desktop client for the InterPlanetary File System"-arch=(x86_64)-url="https://github.com/ipfs/$pkgname"-license=(MIT)+pkgdesc='Desktop client for the InterPlanetary File System'+arch=('x86_64')+url="https://github.com/ipfs/${pkgname}"+license=('MIT') depends=(- "$_electron_pkg"+ "${_electron_pkg}"+ 'kubo>=0.43.0' ) makedepends=(- nodejs- npm+ 'nodejs'+ 'npm'+)+source=(+ "${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz"+ "webui-${_webui_cid}.car::https://trustless-gateway.link/ipfs/${_webui_cid}?format=car"+ "${pkgname}.desktop"+ "${pkgname}-startup.sh"+ "${pkgname}-system-kubo-autostart.patch"+)+b2sums=(+ 'c5691c946de525abb185fa44ea66ff9c5fa15b936d3dd6e7d0c3a6da8b158e4b8c883b1d948c33e7333bf5e7def1fc6677c4c721a67956db56e817260db36cff'+ '49e1e7d4d55325d4ea05561a4ff4c64537988e5e841231a95d59328fc9f9b60f3098185bf757b70c42d2175f8a2b6394a0f2a9377df7d1603d69edbd4c3655ec'+ '849d57fd59653ed0c6eca01769ad12a01f37f6a5316f1a83c0bf7cae576074b978e3ca555d50a56114d177e5fe4817338106698716f054a3e18ae1c81d7a8785'+ '353367dc9c554b8decbee724713faf627e4764f77c1522d3939069e5db4e6caffc847e20e75afccdee0e1d0e025c4bb6c16a80e9655bf8d76412dc37ef8eff64'+ '5e6b97ee8aec2cbf4e125ae2ced3f23dd77c45b7291ea63f8ed7f5cee1eb7caaab27dad979f61deefe204539389b0c18d418fc6724cec58eddcea944a46d936e' ) -source=(- "$pkgname-$pkgver.$_archive_extension::$url/archive/refs/tags/v$pkgver.$_archive_extension"- "$pkgname.desktop"- "$pkgname-startup.sh"-)-b2sums=('643e89643b68508373938df8eb1d086311d9f1a3964ecbc1b422a87438fc9e8e45f0a0ffede4b97b16652b06130a731a8cc51a13ef9e06704a1e210ea1f29f0f'- '849d57fd59653ed0c6eca01769ad12a01f37f6a5316f1a83c0bf7cae576074b978e3ca555d50a56114d177e5fe4817338106698716f054a3e18ae1c81d7a8785'- '6f603c79a83057d4f4077a859656dbce513be3aa0ab9993dc5b994929e6e26f2f8f58ecd030ea415c44f2d0fbc7dd0cc16526172613555b0f619c530ee7d583d')-_pkgsrc="$pkgname-$pkgver"+_pkgsrc="${pkgname}-${pkgver}" _electron_env() {- export SYSTEM_ELECTRON_VERSION=$(< "/usr/lib/${_electron_pkg}/version")+ local _version_file="/usr/lib/${_electron_pkg}/version"++ [[ -r "${_version_file}" ]] || {+ printf 'Missing Electron version file: %s\n' "${_version_file}" >&2+ return 1+ }++ SYSTEM_ELECTRON_VERSION=$(<"${_version_file}")+ [[ -n "${SYSTEM_ELECTRON_VERSION}" ]] || {+ printf 'Electron version file is empty: %s\n' "${_version_file}" >&2+ return 1+ }++ export SYSTEM_ELECTRON_VERSION } _warn_if_electron_outdated() {@@ -56,46 +75,100 @@ fi } +prepare() (+ local _car_path+ local _expected_webui_cid+ local _ipfs_path+ local _kubo_version+ local _webui_path="${srcdir}/webui-${_webui_cid}"++ cd -- "${_pkgsrc}" || return 1+ patch -Np1 -i "${srcdir}/${pkgname}-system-kubo-autostart.patch"++ _expected_webui_cid=$(+ sed -nE \+ '/"build:webui:download"/s/.*[[:space:]]-c[[:space:]]+([^[:space:]\"]+).*/\1/p' \+ package.json+ )+ [[ -n "${_expected_webui_cid}" ]] || {+ printf '%s\n' 'Unable to determine the WebUI CID expected by upstream' >&2+ return 1+ }+ [[ "${_webui_cid}" == "${_expected_webui_cid}" ]] || {+ printf 'WebUI CID mismatch: PKGBUILD has %s, upstream expects %s\n' \+ "${_webui_cid}" "${_expected_webui_cid}" >&2+ printf 'Update _webui_cid and its source checksum before building.\n' >&2+ return 1+ }++ _ipfs_path=$(mktemp -d --tmpdir "${pkgname}-kubo.XXXXXXXX") || return 1+ trap 'rm -rf -- "${_ipfs_path}"' EXIT++ _car_path=$(readlink -f -- "${srcdir}/webui-${_webui_cid}.car")+ [[ -f "${_car_path}" ]] || {+ printf 'WebUI CAR is missing: %s\n' "${_car_path}" >&2+ return 1+ }++ IPFS_PATH="${_ipfs_path}" ipfs init --profile=server >/dev/null+ IPFS_PATH="${_ipfs_path}" ipfs dag import "${_car_path}" >/dev/null++ rm -rf -- "${_webui_path}"+ IPFS_PATH="${_ipfs_path}" ipfs get "/ipfs/${_webui_cid}" -o "${_webui_path}"+ [[ -f "${_webui_path}/index.html" ]] || {+ printf 'Materialized WebUI is missing index.html: %s\n' "${_webui_path}" >&2+ return 1+ }++ _kubo_version=$(sed -nE 's/^[[:space:]]*"kubo":[[:space:]]*"([^"]+)".*/\1/p' package.json)+ [[ -n "${_kubo_version}" ]] || {+ printf '%s\n' 'Unable to determine the bundled Kubo version' >&2+ return 1+ }++ npm pkg set "allowScripts[kubo@${_kubo_version}]=false" --json+ npm ci --no-audit --no-fund \+ 2> >(sed '/glob@11\.1\.0: Old versions of glob are not supported/d' >&2)++ [[ ! -e node_modules/kubo/kubo/ipfs ]] || {+ printf '%s\n' 'Unexpected bundled Kubo binary found after npm install' >&2+ return 1+ }+)+ build() {+ local -a _builder_options+ _warn_if_electron_outdated _electron_env+ cd -- "${_pkgsrc}" || return 1 - local _builder_options=(+ IPFS_WEBUI_PATH="${srcdir}/webui-${_webui_cid}" \+ npm_config_offline=true npm run build++ _builder_options=( "-c.electronDist=/usr/lib/${_electron_pkg}" "-c.electronVersion=${SYSTEM_ELECTRON_VERSION}" )-- cd "$_pkgsrc"- npm ci --no-audit --no-fund \- 2> >(sed '/glob@11\.1\.0: Old versions of glob are not supported/d' >&2)- npm run build- npm exec -- electron-builder --linux --dir --publish never "${_builder_options[@]}"+ npm_config_offline=true npm exec -- electron-builder --linux --dir --publish never \+ "${_builder_options[@]}" } package() {- _electron_env+ mkdir -p -- "${pkgdir}/usr/lib/${pkgname}"+ cp -a -- "${_pkgsrc}/dist/linux-unpacked/resources/." "${pkgdir}/usr/lib/${pkgname}/" - depends=("$_electron_pkg")+ install -Dm644 -- "${_pkgsrc}/assets/webui/ipfs-logo-512-ice.png" \+ "${pkgdir}/usr/share/pixmaps/${pkgname}.png"+ install -Dm644 -- "${_pkgsrc}/LICENSE" \+ "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" - mkdir -pm755 "$pkgdir/usr/lib/$pkgname"- cp -a "$_pkgsrc/dist/linux-unpacked/resources"/* -t "$pkgdir/usr/lib/$pkgname/"- rm -f \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/tsconfig.json"- rm -f \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/LICENSE" \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/kubo/README.md" \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/kubo/build-log" \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/kubo/install.sh" \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/kubo/LICENSE" \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/kubo/LICENSE-APACHE" \- "$pkgdir/usr/lib/$pkgname/app.asar.unpacked/node_modules/kubo/kubo/LICENSE-MIT"+ sed "s|@ELECTRON_PKG@|${_electron_pkg}|" \+ "${srcdir}/${pkgname}-startup.sh" \+ | install -Dm755 /dev/stdin "${pkgdir}/usr/bin/${pkgname}"+ install -Dm644 -- "${srcdir}/${pkgname}.desktop" \+ "${pkgdir}/usr/share/applications/${pkgname}.desktop" - install -Dm644 "$_pkgsrc/assets/webui/ipfs-logo-512-ice.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"- install -Dm644 "$_pkgsrc/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname"-- install -Dm755 "$srcdir/ipfs-desktop-startup.sh" "$pkgdir/usr/bin/$pkgname"- install -Dm644 "$srcdir/ipfs-desktop.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"-- chmod -R u+rwX,go+rX,go-w "$pkgdir/"+ chmod -R u+rwX,go+rX,go-w -- "${pkgdir}" } Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-18 00:03:42 | LOW | 2 |
| 2026-08-17 00:18:29 | LOW | 2 |
| 2026-08-16 00:03:42 | LOW | 2 |
| 2026-08-15 00:26:13 | LOW | 2 |
| 2026-08-14 00:03:41 | LOW | 2 |
| 2026-08-13 00:17:07 | LOW | 2 |
| 2026-08-12 00:27:08 | LOW | 2 |
| 2026-08-11 13:21:13 | MEDIUM | 1 |
| 2026-07-30 15:15:12 | CLEAN | 0 |
| 2026-07-30 13:14:23 | CLEAN | 0 |
| 2026-06-18 16:11:54 | CLEAN | 0 |