Skip to main content
You don’t declare capabilities in a manifest — there isn’t one. What your TEE contract can do is decided in two places, both enforced inside the TEE at call time. Your contract runs in one of the tenant-* linker worlds, chosen from the host interfaces it imports in world.wit. Import http and your contract is linked against the tenant-http world; import nothing beyond the base and you get tenant-base (kv-store, logging, tenant-context).
world your-contract {
  import host:tenant/tenant-context@1.0.0;
  import host:interfaces/logging@2.1.0;
  import host:interfaces/kv-store@2.1.0;
  import host:interfaces/http@2.1.0;   // ← opting into outbound HTTP
}
On top of that, the TEE runtime enforces a capability ceiling — privileged interfaces (signing, user profile, …) are never linked into tenant worlds. See Host API → z-namespace for the full list.