-
- When you reach your database size limit, your project can go into
- read-only mode.{' '}
- {onFreePlan
- ? 'Please upgrade your Plan.'
- : "Disable your spend cap to scale seamlessly, and pay for over-usage beyond your Plan's quota."}
+ const onFreePlan = subscription?.plan?.name === 'Free'
+
+ return (
+
+ {(isApproachingLimit || isExceededLimit) && isCapped && (
+
+
+
+ When you reach your database size limit, your project can go into
+ read-only mode.{' '}
+ {onFreePlan
+ ? 'Please upgrade your Plan.'
+ : "Disable your spend cap to scale seamlessly, and pay for over-usage beyond your Plan's quota."}
+
-
-
- )}
-
- )
- },
- }
- : {
- anchor: 'diskSize',
- key: 'diskSize',
- attributes: [],
- name: 'Disk size',
- chartPrefix: 'Average',
- unit: 'bytes',
- description:
- "Each Supabase project comes with a dedicated disk. Each project gets 8 GB of disk for free. Billing is based on the provisioned disk size. Disk automatically scales up when you get close to it's size.\nEach hour your project is using more than 8 GB of GP3 disk, it incurs the overages in GB-Hrs, i.e. a 16 GB disk incurs 8 GB-Hrs every hour. Extra disk size costs $0.125/GB/month ($0.000171/GB-Hr).",
- links: [
- {
- name: 'Documentation',
- url: 'https://supabase.com/docs/guides/platform/manage-your-usage/disk-size',
+
+ )}
+
+ )
},
- {
- name: 'Disk Management',
- url: 'https://supabase.com/docs/guides/platform/database-size#disk-management',
- },
- ],
- chartDescription: '',
- },
- {
- anchor: 'storageSize',
- key: PricingMetric.STORAGE_SIZE,
- attributes: [{ key: PricingMetric.STORAGE_SIZE.toLowerCase(), color: 'white' }],
- name: 'Storage Size',
- chartPrefix: 'Average',
- unit: 'bytes',
- description:
- 'Sum of all objects in your storage buckets.\nBilling is prorated down to the hour and will be displayed GB-Hrs.',
- chartDescription: 'The data refreshes every 24 hours.',
- links: [
- {
- name: 'Storage',
- url: 'https://supabase.com/docs/guides/storage',
- },
- ],
- },
- ],
- },
- {
- key: 'activity',
- name: 'Activity',
- description: 'Usage statistics that reflect the activity of your project',
- attributes: [
- {
- anchor: 'mau',
- key: PricingMetric.MONTHLY_ACTIVE_USERS,
- attributes: [{ key: PricingMetric.MONTHLY_ACTIVE_USERS.toLowerCase(), color: 'white' }],
- name: 'Monthly Active Users',
- chartPrefix: 'Cumulative',
- chartSuffix: 'in billing period',
- unit: 'absolute',
- description:
- 'Users who log in or refresh their token count towards MAU.\nBilling is based on the sum of distinct users requesting your API throughout the billing period. Resets every billing cycle.',
- chartDescription:
- 'The data is refreshed over a period of 24 hours and resets at the beginning of every billing period.\nThe data points are relative to the beginning of your billing period and will reset with your billing period.',
- links: [
- {
- name: 'Auth',
- url: 'https://supabase.com/docs/guides/auth',
- },
- ],
- },
- {
- anchor: 'mauSso',
- key: PricingMetric.MONTHLY_ACTIVE_SSO_USERS,
- attributes: [{ key: PricingMetric.MONTHLY_ACTIVE_SSO_USERS.toLowerCase(), color: 'white' }],
- name: 'Monthly Active SSO Users',
- chartPrefix: 'Cumulative',
- chartSuffix: 'in billing period',
- unit: 'absolute',
- description:
- 'SSO users who log in or refresh their token count towards SSO MAU.\nBilling is based on the sum of distinct Single Sign-On users requesting your API throughout the billing period. Resets every billing cycle.',
- chartDescription:
- 'The data refreshes over a period of 24 hours and resets at the beginning of every billing period.\nThe data points are relative to the beginning of your billing period and will reset with your billing period.',
- links: [
- {
- name: 'SSO with SAML 2.0',
- url: 'https://supabase.com/docs/guides/auth/sso/auth-sso-saml',
- },
- ],
- },
- {
- anchor: 'storageImageTransformations',
- key: PricingMetric.STORAGE_IMAGES_TRANSFORMED,
- attributes: [
- { key: PricingMetric.STORAGE_IMAGES_TRANSFORMED.toLowerCase(), color: 'white' },
- ],
- name: 'Storage Image Transformations',
- chartPrefix: 'Cumulative',
- chartSuffix: 'in billing period',
- unit: 'absolute',
- description:
- 'We count all images that were transformed in the billing period, ignoring any transformations.\nUsage example: You transform one image with four different size transformations and another image with just a single transformation. It counts as two, as only two images were transformed.\nBilling is based on the count of (origin) images that used transformations throughout the billing period. Resets every billing cycle.',
- chartDescription:
- 'The data refreshes every 24 hours.\nThe data points are relative to the beginning of your billing period and will reset with your billing period.',
- links: [
- {
- name: 'Documentation',
- url: 'https://supabase.com/docs/guides/storage/image-transformations',
- },
- ],
- },
- {
- anchor: 'funcInvocations',
- key: PricingMetric.FUNCTION_INVOCATIONS,
- attributes: [{ key: PricingMetric.FUNCTION_INVOCATIONS.toLowerCase(), color: 'white' }],
- name: 'Edge Function Invocations',
- unit: 'absolute',
- description:
- 'Every serverless function invocation independent of response status is counted.\nBilling is based on the sum of all invocations throughout your billing period.',
- chartDescription: 'The data refreshes every 24 hours.',
- links: [
- {
- name: 'Edge Functions',
- url: 'https://supabase.com/docs/guides/functions',
- },
- ],
- },
- {
- anchor: 'realtimeMessageCount',
- key: PricingMetric.REALTIME_MESSAGE_COUNT,
- attributes: [{ key: PricingMetric.REALTIME_MESSAGE_COUNT.toLowerCase(), color: 'white' }],
- name: 'Realtime Messages',
- unit: 'absolute',
- description:
- "Count of messages going through Realtime. Includes database changes, broadcast and presence. \nUsage example: If you do a database change and 5 clients listen to that change via Realtime, that's 5 messages. If you broadcast a message and 4 clients listen to that, that's 5 messages (1 message sent, 4 received).\nBilling is based on the total amount of messages throughout your billing period.",
- chartDescription: 'The data refreshes every 24 hours.',
- links: [
- {
- name: 'Realtime Quotas',
- url: 'https://supabase.com/docs/guides/realtime/quotas',
- },
- ],
- },
- {
- anchor: 'realtimePeakConnections',
- key: PricingMetric.REALTIME_PEAK_CONNECTIONS,
- attributes: [
- { key: PricingMetric.REALTIME_PEAK_CONNECTIONS.toLowerCase(), color: 'white' },
- ],
- name: 'Realtime Concurrent Peak Connections',
- chartPrefix: 'Max',
- unit: 'absolute',
- description:
- 'Total number of successful connections. Connections attempts are not counted towards usage.\nBilling is based on the maximum amount of concurrent peak connections throughout your billing period.',
- chartDescription: 'The data refreshes every 24 hours.',
- links: [
- {
- name: 'Realtime Quotas',
- url: 'https://supabase.com/docs/guides/realtime/quotas',
- },
- ],
- },
- ],
- },
-]
+ }
+ : {
+ anchor: 'diskSize',
+ key: 'diskSize',
+ attributes: [],
+ name: 'Disk size',
+ chartPrefix: 'Average',
+ unit: 'bytes',
+ description:
+ "Each Supabase project comes with a dedicated disk. Each project gets 8 GB of disk for free. Billing is based on the provisioned disk size. Disk automatically scales up when you get close to it's size.\nEach hour your project is using more than 8 GB of GP3 disk, it incurs the overages in GB-Hrs, i.e. a 16 GB disk incurs 8 GB-Hrs every hour. Extra disk size costs $0.125/GB/month ($0.000171/GB-Hr).",
+ links: [
+ {
+ name: 'Documentation',
+ url: 'https://supabase.com/docs/guides/platform/manage-your-usage/disk-size',
+ },
+ {
+ name: 'Disk Management',
+ url: 'https://supabase.com/docs/guides/platform/database-size#disk-management',
+ },
+ ],
+ chartDescription: '',
+ },
+ {
+ anchor: 'storageSize',
+ key: PricingMetric.STORAGE_SIZE,
+ attributes: [{ key: PricingMetric.STORAGE_SIZE.toLowerCase(), color: 'white' }],
+ name: 'Storage Size',
+ chartPrefix: 'Average',
+ unit: 'bytes',
+ description:
+ 'Sum of all objects in your storage buckets.\nBilling is prorated down to the hour and will be displayed GB-Hrs.',
+ chartDescription: 'The data refreshes every 24 hours.',
+ links: [
+ {
+ name: 'Storage',
+ url: 'https://supabase.com/docs/guides/storage',
+ },
+ ],
+ },
+ ],
+ },
+ {
+ key: 'activity',
+ name: 'Activity',
+ description: 'Usage statistics that reflect the activity of your project',
+ attributes: [
+ {
+ anchor: 'mau',
+ key: PricingMetric.MONTHLY_ACTIVE_USERS,
+ attributes: [{ key: PricingMetric.MONTHLY_ACTIVE_USERS.toLowerCase(), color: 'white' }],
+ name: 'Monthly Active Users',
+ chartPrefix: 'Cumulative',
+ chartSuffix: 'in billing period',
+ unit: 'absolute',
+ description:
+ 'Users who log in or refresh their token count towards MAU.\nBilling is based on the sum of distinct users requesting your API throughout the billing period. Resets every billing cycle.',
+ chartDescription:
+ 'The data is refreshed over a period of 24 hours and resets at the beginning of every billing period.\nThe data points are relative to the beginning of your billing period and will reset with your billing period.',
+ links: [
+ {
+ name: 'Auth',
+ url: 'https://supabase.com/docs/guides/auth',
+ },
+ ],
+ },
+ {
+ anchor: 'mauSso',
+ key: PricingMetric.MONTHLY_ACTIVE_SSO_USERS,
+ attributes: [
+ { key: PricingMetric.MONTHLY_ACTIVE_SSO_USERS.toLowerCase(), color: 'white' },
+ ],
+ name: 'Monthly Active SSO Users',
+ chartPrefix: 'Cumulative',
+ chartSuffix: 'in billing period',
+ unit: 'absolute',
+ description:
+ 'SSO users who log in or refresh their token count towards SSO MAU.\nBilling is based on the sum of distinct Single Sign-On users requesting your API throughout the billing period. Resets every billing cycle.',
+ chartDescription:
+ 'The data refreshes over a period of 24 hours and resets at the beginning of every billing period.\nThe data points are relative to the beginning of your billing period and will reset with your billing period.',
+ links: [
+ {
+ name: 'SSO with SAML 2.0',
+ url: 'https://supabase.com/docs/guides/auth/sso/auth-sso-saml',
+ },
+ ],
+ },
+ {
+ anchor: 'storageImageTransformations',
+ key: PricingMetric.STORAGE_IMAGES_TRANSFORMED,
+ attributes: [
+ { key: PricingMetric.STORAGE_IMAGES_TRANSFORMED.toLowerCase(), color: 'white' },
+ ],
+ name: 'Storage Image Transformations',
+ chartPrefix: 'Cumulative',
+ chartSuffix: 'in billing period',
+ unit: 'absolute',
+ description:
+ 'We count all images that were transformed in the billing period, ignoring any transformations.\nUsage example: You transform one image with four different size transformations and another image with just a single transformation. It counts as two, as only two images were transformed.\nBilling is based on the count of (origin) images that used transformations throughout the billing period. Resets every billing cycle.',
+ chartDescription:
+ 'The data refreshes every 24 hours.\nThe data points are relative to the beginning of your billing period and will reset with your billing period.',
+ links: [
+ {
+ name: 'Documentation',
+ url: 'https://supabase.com/docs/guides/storage/image-transformations',
+ },
+ ],
+ },
+ {
+ anchor: 'funcInvocations',
+ key: PricingMetric.FUNCTION_INVOCATIONS,
+ attributes: [{ key: PricingMetric.FUNCTION_INVOCATIONS.toLowerCase(), color: 'white' }],
+ name: 'Edge Function Invocations',
+ unit: 'absolute',
+ description:
+ 'Every serverless function invocation independent of response status is counted.\nBilling is based on the sum of all invocations throughout your billing period.',
+ chartDescription: 'The data refreshes every 24 hours.',
+ links: [
+ {
+ name: 'Edge Functions',
+ url: 'https://supabase.com/docs/guides/functions',
+ },
+ ],
+ },
+ {
+ anchor: 'realtimeMessageCount',
+ key: PricingMetric.REALTIME_MESSAGE_COUNT,
+ attributes: [{ key: PricingMetric.REALTIME_MESSAGE_COUNT.toLowerCase(), color: 'white' }],
+ name: 'Realtime Messages',
+ unit: 'absolute',
+ description:
+ "Count of messages going through Realtime. Includes database changes, broadcast and presence. \nUsage example: If you do a database change and 5 clients listen to that change via Realtime, that's 5 messages. If you broadcast a message and 4 clients listen to that, that's 5 messages (1 message sent, 4 received).\nBilling is based on the total amount of messages throughout your billing period.",
+ chartDescription: 'The data refreshes every 24 hours.',
+ links: [
+ {
+ name: 'Realtime Quotas',
+ url: 'https://supabase.com/docs/guides/realtime/quotas',
+ },
+ ],
+ },
+ {
+ anchor: 'realtimePeakConnections',
+ key: PricingMetric.REALTIME_PEAK_CONNECTIONS,
+ attributes: [
+ { key: PricingMetric.REALTIME_PEAK_CONNECTIONS.toLowerCase(), color: 'white' },
+ ],
+ name: 'Realtime Concurrent Peak Connections',
+ chartPrefix: 'Max',
+ unit: 'absolute',
+ description:
+ 'Total number of successful connections. Connections attempts are not counted towards usage.\nBilling is based on the maximum amount of concurrent peak connections throughout your billing period.',
+ chartDescription: 'The data refreshes every 24 hours.',
+ links: [
+ {
+ name: 'Realtime Quotas',
+ url: 'https://supabase.com/docs/guides/realtime/quotas',
+ },
+ ],
+ },
+ ],
+ },
+ ]
+}
diff --git a/apps/studio/components/interfaces/Organization/Usage/Usage.tsx b/apps/studio/components/interfaces/Organization/Usage/Usage.tsx
index 93796f2623efc..80a68493edf73 100644
--- a/apps/studio/components/interfaces/Organization/Usage/Usage.tsx
+++ b/apps/studio/components/interfaces/Organization/Usage/Usage.tsx
@@ -22,7 +22,7 @@ import { cn, Listbox } from 'ui'
import { Admonition } from 'ui-patterns'
import { Restriction } from '../BillingSettings/Restriction'
import Activity from './Activity'
-import Bandwidth from './Bandwidth'
+import Egress from './Egress'
import Compute from './Compute'
import SizeAndCounts from './SizeAndCounts'
import TotalUsage from './TotalUsage'
@@ -234,7 +234,7 @@ const Usage = () => {
/>
)}
-