segfault labs

Permissions

Request the least your module needs. Each permission is enforced by the host on every call — declaring it in the manifest is necessary but not sufficient; the host re-checks at call time, so a tampered frontend can't grant a module anything its manifest didn't declare.

PermissionLets the module...
data:nowPlayingread the current track / playback state
data:controllersread connected controller input
data:metricsread live FPS / system metrics
data:sessionread game-session events
ui:notifyraise host notifications / toasts
action:playbackcontrol playback (play / pause / next / previous)
net:fetchhost-proxied HTTP, limited to allowedDomains

Storage is always available — namespaced to your module, so other modules can't read it. It needs no permission.

net:fetch and allowedDomains

net:fetch is the only permission that requires an extra field: a non-empty allowedDomains list of bare hosts. Raw browser fetch is blocked by the module's CSP, so all network traffic goes through ps.host.fetch, which only reaches those hosts. See the networking section of the SDK reference and the security model for the full set of guards.

{
  "permissions": ["net:fetch"],
  "allowedDomains": ["api.open-meteo.com"]
}