grayjay-bin
maintainer nathanchere
· 27 votes
· scanned 2026-08-03 00:08:14.047287
LOW
View on AUR ↗
Why flagged
The package downloads a prebuilt binary from the project's own update server, which is not on a standard forge but plausibly official; the binary is not executed directly during build/install and is instead copied to the user's home directory on first run, limiting supply-chain risk to post-install execution, which is typical for such applications.
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-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package downloads a prebuilt binary from the project's own update server, which is not on a standard forge but plausibly official; the binary is not executed directly during build/install and is instead copied to the user's home directory on first run, limiting supply-chain risk to post-install execution, which is typical for such applications.
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:14
source=("${_filename}.zip::https://updater.grayjay.app/Apps/Grayjay.Desktop/${pkgver}/${_filename}.zip")
PKGBUILD
1 offending line(s) highlighted
1
# Maintainer: Nathan Chere <aur@nathanchere.com.au>
2
pkgname=grayjay-bin
3
pkgver=17
4
pkgrel=2
5
pkgdesc="Grayjay Desktop - follow creators, not platforms (privacy- and freedom-respecting client for YouTube, Rumble, Twitch, Spotify etc)"
6
arch=('x86_64')
7
url="https://grayjay.app/desktop/"
8
license=('Source First License 1.1')
9
depends=('gtk3' 'unzip' 'libnotify' 'nss' 'libxss' 'libxtst' 'xdg-utils' 'at-spi2-core' 'libsecret' 'libappindicator-gtk3')
10
provides=('grayjay')
11
conflicts=('grayjay' 'grayjay-git')
12
options=(!strip)
13
_filename="Grayjay.Desktop-linux-x64-v${pkgver}"
14
source=("${_filename}.zip::https://updater.grayjay.app/Apps/Grayjay.Desktop/${pkgver}/${_filename}.zip")
15
sha256sums=('29a5b953a26c30af10dafa1727b588f19cea93c74073882fa7e1f2a9336757d4')
16
17
prepare() {
18
mkdir -p "${srcdir}/grayjay"
19
unzip -q "${srcdir}/${_filename}.zip" -d "${srcdir}/grayjay"
20
}
21
22
package() {
23
cd "${srcdir}/grayjay/${_filename}"
24
25
# Create necessary directories
26
install -dm755 "${pkgdir}/usr/share/grayjay"
27
install -dm755 "${pkgdir}/usr/bin"
28
install -dm755 "${pkgdir}/usr/share/applications"
29
install -dm755 "${pkgdir}/usr/share/icons/hicolor/512x512/apps"
30
31
# Create launcher script that copies app to user directory on first run
32
cat > "${pkgdir}/usr/bin/grayjay" << 'EOF'
33
#!/bin/sh
34
APP_DIR="$HOME/.local/share/grayjay"
35
36
# Check if app is already installed in user directory
37
if [ ! -d "$APP_DIR" ]; then
38
echo "First run - installing Grayjay to $APP_DIR"
39
mkdir -p "$APP_DIR"
40
cp -r /usr/share/grayjay/* "$APP_DIR/"
41
chmod u+w -R "$APP_DIR"
42
fi
43
44
exec sh -c "cd '$APP_DIR' && exec ./Grayjay \"\$@\"" -- "$@"
45
EOF
46
chmod 755 "${pkgdir}/usr/bin/grayjay"
47
48
# Copy application files to system directory (will be copied to user dir on first run)
49
cp -r ./* "${pkgdir}/usr/share/grayjay/"
50
51
# Create desktop entry
52
cat > "${pkgdir}/usr/share/applications/grayjay.desktop" << EOF
53
[Desktop Entry]
54
Name=Grayjay
55
Comment=Privacy-respecting client for YouTube, Rumble, Twitch, Spotify etc
56
Exec=/usr/bin/grayjay
57
Icon=grayjay
58
Terminal=false
59
Type=Application
60
Categories=Network;Video;AudioVideo;
61
EOF
62
63
# Install icon
64
install -Dm644 "grayjay.png" \
65
"${pkgdir}/usr/share/icons/hicolor/512x512/apps/grayjay.png"
66
}
67
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 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 |
| 2026-07-15 00:09:25 | LOW | 2 |