- What app is this?
- What data does it store or operate on?
- Which TinyCloud services, spaces, paths, and actions does it need?
- Which other principals can receive derived delegations after sign-in?
Manifest v1 shape
manifest_version is optional for v1. If it is missing, SDKs should treat the
manifest as version 1.
backend section and no delegations[] section in manifest v1.
Backends, agents, workers, and peers can each provide their own manifest. Apps
compose those manifests before sign-in.
Fields
| Field | Required | Notes |
|---|---|---|
manifest_version | No | Schema version. Missing means 1. |
app_id | Yes | Stable app namespace. Also the default path prefix. |
name | Yes | Human-readable app or delegate name. |
description | No | Human and agent-readable description of what the app does and what its data means. |
did | No | Delegate DID for this manifest. If absent, permissions can still be requested, but no delegation target is created automatically. |
space | No | Default TinyCloud space for this manifest. Missing means applications. |
prefix | No | Path prefix override. Missing means app_id; "" disables prefixing. |
defaults | No | Default TinyCloud permission tier. Missing means true. |
expiry | No | Default permission expiry, using ms format such as 30d or 2h. |
permissions | No | Explicit permissions beyond defaults. |
includePublicSpace | No | Whether to include the public-space companion behavior. Missing means true. |
Permission entries
Permission entries identify TinyCloud resources by service, space, path, and actions.space is optional. If omitted, it inherits the manifest space, which itself
defaults to applications.
path is app-relative by default. With
app_id: "com.tinycloud.conversation-sync", the SQL entry above resolves to
com.tinycloud.conversation-sync/conversations. Set skipPrefix: true when a
path is already fully scoped in the target service namespace.
Actions can be short names like get, put, read, and write. The SDK
expands them into full TinyCloud action URNs when it resolves the manifest.
Descriptions are metadata. They do not affect authorization, but they give
consent UIs and agents context for why a permission exists.
Defaults
defaults defaults to true. The standard default tier includes app-scoped:
tinycloud.kvwithget,put,del,list, andmetadatatinycloud.sqlwithreadandwritetinycloud.capabilitieswithread
admin and all. Use
defaults: false when an app wants every requested permission to be explicit.
Spaces
The manifest default space isapplications. This means app data is scoped to
the user’s application space instead of the legacy/default user space.
When multiple manifests are composed, each manifest keeps its own app_id and
space defaults. If two manifests share an app_id, their permissions are
merged and deduped under the same app namespace. If they use different
app_id values, the composed request preserves those distinct namespaces.
Account registry
The SDK can include an implicit account-space registry grant. This is enabled by default when composing manifests:includeAccountRegistryPermissions: false to omit this implicit account
registry grant.
Composing manifests
Apps pass already-loaded manifests to the SDK. Network discovery is out of scope for the composer.- validates all manifests as v1
- expands default and explicit permissions
- applies
app_id/prefixpath prefixing - defaults missing spaces to
applications - dedupes equivalent permissions
- adds account registry permissions unless disabled
- records delegation targets for manifests that include
did
Sign-in and delegation materialization
Use the composed request when signing in:did can be materialized into a delegation:
materializeDelegation creates a session-key-signed UCAN when the target
permissions are a subset of the signed session grant. It does not fetch a
manifest and it does not deliver the delegation. Transport remains app logic:
POST to a backend, hand to an agent, send over a local channel, or any other
application-specific route.
SDK helpers
Core helpers:capabilityRequest takes precedence over manifest. If only manifest is
provided, the SDK composes it before sign-in.
Delegation helpers:
did.