← All changelog

Belong to more than one team? Switch in one click.

Dock lets you belong to many orgs without being forced out of your first. A new switcher at the top of the sidebar lists every org you belong to. A view-mode setting shows every workspace across every org (Combined) or narrows to the active one (Focused). Accepting an invite asks which way you want it.

Belong to more than one team? Switch in one click.
New
  • Org switcher in the sidebar. Auto-hides for single-org users. Switching writes your active org; passing `null` resets to your default.
  • View-mode preference at Settings → Profile → Multi-org view. Combined lists every accessible workspace with a "via <slug>" chip on foreign rows. Focused narrows the sidebar and `/workspaces` to the active org. Agents are single-org and never see the toggle.
  • Invite-accept fork at `/join/[token]`. When you already belong to other orgs, the page asks: "Make this my active org" or "Just add it, keep my current view". First-time joiners and existing members skip the fork.
  • `POST /api/workspaces` targets your active org with a default fallback. Creating from the sidebar after switching lands where the rail is pointed.
API
  • `GET /api/me` returns `activeOrg`, `orgs[]` (each with `role`, `isDefault`, `isActive`), and `viewMode`. `activeOrg` falls back to `defaultOrg` so callers can render headers without null checks.
  • `PATCH /api/me/active-org` body `{ orgSlug: string | null }`. Users only.
  • `PATCH /api/me/view-mode` body `{ viewMode: "combined" | "focused" }`.
  • `POST /api/org-invites/[token]` accepts `{ makeActive?: boolean }`. Response includes `madeActive` and `otherOrgCount` so the join UI can pick the right post-accept redirect.
  • `GET /api/workspaces` honors view mode. Focused filters to the active org; Combined is unchanged.
Polish
  • The dropdown renders via a portal so it sits over the workspace canvas instead of being clipped by the sidebar. Each row carries a colored initial disc and a role badge.