diff --git a/public/assets/images/platform-integrations/supabase/add-credentials-supabase-1.png b/public/assets/images/platform-integrations/supabase/add-credentials-supabase-1.png new file mode 100644 index 00000000..29ab76ec Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/add-credentials-supabase-1.png differ diff --git a/public/assets/images/platform-integrations/supabase/add-credentials-supabase-2.png b/public/assets/images/platform-integrations/supabase/add-credentials-supabase-2.png new file mode 100644 index 00000000..d60485db Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/add-credentials-supabase-2.png differ diff --git a/public/assets/images/platform-integrations/supabase/create-sync-supabase-1.png b/public/assets/images/platform-integrations/supabase/create-sync-supabase-1.png new file mode 100644 index 00000000..60df7b86 Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/create-sync-supabase-1.png differ diff --git a/public/assets/images/platform-integrations/supabase/create-sync-supabase-2.png b/public/assets/images/platform-integrations/supabase/create-sync-supabase-2.png new file mode 100644 index 00000000..3ed62170 Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/create-sync-supabase-2.png differ diff --git a/public/assets/images/platform-integrations/supabase/create-sync-supabase-3.png b/public/assets/images/platform-integrations/supabase/create-sync-supabase-3.png new file mode 100644 index 00000000..4121150d Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/create-sync-supabase-3.png differ diff --git a/public/assets/images/platform-integrations/supabase/supabase-account-menu.png b/public/assets/images/platform-integrations/supabase/supabase-account-menu.png new file mode 100644 index 00000000..2dc777b0 Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/supabase-account-menu.png differ diff --git a/public/assets/images/platform-integrations/supabase/supabase-generate-token.png b/public/assets/images/platform-integrations/supabase/supabase-generate-token.png new file mode 100644 index 00000000..2635cff1 Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/supabase-generate-token.png differ diff --git a/public/assets/images/platform-integrations/supabase/supabase-sync-card.png b/public/assets/images/platform-integrations/supabase/supabase-sync-card.png new file mode 100644 index 00000000..f91be5e8 Binary files /dev/null and b/public/assets/images/platform-integrations/supabase/supabase-sync-card.png differ diff --git a/public/integrations/platforms/aws-secrets-manager.md b/public/integrations/platforms/aws-secrets-manager.md index bdbc7e68..9e2321a1 100644 --- a/public/integrations/platforms/aws-secrets-manager.md +++ b/public/integrations/platforms/aws-secrets-manager.md @@ -499,13 +499,6 @@ You first need to set up credentials to use for the sync, and then choose a sour ### Step 1: Set up your AWS credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Create an `AccessKey` via the AWS Console. See [Step 5](#step-5-create-access-keys) for instructions on creating the key. Note the `AccessKeyId` and `SecretAccessKey`. 2. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. diff --git a/public/integrations/platforms/cloudflare-pages.md b/public/integrations/platforms/cloudflare-pages.md index 078ea016..23827f94 100644 --- a/public/integrations/platforms/cloudflare-pages.md +++ b/public/integrations/platforms/cloudflare-pages.md @@ -69,13 +69,6 @@ Scroll down and click **Continue to summary** ### Save your credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/public/integrations/platforms/gitlab-ci.md b/public/integrations/platforms/gitlab-ci.md index f53acb52..ae053353 100644 --- a/public/integrations/platforms/gitlab-ci.md +++ b/public/integrations/platforms/gitlab-ci.md @@ -110,13 +110,6 @@ This feature is only available on GitLab if you have the Premium or Ultimate lic ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/public/integrations/platforms/hashicorp-nomad.md b/public/integrations/platforms/hashicorp-nomad.md index 1db3d056..2b88f1be 100644 --- a/public/integrations/platforms/hashicorp-nomad.md +++ b/public/integrations/platforms/hashicorp-nomad.md @@ -132,14 +132,6 @@ In the following screen you will be presented with a `Token Secret` which is the ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/public/integrations/platforms/hashicorp-vault.md b/public/integrations/platforms/hashicorp-vault.md index 9da5dc5c..157e7ecf 100644 --- a/public/integrations/platforms/hashicorp-vault.md +++ b/public/integrations/platforms/hashicorp-vault.md @@ -199,13 +199,6 @@ Phase can automatically sync secrets to your Hashicorp Vault instance. First, yo ### Step 1: Set up your Vault credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Create a `role_id` and `secret_id` via the Vault CLI. See [Step 2](#step-2-setting-up-app-role-authentication-and-acl-policy) for instructions. 2. Go to **Integrations** from the sidebar and click on **Add credentials** in the 'Service credentials' section diff --git a/public/integrations/platforms/railway.md b/public/integrations/platforms/railway.md index 98b8385c..be358181 100644 --- a/public/integrations/platforms/railway.md +++ b/public/integrations/platforms/railway.md @@ -50,13 +50,6 @@ Alternatively, if you do have a Railway Team you want to sync secrets to, please ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/public/integrations/platforms/render.md b/public/integrations/platforms/render.md index a424094a..7d5838ae 100644 --- a/public/integrations/platforms/render.md +++ b/public/integrations/platforms/render.md @@ -42,13 +42,6 @@ You can use Phase to sync secrets with your Render Services and Environment Grou ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and switch to the **Third-party credentials** tab. ![Go to integrations](/assets/images/platform-integrations/render/integrations-creds.png) diff --git a/public/integrations/platforms/supabase.md b/public/integrations/platforms/supabase.md new file mode 100644 index 00000000..1096085c --- /dev/null +++ b/public/integrations/platforms/supabase.md @@ -0,0 +1,109 @@ +import { Tag } from '@/components/Tag' +import { DocActions } from '@/components/DocActions' + +export const description = 'Integrate Phase with Supabase' + +INTEGRATE + +# Supabase Edge Functions + +You can use Phase to sync secrets to your Supabase project. The secrets are available to your Edge Functions at runtime. + + + + + When you enable secret syncing, Phase becomes the source of truth for your + secrets. Phase overwrites or deletes the secrets on the target service. + Import your secrets into Phase before you continue. + + +### Prerequisites + +- Sign up for the [Phase Console](/quickstart) and [create an App](/console/apps#create-an-app). +- Enable Server-side Encryption (SSE) for the App from the [Settings](/console/apps#settings) tab. + +## Step 1: Authentication + +### Create a Supabase access token + +1. Log in to your [Supabase Dashboard](https://supabase.com/dashboard). Click your avatar in the top right, then select **Account**. + +![Supabase account menu](/assets/images/platform-integrations/supabase/supabase-account-menu.png) + +2. Go to the [Access Tokens](https://supabase.com/dashboard/account/tokens) tab and click **Generate New Token**. Enter a descriptive name, select an expiry, and click **Generate token**. Copy the token. Supabase shows it only once. + +![Generate new token](/assets/images/platform-integrations/supabase/supabase-generate-token.png) + + + Supabase requires an expiry on new access tokens (up to 1 year with a custom + date). When the token expires, syncs fail with an authentication error. + Syncs resume after you update the stored credentials with a new token. + + +### Store authentication credentials in Phase + +1. Go to **Integrations** in the sidebar. Then click **Third-party credentials** in the integrations tab. + +![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) + +2. Click **Supabase**. + +![supabase-create-creds](/assets/images/platform-integrations/supabase/add-credentials-supabase-1.png) + +3. Enter your Supabase `Access Token` from the previous step. Enter a descriptive name and click **Save**. + +![supabase-input-creds](/assets/images/platform-integrations/supabase/add-credentials-supabase-2.png) + +Phase encrypts and saves your credentials. You can view and manage them under *Service Credentials* in the *Integrations* screen. + +## Step 2: Set up a secret sync + +1. Open your App in the Phase Console and go to the **Syncing** tab. Select **Supabase Edge Functions** in the 'Create a new Sync' menu. + +![create supabase sync](/assets/images/platform-integrations/supabase/create-sync-supabase-1.png) + +2. Select the credentials that you added in the previous step. Then click **Next**. + +![select supabase creds](/assets/images/platform-integrations/supabase/create-sync-supabase-2.png) + +3. Configure the source and destination for your secrets. Select an Environment from your App as the source. If you want to sync from a specific folder, set the Path. Then select a Supabase project from the dropdown and click **Create**. + +![configure supabase sync](/assets/images/platform-integrations/supabase/create-sync-supabase-3.png) + +4. Phase now syncs your secrets to the selected Supabase project automatically. You can manage the sync from the *Syncing* tab of your App or from the *Integrations* screen. + +![supabase sync card](/assets/images/platform-integrations/supabase/supabase-sync-card.png) + + + Supabase reserves secret names that start with `SUPABASE_`, for example + `SUPABASE_URL` and `SUPABASE_ANON_KEY`. Supabase manages these secrets for + every project. The sync does not delete them and does not push Phase secrets + with this prefix. The sync logs list the skipped keys. + + +Synced secrets are available to your Edge Functions without a redeploy. To see them, open the **Edge Functions → Secrets** page in the Supabase Dashboard, or use the Supabase CLI: + +```fish +supabase secrets list --project-ref +``` + +An Edge Function reads the synced secrets as environment variables: + +```ts +Deno.serve(async () => { + const stripeKey = Deno.env.get('STRIPE_SECRET_KEY') + + return new Response( + JSON.stringify({ stripeKeyIsSet: Boolean(stripeKey) }), + { headers: { 'Content-Type': 'application/json' } }, + ) +}) +``` + + + Supabase allows a maximum of 100 secrets per project. If a sync contains + more than 100 secrets, the sync fails before it writes changes to the + project. The sync logs show this error. The + [Edge Functions limits](https://supabase.com/docs/guides/functions/limits) + page lists all limits. + diff --git a/public/llms.txt b/public/llms.txt index 60f0603c..b17c8211 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -72,6 +72,7 @@ - [integrations/platforms/vercel](https://docs.phase.dev/integrations/platforms/vercel.md) - [integrations/platforms/railway](https://docs.phase.dev/integrations/platforms/railway.md) - [integrations/platforms/render](https://docs.phase.dev/integrations/platforms/render.md) +- [integrations/platforms/supabase](https://docs.phase.dev/integrations/platforms/supabase.md) - [integrations/platforms/jenkins](https://docs.phase.dev/integrations/platforms/jenkins.md) - [integrations/platforms/circleci](https://docs.phase.dev/integrations/platforms/circleci.md) - [integrations/platforms/aws-codebuild](https://docs.phase.dev/integrations/platforms/aws-codebuild.md) diff --git a/public/sitemap.xml b/public/sitemap.xml index de57993c..0c87c415 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1,104 +1,105 @@ -https://docs.phase.dev2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication/account2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication/mfa2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication/oauth-sso2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication/oidc-sso2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication/password2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication/sso2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/authentication/tokens2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/external-identities2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/network2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/provisioning/scim2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/roles2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/service-accounts2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/access-control/teams2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/cli2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/cli/commands2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/cli/install2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/cli/usage2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/apps2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/dynamic-secrets2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/environments2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/logstreams2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/organisation2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/rotating-secrets2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/secrets2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/console/users2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/agents/claude-code2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/agents/codex2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/agents/cursor2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/agents/opencode2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/agents/vscode-copilot2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/frameworks2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/platforms/aws-codebuild2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/platforms/aws-elastic-container-service2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/platforms/aws-iam2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/platforms/aws-secrets-manager2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/platforms/azure-key-vault2026-09-04T17:10:27.620Zdaily0.7 -https://docs.phase.dev/integrations/platforms/azure-pipelines2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/bitbucket-pipelines2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/buildkite2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/circleci2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/cloudflare-pages2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/cloudflare-workers2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/docker2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/docker-compose2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/drone-ci2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/github-actions2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/github-dependabot2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/gitlab-ci2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/hashicorp-nomad2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/hashicorp-terraform2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/hashicorp-vault2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/jenkins2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/jetbrains2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/kubernetes2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/litellm2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/openai2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/railway2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/render2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/teamcity2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/travis-ci2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/integrations/platforms/vercel2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/apps2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/dynamic-secrets2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/environments2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/errors2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/external-identities2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/invites2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/members2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/roles2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/secrets2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/service-accounts2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/public-api/teams2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/quickstart2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/sdks2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/sdks/go2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/sdks/js2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/sdks/node2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/sdks/python2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/security2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/security/architecture2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/security/cryptography2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/aws2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/aws-eks2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/azure2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/azure-aks2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/configuration/envars2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/digitalocean2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/docker-compose2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/gcp2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/kubernetes2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/maintenance2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/railway2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/raspberrypi2026-09-04T17:10:27.621Zdaily0.7 -https://docs.phase.dev/self-hosting/tailscale2026-09-04T17:10:27.621Zdaily0.7 +https://docs.phase.dev2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication/account2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication/mfa2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication/oauth-sso2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication/oidc-sso2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication/password2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication/sso2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/authentication/tokens2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/external-identities2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/network2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/provisioning/scim2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/roles2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/service-accounts2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/access-control/teams2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/cli2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/cli/commands2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/cli/install2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/cli/usage2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/apps2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/dynamic-secrets2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/environments2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/logstreams2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/organisation2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/rotating-secrets2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/secrets2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/console/users2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/agents/claude-code2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/agents/codex2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/agents/cursor2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/agents/opencode2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/agents/vscode-copilot2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/frameworks2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/aws-codebuild2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/aws-elastic-container-service2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/aws-iam2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/aws-secrets-manager2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/azure-key-vault2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/azure-pipelines2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/bitbucket-pipelines2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/buildkite2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/circleci2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/cloudflare-pages2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/cloudflare-workers2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/docker2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/docker-compose2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/drone-ci2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/github-actions2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/github-dependabot2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/gitlab-ci2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/hashicorp-nomad2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/hashicorp-terraform2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/hashicorp-vault2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/jenkins2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/jetbrains2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/kubernetes2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/litellm2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/openai2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/railway2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/render2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/supabase2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/teamcity2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/travis-ci2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/integrations/platforms/vercel2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/apps2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/dynamic-secrets2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/environments2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/errors2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/external-identities2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/invites2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/members2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/roles2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/secrets2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/service-accounts2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/public-api/teams2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/quickstart2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/sdks2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/sdks/go2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/sdks/js2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/sdks/node2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/sdks/python2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/security2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/security/architecture2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/security/cryptography2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/aws2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/aws-eks2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/azure2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/azure-aks2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/configuration/envars2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/digitalocean2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/docker-compose2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/gcp2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/kubernetes2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/maintenance2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/railway2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/raspberrypi2026-09-12T12:19:08.995Zdaily0.7 +https://docs.phase.dev/self-hosting/tailscale2026-09-12T12:19:08.995Zdaily0.7 \ No newline at end of file diff --git a/src/components/Navigation.jsx b/src/components/Navigation.jsx index b2aecfed..ccc80554 100644 --- a/src/components/Navigation.jsx +++ b/src/components/Navigation.jsx @@ -386,6 +386,7 @@ export const navigation = [ { title: 'Vercel', href: '/integrations/platforms/vercel' }, { title: 'Railway', href: '/integrations/platforms/railway' }, { title: 'Render', href: '/integrations/platforms/render' }, + { title: 'Supabase', href: '/integrations/platforms/supabase' }, { title: 'Jenkins', href: '/integrations/platforms/jenkins' }, { title: 'CircleCI', href: '/integrations/platforms/circleci' }, { title: 'AWS CodeBuild', href: '/integrations/platforms/aws-codebuild' }, diff --git a/src/pages/integrations/platforms/aws-secrets-manager.mdx b/src/pages/integrations/platforms/aws-secrets-manager.mdx index bdbc7e68..9e2321a1 100644 --- a/src/pages/integrations/platforms/aws-secrets-manager.mdx +++ b/src/pages/integrations/platforms/aws-secrets-manager.mdx @@ -499,13 +499,6 @@ You first need to set up credentials to use for the sync, and then choose a sour ### Step 1: Set up your AWS credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Create an `AccessKey` via the AWS Console. See [Step 5](#step-5-create-access-keys) for instructions on creating the key. Note the `AccessKeyId` and `SecretAccessKey`. 2. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. diff --git a/src/pages/integrations/platforms/cloudflare-pages.mdx b/src/pages/integrations/platforms/cloudflare-pages.mdx index 078ea016..23827f94 100644 --- a/src/pages/integrations/platforms/cloudflare-pages.mdx +++ b/src/pages/integrations/platforms/cloudflare-pages.mdx @@ -69,13 +69,6 @@ Scroll down and click **Continue to summary** ### Save your credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/src/pages/integrations/platforms/gitlab-ci.mdx b/src/pages/integrations/platforms/gitlab-ci.mdx index f53acb52..ae053353 100644 --- a/src/pages/integrations/platforms/gitlab-ci.mdx +++ b/src/pages/integrations/platforms/gitlab-ci.mdx @@ -110,13 +110,6 @@ This feature is only available on GitLab if you have the Premium or Ultimate lic ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/src/pages/integrations/platforms/hashicorp-nomad.mdx b/src/pages/integrations/platforms/hashicorp-nomad.mdx index 1db3d056..2b88f1be 100644 --- a/src/pages/integrations/platforms/hashicorp-nomad.mdx +++ b/src/pages/integrations/platforms/hashicorp-nomad.mdx @@ -132,14 +132,6 @@ In the following screen you will be presented with a `Token Secret` which is the ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/src/pages/integrations/platforms/hashicorp-vault.mdx b/src/pages/integrations/platforms/hashicorp-vault.mdx index 9da5dc5c..157e7ecf 100644 --- a/src/pages/integrations/platforms/hashicorp-vault.mdx +++ b/src/pages/integrations/platforms/hashicorp-vault.mdx @@ -199,13 +199,6 @@ Phase can automatically sync secrets to your Hashicorp Vault instance. First, yo ### Step 1: Set up your Vault credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Create a `role_id` and `secret_id` via the Vault CLI. See [Step 2](#step-2-setting-up-app-role-authentication-and-acl-policy) for instructions. 2. Go to **Integrations** from the sidebar and click on **Add credentials** in the 'Service credentials' section diff --git a/src/pages/integrations/platforms/railway.mdx b/src/pages/integrations/platforms/railway.mdx index 98b8385c..be358181 100644 --- a/src/pages/integrations/platforms/railway.mdx +++ b/src/pages/integrations/platforms/railway.mdx @@ -50,13 +50,6 @@ Alternatively, if you do have a Railway Team you want to sync secrets to, please ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and click on **Third-party credentials** in the integrations tab. ![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) diff --git a/src/pages/integrations/platforms/render.mdx b/src/pages/integrations/platforms/render.mdx index a424094a..7d5838ae 100644 --- a/src/pages/integrations/platforms/render.mdx +++ b/src/pages/integrations/platforms/render.mdx @@ -42,13 +42,6 @@ You can use Phase to sync secrets with your Render Services and Environment Grou ### Store authentication credentials in Phase - - Your credentials are kept secure with robust application-layer encryption. - Phase encrypts your credentials directly in the browser and only decrypts them - in memory to perform sync operations. Your credentials are never stored in - plaintext. - - 1. Go to **Integrations** from the sidebar and switch to the **Third-party credentials** tab. ![Go to integrations](/assets/images/platform-integrations/render/integrations-creds.png) diff --git a/src/pages/integrations/platforms/supabase.mdx b/src/pages/integrations/platforms/supabase.mdx new file mode 100644 index 00000000..1096085c --- /dev/null +++ b/src/pages/integrations/platforms/supabase.mdx @@ -0,0 +1,109 @@ +import { Tag } from '@/components/Tag' +import { DocActions } from '@/components/DocActions' + +export const description = 'Integrate Phase with Supabase' + +INTEGRATE + +# Supabase Edge Functions + +You can use Phase to sync secrets to your Supabase project. The secrets are available to your Edge Functions at runtime. + + + + + When you enable secret syncing, Phase becomes the source of truth for your + secrets. Phase overwrites or deletes the secrets on the target service. + Import your secrets into Phase before you continue. + + +### Prerequisites + +- Sign up for the [Phase Console](/quickstart) and [create an App](/console/apps#create-an-app). +- Enable Server-side Encryption (SSE) for the App from the [Settings](/console/apps#settings) tab. + +## Step 1: Authentication + +### Create a Supabase access token + +1. Log in to your [Supabase Dashboard](https://supabase.com/dashboard). Click your avatar in the top right, then select **Account**. + +![Supabase account menu](/assets/images/platform-integrations/supabase/supabase-account-menu.png) + +2. Go to the [Access Tokens](https://supabase.com/dashboard/account/tokens) tab and click **Generate New Token**. Enter a descriptive name, select an expiry, and click **Generate token**. Copy the token. Supabase shows it only once. + +![Generate new token](/assets/images/platform-integrations/supabase/supabase-generate-token.png) + + + Supabase requires an expiry on new access tokens (up to 1 year with a custom + date). When the token expires, syncs fail with an authentication error. + Syncs resume after you update the stored credentials with a new token. + + +### Store authentication credentials in Phase + +1. Go to **Integrations** in the sidebar. Then click **Third-party credentials** in the integrations tab. + +![Go to integrations](/assets/images/platform-integrations/integrations-sidebar.png) + +2. Click **Supabase**. + +![supabase-create-creds](/assets/images/platform-integrations/supabase/add-credentials-supabase-1.png) + +3. Enter your Supabase `Access Token` from the previous step. Enter a descriptive name and click **Save**. + +![supabase-input-creds](/assets/images/platform-integrations/supabase/add-credentials-supabase-2.png) + +Phase encrypts and saves your credentials. You can view and manage them under *Service Credentials* in the *Integrations* screen. + +## Step 2: Set up a secret sync + +1. Open your App in the Phase Console and go to the **Syncing** tab. Select **Supabase Edge Functions** in the 'Create a new Sync' menu. + +![create supabase sync](/assets/images/platform-integrations/supabase/create-sync-supabase-1.png) + +2. Select the credentials that you added in the previous step. Then click **Next**. + +![select supabase creds](/assets/images/platform-integrations/supabase/create-sync-supabase-2.png) + +3. Configure the source and destination for your secrets. Select an Environment from your App as the source. If you want to sync from a specific folder, set the Path. Then select a Supabase project from the dropdown and click **Create**. + +![configure supabase sync](/assets/images/platform-integrations/supabase/create-sync-supabase-3.png) + +4. Phase now syncs your secrets to the selected Supabase project automatically. You can manage the sync from the *Syncing* tab of your App or from the *Integrations* screen. + +![supabase sync card](/assets/images/platform-integrations/supabase/supabase-sync-card.png) + + + Supabase reserves secret names that start with `SUPABASE_`, for example + `SUPABASE_URL` and `SUPABASE_ANON_KEY`. Supabase manages these secrets for + every project. The sync does not delete them and does not push Phase secrets + with this prefix. The sync logs list the skipped keys. + + +Synced secrets are available to your Edge Functions without a redeploy. To see them, open the **Edge Functions → Secrets** page in the Supabase Dashboard, or use the Supabase CLI: + +```fish +supabase secrets list --project-ref +``` + +An Edge Function reads the synced secrets as environment variables: + +```ts +Deno.serve(async () => { + const stripeKey = Deno.env.get('STRIPE_SECRET_KEY') + + return new Response( + JSON.stringify({ stripeKeyIsSet: Boolean(stripeKey) }), + { headers: { 'Content-Type': 'application/json' } }, + ) +}) +``` + + + Supabase allows a maximum of 100 secrets per project. If a sync contains + more than 100 secrets, the sync fails before it writes changes to the + project. The sync logs show this error. The + [Edge Functions limits](https://supabase.com/docs/guides/functions/limits) + page lists all limits. +