Toppfeltene
schema_version— påkrevd. Kontraktversjonen manifestet er skrevet mot. I dag"0.1".name— påkrevd. App-navnet: små bokstaver, tall og bindestrek (DNS-navn), unikt per konto. Blir adressen<name>.nysky.app.runtime—"workerd"(default) for JS/TS, eller"container"for egen Dockerfile.nivaa—personlig/gruppe/offentlig(= Fri). Utelatt = personlig for nye apper. Gamle navn (telt/hytte/hus) godtas og normaliseres. Se prisene og nivåforskjellene.main— workerd: entrypoint som ES-modul, f.eks.src/index.ts. Modulen eksporterer enfetch-handler.compatibility_date— workerd: dato (YYYY-MM-DD) som fryser kjøretidssemantikken — appen oppfører seg likt til du selv bumper den.compatibility_flags— workerd-flagg, f.eks.["nodejs_compat"]— kreves fornode:-API-er, blant annet TCP mot databasen.release_command— container: kommando som kjøres isolert med appens bindings én gang per deploy, FØR trafikk flyttes — typisk migrasjoner.region / jurisdiksjon / sone— no1 / NO / INTERN. Hjemregion, jurisdiksjon og datasone. Kun norske verdier i dag; feltene finnes i kontrakten fra første dag.posture— utgår — utelat feltet. Loggvernet styres nå av[logs]og kontoens loggnøkkel.
[container] — egen Dockerfile
dockerfile— sti til Dockerfile. Dockerfilegit— repoet på git.nysky.no plattformen bygger fra (<eier>/<repo>). Satt =nysky deploybygger imaget automatisk.ref— gren/tag som bygges. mainbase—"node22-chromium": plattform-basisimage (ARGBASE_IMAGE) — Chromium ferdig installert, hentet fra norsk register.port— porten appen lytter på. 3000health_path— GET-rute for helsesjekk ved oppstart. /
[http], [build] og [static]
[http] — ruteatferd (begge kjøretider)
max_body_mb— maks request-body, for filopplasting. 1response_timeout_s— lesetimeout mot appen — sett ≥ 90 for tunge ruter (PDF-generering). 60sse—truegir strømmevennlig oppsett (Server-Sent Events). false
[build] — byggsteg før bundling
command— byggkommandoen, f.eks."npm run build". Kjøres isolert i plattformens byggemiljø (node 22, npm). Husk install-steget:"npm install --no-audit --no-fund && node build.mjs".output— mappa med ferdig bundle. dist/
[static] — statisk nettsted
framework— preset som fyller build + dir:astro,next,vite,sveltekit,eleventy,hugo,jekyll,plain.dir— mappa med de bygde filene (f.eks.dist).build— byggkommando, alternativ til [build].spa— single-page app: server index.html for ukjente ruter. falsenot_found— egen 404-side relativt til dir. Ignoreres når spa=true.
Statisk vs. dynamisk er et byggevalg, ikke et eget nivå — samme pris.
Data — [[datastores]], [[kv]] og [[buckets]]
[[datastores]] — PostgreSQL
name— påkrevd. Logisk navn; appen får bindingen<NAVN>_DATABASE_URL.rls— Row-Level Security. true: på, med én eierrolle."enforced": egen kjøretidsrolle så policyene faktisk biter — appen får da også<NAVN>_MIGRATE_URL(eierrollen) til migrasjoner.false: av.extensions— Postgres-utvidelser, f.eks.["pgcrypto"].
[[kv]] — nøkkel/verdi
name— påkrevd. Gir bindingenKV_<NAVN>_URL— et eget, isolert lager med ferdig tabellkv(k text primary key, v jsonb, expires_at timestamptz).
[[buckets]] — filer (S3-kompatibelt)
name— påkrevd. Gir fire bindings:<NAVN>_S3_ENDPOINT,_ACCESS_KEY,_SECRET_KEY,_BUCKET. Alle S3-klienter virker (SigV4).versioning— ignorert — reservert. Trenger appen objekthistorikk, modellér den i datastore-laget.
[vars] og secrets
[vars]— ikke-hemmelige miljøvariabler, rett i manifestet.secrets— KUN navnene, f.eks.secrets = ["API_NOKKEL"]. Verdiene settes skriv-kun mednysky secret putog lever aldri i repo.
Nett — [[routes]], [[kall]] og egress
[[routes]] — offentlige adresser
hostname— påkrevd. Eget domene, f.eks."app.dittdomene.no". Pek CNAME motinn.nysky.no; HTTPS-sertifikat utstedes og fornyes automatisk. Uten [[routes]] svarer appen kun på plattform-subdomenet.path— sti-prefiks ruten gjelder. /
[[kall]] — app til app
app— påkrevd. Navnet på en annen app på samme konto appen får kalle internt. Gir bindingenKALL_<APP>_URL. Kall går aldri på tvers av kontoer.
egress — utgående allowlist
egress = ["api.vipps.no"]: vertsnavnene appen får kontakte
over HTTPS. Uten listen når appen kun sine egne datastores og bøtter —
utgående nett er stengt som standard.
[[crons]] — faste jobber
schedule— påkrevd. Standard 5-felts cron, i UTC. F.eks."0 6 * * *".path— påkrevd. Ruten i appen som mottar POST-kallet.
Plattformen POST-er til pathen etter planen, med headeren
X-Nysky-Cron-Key lik appens NYSKY_CRON_KEY-binding
— verifiser den, så vet du at kallet kommer fra planleggeren. Inntil 4
jobber per app på alle betalte nivåer; på Personlig og Gruppe må
minuttfeltet være ett fast tall (tettest hver time), på Fri og Container er
frekvensen fri.
[auth] — innlogging levert av plattformen
mode—"gate": plattformen legger innlogging med nysky ID foran appen."app": appen integrerer egne brukere via OIDC og fårNYSKY_AUTH_*-bindings.allow— gate: hvem som slipper inn — eksakte e-poster ("kari@x.no") eller hele domener ("@firma.no"). TOM/utelatt liste = kun kontoens utviklere, på alle nivåer. Utvides live mednysky allow add— uten redeploy.gate_stier— gate: hvilke sti-prefikser som krever innlogging, f.eks.["/admin"]. Utelatt = hele appen gates.slett_webhook— path som mottar et signert varsel når en nysky ID slettes — POST med brukerenssub, så appen kan slette eller anonymisere brukerens data.client— mode=app:"public"(default, PKCE — ingenting hemmelig å lekke) eller"confidential".redirect_path— mode=app: OIDC-callback på appens host. /auth/callbackmethods— aktive metoder:passkeyogemail(begge er standard). Andre verdier er reserverte og avvises.signup / roles / login_host— reserverte — godtas, men håndheves ikke ennå.
Bak gaten kommer hver forespørsel med brukerens identitet i to headere:
X-Nysky-Auth-User (e-post) og X-Nysky-Auth-Sub
(stabil id). Appen trenger ingen egen innlogging — les headeren. På
gratis, Personlig og Gruppe er gaten alltid på; gate_stier
begrenser hvilke stier den dekker, men den kan ikke skrus av der.
[limits], [scaling] og [logs]
[limits]
memory_mb— minne per app. 128 (workerd)timeout_ms— request-timeout. 30 000 — rutetimeouten styres av[http].response_timeout_scpu_m— container: CPU-request i millicores. 250cpu_ms— ignorert — reservert.
[scaling]
max_replicas— maks antall parallelle instanser under last. 4; 1 = fast én instans. For container er > 1 en erklæring om at appen er statsløs.
[logs]
recipient— mottakernøkkel (age/X25519) appens logg krypteres til. Lag nøkkelpar mednysky logs keygen— den registrerer samtidig nøkkelen på kontoen, og da arver alle appene dine den automatisk uten dette feltet. Privatnøkkelen forlater aldri deg; les loggen mednysky logs.
[ci] og [livslop]
[ci] — plattform-kjørt test-gate
command— påkrevd. Kommandoennysky ci runkjører i plattformens byggemiljø i Norge (node 22, corepack) — f.eks."pnpm -r test". Ingen egen CI-runner å drifte.git / ref— repo og gren som testes. Arver[container].git/.refnår de er satt. main
[livslop] — tidsbegrenset app
slettes_etter— påkrevd. Levetid ("30d","6m","1y") eller fast ISO-dato. Ved utløp parkeres appen (data trygt); den kan hentes tilbake.varsle_for— hvor lenge før utløp eieren varsles på e-post. 3dhard_slett—truesletter umiddelbart ved utløp i stedet for å parkere. false
Schemaet er kontrakt: nye felter kommer aldri uten versjonsbump og changelog-oppføring.
Ukjente felter avvises ved deploy — skrivefeil oppdages med én gang.