Nuvaka › Geliştirici belgeleri › Manifest (nuvaka.json)
Manifest: nuvaka.json
Paketin kökündeki nuvaka.json uzantıyı tanımlar. Sunucu, uygulama ve nuvaka-ext lint aynı kuralları uygular. Bilinmeyen alan reddedilir.
Örnek
{
"id": "tarikgkhsn.github-watcher",
"name": "GitHub takipçisi",
"version": "0.1.0",
"apiVersion": 1,
"description": {
"tr": "Seçtiğin GitHub depolarının yeni sürümlerini saatte bir denetler ve yeni sürüm çıkınca tüm cihazlarına ya da yalnız bu cihaza bildirim gönderir.",
"en": "Checks the GitHub repositories you choose for new releases every hour and notifies all your devices, or only this one, when a new release appears."
},
"storeCategory": "developer",
"icon": "icon.svg",
"entry": { "ui": "index.html", "background": "background.js" },
"pages": [
{ "id": "releases", "title": { "tr": "Sürümler", "en": "Releases" } }
],
"permissions": [
{ "net": ["api.github.com"], "reason": { "tr": "Depoların son sürümünü GitHub API'den okumak için", "en": "To read the latest release of each repository from the GitHub API" } },
{ "nuvaka.push": true, "reason": { "tr": "Yeni sürümü tüm cihazlarına bildirmek için", "en": "To announce a new release on all your devices" } },
{ "notifications": true, "reason": { "tr": "Yeni sürümü yalnız bu cihazda bildirmek için", "en": "To announce a new release on this device only" } },
{ "background": true, "reason": { "tr": "Sürümleri saatte bir, sayfa kapalıyken de denetlemek için", "en": "To check releases every hour, even when the page is closed" } }
],
"storage": { "quotaMB": 1 },
"triggers": [{ "schedule": "hourly" }, { "event": "network.online" }],
"settings": [
{ "key": "repos", "type": "string", "label": { "tr": "Depolar (sahip/ad, virgülle ayır)", "en": "Repositories (owner/name, comma separated)" }, "default": "tauri-apps/tauri, nodejs/node" },
{ "key": "channel", "type": "select", "label": { "tr": "Bildirim", "en": "Notification" }, "default": "push", "options": ["push", "local", "none"] }
]
}
Kaynak: examples/apps/github-watcher/nuvaka.json
Alanlar
| Alan | Tür | Zorunlu | Kural |
|---|---|---|---|
id | metin | ✓ | <yayıncı>.<ad>; yayıncı [a-z0-9][a-z0-9_-]{1,31}, ad [a-z0-9][a-z0-9-]{1,39} |
name | metin | ✓ | 2–40 karakter |
version | metin | ✓ | semver x.y.z, ön ek yok; her yükleme bir öncekinden büyük |
apiVersion | tam sayı | ✓ | 1 |
minAppVersion | metin | semver; uzantının gerektirdiği en düşük Nuvaka uygulaması sürümü | |
description | { tr, en? } | ✓ | tr zorunlu; her biri 1–300 karakter |
storeCategory | metin | ✓ | productivity, developer, files, communication, finance, media, games, system, education, other |
icon | metin | ✓ | paketteki .svg ya da .png yolu |
homepage | metin | https:// adresi, 8–300 karakter | |
entry | { ui?, background? } | ✓ | en az biri; paketteki dosya yolları (ui: .html/.htm, background: .js/.mjs) |
pages | dizi | entry.ui varsa ✓ | 1–10 sayfa: { id, title: { tr, en? }, icon? } |
permissions | dizi | en çok 30; her öğe tek izin + reason | |
storage | { quotaMB } | 1–100 MB; yazılmazsa 10 | |
shared | { exports?, imports? } | uzantılar arası paylaşım | |
triggers | dizi | en çok 10; entry.background gerekir | |
settings | dizi | en çok 30 ayar | |
$schema | metin | editörler için; yok sayılır |
id
Yayıncı öneki, yükleyen hesabın kullanıcı adıdır (küçük harf) ve sunucuda zorlanır: başkası senin önekinle yayınlayamaz. Kimlik bir kez yayınlanınca değişmez; ad değişse bile kimlik aynı kalır.
version ve minAppVersion
Yalnız x.y.z (ör. 1.4.0); v öneki ya da -beta eki yok. Aynı ya da daha küçük sürüm yüklenemez. minAppVersion uzantının gerektirdiği en düşük Nuvaka uygulaması sürümüdür.
entry ve pages
entry.ui arayüzün HTML dosyası, entry.background arka plan betiğidir. İkisi de paketin içinde olmalıdır.
entry.uivarsapageszorunludur. Her sayfa Uygulamalar menüsünde yayıncı başlığı altında bir öğedir; hepsi aynı HTML dosyasını açar. Açık sayfanuvaka.readybağlamında (ctx.page) gelir, değişincenuvaka.ui.onPage(fn)çalışır.- Sayfa
id:[a-z0-9][a-z0-9-]{0,29}, benzersiz.title:{ tr, en? }, her biri en çok 40 karakter.icon: isteğe bağlı, en çok 40 karakterlik simge adı. entry.backgroundvarsabackgroundizni zorunludur.
permissions
Her öğe tam olarak bir izin anahtarı ve bir reason içerir. Gerekçe kurulum ekranında gösterilir: { tr, en? }, her biri 1–200 karakter.
"permissions": [
{ "files": "read", "reason": { "tr": "Seçtiğin klasördeki dosyaları okumak için", "en": "To read files in the folder you pick" } },
{ "files": "write", "reason": { "tr": "Düzenlenen dosyayı kaydetmek için" } },
{ "net": ["api.github.com"], "reason": { "tr": "Sürümleri GitHub'dan okumak için" } },
{ "notifications": true, "reason": { "tr": "Yeni sürümü bildirmek için" } }
]
- Aynı kapsam iki kez yazılamaz.
files: readvefiles: writeayrı kapsamlardır, ikisi birlikte istenebilir. net: 1–20 tam alan adı, küçük harf.*, IP adresi,localhostve.local/.localhost/.internalile biten adlar kabul edilmez.sharedizni manifestte yazılmaz;shared.importsvarsa kendiliğinden eklenir.- Depolama için izin yoktur; her uzantının kendi alanı vardır.
Tüm izinler, değerleri ve risk sınıfları: İzin başvurusu.
storage
"storage": { "quotaMB": 25 }
1–100 arası tam sayı; yazılmazsa 10 MB. Kota kullanıcı ve uzantı başınadır. Bkz. Kota.
shared
Uzantılar birbirine adlandırılmış değerler açabilir. Ad [a-z0-9][a-z0-9-]{0,29}.
"shared": {
"exports": [{ "name": "rates", "description": { "tr": "Günlük döviz kurları" } }],
"imports": [{ "from": "tarikgkhsn.faturaci", "name": "customers" }]
}
exports: bu uzantınınnuvaka.shared.set(name, …)ile yazabileceği adlar ve kullanıcıya gösterilen açıklama ({ tr, en? }, ≤ 200).imports:nuvaka.shared.get(from, name)ile okunacak değerler. Okuma için kullanıcısharediznini vermiş ve kaynak uzantı kurulu olmalıdır.
triggers
Arka plan betiğini uyandıran olaylar. entry.background gerekir. Her öğe ya { "schedule": … } ya da { "event": … }'dir.
Zamanlama
| Biçim | Anlamı |
|---|---|
every Nm | N dakikada bir; 15 ≤ N ≤ 1440 (ör. every 15m, every 360m) |
hourly | saat başı |
daily HH:MM | her gün yerel saatle (ör. daily 09:00) |
weekly mon HH:MM | haftada bir; gün mon tue wed thu fri sat sun |
Tetiklenince arka planda nuvaka.on('schedule', ({ schedule, at }) => …) çalışır; schedule manifestteki metin, at tetiklenme anı (unix saniye). Uygulama kapalıyken kaçırılan zamanlama bir sonraki açılışta bir kez telafi edilir.
Olaylar
| Olay | Ne zaman | Gereken izin |
|---|---|---|
app.started | arka plan başladığında (uygulama açılışı) | — |
app.focused | uygulama penceresi odak aldığında | — |
network.online | ağ bağlantısı geri geldiğinde | — |
notes.changed | notlar değiştiğinde | nuvaka.notes: read |
cloud.fileAdded | Nuvaka bulutuna dosya eklendiğinde | nuvaka.cloud: read |
mail.received | mail geldiğinde | nuvaka.mail: read |
clipboard.added | pano havuzuna öğe eklendiğinde | nuvaka.clipboard: read |
Sunucu kaynaklı olaylar ilgili okuma izni verilmemişse uzantıya iletilmez. Olay yükü değişikliğin kendisini taşımaz; veriyi API ile yeniden oku.
settings
Kullanıcının değiştirebileceği ayarlar. Ayar ekranını uygulama çizer; değerler cihazlar arası aynıdır ve nuvaka.settings.get() ile okunur (kullanıcı değer vermediyse default).
| Alan | Kural |
|---|---|
key | 1–40 karakter |
type | string, number, bool, select |
label | { tr, en? }, her biri ≤ 80 |
default | varsayılan değer |
options | seçenekler dizisi; select için zorunlu |
"settings": [
{ "key": "greeting", "type": "string", "label": { "tr": "Selamlama", "en": "Greeting" }, "default": "Merhaba" },
{ "key": "channel", "type": "select", "label": { "tr": "Bildirim" }, "default": "push", "options": ["push", "local", "none"] }
]
Ek kurallar
JSON şemasıyla ifade edilemeyen ama sunucu ve lint tarafından uygulanan kurallar:
entryveiconyolları pakette bulunmalı.entry.uivarsapages;entry.backgroundvarsabackgroundizni;triggersvarsaentry.backgroundzorunlu.every Nmiçin 15 ≤ N ≤ 1440.- Aynı izin kapsamı iki kez yazılamaz.
idöneki yükleyen hesabın kullanıcı adı olmalı.netalan adları.local,.localhost,.internalolamaz.
Nuvaka Apps API v1 · son güncelleme 2026-09-27