Files
Danny WhiteandJoshen Lim 05a45dd1ed feat(studio): rename Replication to Pipelines (#50637)
## What kind of change does this PR introduce?

Feature and docs update.

## What is the current behavior?

The Dashboard lists Pipelines destinations under Database > Replication.
Read replicas have moved to Infrastructure, but the temporary notices
remain on the destinations page and new destination sheet.

Closes PIPE-1021.

## What is the new behavior?

The canonical Dashboard routes are Database > Pipelines, while legacy
Replication list and detail URLs permanently redirect to the equivalent
Pipelines routes. Navigation, command palette, shortcuts, pipeline
links, docs, and current marketing copy use Pipelines. Read-replica
notices and their obsolete dismissal state are removed.

| Before | After |
| --- | --- |
| <img width="1024" height="759" alt="Replication Database Agua Basket
Supabase"
src="https://github.com/user-attachments/assets/53f9f565-1ed1-43e9-a7d9-b66b2a47e948"
/> | <img width="1024" height="759" alt="2540"
src="https://github.com/user-attachments/assets/14ab2d61-d01c-483f-9d4f-0ac286dae159"
/> |

The Management API, pipeline behaviour, replication logs, and Postgres
replication terminology remain unchanged.

## To test

- Open `/project/<ref>/database/pipelines` and confirm the Database
navigation, page header, and pipeline breadcrumb say Pipelines.
- Open
`/project/<ref>/database/replication?source=bookmark#destinations` and a
legacy pipeline detail URL. Confirm each redirects to the matching
Pipelines URL while preserving parameters and fragments.
- From the Pipelines page, open Add destination. Confirm no read-replica
migration notice appears.
- Open the Pipelines guide and confirm its Dashboard steps lead to
Database > Pipelines.

## Before merge

- [ ] Get changelog entry reviewed
https://github.com/supabase/changelog/pull/262 and prepare to merge
simultaneously

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

- **New Features**
- Added dedicated **Database > Pipelines** pages for pipeline lists and
details.
- Added permanent redirects from legacy Replication URLs to their
corresponding Pipelines pages.
- Read replica management links now open **Settings > Infrastructure**.

- **Documentation**
- Updated Pipelines setup, monitoring, troubleshooting, and usage
guidance to reference the current dashboard locations.
  - Updated Realtime guidance to use **Database > Publications**.

- **Updates**
- Renamed dashboard navigation, breadcrumbs, commands, and keyboard
shortcuts from **Replication** to **Pipelines**.
  - Removed the “Read replicas have moved” notification.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-09-23 08:52:07 +10:00

148 lines
4.7 KiB
TypeScript

import { useParams } from 'common'
import { useIsColumnLevelPrivilegesEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import { useIsETLPrivateAlpha } from '@/components/interfaces/Database/Replication/useIsETLPrivateAlpha'
import type {
ProductMenuGroup,
ProductMenuGroupItem,
} from '@/components/ui/ProductMenu/ProductMenu.types'
import { useProjectAddonsQuery } from '@/data/subscriptions/project-addons-query'
import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
import { IS_PLATFORM } from '@/lib/constants'
import { SHORTCUT_IDS } from '@/state/shortcuts/registry'
export const useGenerateDatabaseMenu = (): ProductMenuGroup[] => {
const { ref } = useParams()
const { data: project } = useSelectedProjectQuery()
const { databaseReplication: showPgReplicate, databaseRoles: showRoles } = useIsFeatureEnabled([
'database:replication',
'database:roles',
'integrations:wrappers',
])
const { data: addons } = useProjectAddonsQuery({ projectRef: project?.ref })
const pitrEnabled = addons?.selected_addons.some((addon) => addon.type === 'pitr') ?? false
const columnLevelPrivileges = useIsColumnLevelPrivilegesEnabled()
const enablePgReplicate = useIsETLPrivateAlpha()
const getDatabaseURL = (path: string) => `/project/${ref}/database/${path}`
return [
{
title: 'Database Management',
items: [
{
name: 'Schema Visualizer',
key: 'schemas',
url: getDatabaseURL('schemas'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_SCHEMA_VISUALIZER,
},
{
name: 'Tables',
key: 'tables',
url: getDatabaseURL('tables'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_TABLES,
},
{
name: 'Functions',
key: 'functions',
url: getDatabaseURL('functions'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_FUNCTIONS,
},
{
name: 'Triggers',
key: 'triggers',
url: getDatabaseURL('triggers/data'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_TRIGGERS,
},
{
name: 'Enumerated Types',
key: 'types',
url: getDatabaseURL('types'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_TYPES,
},
{
name: 'Extensions',
key: 'extensions',
url: getDatabaseURL('extensions'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_EXTENSIONS,
},
{
name: 'Indexes',
key: 'indexes',
url: getDatabaseURL('indexes'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_INDEXES,
},
{
name: 'Publications',
key: 'publications',
url: getDatabaseURL('publications'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_PUBLICATIONS,
},
],
},
{
title: 'Access Control',
items: [
{
name: 'Policies',
key: 'policies',
url: getDatabaseURL('policies'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_POLICIES,
},
showRoles && {
name: 'Roles',
key: 'roles',
url: getDatabaseURL('roles'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_ROLES,
},
columnLevelPrivileges && {
name: 'Column Privileges',
key: 'column-privileges',
url: getDatabaseURL('column-privileges'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_COLUMN_PRIVILEGES,
},
].filter(Boolean) as ProductMenuGroupItem[],
},
{
title: 'Configuration',
items: [
{
name: 'Settings',
key: 'settings',
url: getDatabaseURL('settings'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_SETTINGS,
},
].filter(Boolean) as ProductMenuGroupItem[],
},
{
title: 'Platform',
items: [
IS_PLATFORM &&
showPgReplicate && {
name: 'Pipelines',
key: 'pipelines',
url: getDatabaseURL('pipelines'),
label: enablePgReplicate ? 'New' : undefined,
shortcutId: SHORTCUT_IDS.NAV_DATABASE_REPLICATION,
},
IS_PLATFORM && {
name: 'Backups',
key: 'backups',
url: pitrEnabled ? getDatabaseURL('backups/pitr') : getDatabaseURL('backups/scheduled'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_BACKUPS,
},
{
name: 'Migrations',
key: 'migrations',
url: getDatabaseURL('migrations'),
shortcutId: SHORTCUT_IDS.NAV_DATABASE_MIGRATIONS,
},
].filter(Boolean) as ProductMenuGroupItem[],
},
]
}