Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
6841db7
fix: do not query backups for project in unknown state (#44559)
kevcodez Apr 6, 2026
4c10f65
feat(tracking): add compute_badge_upgrade_clicked event (#44560)
pamelachia Apr 6, 2026
bb66ba8
docs(billing-faq): add paused/deleted project usage note (#44570)
pamelachia Apr 6, 2026
b5326ce
fix(studio): only render MobileNavigationBar on mobile viewports (#44…
alaister Apr 6, 2026
4814672
[FE-2946] fix(studio): skip available-versions request when dbRegion …
alaister Apr 6, 2026
421eaed
fix(studio): skip project count query for platform orgs (#44566)
alaister Apr 6, 2026
5ca6182
chore: cleanup redeemCodeEnabled flag (#44563)
kevcodez Apr 6, 2026
b2d8772
chore: do not preload plan change data on page load (#44562)
kevcodez Apr 6, 2026
e7bec24
[FE-2913] feat(studio): restrict cloud provider to AWS (Revamped) for…
alaister Apr 6, 2026
a020be5
fix(studio): use hook for org in NoProjectsOnPaidOrgInfo (#44572)
alaister Apr 6, 2026
333175b
refactor: switch to @ imports and enforce sorting for studio/state (#…
charislam Apr 6, 2026
8038682
fix: add tooltip, replace button with Tooltip one (#44526)
FatumaA Apr 6, 2026
78fbed1
fix(studio): apply literal() escaping to remaining queue mutation fil…
oniani1 Apr 6, 2026
6be596e
feat: add user preference to enable queue operations (#44366)
awaseem Apr 6, 2026
205dac3
feat: Adding a more lightweight query to pg-meta that just fetches th…
aaronByrne1 Apr 6, 2026
6563dc7
refactor: authorize page (#44522)
charislam Apr 6, 2026
a2863ee
chore: updated UI tests (#44576)
awaseem Apr 6, 2026
768c794
fix(studio): prevent report remove button from overflowing on long na…
awaseem Apr 6, 2026
379a33d
[bot] Decrease ESLint ratchet baselines (#44539)
supabase-supabase-autofixer[bot] Apr 6, 2026
1355ea7
chore: temporarily remove pg-meta codeowners (#44577)
charislam Apr 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/packages/shared-data/plans.ts @supabase/billing
/packages/common/telemetry-constants.ts @supabase/growth-eng
/packages/dev-tools/ @supabase/growth-eng
/packages/pg-meta @supabase/postgres @avallete
# /packages/pg-meta @supabase/postgres @avallete
/packages/ui-patterns @supabase/design

/apps/studio/ @supabase/Dashboard
Expand Down
6 changes: 6 additions & 0 deletions apps/docs/content/guides/platform/billing-faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,12 @@ To remove restrictions, you will need to address the issue that caused the restr

Restrictions due to usage limits are lifted once your quota refills at the start of the next billing cycle. Note that there may be a short delay after your billing period resets before restrictions are fully lifted. You can see when your current billing cycle ends on the [billing page](/dashboard/org/_/billing) under "Upcoming Invoice". You can also lift restrictions immediately by [upgrading](/dashboard/org/_/billing?panel=subscriptionPlan) to Pro (if on Free Plan) or by [disabling spend cap](/dashboard/org/_/billing?panel=costControl) (if on Pro Plan with spend cap enabled).

<Admonition type="note">

Pausing or deleting a project stops new usage from accumulating, but does not remove usage that already occurred during the current billing cycle. For quota-based limits, that usage still counts until the billing period resets.

</Admonition>

## Reports and invoices

#### Where do I find my invoices?
Expand Down
91 changes: 12 additions & 79 deletions apps/studio/.github/eslint-rule-baselines.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"rules": {
"react-hooks/exhaustive-deps": 199,
"react-hooks/exhaustive-deps": 196,
"import/no-anonymous-default-export": 57,
"@tanstack/query/exhaustive-deps": 12,
"@typescript-eslint/no-explicit-any": 1144,
"no-restricted-imports": 59,
"@typescript-eslint/no-explicit-any": 1090,
"no-restricted-imports": 0,
"no-restricted-exports": 271,
"react/no-unstable-nested-components": 64
},
Expand Down Expand Up @@ -55,8 +55,6 @@
"components/interfaces/Integrations/Queues/SingleQueue/SendMessageModal.tsx": 1,
"components/interfaces/Integrations/Wrappers/WrapperDynamicColumns.tsx": 1,
"components/interfaces/Observability/DatabaseInfrastructureSection.tsx": 1,
"components/interfaces/Observability/useSlowQueriesCount.ts": 1,
"components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm.ts": 1,
"components/interfaces/Organization/BillingSettings/BillingEmail.tsx": 1,
"components/interfaces/Organization/BillingSettings/CreditTopUp.tsx": 1,
"components/interfaces/Organization/BillingSettings/Subscription/PaymentMethodSelection.tsx": 2,
Expand Down Expand Up @@ -247,7 +245,7 @@
"components/grid/utils/common.ts": 1,
"components/grid/utils/gridColumns.tsx": 10,
"components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.types.ts": 2,
"components/interfaces/App/UpdateBillingAddressModal.tsx": 1,
"components/interfaces/App/UpdateBillingAddressModal.tsx": 3,
"components/interfaces/Auth/AuditLogsForm.tsx": 1,
"components/interfaces/Auth/AuthProvidersForm/AuthProvidersForm.types.ts": 1,
"components/interfaces/Auth/AuthProvidersForm/FormField.tsx": 1,
Expand Down Expand Up @@ -310,7 +308,6 @@
"components/interfaces/Docs/ResourceContent.tsx": 1,
"components/interfaces/Docs/RpcContent.tsx": 4,
"components/interfaces/Docs/Snippets.ts": 1,
"components/interfaces/ErrorHandling/error-mappings.tsx": 1,
"components/interfaces/Functions/CommandRender.tsx": 4,
"components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.tsx": 1,
"components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.utils.tsx": 3,
Expand All @@ -324,12 +321,11 @@
"components/interfaces/Integrations/CronJobs/CronJobTableCell.tsx": 2,
"components/interfaces/Integrations/CronJobs/PreviousRunsTab.tsx": 2,
"components/interfaces/Integrations/GraphQL/GraphiQLTab.tsx": 1,
"components/interfaces/Integrations/Landing/Integrations.constants.tsx": 1,
"components/interfaces/Integrations/Queues/QueuesSettings.tsx": 1,
"components/interfaces/Integrations/Queues/SingleQueue/MessageDetailsPanel.tsx": 1,
"components/interfaces/Integrations/Queues/SingleQueue/QueueFilters.tsx": 1,
"components/interfaces/Integrations/Queues/SingleQueue/QueueSettings.tsx": 2,
"components/interfaces/Integrations/Vault/Secrets/AddNewSecretModal.tsx": 6,
"components/interfaces/Integrations/Vault/Secrets/AddNewSecretModal.tsx": 1,
"components/interfaces/Integrations/Vault/Secrets/SecretsManagement.tsx": 1,
"components/interfaces/Integrations/Wrappers/CreateIcebergWrapperSheet.tsx": 3,
"components/interfaces/Integrations/Wrappers/CreateWrapperSheet.tsx": 6,
Expand All @@ -338,12 +334,12 @@
"components/interfaces/Integrations/Wrappers/WrapperTableEditor.tsx": 7,
"components/interfaces/Integrations/Wrappers/Wrappers.utils.ts": 2,
"components/interfaces/JwtSecrets/jwt-secret-keys-table/create-key-dialog.tsx": 2,
"components/interfaces/JwtSecrets/jwt-settings.tsx": 5,
"components/interfaces/JwtSecrets/jwt-settings.tsx": 1,
"components/interfaces/Linter/LinterDataGrid.tsx": 4,
"components/interfaces/LogDrains/LogDrainDestinationSheetForm.tsx": 2,
"components/interfaces/Observability/ObservabilityOverview.tsx": 1,
"components/interfaces/Observability/ServiceHealthCard.tsx": 1,
"components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerData.tsx": 2,
"components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerData.tsx": 3,
"components/interfaces/Organization/BillingSettings/BillingCustomerData/TaxID.utils.ts": 2,
"components/interfaces/Organization/BillingSettings/CostControl/SpendCapSidePanel.tsx": 2,
"components/interfaces/Organization/BillingSettings/CreditTopUp.tsx": 2,
Expand Down Expand Up @@ -429,7 +425,7 @@
"components/interfaces/SignIn/SignInWithCustom.tsx": 1,
"components/interfaces/SignIn/SignInWithGitHub.tsx": 1,
"components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails/ConnectTablesDialog.tsx": 2,
"components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails/CreateTable/CreateTableSheet.tsx": 3,
"components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails/CreateTable/CreateTableSheet.tsx": 2,
"components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails/InitializeForeignSchemaDialog.tsx": 1,
"components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails/NamespaceWithTables/TableRowComponent.tsx": 4,
"components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails/NamespaceWithTables/index.tsx": 1,
Expand All @@ -443,7 +439,6 @@
"components/interfaces/Storage/StorageBucketsError.tsx": 1,
"components/interfaces/Storage/StorageExplorer/FileExplorer.tsx": 2,
"components/interfaces/Storage/StorageExplorer/FileExplorerColumn.tsx": 6,
"components/interfaces/Storage/StorageExplorer/FileExplorerHeader.tsx": 6,
"components/interfaces/Storage/StorageExplorer/FileExplorerRow.tsx": 1,
"components/interfaces/Storage/StorageExplorer/FileExplorerRowEditing.tsx": 2,
"components/interfaces/Storage/StorageExplorer/ItemContextMenu.tsx": 1,
Expand Down Expand Up @@ -474,18 +469,14 @@
"components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.utils.ts": 9,
"components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/TextEditor.tsx": 2,
"components/interfaces/TableGridEditor/SidePanelEditor/SchemaEditor.tsx": 2,
"components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx": 14,
"components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx": 12,
"components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.types.ts": 1,
"components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.tsx": 14,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadSheetFileUpload.tsx": 3,
"components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.tsx": 2,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadSheetTextInput.tsx": 1,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.tsx": 4,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.types.ts": 1,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils.tsx": 18,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils.tsx": 2,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImportPreview.tsx": 2,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetPreviewGrid.tsx": 2,
"components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ForeignKeysManagement/ForeignKeyRow.tsx": 1,
"components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.types.ts": 1,
"components/interfaces/TableGridEditor/TableDefinition.tsx": 3,
"components/interfaces/TableGridEditor/TableEntity.utils.ts": 1,
"components/interfaces/UnifiedLogs/ServiceFlow/components/ServiceFlowHeader.tsx": 1,
Expand Down Expand Up @@ -704,65 +695,7 @@
"types/next.ts": 2,
"types/ui.ts": 2
},
"no-restricted-imports": {
"components/grid/SupabaseGrid.tsx": 1,
"components/grid/SupabaseGrid.utils.ts": 1,
"components/grid/components/common/Shortcuts.tsx": 1,
"components/grid/components/editor/BooleanEditor.tsx": 1,
"components/grid/components/editor/DateTimeEditor.tsx": 1,
"components/grid/components/editor/JsonEditor.tsx": 1,
"components/grid/components/editor/NumberEditor.tsx": 1,
"components/grid/components/editor/SelectEditor.tsx": 1,
"components/grid/components/editor/TextEditor.tsx": 1,
"components/grid/components/editor/TimeEditor.tsx": 1,
"components/grid/components/formatter/BinaryFormatter.tsx": 1,
"components/grid/components/formatter/BooleanFormatter.tsx": 1,
"components/grid/components/formatter/DefaultFormatter.tsx": 1,
"components/grid/components/formatter/ForeignKeyFormatter.tsx": 1,
"components/grid/components/formatter/JsonFormatter.tsx": 1,
"components/grid/components/formatter/ReferenceRecordPeek.tsx": 1,
"components/grid/components/grid/AddColumn.tsx": 1,
"components/grid/components/grid/Grid.tsx": 1,
"components/grid/components/grid/Grid.utils.tsx": 1,
"components/grid/components/grid/RowRenderer.tsx": 2,
"components/grid/components/grid/SelectColumn.tsx": 1,
"components/grid/components/menu/ColumnMenu.tsx": 1,
"components/grid/components/menu/RowContextMenu.tsx": 1,
"components/grid/types/base.ts": 1,
"components/grid/utils/column.ts": 1,
"components/grid/utils/gridColumns.tsx": 1,
"components/interfaces/Auth/Users/Users.utils.tsx": 1,
"components/interfaces/Auth/Users/UsersGridComponents.tsx": 1,
"components/interfaces/Auth/Users/UsersV2.tsx": 1,
"components/interfaces/Integrations/CronJobs/CronJobs.utils.tsx": 1,
"components/interfaces/Integrations/CronJobs/CronJobsTab.DataGrid.tsx": 1,
"components/interfaces/Integrations/CronJobs/PreviousRunsTab.tsx": 1,
"components/interfaces/Integrations/Queues/Queues.utils.tsx": 1,
"components/interfaces/Integrations/Queues/QueuesTab.tsx": 1,
"components/interfaces/Integrations/Queues/SingleQueue/QueueDataGrid.tsx": 1,
"components/interfaces/Integrations/Vault/Secrets/Secrets.utils.tsx": 1,
"components/interfaces/Integrations/Vault/Secrets/SecretsManagement.tsx": 1,
"components/interfaces/Linter/LinterDataGrid.tsx": 1,
"components/interfaces/QueryPerformance/QueryPerformanceGrid.tsx": 1,
"components/interfaces/Realtime/Inspector/MessagesTable.tsx": 1,
"components/interfaces/Realtime/Inspector/RealtimeMessageColumnRenderer.tsx": 1,
"components/interfaces/SQLEditor/UtilityPanel/Results.tsx": 1,
"components/interfaces/Settings/Logs/LogColumnRenderers/AuthColumnRenderer.tsx": 1,
"components/interfaces/Settings/Logs/LogColumnRenderers/DatabaseApiColumnRender.tsx": 1,
"components/interfaces/Settings/Logs/LogColumnRenderers/DatabasePostgresColumnRender.tsx": 1,
"components/interfaces/Settings/Logs/LogColumnRenderers/DefaultPreviewColumnRenderer.tsx": 1,
"components/interfaces/Settings/Logs/LogColumnRenderers/FunctionsEdgeColumnRender.tsx": 1,
"components/interfaces/Settings/Logs/LogColumnRenderers/FunctionsLogsColumnRender.tsx": 1,
"components/interfaces/Settings/Logs/LogTable.tsx": 2,
"components/interfaces/Storage/StorageExplorer/ColumnContextMenu.tsx": 1,
"components/interfaces/Storage/StorageExplorer/FileExplorerColumn.tsx": 1,
"components/interfaces/Storage/StorageExplorer/FileExplorerRow.tsx": 1,
"components/interfaces/Storage/StorageExplorer/FolderContextMenu.tsx": 1,
"components/interfaces/Storage/StorageExplorer/ItemContextMenu.tsx": 1,
"components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/ForeignRowSelector/SelectorGrid.tsx": 1,
"components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetPreviewGrid.tsx": 1,
"state/table-editor-table.tsx": 1
},
"no-restricted-imports": {},
"no-restricted-exports": {
"__mocks__/hooks/analytics/useFillTimeseriesSorted.ts": 1,
"__mocks__/hooks/analytics/useLogsQuery.ts": 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { TimestampInfo, timestampLocalFormatter } from 'ui-patterns'
import { Input } from 'ui-patterns/DataInputs/Input'

import { BlockKeys } from '../common/BlockKeys'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/Account/Preferences/useDashboardSettings'

interface BaseEditorProps<TRow, TSummaryRow = unknown> extends RenderEditCellProps<
TRow,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { BlockKeys } from '../common/BlockKeys'
import { MonacoEditor } from '../common/MonacoEditor'
import { NullValue } from '../common/NullValue'
import { TruncatedWarningOverlay } from './TruncatedWarningOverlay'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/Account/Preferences/useDashboardSettings'
import { isValueTruncated } from '@/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.utils'
import { useTableEditorQuery } from '@/data/table-editor/table-editor-query'
import { isTableLike } from '@/data/table-editor/table-editor-types'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {

import { useOperationQueueActions } from '@/components/grid/hooks/useOperationQueueActions'
import { useOperationQueueShortcuts } from '@/components/grid/hooks/useOperationQueueShortcuts'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/Account/Preferences/useDashboardSettings'
import { DiscardChangesConfirmationDialog } from '@/components/ui-patterns/Dialogs/DiscardChangesConfirmationDialog'
import { useConfirmOnClose } from '@/hooks/ui/useConfirmOnClose'
import { getModKeyLabel } from '@/lib/helpers'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useQueryClient } from '@tanstack/react-query'
import { useIsQueueOperationsEnabled } from 'components/interfaces/Account/Preferences/useDashboardSettings'

import { useOperationQueueActions } from './useOperationQueueActions'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import { tableRowKeys } from '@/data/table-rows/keys'
import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
import { useHotKey } from '@/hooks/ui/useHotKey'
Expand Down
2 changes: 1 addition & 1 deletion apps/studio/components/grid/hooks/useTableRowOperations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
queueRowAddWithOptimisticUpdate,
queueRowDeletesWithOptimisticUpdate,
} from '@/components/grid/utils/queueOperationUtils'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import { useIsQueueOperationsEnabled } from '@/components/interfaces/Account/Preferences/useDashboardSettings'
import { isTableLike, type Entity } from '@/data/table-editor/table-editor-types'
import { tableRowKeys } from '@/data/table-rows/keys'
import { useTableRowCreateMutation } from '@/data/table-rows/table-row-create-mutation'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ export const AccountIdentities = () => {
)}
</div>
<p className="text-sm text-foreground-lighter">
{!!username ? <span>{username} </span> : null}
{!!username ? <span>{username} · </span> : null}
{identity.email}
</p>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import {
PageSection,
PageSectionContent,
PageSectionDescription,
PageSectionMeta,
PageSectionSummary,
PageSectionTitle,
} from 'ui-patterns/PageSection'

import { DashboardSettingsToggles } from './DashboardSettingsToggles'

export const DashboardSettings = () => {
return (
<PageSection>
<PageSectionMeta>
<PageSectionSummary>
<PageSectionTitle id="dashboard">Dashboard</PageSectionTitle>
<PageSectionDescription>
Customize how the dashboard works on this browser and device.
</PageSectionDescription>
</PageSectionSummary>
</PageSectionMeta>
<PageSectionContent>
<DashboardSettingsToggles />
</PageSectionContent>
</PageSection>
)
}
Loading
Loading