Skip to content

Workspaces & Collaboration

Workspaces are the primary unit of collaboration in inboard. Each workspace groups related documents and has its own set of members with defined roles.

RolePermissions
ViewRead workspace content. Cannot modify documents or manage members.
EditRead and modify workspace content. Cannot manage members.
AdminFull access. Can manage members, modify content, and configure the workspace.

The workspace owner (creator) has implicit Admin permissions and is the only user who can delete the workspace.

Terminal window
curl -X POST http://localhost:8080/api/v1/workspaces \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Q1 Planning", "description": "Quarterly planning documents"}'

Add a member:

Terminal window
curl -X POST http://localhost:8080/api/v1/workspaces/{id}/members \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"user_id": "user-uuid", "role": "edit"}'

Update a member’s role:

Terminal window
curl -X PUT http://localhost:8080/api/v1/workspaces/{id}/members/{user_id} \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"role": "admin"}'

Remove a member:

Terminal window
curl -X DELETE http://localhost:8080/api/v1/workspaces/{id}/members/{user_id} \
-H "Authorization: Bearer $TOKEN"

Documents in inboard are local-first. This means:

  • Content is stored on user machines, not on the server.
  • The server manages access control, determining who can view or edit each workspace.
  • Real-time collaboration uses WebSocket connections to relay sync traffic between clients.
  • The server never stores document content. If the server is unavailable, users can continue working locally and sync when it comes back.

Workspaces support threaded discussions. Threads can be resolved to track completed conversations.

Terminal window
# Create a thread
curl -X POST http://localhost:8080/api/v1/workspaces/{id}/threads \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Should we revise the revenue forecast?"}'
# Add a comment
curl -X POST http://localhost:8080/api/v1/workspaces/{id}/threads/{tid}/comments \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Yes, updated numbers are in the latest model."}'
# Resolve a thread
curl -X PATCH http://localhost:8080/api/v1/workspaces/{id}/threads/{tid} \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"resolved": true}'

The inboard app connects to the collaboration server via WebSocket:

UPGRADE /api/room/{workspace_id}?token=JWT

This connection handles real-time document synchronization between all connected clients.

See Workspace API for the complete endpoint reference.