Files
supabase/packages/shared-data/pricing.ts
Alan Daniel 97e5f41ba8 Alan/debr 248 add iso27001 to security page (#45074)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES/NO

## What kind of change does this PR introduce?

Bug fix, feature, docs update, ...

## What is the current behavior?

Please link any relevant issues here.

## What is the new behavior?

Feel free to include screenshots if it includes visual changes.

## Additional context

Add any other context or screenshots.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added ISO 27001 certification badge to the footer alongside existing
compliance certifications
  * Updated Team plan to showcase ISO 27001 compliance alongside SOC2
* New ISO 27001 compliance information section available on the security
page

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-04-22 10:42:43 +08:00

807 lines
20 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
type Pricing = {
database: PricingCategory
auth: PricingCategory
storage: PricingCategory
edge_functions: PricingCategory
realtime: PricingCategory
dashboard: PricingCategory
security: PricingCategory
support: PricingCategory
}
type PricingCategory = {
title: string
icon: string
features: PricingFeature[]
}
type PricingFeature = {
title: string
key: FeatureKey
plans: {
free: boolean | string | string[]
pro: boolean | string | string[]
team: boolean | string | string[]
enterprise: boolean | string | string[]
}
usage_based: boolean
}
export type FeatureKey =
| 'database.dedicatedPostgresDatabase'
| 'database.unlimitedApiRequests'
| 'database.size'
| 'database.advancedDiskConfig'
| 'database.automaticBackups'
| 'database.pitr'
| 'database.pausing'
| 'database.branching'
| 'database.egress'
| 'auth.totalUsers'
| 'auth.maus'
| 'auth.userDataOwnership'
| 'auth.anonSignIns'
| 'auth.socialOAuthProviders'
| 'auth.customSMTPServer'
| 'auth.removeSupabaseBranding'
| 'auth.auditLogs'
| 'auth.basicMFA'
| 'auth.advancedMFAPhone'
| 'auth.thirdPartyMAUs'
| 'auth.saml'
| 'auth.leakedPasswordProtection'
| 'auth.singleSessionPerUser'
| 'auth.sessionTimeouts'
| 'auth.authHooks'
| 'auth.advancedSecurityFeatures'
| 'storage.size'
| 'storage.customAccessControls'
| 'storage.maxFileSize'
| 'storage.cachedEgress'
| 'storage.cdn'
| 'storage.transformations'
| 'storage.byoc'
| 'functions.invocations'
| 'functions.scriptSize'
| 'functions.numberOfFunctions'
| 'realtime.postgresChanges'
| 'realtime.concurrentConnections'
| 'realtime.messagesPerMonth'
| 'realtime.maxMessageSize'
| 'dashboard.teamMembers'
| 'security.platformAuditLogs'
| 'security.byoc'
| 'security.logRetention'
| 'security.logDrain'
| 'security.metricsEndpoint'
| 'security.soc2'
| 'security.iso27001'
| 'security.hipaa'
| 'security.privateLink'
| 'security.sso'
| 'security.uptimeSla'
| 'security.accessRoles'
| 'security.vanityUrls'
| 'security.customDomains'
| 'support.communitySupport'
| 'support.emailSupport'
| 'support.emailSupportSla'
| 'support.designatedSupport'
| 'support.onBoardingSupport'
| 'support.designatedCustomerSuccessTeam'
| 'support.securityQuestionnaireHelp'
export const pricing: Pricing = {
database: {
title: 'Database',
icon: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4',
features: [
{
key: 'database.dedicatedPostgresDatabase',
title: 'Dedicated Postgres Database',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'database.unlimitedApiRequests',
title: 'Unlimited API requests',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'database.size',
title: 'Database size',
plans: {
free: '500MB database size per project included',
pro: ['8GB disk size per project included', 'then $0.125 per GB'],
team: ['8GB disk size per project included', 'then $0.125 per GB'],
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'database.advancedDiskConfig',
title: 'Advanced disk config',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'database.automaticBackups',
title: 'Automatic backups',
plans: {
free: false,
pro: '7 days',
team: '14 days',
enterprise: 'Custom',
},
usage_based: false,
},
{
key: 'database.pitr',
title: 'Point in time recovery',
plans: {
free: false,
pro: '$100 per month per 7 days retention',
team: '$100 per month per 7 days retention',
enterprise: '$100 per month per 7 days retention, >28 days retention available',
},
usage_based: false,
},
{
key: 'database.pausing',
title: 'Pausing',
plans: {
free: 'After 1 week of inactivity',
pro: 'Never',
team: 'Never',
enterprise: 'Never',
},
usage_based: false,
},
{
key: 'database.branching',
title: 'Branching',
plans: {
free: false,
pro: '$0.01344 per branch, per hour',
team: '$0.01344 per branch, per hour',
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'database.egress',
title: 'Egress',
plans: {
free: '5GB included',
pro: ['250GB included', 'then $0.09 per GB'],
team: ['250GB included', 'then $0.09 per GB'],
enterprise: 'Custom',
},
usage_based: true,
},
],
},
auth: {
title: 'Auth',
icon: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4',
features: [
{
key: 'auth.totalUsers',
title: 'Total Users',
plans: {
free: 'Unlimited',
pro: 'Unlimited',
team: 'Unlimited',
enterprise: 'Unlimited',
},
usage_based: false,
},
{
key: 'auth.maus',
title: 'MAUs',
plans: {
free: '50,000 included',
pro: ['100,000 included', 'then $0.00325 per MAU'],
team: ['100,000 included', 'then $0.00325 per MAU'],
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'auth.userDataOwnership',
title: 'User data ownership',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.anonSignIns',
title: 'Anonymous Sign-ins',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.socialOAuthProviders',
title: 'Social OAuth providers',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.customSMTPServer',
title: 'Custom SMTP server',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.removeSupabaseBranding',
title: 'Remove Supabase branding from emails',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.auditLogs',
title: 'Auth Audit Logs',
plans: {
free: '1 hour',
pro: '7 days',
team: '28 days',
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.basicMFA',
title: 'Basic Multi-Factor Auth',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.advancedMFAPhone',
title: 'Advanced Multi-Factor Auth - Phone',
plans: {
free: false,
pro: ['$75 per month for first project', 'then $10 per month per additional projects'],
team: ['$75 per month for first project', 'then $10 per month per additional projects'],
enterprise: 'Custom',
},
usage_based: false,
},
{
key: 'auth.thirdPartyMAUs',
title: 'Third-Party MAUs',
plans: {
free: '50,000 included',
pro: ['100,000 included', 'then $0.00325 per MAU'],
team: ['100,000 included', 'then $0.00325 per MAU'],
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'auth.saml',
title: 'Single Sign-On (SAML 2.0)',
plans: {
free: false,
pro: ['50 included', 'then $0.015 per MAU'],
team: ['50 included', 'then $0.015 per MAU'],
enterprise: 'Contact Us',
},
usage_based: false,
},
{
key: 'auth.leakedPasswordProtection',
title: 'Leaked password protection',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.singleSessionPerUser',
title: 'Single session per user',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.sessionTimeouts',
title: 'Session timeouts',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'auth.authHooks',
title: 'Auth Hooks',
plans: {
free: 'Custom Access Token (JWT), Send custom email/SMS',
pro: 'Custom Access Token (JWT), Send custom email/SMS',
team: 'All',
enterprise: 'All',
},
usage_based: false,
},
{
key: 'auth.advancedSecurityFeatures',
title: 'Advanced security features',
plans: {
free: false,
pro: false,
team: false,
enterprise: 'Contact Us',
},
usage_based: false,
},
],
},
storage: {
title: 'Storage',
icon: 'M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4',
features: [
{
key: 'storage.size',
title: 'Storage',
plans: {
free: '1GB included',
pro: ['100GB included', 'then $0.021 per GB'],
team: ['100GB included', 'then $0.021 per GB'],
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'storage.cachedEgress',
title: 'Cached Egress',
plans: {
free: '5GB included',
pro: ['250GB included', 'then $0.03 per GB'],
team: ['250GB included', 'then $0.03 per GB'],
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'storage.customAccessControls',
title: 'Custom access controls',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'storage.maxFileSize',
title: 'Max file upload size',
plans: {
free: '50MB',
pro: '500GB',
team: '500GB',
enterprise: 'Custom',
},
usage_based: false,
},
{
key: 'storage.cdn',
title: 'Content Delivery Network',
plans: {
free: 'Basic CDN',
pro: 'Smart CDN',
team: 'Smart CDN',
enterprise: 'Smart CDN',
},
usage_based: false,
},
{
key: 'storage.transformations',
title: 'Image Transformations',
plans: {
free: false,
pro: ['100 origin images included', 'then $5 per 1000 origin images'],
team: ['100 origin images included', 'then $5 per 1000 origin images'],
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'storage.byoc',
title: 'Bring your own storage provider',
plans: {
free: false,
pro: false,
team: false,
enterprise: true,
},
usage_based: false,
},
],
},
edge_functions: {
title: 'Edge Functions',
icon: 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4',
features: [
{
key: 'functions.invocations',
title: 'Invocations',
plans: {
free: '500,000 included',
pro: ['2 Million included', 'then $2 per 1 Million'],
team: ['2 Million included', 'then $2 per 1 Million'],
enterprise: 'Custom',
},
usage_based: true,
},
],
},
realtime: {
title: 'Realtime',
icon: 'M15.042 21.672L13.684 16.6m0 0l-2.51 2.225.569-9.47 5.227 7.917-3.286-.672zM12 2.25V4.5m5.834.166l-1.591 1.591M20.25 10.5H18M7.757 14.743l-1.59 1.59M6 10.5H3.75m4.007-4.243l-1.59-1.59',
features: [
{
key: 'realtime.postgresChanges',
title: 'Postgres Changes',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'realtime.concurrentConnections',
title: 'Concurrent Peak Connections',
plans: {
free: '200 included',
pro: ['500 included', 'then $10 per 1000'],
team: ['500 included', 'then $10 per 1000'],
enterprise: 'Custom concurrent connections and volume discount',
},
usage_based: true,
},
{
key: 'realtime.messagesPerMonth',
title: 'Messages Per Month',
plans: {
free: '2 Million included',
pro: ['5 Million included', 'then $2.50 per Million'],
team: ['5 Million included', 'then $2.50 per Million'],
enterprise: 'Volume discounts on messages',
},
usage_based: true,
},
{
key: 'realtime.maxMessageSize',
title: 'Max Message Size',
plans: {
free: '256KB',
pro: '3MB',
team: '3MB',
enterprise: 'Custom',
},
usage_based: false,
},
],
},
dashboard: {
title: 'Dashboard',
icon: 'M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4',
features: [
{
key: 'dashboard.teamMembers',
title: 'Team members',
plans: {
free: 'Unlimited',
pro: 'Unlimited',
team: 'Unlimited',
enterprise: 'Unlimited',
},
usage_based: false,
},
],
},
security: {
title: 'Platform Security and Compliance',
icon: 'M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z',
features: [
{
key: 'security.byoc',
title: 'BYO cloud',
plans: {
free: false,
pro: false,
team: false,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.logRetention',
title: 'Log retention (API & Database)',
plans: {
free: '1 day',
pro: '7 days',
team: '28 days',
enterprise: '90 days',
},
usage_based: false,
},
{
key: 'security.logDrain',
title: 'Log Drain',
plans: {
free: false,
pro: ['$60 per drain per month', '+ $0.20 per million events', '+ $0.09 per GB egress'],
team: ['$60 per drain per month', '+ $0.20 per million events', '+ $0.09 per GB egress'],
enterprise: 'Custom',
},
usage_based: true,
},
{
key: 'security.platformAuditLogs',
title: 'Platform Audit Logs',
plans: {
free: false,
pro: false,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.metricsEndpoint',
title: 'Metrics endpoint',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.soc2',
title: 'SOC2',
plans: {
free: false,
pro: false,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.iso27001',
title: 'ISO 27001',
plans: {
free: false,
pro: false,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.hipaa',
title: 'HIPAA',
plans: {
free: false,
pro: false,
team: 'Available as paid add-on',
enterprise: 'Available as paid add-on',
},
usage_based: false,
},
{
key: 'security.privateLink',
title: 'AWS PrivateLink',
plans: {
free: false,
pro: false,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.sso',
title: 'SSO',
plans: {
free: false,
pro: false,
team: 'Contact Us',
enterprise: 'Contact Us',
},
usage_based: false,
},
{
key: 'security.uptimeSla',
title: 'Uptime SLAs',
plans: {
free: false,
pro: false,
team: false,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.accessRoles',
title: 'Access Roles',
plans: {
free: 'Owner, Admin, Developer',
pro: 'Owner, Admin, Developer',
team: 'Owner, Admin, Developer, Read-only, Predefined project scoped roles',
enterprise: 'Custom project scoped roles',
},
usage_based: false,
},
{
key: 'security.vanityUrls',
title: 'Vanity URLs',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'security.customDomains',
title: 'Custom Domains',
plans: {
free: false,
pro: '$10 per domain per month per project add on',
team: '$10 per domain per month per project add on',
enterprise: '1, additional $10/domain/month',
},
usage_based: false,
},
],
},
support: {
title: 'Support',
icon: 'M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z',
features: [
{
key: 'support.communitySupport',
title: 'Community Support',
plans: {
free: true,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'support.emailSupport',
title: 'Email Support',
plans: {
free: false,
pro: true,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'support.emailSupportSla',
title: 'Email Support SLA',
plans: {
free: false,
pro: false,
team: true,
enterprise: true,
},
usage_based: false,
},
{
key: 'support.designatedSupport',
title: 'Designated support',
plans: {
free: false,
pro: false,
team: false,
enterprise: true,
},
usage_based: false,
},
{
key: 'support.onBoardingSupport',
title: 'On Boarding Support',
plans: {
free: false,
pro: false,
team: false,
enterprise: true,
},
usage_based: false,
},
{
key: 'support.designatedCustomerSuccessTeam',
title: 'Designated Customer Success Team',
plans: {
free: false,
pro: false,
team: false,
enterprise: true,
},
usage_based: false,
},
{
key: 'support.securityQuestionnaireHelp',
title: 'Security Questionnaire Help',
plans: {
free: false,
pro: false,
team: true,
enterprise: true,
},
usage_based: false,
},
],
},
}