Docs

Security

What a service on CrabTalk can reach, where its secrets go, and how every request it sends names it.

What holds for every service, yours or one you call. Each line links to where it is spelled out.

The sandbox

  • Each call runs in a fresh WebAssembly instance; nothing in memory survives it. See The sandbox.
  • Host calls are discovered from the linked Wasm imports; deployment is refused when the host cannot serve one. Outbound HTTP destinations and secrets remain restricted by crab.toml. Service calls enforce the target deployment's visibility and tool access.
  • Another service's state and database cannot be named.

Secrets

  • A secret is written into a request by the host on the way out; the service never holds its value. See Secrets in code.
  • A secret is sent only to the hosts an owner set for it, each named in full, never through a pattern. See Secrets.
  • A secret value is never read back once set, and a call's logs, record and replay hold no secret.

Hosts

  • A service declares the hosts it fetches by name, as *.example.com, or as *. See Hosts.
  • On Cloud, berm.http.fetch refuses a loopback, private or link-local address, whatever declares the host.
  • Every request a service sends from Cloud carries CrabTalk-Service: <owner id>/<name>, which the service cannot change. A site receiving one can tell which service sent it.

The egress design article explains the wildcard-host and request-attribution tradeoffs.