<StatisfyProvider> (except the standalone createProjectClient).
ProjectModule
The pre-assembled, ready-to-render project view.
It renders a header, a progress meter, a milestone journey, and the task list — and writes edits back through the gateway, scoped to the session’s customer.
Headless: useProject
For full control of the layout, use the hook. It resolves the project (by id, or via config when you omit the id), exposes the data, and provides optimistic mutations.
UseProjectResult
updateTask / updateProject apply your change optimistically (the UI updates immediately), then reconcile with the server’s full response — and roll the row back if the request fails. They reject on failure so you can show an inline error.Composable primitives
Build a bespoke layout from the same building blocksProjectModule uses. Each is schema-driven and styled with the SDK’s theme.
Two non-component helpers round it out:
formatFieldValue(schema, properties, display)— the display string for one field, usable outside React.useComments(projectId, taskId?)— the headless hook behindComments, returning{ comments, loading, error, posting, addComment, reload }.
Comments
Drop a comment thread onto a project or a single task.TaskDetail already includes one; use Comments directly when you’re composing your own layout.
addComment appends the server row on success and rejects on failure, so you can surface an inline error.
Standalone client: createProjectClient
When you want project data outside React (or your own state layer), use the client directly. It doesn’t need the provider — pass config explicitly.
Comments posted through the SDK are always customer-visible (
external). Editing a comment is REST-only — PATCH /sdk/v1/projects/{id}/comments/{commentId}, author-only — and has no client method in v0.