← Advanced tutorial: build a routed reading list

2. Replace luastra.json

Navigation · State · Data · Host · about 30 minutes
four SDK modules · three host capabilities

The manifest admits rendering plus storage reads and writes; every imported module is declared on the exact source file that uses it.

When to use it

Replace the generated manifest before importing Navigation, State, Data, or Host.

  • Navigation, State, and Data are deterministic SDK modules and need no host capability.
  • storage.get and storage.set are separate permissions because reading and writing are separate effects.
  • This tutorial does not synchronize the browser URL; navigation.history belongs to the dedicated Browser and system Back recipe.

Focused example

{
  "schemaVersion": 2,
  "project": {
    "id": "dev.luastra.routed-reading-list",
    "entry": "app/main"
  },
  "sdk": {
    "contract": 1
  },
  "capabilities": ["storage.get", "storage.set", "ui.render"],
  "modules": [
    {
      "id": "app/main",
      "source": "src/main.luau",
      "dependencies": [
        "luastra/app",
        "luastra/data",
        "luastra/host",
        "luastra/navigation",
        "luastra/state",
        "luastra/ui"
      ]
    },
    {
      "id": "app/tests/reading-list",
      "source": "tests/smoke.luau",
      "dependencies": ["app/main"]
    }
  ],
  "tests": ["app/tests/reading-list"]
}

Complete inventory

View all pages in Advanced tutorial: build a routed reading list
← Previous: 1. Create the projectNext: 3. Replace src/main.luau →