Skip to content

Build with it

One page per capability. Each opens with what you can build and the code to build it, and keeps the pod-level detail folded away at the bottom for when something surprises you.

Every page shows its code under Client and API tabs. Pick one and the whole site follows — see Client or API? if you have not chosen yet.

  • Sign in & accounts


    Getting a WebID to call with, staying signed in, and handling several accounts on one device.

  • App access


    What your app asks the user for — a level on the whole pod, on folders, or on a data module — and what each verb needs.

  • Resources & containers


    Read, write, patch, list, copy and stream. The verbs everything else is built on.

  • Contacts


    Address books, contacts and groups as vCard RDF — interoperable with other Solid contact apps.

  • Tickets


    A wallet on the pod: passes, their artifacts and images.

  • Sharing


    Give someone access to a resource, track what you have given and received, share by link.

  • Notifications


    The Linked Data Notifications inbox — offers, withdrawals and access requests.

  • Access control


    What WAC and ACP actually enforce, and which one your pod server speaks.

  • Type index


    How data is found on a pod by type instead of by path.

  • Telemetry


    The pluggable sink, what is reported, and what never is.

Two things that apply everywhere

Every call takes a webId first. A device can hold several signed-in Solid identities at once, so the WebID chooses which session signs the request. Keep the one you got at sign-in.

Every client call needs a grant. The user approves what your app may do on Solid Share's consent screen, and a call outside that scope fails with NotPermissionException. Ask for the least you need; App access has the verb table.

The client path waits for its binding by itself. Every call is a suspend function that waits for the bound service, so nothing has to be collected first. Each client still exposes a Flow<Boolean> of its connection for UI that wants to show it:

resources.resourceServiceConnectionState().collect { connected -> render(connected) }

The api path has no binding at all — there is no service between your app and the pod.

Not finding it here?