Nuvaka › Geliştirici belgeleri › Program uyumluluğu
Program uyumluluğu ve bağımlılıklar
Her program paketi nerede çalıştığını (compat), her sürüm de neye ihtiyaç duyduğunu (dependencies) bildirmek zorundadır. Bildirimler eksikse sürüm incelemeye gönderilemez. Mağaza bu bilgilerle kartta "Ubuntu 22.04+, Fedora 39+ · x86_64" gibi bir özet gösterir. Uygulama da cihaza uygun paketi seçer ve eksik bağımlılıkları kullanıcıya söyler.
Uyumluluk bildirimi (compat)
compat paket başına, yani her platform anahtarı için ayrı verilir. İki yolu var:
- yüklerken
?compat=sorgu alanında, URL kodlu JSON olarak; - sonradan
PUT /api/programs/dev/{id}/versions/{v}/packages/{platform}/compatile, gövdede JSON olarak.
Sunucu bildirimi doğrular ve normalize eder. Normalize bildirim paket kaydına girer ve imzalanır.
Biçim
// Windows: windows-msi, windows-exe, windows-exe-arm64, windows-msix
{ "arch": "x86_64", "os": { "minVersion": "10.0.19041" },
"launch": { "uninstallKey": "Nuvaka GPU Control", "exe": "bin\\GpuControl.exe" }, "processName": "GpuControl.exe" }
// macOS: macos-dmg
{ "arch": "universal", "os": { "minVersion": "12.0" }, "launch": { "bundleId": "com.nuvaka.gpucontrol" } }
// Android: android-apk
{ "arch": "universal", "os": { "minSdk": 26 } }
// Linux paket yöneticisi: linux-deb, linux-rpm, linux-pacman
{ "arch": "x86_64", "linux": { "distros": [ { "id": "ubuntu", "min": "22.04" }, { "id": "debian", "min": "12" } ] },
"launch": { "desktopId": "gpu-control.desktop" }, "processName": "gpu-control" }
// AppImage: linux-appimage ("glibc 2.31 ya da üstü olan her dağıtım")
{ "arch": "x86_64", "linux": { "glibc": "2.31" }, "launch": { "desktopId": "gpu-control.desktop" } }
| Alan | Kural |
|---|---|
arch | x86_64, arm64 ya da universal. windows-exe kendiliğinden x86_64, windows-exe-arm64 kendiliğinden arm64'tür: yazmazsan bu değerler kullanılır, farklı bir değer yazarsan hata döner. Diğer tüm anahtarlarda zorunludur. |
os.minVersion | Windows ve macOS'ta zorunlu. Windows için tam yapı numarası: 10.0.17763 (1809), 10.0.19041 (2004), 10.0.22000 (Windows 11). macOS için 11, 12.0, 13.3 gibi. |
os.minSdk | Android'de zorunlu. API düzeyi, 16–99 arası tam sayı (ör. 26 = Android 8.0). |
linux.distros | deb, rpm ve pacman paketlerinde zorunlu: 1–20 öğe, her biri { id, min? }. id, /etc/os-release dosyasındaki ID değeridir ve paket türünün ailesinden olmalı (aşağıdaki tablo). min en düşük VERSION_ID değeridir. min yazmazsan dağıtımın her sürümü kabul edilir; Arch gibi yuvarlanan dağıtımlarda böyle bırak. AppImage'da bu alan isteğe bağlıdır ve yalnız bilgi verir. |
linux.glibc | 2.31 biçiminde. AppImage'da zorunlu, diğer Linux paketlerinde isteğe bağlı. Derlediğin sistemin glibc sürümünü ldd --version gösterir. |
Bilinmeyen alan reddedilir. Linux anahtarlarında arch, linux, launch, processName, packageName, replaces, ui, bridge ve background; Windows ve macOS'ta arch, os, launch, processName, ui, bridge ve background; Android'de yalnız arch ve os olabilir. ui, bridge ve background yalnız masaüstü paketlerinde bulunur (Yerel uçlar). Eski minOsVersion alanı compat'tan türetilir: Windows ve macOS'ta minVersion, Android'de minSdk, Linux'ta boş.
Başlatma bilgisi (launch) ve süreç adı
Masaüstü paketlerinde (Windows, macOS, Linux) launch zorunludur. Uygulama programı yalnız bu bilgiyle başlatır; bir uzantının verdiği yolu asla kullanmaz.
| Paket | launch | Kural |
|---|---|---|
linux-* | { "desktopId": "gpu-control.desktop" } | Paketin kurduğu .desktop dosyasının adı (yol değil). |
windows-* | { "uninstallKey": "Nuvaka GPU Control", "exe": "bin\GpuControl.exe" } | uninstallKey: HKLM/HKCU …\Uninstall altındaki anahtar adı ya da DisplayName (1–200). exe: InstallLocation altında göreli .exe yolu; .., sürücü harfi ve baştaki \ ya da / olamaz. |
macos-dmg | { "bundleId": "com.nuvaka.gpucontrol" } | Uygulamanın paket kimliği (ters DNS). |
android-apk | yok | Android'de launch verilmez. |
processName isteğe bağlıdır: programın "çalışıyor" durumu için süreç adı (yol değil), ör. GpuControl.exe ya da gpu-control. İkisi de compat'ın parçasıdır; imzalı paket kaydına girer ve detayda packages[].compat içinde döner. Hata yolları: compat.launch, compat.launch.exe, compat.processName gibi.
Dağıtım aileleri
| Anahtar | İzin verilen id değerleri |
|---|---|
linux-deb | debian, ubuntu, linuxmint, pop, elementary, zorin, kali, raspbian, deepin, mx, neon, devuan, pureos, tuxedo |
linux-rpm | fedora, rhel, centos, rocky, almalinux, ol, opensuse-leap, opensuse-tumbleweed, sles, nobara, amzn, ultramarine |
linux-pacman | arch, manjaro, endeavouros, garuda, cachyos, artix, steamos |
Ailesine uymayan bir dağıtım yazarsan reddedilir. Ör. bir deb paketinde fedora yazarsan yanıt şöyle olur:
{ "success": false, "error": "compat_invalid", "path": "compat.linux.distros[1].id",
"message": "fedora bu paket türüne uymaz; linux-deb için: debian, ubuntu, linuxmint, …" }
Örnek: tek sürümde beş paket
Kısalık için launch alanları yazılmadı; her masaüstü paketinde gerekir.
// windows-msi
{ "arch": "x86_64", "os": { "minVersion": "10.0.19041" } }
// windows-exe-arm64 (arch kendiliğinden arm64)
{ "os": { "minVersion": "10.0.22000" } }
// linux-deb
{ "arch": "x86_64", "linux": { "distros": [ { "id": "ubuntu", "min": "22.04" }, { "id": "debian", "min": "12" }, { "id": "linuxmint", "min": "21" } ] } }
// linux-rpm
{ "arch": "x86_64", "linux": { "distros": [ { "id": "fedora", "min": "39" }, { "id": "opensuse-tumbleweed" } ] } }
// linux-pacman
{ "arch": "x86_64", "linux": { "distros": [ { "id": "arch" }, { "id": "manjaro" }, { "id": "endeavouros" } ] } }
Yerel uçlar: ui, bridge, background
Programın arayüzü ve widget'ı uygulamaya yerel uçlarla bağlanır. Uçlar paket başına compat içinde bildirilir: imzalı paket kaydının parçasıdır ve yolları işletim sistemine göre değişir. Yalnız masaüstü paketlerinde (Windows, macOS, Linux) bulunur; Android'de bu alanlar bilinmeyen alan sayılır ve reddedilir.
ui: programın Nuvaka penceresinde açılan arayüzü.runMode:"embedded"programlarda her masaüstü paketinde zorunludur.bridge: eşlikçi uzantının widget'ının programla konuştuğu köprü.widget.kind:"extension"sürümlerde her masaüstü paketinde zorunludur.background: uygulamanın, kullanıcı onayıyla başlatabileceği arka plan parçası.
Gömülü arayüz (ui)
// önerilen: unix soket ya da named pipe (port gaspı yok, belirteç gerekmez)
"ui": { "transport": "unix", "path": "runtime:gpu-control-ui.sock", "args": ["--serve"] } // Linux, macOS
"ui": { "transport": "pipe", "pipe": "\\\\.\\pipe\\nuvaka-gpu-control-ui", "args": ["--serve"] } // Windows
// http: belirteç dosyası (handshake "file"; portFile ile varsayılan)
"ui": { "transport": "http", "portFile": "gpu-control-ui.json" }
// http: ortam değişkeniyle el sıkışma (UI sunucusunu uygulama başlatır)
"ui": { "transport": "http", "port": 47123, "handshake": "env", "args": ["--serve"], "urlPath": "/app" }
| Alan | Kural |
|---|---|
transport | unix (Linux, macOS), pipe (yalnız Windows) ya da http. unix ve pipe önerilir. |
path (unix) | "/run/<ad>.sock", "/run/<dizin>/<ad>.sock" (macOS'ta /var/run/…) ya da "runtime:<ad>.sock" / "runtime:<dizin>/<ad>.sock". Her parça ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$ kuralına uyar. Yol .sock ile biter, en çok 100 karakterdir ve .. içermez. Arayüz için runtime:<ad>-ui.sock önerilir. |
pipe (pipe) | "\\.\pipe\<ad>"; ad [A-Za-z0-9][A-Za-z0-9._-]{0,99}. JSON'da ters bölüleri kaçışla yaz. |
port ya da portFile (http) | Yalnız biri verilir. port 1024–65535. portFile: çalışma dizinine göre .json dosya adı, en çok bir alt dizin ("gpu-control/ui.json"); mutlak yol, \ ve .. olamaz. |
handshake (http) | file (varsayılan; portFile gerekir) ya da env. Aşağıya bak. |
urlPath | İsteğe bağlı başlangıç yolu. / ile başlar, [A-Za-z0-9._~/-] karakterlerinden oluşur, en çok 200 karakterdir; .. ve // içermez. Varsayılan /. |
args | İsteğe bağlı, en çok 16 metin (her biri en çok 256 karakter, NUL yok). Verirsen UI sunucusunu uygulama başlatır: compat.launch hedefini bu argümanlarla, kullanıcının yetkisiyle (asla root ya da yönetici olarak değil). Vermezsen program UI sunucusunu kendisi açar. |
Kullanıcı çalışma dizini. runtime: yolları ve portFile bu dizine göre çözülür:
- Linux:
$XDG_RUNTIME_DIR(yoksa/run/user/<uid>); - Windows:
%LOCALAPPDATA%\Nuvaka\run; - macOS:
$TMPDIR(getconf DARWIN_USER_TEMP_DIR).
Uygulama bu kökün dışına çıkan yolu (sembolik bağ dahil) reddeder.
http el sıkışması (zorunlu). Port gaspına ve DNS rebinding'e karşı korur:
handshake:"file": programın kendi kullanıcı düzeyindeki UI sunucusu (asla root servis değil)portFile'ı 0600 kipinde yazar:{ "port": 47123, "token": "<en az 32 bayt rastgele, base64url>" }. Uygulama dosyanın sahibinin kullanıcı olduğunu ve grup ya da diğerlerine açık olmadığını denetler.handshake:"env": UI sunucusunu uygulama kendisi başlatır (argsile) ve ortamaNUVAKA_UI_TOKEN=<rastgele>koyar. Görünüm açılmadan önceGET http://127.0.0.1:<port>/.well-known/nuvaka-uiisteği (yetkisiz){ "token": "<NUVAKA_UI_TOKEN>" }döndürmelidir; tutmazsa hiçbir şey gösterilmez.portFileile birlikte kullanılırsa dosya yalnız{ "port" }içerebilir.- İki kipte de uygulama istekleri kendi özel şeması üzerinden vekil olarak iletir:
Host: 127.0.0.1:<port>veAuthorization: Bearer <token>ile. Belirteç görünüme (webview) asla ulaşmaz. Programın sunucusu başka birHostdeğerini ve belirteçsiz isteği reddetmeli (401 ya da 421) ve yalnız127.0.0.1'e bağlanmalı. - unix soket ve pipe'ta belirteç yoktur; bunun yerine uç sahipliği denetlenir (aşağıda).
Widget köprüsü (bridge)
// Linux: sistem servisi (gpud)
"bridge": { "source": "service", "transport": "unix", "path": "/run/nuvaka-gpud/gpud.sock", "protocol": "jsonl-v1",
"hello": { "cmd": "hello", "proto_version": 1 },
"methods": [ { "name": "status", "readOnly": true }, { "name": "set_profile", "readOnly": false, "rateLimitPerMin": 30 } ] }
// Windows
"bridge": { "source": "service", "transport": "pipe", "pipe": "\\\\.\\pipe\\nuvaka-gpud", "protocol": "jsonl-v1", "methods": [ … ] }
// arka plan parçası ve kullanıcı soketi
"background": { "args": ["--background"] },
"bridge": { "source": "background", "transport": "unix", "path": "runtime:gpu-control.sock", "protocol": "jsonl-v1", "methods": [ … ] }
| Alan | Kural |
|---|---|
source | service: paket her zaman çalışan bir işletim sistemi servisi kurar (systemd birimi, Windows servisi, launchd). background: uygulama, kullanıcının onayıyla, Nuvaka açılınca programın arka plan parçasını başlatabilir; paket compat.background bildirmeli (yoksa compat_invalid, path: compat.background). |
transport ve uç | ui'daki gibi (path, pipe, port ya da portFile ve handshake). source:"service" yalnız unix ya da pipe kullanır, çünkü sistem servisi kullanıcının belirtecini veremez. http yalnız background ile olur. |
protocol | "jsonl-v1" (tek değer). |
methods | 1–32 öğe { name, readOnly, rateLimitPerMin? }. name ^[a-z][a-z0-9_]{0,31}$ kuralına uyar ve tekildir. readOnly zorunlu bir bool'dur. rateLimitPerMin 1–600; yoksa uygulamanın varsayılanı geçerlidir (okuma 120, yazma 30). Uygulama listede olmayan yöntemi reddeder (method_not_allowed). |
hello | İsteğe bağlı JSON nesnesi, en çok 1 KB. Uygulama onu her bağlantının ilk satırı olarak aynen gönderir ve bir yanıt satırı bekler (ör. {"cmd":"hello","proto_version":1}). Yanıt gelmezse ya da error içerirse uç bridge_unavailable sayılır. |
Köprü sözleşmesi (jsonl-v1) ve uygulamanın sınırları
Uzantı köprüyü nuvaka.programs.call(method, params?) ile çağırır; sonuç bir Promise'tir. Çağrı yalnız companionOf değeri ve programs: "companion" izni olan, programın kurulu sürüm kaydında widget.kind:"extension" ve widget.extensionId değeri kendisi olan uzantıda çalışır (Ana sayfa widget'ı). İsteği uygulama kendisi kurar; uzantı ham satır gönderemez.
Çerçeve: UTF-8, satır başına bir JSON nesnesi, satır \n ile biter (satır içinde ham yeni satır olmaz). Bir bağlantıdaki istekler sıralıdır; her istek satırına bir yanıt satırı gelir.
→ {"cmd":"hello","proto_version":1} // hello varsa, bağlantının ilk satırı (aynen)
← {"ok":true}
→ {"id":1,"method":"status","params":{}}
← {"id":1,"result":{"temp":61,"profile":"quiet"}}
→ {"id":2,"method":"set_profile","params":{"name":"perf"}}
← {"id":2,"error":{"code":"busy","message":"…"}}
- http'de (yalnız
source:"background"): her istek satırıPOST /.well-known/nuvaka-bridgeisteğinin gövdesidir; yanıt gövdesi tek satırdır. El sıkışma veHost/Bearerkurallarıui'daki gibidir. - Sınırlar:
paramsen çok 64 KB, yanıt satırı en çok 1 MB, yanıt zaman aşımı 5 sn.rateLimitPerMinyöntem başına, uygulamada uygulanır. - Yazma yöntemleri (
readOnly:false) yalnız kullanıcı hareketinden (tıklama ya da tuş, yaklaşık 1 sn içinde) sonra çağrılabilir; aksi hâldegesture_required. - Uç sahipliği: unix soketin sahibi root ya da kullanıcı olmalı ve soket herkese yazılabilir olmamalı (
runtime:soketleri kullanıcıya aittir; 0600 önerilir). Windows'ta pipe sunucusunun süreci (GetNamedPipeServerProcessId) programınInstallLocationdizini altındaki bir dosya olmalı. Tutmazsa uygulama bağlanmaz (bridge_unavailable).
Hatalar Promise reddi olarak gelir; kod error.code alanındadır:
| Kod | Anlamı |
|---|---|
bridge_unavailable | Uç yok, bağlanılamadı, sahiplik ya da el sıkışma tutmadı, hello reddedildi. Widget standart "Program/servis çalışmıyor · Başlat" durumunu çizer (Widget standardı). |
method_not_allowed | Yöntem methods listesinde yok. |
gesture_required | Yazma yöntemi kullanıcı hareketi olmadan çağrıldı. |
rate_limited | Yöntemin rateLimitPerMin sınırı aşıldı. |
timeout | 5 sn içinde yanıt gelmedi. |
too_large | params ya da yanıt sınırı aştı. |
bad_response | Yanıt satırı geçerli değil. |
not_authorized | Uzantı bu programın köprüsünü çağırmaya yetkili değil. |
Programın kendi döndürdüğü hata kodu (ör. busy) error.code'da aynen gelir; önüne ek konmaz.
Arka plan parçası (background)
"background": { "args": ["--background"], "persist": false }
args: 1–16 metin (her biri en çok 256 karakter, NUL yok).persist: isteğe bağlı bool, varsayılanfalse.- Uygulama yalnız
compat.launchhedefini bu argümanlarla başlatır: Linux'ta.desktopdosyasının Exec satırı (alan kodları atılır), Windows'taInstallLocation\exe, macOS'tabundleId. Bunu root ya da yönetici yetkisi olmadan ve kullanıcının açık onayından sonra yapar ("GPU Control arka planda çalışsın mı?"); kullanıcı onayı ayarlardan geri alabilir. - Arka plan parçası Nuvaka açılınca başlatılır, Nuvaka kapanınca durdurulur.
persist:trueise çalışmaya devam eder.
Bağımlılıklar (dependencies)
dependencies sürüm başına verilir: POST …/versions ile sürümü oluştururken ya da sonradan PUT …/versions/{v} ile. Alan zorunludur. Bağımlılık yoksa boş liste [] gönder; bu açıkça "bağımlılık yok" demektir. Alanı hiç göndermezsen sürüm incelemeye gönderilemez (dependencies_required).
[
{ "kind": "driver", "name": "NVIDIA driver", "version": ">=535", "required": false, "platforms": ["windows", "linux"],
"note": { "tr": "Yalnız NVIDIA ekran kartlarında", "en": "NVIDIA GPUs only" }, "url": "https://www.nvidia.com/drivers" },
{ "kind": "hardware", "name": "NVIDIA or AMD GPU", "required": true },
{ "kind": "runtime", "name": ".NET Desktop Runtime", "version": ">=8.0", "required": true, "platforms": ["windows"],
"url": "https://dotnet.microsoft.com/download/dotnet/8.0" },
{ "kind": "program", "name": "nuvaka.gpu-runtime", "version": ">=1.0.0", "required": true }
]
| Alan | Kural |
|---|---|
kind | driver (sürücü), runtime (çalışma zamanı), hardware (donanım), program (başka bir Nuvaka programı) ya da system (işletim sistemi özelliği, ör. WSL, systemd). |
name | 1–100 karakter. kind program ise mağazada yayında ve listelenen bir programın kimliği olmalı. Program kendine bağımlı olamaz. |
version | İsteğe bağlı kısıt: >=535, 8.0, >=1.2.0 gibi. Önüne >=, <=, >, <, =, ~ ya da ^ gelebilir; en çok 40 karakter. |
required | Zorunlu, true ya da false. false "önerilir" demektir. |
note | İsteğe bağlı { tr, en }. Her dil 1–300 karakter. |
url | İsteğe bağlı bir https adresi (indirme ya da bilgi sayfası). |
platforms | İsteğe bağlı. Bağımlılığın geçerli olduğu platform anahtarları ya da işletim sistemleri (windows, linux…). Yazmazsan tüm platformlarda geçerlidir. |
- En çok 30 bağımlılık olabilir. Aynı
kindvenameikilisi iki kez yazılamaz. Bilinmeyen alan reddedilir. - Linux sistem kütüphanelerini burada değil, paketin kendi bağımlılık alanında bildir (
Depends:,Requires:,depends=()). Onları paket yöneticisi kurar. Bu liste paket yöneticisinin kuramayacağı şeyler içindir. programbağımlılığında uygulama, kullanıcıya önce o programı kurmayı önerir. O programın paketi de kendi compat bildirimine göre seçilir. Bağımlı olunan program sonradan yayından kalkarsa yeni sürümün gönderimi ve onayı reddedilir.
Hata kodları
| Kod | Ne zaman |
|---|---|
400 compat_invalid + path | compat hatalı. path hatalı alanın yoludur: compat.arch, compat.os.minVersion, compat.linux.distros[1].id, compat.linux.glibc gibi. Yerel uçlarda: compat.ui, compat.ui.transport|path|pipe|port|portFile|handshake|urlPath|args|args[i]; compat.bridge, compat.bridge.source|transport|path|pipe|port|portFile|handshake|protocol|methods|methods[i]|methods[i].name|methods[i].readOnly|methods[i].rateLimitPerMin|hello; compat.background, compat.background.args|args[i]|persist. |
400 compat_required + platforms | Gönderim ya da onay sırasında compat'ı olmayan paketler var. |
400 dependencies_invalid + path | Bağımlılık listesi hatalı ya da program bağımlılığı bulunamadı, ör. dependencies[0].kind, dependencies[2].name. |
400 dependencies_required | Sürümde dependencies alanı hiç bildirilmedi. |
400 ui_required + platforms | Program runMode:"embedded" ve bu masaüstü paketlerinde compat.ui yok. Gönderim ve onayda. |
400 widget_invalid, reason: bridge_required | Widget kind:"extension" ve bir masaüstü paketinde compat.bridge yok: path: "packages.<platform>.compat.bridge" ve platforms gelir. Sürümde hiç masaüstü paketi yoksa path: "packages". Gönderim ve onayda. |
409 not_editable | İncelemedeki ya da yayındaki sürümün compat'ı veya bağımlılıkları değiştirilemez. |
Mağaza ve uygulama ne görür
Liste kartında (GET /api/programs) son sürümün paketlerinden işletim sistemi başına bir özet bulunur:
"compat": {
"windows": { "arch": ["x86_64", "arm64"], "minVersion": "10.0.19041" },
"linux": { "arch": ["x86_64"], "distros": [ { "id": "ubuntu", "min": "22.04" }, { "id": "fedora", "min": "39" } ], "glibc": "2.31", "anyDistro": true },
"android": { "arch": ["universal"], "minSdk": 26 }
}
Değerler paketler arasındaki en düşük sürümlerdir. anyDistro: true, bir AppImage paketi olduğunu, yani glibc yeterliyse her dağıtımda çalıştığını gösterir. Detayda (GET /api/programs/{id}) her paketin tam compat'ı, her sürümün dependencies'i ve son sürümün bağımlılıkları bulunur. Program bağımlılıklarına mağaza kartı eklenir.
Eşleştirme kuralları
Uygulama kararı cihazda kendisi verebilir. İstersen sunucuya da sorabilirsin: detay isteğine cihaz bilgisini eklersen yanıtta compatibility alanı gelir.
GET /api/programs/{id}?platform=linux&arch=x86_64&distro=ubuntu&distroVersion=24.04&distroLike=debian&glibc=2.39
"compatibility": {
"compatible": true, "recommended": "linux-deb",
"packages": [
{ "platform": "linux-appimage", "compatible": true, "reasons": [], "warnings": [] },
{ "platform": "linux-deb", "compatible": true, "reasons": [], "warnings": [] },
{ "platform": "linux-rpm", "compatible": false, "reasons": ["distro_not_supported"], "warnings": [] }
]
}
Parametreler:
arch:x86_64(amd64vex64da olur) ya daarm64(aarch64da olur).osVersion: Windows'ta yapı numarası (10.0.22631), macOS'ta sürüm (14.5), Android'de API düzeyi (34).distro,distroVersion,distroLike:/etc/os-releasedosyasındakiID,VERSION_IDveID_LIKEdeğerleri.glibc: cihazın glibc sürümü.
Verilmeyen bilgi denetlenmez. Kurallar her paket için ayrı uygulanır:
- Mimari:
universalpaket her mimaride çalışır. Aynı mimari uyar. arm64 Windows ve Apple Silicon Mac, x86_64 paketi öykünmeyle çalıştırır: paket uyar, uyarı olarakarch_emulatedeklenir. Diğer farklararch_mismatchsebebiyle uymaz. - Windows ve macOS: cihaz sürümü
minVersion'dan küçükseos_too_old. Sürümler noktalı sayı olarak parça parça karşılaştırılır. - Android: API düzeyi
minSdk'dan küçükseos_too_old. - glibc: cihazın glibc'si paketin bildirdiğinden eskiyse
glibc_too_old. - deb, rpm, pacman:
- Dağıtım listede varsa ve
minbildirilmişse cihazın sürümü en azminolmalı; değilsedistro_too_old. Sürüm bilinmiyorsa uyarıdistro_version_unknowneklenir. - Dağıtım listede yok, ama kendisi ya da
ID_LIKEdeğerlerinden biri paketin ailesindeyse paket uyar ve uyarıdistro_family_matcheklenir. Bu durumda sürüm denetlenmez. Örnek: listede yalnız ubuntu varken Linux Mint. - Hiçbiri tutmazsa
distro_not_supported.
- Dağıtım listede varsa ve
- AppImage: dağıtıma bakılmaz; yalnız mimari ve glibc denetlenir.
recommended, uyan paketler arasından şöyle seçilir: tam eşleşme önce gelir; aile eşleşmesi ya da öykünme ikinci sıradadır; AppImage en son. Eşitlikte platform anahtarı listesindeki sıra geçerlidir. Hiçbir paket uymuyorsa compatible false, recommended null olur.
Nuvaka Apps API v1 · son güncelleme 2026-10-17