Nibor / Docs / NAS (the App Spec) Book a demo

NAS: one document that IS the app

Every Nibor app is a single JSON document, the Nibor App Spec. Models, pages, permissions, navigation, automations and theme live in one place, and everything else (database, API, UI) is compiled from it.

Why one document

What is inside (excerpt)

{
  "app":   { "name": "Warehouse Stock Manager", "description": "..." },
  "models": [
    { "name": "Product",
      "fields": [ { "name": "sku", "type": "text", "required": true }, ... ],
      "access": { "read": "authenticated", "write": "staff" } }
  ],
  "views": [
    { "route": "/", "title": "Dashboard", "layout": "dashboard", ... }
  ],
  "appAuth": { "audience": "org", "roles": [ ... ], "profilesVisibility": "own" },
  "storage": { "rules": [ ... ] },
  "scheduledJobs": [ { "name": "digest", "kind": "digest", "schedule": "*/10 * * * *", "digest": { ... } } ],
  "emailTemplates": [ ... ],
  "dbViews": [ ... ],
  "automations": [ ... ]
}

Who the app is for: appAuth

Security you declare

Things that run on their own

Live data

Any dataSource can declare "realtime": true. Components bound to it (tables, lists, feeds, charts) refresh the moment a row is inserted, updated or deleted, without a page reload. The stream is filtered by the same row-level security as every query, so a member only ever receives rows they could have read anyway. Ask the Studio chat to make a page live, or set the flag in the document and push it.

"dataSources": [{ "name": "messages", "model": "Message", "order": "createdAt.desc", "realtime": true }]

Forms and functions

What changed

Working with it directly

The Studio's NAS Editor shows the live document; Code View shows what it compiles to. Most people never need either, but nothing is hidden.