Build for teams, not just users
Workspaces out of the box·Invite by email — join with a click·Roles that actually gate the work
A workspace model that fits any B2B product
Drop-in switcher·Invite from your server·Render members in your UI
tsx
1import { SelectedTeamSwitcher } from "@stackframe/stack";2 3export default function Layout({ children }) {4 // Picks the active workspace and remembers it for next time.5 return (6 <>7 <header><SelectedTeamSwitcher /></header>8 {children}9 </>10 );11}Everything you need to ship B2B
Workspaces users understand·Invites that don't get stuck·Roles that hold up under audit
Workspace/Switcher
AC
Acme Co24
Active workspace
Acme Co
24 members · /team/acme
Projects12
Pending invites3
Open issues47
01·Workspaces
One switcher. Every workspace your user belongs to.
- A drop-in switcher that remembers the active workspace across visits
- Deep-link straight into a workspace — or keep one global default
- Different display name and avatar per workspace for the same person
Workspace switcherPer-workspace profilePersistent selection
Acme Co/Invite teammate
Send an invite
email@company.com
Magic link emailed · join with one click
Maya's inbox
Waiting for an invite…
Team members3 members
AL
Ada LovelaceTP
Theo ParkRS
Riya Shah02·Invites
Invite by email. They join with one click.
- Send a branded magic-link invite from your server
- New users sign up and land inside the workspace automatically
- See who's been invited, who's pending, and who's joined
Magic-link invitesAuto sign-upPending list
Acme Co/Roles
TP
Theo Park
theo@acme.com
Member
Admin
System permissions1 / 6 granted
$invite_members
Invite teammates
$read_members
View members
$update_team
Update workspace
$remove_members
Remove members
$manage_api_keys
Manage API keys
$delete_team
Delete workspace
user.usePermission(team, "$invite_members")
blockedInvite teammate
Action gated · requires permission
03·Roles & permissions
Roles you define. Gates that actually hold.
- Six built-in permissions for the basics — invite, remove, update, delete
- Compose your own roles in the dashboard and nest the built-ins inside
- Check a permission once on the client and again on the server — same answer
Built-in permissionsCustom rolesServer-checked
Ready to ship for teams?
Workspaces, invites, and roles — without the months it usually takes.
Get started for freeExplore other apps
View allFraud Protection
Protect your project from fraud and abuse
Session Replays
Watch real user sessions to understand how people use your app
Clickmaps
Visualize where users click across your app
Payments
Payment processing and subscription management
Webhooks
Real-time event notifications and integrations
Data Vault
Secure storage for sensitive user data