{
  "extensions": [
    {
      "id": "hello-world",
      "name": "Hello World",
      "version": "1.0.0",
      "description": "A complete example Struxa extension built with React.",
      "author": "struxa",
      "permissions": [
        "api:protected",
        "hook:server.created"
      ],
      "readme": "# hello-world\n\nA complete example [Struxa](https://struxa.cloud) extension built with React.\n\n## What it does\n\n- Adds a **Hello World** page to the panel sidebar\n- Injects a **widget** into the server overview via the `server.overview.after` slot\n- Registers a `server.created` hook that logs when a new server is created\n- Exposes a `ping` API procedure callable from the UI\n\n## Development\n\nInstall dependencies (requires Node 18+):\n\n```sh\nnpm install\n```\n\nStart the dev watcher:\n\n```sh\nnpm run dev\n```\n\nBuild for production:\n\n```sh\nnpm run build\n```\n\nThe built output lands in `dist/`. This directory is committed so the [Struxa registry](https://github.com/struxadotcloud/struxa) can include this extension as a git submodule.\n\n## Structure\n\n```\nsrc/\n  main.tsx      # page entry — calls createExtension(<App />)\n  App.tsx       # page component\n  widget.tsx    # slot widget entry\nserver/\n  index.js      # server-side hooks + oRPC router\nmanifest.json   # extension manifest\ndist/           # built output (committed; rebuilt by CI on push to main)\n```\n\n## SDK\n\nUses [`@struxa/extension-sdk`](https://www.npmjs.com/package/@struxa/extension-sdk) for `createExtension()`, `useHostBridge()`, and `createHostClient()`.\n\nBuilt with [`@struxa/extension-build`](https://www.npmjs.com/package/@struxa/extension-build) (`struxa build`).\n",
      "tarball": "tarballs/hello-world-1.0.0.tgz",
      "signature": "oNxF6PtcsbLUYbqHu0A6f6WJIVYtMKpBmtOOQI/B+siisBiolm8ybmYW5955Q8RYTjtpinIoT+T4Y+do2S46CQ=="
    }
  ]
}
