futo-notes-bin
The package downloads a prebuilt AppImage from the project's official GitLab instance, which is a legitimate source for the software; while the host is not a standard forge domain, it is plausibly project-controlled, and the AppImage checksum is verified, reducing supply-chain risk.
Triggered rules
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 95%): The package downloads a prebuilt AppImage from the project's official GitLab instance, which is a legitimate source for the software; while the host is not a standard forge domain, it is plausibly project-controlled, and the AppImage checksum is verified, reducing supply-chain risk.
1 higher static finding superseded - not the current verdict (shown for transparency)
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=("LICENSE.md::https://gitlab.futo.org/futo-notes/futo-notes/-/raw/main/LICENSE.md")
PKGBUILD
1 offending line(s) highlighted# Maintainer: Nico <d3sox at protonmail dot com>
_pkgname=futo-notes
pkgname=${_pkgname}-bin
pkgver=1.7.1
pkgrel=1
pkgdesc="Fast, private, local-first notes"
arch=('x86_64')
url="https://notes.futo.tech"
license=('LicenseRef-SourceFirst-1.1')
depends=('hicolor-icon-theme' 'desktop-file-utils')
provides=("${_pkgname}")
conflicts=("${_pkgname}")
options=('!strip')
_appimage="${pkgname}-${pkgver}-x86_64.AppImage"
source=("LICENSE.md::https://gitlab.futo.org/futo-notes/futo-notes/-/raw/main/LICENSE.md")
source_x86_64=("${_appimage}::https://gitlab.futo.org/api/v4/projects/488/packages/generic/${_pkgname}/v${pkgver}/FUTO-Notes-${pkgver}-x86_64.AppImage")
noextract=("${_appimage}")
sha256sums=('4d8522558ced82190b4b7e2d86d0955e4dc910d0fbb8eb2f01eed7cacd4f94ef')
sha256sums_x86_64=('c22381610f4475806f0ae00ba4f93ba6fb604c46db1a28adbcda60c7d470774a')
prepare() {
chmod +x "${_appimage}"
"./${_appimage}" --appimage-extract
}
package() {
install -dm755 "${pkgdir}/opt/${_pkgname}"
cp -a squashfs-root/usr "${pkgdir}/opt/${_pkgname}/"
cp -a squashfs-root/apprun-hooks "${pkgdir}/opt/${_pkgname}/"
install -Dm755 squashfs-root/AppRun "${pkgdir}/opt/${_pkgname}/AppRun"
install -Dm755 squashfs-root/AppRun.wrapped "${pkgdir}/opt/${_pkgname}/AppRun.wrapped"
install -Dm644 "squashfs-root/FUTO Notes.png" "${pkgdir}/opt/${_pkgname}/FUTO Notes.png"
ln -s "usr/share/applications/FUTO Notes.desktop" "${pkgdir}/opt/${_pkgname}/FUTO Notes.desktop"
install -dm755 "${pkgdir}/usr/bin"
install -Dm755 /dev/stdin "${pkgdir}/usr/bin/${_pkgname}" <<EOF
#!/usr/bin/env bash
exec /opt/${_pkgname}/AppRun "\$@"
EOF
install -Dm644 "squashfs-root/usr/share/applications/FUTO Notes.desktop" \
"${pkgdir}/usr/share/applications/${_pkgname}.desktop"
sed -i \
-e "s|^Exec=.*|Exec=${_pkgname}|" \
-e 's|^Categories=.*|Categories=Office;Utility;|' \
"${pkgdir}/usr/share/applications/${_pkgname}.desktop"
install -dm755 "${pkgdir}/usr/share/icons/hicolor"
cp -a squashfs-root/usr/share/icons/hicolor/. "${pkgdir}/usr/share/icons/hicolor/"
install -Dm644 "$srcdir/LICENSE.md" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}
Changes since previous scan
--- PKGBUILD @ 2026-09-01 00:11+++ PKGBUILD @ 2026-09-17 00:27@@ -1,7 +1,7 @@ # Maintainer: Nico <d3sox at protonmail dot com> _pkgname=futo-notes pkgname=${_pkgname}-bin-pkgver=1.7.0+pkgver=1.7.1 pkgrel=1 pkgdesc="Fast, private, local-first notes" arch=('x86_64')@@ -16,7 +16,7 @@ source_x86_64=("${_appimage}::https://gitlab.futo.org/api/v4/projects/488/packages/generic/${_pkgname}/v${pkgver}/FUTO-Notes-${pkgver}-x86_64.AppImage") noextract=("${_appimage}") sha256sums=('4d8522558ced82190b4b7e2d86d0955e4dc910d0fbb8eb2f01eed7cacd4f94ef')-sha256sums_x86_64=('402026a3b6e3ca3c345be7b3460486c6f15376dc141a12445e011aceb3c07bef')+sha256sums_x86_64=('c22381610f4475806f0ae00ba4f93ba6fb604c46db1a28adbcda60c7d470774a') prepare() { chmod +x "${_appimage}"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 09:47:42 | Medium | 1 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |