joplin-desktop
joplin
scanned 2026-09-17 00:27:14.276658
The npx commands are used to run build tools (yarn, gulp, electron-builder) on the project's own source code from a trusted GitHub repository, not to execute arbitrary remote packages.
Triggered rules
llm_review
An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is LOW (confidence 95%): The npx commands are used to run build tools (yarn, gulp, electron-builder) on the project's own source code from a trusted GitHub repository, not to execute arbitrary remote packages.
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:61
npx yarn install -
PKGBUILD:69
npx gulp build -
PKGBUILD:73
npx gulp before-dist -
PKGBUILD:80
npx electron-builder \ -
PKGBUILD:93
npx yarn workspaces foreach -Rptiv --from 'joplin' --from '@joplin/app-desktop' run test
PKGBUILD
5 offending line(s) highlighted# Maintainer: CUI Hao <cuihao.leo@gmail.com>
# Contributor: dosenpils <dosenpils at donotdevelopmyapp dot com>
# Contributor: Alfredo Palhares <alfredo at palhares dot me>
# Contributor: Mark Wagie <mark dot wagie at tutanota dot com>
# Contributor: Matteo Parolari
# Contributor: gardar <aur@gardar.net>
pkgbase=joplin
pkgname=('joplin' 'joplin-desktop')
pkgdesc="A note taking and to-do application with synchronization capabilities"
pkgver=3.6.16
groups=('joplin')
pkgrel=1
_electronVersion=42
depends=("electron${_electronVersion}" "nodejs>20" "libvips")
optdepends=('libappindicator-gtk3: for tray icon')
arch=('x86_64' 'aarch64')
makedepends=('npm' 'git' 'rsync' 'python-setuptools' 'libxcrypt-compat' 'corepack')
url="https://joplinapp.org/"
license=("AGPL-3.0-or-later")
source=(
"joplin-desktop.sh"
"joplin-desktop.desktop"
"joplin-${pkgver}.tar.gz::https://github.com/laurent22/joplin/archive/v${pkgver}.tar.gz"
)
sha256sums=('9223cc816f8175ddaf8839f9357d2bd1c4831692504927c98d8e1eefa7df796e'
'f485c089904d91750d137d4413297676446e0068892cb08e20bee928bcac516c'
'f88de7ccc464dcab925966e35ffa4a061551593749589ef74ce4683977df8c35')
_setup_env() {
export YARN_CACHE_FOLDER="${srcdir}/yarn-cache"
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
#export npm_config_build_from_source=true
export npm_config_yes=true
export SHARP_IGNORE_GLOBAL_LIBVIPS=1
}
prepare() {
_setup_env
# Create the yarn cache folder
mkdir -p "${YARN_CACHE_FOLDER}"
cd "${srcdir}/joplin-${pkgver}"
}
build() {
_setup_env
cd "${srcdir}/joplin-${pkgver}"
# Delete unused components
rm -r packages/{app-mobile,app-clipper,server,doc-builder}
# Fix: Build error due to removal of app-mobile
sed -i '/app-mobile\//d' packages/tools/gulp/tasks/buildScriptIndexes.js
# Fix: joplin-plugin-freehand-drawing complains "not in a git directory"
git init
corepack install
npx yarn install
# Replace npm dependencies with local ones
cd "packages"
sed -i -E 's_"@joplin/(\w+)": .*_"@joplin/\1": "file://'$PWD'/\1",_g' */package.json
# Pack the app-cli package
cd "${srcdir}/joplin-${pkgver}/packages/app-cli"
npx gulp build
# Pack the app-desktop electron package
cd "${srcdir}/joplin-${pkgver}/packages/app-desktop"
npx gulp before-dist
electronRoot=/usr/lib/electron${_electronVersion}/
electronVersion="$(<${electronRoot}/version)"
arch_args="--x64"
if [[ $CARCH == "aarch64" ]]; then
arch_args="--arm64"
fi
npx electron-builder \
--linux "$arch_args" --dir=dist/ \
-c.electronDist="${electronRoot}" \
-c.electronVersion="${electronVersion}"
}
check() {
_setup_env
cd "${srcdir}/joplin-${pkgver}"
env ELECTRON_OVERRIDE_DIST_PATH=/usr/lib/electron${_electronVersion}/ \
TZ=UTC \
npx yarn workspaces foreach -Rptiv --from 'joplin' --from '@joplin/app-desktop' run test
}
package_joplin() {
pkgdesc="A note taking and to-do application with synchronization capabilities - CLI App"
depends=('nodejs')
optdepends=( )
_setup_env
# Install the package
cd "${srcdir}/joplin-${pkgver}/packages/app-cli/build"
npm pack
npm install -g --install-links --prefix "${pkgdir}/usr" \
--allow-scripts=keytar,sharp,sqlite3 \
*.tgz
# Fix permissions set by npm
chown -R root:root "${pkgdir}"
}
package_joplin-desktop() {
pkgdesc="A note taking and to-do application with synchronization capabilities - Desktop"
depends=("electron${_electronVersion}" "nodejs" "libvips")
optdepends=('libappindicator-gtk3: for tray icon')
_setup_env
cd "${srcdir}/joplin-${pkgver}/packages/app-desktop"
mkdir -p "${pkgdir}/usr/lib"
cp -vr dist/linux-unpacked/resources "${pkgdir}/usr/lib/${pkgname}"
# Install icons
while read -r size; do
mkdir -p "${pkgdir}/usr/share/icons/hicolor/${size}/apps/"
cp "${pkgdir}/usr/lib/${pkgname}/build/icons/${size}.png" \
"${pkgdir}/usr/share/icons/hicolor/${size}/apps/${pkgname}.png"
done < <(ls build/icons | grep -Po '^(\d+)x\1+(?=\.png)')
install -vDm644 "${srcdir}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
install -vDm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
sed -i "s|@electronversion@|${_electronVersion}|" "${pkgdir}/usr/bin/${pkgname}"
}
Changes since previous scan
--- PKGBUILD @ 2026-09-11 00:19+++ PKGBUILD @ 2026-09-17 00:27@@ -8,10 +8,10 @@ pkgbase=joplin pkgname=('joplin' 'joplin-desktop') pkgdesc="A note taking and to-do application with synchronization capabilities"-pkgver=3.6.15+pkgver=3.6.16 groups=('joplin') pkgrel=1-_electronVersion=41+_electronVersion=42 depends=("electron${_electronVersion}" "nodejs>20" "libvips") optdepends=('libappindicator-gtk3: for tray icon') arch=('x86_64' 'aarch64')@@ -25,7 +25,7 @@ ) sha256sums=('9223cc816f8175ddaf8839f9357d2bd1c4831692504927c98d8e1eefa7df796e' 'f485c089904d91750d137d4413297676446e0068892cb08e20bee928bcac516c'- '8ed300da2e71effb5550cee66e5e77d082d8dcf93c2914c5d1cb6fac58e6ffbc')+ 'f88de7ccc464dcab925966e35ffa4a061551593749589ef74ce4683977df8c35') _setup_env() { export YARN_CACHE_FOLDER="${srcdir}/yarn-cache"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 23:24:29 | 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 21:44:16 | Low | 2 |