Settings Panel
A composable, themeable and customizable settings panel.
Preferences
Appearance
Customize how Notion looks on your device.
Language & Time
Language
Change the language used in the user interface.
Start week on Monday
This will change how all calendars in your app look.
Set timezone automatically using your location
Reminders, notifications and emails are delivered based on your time zone.
Timezone
Current timezone setting.
Desktop App
Open on start
Choose what to show when Notion starts or when you switch workspaces.
Open links in desktop app
You must have the macOS app installed
Privacy
Cookie settings
Customize cookies. See Cookie Notice for details.
Show my view history
People with edit or full access will be able to see when you've viewed a page. Leran more.
Profile discoverability
Users with your email can see your name and profile picture when inviting you to a new workspace. Learn more.
Supported Features
- Account settings
- Update/delete account
- Change password
- Device sessions
- Passkeys management
- Link social accounts
- Theme select
- Localization support for
EN,DE,ES - Timezone support
- Workspace settings
- Update/delete/leave workspace
- Members & scopes management
- Teamspaces management
- Billing
- Payment method, billing address, billing email
- Plan upgrade / change
- Stripe integration
Installation
Anatomy
<SettingsProvider adapters={adapters}>
<SettingsSidebar>
<SettingsSidebarGroup>
<SettingsSidebarTitle>{/* Your sidebar title */}</SettingsSidebarTitle>
<SettingsTab />
<SettingsTab />
<SettingsTab />
</SettingsSidebarGroup>
</SettingsSidebar>
<SettingsContent>
<SettingsSection>
<SettingsRule>{/* Your settings rule 1 */}</SettingsRule>
<SettingsRule>{/* Your settings rule 2 */}</SettingsRule>
<SettingsRule>{/* Your settings rule 3 */}</SettingsRule>
</SettingsSection>
<SettingsSection>
<SettingsRule>{/* Your settings rule 4 */}</SettingsRule>
<SettingsRule>{/* Your settings rule 5 */}</SettingsRule>
</SettingsSection>
</SettingsContent>
</SettingsProvider>Examples
Notion Settings Panel
Preferences
Appearance
Customize how Notion looks on your device.
Language & Time
Language
Change the language used in the user interface.
Start week on Monday
This will change how all calendars in your app look.
Set timezone automatically using your location
Reminders, notifications and emails are delivered based on your time zone.
Timezone
Current timezone setting.
Desktop App
Open on start
Choose what to show when Notion starts or when you switch workspaces.
Open links in desktop app
You must have the macOS app installed
Privacy
Cookie settings
Customize cookies. See Cookie Notice for details.
Show my view history
People with edit or full access will be able to see when you've viewed a page. Leran more.
Profile discoverability
Users with your email can see your name and profile picture when inviting you to a new workspace. Learn more.
API Reference
SettingsProvider
A provider that supplies adapters for each settings domain.
| Prop | Type | Description |
|---|---|---|
adapters* | SettingsAdapters | Domain-specific adapter objects for each settings group. |
SettingsAdapters
Each adapter is optional; only include the ones your application supports.
| Prop | Type | Description |
|---|---|---|
account | AccountAdapter | Account management. |
sessions | SessionsAdapter | Device session management. |
passkeys | PasskeysAdapter | Passkey management. |
connections | ConnectionsAdapter | Social connections management. |
workspace | WorkspaceAdapter | Workspace settings. |
people | PeopleAdapter | Member management. |
invitations | InvitationsAdapter | Invitation management. |
teamspaces | TeamspacesAdapter | Teamspace management. |
billing | BillingAdapter | Billing and subscription. |
uploadFile | (file: File) => Promise<void> | File upload handler. |
Account Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<AccountStore> | Retrieve the account data. |
update* | (data: Partial<Omit<AccountStore, "id">>) => Promise<void> | Update account fields. |
delete* | (data: { accountId: string; email: string }) => Promise<void> | Delete the account. |
sendEmailVerification* | (email: string) => Promise<void> | Send email verification. |
changePassword* | (data: { newPassword: string; currentPassword: string }) => Promise<void> | Change the password. |
setPassword | (newPassword: string) => Promise<void> | Set password (for OAuth-only accounts). |
Sessions Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<SessionRow[]> | Retrieve all active sessions. |
delete* | (token: string) => Promise<void> | Revoke a specific session. |
deleteAll* | () => Promise<void> | Revoke all sessions except current. |
Passkeys Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<Passkey[]> | Retrieve all passkeys. |
add* | () => Promise<boolean> | Add a new passkey. Returns success. |
update* | (data: { id: string; name: string }) => Promise<void> | Rename a passkey. |
delete* | (id: string) => Promise<void> | Delete a passkey. |
Connections Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<Connection[]> | Retrieve all connections. |
add* | (strategy: ConnectionStrategy) => Promise<void> | Add a new connection. |
delete* | (connection: Connection) => Promise<void> | Remove a connection. |
Workspace Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<WorkspaceStore> | Retrieve workspace data. |
update* | (data: Partial<Omit<WorkspaceStore, "id">>) => Promise<void> | Update workspace. |
delete* | (id: string) => Promise<void> | Delete workspace. |
leave* | (id: string) => Promise<void> | Leave workspace. |
resetLink* | () => Promise<void> | Reset the invite link. |
People Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<Memberships> | Retrieve all members. |
update* | (data: { id: string; memberId: string; role: Role }) => Promise<void> | Update a member's role. |
delete* | (data: { id: string; memberId: string }) => Promise<void> | Remove a member. |
Invitations Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<Invitations> | Retrieve all invitations. |
add* | (data: { emails: string[]; role: Role }) => Promise<void> | Send invitations. |
cancel* | (invitationId: string) => Promise<void> | Cancel an invitation. |
Teamspaces Adapter
| Method | Type | Description |
|---|---|---|
getAll* | () => Promise<Teamspaces> | Retrieve all teamspaces. |
add* | (data: { name: string; icon: IconData; description?: string; permission: TeamspacePermission }) => Promise<void> | Create a teamspace. |
update* | (data: { id: string; name?: string; icon?: IconData; description?: string; permission?: TeamspacePermission }) => Promise<void> | Update a teamspace. |
delete* | (teamspaceId: string) => Promise<void> | Delete a teamspace. |
leave* | (teamspaceId: string) => Promise<void> | Leave a teamspace. |
addMembers* | (data: { teamspaceId: string; userIds: string[]; role: TeamspaceRole }) => Promise<void> | Add members. |
updateMember* | (data: { teamspaceId: string; userId: string; role: TeamspaceRole }) => Promise<void> | Update a member's role. |
deleteMember* | (data: { teamspaceId: string; userId: string }) => Promise<void> | Remove a member. |
Billing Adapter
| Prop/Method | Type | Description |
|---|---|---|
stripePublishableKey | string | Stripe publishable key for Elements. |
getAll* | () => Promise<BillingStore> | Retrieve billing data. |
upgrade* | (plan: Plan, annual: boolean) => Promise<void> | Upgrade the plan. |
changePlan* | (plan: Plan) => Promise<void> | Change the plan. |
editMethod* | () => Promise<void> | Edit payment method. |
editBilledTo* | (address: BillingAddress & { businessName: string }) => Promise<void> | Edit billing address. |
editEmail* | (email: string) => Promise<void> | Edit billing email. |
toggleInvoiceEmails | (checked: boolean) => void | Toggle invoice email receipts. |
editVat | () => void | Edit VAT number. |
viewInvoice | () => void | View invoices. |
See schema definitions for:
SettingsPanel
The portal of the entire settings panel.
A SettingsPanel extends the <div> element.
SettingsSidebar
A SettingsSidebar extends the <div> element.
We offer some components for layout in sidebar:
SettingsSidebarGroup
A SettingsSidebarGroup extends the <div> element.
SettingsSidebarTitle
A SettingsSidebarTitle extends the <div> element.
SettingsTab
| Prop | Type | Description |
|---|---|---|
name* | string | Name of the tab. |
Icon* | React.ReactNode | Icon of the tab. |
isActive* | boolean | Whether the tab is active. |
onClick | () => void | Handler that is called when the tab is clicked. |
SettingsContent
A SettingsContent extends the <div> element.
We offer some components for layout in settings content:
SettingsSection
| Prop | Type | Default | Description |
|---|---|---|---|
title* | string | - | Name of the section. |
children | React.ReactNode | - | Section content. |
hideSeparator | boolean | false | Whether the separator below the title should be hidden. |
SettingsRule
| Prop | Type | Default | Description |
|---|---|---|---|
title* | string | - | Name of the rule. |
description\ | React.ReactNode | - | Description of the rule. |
children | React.ReactNode | - | Section content. |
plan | string | - | Plan information for the rule. |