
Grab your gear: The official Sanity swag store
Read Grab your gear: The official Sanity swag storeGreat question! Let me clarify the different approaches for multi-tenancy in Sanity, since there's an important distinction between workspaces and separate projects.
When you mention "multi clients," there are actually two architectural approaches:
1. Single Project with Multiple Datasets + Workspaces
This is what the tutorial you saw likely covered. You configure workspaces in your sanity.config.ts like this:
import {defineConfig} from 'sanity'
export default defineConfig([
{
projectId: 'abc123',
dataset: 'client-a',
name: 'client-a-workspace',
basePath: '/client-a',
title: 'Client A',
// ... schema and plugins
},
{
projectId: 'abc123',
dataset: 'client-b',
name: 'client-b-workspace',
basePath: '/client-b',
title: 'Client B',
// ... schema and plugins
},
])The problem: By default, all users can see all workspaces in the workspace switcher dropdown. To truly isolate clients from seeing each other's workspaces, you need Custom Roles (Enterprise plan only) to restrict dataset access. Even then, users will still see the same Studio URL and potentially the workspace switcher.
2. Separate Sanity Projects (True Isolation)
For complete isolation where clients can't see each other's Studios at all, you need separate Sanity projects - not just separate datasets. This means:
This is the approach if you want true "multi clients" where each client has zero visibility into other clients' existence.
If you need complete Studio isolation (which it sounds like you do), I'd recommend:
Create separate Sanity projects for each client - you can manage these from your organization dashboard
Deploy separate Studio instances for each project - either:
Use a single codebase with environment variables to configure which project each deployment connects to:
// sanity.config.ts
import {defineConfig} from 'sanity'
export default defineConfig({
projectId: process.env.SANITY_STUDIO_PROJECT_ID,
dataset: process.env.SANITY_STUDIO_DATASET || 'production',
// ... rest of config
})If you're on an Enterprise plan, you can use workspaces with Custom Roles and Content Resources to restrict access at the dataset level. However, this still shares the same Studio deployment, so users might see workspace names or the workspace switcher even if they can't access the content. You'd need to:
For true multi-tenancy where clients shouldn't see each other's Studios at all, separate projects with separate Studio deployments is the clearest path. Workspaces are great for internal team separation (dev/staging/prod, different departments, etc.) but not ideal for completely isolated client experiences without Enterprise features and additional customization.
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.
Content operations
Content backend


The only platform powering content operations
By Industry


Tecovas strengthens their customer connections
Build and Share

Grab your gear: The official Sanity swag store
Read Grab your gear: The official Sanity swag store