cline-desktop
LOW
maintainer gmazza
0 votes
scanned 2026-09-19 00:25:36.748935
Why flagged
The package builds from the official GitHub source of the project, disables in-app updates, and bundles only project-owned build artifacts; the flagged low votes and recent upload are metadata concerns, not security risks.
Triggered rules
Low
Few votes, recently uploaded
zero_votes_recent
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
Low
AI review
llm_review
An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is LOW (confidence 90%): The package builds from the official GitHub source of the project, disables in-app updates, and bundles only project-owned build artifacts; the flagged low votes and recent upload are metadata concerns, not security risks.
PKGBUILD
1
# Maintainer: Gianluca Mazza <info@gianlucamazza.it>
2
#
3
# Unofficial Linux package of Cline for Desktop (upstream: cline/cline).
4
# Not affiliated with Cline. Upstream GitHub releases currently ship macOS and
5
# Windows only (https://cline.bot/desktop); this PKGBUILD builds the same
6
# tagged source (Tauri 2 + Bun sidecar) for Linux. In-app auto-update is
7
# disabled so pacman/yay own upgrades.
8
9
pkgname=cline-desktop
10
pkgver=0.0.32
11
pkgrel=1
12
pkgdesc="Cline coding agent as a native desktop app (unofficial Linux build)"
13
arch=('x86_64' 'aarch64')
14
url="https://cline.bot/desktop"
15
license=('Apache-2.0')
16
depends=(
17
'cairo'
18
'gcc-libs'
19
'gdk-pixbuf2'
20
'glib2'
21
'glibc'
22
'gtk3'
23
'hicolor-icon-theme'
24
'libsoup3'
25
'openssl'
26
'webkit2gtk-4.1'
27
)
28
makedepends=(
29
'bun'
30
'cargo'
31
'git'
32
'pkgconf'
33
'python'
34
)
35
optdepends=(
36
'github-cli: pull-request status in the composer'
37
'libappindicator: system tray icon'
38
'libayatana-appindicator: system tray icon (Ayatana)'
39
'xdg-desktop-portal-gtk: native file picker on Wayland'
40
)
41
options=('!lto' '!debug')
42
source=(
43
"$pkgname-$pkgver.tar.gz::https://github.com/cline/cline/archive/refs/tags/desktop-v$pkgver.tar.gz"
44
'cline-desktop.desktop'
45
)
46
sha256sums=(
47
'19199a217201750acb7d22dca6d6a43ae37616500bfa468d6201c6a2afac89cf'
48
'fe4591dabfdbe6a62389ed7c7ccc7041ab9f83d21a1cde0bd806d06fabc0ae33'
49
)
50
51
_srcdir="cline-desktop-v$pkgver"
52
_appdir="apps/examples/desktop-app"
53
54
prepare() {
55
cd "$srcdir/$_srcdir"
56
57
python - <<'PY'
58
import json
59
from pathlib import Path
60
61
path = Path("apps/examples/desktop-app/src-tauri/tauri.conf.json")
62
cfg = json.loads(path.read_text())
63
cfg["mainBinaryName"] = "cline-desktop"
64
cfg.setdefault("bundle", {})["targets"] = ["deb"]
65
plugins = cfg.setdefault("plugins", {})
66
updater = plugins.setdefault("updater", {})
67
# Empty endpoints disable the in-app updater (see updates_enabled() in main.rs).
68
updater["endpoints"] = []
69
path.write_text(json.dumps(cfg, indent=2) + "\n")
70
PY
71
72
bun install --frozen-lockfile
73
74
cd "$_appdir/src-tauri"
75
export CARGO_HOME="$srcdir/cargo-home"
76
export RUSTUP_TOOLCHAIN=stable
77
cargo fetch --locked --target "$(rustc -vV | sed -n 's/^host: //p')"
78
}
79
80
build() {
81
cd "$srcdir/$_srcdir"
82
83
export CARGO_HOME="$srcdir/cargo-home"
84
export RUSTUP_TOOLCHAIN=stable
85
export BUN_INSTALL_CACHE_DIR="$srcdir/bun-cache"
86
87
# Same order as .github/workflows/desktop-publish.yml: SDK packages (including
88
# @cline/shared/browser) must exist before Tauri's beforeBuildCommand builds @cline/ui.
89
bun run build:sdk
90
91
cd "$_appdir"
92
bun run build:binary -- --bundles deb
93
}
94
95
package() {
96
cd "$srcdir/$_srcdir"
97
98
local deb data
99
deb="$(find "$_appdir/src-tauri/target/release/bundle/deb" -maxdepth 1 -name '*.deb' -print -quit)"
100
if [[ -z "$deb" ]]; then
101
echo "error: Tauri did not produce a .deb under src-tauri/target/release/bundle/deb" >&2
102
return 1
103
fi
104
105
data="$(bsdtar -tf "$deb" | grep -E '^data\.tar\.' | head -1)"
106
if [[ -z "$data" ]]; then
107
echo "error: no data.tar.* inside $deb" >&2
108
return 1
109
fi
110
bsdtar -xOf "$deb" "$data" | bsdtar -x -C "$pkgdir"
111
112
# Stable launcher name, regardless of what the deb called the binary.
113
if [[ -x "$pkgdir/usr/bin/cline-desktop" ]]; then
114
:
115
elif [[ -x "$pkgdir/usr/bin/cline-app" ]]; then
116
mv "$pkgdir/usr/bin/cline-app" "$pkgdir/usr/bin/cline-desktop"
117
else
118
local bin
119
bin="$(find "$pkgdir/usr/bin" -type f -executable -print -quit)"
120
if [[ -z "$bin" ]]; then
121
echo "error: no executable installed under /usr/bin" >&2
122
return 1
123
fi
124
mv "$bin" "$pkgdir/usr/bin/cline-desktop"
125
fi
126
127
install -Dm644 "$srcdir/cline-desktop.desktop" \
128
"$pkgdir/usr/share/applications/cline-desktop.desktop"
129
find "$pkgdir/usr/share/applications" -name '*.desktop' ! -name 'cline-desktop.desktop' -delete
130
131
# Point leftover icon names at our desktop file if the bundler used another stem.
132
if [[ ! -e "$pkgdir/usr/share/icons/hicolor/128x128/apps/cline-desktop.png" ]]; then
133
local icon
134
icon="$(find "$pkgdir/usr/share/icons" -type f \( -name '*.png' -o -name '*.svg' \) -print -quit || true)"
135
if [[ -n "$icon" ]]; then
136
install -Dm644 "$icon" "$pkgdir/usr/share/icons/hicolor/128x128/apps/cline-desktop.png"
137
else
138
install -Dm644 "$_appdir/src-tauri/icons/128x128.png" \
139
"$pkgdir/usr/share/icons/hicolor/128x128/apps/cline-desktop.png"
140
install -Dm644 "$_appdir/src-tauri/icons/32x32.png" \
141
"$pkgdir/usr/share/icons/hicolor/32x32/apps/cline-desktop.png"
142
fi
143
fi
144
145
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
146
install -Dm644 "$_appdir/README.md" "$pkgdir/usr/share/doc/$pkgname/README.md"
147
}
148
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-19 00:25:36 | Low | 2 |
| 2026-09-18 23:29:28 | Low | 2 |