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

AlanTürZorunluKural
idmetin✓<yayıncı>.<ad>; yayıncı [a-z0-9][a-z0-9_-]{1,31}, ad [a-z0-9][a-z0-9-]{1,39}
namemetin✓2–40 karakter
versionmetin✓semver x.y.z, ön ek yok; her yükleme bir öncekinden büyük
apiVersiontam sayı✓1
minAppVersionmetinsemver; uzantının gerektirdiği en düşük Nuvaka uygulaması sürümü
description{ tr, en? }✓tr zorunlu; her biri 1–300 karakter
storeCategorymetin✓productivity, developer, files, communication, finance, media, games, system, education, other
iconmetin✓paketteki .svg ya da .png yolu
homepagemetinhttps:// adresi, 8–300 karakter
entry{ ui?, background? }✓en az biri; paketteki dosya yolları (ui: .html/.htm, background: .js/.mjs)
pagesdizientry.ui varsa ✓1–10 sayfa: { id, title: { tr, en? }, icon? }
permissionsdizien çok 30; her öğe tek izin + reason
storage{ quotaMB }1–100 MB; yazılmazsa 10
shared{ exports?, imports? }uzantılar arası paylaşım
triggersdizien çok 10; entry.background gerekir
settingsdizien çok 30 ayar
$schemametineditö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.ui varsa pages zorunludur. Her sayfa Uygulamalar menüsünde yayıncı başlığı altında bir öğedir; hepsi aynı HTML dosyasını açar. Açık sayfa nuvaka.ready bağlamında (ctx.page) gelir, değişince nuvaka.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.background varsa background izni 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: read ve files: write ayrı kapsamlardır, ikisi birlikte istenebilir.
  • net: 1–20 tam alan adı, küçük harf. *, IP adresi, localhost ve .local/.localhost/.internal ile biten adlar kabul edilmez.
  • shared izni manifestte yazılmaz; shared.imports varsa 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ın nuvaka.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ı shared iznini 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çimAnlamı
every NmN dakikada bir; 15 ≤ N ≤ 1440 (ör. every 15m, every 360m)
hourlysaat başı
daily HH:MMher gün yerel saatle (ör. daily 09:00)
weekly mon HH:MMhaftada 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

OlayNe zamanGereken izin
app.startedarka plan başladığında (uygulama açılışı)—
app.focuseduygulama penceresi odak aldığında—
network.onlineağ bağlantısı geri geldiğinde—
notes.changednotlar değiştiğindenuvaka.notes: read
cloud.fileAddedNuvaka bulutuna dosya eklendiğindenuvaka.cloud: read
mail.receivedmail geldiğindenuvaka.mail: read
clipboard.addedpano havuzuna öğe eklendiğindenuvaka.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).

AlanKural
key1–40 karakter
typestring, number, bool, select
label{ tr, en? }, her biri ≤ 80
defaultvarsayılan değer
optionsseç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:

  • entry ve icon yolları pakette bulunmalı.
  • entry.ui varsa pages; entry.background varsa background izni; triggers varsa entry.background zorunlu.
  • every Nm için 15 ≤ N ≤ 1440.
  • Aynı izin kapsamı iki kez yazılamaz.
  • id öneki yükleyen hesabın kullanıcı adı olmalı.
  • net alan adları .local, .localhost, .internal olamaz.

Nuvaka Apps API v1 · son güncelleme 2026-09-27