From 2d55512553b18f83c5e5354fd0f978495394d6f0 Mon Sep 17 00:00:00 2001
From: Charis <26616127+charislam@users.noreply.github.com>
Date: Tue, 4 Feb 2025 13:18:31 -0500
Subject: [PATCH] chore: activate spelling and admonitions lints for docs
(#33292)
---
.github/workflows/docs-lint-v2.yml | 6 +-
apps/docs/components/HomePageCover.tsx | 2 +-
.../NavigationMenu.constants.ts | 2 +-
.../guides/ai/choosing-compute-addon.mdx | 4 +-
.../ai/examples/building-chatgpt-plugins.mdx | 4 +-
.../ai/examples/headless-vector-search.mdx | 2 +-
.../ai/examples/image-search-openai-clip.mdx | 8 +-
.../ai/examples/nextjs-vector-search.mdx | 2 +-
.../content/guides/ai/examples/openai.mdx | 2 +-
.../semantic-image-search-amazon-titan.mdx | 4 +-
apps/docs/content/guides/ai/going-to-prod.mdx | 6 +-
.../guides/ai/integrations/llamaindex.mdx | 4 +-
apps/docs/content/guides/ai/langchain.mdx | 2 +-
.../quickstarts/generate-text-embeddings.mdx | 2 +-
.../guides/ai/rag-with-permissions.mdx | 8 +-
.../docs/content/guides/ai/vector-columns.mdx | 4 +-
.../content/guides/api/creating-routes.mdx | 12 +-
.../guides/api/rest/generating-types.mdx | 2 +-
apps/docs/content/guides/api/sql-to-api.mdx | 2 +-
apps/docs/content/guides/api/sql-to-rest.mdx | 2 +-
.../content/guides/auth/auth-anonymous.mdx | 10 +-
.../docs/content/guides/auth/auth-captcha.mdx | 22 +--
.../guides/auth/auth-helpers/auth-ui.mdx | 4 +-
.../auth/auth-helpers/flutter-auth-ui.mdx | 12 +-
.../guides/auth/auth-helpers/nextjs-pages.mdx | 18 +-
.../guides/auth/auth-helpers/nextjs.mdx | 2 +-
.../guides/auth/auth-helpers/sveltekit.mdx | 20 +--
apps/docs/content/guides/auth/auth-hooks.mdx | 10 +-
.../auth/auth-hooks/send-email-hook.mdx | 2 +-
.../guides/auth/auth-hooks/send-sms-hook.mdx | 2 +-
apps/docs/content/guides/auth/auth-mfa.mdx | 2 +-
apps/docs/content/guides/auth/auth-smtp.mdx | 2 +-
.../auth/enterprise-sso/auth-sso-saml.mdx | 20 +--
apps/docs/content/guides/auth/jwts.mdx | 2 +-
.../auth/native-mobile-deep-linking.mdx | 15 +-
apps/docs/content/guides/auth/passwords.mdx | 4 +-
apps/docs/content/guides/auth/phone-login.mdx | 2 +-
.../auth/server-side/creating-a-client.mdx | 2 +-
.../guides/auth/social-login/auth-apple.mdx | 12 +-
.../guides/auth/social-login/auth-azure.mdx | 4 +-
.../auth/social-login/auth-bitbucket.mdx | 6 +-
.../guides/auth/social-login/auth-discord.mdx | 4 +-
.../auth/social-login/auth-facebook.mdx | 6 +-
.../guides/auth/social-login/auth-figma.mdx | 4 +-
.../guides/auth/social-login/auth-github.mdx | 6 +-
.../guides/auth/social-login/auth-gitlab.mdx | 4 +-
.../guides/auth/social-login/auth-google.mdx | 14 +-
.../guides/auth/social-login/auth-kakao.mdx | 6 +-
.../auth/social-login/auth-keycloak.mdx | 16 +-
.../auth/social-login/auth-linkedin.mdx | 4 +-
.../guides/auth/social-login/auth-notion.mdx | 6 +-
.../guides/auth/social-login/auth-slack.mdx | 4 +-
.../guides/auth/social-login/auth-spotify.mdx | 4 +-
.../guides/auth/social-login/auth-twitch.mdx | 6 +-
.../guides/auth/social-login/auth-twitter.mdx | 4 +-
.../guides/auth/social-login/auth-workos.mdx | 2 +-
.../guides/auth/social-login/auth-zoom.mdx | 4 +-
.../guides/auth/third-party/overview.mdx | 2 +-
apps/docs/content/guides/auth/users.mdx | 2 +-
apps/docs/content/guides/cron/install.mdx | 2 +-
apps/docs/content/guides/cron/quickstart.mdx | 4 +-
apps/docs/content/guides/database/arrays.mdx | 6 +
.../database/connecting-to-postgres.mdx | 2 +-
.../guides/database/connection-management.mdx | 38 ++--
.../database/custom-postgres-config.mdx | 2 +-
.../guides/database/extensions/http.mdx | 2 +-
.../guides/database/extensions/pg_hashids.mdx | 4 +-
.../guides/database/extensions/pg_net.mdx | 2 +-
.../database/extensions/pg_stat_monitor.mdx | 30 ++--
.../extensions/pg_stat_statements.mdx | 20 +--
.../guides/database/extensions/pgaudit.mdx | 28 +--
.../guides/database/extensions/postgis.mdx | 10 +-
.../guides/database/extensions/rum.mdx | 12 +-
.../database/extensions/timescaledb.mdx | 4 +-
.../guides/database/extensions/uuid-ossp.mdx | 2 +-
.../guides/database/full-text-search.mdx | 32 ++--
.../content/guides/database/functions.mdx | 14 +-
apps/docs/content/guides/database/inspect.mdx | 4 +-
apps/docs/content/guides/database/json.mdx | 4 +
.../docs/content/guides/database/orioledb.mdx | 4 +-
apps/docs/content/guides/database/pgadmin.mdx | 2 +-
...ims-and-role-based-access-control-rbac.mdx | 2 +-
.../guides/database/postgres/indexes.mdx | 2 +-
.../guides/database/postgres/roles.mdx | 6 +-
.../database/postgres/row-level-security.mdx | 2 +-
.../postgres/setup-replication-external.mdx | 4 +-
.../guides/database/postgres/timeouts.mdx | 23 ++-
apps/docs/content/guides/database/prisma.mdx | 16 +-
.../content/guides/database/supavisor.mdx | 20 +--
apps/docs/content/guides/database/tables.mdx | 100 ++++++-----
apps/docs/content/guides/database/testing.mdx | 2 +-
.../content/guides/deployment/branching.mdx | 4 +-
.../guides/deployment/database-migrations.mdx | 2 +-
.../guides/deployment/going-into-prod.mdx | 6 +-
.../deployment/managing-environments.mdx | 6 +-
.../shared-responsibility-model.mdx | 2 +-
.../content/guides/functions/ai-models.mdx | 6 +-
.../content/guides/functions/compression.mdx | 2 +-
.../content/guides/functions/dependencies.mdx | 4 +-
.../guides/functions/ephemeral-storage.mdx | 6 +-
...uth-send-email-hook-react-email-resend.mdx | 6 +-
.../functions/examples/image-manipulation.mdx | 6 +-
.../functions/examples/push-notifications.mdx | 4 +-
.../guides/functions/examples/screenshots.mdx | 2 +-
.../functions/examples/semantic-search.mdx | 2 +-
.../guides/functions/examples/send-emails.mdx | 2 +-
apps/docs/content/guides/functions/limits.mdx | 2 +-
.../guides/functions/local-development.mdx | 2 +-
.../content/guides/functions/quickstart.mdx | 6 +-
.../docs/content/guides/functions/routing.mdx | 10 +-
.../content/guides/functions/status-codes.mdx | 2 +-
.../content/guides/functions/unit-test.mdx | 2 +-
apps/docs/content/guides/functions/wasm.mdx | 6 +-
.../content/guides/functions/websockets.mdx | 14 +-
apps/docs/content/guides/getting-started.mdx | 4 +-
.../guides/getting-started/architecture.mdx | 6 +-
.../guides/getting-started/features.mdx | 10 +-
.../getting-started/quickstarts/flutter.mdx | 4 +-
.../getting-started/quickstarts/hono.mdx | 2 +-
.../quickstarts/ios-swiftui.mdx | 4 +-
.../getting-started/quickstarts/laravel.mdx | 2 +-
.../getting-started/quickstarts/nuxtjs.mdx | 14 +-
.../getting-started/quickstarts/redwoodjs.mdx | 2 +-
.../getting-started/quickstarts/refine.mdx | 2 +-
.../tutorials/with-angular.mdx | 14 +-
.../tutorials/with-flutter.mdx | 2 +-
.../tutorials/with-ionic-angular.mdx | 16 +-
.../tutorials/with-ionic-react.mdx | 4 +-
.../tutorials/with-ionic-vue.mdx | 4 +-
.../getting-started/tutorials/with-kotlin.mdx | 4 +-
.../getting-started/tutorials/with-nuxt-3.mdx | 6 +-
.../tutorials/with-redwoodjs.mdx | 2 +-
.../tutorials/with-solidjs.mdx | 2 +-
.../getting-started/tutorials/with-svelte.mdx | 6 +-
.../tutorials/with-sveltekit.mdx | 6 +-
.../getting-started/tutorials/with-swift.mdx | 4 +-
.../local-development/cli/getting-started.mdx | 2 +-
.../customizing-email-templates.mdx | 12 +-
.../guides/local-development/overview.mdx | 4 +-
.../guides/platform/access-control.mdx | 2 +-
.../content/guides/platform/billing-faq.mdx | 8 +-
.../guides/platform/compute-and-disk.mdx | 2 +-
.../guides/platform/custom-domains.mdx | 4 +-
.../content/guides/platform/fly-postgres.mdx | 2 +-
.../content/guides/platform/ipv4-address.mdx | 2 +-
.../platform/migrating-to-supabase/auth0.mdx | 8 +-
.../migrating-to-supabase/firebase-auth.mdx | 6 +-
.../firebase-storage.mdx | 4 +-
.../migrating-to-supabase/firestore-data.mdx | 6 +-
.../platform/migrating-to-supabase/mysql.mdx | 2 +-
.../backup-restore.mdx | 4 +-
.../dashboard-restore.mdx | 6 +-
.../guides/platform/org-based-billing.mdx | 2 +-
.../guides/platform/project-transfer.mdx | 4 +-
apps/docs/content/guides/platform/sso.mdx | 4 +-
.../content/guides/platform/sso/azure.mdx | 6 +-
.../content/guides/platform/sso/gsuite.mdx | 8 +-
.../docs/content/guides/platform/sso/okta.mdx | 8 +-
apps/docs/content/guides/queues/api.mdx | 28 +--
apps/docs/content/guides/queues/pgmq.mdx | 170 +++++++++---------
.../docs/content/guides/queues/quickstart.mdx | 6 +-
.../content/guides/realtime/benchmarks.mdx | 4 +-
.../docs/content/guides/realtime/concepts.mdx | 2 +-
.../content/guides/realtime/error_codes.mdx | 66 +++----
.../guides/realtime/postgres-changes.mdx | 12 +-
apps/docs/content/guides/realtime/quotas.mdx | 2 +-
.../content/guides/resources/glossary.mdx | 6 +-
.../content/guides/self-hosting/docker.mdx | 12 +-
.../guides/storage/buckets/fundamentals.mdx | 2 +-
.../content/guides/storage/cdn/smart-cdn.mdx | 2 +-
.../guides/storage/debugging/error-codes.mdx | 80 ++++-----
.../guides/storage/s3/compatibility.mdx | 8 +
.../guides/storage/serving/downloads.mdx | 8 +-
.../storage/serving/image-transformations.mdx | 8 +-
.../storage/uploads/resumable-uploads.mdx | 10 +-
.../telemetry/advanced-log-filtering.mdx | 2 +-
.../content/guides/telemetry/log-drains.mdx | 14 +-
.../docs/content/guides/telemetry/metrics.mdx | 5 +-
.../guides/telemetry/sentry-monitoring.mdx | 4 +-
...monitor-supavisor-postgres-connections.mdx | 24 +--
apps/docs/features/command/Quickstarts.tsx | 2 +-
apps/docs/package.json | 2 +-
apps/docs/spec/supabase_kt_v1.yml | 8 +-
pnpm-lock.yaml | 66 +++----
supa-mdx-lint.config.toml | 8 +-
supa-mdx-lint/Rule001HeadingCase.toml | 2 +-
supa-mdx-lint/Rule003Spelling.toml | 116 +++++++++++-
vale/styles/Custom/Spelling.yml | 10 --
188 files changed, 951 insertions(+), 824 deletions(-)
delete mode 100644 vale/styles/Custom/Spelling.yml
diff --git a/.github/workflows/docs-lint-v2.yml b/.github/workflows/docs-lint-v2.yml
index 5ec6e0d3127..fc1112313fc 100644
--- a/.github/workflows/docs-lint-v2.yml
+++ b/.github/workflows/docs-lint-v2.yml
@@ -38,10 +38,10 @@ jobs:
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
- key: 6435a4cd1eeea7c2bbd343731de7e8a5127cb2d1
+ key: 0be447eba738c3fd56698eff8ad01fa56c2391d7
- name: install linter
if: steps.cache-cargo.outputs.cache-hit != 'true'
- run: cargo install --locked --git https://github.com/supabase-community/supa-mdx-lint --rev 6435a4cd1eeea7c2bbd343731de7e8a5127cb2d1
+ run: cargo install --locked --git https://github.com/supabase-community/supa-mdx-lint --rev 0be447eba738c3fd56698eff8ad01fa56c2391d7
- name: install reviewdog
uses: reviewdog/action-setup@3f401fe1d58fe77e10d665ab713057375e39b887 # v1.3.0
with:
@@ -54,7 +54,7 @@ jobs:
run: |
set -o pipefail
git diff --name-only origin/$BASE_REF HEAD \
- | { grep -E "^apps/docs/content/guides/" || test $? = 1; } \
+ | { grep -E "^apps/docs/content/" || test $? = 1; } \
| xargs -r supa-mdx-lint --format rdf \
| reviewdog -f=rdjsonl -reporter=github-pr-review
- name: run linter on push or workflow dispatch
diff --git a/apps/docs/components/HomePageCover.tsx b/apps/docs/components/HomePageCover.tsx
index dd67ee4e641..25bd3b32a48 100644
--- a/apps/docs/components/HomePageCover.tsx
+++ b/apps/docs/components/HomePageCover.tsx
@@ -74,7 +74,7 @@ const HomePageCover = (props) => {
href: '/guides/getting-started/quickstarts/vue',
},
{
- tooltip: 'NuxtJS',
+ tooltip: 'Nuxt',
icon: '/docs/img/icons/nuxt-icon',
href: '/guides/getting-started/quickstarts/nuxtjs',
},
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
index aed0de1cdac..c3fccd5395e 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
@@ -258,7 +258,7 @@ export const gettingstarted: NavMenuConstant = {
items: [
{ name: 'Next.js', url: '/guides/getting-started/quickstarts/nextjs' },
{ name: 'React', url: '/guides/getting-started/quickstarts/reactjs' },
- { name: 'NuxtJS', url: '/guides/getting-started/quickstarts/nuxtjs' },
+ { name: 'Nuxt', url: '/guides/getting-started/quickstarts/nuxtjs' },
{ name: 'Vue', url: '/guides/getting-started/quickstarts/vue' },
{ name: 'Hono', url: '/guides/getting-started/quickstarts/hono' },
{ name: 'Flutter', url: '/guides/getting-started/quickstarts/flutter' },
diff --git a/apps/docs/content/guides/ai/choosing-compute-addon.mdx b/apps/docs/content/guides/ai/choosing-compute-addon.mdx
index fe8c562b023..7c36ccfdd72 100644
--- a/apps/docs/content/guides/ai/choosing-compute-addon.mdx
+++ b/apps/docs/content/guides/ai/choosing-compute-addon.mdx
@@ -277,7 +277,7 @@ There are various ways to improve your pgvector performance. Here are some tips:
It's useful to execute a few thousand “warm-up” queries before going into production. This helps help with RAM utilization. This can also help to determine that you've selected the right compute size for your workload.
-### Finetune index parameters
+### Fine-tune index parameters
You can increase the Requests per Second by increasing `m` and `ef_construction` or `lists`. This also has an important caveat: building the index takes longer with higher values for these parameters.
@@ -301,7 +301,7 @@ You can increase the Requests per Second by increasing `m` and `ef_construction`
-
+
- Include the script in your `package.json` script commands to enable Vercel to automaticall run it at build time.
+ Include the script in your `package.json` script commands to enable Vercel to automatically run it at build time.
diff --git a/apps/docs/content/guides/ai/examples/openai.mdx b/apps/docs/content/guides/ai/examples/openai.mdx
index b437530179c..eeda26ee421 100644
--- a/apps/docs/content/guides/ai/examples/openai.mdx
+++ b/apps/docs/content/guides/ai/examples/openai.mdx
@@ -91,7 +91,7 @@ You should see a GPT response come back from OpenAI!
## Deploy
-Deploy your function to the cloud by runnning:
+Deploy your function to the cloud by running:
```bash
supabase functions deploy --no-verify-jwt openai
diff --git a/apps/docs/content/guides/ai/examples/semantic-image-search-amazon-titan.mdx b/apps/docs/content/guides/ai/examples/semantic-image-search-amazon-titan.mdx
index 373720b7797..4f831e609da 100644
--- a/apps/docs/content/guides/ai/examples/semantic-image-search-amazon-titan.mdx
+++ b/apps/docs/content/guides/ai/examples/semantic-image-search-amazon-titan.mdx
@@ -84,7 +84,7 @@ bedrock_client = boto3.client(
## Create embeddings for your images
-In the root of your project, create a new folder called `images` and add some images. You can use the images from the example project on [GitHub](https://github.com/supabase/supabase/tree/master/examples/ai/aws_bedrock_image_search/images) or you can find license free images on [unsplash](https://unsplash.com).
+In the root of your project, create a new folder called `images` and add some images. You can use the images from the example project on [GitHub](https://github.com/supabase/supabase/tree/master/examples/ai/aws_bedrock_image_search/images) or you can find license free images on [Unsplash](https://unsplash.com).
To send images to the Amazon Bedrock API we need to need to encode them as `base64` strings. Create the following helper methods:
@@ -188,7 +188,7 @@ seed = "image_search.main:seed"
search = "image_search.main:search"
```
-After activating the virtual environtment with `poetry shell` you can now run your seed script via `poetry run seed`. You can inspect the generated embeddings in your Supabase Dashboard by visiting the [Table Editor](https://supabase.com/dashboard/project/_/editor), selecting the `vecs` schema, and the `image_vectors` table.
+After activating the virtual environment with `poetry shell` you can now run your seed script via `poetry run seed`. You can inspect the generated embeddings in your Supabase Dashboard by visiting the [Table Editor](https://supabase.com/dashboard/project/_/editor), selecting the `vecs` schema, and the `image_vectors` table.
## Perform an image search from a text query
diff --git a/apps/docs/content/guides/ai/going-to-prod.mdx b/apps/docs/content/guides/ai/going-to-prod.mdx
index a82522b043b..5d43a161a6f 100644
--- a/apps/docs/content/guides/ai/going-to-prod.mdx
+++ b/apps/docs/content/guides/ai/going-to-prod.mdx
@@ -29,7 +29,7 @@ On the other hand, if you need to scale your application, you will need to [crea
`pgvector` supports two types of indexes: HNSW and IVFFlat. We recommend using [HNSW](/docs/guides/ai/vector-indexes/hnsw-indexes) because of its [performance](https://supabase.com/blog/increase-performance-pgvector-hnsw#hnsw-performance-1536-dimensions) and [robustness against changing data](/docs/guides/ai/vector-indexes/hnsw-indexes#when-should-you-create-hnsw-indexes).
@@ -66,5 +66,5 @@ You can view the inserted items in the [Table Editor](https://supabase.com/dashb
## Resources
-- Visit the LlamaIndex + SupabaseVectorStore [docs](https://gpt-index.readthedocs.io/en/latest/examples/vector_stores/SupabaseVectorIndexDemo.html)
+- Visit the LlamaIndex + `SupabaseVectorStore` [docs](https://gpt-index.readthedocs.io/en/latest/examples/vector_stores/SupabaseVectorIndexDemo.html)
- Visit the official LlamaIndex [repo](https://github.com/jerryjliu/llama_index/)
diff --git a/apps/docs/content/guides/ai/langchain.mdx b/apps/docs/content/guides/ai/langchain.mdx
index df6a2b80dde..f0874ca37a7 100644
--- a/apps/docs/content/guides/ai/langchain.mdx
+++ b/apps/docs/content/guides/ai/langchain.mdx
@@ -147,7 +147,7 @@ export const run = async () => {
### Advanced metadata filtering
-You can also use query builder-style filtering ([similar to how the Supabase JavaScript library works](https://supabase.com/docs/reference/javascript/using-filters)) instead of passing an object. Note that since the filter properties will be in the metadata column, you need to use arrow operators (`->` for integer or `->>` for text) as defined in [Postgrest API documentation](https://postgrest.org/en/stable/references/api/tables_views.html?highlight=operators#json-columns) and specify the data type of the property (e.g. the column should look something like `metadata->some_int_value::int`).
+You can also use query builder-style filtering ([similar to how the Supabase JavaScript library works](https://supabase.com/docs/reference/javascript/using-filters)) instead of passing an object. Note that since the filter properties will be in the metadata column, you need to use arrow operators (`->` for integer or `->>` for text) as defined in [PostgREST API documentation](https://postgrest.org/en/stable/references/api/tables_views.html?highlight=operators#json-columns) and specify the data type of the property (e.g. the column should look something like `metadata->some_int_value::int`).
```js
import { SupabaseFilterRPCCall, SupabaseVectorStore } from 'langchain/vectorstores/supabase'
diff --git a/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx b/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx
index 816b5ccaf2e..197d928c2e2 100644
--- a/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx
+++ b/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx
@@ -109,7 +109,7 @@ Let's build an Edge Function that will accept an input string and generate an em
Note the two options we pass to `session.run()`:
- - `mean_pool`: The first option sets `pooling` to `mean`. Pooling referes to how token-level embedding representations are compressed into a single sentence embedding that reflects the meaning of the entire sentence. Average pooling is the most common type of pooling for sentence embeddings.
+ - `mean_pool`: The first option sets `pooling` to `mean`. Pooling refers to how token-level embedding representations are compressed into a single sentence embedding that reflects the meaning of the entire sentence. Average pooling is the most common type of pooling for sentence embeddings.
- `normalize`: The second option tells to normalize the embedding vector so that it can be used with distance measures like dot product. A normalized vector means its length (magnitude) is 1 - also referred to as a unit vector. A vector is normalized by dividing each element by the vector's length (magnitude), which maintains its direction but changes its length to 1.
diff --git a/apps/docs/content/guides/ai/rag-with-permissions.mdx b/apps/docs/content/guides/ai/rag-with-permissions.mdx
index 3a3256527e0..996659da5fd 100644
--- a/apps/docs/content/guides/ai/rag-with-permissions.mdx
+++ b/apps/docs/content/guides/ai/rag-with-permissions.mdx
@@ -50,7 +50,7 @@ on document_sections for select to authenticated using (
);
```
-
+
In this example, the current user is determined using the built-in `auth.uid()` function when the query is executed through your project's auto-generated [REST API](/docs/guides/api). If you are connecting to your Supabase database through a direct Postgres connection, see [Direct Postgres Connection](#direct-postgres-connection) below for directions on how to achieve the same access control.
@@ -117,7 +117,7 @@ RLS is latency-sensitive, so extra caution should be taken before implementing t
-
+
For data sources other than Postgres, see [Foreign Data Wrappers](/docs/guides/database/extensions/wrappers/overview) for a list of external sources supported today. If your data lives in a source not provided in the list, please contact [support](https://supabase.com/dashboard/support/new) and we'll be happy to discuss your use case.
@@ -161,7 +161,7 @@ import foreign schema public limit to (users, documents)
from server foreign_server into external;
```
-
+
This example maps the `authenticated` role in Supabase to the `postgres` user in the external DB. In production, it's best to create a custom user on the external DB that has the minimum permissions necessary to access the information you need.
@@ -224,7 +224,7 @@ where document_sections.embedding <#> embedding < -match_threshold
order by document_sections.embedding <#> embedding;
```
-
+
You might be tempted to discard RLS completely and simply filter by user within the `where` clause. Though this will work, we recommend RLS as a general best practice since RLS is always applied even as new queries and application logic is introduced in the future.
diff --git a/apps/docs/content/guides/ai/vector-columns.mdx b/apps/docs/content/guides/ai/vector-columns.mdx
index 9c8c2c811b9..eee63e05822 100644
--- a/apps/docs/content/guides/ai/vector-columns.mdx
+++ b/apps/docs/content/guides/ai/vector-columns.mdx
@@ -61,7 +61,7 @@ create table documents (
In the above SQL snippet, we create a `documents` table with a column called `embedding` (note this is just a regular Postgres column - you can name it whatever you like). We give the `embedding` column a `vector` data type with 384 dimensions. Change this to the number of dimensions produced by your embedding model. For example, if you are [generating embeddings](/docs/guides/ai/quickstarts/generate-text-embeddings) using the open source [`gte-small`](https://huggingface.co/Supabase/gte-small) model, you would set this number to 384 since that model produces 384 dimensions.
-
+
In general, embeddings with fewer dimensions perform best. See our [analysis on fewer dimensions in pgvector](https://supabase.com/blog/fewer-dimensions-are-better-pgvector).
@@ -155,7 +155,7 @@ const { data: documents } = await supabaseClient.rpc('match_documents', {
In this example `embedding` would be another embedding you wish to compare against your table of pre-generated embedding documents. For example if you were building a search engine, every time the user submits their query you would first generate an embedding on the search query itself, then pass it into the above `rpc()` function to match.
-
+
Be sure to use embeddings produced from the same embedding model when calculating distance. Comparing embeddings from two different models will produce no meaningful result.
diff --git a/apps/docs/content/guides/api/creating-routes.mdx b/apps/docs/content/guides/api/creating-routes.mdx
index 43e78a99f84..64c44884024 100644
--- a/apps/docs/content/guides/api/creating-routes.mdx
+++ b/apps/docs/content/guides/api/creating-routes.mdx
@@ -105,9 +105,9 @@ curl '/rest/v1/todos' \
-JS Reference: [select()](/docs/reference/javascript/select),
-[insert()](/docs/reference/javascript/insert),
-[update()](/docs/reference/javascript/update),
-[upsert()](/docs/reference/javascript/upsert),
-[delete()](/docs/reference/javascript/delete),
-[rpc()](/docs/reference/javascript/rpc) (call Postgres functions).
+JS Reference: [`select()`](/docs/reference/javascript/select),
+[`insert()`](/docs/reference/javascript/insert),
+[`update()`](/docs/reference/javascript/update),
+[`upsert()`](/docs/reference/javascript/upsert),
+[`delete()`](/docs/reference/javascript/delete),
+[`rpc()`](/docs/reference/javascript/rpc) (call Postgres functions).
diff --git a/apps/docs/content/guides/api/rest/generating-types.mdx b/apps/docs/content/guides/api/rest/generating-types.mdx
index c5cf62d86e8..ad6036620e7 100644
--- a/apps/docs/content/guides/api/rest/generating-types.mdx
+++ b/apps/docs/content/guides/api/rest/generating-types.mdx
@@ -258,7 +258,7 @@ jobs:
branch: ${{ github.ref }}
```
-Alternatively, you can use a community-supported GitHub action: [generate-supabase-db-types-github-action](https://github.com/lyqht/generate-supabase-db-types-github-action).
+Alternatively, you can use a community-supported GitHub action: [`generate-supabase-db-types-github-action`](https://github.com/lyqht/generate-supabase-db-types-github-action).
## Resources
diff --git a/apps/docs/content/guides/api/sql-to-api.mdx b/apps/docs/content/guides/api/sql-to-api.mdx
index 2e2183d0766..e3456d988b4 100644
--- a/apps/docs/content/guides/api/sql-to-api.mdx
+++ b/apps/docs/content/guides/api/sql-to-api.mdx
@@ -66,7 +66,7 @@ const { data, error } = await supabase
## Resources
- [Supabase - Get started for free](https://supabase.com)
-- [Postgrest Operators](https://postgrest.org/en/stable/api.html#operators)
+- [PostgREST Operators](https://postgrest.org/en/stable/api.html#operators)
- [Supabase API: JavaScript select](/docs/reference/javascript/select)
- [Supabase API: JavaScript modifiers](/docs/reference/javascript/using-modifiers)
- [Supabase API: JavaScript filters](/docs/reference/javascript/using-filters)
diff --git a/apps/docs/content/guides/api/sql-to-rest.mdx b/apps/docs/content/guides/api/sql-to-rest.mdx
index e96e844932b..13d3ad031ce 100644
--- a/apps/docs/content/guides/api/sql-to-rest.mdx
+++ b/apps/docs/content/guides/api/sql-to-rest.mdx
@@ -7,7 +7,7 @@ description: 'Translate SQL queries to HTTP requests and Supabase client code'
Sometimes it's challenging to translate SQL queries to the equivalent [PostgREST](https://postgrest.org/) request or Supabase client code. Use this tool to help with this translation.
-
+
PostgREST supports a subset of SQL, so not all SQL queries will translate.
diff --git a/apps/docs/content/guides/auth/auth-anonymous.mdx b/apps/docs/content/guides/auth/auth-anonymous.mdx
index 1e4a506e1b6..04433660137 100644
--- a/apps/docs/content/guides/auth/auth-anonymous.mdx
+++ b/apps/docs/content/guides/auth/auth-anonymous.mdx
@@ -189,7 +189,7 @@ response = supabase.auth.update_user({
>
-You can use the [`linkIdentity()`](/docs/reference/javascript/auth-linkidentity) method to link an oauth identity to the anonymous user.
+You can use the [`linkIdentity()`](/docs/reference/javascript/auth-linkidentity) method to link an OAuth identity to the anonymous user.
```js
const { data, error } = await supabase.auth.linkIdentity({ provider: 'google' })
@@ -216,7 +216,7 @@ try await supabase.auth.linkIdentity(provider: .google)
-You can use the [`linkIdentity()`](/docs/reference/kotlin/auth-linkidentity) method to link an oauth identity to the anonymous user.
+You can use the [`linkIdentity()`](/docs/reference/kotlin/auth-linkidentity) method to link an OAuth identity to the anonymous user.
```kotlin
supabase.auth.linkIdentity(Google)
@@ -225,7 +225,7 @@ supabase.auth.linkIdentity(Google)
-You can use the [`link_identity()`](/docs/reference/python/auth-linkidentity) method to link an oauth identity to the anonymous user.
+You can use the [`link_identity()`](/docs/reference/python/auth-linkidentity) method to link an OAuth identity to the anonymous user.
```python
response = supabase.auth.link_identity({'provider': 'google'})
@@ -250,7 +250,7 @@ to authenticated
using ( true );
```
-
+
RLS policies are permissive by default, which means that they are combined using an "OR" operator when multiple policies are applied. It is important to construct restrictive policies to ensure that the checks for an anonymous user are always enforced when combined with other policies.
@@ -313,7 +313,7 @@ async function resolveDataConflicts(anonymousUserId, existingUserId) {
## Abuse prevention and rate limits
-Since anonymous users are stored in your database, bad actors can abuse the endpoint to increase your database size drastically. It is strongly recommended to [enable invisible Captcha or Cloudflare Turnstile](/docs/guides/auth/auth-captcha) to prevent abuse for anonymous sign-ins. An IP-based rate limit is enforced at 30 requests per hour which can be modified in your [dashboard](/dashboard/project/_/auth/rate-limits). You can refer to the full list of rate limits [here](/docs/guides/platform/going-into-prod#rate-limiting-resource-allocation--abuse-prevention).
+Since anonymous users are stored in your database, bad actors can abuse the endpoint to increase your database size drastically. It is strongly recommended to [enable invisible CAPTCHA or Cloudflare Turnstile](/docs/guides/auth/auth-captcha) to prevent abuse for anonymous sign-ins. An IP-based rate limit is enforced at 30 requests per hour which can be modified in your [dashboard](/dashboard/project/_/auth/rate-limits). You can refer to the full list of rate limits [here](/docs/guides/platform/going-into-prod#rate-limiting-resource-allocation--abuse-prevention).
## Automatic cleanup
diff --git a/apps/docs/content/guides/auth/auth-captcha.mdx b/apps/docs/content/guides/auth/auth-captcha.mdx
index a55b4e46ab2..9d5e8c99dab 100644
--- a/apps/docs/content/guides/auth/auth-captcha.mdx
+++ b/apps/docs/content/guides/auth/auth-captcha.mdx
@@ -41,13 +41,13 @@ In the Settings page, look for the **Sitekey** section and copy the key.
## Enable CAPTCHA protection for your Supabase project
-Navigate to the **[Auth](https://supabase.com/dashboard/project/_/settings/auth)** section of your Project Settings in the Supabase Dashboard and find the **Enable Captcha protection** toggle under Settings > Authentication > Bot and Abuse Protection > Enable Captcha protection.
+Navigate to the **[Auth](https://supabase.com/dashboard/project/_/settings/auth)** section of your Project Settings in the Supabase Dashboard and find the **Enable CAPTCHA protection** toggle under Settings > Authentication > Bot and Abuse Protection > Enable CAPTCHA protection.
-Select your CAPTCHA provider from the dropdown, enter your Captcha **Secret key**, and click **Save**.
+Select your CAPTCHA provider from the dropdown, enter your CAPTCHA **Secret key**, and click **Save**.
## Add the CAPTCHA frontend component
-The frontend requires some changes to provide the captcha on-screen for the user. This example uses React and the corresponding Captcha React component, but both Captcha providers can be used with any JavaScript framework.
+The frontend requires some changes to provide the CAPTCHA on-screen for the user. This example uses React and the corresponding CAPTCHA React component, but both CAPTCHA providers can be used with any JavaScript framework.
```
-We will pass it the sitekey we copied from the hCaptcha website as a property along with a onVerify property which takes a callback function. This callback function will have a token as one of its properties. Let's set the token in the state using `setCaptchaToken`
+We will pass it the sitekey we copied from the hCaptcha website as a property along with a `onVerify` property which takes a callback function. This callback function will have a token as one of its properties. Let's set the token in the state using `setCaptchaToken`
```jsx
```
-Now lets use the captcha token we receive in our Supabase signUp function.
+Now lets use the CAPTCHA token we receive in our Supabase signUp function.
```jsx
await supabase.auth.signUp({
@@ -104,9 +104,9 @@ await supabase.auth.signUp({
})
```
-We will also need to reset the captcha challenge after we have made a call to the function above.
+We will also need to reset the CAPTCHA challenge after we have made a call to the function above.
-Create a ref to use on our HCaptcha component.
+Create a ref to use on our `HCaptcha` component.
```jsx
const captcha = useRef()
@@ -136,7 +136,7 @@ In order to test that this works locally we will need to use something like [ngr
-The frontend requires some changes to provide the captcha on-screen for the user. Turnstile can be used with any JavaScript framework but we'll use React and the Turnstile React component for this example.
+The frontend requires some changes to provide the CAPTCHA on-screen for the user. Turnstile can be used with any JavaScript framework but we'll use React and the Turnstile React component for this example.
Install @marsidev/react-turnstile in your project as a dependency.
@@ -183,9 +183,9 @@ await supabase.auth.signUp({
})
```
-To test locally, you will need to add localhost to the domain whitelist as per the [Cloudflare docs](https://developers.cloudflare.com/turnstile/reference/testing/)
+To test locally, you will need to add localhost to the domain allowlist as per the [Cloudflare docs](https://developers.cloudflare.com/turnstile/reference/testing/)
-Run the application and you should now be provided with a captcha challenge.
+Run the application and you should now be provided with a CAPTCHA challenge.
diff --git a/apps/docs/content/guides/auth/auth-helpers/auth-ui.mdx b/apps/docs/content/guides/auth/auth-helpers/auth-ui.mdx
index 55d96374d17..7b239511062 100644
--- a/apps/docs/content/guides/auth/auth-helpers/auth-ui.mdx
+++ b/apps/docs/content/guides/auth/auth-helpers/auth-ui.mdx
@@ -5,7 +5,7 @@ description: 'A prebuilt, customizable React component for authenticating users.
sitemapPriority: 0.5
---
-
+
As of 7th Feb 2024, [this repository](https://github.com/supabase-community/auth-ui) is no longer maintained by the Supabase Team. At the moment, the team does not have capacity to give the expected level of care to this repository. We may revisit Auth UI in the future but regrettably have to leave it on hold for now as we focus on other priorities such as improving the Server-Side Rendering (SSR) package and advanced Auth primitives.
@@ -444,7 +444,7 @@ A full list of the available variables is below:
| `phone_input_label` | Phone number |
| `phone_input_placeholder` | Your phone number |
| `token_input_label` | Token |
-| `token_input_placeholder` | Your Otp token |
+| `token_input_placeholder` | Your OTP token |
| `button_label` | Verify token |
| `loading_button_label` | Signing in ... |
diff --git a/apps/docs/content/guides/auth/auth-helpers/flutter-auth-ui.mdx b/apps/docs/content/guides/auth/auth-helpers/flutter-auth-ui.mdx
index c088488c816..73507acfc71 100644
--- a/apps/docs/content/guides/auth/auth-helpers/flutter-auth-ui.mdx
+++ b/apps/docs/content/guides/auth/auth-helpers/flutter-auth-ui.mdx
@@ -36,9 +36,9 @@ void main() async {
### Email Auth
-Use a SupaEmailAuth widget to create an email and password signin and signup form. It also contains a button to toggle to display a forgot password form.
+Use a `SupaEmailAuth` widget to create an email and password signin and signup form. It also contains a button to toggle to display a forgot password form.
-You can pass metadataFields to add additional fields to the form to pass as metadata to Supabase.
+You can pass `metadataFields` to add additional fields to the form to pass as metadata to Supabase.
```dart
SupaEmailAuth(
@@ -63,7 +63,7 @@ SupaEmailAuth(
### Magic link Auth
-Use SupaMagicAuth widget to create a magic link signIn form.
+Use `SupaMagicAuth` widget to create a magic link signIn form.
```dart
SupaMagicAuth(
@@ -75,7 +75,7 @@ SupaMagicAuth(
### Reset password
-Use SupaResetPassword to create a password reset form.
+Use `SupaResetPassword` to create a password reset form.
```dart
SupaResetPassword(
@@ -87,7 +87,7 @@ SupaResetPassword(
### Phone Auth
-Use SupaPhoneAuth to create a phone authentication form.
+Use `SupaPhoneAuth` to create a phone authentication form.
```dart
SupaPhoneAuth(
@@ -100,7 +100,7 @@ SupaPhoneAuth(
The package supports login with [official social providers](../../auth#providers).
-Use SupaSocialsAuth to create list of social login buttons.
+Use `SupaSocialsAuth` to create list of social login buttons.
```dart
SupaSocialsAuth(
diff --git a/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx b/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx
index 79747f20853..abc435c7719 100644
--- a/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx
+++ b/apps/docs/content/guides/auth/auth-helpers/nextjs-pages.mdx
@@ -20,7 +20,7 @@ The `auth-helpers` package has been replaced with the `@supabase/ssr` package. W
size="medium"
className="text-foreground-light border-b mt-8 pb-2"
>
-
+
()
```
-Retrieving a supabase client object from the SessionContext:
+Retrieving a `supabase` client object from the `SessionContext`:
```tsx
import { useSupabaseClient } from '@supabase/auth-helpers-react'
@@ -286,7 +286,7 @@ export default LoginPage
## Server-side rendering (SSR)
-Create a server supabase client to retrieve the logged in user's session:
+Create a server Supabase client to retrieve the logged in user's session:
```jsx pages/profile.js
import { createPagesServerClient } from '@supabase/auth-helpers-nextjs'
@@ -321,7 +321,7 @@ export const getServerSideProps = async (ctx) => {
## Server-side data fetching with RLS
-You can use the server supabase client to run [row level security](/docs/learn/auth-deep-dive/auth-row-level-security) authenticated queries server-side:
+You can use the server Supabase client to run [row level security](/docs/learn/auth-deep-dive/auth-row-level-security) authenticated queries server-side:
{
## Protecting API routes
-Create a server supabase client to retrieve the logged in user's session:
+Create a server Supabase client to retrieve the logged in user's session:
{
- The `useUser` hook now returns the `user` object or `null`.
- Usage with TypeScript: You can pass types that were [generated with the Supabase CLI](/docs/reference/javascript/typescript-support#generating-types) to the Supabase Client to get enhanced type safety and auto completion:
-Creating a new supabase client object:
+Creating a new `supabase` client object:
```tsx
import { Database } from '../database.types'
@@ -925,7 +925,7 @@ import { Database } from '../database.types'
const [supabaseClient] = useState(() => createPagesBrowserClient())
```
-Retrieving a supabase client object from the SessionContext:
+Retrieving a `supabase` client object from the `SessionContext`:
```tsx
import { useSupabaseClient } from '@supabase/auth-helpers-react'
diff --git a/apps/docs/content/guides/auth/auth-helpers/nextjs.mdx b/apps/docs/content/guides/auth/auth-helpers/nextjs.mdx
index 3b715239ec7..d69f84558e8 100644
--- a/apps/docs/content/guides/auth/auth-helpers/nextjs.mdx
+++ b/apps/docs/content/guides/auth/auth-helpers/nextjs.mdx
@@ -1304,7 +1304,7 @@ supabase.auth.signUp({
#### Deprecated functions
-With v0.7.x of the Next.js Auth Helpers a new naming convention has been implemented for createClient functions. The `createMiddlewareSupabaseClient`, `createBrowserSupabaseClient`, `createServerComponentSupabaseClient` and `createRouteHandlerSupabaseClient` functions have been marked as deprecated, and will be removed in a future version of the Auth Helpers.
+With v0.7.x of the Next.js Auth Helpers a new naming convention has been implemented for `createClient` functions. The `createMiddlewareSupabaseClient`, `createBrowserSupabaseClient`, `createServerComponentSupabaseClient` and `createRouteHandlerSupabaseClient` functions have been marked as deprecated, and will be removed in a future version of the Auth Helpers.
- `createMiddlewareSupabaseClient` has been replaced with `createMiddlewareClient`
- `createBrowserSupabaseClient` has been replaced with `createClientComponentClient`
diff --git a/apps/docs/content/guides/auth/auth-helpers/sveltekit.mdx b/apps/docs/content/guides/auth/auth-helpers/sveltekit.mdx
index b94647a0660..ddb5107adb1 100644
--- a/apps/docs/content/guides/auth/auth-helpers/sveltekit.mdx
+++ b/apps/docs/content/guides/auth/auth-helpers/sveltekit.mdx
@@ -20,7 +20,7 @@ We generally recommend using the new `@supabase/ssr` package instead of `auth-he
size="medium"
className="text-foreground-light border-b mt-8 pb-2"
>
-
+
{
-Note that we are specifying filterSerializedResponseHeaders here. We need to tell SvelteKit that supabase needs the `content-range` and `x-supabase-api-version` headers.
+Note that we are specifying `filterSerializedResponseHeaders` here. We need to tell SvelteKit that Supabase needs the `content-range` and `x-supabase-api-version` headers.
@@ -213,7 +213,7 @@ export const GET = async ({ url, locals: { supabase } }) => {
### Generate types from your database
-In order to get the most out of TypeScript and it's intellisense, you should import the generated Database types into the `app.d.ts` type definition file that comes with your SvelteKit project, where `import('./DatabaseDefinitions')` points to the generated types file outlined in [v2 docs here](https://supabase.com/docs/reference/javascript/release-notes#typescript-support) after you have logged in, linked, and generated types through the Supabase CLI.
+In order to get the most out of TypeScript and its IntelliSense, you should import the generated Database types into the `app.d.ts` type definition file that comes with your SvelteKit project, where `import('./DatabaseDefinitions')` points to the generated types file outlined in [v2 docs here](https://supabase.com/docs/reference/javascript/release-notes#typescript-support) after you have logged in, linked, and generated types through the Supabase CLI.
```ts src/app.d.ts
// src/app.d.ts
@@ -377,13 +377,13 @@ TypeScript types can be [generated with the Supabase CLI](https://supabase.com/d
Access the client inside pages by `$page.data.supabase` or `data.supabase` when using `export let data`.
-The usage of `depends` tells sveltekit that this load function should be executed whenever `invalidate` is called to keep the page store in sync.
+The usage of `depends` tells SvelteKit that this load function should be executed whenever `invalidate` is called to keep the page store in sync.
`createSupabaseLoadClient` caches the client when running in a browser environment and therefore does not create a new client for every time the load function runs.
#### Setting up the event listener on the client side
-We need to create an event listener in the root `+layout.svelte` file in order to catch supabase events being triggered.
+We need to create an event listener in the root `+layout.svelte` file in order to catch Supabase events being triggered.
```svelte src/routes/+layout.svelte
@@ -416,7 +416,7 @@ The usage of `invalidate` tells SvelteKit that the root `+layout.ts` load functi
#### Sign in / sign up / sign out
-We can access the supabase instance in our `+page.svelte` file through the data object.
+We can access the Supabase instance in our `+page.svelte` file through the data object.
```svelte src/routes/auth/+page.svelte
@@ -634,7 +634,7 @@ If you try to submit a form with the action `?/createPost` without a valid sessi
To avoid writing the same auth logic in every single route you can also use the handle hook to
protect multiple routes at once. For this to work with your Supabase session, you need to use
-Sveltekit's [sequence helper](https://kit.svelte.dev/docs/modules#sveltejs-kit-hooks) function.
+SvelteKit's [sequence helper](https://kit.svelte.dev/docs/modules#sveltejs-kit-hooks) function.
Edit your `/src/hooks.server.js` with the below:
{
Since version 0.9 relies on `hooks.server.ts` to setup our client, we no longer need the `hooks.client.ts` in our project for Supabase related code.
-#### Typings [#migration-typings]
+#### Types [#migration-typings]
-#### Typings [#migration-typings-0-8]
+#### Types [#migration-typings-0-8]
-#### Typings [#migration-typings-0-7]
+#### Types [#migration-typings-0-7]
-A [postgres function](/docs/guides/database/functions) can be configured as a hook. The function should take in a single argument -- the event of type JSONB -- and return a JSONB object. Since the postgres function runs on your database, the request does not leave your project's instance.
+A [Postgres function](/docs/guides/database/functions) can be configured as a hook. The function should take in a single argument -- the event of type JSONB -- and return a JSONB object. Since the Postgres function runs on your database, the request does not leave your project's instance.
@@ -59,9 +59,9 @@ Sign the payload and grant permissions selectively in order to guard the integri
>
-When you configure a postgres function as a hook, Supabase will automatically apply the following grants to the function for these reasons:
+When you configure a Postgres function as a hook, Supabase will automatically apply the following grants to the function for these reasons:
-- Allow the `supabase_auth_admin` role to execute the function. The `supabase_auth_admin` role is the postgres role that is used by Supabase Auth to make requests to your database.
+- Allow the `supabase_auth_admin` role to execute the function. The `supabase_auth_admin` role is the Postgres role that is used by Supabase Auth to make requests to your database.
- Revoke permissions from other roles (e.g. `anon`, `authenticated`, `public`) to ensure the function is not accessible by Supabase Data APIs.
```sql
@@ -81,7 +81,7 @@ revoke execute
You will need to alter your row-level security (RLS) policies to allow the `supabase_auth_admin` role to access tables that you have RLS policies on. You can read more about RLS policies [here](/docs/guides/database/postgres/row-level-security).
-Alternatively, you can create your postgres function via the dashboard with the `security definer` tag. The `security definer` tag specifies that the function is to be executed with the privileges of the user that owns it.
+Alternatively, you can create your Postgres function via the dashboard with the `security definer` tag. The `security definer` tag specifies that the function is to be executed with the privileges of the user that owns it.
Currently, functions created via the dashboard take on the `postgres` role. Read more about the `security definer` tag [in our database guide](/docs/guides/database/functions#security-definer-vs-invoker)
@@ -344,7 +344,7 @@ Outside of runtime errors, both HTTP Hooks and Postgres Hooks return timeout err
## Available Hooks
-Each Hook description contains an example JSONSchema which you can use in conjunction with [JSONSchema Faker](https://json-schema-faker.js.org/) in order to generate a mock payload. For HTTP Hooks, you can also use [the Standard Webhooks Testing Tool](https://www.standardwebhooks.com/simulate) to simulate a request.
+Each Hook description contains an example JSON Schema which you can use in conjunction with [JSON Schema Faker](https://json-schema-faker.js.org/) in order to generate a mock payload. For HTTP Hooks, you can also use [the Standard Webhooks Testing Tool](https://www.standardwebhooks.com/simulate) to simulate a request.
{[
diff --git a/apps/docs/content/guides/auth/auth-hooks/send-email-hook.mdx b/apps/docs/content/guides/auth/auth-hooks/send-email-hook.mdx
index 8f68c3b9dd4..89a22ba9292 100644
--- a/apps/docs/content/guides/auth/auth-hooks/send-email-hook.mdx
+++ b/apps/docs/content/guides/auth/auth-hooks/send-email-hook.mdx
@@ -477,7 +477,7 @@ RESEND_API_KEY=your_resend_api_key
SEND_EMAIL_HOOK_SECRET=
```
-
+
You can generate the secret in the [Auth Hooks](/dashboard/project/_/auth/hooks) section of the Supabase dashboard. Make sure to remove the `v1,whsec_` prefix!
diff --git a/apps/docs/content/guides/auth/auth-hooks/send-sms-hook.mdx b/apps/docs/content/guides/auth/auth-hooks/send-sms-hook.mdx
index 3a9a27cc63f..2dab295db87 100644
--- a/apps/docs/content/guides/auth/auth-hooks/send-sms-hook.mdx
+++ b/apps/docs/content/guides/auth/auth-hooks/send-sms-hook.mdx
@@ -8,7 +8,7 @@ Runs before a message is sent. Use the hook to:
- Use a regional SMS Provider
- Use alternate messaging channels such as WhatsApp
-- Adjust the message body to include platform specific fields such as the [AppHash](https://developers.google.com/identity/sms-retriever/overview)
+- Adjust the message body to include platform specific fields such as the [`AppHash`](https://developers.google.com/identity/sms-retriever/overview)
**Inputs**
diff --git a/apps/docs/content/guides/auth/auth-mfa.mdx b/apps/docs/content/guides/auth/auth-mfa.mdx
index e2146375370..71dd4398b78 100644
--- a/apps/docs/content/guides/auth/auth-mfa.mdx
+++ b/apps/docs/content/guides/auth/auth-mfa.mdx
@@ -111,7 +111,7 @@ Below is an example that creates a new `UnenrollMFA` component that illustrates
- When the component appears on screen, the `supabase.auth.mfa.listFactors()` endpoint
fetches all existing factors together with their details.
- The existing factors for a user are displayed in a table.
-- Once the user has selected a factor to unenroll, they can type in the factorId and click **Unenroll**
+- Once the user has selected a factor to unenroll, they can type in the `factorId` and click **Unenroll**
which creates a confirmation modal.
diff --git a/apps/docs/content/guides/auth/auth-smtp.mdx b/apps/docs/content/guides/auth/auth-smtp.mdx
index cac7981f737..1d1558d3c18 100644
--- a/apps/docs/content/guides/auth/auth-smtp.mdx
+++ b/apps/docs/content/guides/auth/auth-smtp.mdx
@@ -63,7 +63,7 @@ They use lists of known email addresses to sign up users to your project with pr
Usually the goal for this behavior is:
- To negatively affect your email sending reputation, after which they might ask for a ransom promising to stop the behavior.
-- To cause a short-term or even long-term Denial of Service attack on your service, by preventing new account creation, sign ins with magic links or one-time passwords, or to severely impact important security flows in your application (such as reset password or forgot password).
+- To cause a short-term or even long-term Denial of Service attack on your service, by preventing new account creation, signins with magic links or one-time passwords, or to severely impact important security flows in your application (such as reset password or forgot password).
- To force you to reduce the security posture of your project, such as by disabling email confirmations. At that point, they may target specific or a broad number of users by creating an account in their name. Then they can use social engineering techniques to trick them to use your application in such a way that both attacker and victim have access to the same account.
Mitigation strategies:
diff --git a/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx b/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx
index ef9b8c8d573..e35a50a59de 100644
--- a/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx
+++ b/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx
@@ -5,7 +5,7 @@ description: 'Use Single Sign-On (SSO) authentication on your project with SAML
video: 'https://www.youtube.com/v/em1cpOAXknM'
---
-
+
Looking for guides on how to use Single Sign-On with the Supabase dashboard? Head on over to [Enable SSO for Your Organization](/docs/guides/platform/sso).
@@ -13,7 +13,7 @@ Looking for guides on how to use Single Sign-On with the Supabase dashboard? Hea
Supabase Auth supports enterprise-level Single Sign-On (SSO) for any identity providers compatible with the SAML 2.0 protocol. This is a non-exclusive list of supported identity providers:
-- Google Workspaces (formerly known as GSuite)
+- Google Workspaces (formerly known as G Suite)
- Okta, Auth0
- Microsoft Active Directory, Azure Active Directory, Microsoft Entra
- PingIdentity
@@ -36,14 +36,14 @@ Please note that SAML 2.0 support is offered on plans Pro and above. Check the [
The number of SAML and SSO acronyms can often be overwhelming. Here's a glossary which you can refer back to at any time:
- **Identity Provider**, **IdP**, or **IDP**
- An identity provider is a service that manages user accounts at a company or organization. It can verify the identity of a user and exchange that information with your Supabase project and other applications. It acts as a single source of truth for user identities and access rights. Commonly used identity providers are: Microsoft Active Directory (Azure AD, Microsoft Entra), Okta, Google Workspaces (GSuite), PingIdentity, OneLogin, and many others. There are also self-hosted and on-prem versions of identity providers, and sometimes they are accessible only by having access to a company VPN or being in a specific building.
+ An identity provider is a service that manages user accounts at a company or organization. It can verify the identity of a user and exchange that information with your Supabase project and other applications. It acts as a single source of truth for user identities and access rights. Commonly used identity providers are: Microsoft Active Directory (Azure AD, Microsoft Entra), Okta, Google Workspaces (G Suite), PingIdentity, OneLogin, and many others. There are also self-hosted and on-prem versions of identity providers, and sometimes they are accessible only by having access to a company VPN or being in a specific building.
- **Service Provider**, **SP**
This is the software that is asking for user information from an identity provider. In Supabase, this is your project's Auth server.
- **Assertion**
An assertion is a statement issued by an identity provider that contains information about a user.
-- **EntityID**
+- **`EntityID`**
A globally unique ID (usually a URL) that identifies an Identity Provider or Service Provider across the world.
-- **NameID**
+- **`NameID`**
A unique ID (usually an email address) that identifies a user at an Identity Provider.
- **Metadata**
An XML document that describes the features and configuration of an Identity Provider or Service Provider. It can be as a standalone document or as a URL. Usually (but not always) the `EntityID` is the URL at which you can access the Metadata.
@@ -53,7 +53,7 @@ The number of SAML and SSO acronyms can often be overwhelming. Here's a glossary
This is one of the most important SAML URLs. It is the URL where Supabase Auth will accept assertions from an identity provider. Basically, once the identity provider verifies the user's identity it will redirect to this URL and the redirect request will contain the assertion.
- **Binding (Redirect, POST, or Artifact)**
This is a description of the way an identity provider communicates with Supabase Auth. When using the Redirect binding, the communication occurs using HTTP 301 redirects. When it's `POST`, it's using `POST` requests sent with `
-As of PostGIS 2.3 or newer, the PostGIS extension is no longer relocatable from one schema to another. If you need to move it from one schema to another for any reason (Eg. from the public schema to the extensions schema for security reasons), you would normally run a ALTER EXTENSION to relocate the schema. However, you will now to do the following steps:
+As of PostGIS 2.3 or newer, the PostGIS extension is no longer relocatable from one schema to another. If you need to move it from one schema to another for any reason (e.g. from the public schema to the extensions schema for security reasons), you would normally run a ALTER EXTENSION to relocate the schema. However, you will now to do the following steps:
1. Backup your Database to prevent data loss - You can do this through the [CLI](https://supabase.com/docs/reference/cli/supabase-db-dump) or Postgres backup tools such as [pg_dumpall](https://www.postgresql.org/docs/current/backup-dump.html#BACKUP-DUMP-ALL)
diff --git a/apps/docs/content/guides/database/extensions/rum.mdx b/apps/docs/content/guides/database/extensions/rum.mdx
index c95943e0202..4185efebd3b 100644
--- a/apps/docs/content/guides/database/extensions/rum.mdx
+++ b/apps/docs/content/guides/database/extensions/rum.mdx
@@ -4,7 +4,7 @@ title: 'RUM: improved inverted index for full-text search based on GIN index'
description: 'A GIN-like index with additional tree-organized data for each index entry'
---
-[RUM](https://github.com/postgrespro/rum) is an extension which adds a RUM index to Postgresql.
+[RUM](https://github.com/postgrespro/rum) is an extension which adds a RUM index to Postgres.
RUM index is based on GIN that stores additional per-entry information in a posting tree. For example, positional information of lexemes or timestamps. In comparison to GIN it can use this information to make faster index-only scans for:
@@ -18,10 +18,10 @@ combinations or phrases.
Main operators for ordering are:
-tsvector `<=>` tsquery | float4 | Distance between tsvector and tsquery.
-value `<=>` value | float8 | Distance between two values.
+`tsvector` `<=>` `tsquery` | `float4` | Distance between `tsvector` and `tsquery`.
+value `<=>` value | `float8` | Distance between two values.
-Where value is timestamp, timestamptz, int2, int4, int8, float4, float8, money and oid
+Where value is `timestamp`, `timestamptz`, `int2`, `int4`, `int8`, `float4`, `float8`, `money` and `oid`
## Usage
@@ -120,7 +120,7 @@ SELECT id, d, d `<=>` '2016-05-16 14:21:25' FROM tsts WHERE t @@ 'wr&qh' ORDER B
`rum_anyarray_ops`
-This operator class stores anyarray elements with length of the array. It supports operators `&&`, `@>`, `<@`, `=`, `%` operators. It also supports ordering by `<=>` operator.
+This operator class stores `anyarray` elements with length of the array. It supports operators `&&`, `@>`, `<@`, `=`, `%` operators. It also supports ordering by `<=>` operator.
```sql
CREATE TABLE test_array (i int2[]);
@@ -143,7 +143,7 @@ SELECT * FROM test_array WHERE i && '{1}' ORDER BY i `<=>` '{1}' ASC;
`rum_anyarray_addon_ops`
-The does the same with anyarray index as `rum_tsvector_addon_ops` i.e. allows to order select results using distance
+The does the same with `anyarray` index as `rum_tsvector_addon_ops` i.e. allows to order select results using distance
operator by attached column.
## Limitations
diff --git a/apps/docs/content/guides/database/extensions/timescaledb.mdx b/apps/docs/content/guides/database/extensions/timescaledb.mdx
index a97dd8260af..53277248488 100644
--- a/apps/docs/content/guides/database/extensions/timescaledb.mdx
+++ b/apps/docs/content/guides/database/extensions/timescaledb.mdx
@@ -4,7 +4,7 @@ title: 'timescaledb: Time-Series data'
description: 'Scalable time-series data storage and analysis'
---
-[timescaledb](https://docs.timescale.com/timescaledb/latest/) is a PostgreSQL extension designed for improved handling of time-series data. It provides a scalable, high-performance solution for storing and querying time-series data on top of a standard PostgreSQL database.
+[`timescaledb`](https://docs.timescale.com/timescaledb/latest/) is a PostgreSQL extension designed for improved handling of time-series data. It provides a scalable, high-performance solution for storing and querying time-series data on top of a standard PostgreSQL database.
`timescaledb` uses a time-series-aware storage model and indexing techniques to improve performance of PostgreSQL in working with time-series data. The extension divides data into chunks based on time intervals, allowing it to scale efficiently, especially for large data sets. The data is then compressed, optimized for write-heavy workloads, and partitioned for parallel processing. `timescaledb` also includes a set of functions, operators, and indexes that work with time-series data to reduce query times, and make data easier to work with.
@@ -27,7 +27,7 @@ Supabase projects come with [TimescaleDB Apache 2 Edition](https://docs.timescal
1. Go to the [Database](https://supabase.com/dashboard/project/_/database/tables) page in the Dashboard.
2. Click on **Extensions** in the sidebar.
-3. Search for "timescaledb" and enable the extension.
+3. Search for `timescaledb` and enable the extension.
diff --git a/apps/docs/content/guides/database/extensions/uuid-ossp.mdx b/apps/docs/content/guides/database/extensions/uuid-ossp.mdx
index 4fd6e9e3495..48e8ce2945e 100644
--- a/apps/docs/content/guides/database/extensions/uuid-ossp.mdx
+++ b/apps/docs/content/guides/database/extensions/uuid-ossp.mdx
@@ -27,7 +27,7 @@ Currently `uuid-ossp` extension is enabled by default and cannot be disabled.
1. Go to the [Database](https://supabase.com/dashboard/project/_/database/tables) page in the Dashboard.
2. Click on **Extensions** in the sidebar.
-3. Search for "uuid-ossp" and enable the extension.
+3. Search for `uuid-ossp` and enable the extension.
diff --git a/apps/docs/content/guides/database/full-text-search.mdx b/apps/docs/content/guides/database/full-text-search.mdx
index 0975aa2fe04..004d8fe9b1f 100644
--- a/apps/docs/content/guides/database/full-text-search.mdx
+++ b/apps/docs/content/guides/database/full-text-search.mdx
@@ -30,7 +30,7 @@ For this guide we'll use the following example data:
>
-{/* */}
+{/* supa-mdx-lint-disable Rule003Spelling */}
| id | title | author | description |
| --- | ----------------------------------- | ---------------------- | ------------------------------------------------------------------ |
@@ -40,7 +40,7 @@ For this guide we'll use the following example data:
| 4 | Green Eggs and Ham | Dr. Seuss | Sam has changing food preferences and eats unusually colored food. |
| 5 | Harry Potter and the Goblet of Fire | J.K. Rowling | Fourth year of school starts, big drama ensues. |
-{/* */}
+{/* supa-mdx-lint-enable Rule003Spelling */}
@@ -301,14 +301,14 @@ data = supabase.from_('books').select().text_search('description', "'big'").exec
-{/* */}
+{/* supa-mdx-lint-disable Rule003Spelling */}
| id | title | author | description |
| --- | ----------------------------------- | ----------------- | ----------------------------------------------- |
| 3 | Tootle | Gertrude Crampton | Little toy train has big dreams. |
| 5 | Harry Potter and the Goblet of Fire | J.K. Rowling | Fourth year of school starts, big drama ensues. |
-{/* */}
+{/* supa-mdx-lint-enable Rule003Spelling */}
@@ -420,14 +420,14 @@ data = supabase.from_('books').select().text_search('title_description', "little
-{/* */}
+{/* supa-mdx-lint-disable Rule003Spelling */}
| id | title | author | description |
| --- | --------------------- | ---------------------- | ------------------------------------------- |
| 1 | The Poky Little Puppy | Janette Sebring Lowrey | Puppy is slower than other, bigger animals. |
| 3 | Tootle | Gertrude Crampton | Little toy train has big dreams. |
-{/* */}
+{/* supa-mdx-lint-enable Rule003Spelling */}
@@ -507,13 +507,13 @@ data = supabase.from_('books').select().text_search('description', "'little' & '
-{/* */}
+{/* supa-mdx-lint-disable Rule003Spelling */}
| id | title | author | description |
| --- | ------ | ----------------- | -------------------------------- |
| 3 | Tootle | Gertrude Crampton | Little toy train has big dreams. |
-{/* */}
+{/* supa-mdx-lint-enable Rule003Spelling */}
@@ -593,14 +593,14 @@ response = client.from_('books').select().text_search('description', "'little' |
-{/* */}
+{/* supa-mdx-lint-disable Rule003Spelling */}
| id | title | author | description |
| --- | --------------------- | ---------------------- | ------------------------------------------- |
| 1 | The Poky Little Puppy | Janette Sebring Lowrey | Puppy is slower than other, bigger animals. |
| 3 | Tootle | Gertrude Crampton | Little toy train has big dreams. |
-{/* */}
+{/* supa-mdx-lint-enable Rule003Spelling */}
@@ -699,7 +699,7 @@ select * from search_books_by_title_prefix('Little+Puppy');
## Creating indexes
-Now that we have Full Text Search working, let's create an `index`. This will allow Postgres to "build" the documents pre-emptively so that they
+Now that we have Full Text Search working, let's create an `index`. This will allow Postgres to "build" the documents preemptively so that they
don't need to be created at the time we execute the query. This will make our queries much faster.
### Searchable columns
@@ -734,8 +734,7 @@ from books;
-{/* */}
-
+```
| id | fts |
| --- | --------------------------------------------------------------------------------------------------------------- |
| 1 | 'anim':7 'bigger':6 'littl':10 'poki':9 'puppi':1,11 'slower':3 |
@@ -743,8 +742,7 @@ from books;
| 3 | 'big':5 'dream':6 'littl':1 'tootl':7 'toy':2 'train':3 |
| 4 | 'chang':3 'color':9 'eat':7 'egg':12 'food':4,10 'green':11 'ham':14 'prefer':5 'sam':1 'unus':8 |
| 5 | 'big':6 'drama':7 'ensu':8 'fire':15 'fourth':1 'goblet':13 'harri':9 'potter':10 'school':4 'start':5 'year':2 |
-
-{/* */}
+```
@@ -820,13 +818,13 @@ data = client.from_('books').select().text_search('fts', "'little' & 'big'").exe
-{/* */}
+{/* supa-mdx-lint-disable Rule003Spelling */}
| id | title | author | description | fts |
| --- | ------ | ----------------- | -------------------------------- | ------------------------------------------------------- |
| 3 | Tootle | Gertrude Crampton | Little toy train has big dreams. | 'big':5 'dream':6 'littl':1 'tootl':7 'toy':2 'train':3 |
-{/* */}
+{/* supa-mdx-lint-enable Rule003Spelling */}
diff --git a/apps/docs/content/guides/database/functions.mdx b/apps/docs/content/guides/database/functions.mdx
index eb2b1a6b84e..58883b17e81 100644
--- a/apps/docs/content/guides/database/functions.mdx
+++ b/apps/docs/content/guides/database/functions.mdx
@@ -82,7 +82,7 @@ select hello_world();
const { data, error } = await supabase.rpc('hello_world')
```
-Reference: [rpc()](../../reference/javascript/rpc)
+Reference: [`rpc()`](../../reference/javascript/rpc)
@@ -92,7 +92,7 @@ final data = await supabase
.rpc('hello_world');
```
-Reference: [rpc()](../../reference/dart/rpc)
+Reference: [`rpc()`](../../reference/dart/rpc)
@@ -101,7 +101,7 @@ Reference: [rpc()](../../reference/dart/rpc)
try await supabase.rpc("hello_world").execute()
```
-Reference: [rpc()](../../reference/swift/rpc)
+Reference: [`rpc()`](../../reference/swift/rpc)
@@ -110,7 +110,7 @@ Reference: [rpc()](../../reference/swift/rpc)
val data = supabase.postgrest.rpc("hello_world")
```
-Reference: [rpc()](../../reference/kotlin/rpc)
+Reference: [`rpc()`](../../reference/kotlin/rpc)
@@ -119,7 +119,7 @@ Reference: [rpc()](../../reference/kotlin/rpc)
data = supabase.rpc('hello_world').execute()
```
-Reference: [rpc()](../../reference/python/rpc)
+Reference: [`rpc()`](../../reference/python/rpc)
@@ -141,20 +141,24 @@ For example, if we had a database with some Star Wars data inside:
Planets
+```
| id | name |
| --- | -------- |
| 1 | Tatooine |
| 2 | Alderaan |
| 3 | Kashyyyk |
+```
People
+```
| id | name | planet_id |
| --- | ---------------- | --------- |
| 1 | Anakin Skywalker | 1 |
| 2 | Luke Skywalker | 1 |
| 3 | Princess Leia | 2 |
| 4 | Chewbacca | 3 |
+```
diff --git a/apps/docs/content/guides/database/inspect.mdx b/apps/docs/content/guides/database/inspect.mdx
index 4552a1697e5..7ac90292f7a 100644
--- a/apps/docs/content/guides/database/inspect.mdx
+++ b/apps/docs/content/guides/database/inspect.mdx
@@ -49,7 +49,7 @@ Then the CLI will automatically connect to your Supabase project whenever you ar
## Inspection commands
-Below are the db inspection commands provided, grouped by different use cases.
+Below are the `db` inspection commands provided, grouped by different use cases.
@@ -99,4 +99,4 @@ Learn more about pg_stats [here](https://supabase.com/docs/guides/database/exten
## Acknowledgements
-Supabase CLI's inspect commands are heavily inspired by the pg-extras tools.
+Supabase CLI's inspect commands are heavily inspired by the `pg-extras` tools.
diff --git a/apps/docs/content/guides/database/json.mdx b/apps/docs/content/guides/database/json.mdx
index a1195bfe912..5a067043f46 100644
--- a/apps/docs/content/guides/database/json.mdx
+++ b/apps/docs/content/guides/database/json.mdx
@@ -117,6 +117,8 @@ values
2. Select the `books` table in the sidebar.
3. Click **+ Insert row** and add 5 rows with the following properties:
+{/* supa-mdx-lint-disable Rule003Spelling */}
+
| id | title | author | metadata |
| --- | ----------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------- |
| 1 | The Poky Little Puppy | Janette Sebring Lowrey | `json {"ages":[3,6],"price":5.95,"description":"Puppy is slower than other, bigger animals."}` |
@@ -125,6 +127,8 @@ values
| 4 | Green Eggs and Ham | Dr. Seuss | `json {"ages":[4,8],"price":7.49,"description":"Sam has changing food preferences and eats unusually colored food."}` |
| 5 | Harry Potter and the Goblet of Fire | J.K. Rowling | `json {"ages":[10,99],"price":24.95,"description":"Fourth year of school starts, big drama ensues."}` |
+{/* supa-mdx-lint-enable Rule003Spelling */}
+
diff --git a/apps/docs/content/guides/database/orioledb.mdx b/apps/docs/content/guides/database/orioledb.mdx
index ba8e3279502..a83faabf945 100644
--- a/apps/docs/content/guides/database/orioledb.mdx
+++ b/apps/docs/content/guides/database/orioledb.mdx
@@ -15,7 +15,7 @@ OrioleDB addresses PostgreSQL's scalability limitations by removing bottlenecks
zoomable
/>
-
+
OrioleDB is in active development and currently has [certain limitations](https://www.orioledb.com/docs/usage/getting-started#current-limitations). Currently, only B-tree indexes are supported, so features like pg_vector's HNSW indexes are not yet available. An Index Access Method bridge to unlock support for all index types used with heap storage is under active development. In the Supabase OrioleDB image the default storage method has been updated to use OrioleDB, granting better performance out of the box.
@@ -78,7 +78,7 @@ create table blog_post (
OrioleDB tables always have a primary key. If it wasn't defined explicitly, a hidden primary key is created using the `ctid` column.
Additionally you can create secondary indexes.
-
+
Currently, only B-tree indexes are supported, so features like pg_vector's HNSW indexes are not yet available.
diff --git a/apps/docs/content/guides/database/pgadmin.mdx b/apps/docs/content/guides/database/pgadmin.mdx
index 99297520d89..7608ad02112 100644
--- a/apps/docs/content/guides/database/pgadmin.mdx
+++ b/apps/docs/content/guides/database/pgadmin.mdx
@@ -70,7 +70,7 @@ hideToc: true
Download your SSL certificate from Dashboard's [`Database Settings`](https://supabase.com/dashboard/project/_/settings/database).
- In pgAdmin, navigate to the Parameters tab and select connection parameter as Root Certificate. Next navigate to the Root certificate input, it will open up a file-picker modal. Select the certificate you downloaded earlier and save the server details. PgAdmin should now be able to connect to your Postgres via SSL.
+ In pgAdmin, navigate to the Parameters tab and select connection parameter as Root Certificate. Next navigate to the Root certificate input, it will open up a file-picker modal. Select the certificate you downloaded earlier and save the server details. pgAdmin should now be able to connect to your Postgres via SSL.
diff --git a/apps/docs/content/guides/database/postgres/custom-claims-and-role-based-access-control-rbac.mdx b/apps/docs/content/guides/database/postgres/custom-claims-and-role-based-access-control-rbac.mdx
index a63886037f3..e5ff8ea539b 100644
--- a/apps/docs/content/guides/database/postgres/custom-claims-and-role-based-access-control-rbac.mdx
+++ b/apps/docs/content/guides/database/postgres/custom-claims-and-role-based-access-control-rbac.mdx
@@ -267,7 +267,7 @@ const { subscription: authListener } = supabase.auth.onAuthStateChange(async (ev
})
```
-For server-side logic you can use packages like [express-jwt](https://github.com/auth0/express-jwt), [koa-jwt](https://github.com/stiang/koa-jwt), [PyJWT](https://github.com/jpadilla/pyjwt), [dart_jsonwebtoken](https://pub.dev/packages/dart_jsonwebtoken), [Microsoft.AspNetCore.Authentication.JwtBearer](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearer), etc.
+For server-side logic you can use packages like [`express-jwt`](https://github.com/auth0/express-jwt), [`koa-jwt`](https://github.com/stiang/koa-jwt), [`PyJWT`](https://github.com/jpadilla/pyjwt), [dart_jsonwebtoken](https://pub.dev/packages/dart_jsonwebtoken), [Microsoft.AspNetCore.Authentication.JwtBearer](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearer), etc.
## Conclusion
diff --git a/apps/docs/content/guides/database/postgres/indexes.mdx b/apps/docs/content/guides/database/postgres/indexes.mdx
index c8d96b6cbb9..acbbff3daf4 100644
--- a/apps/docs/content/guides/database/postgres/indexes.mdx
+++ b/apps/docs/content/guides/database/postgres/indexes.mdx
@@ -26,7 +26,7 @@ create table persons (
);
```
-
+
All the queries in this guide can be run using the [SQL Editor](https://supabase.com/dashboard/project/_/sql) in the Supabase Dashboard, or via `psql` if you're [connecting directly to the database](/docs/guides/database/connecting-to-postgres#direct-connections).
diff --git a/apps/docs/content/guides/database/postgres/roles.mdx b/apps/docs/content/guides/database/postgres/roles.mdx
index 7a36f2761d7..39b160e17e0 100644
--- a/apps/docs/content/guides/database/postgres/roles.mdx
+++ b/apps/docs/content/guides/database/postgres/roles.mdx
@@ -38,13 +38,13 @@ Your Postgres database is the core of your Supabase project, so it's important t
### Special symbols in passwords
-If you use special symbols in your postgres password, you must remember to [percent-encode](https://en.wikipedia.org/wiki/Percent-encoding) your password later if using the postgres connection string, for example, `postgresql://postgres.projectref:p%3Dword@aws-0-us-east-1.pooler.supabase.com:6543/postgres`
+If you use special symbols in your Postgres password, you must remember to [percent-encode](https://en.wikipedia.org/wiki/Percent-encoding) your password later if using the Postgres connection string, for example, `postgresql://postgres.projectref:p%3Dword@aws-0-us-east-1.pooler.supabase.com:6543/postgres`
### Changing your project password
When you created your project you were also asked to enter a password. This is actually the password for the `postgres` role in your database. You can update this from the Dashboard under the [database settings](https://supabase.com/dashboard/project/_/settings/database) page. You should _never_ give this to third-party service unless you absolutely trust them. Instead, we recommend that you create a new user for every service that you want to give access too. This will also help you with debugging - you can see every query that each role is executing in your database within `pg_stat_statements`.
-Changing the password does not result in any downtime. All connected services, such as postgrest, pgbouncer, and other Supabase managed services, are automatically updated to use the latest password to ensure availability. However, if you have any external services connecting to the Supabase database using hardcoded username/password credentials, a manual update will be required.
+Changing the password does not result in any downtime. All connected services, such as PostgREST, PgBouncer, and other Supabase managed services, are automatically updated to use the latest password to ensure availability. However, if you have any external services connecting to the Supabase database using hardcoded username/password credentials, a manual update will be required.
## Granting permissions
@@ -72,7 +72,7 @@ create role "child_role_name" inherit "parent_role_name";
### Preventing inheritance
-In some cases, you might want to prevent a role from having a child relationship (typically superuser roles). You can prevent inheritance relations using NOINHERIT:
+In some cases, you might want to prevent a role from having a child relationship (typically superuser roles). You can prevent inheritance relations using `NOINHERIT`:
```sql
alter role "child_role_name" noinherit;
diff --git a/apps/docs/content/guides/database/postgres/row-level-security.mdx b/apps/docs/content/guides/database/postgres/row-level-security.mdx
index 26ced6b8455..683fc7e1e5f 100644
--- a/apps/docs/content/guides/database/postgres/row-level-security.mdx
+++ b/apps/docs/content/guides/database/postgres/row-level-security.mdx
@@ -13,7 +13,7 @@ RLS is incredibly powerful and flexible, allowing you to write complex SQL rules
RLS is a Postgres primitive and can provide "[defense in depth]()" to protect your data from malicious actors even when accessed through third-party tooling.
-
+
You should _always_ enable RLS on tables created in a public schema. This is done for you when you create a table with the Table Editor. If you create one in raw SQL or with the SQL Editor, remember to enable RLS yourself.
diff --git a/apps/docs/content/guides/database/postgres/setup-replication-external.mdx b/apps/docs/content/guides/database/postgres/setup-replication-external.mdx
index 5418c47051a..8621755ff4f 100644
--- a/apps/docs/content/guides/database/postgres/setup-replication-external.mdx
+++ b/apps/docs/content/guides/database/postgres/setup-replication-external.mdx
@@ -25,7 +25,7 @@ select pg_create_logical_replication_slot('example_slot', 'pgoutput');
3. Now we will connect to our **external database** and subscribe to our `publication` Note: ):
-
+
This will need a direct connection to your database and you can find the connection info in the [Dashboard](https://supabase.com/dashboard/project/_/settings/database).
@@ -42,7 +42,7 @@ PUBLICATION example_pub
WITH (copy_data = true, create_slot=false, slot_name=example_slot);
```
-
+
`create_slot` is set to `false` because `slot_name` is provided and the slot was already created in Step 2.
To copy data from before the slot was created, set `copy_data` to `true`.
diff --git a/apps/docs/content/guides/database/postgres/timeouts.mdx b/apps/docs/content/guides/database/postgres/timeouts.mdx
index 9033debd47f..88d7fdc359a 100644
--- a/apps/docs/content/guides/database/postgres/timeouts.mdx
+++ b/apps/docs/content/guides/database/postgres/timeouts.mdx
@@ -71,8 +71,7 @@ alter role example_role set statement_timeout = '10min'; -- could also use secon
```
- If you are changing the timeout for the Supabase Client API calls, you will need to reload
- postgREST to reflect the timeout changes by running the following script:
+ If you are changing the timeout for the Supabase Client API calls, you will need to reload PostgREST to reflect the timeout changes by running the following script:
```sql
NOTIFY pgrst, 'reload config';
@@ -161,16 +160,16 @@ Go to the [Query Performance page](/dashboard/project/_/advisors/query-performan
Each API server uses a designated user for connecting to the database:
-| Role | API/Tool |
-| -------------------------- | ------------------------------------------------------------------------- |
-| supabase_admin | Used by Supabase to configure projects and for monitoring |
-| authenticator | PostgREST |
-| supabase_auth_admin | Auth |
-| supabase_storage_admin | Storage |
-| supabase_realtime_admin | Realtime |
-| supabase_replication_admin | Synchronizes Read Replicas |
-| postgres | Supabase Dashboard and External Tools (e.g., Prisma, SQLAlchemy, PSQL...) |
-| Custom roles | External Tools (e.g., Prisma, SQLAlchemy, PSQL...) |
+| Role | API/Tool |
+| ---------------------------- | ------------------------------------------------------------------------- |
+| `supabase_admin` | Used by Supabase to configure projects and for monitoring |
+| `authenticator` | PostgREST |
+| `supabase_auth_admin` | Auth |
+| `supabase_storage_admin` | Storage |
+| `supabase_realtime_admin` | Realtime |
+| `supabase_replication_admin` | Synchronizes Read Replicas |
+| `postgres` | Supabase Dashboard and External Tools (e.g., Prisma, SQLAlchemy, PSQL...) |
+| Custom roles | External Tools (e.g., Prisma, SQLAlchemy, PSQL...) |
Filter by the `parsed.user_name` field to only retrieve logs made by specific users:
diff --git a/apps/docs/content/guides/database/prisma.mdx b/apps/docs/content/guides/database/prisma.mdx
index 2f95850a507..737ce4f6e01 100644
--- a/apps/docs/content/guides/database/prisma.mdx
+++ b/apps/docs/content/guides/database/prisma.mdx
@@ -17,7 +17,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
- - In the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new), create a Prisma db-user with full privileges on the public schema.
+ - In the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new), create a Prisma DB user with full privileges on the public schema.
- This gives you better control over Prisma's access and makes it easier to monitor using Supabase tools like the [Query Performance Dashboard](https://supabase.com/dashboard/project/_/advisors/query-performance) and [Log Explorer](https://supabase.com/dashboard/project/_/logs/explorer).
@@ -56,7 +56,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
- Create a new prisma Project on your computer
+ Create a new Prisma Project on your computer
@@ -166,7 +166,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
postgres://prisma.[PROJECT-REF]...
```
- In your schema.prisma file, edit your datasource db configs to reference your DIRECT_URL
+ In your schema.prisma file, edit your `datasource db` configs to reference your DIRECT_URL
```text schema.prisma
datasource db {
provider = "postgresql"
@@ -269,7 +269,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
npx prisma db pull
```
- Create a migraton file
+ Create a migration file
```bash
mkdir -p prisma/migrations/0_init_supabase
```
@@ -295,7 +295,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
pnpx prisma db pull
```
- Create a migraton file
+ Create a migration file
```bash
mkdir -p prisma/migrations/0_init_supabase
```
@@ -321,7 +321,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
yarn dlx prisma db pull
```
- Create a migraton file
+ Create a migration file
```bash
mkdir -p prisma/migrations/0_init_supabase
```
@@ -347,7 +347,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
bunx prisma db pull
```
- Create a migraton file
+ Create a migration file
```bash
mkdir -p prisma/migrations/0_init_supabase
```
@@ -378,7 +378,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
- Install the prisma client and generate its model
+ Install the Prisma client and generate its model
diff --git a/apps/docs/content/guides/database/supavisor.mdx b/apps/docs/content/guides/database/supavisor.mdx
index 007e57e7dcf..1ee0aedd6df 100644
--- a/apps/docs/content/guides/database/supavisor.mdx
+++ b/apps/docs/content/guides/database/supavisor.mdx
@@ -5,13 +5,13 @@ subtitle: Troubleshooting Supavisor errors
Supavisor logs are available under [Pooler Logs](/dashboard/project/_/logs/pooler-logs) in the Dashboard. The following are common errors and their solutions:
-| Error Type | Description | Resolution Link |
-| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
-| Max client connections reached | This error happens when the number of connections to Supavisor is more than [the allowed limit of your compute add-on](https://supabase.com/docs/guides/platform/compute-add-ons). | Follow this [guide](https://github.com/orgs/supabase/discussions/22305) to resolve. |
-| Connection failed \{:error, :eaddrnotavail} to 'db.xxx.supabase.co':5432 | Supavisor cannot connect to the customer database. This is usually caused if the target database is unable to respond. | N/A |
-| Connection failed \{:error, :nxdomain} to 'db.xxx.supabase.co':5432 | Supavisor cannot connect to the customer database. This is usually caused if the target database is unable to respond. | N/A |
-| Connection closed when state was authentication | This error happens when either the database doesn’t exist or if the user doesn't have the right credentials. | N/A |
-| Subscribe error: \{:error, :worker_not_found} | This log event is emitted when the client tries to connect to the database, but Supavisor does not have the necessary information to route the connection. Try reconnecting to the database as it can take some time for the project information to propagate to Supavisor. | N/A |
-| Subscribe error: \{:error, \{:badrpc, \{:error, \{:erpc, :timeout}}}} | This is a timeout error when the communication between different Supavisor nodes takes longer than expected. Try reconnecting to the database. | N/A |
-| Terminating with reason :client_termination when state was :busy | This error happens when the client terminates the connection before the connection with the database is completed. | N/A |
-| Error: received invalid response to GSSAPI negotiation: S | This error happens due to "gssencmode" parameter not set to disabled. | Follow this [guide](https://github.com/orgs/supabase/discussions/30173) to resolve. |
+| Error Type | Description | Resolution Link |
+| ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| Max client connections reached | This error happens when the number of connections to Supavisor is more than [the allowed limit of your compute add-on](https://supabase.com/docs/guides/platform/compute-add-ons). | Follow this [guide](https://github.com/orgs/supabase/discussions/22305) to resolve. |
+| Connection failed `{:error, :eaddrnotavail}` to 'db.xxx.supabase.co':5432 | Supavisor cannot connect to the customer database. This is usually caused if the target database is unable to respond. | N/A |
+| Connection failed `{:error, :nxdomain}` to 'db.xxx.supabase.co':5432 | Supavisor cannot connect to the customer database. This is usually caused if the target database is unable to respond. | N/A |
+| Connection closed when state was authentication | This error happens when either the database doesn’t exist or if the user doesn't have the right credentials. | N/A |
+| Subscribe error: `{:error, :worker_not_found}` | This log event is emitted when the client tries to connect to the database, but Supavisor does not have the necessary information to route the connection. Try reconnecting to the database as it can take some time for the project information to propagate to Supavisor. | N/A |
+| Subscribe error: `{:error, {:badrpc, {:error, {:erpc, :timeout}}}}` | This is a timeout error when the communication between different Supavisor nodes takes longer than expected. Try reconnecting to the database. | N/A |
+| Terminating with reason :client_termination when state was :busy | This error happens when the client terminates the connection before the connection with the database is completed. | N/A |
+| Error: received invalid response to GSSAPI negotiation: S | This error happens due to `gssencmode` parameter not set to disabled. | Follow this [guide](https://github.com/orgs/supabase/discussions/30173) to resolve. |
diff --git a/apps/docs/content/guides/database/tables.mdx b/apps/docs/content/guides/database/tables.mdx
index 71a2d2c8fcd..285e33feceb 100644
--- a/apps/docs/content/guides/database/tables.mdx
+++ b/apps/docs/content/guides/database/tables.mdx
@@ -10,6 +10,8 @@ Tables are where you store your data.
Tables are similar to excel spreadsheets. They contain columns and rows.
For example, this table has 3 "columns" (`id`, `name`, `description`) and 4 "rows" of data:
+{/* supa-mdx-lint-disable Rule003Spelling */}
+
| `id` | `name` | `description` |
| ---- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | The Phantom Menace | Two Jedi escape a hostile blockade to find allies and come across a young boy who may bring balance to the Force. |
@@ -17,6 +19,8 @@ For example, this table has 3 "columns" (`id`, `name`, `description`) and 4 "row
| 3 | Revenge of the Sith | As Obi-Wan pursues a new threat, Anakin acts as a double agent between the Jedi Council and Palpatine and is lured into a sinister plan to rule the galaxy. |
| 4 | Star Wars | Luke Skywalker joins forces with a Jedi Knight, a cocky pilot, a Wookiee and two droids to save the galaxy from the Empire's world-destroying battle station. |
+{/* supa-mdx-lint-enable Rule003Spelling */}
+
There are a few important differences from a spreadsheet, but it's a good starting point if you're new to Relational databases.
## Creating tables
@@ -91,51 +95,51 @@ Every column is a predefined type. PostgreSQL provides many [default types](http
Show/Hide default data types
-| `Name` | `Aliases` | `Description` |
-| --------------------------------- | ----------- | ---------------------------------------------------------------- |
-| bigint | int8 | signed eight-byte integer |
-| bigserial | serial8 | autoincrementing eight-byte integer |
-| bit | | fixed-length bit string |
-| bit varying | varbit | variable-length bit string |
-| boolean | bool | logical Boolean (true/false) |
-| box | | rectangular box on a plane |
-| bytea | | binary data (“byte array”) |
-| character | char | fixed-length character string |
-| character varying | varchar | variable-length character string |
-| cidr | | IPv4 or IPv6 network address |
-| circle | | circle on a plane |
-| date | | calendar date (year, month, day) |
-| double precision | float8 | double precision floating-point number (8 bytes) |
-| inet | | IPv4 or IPv6 host address |
-| integer | int, int4 | signed four-byte integer |
-| interval \[ fields \] | | time span |
-| json | | textual JSON data |
-| jsonb | | binary JSON data, decomposed |
-| line | | infinite line on a plane |
-| lseg | | line segment on a plane |
-| macaddr | | MAC (Media Access Control) address |
-| macaddr8 | | MAC (Media Access Control) address (EUI-64 format) |
-| money | | currency amount |
-| numeric | decimal | exact numeric of selectable precision |
-| path | | geometric path on a plane |
-| pg_lsn | | PostgreSQL Log Sequence Number |
-| pg_snapshot | | user-level transaction ID snapshot |
-| point | | geometric point on a plane |
-| polygon | | closed geometric path on a plane |
-| real | float4 | single precision floating-point number (4 bytes) |
-| smallint | int2 | signed two-byte integer |
-| smallserial | serial2 | autoincrementing two-byte integer |
-| serial | serial4 | autoincrementing four-byte integer |
-| text | | variable-length character string |
-| time \[ without time zone \] | | time of day (no time zone) |
-| time with time zone | timetz | time of day, including time zone |
-| timestamp \[ without time zone \] | | date and time (no time zone) |
-| timestamp with time zone | timestamptz | date and time, including time zone |
-| tsquery | | text search query |
-| tsvector | | text search document |
-| txid_snapshot | | user-level transaction ID snapshot (deprecated; see pg_snapshot) |
-| uuid | | universally unique identifier |
-| xml | | XML data |
+| `Name` | `Aliases` | `Description` |
+| --------------------------------- | ------------- | ---------------------------------------------------------------- |
+| `bigint` | `int8` | signed eight-byte integer |
+| `bigserial` | `serial8` | autoincrementing eight-byte integer |
+| `bit` | | fixed-length bit string |
+| `bit varying` | `varbit` | variable-length bit string |
+| `boolean` | `bool` | logical Boolean (true/false) |
+| `box` | | rectangular box on a plane |
+| `bytea` | | binary data (“byte array”) |
+| `character` | `char` | fixed-length character string |
+| `character varying` | `varchar` | variable-length character string |
+| `cidr` | | IPv4 or IPv6 network address |
+| `circle` | | circle on a plane |
+| `date` | | calendar date (year, month, day) |
+| `double precision` | `float8` | double precision floating-point number (8 bytes) |
+| `inet` | | IPv4 or IPv6 host address |
+| `integer` | `int`, `int4` | signed four-byte integer |
+| `interval [ fields ]` | | time span |
+| `json` | | textual JSON data |
+| `jsonb` | | binary JSON data, decomposed |
+| `line` | | infinite line on a plane |
+| `lseg` | | line segment on a plane |
+| `macaddr` | | MAC (Media Access Control) address |
+| `macaddr8` | | MAC (Media Access Control) address (EUI-64 format) |
+| `money` | | currency amount |
+| `numeric` | `decimal` | exact numeric of selectable precision |
+| `path` | | geometric path on a plane |
+| `pg_lsn` | | PostgreSQL Log Sequence Number |
+| `pg_snapshot` | | user-level transaction ID snapshot |
+| `point` | | geometric point on a plane |
+| `polygon` | | closed geometric path on a plane |
+| `real` | `float4` | single precision floating-point number (4 bytes) |
+| `smallint` | `int2` | signed two-byte integer |
+| `smallserial` | `serial2` | autoincrementing two-byte integer |
+| `serial` | `serial4` | autoincrementing four-byte integer |
+| `text` | | variable-length character string |
+| `time [ without time zone ]` | | time of day (no time zone) |
+| `time with time zone` | `timetz` | time of day, including time zone |
+| `timestamp [ without time zone ]` | | date and time (no time zone) |
+| `timestamp with time zone` | `timestamptz` | date and time, including time zone |
+| `tsquery` | | text search query |
+| `tsvector` | | text search document |
+| `txid_snapshot` | | user-level transaction ID snapshot (deprecated; see pg_snapshot) |
+| `uuid` | | universally unique identifier |
+| `xml` | | XML data |
@@ -300,7 +304,7 @@ supabase
### Bulk data loading
When inserting large data sets it's best to use PostgreSQL's [COPY](https://www.postgresql.org/docs/current/sql-copy.html) command.
-This loads data directly from a file into a table. There are several file formats available for copying data: text, csv, binary, JSON, etc.
+This loads data directly from a file into a table. There are several file formats available for copying data: text, CSV, binary, JSON, etc.
For example, if you wanted to load a CSV file into your movies table:
@@ -442,12 +446,16 @@ Say we have the following tables from a database of a university:
**`students`**
+{/* supa-mdx-lint-disable Rule003Spelling */}
+
| id | name | type |
| --- | ---------------- | ------------- |
| 1 | Princess Leia | undergraduate |
| 2 | Yoda | graduate |
| 3 | Anakin Skywalker | graduate |
+{/* supa-mdx-lint-enable Rule003Spelling */}
+
**`courses`**
| id | title | code |
diff --git a/apps/docs/content/guides/database/testing.mdx b/apps/docs/content/guides/database/testing.mdx
index be1a9a06696..8054ecc2b7f 100644
--- a/apps/docs/content/guides/database/testing.mdx
+++ b/apps/docs/content/guides/database/testing.mdx
@@ -18,7 +18,7 @@ You can use the Supabase CLI to test your database. The minimum required version
## Creating a test
-Create a tests folder inside the supabase folder:
+Create a tests folder inside the `supabase` folder:
```bash
mkdir -p ./supabase/tests/database
diff --git a/apps/docs/content/guides/deployment/branching.mdx b/apps/docs/content/guides/deployment/branching.mdx
index 1eec46d5754..7f9555d4651 100644
--- a/apps/docs/content/guides/deployment/branching.mdx
+++ b/apps/docs/content/guides/deployment/branching.mdx
@@ -50,7 +50,7 @@ Preview Branch instances contain no data by default. You must include a seed fil
## Git providers
-To manage code changes, your Supabase project must be connected to a Git repository. At this stage, we only support [GitHub](#branching-with-github). If you are interested in other Git providers, join the [discussion](https://github.com/orgs/supabase/discussions/18936) for GitLab, BitBucket, and non-Git based Branching.
+To manage code changes, your Supabase project must be connected to a Git repository. At this stage, we only support [GitHub](#branching-with-github). If you are interested in other Git providers, join the [discussion](https://github.com/orgs/supabase/discussions/18936) for GitLab, Bitbucket, and non-Git based Branching.
### Branching with GitHub
@@ -337,7 +337,7 @@ The Supabase CLI provides two options: [manual migrations](https://supabase.com/
- Start supabase locally:
+ Start Supabase locally:
diff --git a/apps/docs/content/guides/deployment/database-migrations.mdx b/apps/docs/content/guides/deployment/database-migrations.mdx
index 11059b17bd8..2502d360ae2 100644
--- a/apps/docs/content/guides/deployment/database-migrations.mdx
+++ b/apps/docs/content/guides/deployment/database-migrations.mdx
@@ -135,7 +135,7 @@ supabase migration up
Finally, you should see the `department` column added to your `employees` table in the local Dashboard.
-
+
View the [complete code](https://github.com/supabase/supabase/tree/master/examples/database/employees) for this example on GitHub.
diff --git a/apps/docs/content/guides/deployment/going-into-prod.mdx b/apps/docs/content/guides/deployment/going-into-prod.mdx
index dba01cb4e90..97d8ea94fb3 100644
--- a/apps/docs/content/guides/deployment/going-into-prod.mdx
+++ b/apps/docs/content/guides/deployment/going-into-prod.mdx
@@ -42,7 +42,7 @@ After developing your project and deciding it's Production Ready, you should run
- Tools like [k6](https://k6.io/) can simulate traffic from many different users.
- Upgrade your database if you require more resources. If you need anything beyond what is listed, contact enterprise@supabase.io.
- If you are expecting a surge in traffic (for a big launch) and are on a Team or Enterprise Plan, [contact support](https://supabase.com/dashboard/support/new) with more details about your launch and we'll help keep an eye on your project.
-- If you expect your database size to be > 4 GB, [enable](https://supabase.com/dashboard/project/_/settings/addons?panel=pitr) the Point in Time Recovery (PITR) addon. Daily backups can take up resources from your database when the backup is in progress. PITR is more resource efficient, since only the changes to the database are backed up.
+- If you expect your database size to be > 4 GB, [enable](https://supabase.com/dashboard/project/_/settings/addons?panel=pitr) the Point in Time Recovery (PITR) add-on. Daily backups can take up resources from your database when the backup is in progress. PITR is more resource efficient, since only the changes to the database are backed up.
- Check and review issues in your database using [Performance Advisor](https://supabase.com/dashboard/project/_/database/performance-advisor).
## Availability
@@ -75,7 +75,7 @@ After developing your project and deciding it's Production Ready, you should run
| ------------------------------------------------ | -------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| All endpoints that send emails | `/auth/v1/signup` `/auth/v1/recover` `/auth/v1/user`[^1] | Sum of combined requests | As of 3 Sep 2024, this has been updated to auth.rate_limits.email.inbuilt_smtp_per_hour.value emails per hour. You can only change this with your own [custom SMTP setup](/docs/guides/auth/auth-smtp). |
| All endpoints that send One-Time-Passwords (OTP) | `/auth/v1/otp` | Sum of combined requests | Defaults to 360 OTPs per hour. Is customizable. |
-| Send OTPs or magiclinks | `/auth/v1/otp` | Last request | Defaults to 60 seconds window before a new request is allowed. Is customizable. |
+| Send OTPs or magic links | `/auth/v1/otp` | Last request | Defaults to 60 seconds window before a new request is allowed. Is customizable. |
| Signup confirmation request | `/auth/v1/signup` | Last request | Defaults to 60 seconds window before a new request is allowed. Is customizable. |
| Password Reset Request | `/auth/v1/recover` | Last request | Defaults to 60 seconds window before a new request is allowed. Is customizable. |
| Verification requests | `/auth/v1/verify` | IP Address | 360 requests per hour (with bursts up to 30 requests) |
@@ -97,7 +97,7 @@ After developing your project and deciding it's Production Ready, you should run
- When working with enterprise systems, email scanners may scan and make a `GET` request to the reset password link or sign up link in your email. Since links in Supabase Auth are single use, a user who opens an email post-scan to click on a link will receive an error. To get around this problem,
consider altering the email template to replace the original magic link with a link to a domain you control. The domain can present the user with a "Sign-in" button which redirect the user to the original magic link URL when clicked.
-- When using a custom SMTP service, some services might have link tracking enabled which may overwrite or malform the email confirmation links sent by Supabase Auth. To prevent this from happening, we recommend that you disable link tracking when using a custom SMTP service.
+- When using a custom SMTP service, some services might have link tracking enabled which may overwrite or disform the email confirmation links sent by Supabase Auth. To prevent this from happening, we recommend that you disable link tracking when using a custom SMTP service.
## Next steps
diff --git a/apps/docs/content/guides/deployment/managing-environments.mdx b/apps/docs/content/guides/deployment/managing-environments.mdx
index bde4fefce16..b4b90e37676 100644
--- a/apps/docs/content/guides/deployment/managing-environments.mdx
+++ b/apps/docs/content/guides/deployment/managing-environments.mdx
@@ -146,7 +146,7 @@ Commit the new migration script to git and you are ready to deploy.
-Alternatively, you may pass in the `--use-migra` experimental flag to generate a more concise migration using [migra](https://github.com/djrobstep/migra).
+Alternatively, you may pass in the `--use-migra` experimental flag to generate a more concise migration using [`migra`](https://github.com/djrobstep/migra).
Without the `-f` file flag, the output is written to stdout by default.
@@ -360,7 +360,7 @@ Once pushed, check that the migration version is up to date for both local and r
supabase migration list
```
-### Permission denied on db pull
+### Permission denied on `db pull`
If you have been using Supabase hosted projects for a long time, you might encounter the following permission error when executing `db pull`.
@@ -378,7 +378,7 @@ grant all on all functions in schema graphql to postgres, anon, authenticated, s
grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role;
```
-### Permission denied on db push
+### Permission denied on `db push`
If you created a table through Supabase dashboard, and your new migration script contains `ALTER TABLE` statements, you might run into permission error when applying them on staging or production databases.
diff --git a/apps/docs/content/guides/deployment/shared-responsibility-model.mdx b/apps/docs/content/guides/deployment/shared-responsibility-model.mdx
index 1e57ad99edf..a4d8ed0fb54 100644
--- a/apps/docs/content/guides/deployment/shared-responsibility-model.mdx
+++ b/apps/docs/content/guides/deployment/shared-responsibility-model.mdx
@@ -61,7 +61,7 @@ Supabase offers a lot of opportunities for flexibly integrating with third-party
- Calls to external APIs within Postgres functions or triggers
- Calls to external APIs within Edge Functions
-You are free to use and integrate with any service, but you're also responsible for ensuring that the performance, availability, and security of the services you use match up with your application's requirements. We do not monitor for outages or performance issues within integrations with third-party services. Depending on the implementation, an issue with such an integration could also result in performance degradataion or an outage for your Supabase project.
+You are free to use and integrate with any service, but you're also responsible for ensuring that the performance, availability, and security of the services you use match up with your application's requirements. We do not monitor for outages or performance issues within integrations with third-party services. Depending on the implementation, an issue with such an integration could also result in performance degradation or an outage for your Supabase project.
If your application architecture relies on such integrations, you should monitor the relevant logs and metrics to ensure optimal performance.
diff --git a/apps/docs/content/guides/functions/ai-models.mdx b/apps/docs/content/guides/functions/ai-models.mdx
index 60b9df79bcd..dcf300e1d04 100644
--- a/apps/docs/content/guides/functions/ai-models.mdx
+++ b/apps/docs/content/guides/functions/ai-models.mdx
@@ -165,7 +165,7 @@ curl --get "http://localhost:54321/functions/v1/ollama-test" \
-Follow the [Llamafile Quickstart](https://github.com/Mozilla-Ocho/llamafile?tab=readme-ov-file#quickstart) to download an run a llamafile locally on your machine.
+Follow the [Llamafile Quickstart](https://github.com/Mozilla-Ocho/llamafile?tab=readme-ov-file#quickstart) to download an run a Llamafile locally on your machine.
Since Llamafile provides an OpenAI API compatible server, you can either use it with `@supabase/functions-js` or with the official OpenAI Deno SDK.
@@ -190,7 +190,7 @@ Create a new function with the following code
supabase functions new llamafile-test
```
-
+
Note that the model parameter doesn't have any effect here! The model depends on which Llamafile is currently running!
@@ -246,7 +246,7 @@ Create a new function with the following code
supabase functions new llamafile-test
```
-
+
Note that the model parameter doesn't have any effect here! The model depends on which Llamafile is currently running!
diff --git a/apps/docs/content/guides/functions/compression.mdx b/apps/docs/content/guides/functions/compression.mdx
index 77964769461..c735106fb99 100644
--- a/apps/docs/content/guides/functions/compression.mdx
+++ b/apps/docs/content/guides/functions/compression.mdx
@@ -43,7 +43,7 @@ Deno.serve(async (req) => {
})
```
-
+
Edge functions have a runtime memory limit of 150MB. Overly large compressed payloads may result in an out-of-memory error.
diff --git a/apps/docs/content/guides/functions/dependencies.mdx b/apps/docs/content/guides/functions/dependencies.mdx
index b9abf701bf6..d13bd7fa187 100644
--- a/apps/docs/content/guides/functions/dependencies.mdx
+++ b/apps/docs/content/guides/functions/dependencies.mdx
@@ -34,7 +34,7 @@ Learn more about npm specifiers and Node built-in APIs in [Deno's documentation]
### JSR
-You can import JS modules published to [JSR](https://jsr.io/) (eg: Deno's standard library), using the `jsr:` specifier:
+You can import JS modules published to [JSR](https://jsr.io/) (e.g.: Deno's standard library), using the `jsr:` specifier:
```ts
import path from 'jsr:@std/path@1.0.8'
@@ -57,7 +57,7 @@ There are two ways to manage your dependencies in Supabase Edge Functions:
### Using deno.json (recommended)
-
+
This feature requires Supabase CLI version 1.215.0 or higher.
diff --git a/apps/docs/content/guides/functions/ephemeral-storage.mdx b/apps/docs/content/guides/functions/ephemeral-storage.mdx
index 55bc58780ec..4d567230977 100644
--- a/apps/docs/content/guides/functions/ephemeral-storage.mdx
+++ b/apps/docs/content/guides/functions/ephemeral-storage.mdx
@@ -14,7 +14,7 @@ Ephemeral storage will reset on each function invocation. This means the files y
Here are some use cases where ephemeral storage can be useful:
- Unzip an archive of CSVs and then add them as records to the DB
-- Custom image manipulation workflows (using [MagickWasm](https://supabase.com/docs/guides/functions/examples/image-manipulation))
+- Custom image manipulation workflows (using [`magick-wasm`](https://supabase.com/docs/guides/functions/examples/image-manipulation))
You can use [Background Tasks](https://supabase.com/docs/guides/functions/background-tasks) to handle slow file processing outside of a request.
@@ -45,9 +45,9 @@ Deno.serve(async (req) => {
### Unavailable APIs
-Currently, the synchronous APIs (eg: `Deno.writeFileSync` or `Deno.mkdirSync`) for creating or writing files are not supported.
+Currently, the synchronous APIs (e.g. `Deno.writeFileSync` or `Deno.mkdirSync`) for creating or writing files are not supported.
-You can use sync variations of read APIs (eg: `Deno.readFileSync`).
+You can use sync variations of read APIs (e.g. `Deno.readFileSync`).
### Limits
diff --git a/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx b/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx
index f7c7ef537bf..3ea96f95d88 100644
--- a/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx
+++ b/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx
@@ -6,7 +6,7 @@ tocVideo: 'tlA7BomSCgU'
Use the [send email hook](/docs/guides/auth/auth-hooks/send-email-hook?queryGroups=language&language=http) to send custom auth emails with [React Email](https://react.email/) and [Resend](https://resend.com/) in Supabase Edge Functions.
-
+
Prefer to jump straight to the code? [Check out the example on GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/auth-hook-react-email-resend).
@@ -251,7 +251,7 @@ const code = {
}
```
-
+
You can find a selection of React Email templates in the [React Email Examples](https://react.email/examples).
@@ -282,7 +282,7 @@ RESEND_API_KEY=your_resend_api_key
SEND_EMAIL_HOOK_SECRET=
```
-
+
You can generate the secret in the [Auth Hooks](/dashboard/project/_/auth/hooks) section of the Supabase dashboard. Make sure to remove the `v1,whsec_` prefix!
diff --git a/apps/docs/content/guides/functions/examples/image-manipulation.mdx b/apps/docs/content/guides/functions/examples/image-manipulation.mdx
index 0c9ac6c99bf..551da2e9d81 100644
--- a/apps/docs/content/guides/functions/examples/image-manipulation.mdx
+++ b/apps/docs/content/guides/functions/examples/image-manipulation.mdx
@@ -6,9 +6,9 @@ description: 'How to optimize and transform images using Edge Functions.'
Supabase Storage has [out-of-the-box support](https://supabase.com/docs/guides/storage/serving/image-transformations?queryGroups=language&language=js) for the most common image transformations and optimizations you need.
If you need to do anything custom beyond what Supabase Storage provides, you can use Edge Functions to write custom image manipulation scripts.
-In this example, we will use [magick-wasm](https://github.com/dlemstra/magick-wasm) to perform image manipulations. `magick-wasm` is the WebAssembly port of the popular ImageMagick library and supports processing over 100 file formats.
+In this example, we will use [`magick-wasm`](https://github.com/dlemstra/magick-wasm) to perform image manipulations. `magick-wasm` is the WebAssembly port of the popular ImageMagick library and supports processing over 100 file formats.
-
+
Edge Functions currently doesn't support image processing libraries such as `Sharp`, which depend on native libraries. Only WASM-based libraries are supported.
@@ -69,7 +69,7 @@ supabase functions deploy image-blur
```
-
+
Hosted Edge Functions have [limits](https://supabase.com/docs/guides/functions/limits) on memory and CPU usage.
diff --git a/apps/docs/content/guides/functions/examples/push-notifications.mdx b/apps/docs/content/guides/functions/examples/push-notifications.mdx
index 994c7e4267d..cb157e8230f 100644
--- a/apps/docs/content/guides/functions/examples/push-notifications.mdx
+++ b/apps/docs/content/guides/functions/examples/push-notifications.mdx
@@ -22,7 +22,7 @@ Push notifications are an important part of any mobile app. They allow you to se
- [Create a new Supabase project](https://database.new).
- Link your project: `supabase link --project-ref your-supabase-project-ref`
- - Start supabase locally: `supabase start`
+ - Start Supabase locally: `supabase start`
- Push up the schema: `supabase db push` (schema is defined in [supabase/migrations](https://github.com/supabase/supabase/blob/master/examples/user-management/expo-push-notifications/supabase/migrations/))
## Expo setup
@@ -123,7 +123,7 @@ Push notifications are an important part of any mobile app. They allow you to se
Firebase Cloud Messaging (FCM) is a push notification service offered by Google that allows you to send push notifications to your users' devices on iOS, Android, and Web.
-
+
This guide will show you how to send push notifications to your app when a new row is inserted into a table using FCM, Supabase Edge Functions, and database web hooks.
## Supabase setup
diff --git a/apps/docs/content/guides/functions/examples/screenshots.mdx b/apps/docs/content/guides/functions/examples/screenshots.mdx
index 6fb9f4e0d2a..2e346f9ec9e 100644
--- a/apps/docs/content/guides/functions/examples/screenshots.mdx
+++ b/apps/docs/content/guides/functions/examples/screenshots.mdx
@@ -12,6 +12,6 @@ description: 'Take screenshots in Edge Functions with Puppeteer and Browserless.
>
-[Puppeteer](https://pptr.dev/) is a handy tool to programmatically take screenshots and generate PDFs. However, trying to do so in Edge Functions can be challenging due to the size restrictions. Luckily there is a [serverless browser offering available](https://www.browserless.io/) that we can connect to via websockets.
+[Puppeteer](https://pptr.dev/) is a handy tool to programmatically take screenshots and generate PDFs. However, trying to do so in Edge Functions can be challenging due to the size restrictions. Luckily there is a [serverless browser offering available](https://www.browserless.io/) that we can connect to via WebSockets.
Find the code on [GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/puppeteer).
diff --git a/apps/docs/content/guides/functions/examples/semantic-search.mdx b/apps/docs/content/guides/functions/examples/semantic-search.mdx
index 7534d6bafae..21e88052359 100644
--- a/apps/docs/content/guides/functions/examples/semantic-search.mdx
+++ b/apps/docs/content/guides/functions/examples/semantic-search.mdx
@@ -13,7 +13,7 @@ Since Supabase Edge Runtime [v1.36.0](https://github.com/supabase/edge-runtime/r
In this tutorial you're implementing three parts:
1. A [`generate-embedding`](https://github.com/supabase/supabase/tree/master/examples/ai/edge-functions/supabase/functions/generate-embedding/index.ts) database webhook edge function which generates embeddings when a content row is added (or updated) in the [`public.embeddings`](https://github.com/supabase/supabase/tree/master/examples/ai/edge-functions/supabase/migrations/20240408072601_embeddings.sql) table.
-2. A [`query_embeddings` Postgres function](https://github.com/supabase/supabase/tree/master/examples/ai/edge-functions/supabase/migrations/20240410031515_vector-search.sql) which allows us to perform similarity search from an egde function via [Remote Procedure Call (RPC)](https://supabase.com/docs/guides/database/functions?language=js).
+2. A [`query_embeddings` Postgres function](https://github.com/supabase/supabase/tree/master/examples/ai/edge-functions/supabase/migrations/20240410031515_vector-search.sql) which allows us to perform similarity search from an Edge Function via [Remote Procedure Call (RPC)](https://supabase.com/docs/guides/database/functions?language=js).
3. A [`search` edge function](https://github.com/supabase/supabase/tree/master/examples/ai/edge-functions/supabase/functions/search/index.ts) which generates the embedding for the search term, performs the similarity search via RPC function call, and returns the result.
You can find the complete example code on [GitHub](https://github.com/supabase/supabase/tree/master/examples/ai/edge-functions)
diff --git a/apps/docs/content/guides/functions/examples/send-emails.mdx b/apps/docs/content/guides/functions/examples/send-emails.mdx
index 4a28a8285ef..8dc64ae0683 100644
--- a/apps/docs/content/guides/functions/examples/send-emails.mdx
+++ b/apps/docs/content/guides/functions/examples/send-emails.mdx
@@ -77,7 +77,7 @@ Deploy function to Supabase:
supabase functions deploy resend --no-verify-jwt
```
-
+
When you deploy to Supabase, make sure that your `RESEND_API_KEY` is set in [Edge Function Secrets Management](https://supabase.com/dashboard/project/_/settings/functions)
diff --git a/apps/docs/content/guides/functions/limits.mdx b/apps/docs/content/guides/functions/limits.mdx
index 9a41065188b..829482dd7ef 100644
--- a/apps/docs/content/guides/functions/limits.mdx
+++ b/apps/docs/content/guides/functions/limits.mdx
@@ -23,4 +23,4 @@ subtitle: "Limits applied Edge Functions in Supabase's hosted platform."
- Outgoing connections to ports `25` and `587` are not allowed.
- Serving of HTML content is only supported with [custom domains](/docs/reference/cli/supabase-domains) (Otherwise `GET` requests that return `text/html` will be rewritten to `text/plain`).
- Web Worker API (or Node `vm` API) are not available.
-- Node Libraries that require multithreading are not supported. Examples: [libvips](https://github.com/libvips/libvips), [sharp](https://github.com/lovell/sharp).
+- Node Libraries that require multithreading are not supported. Examples: [`libvips`](https://github.com/libvips/libvips), [sharp](https://github.com/lovell/sharp).
diff --git a/apps/docs/content/guides/functions/local-development.mdx b/apps/docs/content/guides/functions/local-development.mdx
index 1da210dd2b6..8b8a12f9e96 100644
--- a/apps/docs/content/guides/functions/local-development.mdx
+++ b/apps/docs/content/guides/functions/local-development.mdx
@@ -13,7 +13,7 @@ You can follow the [Deno guide](https://deno.com/manual@v1.32.5/getting_started/
## Deno with Visual Studio Code
-When using VSCode, you should install both the Deno CLI and the the Deno language server [via this link](vscode:extension/denoland.vscode-deno) or by browsing the extensions in vscode and choosing to install the _Deno_ extension.
+When using VSCode, you should install both the Deno CLI and the the Deno language server [via this link](vscode:extension/denoland.vscode-deno) or by browsing the extensions in VSCode and choosing to install the _Deno_ extension.
diff --git a/apps/docs/content/guides/functions/quickstart.mdx b/apps/docs/content/guides/functions/quickstart.mdx
index 19aedd7811c..a7ef88b6e70 100644
--- a/apps/docs/content/guides/functions/quickstart.mdx
+++ b/apps/docs/content/guides/functions/quickstart.mdx
@@ -30,7 +30,7 @@ If you're using VS code you can have the CLI automatically create helpful Deno s
-If you're using an Intellj IDEA editor such as WebStorm, you can use the `--with-intellij-settings` flag with `supabase init` to create an auto generated deno cofig.
+If you're using an IntelliJ IDEA editor such as WebStorm, you can use the `--with-intellij-settings` flag with `supabase init` to create an auto generated Deno config.
@@ -190,9 +190,9 @@ import_map = './import_map.json'
When you create a new Edge Function, it will use TypeScript by default. However, it is possible to write and deploy Edge Functions using pure JavaScript.
-Save your Function as a JavaScript file (eg: `index.js`) and then update the `supabase/config.toml` as follows:
+Save your Function as a JavaScript file (e.g. `index.js`) and then update the `supabase/config.toml` as follows:
-
+
`entrypoint` is available only in Supabase CLI version 1.215.0 or higher.
diff --git a/apps/docs/content/guides/functions/routing.mdx b/apps/docs/content/guides/functions/routing.mdx
index 2944dacf500..023e284739f 100644
--- a/apps/docs/content/guides/functions/routing.mdx
+++ b/apps/docs/content/guides/functions/routing.mdx
@@ -5,8 +5,8 @@ description: 'How to handle custom routing within Edge Functions.'
subtitle: 'How to handle custom routing within Edge Functions.'
---
-Usually, an Edge Function is written to perform a single action (eg: write a record to the database). However, if your app's logic is split into multiple Edge Functions requests to each action may seem slower.
-This is because each Edge Function needs to be booted before serving a request (known as cold starts). If an action is performed less frequently (eg: deleting a record), there is a high-chance of that function experiencing a cold-start.
+Usually, an Edge Function is written to perform a single action (e.g. write a record to the database). However, if your app's logic is split into multiple Edge Functions requests to each action may seem slower.
+This is because each Edge Function needs to be booted before serving a request (known as cold starts). If an action is performed less frequently (e.g. deleting a record), there is a high-chance of that function experiencing a cold-start.
One way to reduce the cold starts and increase performance of your app is to combine multiple actions into a single Edge Function. This way only one instance of the Edge Function needs to be booted and it can handle multiple requests to different actions.
For example, we can use a single Edge Function to create a typical CRUD API (create, read, update, delete records).
@@ -160,10 +160,10 @@ We should see a response printing `Hello Foo!`.
## Using route parameters
-We can use route parameters to capture values at specific URL segments (eg: `/tasks/:taskId/notes/:noteId`).
+We can use route parameters to capture values at specific URL segments (e.g. `/tasks/:taskId/notes/:noteId`).
Here's an example Edge Function implemented using the Framework for managing tasks using route parameters.
-Keep in mind paths must be prefixed by function name (ie. `tasks` in this example). Route parameters can only be used after the function name prefix.
+Keep in mind paths must be prefixed by function name (i.e. `tasks` in this example). Route parameters can only be used after the function name prefix.
{
## URL patterns API
-If you prefer not to use a web framework, you can directly use [URLPattern API](https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API) within your Edge Functions to implement routing.
+If you prefer not to use a web framework, you can directly use [URL Pattern API](https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API) within your Edge Functions to implement routing.
This is ideal for small apps with only couple of routes and you want to have a custom matching algorithm.
Here is an example Edge Function using URL Patterns API: https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/restful-tasks/index.ts
diff --git a/apps/docs/content/guides/functions/status-codes.mdx b/apps/docs/content/guides/functions/status-codes.mdx
index 5925a2ad3bb..dfe712f6d3d 100644
--- a/apps/docs/content/guides/functions/status-codes.mdx
+++ b/apps/docs/content/guides/functions/status-codes.mdx
@@ -33,7 +33,7 @@ Edge Functions only support these HTTP methods: 'POST', 'GET', 'PUT', 'PATCH', '
### 500 Internal Server Error
-Edge Function throwed an uncaught exception (`WORKER_ERROR`). Check Edge Function logs to find the cause.
+Edge Function threw an uncaught exception (`WORKER_ERROR`). Check Edge Function logs to find the cause.
### 503 Service Unavailable
diff --git a/apps/docs/content/guides/functions/unit-test.mdx b/apps/docs/content/guides/functions/unit-test.mdx
index 5dc3e942fb2..d36ac8f5549 100644
--- a/apps/docs/content/guides/functions/unit-test.mdx
+++ b/apps/docs/content/guides/functions/unit-test.mdx
@@ -105,7 +105,7 @@ This test case consists of two parts. The first part tests the client library an
- The `testHelloWorld` function tests the "Hello-world" Edge Function by invoking it using the Supabase client's `functions.invoke` method. It checks if the response message matches the expected greeting.
- We run the tests using the `Deno.test` function, providing a descriptive name for each test case and the corresponding test function.
-
+
Please make sure to replace the placeholders (`supabaseUrl`, `supabaseKey`, `my_table`) with the actual values relevant to your Supabase setup.
diff --git a/apps/docs/content/guides/functions/wasm.mdx b/apps/docs/content/guides/functions/wasm.mdx
index af0bf32a0f5..b1c26e34de2 100644
--- a/apps/docs/content/guides/functions/wasm.mdx
+++ b/apps/docs/content/guides/functions/wasm.mdx
@@ -7,7 +7,7 @@ subtitle: 'How to use WebAssembly in Edge Functions.'
Edge Functions supports running [WebAssembly (Wasm)](https://developer.mozilla.org/en-US/docs/WebAssembly) modules. WebAssembly is useful if you want to optimize code that's slower to run in JavaScript or require low-level manipulation.
-It also gives you the option to port existing libraries written in other languages to be used with JavaScript. For example, [MagickWasm](https://supabase.com/docs/guides/functions/examples/image-manipulation), which does image manipulation and transforms, is a port of an existing C library to WebAssembly.
+It also gives you the option to port existing libraries written in other languages to be used with JavaScript. For example, [magick-wasm](https://supabase.com/docs/guides/functions/examples/image-manipulation), which does image manipulation and transforms, is a port of an existing C library to WebAssembly.
### Writing a Wasm module
@@ -62,7 +62,7 @@ lines={[[1, -1]]}
meta="index.ts"
/>
-
+
Supabase Edge Functions currently use Deno 1.46. From [Deno 2.1, importing Wasm
modules](https://deno.com/blog/v2.1) will require even less boilerplate code.
@@ -71,7 +71,7 @@ meta="index.ts"
Before deploying the Edge Function, we need to ensure it bundles the Wasm module with it. We can do this by defining it in the `static_files` for the function in `superbase/config.toml`.
-
+
You will need update Supabase CLI to 2.7.0 or higher for the `static_files` support.
diff --git a/apps/docs/content/guides/functions/websockets.mdx b/apps/docs/content/guides/functions/websockets.mdx
index 0c0c82201e8..c1c1c214319 100644
--- a/apps/docs/content/guides/functions/websockets.mdx
+++ b/apps/docs/content/guides/functions/websockets.mdx
@@ -1,5 +1,5 @@
---
-id: 'function-websockets'
+id: 'function-WebSockets'
title: 'Handling WebSockets'
description: 'How to handle WebSocket connections in Edge Functions'
subtitle: 'How to handle WebSocket connections in Edge Functions'
@@ -25,8 +25,8 @@ Here are some basic examples of setting up WebSocket servers using Deno and Node
Deno.serve(req => {
const upgrade = req.headers.get("upgrade") || "";
- if (upgrade.toLowerCase() != "websocket") {
- return new Response("request isn't trying to upgrade to websocket.", { status: 400 });
+ if (upgrade.toLowerCase() != "WebSocket") {
+ return new Response("request isn't trying to upgrade to WebSocket.", { status: 400 });
}
const { socket, response } = Deno.upgradeWebSocket(req);
@@ -130,8 +130,8 @@ Deno.env.get("SUPABASE_SERVICE_ROLE_KEY"),
Deno.serve(req => {
const upgrade = req.headers.get("upgrade") || "";
- if (upgrade.toLowerCase() != "websocket") {
- return new Response("request isn't trying to upgrade to websocket.", { status: 400 });
+ if (upgrade.toLowerCase() != "WebSocket") {
+ return new Response("request isn't trying to upgrade to WebSocket.", { status: 400 });
}
// Please be aware query params may be logged in some logging systems.
@@ -179,8 +179,8 @@ const supabase = createClient(
Deno.serve(req => {
const upgrade = req.headers.get("upgrade") || "";
- if (upgrade.toLowerCase() != "websocket") {
- return new Response("request isn't trying to upgrade to websocket.", { status: 400 });
+ if (upgrade.toLowerCase() != "WebSocket") {
+ return new Response("request isn't trying to upgrade to WebSocket.", { status: 400 });
}
// Sec-WebScoket-Protocol may return multiple protocol values `jwt-TOKEN, value1, value 2`
diff --git a/apps/docs/content/guides/getting-started.mdx b/apps/docs/content/guides/getting-started.mdx
index 0586275ec12..3e50b8ff57b 100644
--- a/apps/docs/content/guides/getting-started.mdx
+++ b/apps/docs/content/guides/getting-started.mdx
@@ -111,10 +111,10 @@ hideToc: true
hasLightIcon: true,
},
{
- title: 'NuxtJS',
+ title: 'Nuxt',
href: '/guides/getting-started/quickstarts/nuxtjs',
description:
- 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a NuxtJS app.',
+ 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a Nuxt app.',
icon: '/docs/img/icons/nuxt-icon',
},
{
diff --git a/apps/docs/content/guides/getting-started/architecture.mdx b/apps/docs/content/guides/getting-started/architecture.mdx
index 531cce08e21..f2da781b4de 100644
--- a/apps/docs/content/guides/getting-started/architecture.mdx
+++ b/apps/docs/content/guides/getting-started/architecture.mdx
@@ -66,7 +66,7 @@ We use this with our [`pg_graphql`](https://github.com/supabase/pg_graphql) exte
### Realtime (API & multiplayer)
-A scalable websocket engine for managing user Presence, broadcasting messages, and streaming database changes.
+A scalable WebSocket engine for managing user Presence, broadcasting messages, and streaming database changes.
- Official Docs: [Supabase Realtime docs](/docs/guides/realtime)
- Source code: [github.com/supabase/realtime](https://github.com/supabase/realtime)
@@ -80,7 +80,7 @@ An S3-compatible object storage service that stores metadata in Postgres.
- Official Docs: [Supabase Storage reference docs](/docs/reference/storage)
- Source code: [github.com/supabase/storage-api](https://github.com/supabase/storage-api)
- License: [Apache 2.0](https://github.com/supabase/storage-api/blob/master/LICENSE)
-- Language: NodeJS / TypeScript
+- Language: Node.js / TypeScript
### Deno (Edge Functions)
@@ -98,7 +98,7 @@ A RESTful API for managing your Postgres. Fetch tables, add roles, and run queri
- Official Docs: [supabase.github.io/postgres-meta](https://supabase.github.io/postgres-meta/)
- Source code: [github.com/supabase/postgres-meta](https://github.com/supabase/postgres-meta)
- License: [Apache 2.0](https://github.com/supabase/postgres-meta/blob/master/LICENSE)
-- Language: NodeJS / TypeScript
+- Language: Node.js / TypeScript
### Supavisor
diff --git a/apps/docs/content/guides/getting-started/features.mdx b/apps/docs/content/guides/getting-started/features.mdx
index d9861810518..80a3a939245 100644
--- a/apps/docs/content/guides/getting-started/features.mdx
+++ b/apps/docs/content/guides/getting-started/features.mdx
@@ -78,11 +78,11 @@ Login to the Supabase dashboard via SSO. [Docs](/docs/guides/platform/sso).
### Postgres changes
-Receive your database changes through websockets. [Docs](/docs/guides/realtime/postgres-changes).
+Receive your database changes through WebSockets. [Docs](/docs/guides/realtime/postgres-changes).
### Broadcast
-Send messages between connected users through websockets. [Docs](/docs/guides/realtime/broadcast).
+Send messages between connected users through WebSockets. [Docs](/docs/guides/realtime/broadcast).
### Presence
@@ -110,9 +110,9 @@ Build passwordless logins via magic links for your application or website. [Docs
Control the data each user can access with Postgres Policies. [Docs](/docs/guides/database/postgres/row-level-security).
-### Captcha protection
+### CAPTCHA protection
-Add Captcha to your sign-in, sign-up, and password reset forms. [Docs](/docs/guides/auth/auth-captcha).
+Add CAPTCHA to your sign-in, sign-up, and password reset forms. [Docs](/docs/guides/auth/auth-captcha).
### Server-Side Auth
@@ -235,7 +235,7 @@ In addition to the Beta requirements, features in GA are covered by the [uptime
| Auth | Passwordless login | `GA` | ✅ |
| Auth | SSO with SAML | `GA` | ✅ |
| Auth | Authorization via RLS | `GA` | ✅ |
-| Auth | Captcha protection | `GA` | ✅ |
+| Auth | CAPTCHA protection | `GA` | ✅ |
| Auth | Server-side Auth | `beta` | ✅ |
| CLI | | `GA` | ✅ Works with self-hosted |
| Management API | | `GA` | N/A |
diff --git a/apps/docs/content/guides/getting-started/quickstarts/flutter.mdx b/apps/docs/content/guides/getting-started/quickstarts/flutter.mdx
index 6863daee724..29211b1338e 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/flutter.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/flutter.mdx
@@ -8,7 +8,7 @@ hideToc: true
-
+
@@ -155,7 +155,7 @@ hideToc: true
Run your app on a platform of your choosing! By default an app should launch in your web browser.
Note that `supabase_flutter` is compatible with web, iOS, Android, macOS, and Windows apps.
- Running the app on MacOS requires additional configuration to [set the entitlements](https://docs.flutter.dev/development/platform-integration/macos/building#setting-up-entitlements).
+ Running the app on macOS requires additional configuration to [set the entitlements](https://docs.flutter.dev/development/platform-integration/macos/building#setting-up-entitlements).
diff --git a/apps/docs/content/guides/getting-started/quickstarts/hono.mdx b/apps/docs/content/guides/getting-started/quickstarts/hono.mdx
index 3a818e69f83..be46310e9b3 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/hono.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/hono.mdx
@@ -11,7 +11,7 @@ hideToc: true
- Boostrap the Hono example app from the Supabase Samples using the CLI.
+ Bootstrap the Hono example app from the Supabase Samples using the CLI.
diff --git a/apps/docs/content/guides/getting-started/quickstarts/ios-swiftui.mdx b/apps/docs/content/guides/getting-started/quickstarts/ios-swiftui.mdx
index 4889133195e..40b6e910092 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/ios-swiftui.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/ios-swiftui.mdx
@@ -8,7 +8,7 @@ hideToc: true
-
+
@@ -39,7 +39,7 @@ hideToc: true
- Create a new `Supabase.swift` file add a new supabase instance using your project URL and public API (anon) key:
+ Create a new `Supabase.swift` file add a new Supabase instance using your project URL and public API (anon) key:
diff --git a/apps/docs/content/guides/getting-started/quickstarts/laravel.mdx b/apps/docs/content/guides/getting-started/quickstarts/laravel.mdx
index 011d956bac5..cf2afe249aa 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/laravel.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/laravel.mdx
@@ -73,7 +73,7 @@ hideToc: true
- By default Laravel uses the `public` schema. We recommend changing this as supabase exposes the `public` schema as a [data API](/docs/guides/api).
+ By default Laravel uses the `public` schema. We recommend changing this as Supabase exposes the `public` schema as a [data API](/docs/guides/api).
You can change the schema of your Laravel application by modifying the `search_path` variable `app/config/database.php`.
diff --git a/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx b/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx
index 4ba45b41a18..6e39dff869d 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx
@@ -1,6 +1,6 @@
---
-title: 'Use Supabase with NuxtJS'
-subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a NuxtJS app.'
+title: 'Use Supabase with Nuxt'
+subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a Nuxt app.'
breadcrumb: 'Framework Quickstarts'
hideToc: true
---
@@ -8,16 +8,16 @@ hideToc: true
-
+
-
+
- Create a Nuxt.js app using the `npx nuxi` command.
+ Create a Nuxt app using the `npx nuxi` command.
@@ -34,9 +34,9 @@ hideToc: true
- The fastest way to get started is to use the `supabase-js` client library which provides a convenient interface for working with Supabase from a NuxtJS app.
+ The fastest way to get started is to use the `supabase-js` client library which provides a convenient interface for working with Supabase from a Nuxt app.
- Navigate to the NuxtJS app and install `supabase-js`.
+ Navigate to the Nuxt app and install `supabase-js`.
diff --git a/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx b/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx
index 2ca3ceee5a9..5bae8cd6a65 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx
@@ -11,7 +11,7 @@ hideToc: true
[Create a new project](https://supabase.com/dashboard) in the Supabase Dashboard.
-
+
Be sure to make note of the Database Password you used as you will need this later to connect to your database.
diff --git a/apps/docs/content/guides/getting-started/quickstarts/refine.mdx b/apps/docs/content/guides/getting-started/quickstarts/refine.mdx
index c061ecf8156..f85b656d936 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/refine.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/refine.mdx
@@ -140,7 +140,7 @@ hideToc: true
Add routes for the `list`, `create`, `show`, and `edit` pages.
-
+
You should remove the `index` route for the Welcome page presented with the `` component.
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx b/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx
index da7aa2b7d1c..1fc7ee77539 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx
@@ -47,7 +47,7 @@ export const environment = {
}
```
-Now that we have the API credentials in place, let's create a **SupabaseService** with `ng g s supabase` to initialize the Supabase client and implement functions to communicate with the Supabase API.
+Now that we have the API credentials in place, let's create a `SupabaseService` with `ng g s supabase` to initialize the Supabase client and implement functions to communicate with the Supabase API.
```ts src/app/supabase.service.ts
import { Injectable } from '@angular/core'
@@ -130,7 +130,7 @@ Optionally, update [src/styles.css](https://raw.githubusercontent.com/supabase/s
### Set up a login component
Let's set up an Angular component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords.
-Create an **AuthComponent** with `ng g c auth` Angular CLI command.
+Create an `AuthComponent` with `ng g c auth` Angular CLI command.
```ts src/app/auth/auth.component.ts
import { Component } from '@angular/core'
@@ -202,7 +202,7 @@ export class AuthComponent {
### Account page
Users also need a way to edit their profile details and manage their accounts after signing in.
-Create an **AccountComponent** with the `ng g c account` Angular CLI command.
+Create an `AccountComponent` with the `ng g c account` Angular CLI command.
```ts src/app/account/account.component.ts
import { Component, Input, OnInit } from '@angular/core'
@@ -326,7 +326,7 @@ export class AccountComponent implements OnInit {
### Launch!
-Now that we have all the components in place, let's update **AppComponent**:
+Now that we have all the components in place, let's update `AppComponent`:
```ts src/app/app.component.ts
import { Component, OnInit } from '@angular/core'
@@ -397,7 +397,7 @@ Every Supabase project is configured with [Storage](/docs/guides/storage) for ma
### Create an upload widget
Let's create an avatar for the user so that they can upload a profile photo.
-Create an **AvatarComponent** with `ng g c avatar` Angular CLI command.
+Create an `AvatarComponent` with `ng g c avatar` Angular CLI command.
```ts src/app/avatar/avatar.component.ts
import { Component, EventEmitter, Input, Output } from '@angular/core'
@@ -492,7 +492,7 @@ export class AvatarComponent {
### Add the new widget
-And then we can add the widget on top of the **AccountComponent** HTML template:
+And then we can add the widget on top of the `AccountComponent` HTML template:
```html src/app/account.component.html
```
-And add an `updateAvatar` function along with an `avatarUrl` getter to the **AccountComponent** typescript file:
+And add an `updateAvatar` function along with an `avatarUrl` getter to the `AccountComponent` typescript file:
```ts src/app/account.component.ts
@Component({
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-flutter.mdx b/apps/docs/content/guides/getting-started/tutorials/with-flutter.mdx
index 64b1e2e1a06..3bedc966dc8 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-flutter.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-flutter.mdx
@@ -63,7 +63,7 @@ That is it on Supabase's end and the rest are platform specific settings:
Edit the `ios/Runner/Info.plist` file.
-Add CFBundleURLTypes to enable deep linking:
+Add `CFBundleURLTypes` to enable deep linking:
```xml ios/Runner/Info.plist"
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx b/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx
index b22f2f867d3..09c3b87a039 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-ionic-angular.mdx
@@ -48,7 +48,7 @@ export const environment = {
}
```
-Now that we have the API credentials in place, let's create a **SupabaseService** with `ionic g s supabase` to initialize the Supabase client and implement functions to communicate with the Supabase API.
+Now that we have the API credentials in place, let's create a `SupabaseService` with `ionic g s supabase` to initialize the Supabase client and implement functions to communicate with the Supabase API.
```ts src/app/supabase.service.ts
import { Injectable } from '@angular/core'
@@ -136,7 +136,7 @@ export class SupabaseService {
### Set up a login route
Let's set up a route to manage logins and signups. We'll use Magic Links so users can sign in with their email without using passwords.
-Create a **LoginPage** with the `ionic g page login` Ionic CLI command.
+Create a `LoginPage` with the `ionic g page login` Ionic CLI command.
@@ -204,7 +204,7 @@ export class LoginPage {
### Account page
After a user is signed in, we can allow them to edit their profile details and manage their account.
-Create an **AccountComponent** with `ionic g page account` Ionic CLI command.
+Create an `AccountComponent` with `ionic g page account` Ionic CLI command.
```ts src/app/account.page.ts
import { Component, OnInit } from '@angular/core'
@@ -310,7 +310,7 @@ export class AccountPage implements OnInit {
### Launch!
-Now that we have all the components in place, let's update **AppComponent**:
+Now that we have all the components in place, let's update `AppComponent`:
```ts src/app/app.component.ts
import { Component } from '@angular/core'
@@ -341,7 +341,7 @@ export class AppComponent {
}
```
-Then update the **AppRoutingModule**
+Then update the `AppRoutingModule`
```ts src/app/app-routing.module.ts"
import { NgModule } from '@angular/core'
@@ -393,7 +393,7 @@ First, install two packages in order to interact with the user's camera.
npm install @ionic/pwa-elements @capacitor/camera
```
-[CapacitorJS](https://capacitorjs.com) is a cross-platform native runtime from Ionic that enables web apps to be deployed through the app store and provides access to native device API.
+[Capacitor](https://capacitorjs.com) is a cross-platform native runtime from Ionic that enables web apps to be deployed through the app store and provides access to native device API.
Ionic PWA elements is a companion package that will polyfill certain browser APIs that provide no user interface with custom Ionic UI.
@@ -417,7 +417,7 @@ platformBrowserDynamic()
.catch((err) => console.log(err))
```
-Then create an **AvatarComponent** with this Ionic CLI command:
+Then create an `AvatarComponent` with this Ionic CLI command:
```bash
ionic g component avatar --module=/src/app/account/account.module.ts --create-module
@@ -536,7 +536,7 @@ export class AvatarComponent {
### Add the new widget
-And then, we can add the widget on top of the **AccountComponent** HTML template:
+And then, we can add the widget on top of the `AccountComponent` HTML template:
```ts src/app/account.component.ts
template: `
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-ionic-react.mdx b/apps/docs/content/guides/getting-started/tutorials/with-ionic-react.mdx
index cbfc4db3f49..5ad2106479f 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-ionic-react.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-ionic-react.mdx
@@ -363,7 +363,7 @@ First install two packages in order to interact with the user's camera.
npm install @ionic/pwa-elements @capacitor/camera
```
-[CapacitorJS](https://capacitorjs.com) is a cross platform native runtime from Ionic that enables web apps to be deployed through the app store and provides access to native device API.
+[Capacitor](https://capacitorjs.com) is a cross platform native runtime from Ionic that enables web apps to be deployed through the app store and provides access to native device API.
Ionic PWA elements is a companion package that will polyfill certain browser APIs that provide no user interface with custom Ionic UI.
@@ -390,7 +390,7 @@ serviceWorkerRegistration.unregister()
reportWebVitals()
```
-Then create an **AvatarComponent**.
+Then create an `AvatarComponent`.
```jsx src/components/Avatar.tsx
import { IonIcon } from '@ionic/react';
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-ionic-vue.mdx b/apps/docs/content/guides/getting-started/tutorials/with-ionic-vue.mdx
index 00b85b6aa6f..58388b7796c 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-ionic-vue.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-ionic-vue.mdx
@@ -396,7 +396,7 @@ First install two packages in order to interact with the user's camera.
npm install @ionic/pwa-elements @capacitor/camera
```
-[CapacitorJS](https://capacitorjs.com) is a cross platform native runtime from Ionic that enables web apps to be deployed through the app store and provides access to native device API.
+[Capacitor](https://capacitorjs.com) is a cross-platform native runtime from Ionic that enables web apps to be deployed through the app store and provides access to native device API.
Ionic PWA elements is a companion package that will polyfill certain browser APIs that provide no user interface with custom Ionic UI.
@@ -423,7 +423,7 @@ router.isReady().then(() => {
})
```
-Then create an **AvatarComponent**.
+Then create an `AvatarComponent`.
```html src/components/Avatar.vue
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx b/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx
index 4f9a0527b1e..b3f32c1db01 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx
@@ -839,7 +839,7 @@ private fun uriToByteArray(contentResolver: ContentResolver, uri: Uri): ByteArra
}
```
-Create a AddProductScreen:
+Create a `AddProductScreen`:
```kotlin
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@@ -1286,7 +1286,7 @@ class MainActivity : ComponentActivity() {
### Create the success screen
-To handle OAuth and OTP signins, create a new activity to handle the deeplink you set in `AndroidManifest.xml`:
+To handle OAuth and OTP signins, create a new activity to handle the deep link you set in `AndroidManifest.xml`:
```xml
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-nuxt-3.mdx b/apps/docs/content/guides/getting-started/tutorials/with-nuxt-3.mdx
index 5f873c373e8..5a11038af41 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-nuxt-3.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-nuxt-3.mdx
@@ -29,7 +29,7 @@ npx nuxi init nuxt-user-management
cd nuxt-user-management
```
-Then let's install the only additional dependency: [NuxtSupabase](https://supabase.nuxtjs.org/). We only need to import NuxtSupabase as a dev dependency.
+Then let's install the only additional dependency: [Nuxt Supabase](https://supabase.nuxtjs.org/). We only need to import Nuxt Supabase as a dev dependency.
```bash
npm install @nuxtjs/supabase --save-dev
@@ -44,7 +44,7 @@ SUPABASE_KEY="YOUR_SUPABASE_ANON_KEY"
```
These variables will be exposed on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database.
-Amazing thing about [NuxtSupabase](https://supabase.nuxtjs.org/) is that setting environment variables is all we need to do in order to start using Supabase.
+Amazing thing about [Nuxt Supabase](https://supabase.nuxtjs.org/) is that setting environment variables is all we need to do in order to start using Supabase.
No need to initialize Supabase. The library will take care of it automatically.
### App styling (optional)
@@ -110,7 +110,7 @@ const handleLogin = async () => {
### User state
-To access the user information, use the composable [useSupabaseUser](https://supabase.nuxtjs.org/usage/composables/usesupabaseuser) provided by the Supabase Nuxt module.
+To access the user information, use the composable [`useSupabaseUser`](https://supabase.nuxtjs.org/usage/composables/usesupabaseuser) provided by the Supabase Nuxt module.
### Account component
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx b/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx
index 0153609ec88..e0ad2e87af9 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-redwoodjs.mdx
@@ -429,7 +429,7 @@ export default Account
You'll see the use of `useAuth()` several times. Redwood's `useAuth` hook provides convenient ways to access
`logIn`, `logOut`, `currentUser`, and access the `supabase` authenticate client. We'll use it to get an instance
-of the supabase client to interact with your API.
+of the Supabase client to interact with your API.
### Update home page
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-solidjs.mdx b/apps/docs/content/guides/getting-started/tutorials/with-solidjs.mdx
index b86dc0cea43..3809040d52e 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-solidjs.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-solidjs.mdx
@@ -21,7 +21,7 @@ Let's start building the SolidJS app from scratch.
### Initialize a SolidJS app
-We can use [Degit](https://github.com/Rich-Harris/degit) to initialize an app called `supabase-solid`:
+We can use [degit](https://github.com/Rich-Harris/degit) to initialize an app called `supabase-solid`:
```bash
npx degit solidjs/templates/ts supabase-solid
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx b/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx
index 0ea00c80b3c..2f8df31f98c 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx
@@ -251,7 +251,11 @@ npm run dev
And then open the browser to [localhost:5173](http://localhost:5173) and you should see the completed app.
-> ⚠️ WARNING: Svelte uses Vite and the default port is `5173`, Supabase uses `port 3000`. To change the redirection port for supabase go to: `Authentication > Settings` and change the `Site Url` to `http://localhost:5173/`
+
+
+Svelte uses Vite and the default port is `5173`, Supabase uses `port 3000`. To change the redirection port for Supabase go to: `Authentication > Settings` and change the `Site Url` to `http://localhost:5173/`
+
+

diff --git a/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx
index 214e159dbde..46f5fcd6d49 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx
@@ -47,7 +47,7 @@ Optionally, add `src/styles.css` with the [CSS from the example](https://raw.git
### Creating a Supabase client for SSR
-The ssr package configures Supabase to use Cookies, which is required for server-side languages and frameworks.
+The `ssr` package configures Supabase to use Cookies, which is required for server-side languages and frameworks.
Install the Supabase packages:
@@ -55,7 +55,7 @@ Install the Supabase packages:
npm install @supabase/ssr @supabase/supabase-js
```
-Creating a Supabase client with the ssr package automatically configures it to use Cookies. This means your user's session is available throughout the entire SvelteKit stack - page, layout, server, hooks.
+Creating a Supabase client with the `ssr` package automatically configures it to use Cookies. This means your user's session is available throughout the entire SvelteKit stack - page, layout, server, hooks.
Add the code below to your `src/hooks.server.ts` to initialize the client on the server:
@@ -163,7 +163,7 @@ Start your dev server (`npm run dev`) in order to generate the `./$types` files
-Create a new `src/routes/+layout.ts` file to handle the session and the supabase object on the client-side.
+Create a new `src/routes/+layout.ts` file to handle the session and the `supabase` object on the client-side.
```ts src/routes/+layout.ts
// src/routes/+layout.ts
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-swift.mdx b/apps/docs/content/guides/getting-started/tutorials/with-swift.mdx
index fe6999a3f94..25a80a2984f 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-swift.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-swift.mdx
@@ -295,7 +295,7 @@ photos and videos.
{/* supa-mdx-lint-disable-next-line Rule001HeadingCase */}
-### Add PhotosPicker
+### Add `PhotosPicker`
Let's add support for the user to pick an image from the library and upload it.
Start by creating a new type to hold the picked avatar image:
@@ -336,7 +336,7 @@ enum TransferError: Error {
{/* supa-mdx-lint-disable-next-line Rule001HeadingCase */}
-#### Add PhotosPicker to profile page
+#### Add `PhotosPicker` to profile page
```swift ProfileView.swift
struct ProfileView: View {
diff --git a/apps/docs/content/guides/local-development/cli/getting-started.mdx b/apps/docs/content/guides/local-development/cli/getting-started.mdx
index 936c2d81157..860332df569 100644
--- a/apps/docs/content/guides/local-development/cli/getting-started.mdx
+++ b/apps/docs/content/guides/local-development/cli/getting-started.mdx
@@ -255,7 +255,7 @@ The local development environment includes Supabase Studio, a graphical interfac
postgresql://postgres:postgres@localhost:54322/postgres
```
-The local Postgres instance can be accessed through [`psql`](https://www.postgresql.org/docs/current/app-psql.html) or any other Postgres client, such as [pgadmin](https://www.pgadmin.org/). For example:
+The local Postgres instance can be accessed through [`psql`](https://www.postgresql.org/docs/current/app-psql.html) or any other Postgres client, such as [pgAdmin](https://www.pgadmin.org/). For example:
```bash
psql 'postgresql://postgres:postgres@localhost:54322/postgres'
diff --git a/apps/docs/content/guides/local-development/customizing-email-templates.mdx b/apps/docs/content/guides/local-development/customizing-email-templates.mdx
index a6d9e4b4079..4ce9d14713e 100644
--- a/apps/docs/content/guides/local-development/customizing-email-templates.mdx
+++ b/apps/docs/content/guides/local-development/customizing-email-templates.mdx
@@ -44,7 +44,7 @@ There are several Auth email templates which can be configured:
The templating system provides the following variables for use:
-### ConfirmationURL
+### `ConfirmationURL`
Contains the confirmation URL. For example, a signup confirmation URL would look like:
@@ -58,7 +58,7 @@ https://project-ref.supabase.co/auth/v1/verify?token={{ .TokenHash }}&type=email
Click here to confirm: {{ .ConfirmationURL }}
```
-### Token
+### `Token`
Contains a 6-digit One-Time-Password (OTP) that can be used instead of the `ConfirmationURL`.
@@ -68,7 +68,7 @@ Contains a 6-digit One-Time-Password (OTP) that can be used instead of the `Conf
Here is your one time password: {{ .Token }}
```
-### TokenHash
+### `TokenHash`
Contains a hashed version of the `Token`. This is useful for constructing your own email link in the email template.
@@ -83,7 +83,7 @@ Contains a hashed version of the `Token`. This is useful for constructing your o
```
-### SiteURL
+### `SiteURL`
Contains your application's Site URL. This can be configured in your project's [authentication settings](/dashboard/project/_/auth/url-configuration).
@@ -93,7 +93,7 @@ Contains your application's Site URL. This can be configured in your project's [
Visit here to log in.
```
-### Email
+### `Email`
Contains the user's email address.
@@ -103,7 +103,7 @@ Contains the user's email address.
A recovery request was sent to {{ .Email }}.
```
-### NewEmail
+### `NewEmail`
Contains the new user's email address. This is only available in the `email_change` email template.
diff --git a/apps/docs/content/guides/local-development/overview.mdx b/apps/docs/content/guides/local-development/overview.mdx
index 6e1c8a5cc60..9d1e75da1d2 100644
--- a/apps/docs/content/guides/local-development/overview.mdx
+++ b/apps/docs/content/guides/local-development/overview.mdx
@@ -343,11 +343,11 @@ You can synchronize your database with a specific schema using the `--schema` op
supabase db pull --schema
```
-
+
Using `--schema`
-If the local `supabase/migrations` directory is empty, the db pull command will ignore the `--schema` parameter.
+If the local `supabase/migrations` directory is empty, the `db pull` command will ignore the `--schema` parameter.
To fix this, you can pull twice:
diff --git a/apps/docs/content/guides/platform/access-control.mdx b/apps/docs/content/guides/platform/access-control.mdx
index 2b31ca2b5c7..3105797415c 100644
--- a/apps/docs/content/guides/platform/access-control.mdx
+++ b/apps/docs/content/guides/platform/access-control.mdx
@@ -134,7 +134,7 @@ The table below shows the actions each role can take on the resources belonging
| Read Replicas | List | | | | |
| | Create | | | | |
| | Delete | | | | |
-| Addons | Update | | | | |
+| Add-ons | Update | | | | |
| **Integrations** | | | | | |
| Authorize GitHub | - | | | | |
| Add GitHub Repositories | - | | | | |
diff --git a/apps/docs/content/guides/platform/billing-faq.mdx b/apps/docs/content/guides/platform/billing-faq.mdx
index 79a3a4358a8..9d96b0ed3e5 100644
--- a/apps/docs/content/guides/platform/billing-faq.mdx
+++ b/apps/docs/content/guides/platform/billing-faq.mdx
@@ -10,7 +10,7 @@ subtitle: 'This documentation covers frequently asked questions around subscript
#### What are organizations and projects?
The Supabase Platform has "organizations" and "projects". An organization may contain multiple projects. Each project is a dedicated Supabase instance with all of its sub-services including Storage, Auth, Functions and Realtime.
-Each organization only has a single subscription with a single Plan (Free, Pro, Team or Enterprise). Project addons such as [Compute](/docs/guides/platform/compute-add-ons), [IPv4](/docs/guides/platform/ipv4-address), [Log Drains](/docs/guides/platform/log-drains), [Advanced MFA](/docs/guides/auth/auth-mfa/phone), [Custom Domains](https://supabase.com/docs/guides/platform/custom-domains) and [PITR](https://supabase.com/docs/guides/platform/backups#point-in-time-recovery) are configured per project and are added to your organization subscription.
+Each organization only has a single subscription with a single Plan (Free, Pro, Team or Enterprise). Project add-ons such as [Compute](/docs/guides/platform/compute-add-ons), [IPv4](/docs/guides/platform/ipv4-address), [Log Drains](/docs/guides/platform/log-drains), [Advanced MFA](/docs/guides/auth/auth-mfa/phone), [Custom Domains](https://supabase.com/docs/guides/platform/custom-domains) and [PITR](https://supabase.com/docs/guides/platform/backups#point-in-time-recovery) are configured per project and are added to your organization subscription.
Read more on [how billing is organized](https://supabase.com/docs/guides/platform/org-based-billing#how-billing-is-organized).
#### How many free projects can I have?
@@ -76,7 +76,7 @@ Change your subscription plan in your [organization's billing settings](https://
#### What happens if I cancel my subscription?
-The organization is given credits for unused time on the subscription plan or addons. The credits will not expire and can be used again in the future.
+The organization is given credits for unused time on the subscription plan or add-ons. The credits will not expire and can be used again in the future.
#### I mistakenly upgraded the wrong organization and then downgraded it. Could you please issue a refund?
@@ -167,13 +167,13 @@ All our invoices are issued in USD, but you can pay in any currency so long as t
Yes, you will have to add the new payment method before being allowed to remove the old one.
This can be done from your dashboard on the [organization’s billing page](https://supabase.com/dashboard/org/_/billing).
-#### Can I pay upfront for multilpe months?
+#### Can I pay upfront for multiple months?
You can top up your credit balance to cover multiple months through your [organization’s billing page](https://supabase.com/dashboard/org/_/billing).
#### When are payments taken?
-Payments are taken at the beginning of each billing cycle. You will be charged once a month. You can see the current billing cycle and upcoming invoice in your [organization's billing settings](https://supabase.com/dashboard/org/_/billing). The subscription plan, custom domain and PITR addons are charged upfront, whereas usage-charges, including compute, are charged in hindsight based on your usage.
+Payments are taken at the beginning of each billing cycle. You will be charged once a month. You can see the current billing cycle and upcoming invoice in your [organization's billing settings](https://supabase.com/dashboard/org/_/billing). The subscription plan, custom domain and PITR add-ons are charged upfront, whereas usage-charges, including compute, are charged in hindsight based on your usage.
#### Where can I change my billing details?
diff --git a/apps/docs/content/guides/platform/compute-and-disk.mdx b/apps/docs/content/guides/platform/compute-and-disk.mdx
index 5f8f57bd6c0..b4bcf000db9 100644
--- a/apps/docs/content/guides/platform/compute-and-disk.mdx
+++ b/apps/docs/content/guides/platform/compute-and-disk.mdx
@@ -119,7 +119,7 @@ When selecting your disk, it's essential to focus on the performance needs of yo
For general, day-to-day operations, gp3 should be more than enough. If you need high throughput and IOPS for critical systems, io2 will provide the performance required.
-
+
Compute instance size changes will not change your selected disk type or disk size, but your IO limits may change according to what your selected compute instance size supports.
diff --git a/apps/docs/content/guides/platform/custom-domains.mdx b/apps/docs/content/guides/platform/custom-domains.mdx
index 03a998fb62d..9e80700db36 100644
--- a/apps/docs/content/guides/platform/custom-domains.mdx
+++ b/apps/docs/content/guides/platform/custom-domains.mdx
@@ -103,7 +103,7 @@ Before you activate your domain, prepare your applications and integrations for
- You do not need to change the Supabase URL in your applications immediately.
- You can use it interchangeably with the custom domain.
- Supabase Auth will use the custom domain immediately once activated.
- - OAuth flows will advertize the custom domain as a callback URL.
+ - OAuth flows will advertise the custom domain as a callback URL.
- SAML will use the custom domain instead. This means that the `EntityID` of your project has changed, and this may cause SAML with existing identity providers to stop working.
To prevent issues for your users, follow these steps:
@@ -179,7 +179,7 @@ Before you activate your vanity subdomain, prepare your applications and integra
- You do not need to change the Supabase URL in your applications immediately or at once.
- You can use it interchangeably with the custom domain.
- Supabase Auth will use the subdomain immediately once activated.
- - OAuth flows will advertize the subdomain as a callback URL.
+ - OAuth flows will advertise the subdomain as a callback URL.
- SAML will use the subdomain instead. This means that the `EntityID` of your project has changed, and this may cause SAML with existing identity providers to stop working.
To prevent issues for your users, make sure you have gone through these steps:
diff --git a/apps/docs/content/guides/platform/fly-postgres.mdx b/apps/docs/content/guides/platform/fly-postgres.mdx
index fceb1d8cf8e..9eccbff39be 100644
--- a/apps/docs/content/guides/platform/fly-postgres.mdx
+++ b/apps/docs/content/guides/platform/fly-postgres.mdx
@@ -64,6 +64,6 @@ When using Fly Postgres, be aware of the current restrictions:
- Direct database connections are only supported via IPv6. Read more in the [connecting to your database](#connecting-to-your-database) section.
- [Network restrictions](/docs/guides/platform/network-restrictions) are not supported
-- Currently, only the database, Supavisor, and Postgrest are supported. Support for additional Supabase products such as Realtime, Storage, and Auth is planned.
+- Currently, only the database, Supavisor, and PostgREST are supported. Support for additional Supabase products such as Realtime, Storage, and Auth is planned.
- New projects can only be launched using the Fly CLI and not via the Supabase dashboard.
- The [pg_cron](/docs/guides/database/extensions/pg_cron) extension is not fully supported for Fly projects. Fly projects shut down after 15 minutes of inactivity, but transparently start up when an external request is received. However, this does not apply to pg_cron jobs, which aren’t triggered by external requests. ` pg_cron` jobs don’t run when the database is shut down due to inactivity. We are working on removing this behavior for paid projects.
diff --git a/apps/docs/content/guides/platform/ipv4-address.mdx b/apps/docs/content/guides/platform/ipv4-address.mdx
index 6aa9cc57251..5a5b45474e3 100644
--- a/apps/docs/content/guides/platform/ipv4-address.mdx
+++ b/apps/docs/content/guides/platform/ipv4-address.mdx
@@ -4,7 +4,7 @@ description: 'Attach an IPv4 address to your database'
subtitle: 'Attach an IPv4 address to your database'
---
-The Supabase IPv4 add-on provides a dedicated IPv4 address for your Postgres database connection. It can be configured in the [Add-Ons Settings](/dashboard/project/_/settings/addons).
+The Supabase IPv4 add-on provides a dedicated IPv4 address for your Postgres database connection. It can be configured in the [Add-ons Settings](/dashboard/project/_/settings/addons).
## Understanding IP addresses
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx
index e4534f4284b..abd79621591 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx
@@ -75,7 +75,7 @@ Migrate existing users to Supabase Auth. This requires two main steps: first, ch
1. Get your Auth 0 user export and password hash export lists.
1. Filter for users who use password login.
- Under the `identities` field in the user object, these users will have `auth0` as a provider. In the same identity object, you can find their Auth0 `user_id`.
- - Check that the user has a corresponding password hash by comapring their Auth0 `user_id` to the `oid` field in the password hash export.
+ - Check that the user has a corresponding password hash by comparing their Auth0 `user_id` to the `oid` field in the password hash export.
1. Use Supabase Auth's [admin create user](/docs/reference/javascript/auth-admin-createuser) method to recreate the user in Supabase Auth. If the user has a confirmed email address or phone number, set `email_confirm` or `phone_confirm` to `true`.
```ts
@@ -88,7 +88,7 @@ Migrate existing users to Supabase Auth. This requires two main steps: first, ch
- Supabase supports BCrypt and Argon2 password hashes.
+ Supabase supports bcrypt and Argon2 password hashes.
@@ -161,7 +161,7 @@ const { data, error } = await supabase.auth.admin.createUser({
})
```
-
+
These fields will be exposed in the user's access token JWT so it is recommended not to store excessive metadata in these fields.
@@ -218,7 +218,7 @@ header={How can I allow my users to retain the
id="existing-password"
>
-Supabase Auth never stores passwords as plaintext. Since Supabase Auth supports reading BCrypt and argon2 password hashes, you can import your users passwords if they use the same hashing algorithm. New users in Supabase Auth who use password-based sign-in methods will always use a BCrypt hash. Passwords are stored in the `auth.users.encrypted_password` column.
+Supabase Auth never stores passwords as plaintext. Since Supabase Auth supports reading bcrypt and argon2 password hashes, you can import your users passwords if they use the same hashing algorithm. New users in Supabase Auth who use password-based sign-in methods will always use a bcrypt hash. Passwords are stored in the `auth.users.encrypted_password` column.
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx
index b29d4396844..980619e82ac 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx
@@ -12,7 +12,7 @@ Supabase provides several [tools](https://github.com/supabase-community/firebase
## Set up the migration tool [#set-up-migration-tool]
-1. Clone the [firebase-to-supabase](https://github.com/supabase-community/firebase-to-supabase) repository:
+1. Clone the [`firebase-to-supabase`](https://github.com/supabase-community/firebase-to-supabase) repository:
```bash
git clone https://github.com/supabase-community/firebase-to-supabase.git
@@ -73,12 +73,12 @@ hash_config {
`node import_users.js []`
-- `path_to_json_file`: full local path and filename of .json input file (of users)
+- `path_to_json_file`: full local path and filename of JSON input file (of users)
- `batch_size`: (optional) number of users to process in a batch (defaults to 100)
## Notes
-For more advanced migrations, including the use of a middleware server component for verifying a user's existing Firebase password and updating that password in your Supabase project the first time a user logs in, see the [firebase-to-supabase repo](https://github.com/supabase-community/firebase-to-supabase/tree/main/auth).
+For more advanced migrations, including the use of a middleware server component for verifying a user's existing Firebase password and updating that password in your Supabase project the first time a user logs in, see the [`firebase-to-supabase` repo](https://github.com/supabase-community/firebase-to-supabase/tree/main/auth).
## Resources
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx
index abbbd1038e4..3704d6dd6f7 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx
@@ -12,7 +12,7 @@ Supabase provides several [tools](https://github.com/supabase-community/firebase
## Set up the migration tool [#set-up-migration-tool]
-1. Clone the [firebase-to-supabase](https://github.com/supabase-community/firebase-to-supabase) repository:
+1. Clone the [`firebase-to-supabase`](https://github.com/supabase-community/firebase-to-supabase) repository:
```bash
git clone https://github.com/supabase-community/firebase-to-supabase.git
@@ -41,7 +41,7 @@ Supabase provides several [tools](https://github.com/supabase-community/firebase
- ``: (optional) Name of subfolder for downloaded files. The selected folder is created as a subfolder of the current folder (e.g., `./downloads/`). The default is `downloads`.
- ``: (optional) The default is 100.
- ``: (optional) Stop after processing this many files. For no limit, use `0`.
-- ``: (optional) Begin processing at this pageToken.
+- ``: (optional) Begin processing at this `pageToken`.
To process in batches using multiple command-line executions, you must use the same parameters with a new `` on subsequent calls. Use the token displayed on the last call to continue the process at a given point.
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx
index 60f071362c9..4289b183a13 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx
@@ -11,7 +11,7 @@ The Firestore `collection` is "flattened" and converted to a table with basic co
## Set up the migration tool [#set-up-migration-tool]
-1. Clone the [firebase-to-supabase](https://github.com/supabase-community/firebase-to-supabase) repository:
+1. Clone the [`firebase-to-supabase`](https://github.com/supabase-community/firebase-to-supabase) repository:
```bash
git clone https://github.com/supabase-community/firebase-to-supabase.git
@@ -101,11 +101,11 @@ Hooks are used to customize the process of exporting a collection of Firestore d
### Write a custom hook
-#### Create a .js file for your collection
+#### Create a `.js` file for your collection
If your Firestore collection is called `users`, create a file called `users.js` in the current folder.
-#### Construct your .js file
+#### Construct your `.js` file
The basic format of a hook file looks like this:
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/mysql.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/mysql.mdx
index 981360e1293..9e713f81770 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/mysql.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/mysql.mdx
@@ -6,7 +6,7 @@ subtitle: 'Migrate your MySQL database to Supabase Postgres database.'
This guide aims to exhibit the process of transferring your MySQL database to Supabase's Postgres database. Supabase is a robust and open-source platform offering a wide range of backend features, including a PostgreSQL database, authentication, instant APIs, edge functions, real-time subscriptions, and storage. Migrating your MySQL database to Supabase's PostgreSQL enables you to leverage PostgreSQL's capabilities and access all the features you need for your project.
-## Retrieve your mySQL database credentials
+## Retrieve your MySQL database credentials
Before you begin the migration, you need to collect essential information about your MySQL database. Follow these steps:
diff --git a/apps/docs/content/guides/platform/migrating-within-supabase/backup-restore.mdx b/apps/docs/content/guides/platform/migrating-within-supabase/backup-restore.mdx
index 7063369eba6..773d0ccf140 100644
--- a/apps/docs/content/guides/platform/migrating-within-supabase/backup-restore.mdx
+++ b/apps/docs/content/guides/platform/migrating-within-supabase/backup-restore.mdx
@@ -23,7 +23,7 @@ breadcrumb: 'Migrations'
Go to the [project page](/dashboard/project/_/) and click the "**Connect**" button at the top of the page for the connection string.
-
+
Use the Session pooler connection string by default. If your ISP supports IPv6, use the direct connection string.
@@ -111,7 +111,7 @@ breadcrumb: 'Migrations'
Go to the [project page](/dashboard/project/_/) and click the "**Connect**" button at the top of the page for the connection string.
-
+
Use the Session pooler connection string by default. If your ISP supports IPv6, use the direct connection string.
diff --git a/apps/docs/content/guides/platform/migrating-within-supabase/dashboard-restore.mdx b/apps/docs/content/guides/platform/migrating-within-supabase/dashboard-restore.mdx
index 55b029a6e57..bef0874c8d8 100644
--- a/apps/docs/content/guides/platform/migrating-within-supabase/dashboard-restore.mdx
+++ b/apps/docs/content/guides/platform/migrating-within-supabase/dashboard-restore.mdx
@@ -71,7 +71,7 @@ Here is a non-exhaustive list of items that are commonly asked about and will be
Go to the [project page](/dashboard/project/_/) and click the "**Connect**" button at the top of the page for the connection string.
-
+
Use the Session pooler connection string by default. If your ISP supports IPv6, use the direct connection string.
@@ -90,7 +90,7 @@ Here is a non-exhaustive list of items that are commonly asked about and will be
- It can take a few minutes for the database password reset to take effect. Especially if multiple password resets are done.
+ It can take a few minutes for the database password reset to take effect. Especially if multiple password resets are done.
Reset the password in the [Database Settings](https://supabase.com/dashboard/project/_/settings/database).
@@ -162,7 +162,7 @@ There are circumstances where this method can fail and if it does, you should re
"**psql: error: connection to server at "aws-0-us-east-1.pooler.supabase.com" (44.216.29.125), port 5432 failed: received invalid response to GSSAPI negotiation:**"
-You are possibly using psql and postgres version 15 or lower. Completely remove the Postgresql installation and install the latest version as per the instructions above to resolve this issue.
+You are possibly using psql and Postgres version 15 or lower. Completely remove the Postgres installation and install the latest version as per the instructions above to resolve this issue.
"**psql: error: connection to server at "aws-0-us-east-1.pooler.supabase.com" (44.216.29.125), port 5432 failed: error received from server in SCRAM exchange: Wrong password**"
diff --git a/apps/docs/content/guides/platform/org-based-billing.mdx b/apps/docs/content/guides/platform/org-based-billing.mdx
index 90356117a5d..84963c02b27 100644
--- a/apps/docs/content/guides/platform/org-based-billing.mdx
+++ b/apps/docs/content/guides/platform/org-based-billing.mdx
@@ -126,7 +126,7 @@ Project add-ons are charged by the hour at the end of your billing cycle. I.e. i
## Unified egress
-Each organization receives a total egress quota (eg. 250GB on the Pro Plan) which can be used for anything - Storage, Realtime, Auth, Functions, Supavisor, Log Drains or Database.
+Each organization receives a total egress quota (e.g. 250GB on the Pro Plan) which can be used for anything - Storage, Realtime, Auth, Functions, Supavisor, Log Drains or Database.
### Included egress quota
diff --git a/apps/docs/content/guides/platform/project-transfer.mdx b/apps/docs/content/guides/platform/project-transfer.mdx
index 83738e2a9e2..67bc94ea5c7 100644
--- a/apps/docs/content/guides/platform/project-transfer.mdx
+++ b/apps/docs/content/guides/platform/project-transfer.mdx
@@ -34,9 +34,9 @@ Target organization - the organization you want to move the project to
- The target organization you want to move the project to needs to use [Organization-based Billing](/docs/guides/platform/org-based-billing).
- You need to be the owner of the source organization.
- You need to be at least a member of the target organization you want to move the project to.
-- Projects with support tier addons cannot be transferred at this point. Please [open a support ticket](https://supabase.com/dashboard/support/new?category=billing&subject=Transfer%20project).
+- Projects with support tier add-ons cannot be transferred at this point. Please [open a support ticket](https://supabase.com/dashboard/support/new?category=billing&subject=Transfer%20project).
-## Usage-billing and project addons
+## Usage-billing and project add-ons
For usage metrics such as disk size, egress or image transformations and project add-ons such as [Compute Add-On](/docs/guides/platform/compute-add-ons), [Point-In-Time-Recovery](/docs/guides/platform/backups#point-in-time-recovery), [IPv4](/docs/guides/platform/ipv4-address), [Log Drains](/docs/guides/platform/log-drains), [Advanced MFA](/docs/guides/auth/auth-mfa/phone) or a [Custom Domain](/docs/guides/platform/custom-domains), the source organization will still be charged for the usage up until the transfer. The charges will be added to the invoice when the billing cycle resets.
diff --git a/apps/docs/content/guides/platform/sso.mdx b/apps/docs/content/guides/platform/sso.mdx
index 2e32c46b6a8..1331ef3f564 100644
--- a/apps/docs/content/guides/platform/sso.mdx
+++ b/apps/docs/content/guides/platform/sso.mdx
@@ -3,7 +3,7 @@ title: 'Enable SSO for Your Organization'
description: 'General information about enabling single sign-on (SSO) for your organization'
---
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
@@ -21,7 +21,7 @@ Supabase currently provides SAML SSO for [Team and Enterprise plan customers](ht
Supabase supports practically all identity providers that support the SAML 2.0 SSO protocol. We've prepared these guides for commonly used identity providers to help you get started. If you use a different provider, our support stands ready to support you.
-- [Google Workspaces (formerly GSuite)](/docs/guides/platform/sso/gsuite)
+- [Google Workspaces (formerly G Suite)](/docs/guides/platform/sso/gsuite)
- [Azure Active Directory](/docs/guides/platform/sso/azure)
- [Okta](/docs/guides/platform/sso/okta)
diff --git a/apps/docs/content/guides/platform/sso/azure.mdx b/apps/docs/content/guides/platform/sso/azure.mdx
index 5a23c9a9c98..2d315a72d69 100644
--- a/apps/docs/content/guides/platform/sso/azure.mdx
+++ b/apps/docs/content/guides/platform/sso/azure.mdx
@@ -3,13 +3,13 @@ title: 'Set Up SSO with Azure AD'
description: 'Configure single sign-on with Azure AD (Microsoft Entra).'
---
-
+
This feature is only available on the Team and Enterprise Plans. Please contact [Sales](https://forms.supabase.com/enterprise) before doing these steps.
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
@@ -83,7 +83,7 @@ Finally, click the _Save_ button to save the configuration.
## Step 7: Obtain metadata URL and send to Supabase [#send-metadata-url]
-Supabase needs to finalize enabling single sign-on with your Azure AD application. To do this, copy and send the link under **App Federation Metadata Url** in \*section 3 **SAML Certificates\*** to your support contact and await further instructions. If you're not clear who to send this link to or need further assistance, reach out to [Supabase Support](https://supabase.help).
+Supabase needs to finalize enabling single sign-on with your Azure AD application. To do this, copy and send the link under **App Federation Metadata URL** in \*section 3 **SAML Certificates\*** to your support contact and await further instructions. If you're not clear who to send this link to or need further assistance, reach out to [Supabase Support](https://supabase.help).
**Do not test the login until you have heard back from the support contact.**
diff --git a/apps/docs/content/guides/platform/sso/gsuite.mdx b/apps/docs/content/guides/platform/sso/gsuite.mdx
index fbeeb299a63..40fb9457f11 100644
--- a/apps/docs/content/guides/platform/sso/gsuite.mdx
+++ b/apps/docs/content/guides/platform/sso/gsuite.mdx
@@ -1,21 +1,21 @@
---
title: 'Set Up SSO with Google Workspace'
-description: 'Configure single sign-on with Google Workspace (GSuite).'
+description: 'Configure single sign-on with Google Workspace (G Suite).'
---
-
+
This feature is only available on the Team and Enterprise Plans. Please contact [Sales](https://forms.supabase.com/enterprise) before doing these steps.
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
-Supabase supports single sign-on (SSO) using Google Workspace (formerly known as GSuite).
+Supabase supports single sign-on (SSO) using Google Workspace (formerly known as G Suite).
## Step 1: Open the Google Workspace web and mobile apps console [#google-workspace-console]
diff --git a/apps/docs/content/guides/platform/sso/okta.mdx b/apps/docs/content/guides/platform/sso/okta.mdx
index 116a0995d80..46ff896887e 100644
--- a/apps/docs/content/guides/platform/sso/okta.mdx
+++ b/apps/docs/content/guides/platform/sso/okta.mdx
@@ -3,13 +3,13 @@ title: 'Set Up SSO with Okta'
description: 'Configure single sign-on with Okta.'
---
-
+
This feature is only available on the Team and Enterprise Plans. Please contact [Sales](https://forms.supabase.com/enterprise) before doing these steps.
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
@@ -44,8 +44,8 @@ These settings let Supabase use SAML 2.0 properly with your Okta application. Ma
| Single sign-on URL | `https://alt.supabase.io/auth/v1/sso/saml/acs` |
| Use this for Recipient URL and Destination URL | ✔️ |
| Audience URI (SP Entity ID) | `https://alt.supabase.io/auth/v1/sso/saml/metadata` |
-| Default RelayState | `https://supabase.com/dashboard` |
-| Name ID format | EmailAddress |
+| Default `RelayState` | `https://supabase.com/dashboard` |
+| Name ID format | `EmailAddress` |
| Application username | Email |
| Update application username on | Create and update |
diff --git a/apps/docs/content/guides/queues/api.mdx b/apps/docs/content/guides/queues/api.mdx
index 35af17366b1..178c6527245 100644
--- a/apps/docs/content/guides/queues/api.mdx
+++ b/apps/docs/content/guides/queues/api.mdx
@@ -11,7 +11,7 @@ Database functions in `pgmq_public` can be exposed via Supabase Data API so cons
Retrieves the next available message and deletes it from the specified Queue.
-- `queue_name` (text): Queue name
+- `queue_name` (`text`): Queue name
---
@@ -19,9 +19,9 @@ Retrieves the next available message and deletes it from the specified Queue.
Adds a Message to the specified Queue, optionally delaying its visibility to all consumers by a number of seconds.
-- `queue_name` (text): Queue name
-- `message` (jsonb): Message payload to send
-- `sleep_seconds` (integer, optional): Delay message visibility by specified seconds. Defaults to 0
+- `queue_name` (`text`): Queue name
+- `message` (`jsonb`): Message payload to send
+- `sleep_seconds` (`integer`, optional): Delay message visibility by specified seconds. Defaults to 0
---
@@ -29,9 +29,9 @@ Adds a Message to the specified Queue, optionally delaying its visibility to all
Adds a batch of Messages to the specified Queue, optionally delaying their availability to all consumers by a number of seconds.
-- `queue_name` (text): Queue name
-- `messages` (jsonb[]): Array of message payloads to send
-- `sleep_seconds` (integer, optional): Delay messages visibility by specified seconds. Defaults to 0
+- `queue_name` (`text`): Queue name
+- `messages` (`jsonb[]`): Array of message payloads to send
+- `sleep_seconds` (`integer`, optional): Delay messages visibility by specified seconds. Defaults to 0
---
@@ -39,8 +39,8 @@ Adds a batch of Messages to the specified Queue, optionally delaying their avail
Archives a Message by moving it from the Queue table to the Queue's archive table.
-- `queue_name` (text): Queue name
-- `message_id` (bigint): ID of the Message to archive
+- `queue_name` (`text`): Queue name
+- `message_id` (`bigint`): ID of the Message to archive
---
@@ -48,8 +48,8 @@ Archives a Message by moving it from the Queue table to the Queue's archive tabl
Permanently deletes a Message from the specified Queue.
-- `queue_name` (text): Queue name
-- `message_id` (bigint): ID of the Message to delete
+- `queue_name` (`text`): Queue name
+- `message_id` (`bigint`): ID of the Message to delete
---
@@ -57,6 +57,6 @@ Permanently deletes a Message from the specified Queue.
Reads up to "n" Messages from the specified Queue with an optional "sleep_seconds" (visibility timeout).
-- `queue_name` (text): Queue name
-- `sleep_seconds` (integer): Visibility timeout in seconds
-- `n` (integer): Maximum number of Messages to read
+- `queue_name` (`text`): Queue name
+- `sleep_seconds` (`integer`): Visibility timeout in seconds
+- `n` (`integer`): Maximum number of Messages to read
diff --git a/apps/docs/content/guides/queues/pgmq.mdx b/apps/docs/content/guides/queues/pgmq.mdx
index 400cedd776d..6351ad4d8b6 100644
--- a/apps/docs/content/guides/queues/pgmq.mdx
+++ b/apps/docs/content/guides/queues/pgmq.mdx
@@ -43,7 +43,7 @@ Example:
{/* prettier-ignore */}
```sql
select from pgmq.create('my_queue');
- create
+ create
--------
```
@@ -69,7 +69,7 @@ Example:
{/* prettier-ignore */}
```sql
select pgmq.create_unlogged('my_unlogged');
- create_unlogged
+ create_unlogged
-----------------
```
@@ -96,7 +96,7 @@ Example:
{/* prettier-ignore */}
```sql
select * from pgmq.detach_archive('my_queue');
- detach_archive
+ detach_archive
----------------
```
@@ -123,7 +123,7 @@ Example:
{/* prettier-ignore */}
```sql
select * from pgmq.drop_queue('my_unlogged');
- drop_queue
+ drop_queue
------------
t
```
@@ -146,18 +146,18 @@ returns setof bigint
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :------ | :----------------------------------------------------------------- |
-| queue_name | text | The name of the queue |
-| msg | jsonb | The message to send to the queue |
-| delay | integer | Time in seconds before the message becomes visible. Defaults to 0. |
+| Parameter | Type | Description |
+| :----------- | :-------- | :----------------------------------------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `msg` | `jsonb` | The message to send to the queue |
+| `delay` | `integer` | Time in seconds before the message becomes visible. Defaults to 0. |
Example:
{/* prettier-ignore */}
```sql
select * from pgmq.send('my_queue', '{"hello": "world"}');
- send
+ send
------
4
```
@@ -180,11 +180,11 @@ returns setof bigint
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :------ | :------------------------------------------------------------------ |
-| queue_name | text | The name of the queue |
-| msgs | jsonb[] | Array of messages to send to the queue |
-| delay | integer | Time in seconds before the messages becomes visible. Defaults to 0. |
+| Parameter | Type | Description |
+| :----------- | :-------- | :------------------------------------------------------------------ |
+| `queue_name` | `text` | The name of the queue |
+| `msgs` | `jsonb[]` | Array of messages to send to the queue |
+| `delay` | `integer` | Time in seconds before the messages becomes visible. Defaults to 0. |
{/* prettier-ignore */}
```sql
@@ -195,7 +195,7 @@ select * from pgmq.send_batch(
'{"hello": "world_1"}'::jsonb
]
);
- send_batch
+ send_batch
------------
1
2
@@ -222,18 +222,18 @@ returns setof pgmq.message_record
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :------ | :-------------------------------------------------------------- |
-| queue_name | text | The name of the queue |
-| vt | integer | Time in seconds that the message become invisible after reading |
-| qty | integer | The number of messages to read from the queue. Defaults to 1 |
+| Parameter | Type | Description |
+| :----------- | :-------- | :-------------------------------------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `vt` | `integer` | Time in seconds that the message become invisible after reading |
+| `qty` | `integer` | The number of messages to read from the queue. Defaults to 1 |
Example:
{/* prettier-ignore */}
```sql
select * from pgmq.read('my_queue', 10, 2);
- msg_id | read_ct | enqueued_at | vt | message
+ msg_id | read_ct | enqueued_at | vt | message
--------+---------+-------------------------------+-------------------------------+----------------------
1 | 1 | 2023-10-28 19:14:47.356595-05 | 2023-10-28 19:17:08.608922-05 | {"hello": "world_0"}
2 | 1 | 2023-10-28 19:14:47.356595-05 | 2023-10-28 19:17:08.608974-05 | {"hello": "world_1"}
@@ -262,20 +262,20 @@ returns setof pgmq.message_record
**Parameters:**
-| Parameter | Type | Description |
-| :--------------- | :------ | :-------------------------------------------------------------------------- |
-| queue_name | text | The name of the queue |
-| vt | integer | Time in seconds that the message become invisible after reading. |
-| qty | integer | The number of messages to read from the queue. Defaults to 1. |
-| max_poll_seconds | integer | Time in seconds to wait for new messages to reach the queue. Defaults to 5. |
-| poll_interval_ms | integer | Milliseconds between the internal poll operations. Defaults to 100. |
+| Parameter | Type | Description |
+| :----------------- | :-------- | :-------------------------------------------------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `vt` | `integer` | Time in seconds that the message become invisible after reading. |
+| `qty` | `integer` | The number of messages to read from the queue. Defaults to 1. |
+| `max_poll_seconds` | `integer` | Time in seconds to wait for new messages to reach the queue. Defaults to 5. |
+| `poll_interval_ms` | `integer` | Milliseconds between the internal poll operations. Defaults to 100. |
Example:
{/* prettier-ignore */}
```sql
select * from pgmq.read_with_poll('my_queue', 1, 1, 5, 100);
- msg_id | read_ct | enqueued_at | vt | message
+ msg_id | read_ct | enqueued_at | vt | message
--------+---------+-------------------------------+-------------------------------+--------------------
1 | 1 | 2023-10-28 19:09:09.177756-05 | 2023-10-28 19:27:00.337929-05 | {"hello": "world"}
```
@@ -305,7 +305,7 @@ Example:
{/* prettier-ignore */}
```sql
pgmq=# select * from pgmq.pop('my_queue');
- msg_id | read_ct | enqueued_at | vt | message
+ msg_id | read_ct | enqueued_at | vt | message
--------+---------+-------------------------------+-------------------------------+--------------------
1 | 2 | 2023-10-28 19:09:09.177756-05 | 2023-10-28 19:27:00.337929-05 | {"hello": "world"}
```
@@ -326,17 +326,17 @@ returns boolean
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :----- | :---------------------------------- |
-| queue_name | text | The name of the queue |
-| msg_id | bigint | Message ID of the message to delete |
+| Parameter | Type | Description |
+| :----------- | :------- | :---------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `msg_id` | `bigint` | Message ID of the message to delete |
Example:
{/* prettier-ignore */}
```sql
select pgmq.delete('my_queue', 5);
- delete
+ delete
--------
t
```
@@ -355,10 +355,10 @@ returns setof bigint
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :------- | :----------------------------- |
-| queue_name | text | The name of the queue |
-| msg_ids | bigint[] | Array of message IDs to delete |
+| Parameter | Type | Description |
+| :----------- | :--------- | :----------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `msg_ids` | `bigint[]` | Array of message IDs to delete |
Examples:
@@ -367,7 +367,7 @@ Delete two messages that exist.
{/* prettier-ignore */}
```sql
select * from pgmq.delete('my_queue', array[2, 3]);
- delete
+ delete
--------
2
3
@@ -406,7 +406,7 @@ Purge the queue when it contains 8 messages;
{/* prettier-ignore */}
```sql
select * from pgmq.purge_queue('my_queue');
- purge_queue
+ purge_queue
-------------
8
```
@@ -425,10 +425,10 @@ returns boolean
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :----- | :----------------------------------- |
-| queue_name | text | The name of the queue |
-| msg_id | bigint | Message ID of the message to archive |
+| Parameter | Type | Description |
+| :----------- | :------- | :----------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `msg_id` | `bigint` | Message ID of the message to archive |
Returns
Boolean value indicating success or failure of the operation.
@@ -438,7 +438,7 @@ Example; remove message with ID 1 from queue `my_queue` and archive it:
{/* prettier-ignore */}
```sql
select * from pgmq.archive('my_queue', 1);
- archive
+ archive
---------
t
```
@@ -457,10 +457,10 @@ RETURNS SETOF bigint
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :------- | :------------------------------ |
-| queue_name | text | The name of the queue |
-| msg_ids | bigint[] | Array of message IDs to archive |
+| Parameter | Type | Description |
+| :----------- | :--------- | :------------------------------ |
+| `queue_name` | `text` | The name of the queue |
+| `msg_ids` | `bigint[]` | Array of message IDs to archive |
Examples:
@@ -469,7 +469,7 @@ Delete messages with ID 1 and 2 from queue `my_queue` and move to the archive.
{/* prettier-ignore */}
```sql
select * from pgmq.archive('my_queue', array[1, 2]);
- archive
+ archive
---------
1
2
@@ -480,7 +480,7 @@ Delete messages 4, which exists and 999, which does not exist.
{/* prettier-ignore */}
```sql
select * from pgmq.archive('my_queue', array[4, 999]);
- archive
+ archive
---------
4
```
@@ -505,11 +505,11 @@ returns pgmq.message_record
**Parameters:**
-| Parameter | Type | Description |
-| :--------- | :------ | :-------------------------------------------------------------------- |
-| queue_name | text | The name of the queue |
-| msg_id | bigint | ID of the message to set visibility time |
-| vt_offset | integer | Duration from now, in seconds, that the message's VT should be set to |
+| Parameter | Type | Description |
+| :----------- | :-------- | :-------------------------------------------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `msg_id` | `bigint` | ID of the message to set visibility time |
+| `vt_offset` | `integer` | Duration from now, in seconds, that the message's VT should be set to |
Example:
@@ -544,7 +544,7 @@ Example:
{/* prettier-ignore */}
```sql
select * from pgmq.list_queues();
- queue_name | created_at | is_partitioned | is_unlogged
+ queue_name | created_at | is_partitioned | is_unlogged
----------------------+-------------------------------+----------------+-------------
my_queue | 2023-10-28 14:13:17.092576-05 | f | f
my_partitioned_queue | 2023-10-28 19:47:37.098692-05 | t | f
@@ -578,21 +578,21 @@ returns table(
**Returns:**
-| Attribute | Type | Description |
-| :----------------- | :----------------------- | :------------------------------------------------------------------------ |
-| queue_name | text | The name of the queue |
-| queue_length | bigint | Number of messages currently in the queue |
-| newest_msg_age_sec | integer \| null | Age of the newest message in the queue, in seconds |
-| oldest_msg_age_sec | integer \| null | Age of the oldest message in the queue, in seconds |
-| total_messages | bigint | Total number of messages that have passed through the queue over all time |
-| scrape_time | timestamp with time zone | The current timestamp |
+| Attribute | Type | Description |
+| :------------------- | :------------------------- | :------------------------------------------------------------------------ | -------------------------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `queue_length` | `bigint` | Number of messages currently in the queue |
+| `newest_msg_age_sec` | `integer | null` | Age of the newest message in the queue, in seconds |
+| `oldest_msg_age_sec` | `integer | null` | Age of the oldest message in the queue, in seconds |
+| `total_messages` | `bigint` | Total number of messages that have passed through the queue over all time |
+| `scrape_time` | `timestamp with time zone` | The current timestamp |
Example:
{/* prettier-ignore */}
```sql
select * from pgmq.metrics('my_queue');
- queue_name | queue_length | newest_msg_age_sec | oldest_msg_age_sec | total_messages | scrape_time
+ queue_name | queue_length | newest_msg_age_sec | oldest_msg_age_sec | total_messages | scrape_time
------------+--------------+--------------------+--------------------+----------------+-------------------------------
my_queue | 16 | 2445 | 2447 | 35 | 2023-10-28 20:23:08.406259-05
```
@@ -617,19 +617,19 @@ RETURNS TABLE(
**Returns:**
-| Attribute | Type | Description |
-| :----------------- | :----------------------- | :------------------------------------------------------------------------ |
-| queue_name | text | The name of the queue |
-| queue_length | bigint | Number of messages currently in the queue |
-| newest_msg_age_sec | integer \| null | Age of the newest message in the queue, in seconds |
-| oldest_msg_age_sec | integer \| null | Age of the oldest message in the queue, in seconds |
-| total_messages | bigint | Total number of messages that have passed through the queue over all time |
-| scrape_time | timestamp with time zone | The current timestamp |
+| Attribute | Type | Description |
+| :------------------- | :------------------------- | :------------------------------------------------------------------------ | -------------------------------------------------- |
+| `queue_name` | `text` | The name of the queue |
+| `queue_length` | `bigint` | Number of messages currently in the queue |
+| `newest_msg_age_sec` | `integer | null` | Age of the newest message in the queue, in seconds |
+| `oldest_msg_age_sec` | `integer | null` | Age of the oldest message in the queue, in seconds |
+| `total_messages` | `bigint` | Total number of messages that have passed through the queue over all time |
+| `scrape_time` | `timestamp with time zone` | The current timestamp |
{/* prettier-ignore */}
```sql
select * from pgmq.metrics_all();
- queue_name | queue_length | newest_msg_age_sec | oldest_msg_age_sec | total_messages | scrape_time
+ queue_name | queue_length | newest_msg_age_sec | oldest_msg_age_sec | total_messages | scrape_time
----------------------+--------------+--------------------+--------------------+----------------+-------------------------------
my_queue | 16 | 2563 | 2565 | 35 | 2023-10-28 20:25:07.016413-05
my_partitioned_queue | 1 | 11 | 11 | 1 | 2023-10-28 20:25:07.016413-05
@@ -642,19 +642,19 @@ select * from pgmq.metrics_all();
The complete representation of a message in a queue.
-| Attribute Name | Type | Description |
-| :------------- | :----------------------- | :--------------------------------------------------------------------- |
-| msg_id | bigint | Unique ID of the message |
-| read_ct | bigint | Number of times the message has been read. Increments on read(). |
-| enqueued_at | timestamp with time zone | time that the message was inserted into the queue |
-| vt | timestamp with time zone | Timestamp when the message will become available for consumers to read |
-| message | jsonb | The message payload |
+| Attribute Name | Type | Description |
+| :------------- | :------------------------- | :--------------------------------------------------------------------- |
+| `msg_id` | `bigint` | Unique ID of the message |
+| `read_ct` | `bigint` | Number of times the message has been read. Increments on read(). |
+| `enqueued_at` | `timestamp with time zone` | time that the message was inserted into the queue |
+| `vt` | `timestamp with time zone` | Timestamp when the message will become available for consumers to read |
+| `message` | `jsonb` | The message payload |
Example:
{/* prettier-ignore */}
```sql
- msg_id | read_ct | enqueued_at | vt | message
+ msg_id | read_ct | enqueued_at | vt | message
--------+---------+-------------------------------+-------------------------------+--------------------
1 | 1 | 2023-10-28 19:06:19.941509-05 | 2023-10-28 19:06:27.419392-05 | {"hello": "world"}
```
diff --git a/apps/docs/content/guides/queues/quickstart.mdx b/apps/docs/content/guides/queues/quickstart.mdx
index dc810e96af1..065ef411fb1 100644
--- a/apps/docs/content/guides/queues/quickstart.mdx
+++ b/apps/docs/content/guides/queues/quickstart.mdx
@@ -16,7 +16,7 @@ A pull-based Queue is a Message storage and delivery system where consumers acti
### Message
-A Message in a Queue is a json object that is stored until a consumer explicitly processes and removes it, like a task waiting in a to-do list until someone checks and completes it.
+A Message in a Queue is a JSON object that is stored until a consumer explicitly processes and removes it, like a task waiting in a to-do list until someone checks and completes it.
### Queue types
@@ -153,9 +153,9 @@ Then enable the required roles permissions.
-### Enqueuing and dequeuing messages
+### Enqueueing and dequeueing messages
-Once your Queue has been created, you can begin enqueuing and dequeuing Messages.
+Once your Queue has been created, you can begin enqueueing and dequeueing Messages.
Here's a TypeScript example using the official Supabase client library:
diff --git a/apps/docs/content/guides/realtime/benchmarks.mdx b/apps/docs/content/guides/realtime/benchmarks.mdx
index 8c97310b349..a74a06438df 100644
--- a/apps/docs/content/guides/realtime/benchmarks.mdx
+++ b/apps/docs/content/guides/realtime/benchmarks.mdx
@@ -94,7 +94,7 @@ This workload demonstrates Realtime's capability to handle high-scale scenarios
- Establishes and maintains a WebSocket connection (30-120 minutes)
- Joins 2 broadcast channels
- Sends 1 message per minute to each joined channel
- - Each message is broadcasted to 100 other users
+ - Each message is broadcast to 100 other users

@@ -118,7 +118,7 @@ This workload demonstrates Realtime's capability to handle large amounts of new
- Establishes and maintains a WebSocket connection (2.5 minutes)
- Joins 2 broadcast channels
- Sends 1 message per minute to each joined channel
- - Each message is broadcasted to 100 other users
+ - Each message is broadcast to 100 other users

diff --git a/apps/docs/content/guides/realtime/concepts.mdx b/apps/docs/content/guides/realtime/concepts.mdx
index 64bf45568a3..d286534b0d7 100644
--- a/apps/docs/content/guides/realtime/concepts.mdx
+++ b/apps/docs/content/guides/realtime/concepts.mdx
@@ -53,7 +53,7 @@ const presenceTrackStatus = await roomOne.track({
})
```
-Each client maintains their own state, and this is then combined into a "shared state" for that Channel topic. It's commonly used for sharing statuses (eg: "online" or "inactive"). The neat thing about Presence is that if a client is suddenly disconnected (for example, they go offline), their state is automatically removed from the shared state. If you've ever tried to build an “I'm online” feature which handles unexpected disconnects, you'll appreciate how useful this is.
+Each client maintains their own state, and this is then combined into a "shared state" for that Channel topic. It's commonly used for sharing statuses (e.g. "online" or "inactive"). The neat thing about Presence is that if a client is suddenly disconnected (for example, they go offline), their state is automatically removed from the shared state. If you've ever tried to build an “I'm online” feature which handles unexpected disconnects, you'll appreciate how useful this is.
When a new client subscribes to a channel, it will immediately receive the channel's latest state in a single message because the state is held by the Realtime server.
diff --git a/apps/docs/content/guides/realtime/error_codes.mdx b/apps/docs/content/guides/realtime/error_codes.mdx
index e7b420fef65..a8181bdba98 100644
--- a/apps/docs/content/guides/realtime/error_codes.mdx
+++ b/apps/docs/content/guides/realtime/error_codes.mdx
@@ -4,36 +4,36 @@ subtitle: 'List of operational codes to help understand your deployment and usag
description: ''
---
-| Code | Description | Action |
-| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
-| RealtimeDisabledForConfiguration | The configuration provided to Realtime on connect will not be able to provide you any Postgres Changes | Verify your configuration on channel startup as you might not have your tables properly registered |
-| TenantNotFound | The tenant you are trying to connect to does not exist | Verify the tenant name you are trying to connect to exists in the realtime.tenants table |
-| ErrorConnectingToWebsocket | Error when trying to connect to the WebSocket server | Verify user information on connect |
-| ErrorAuthorizingWebsocket | Error when trying to authorize the WebSocket connection | Verify user information on connect |
-| TableHasSpacesInName | The table you are trying to listen to has spaces in its name which we are unable to support | Change the table name to not have spaces in it |
-| UnableToDeleteTenant | Error when trying to delete a tenant | Contact Support |
-| UnableToSetPolicies | Error when setting up Authorization Policies | Contact Support |
-| UnableCheckoutConnection | Error when trying to checkout a connection from the tenant pool | Contact Support |
-| UnableToSubscribeToPostgres | Error when trying to subscribe to Postgres changes | Contact Support |
-| ChannelRateLimitReached | The number of channels you can create has reached its limit | Contact support to increase your rate limits |
-| ConnectionRateLimitReached | The number of connected clients as reached its limit | Contact support to increase your rate limits |
-| ClientJoinRateLimitReached | The rate of joins per second from your clients as reached the channel limits | Contact support to increase your rate limits |
-| UnableToConnectToTenantDatabase | Realtime was not able to connect to the tenant's database | Contact support for further instructions |
-| RealtimeNodeDisconnected | Realtime is a distributed application and this means that one the system is unable to communicate with one of the distributed nodes | Contact support for further instructions |
-| MigrationsFailedToRun | Error when running the migrations against the Tenant database that are required by Realtime | Contact support for further instructions |
-| ErrorStartingPostgresCDCStream | Error when starting the Postgres CDC stream which is used for Postgres Changes | Contact support for further instructions |
-| UnknownDataProcessed | An unknown data type was processed by the Realtime system | Contact support for further instructions |
-| ErrorStartingPostgresCDC | Error when starting the Postgres CDC extension which is used for Postgres Changes | Contact support for further instructions |
-| ReplicationSlotBeingUsed | The replication slot is being used by another transaction | Contact support for further instructions |
-| PoolingReplicationPreparationError | Error when preparing the replication slot | Contact support for further instructions |
-| PoolingReplicationError | Error when pooling the replication slot | Contact support for further instructions |
-| SubscriptionDeletionFailed | Error when trying to delete a subscription for postgres changes | Contact support for further instructions |
-| UnableToDeletePhantomSubscriptions | Error when trying to delete subscriptions that are no longer being used | Contact support for further instructions |
-| UnableToCheckProcessesOnRemoteNode | Error when trying to check the processes on a remote node | Contact support for further instructions |
-| UnableToCreateCounter | Error when trying to create a counter to track rate limits for a tenant | Contact support for further instructions |
-| UnableToIncrementCounter | Error when trying to increment a counter to track rate limits for a tenant | Contact support for further instructions |
-| UnableToDecrementCounter | Error when trying to decrement a counter to track rate limits for a tenant | Contact support for further instructions |
-| UnableToUpdateCounter | Error when trying to update a counter to track rate limits for a tenant | Contact support for further instructions |
-| UnableToFindCounter | Error when trying to find a counter to track rate limits for a tenant | Contact support for further instructions |
-| UnhandledProcessMessage | Unhandled message received by a Realtime process | Contact support for further instructions |
-| UnknownError | An unknown error occurred | Contact support for further instructions |
+| Code | Description | Action |
+| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `RealtimeDisabledForConfiguration` | The configuration provided to Realtime on connect will not be able to provide you any Postgres Changes | Verify your configuration on channel startup as you might not have your tables properly registered |
+| `TenantNotFound` | The tenant you are trying to connect to does not exist | Verify the tenant name you are trying to connect to exists in the realtime.tenants table |
+| `ErrorConnectingToWebSocket` | Error when trying to connect to the WebSocket server | Verify user information on connect |
+| `ErrorAuthorizingWebSocket` | Error when trying to authorize the WebSocket connection | Verify user information on connect |
+| `TableHasSpacesInName` | The table you are trying to listen to has spaces in its name which we are unable to support | Change the table name to not have spaces in it |
+| `UnableToDeleteTenant` | Error when trying to delete a tenant | Contact Support |
+| `UnableToSetPolicies` | Error when setting up Authorization Policies | Contact Support |
+| `UnableCheckoutConnection` | Error when trying to checkout a connection from the tenant pool | Contact Support |
+| `UnableToSubscribeToPostgres` | Error when trying to subscribe to Postgres changes | Contact Support |
+| `ChannelRateLimitReached` | The number of channels you can create has reached its limit | Contact support to increase your rate limits |
+| `ConnectionRateLimitReached` | The number of connected clients as reached its limit | Contact support to increase your rate limits |
+| `ClientJoinRateLimitReached` | The rate of joins per second from your clients as reached the channel limits | Contact support to increase your rate limits |
+| `UnableToConnectToTenantDatabase` | Realtime was not able to connect to the tenant's database | Contact support for further instructions |
+| `RealtimeNodeDisconnected` | Realtime is a distributed application and this means that one the system is unable to communicate with one of the distributed nodes | Contact support for further instructions |
+| `MigrationsFailedToRun` | Error when running the migrations against the Tenant database that are required by Realtime | Contact support for further instructions |
+| `ErrorStartingPostgresCDCStream` | Error when starting the Postgres CDC stream which is used for Postgres Changes | Contact support for further instructions |
+| `UnknownDataProcessed` | An unknown data type was processed by the Realtime system | Contact support for further instructions |
+| `ErrorStartingPostgresCDC` | Error when starting the Postgres CDC extension which is used for Postgres Changes | Contact support for further instructions |
+| `ReplicationSlotBeingUsed` | The replication slot is being used by another transaction | Contact support for further instructions |
+| `PoolingReplicationPreparationError` | Error when preparing the replication slot | Contact support for further instructions |
+| `PoolingReplicationError` | Error when pooling the replication slot | Contact support for further instructions |
+| `SubscriptionDeletionFailed` | Error when trying to delete a subscription for Postgres changes | Contact support for further instructions |
+| `UnableToDeletePhantomSubscriptions` | Error when trying to delete subscriptions that are no longer being used | Contact support for further instructions |
+| `UnableToCheckProcessesOnRemoteNode` | Error when trying to check the processes on a remote node | Contact support for further instructions |
+| `UnableToCreateCounter` | Error when trying to create a counter to track rate limits for a tenant | Contact support for further instructions |
+| `UnableToIncrementCounter` | Error when trying to increment a counter to track rate limits for a tenant | Contact support for further instructions |
+| `UnableToDecrementCounter` | Error when trying to decrement a counter to track rate limits for a tenant | Contact support for further instructions |
+| `UnableToUpdateCounter` | Error when trying to update a counter to track rate limits for a tenant | Contact support for further instructions |
+| `UnableToFindCounter` | Error when trying to find a counter to track rate limits for a tenant | Contact support for further instructions |
+| `UnhandledProcessMessage` | Unhandled message received by a Realtime process | Contact support for further instructions |
+| `UnknownError` | An unknown error occurred | Contact support for further instructions |
diff --git a/apps/docs/content/guides/realtime/postgres-changes.mdx b/apps/docs/content/guides/realtime/postgres-changes.mdx
index 721d29c6d93..a179176e274 100644
--- a/apps/docs/content/guides/realtime/postgres-changes.mdx
+++ b/apps/docs/content/guides/realtime/postgres-changes.mdx
@@ -883,7 +883,7 @@ changes = supabase.channel('db-changes').on_postgres_changes(
Realtime offers filters so you can specify the data your client receives at a more granular level.
-### Equal to (eq)
+### Equal to (`eq`)
To listen to changes when a column's value in a table equals a client-specified value:
@@ -990,7 +990,7 @@ changes = supabase.channel('db-changes').on_postgres_changes(
This filter uses Postgres's `=` filter.
-### Not equal to (neq)
+### Not equal to (`neq`)
To listen to changes when a column's value in a table does not equal a client-specified value:
@@ -1098,7 +1098,7 @@ changes = supabase.channel('db-changes').on_postgres_changes(
This filter uses Postgres's `!=` filter.
-### Less than (lt)
+### Less than (`lt`)
To listen to changes when a column's value in a table is less than a client-specified value:
@@ -1205,7 +1205,7 @@ changes = supabase.channel('db-changes').on_postgres_changes(
This filter uses Postgres's `<` filter, so it works for non-numeric types. Make sure to check the expected behavior of the compared data's type.
-### Less than or equal to (lte)
+### Less than or equal to (`lte`)
To listen to changes when a column's value in a table is less than or equal to a client-specified value:
@@ -1312,7 +1312,7 @@ changes = supabase.channel('db-changes').on_postgres_changes(
This filter uses Postgres' `<=` filter, so it works for non-numeric types. Make sure to check the expected behavior of the compared data's type.
-### Greater than (gt)
+### Greater than (`gt`)
To listen to changes when a column's value in a table is greater than a client-specified value:
@@ -1419,7 +1419,7 @@ changes = supabase.channel('db-changes').on_postgres_changes(
This filter uses Postgres's `>` filter, so it works for non-numeric types. Make sure to check the expected behavior of the compared data's type.
-### Greater than or equal to (gte)
+### Greater than or equal to (`gte`)
To listen to changes when a column's value in a table is greater than or equal to a client-specified value:
diff --git a/apps/docs/content/guides/realtime/quotas.mdx b/apps/docs/content/guides/realtime/quotas.mdx
index 1fa2a95daba..7e11578e69c 100644
--- a/apps/docs/content/guides/realtime/quotas.mdx
+++ b/apps/docs/content/guides/realtime/quotas.mdx
@@ -33,7 +33,7 @@ Beyond the Free and Pro Plan you can customize your quotas by [contacting suppor
When you exceed a quota, errors will appear in the backend logs and client-side messages in the WebSocket connection.
- **Logs**: check the [Realtime logs](https://supabase.com/dashboard/project/_/database/realtime-logs) inside your project Dashboard.
-- **Websocket errors**: Use your browser's developer tools to find the WebSocket initiation request and view individual messages.
+- **WebSocket errors**: Use your browser's developer tools to find the WebSocket initiation request and view individual messages.
diff --git a/apps/docs/content/guides/resources/glossary.mdx b/apps/docs/content/guides/resources/glossary.mdx
index e36ad5ef02d..b12680e2bff 100644
--- a/apps/docs/content/guides/resources/glossary.mdx
+++ b/apps/docs/content/guides/resources/glossary.mdx
@@ -12,7 +12,7 @@ An access token is a short-lived (usually no more than 1 hour) token that author
## Authentication
-Authentication (often abbreviated authn.) is the process of verifying the identity of a user. Verification of the identity of a user can happen in multiple ways:
+Authentication (often abbreviated `authn.`) is the process of verifying the identity of a user. Verification of the identity of a user can happen in multiple ways:
1. Asking users for something they know. For example: password, passphrase.
2. Checking that users have access to something they own. For example: an email address, a phone number, a hardware key, recovery codes.
@@ -24,7 +24,7 @@ An authenticator app generates time-based one-time passwords (TOTPs). These pass
## Authorization
-Authorization (often abbreviated authz.) is the process of verifying if a certain identity is allowed to access resources. Authorization often occurs by verifying an access token.
+Authorization (often abbreviated `authz.`) is the process of verifying if a certain identity is allowed to access resources. Authorization often occurs by verifying an access token.
## Identity provider
@@ -102,7 +102,7 @@ Row level security policies are special objects within the Postgres database tha
## SAML
-SAML stands for Security Assertion Markup Language and is a protocol that enables single-sign on for enterprises. SAML was invented in the early 2000s and is based on XML technology. It is the de-facto standard for enabling single-sign on for enterprises, although the more recent OIDC (OpenID Connect) protocol is gaining popularity.
+SAML stands for Security Assertion Markup Language and is a protocol that enables single-sign on for enterprises. SAML was invented in the early 2000s and is based on XML technology. It is the de facto standard for enabling single-sign on for enterprises, although the more recent OIDC (OpenID Connect) protocol is gaining popularity.
## Session
diff --git a/apps/docs/content/guides/self-hosting/docker.mdx b/apps/docs/content/guides/self-hosting/docker.mdx
index bee13a5c954..02fdc8487e9 100644
--- a/apps/docs/content/guides/self-hosting/docker.mdx
+++ b/apps/docs/content/guides/self-hosting/docker.mdx
@@ -16,7 +16,7 @@ Docker is the easiest way to get started with self-hosted Supabase. It should on
## Before you begin
-You need the following installed in your system: [Git](https://git-scm.com/downloads) and Docker ([Windows](https://docs.docker.com/desktop/install/windows-install/), [MacOS](https://docs.docker.com/desktop/install/mac-install/), or [Linux](https://docs.docker.com/desktop/install/linux-install/)).
+You need the following installed in your system: [Git](https://git-scm.com/downloads) and Docker ([Windows](https://docs.docker.com/desktop/install/windows-install/), [macOS](https://docs.docker.com/desktop/install/mac-install/), or [Linux](https://docs.docker.com/desktop/install/linux-install/)).
## Installing and running Supabase
@@ -72,7 +72,7 @@ docker compose up -d
-
+
If you are using rootless docker, edit `.env` and set `DOCKER_SOCKET_LOCATION` to your docker socket location. For example: `/run/user/1000/docker.sock`. Otherwise, you will see an error like `container supabase-vector exited (0)`.
@@ -183,7 +183,7 @@ Update the `./docker/.env` file with your own secrets. In particular, these are
- `JWT_SECRET`: used by PostgREST and GoTrue, among others.
- `SITE_URL`: the base URL of your site.
- `SMTP_*`: mail server credentials. You can use any SMTP server.
-- `POOLER_TENANT_ID`: the tenant-id that will be used by supavisor pooler for your connection string
+- `POOLER_TENANT_ID`: the tenant-id that will be used by Supavisor pooler for your connection string
You will need to [restart](#restarting-all-services) the services for the changes to take effect.
@@ -251,7 +251,7 @@ Some suggested systems include:
- [Key Vault](https://docs.microsoft.com/en-us/azure/key-vault/general/overview) by Azure (Microsoft)
- [Secrets Manager](https://aws.amazon.com/secrets-manager/) by AWS
- [Secrets Manager](https://cloud.google.com/secret-manager) by GCP
-- [Vault](https://www.hashicorp.com/products/vault) by Hashicorp
+- [Vault](https://www.hashicorp.com/products/vault) by HashiCorp
## Advanced
@@ -275,9 +275,9 @@ If the tool doesn't exist, we build and open source it ourselves.
- [Kong](https://github.com/Kong/kong) is a cloud-native API gateway.
- [GoTrue](https://github.com/supabase/gotrue) is an JWT based API for managing users and issuing JWT tokens.
- [PostgREST](http://postgrest.org/) is a web server that turns your PostgreSQL database directly into a RESTful API
-- [Realtime](https://github.com/supabase/realtime) is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using websockets. Realtime polls Postgres' built-in replication functionality for database changes, converts changes to JSON, then broadcasts the JSON over websockets to authorized clients.
+- [Realtime](https://github.com/supabase/realtime) is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using WebSockets. Realtime polls Postgres' built-in replication functionality for database changes, converts changes to JSON, then broadcasts the JSON over WebSockets to authorized clients.
- [Storage](https://github.com/supabase/storage-api) provides a RESTful interface for managing Files stored in S3, using Postgres to manage permissions.
-- [postgres-meta](https://github.com/supabase/postgres-meta) is a RESTful API for managing your Postgres, allowing you to fetch tables, add roles, and run queries, etc.
+- [`postgres-meta`](https://github.com/supabase/postgres-meta) is a RESTful API for managing your Postgres, allowing you to fetch tables, add roles, and run queries, etc.
- [PostgreSQL](https://www.postgresql.org/) is an object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
- [Supavisor](https://github.com/supabase/supavisor) is a scalable connection pooler for Postgres, allowing for efficient management of database connections.
diff --git a/apps/docs/content/guides/storage/buckets/fundamentals.mdx b/apps/docs/content/guides/storage/buckets/fundamentals.mdx
index ccc5785e512..72e27f0339f 100644
--- a/apps/docs/content/guides/storage/buckets/fundamentals.mdx
+++ b/apps/docs/content/guides/storage/buckets/fundamentals.mdx
@@ -18,7 +18,7 @@ When a bucket is set to **Private** all operations are subject to access control
The only ways to download assets within a private bucket is to:
- Use the [download method](/docs/reference/javascript/storage-from-download) by providing a authorization header containing your user's JWT. The RLS policy you create on the `storage.objects` table will use this user to determine if they have access.
-- Create a signed URL with the [createSignedUrl method](/docs/reference/javascript/storage-from-createsignedurl) that can be accessed for a limited time.
+- Create a signed URL with the [`createSignedUrl` method](/docs/reference/javascript/storage-from-createsignedurl) that can be accessed for a limited time.
#### Example use cases:
diff --git a/apps/docs/content/guides/storage/cdn/smart-cdn.mdx b/apps/docs/content/guides/storage/cdn/smart-cdn.mdx
index dffa1f278af..c3dedbb7d31 100644
--- a/apps/docs/content/guides/storage/cdn/smart-cdn.mdx
+++ b/apps/docs/content/guides/storage/cdn/smart-cdn.mdx
@@ -17,7 +17,7 @@ Smart CDN caching is automatically enabled for [Pro Plan and above](https://supa
## Cache duration
-When Smart CDN is enabled, the asset is cached on the CDN for as long as possible. You can still control how long assets are stored in the browser using the [cacheControl](/docs/reference/javascript/storage-from-upload) option when uploading a file. Smart CDN caching works with all types of storage operations including signed URLs.
+When Smart CDN is enabled, the asset is cached on the CDN for as long as possible. You can still control how long assets are stored in the browser using the [`cacheControl`](/docs/reference/javascript/storage-from-upload) option when uploading a file. Smart CDN caching works with all types of storage operations including signed URLs.
When a file is updated or deleted, the CDN cache is automatically invalidated to reflect the change (including transformed images). It can take **up to 60 seconds** for the CDN cache to be invalidated as the asset metadata has to propagate across all the data-centers around the globe.
diff --git a/apps/docs/content/guides/storage/debugging/error-codes.mdx b/apps/docs/content/guides/storage/debugging/error-codes.mdx
index cce0e9a6878..2ef431149d6 100644
--- a/apps/docs/content/guides/storage/debugging/error-codes.mdx
+++ b/apps/docs/content/guides/storage/debugging/error-codes.mdx
@@ -25,40 +25,40 @@ The error codes are returned in the following format:
Here is the full list of error codes and their descriptions:
-| ErrorCode | Description | StatusCode | Resolution |
-| ------------------------- | --------------------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| NoSuchBucket | The specified bucket does not exist. | 404 | Verify the bucket name and ensure it exists in the system, if it exists you don't have permissions to access it. |
-| NoSuchKey | The specified key does not exist. | 404 | Check the key name and ensure it exists in the specified bucket, if it exists you don't have permissions to access it. |
-| NoSuchUpload | The specified upload does not exist. | 404 | The uploadID provided might not exists or the Upload was previously aborted |
-| InvalidJWT | The provided JWT (JSON Web Token) is invalid. | 401 | The JWT provided might be expired or malformed, provide a valid JWT |
-| InvalidRequest | The request is not properly formed. | 400 | Review the request parameters and structure, ensure they meet the API's requirements, the error message will provide more details |
-| TenantNotFound | The specified tenant does not exist. | 404 | The Storage service had issues while provisioning, please [Contact Support](https://supabase.com/dashboard/support/new) |
-| EntityTooLarge | The entity being uploaded is too large. | 413 | Verify the max-file-limit is equal or higher to the resource you are trying to upload, you can change this value on the [Project Setting](https://supabase.com/dashboard/project/_/settings/storage) |
-| InternalError | An internal server error occurred. | 500 | Investigate server logs to identify the cause of the internal error. If you think it's a Storage error please [Contact Support](https://supabase.com/dashboard/support/new) |
-| ResourceAlreadyExists | The specified resource already exists. | 409 | Use a different name or identifier for the resource to avoid conflicts. Use `x-upsert:true` header to overwrite the resource. |
-| InvalidBucketName | The specified bucket name is invalid. | 400 | Ensure the bucket name follows the naming conventions and does not contain invalid characters. |
-| InvalidKey | The specified key is invalid. | 400 | Verify the key name and ensure it follows the naming conventions. |
-| InvalidRange | The specified range is not valid. | 416 | Make sure that range provided is within the file size boundary and follow the [HTTP Range spec](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range) |
-| InvalidMimeType | The specified MIME type is not valid. | 400 | Provide a valid MIME type, ensure using the standard MIME type format |
-| InvalidUploadId | The specified upload ID is invalid. | 400 | The upload ID provided is invalid or missing. Make sure to provide a active uploadID |
-| KeyAlreadyExists | The specified key already exists. | 409 | Use a different key name to avoid conflicts with existing keys. Use `x-upsert:true` header to overwrite the resource. |
-| BucketAlreadyExists | The specified bucket already exists. | 409 | Choose a unique name for the bucket that does not conflict with existing buckets. |
-| DatabaseTimeout | Timeout occurred while accessing the database. | 504 | Investigate database performance and increase the default pool size. If this error still occurs please upgrade your instance |
-| InvalidSignature | The signature provided does not match the calculated signature. | 403 | Check that you are providing the correct signature format, for more information refer to [SignatureV4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) |
-| SignatureDoesNotMatch | The request signature does not match the calculated signature. | 403 | Check your credentials, access key id / access secret key / region that are all correct, refer to [S3 Authentication](/docs/guides/storage/s3/authentication). |
-| AccessDenied | Access to the specified resource is denied. | 403 | Check that you have the correct RLS policy to allow access to this resource |
-| ResourceLocked | The specified resource is locked. | 423 | This resource cannot be altered while there is a lock. Wait and try the request again |
-| DatabaseError | An error occurred while accessing the database. | 500 | Investigate database logs and system configuration to identify and address the database error. |
-| MissingContentLength | The Content-Length header is missing. | 411 | Ensure the Content-Length header is included in the request with the correct value. |
-| MissingParameter | A required parameter is missing in the request. | 400 | Provide all required parameters in the request to fulfill the API's requirements. The message field will contain more details |
-| InvalidUploadSignature | The provided upload signature is invalid. | 403 | The MultiPartUpload record was altered while the upload was ongoing, the signature do not match. Do not alter the upload record |
-| LockTimeout | Timeout occurred while waiting for a lock. | 423 | The lock couldn't be acquired within the specified timeout. Wait and try the request again |
-| S3Error | An error occurred related to Amazon S3. | - | Refer to Amazon S3 documentation or [Contact Support](https://supabase.com/dashboard/support/new) for assistance with resolving the S3 error. |
-| S3InvalidAccessKeyId | The provided AWS access key ID is invalid. | 403 | Verify the AWS access key ID provided and ensure it is correct and active. |
-| S3MaximumCredentialsLimit | The maximum number of credentials has been reached. | 400 | The maximum limit of credentials is reached. |
-| InvalidChecksum | The checksum of the entity does not match. | 400 | Recalculate the checksum of the entity and ensure it matches the one provided in the request. |
-| MissingPart | A part of the entity is missing. | 400 | Ensure all parts of the entity are included in the request before completing the operation. |
-| SlowDown | The request rate is too high and has been throttled. | 503 | Reduce the request rate or implement exponential backoff and retry mechanisms to handle throttling. |
+| `ErrorCode` | Description | `StatusCode` | Resolution |
+| --------------------------- | --------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `NoSuchBucket` | The specified bucket does not exist. | 404 | Verify the bucket name and ensure it exists in the system, if it exists you don't have permissions to access it. |
+| `NoSuchKey` | The specified key does not exist. | 404 | Check the key name and ensure it exists in the specified bucket, if it exists you don't have permissions to access it. |
+| `NoSuchUpload` | The specified upload does not exist. | 404 | The upload ID provided might not exists or the Upload was previously aborted |
+| `InvalidJWT` | The provided JWT (JSON Web Token) is invalid. | 401 | The JWT provided might be expired or malformed, provide a valid JWT |
+| `InvalidRequest` | The request is not properly formed. | 400 | Review the request parameters and structure, ensure they meet the API's requirements, the error message will provide more details |
+| `TenantNotFound` | The specified tenant does not exist. | 404 | The Storage service had issues while provisioning, please [Contact Support](https://supabase.com/dashboard/support/new) |
+| `EntityTooLarge` | The entity being uploaded is too large. | 413 | Verify the max-file-limit is equal or higher to the resource you are trying to upload, you can change this value on the [Project Setting](https://supabase.com/dashboard/project/_/settings/storage) |
+| `InternalError` | An internal server error occurred. | 500 | Investigate server logs to identify the cause of the internal error. If you think it's a Storage error please [Contact Support](https://supabase.com/dashboard/support/new) |
+| `ResourceAlreadyExists` | The specified resource already exists. | 409 | Use a different name or identifier for the resource to avoid conflicts. Use `x-upsert:true` header to overwrite the resource. |
+| `InvalidBucketName` | The specified bucket name is invalid. | 400 | Ensure the bucket name follows the naming conventions and does not contain invalid characters. |
+| `InvalidKey` | The specified key is invalid. | 400 | Verify the key name and ensure it follows the naming conventions. |
+| `InvalidRange` | The specified range is not valid. | 416 | Make sure that range provided is within the file size boundary and follow the [HTTP Range spec](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range) |
+| `InvalidMimeType` | The specified MIME type is not valid. | 400 | Provide a valid MIME type, ensure using the standard MIME type format |
+| `InvalidUploadId` | The specified upload ID is invalid. | 400 | The upload ID provided is invalid or missing. Make sure to provide a active upload ID |
+| `KeyAlreadyExists` | The specified key already exists. | 409 | Use a different key name to avoid conflicts with existing keys. Use `x-upsert:true` header to overwrite the resource. |
+| `BucketAlreadyExists` | The specified bucket already exists. | 409 | Choose a unique name for the bucket that does not conflict with existing buckets. |
+| `DatabaseTimeout` | Timeout occurred while accessing the database. | 504 | Investigate database performance and increase the default pool size. If this error still occurs please upgrade your instance |
+| `InvalidSignature` | The signature provided does not match the calculated signature. | 403 | Check that you are providing the correct signature format, for more information refer to [SignatureV4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) |
+| `SignatureDoesNotMatch` | The request signature does not match the calculated signature. | 403 | Check your credentials, access key id / access secret key / region that are all correct, refer to [S3 Authentication](/docs/guides/storage/s3/authentication). |
+| `AccessDenied` | Access to the specified resource is denied. | 403 | Check that you have the correct RLS policy to allow access to this resource |
+| `ResourceLocked` | The specified resource is locked. | 423 | This resource cannot be altered while there is a lock. Wait and try the request again |
+| `DatabaseError` | An error occurred while accessing the database. | 500 | Investigate database logs and system configuration to identify and address the database error. |
+| `MissingContentLength` | The Content-Length header is missing. | 411 | Ensure the Content-Length header is included in the request with the correct value. |
+| `MissingParameter` | A required parameter is missing in the request. | 400 | Provide all required parameters in the request to fulfill the API's requirements. The message field will contain more details |
+| `InvalidUploadSignature` | The provided upload signature is invalid. | 403 | The `MultiPartUpload` record was altered while the upload was ongoing, the signature do not match. Do not alter the upload record |
+| `LockTimeout` | Timeout occurred while waiting for a lock. | 423 | The lock couldn't be acquired within the specified timeout. Wait and try the request again |
+| `S3Error` | An error occurred related to Amazon S3. | - | Refer to Amazon S3 documentation or [Contact Support](https://supabase.com/dashboard/support/new) for assistance with resolving the S3 error. |
+| `S3InvalidAccessKeyId` | The provided AWS access key ID is invalid. | 403 | Verify the AWS access key ID provided and ensure it is correct and active. |
+| `S3MaximumCredentialsLimit` | The maximum number of credentials has been reached. | 400 | The maximum limit of credentials is reached. |
+| `InvalidChecksum` | The checksum of the entity does not match. | 400 | Recalculate the checksum of the entity and ensure it matches the one provided in the request. |
+| `MissingPart` | A part of the entity is missing. | 400 | Ensure all parts of the entity are included in the request before completing the operation. |
+| `SlowDown` | The request rate is too high and has been throttled. | 503 | Reduce the request rate or implement exponential backoff and retry mechanisms to handle throttling. |
## Legacy error codes
@@ -74,7 +74,7 @@ As we are transitioning to a new error code system, you might still see the foll
Here's a list of the most common error codes and their potential resolutions:
-### 404 not_found
+### 404 `not_found`
Indicates that the resource is not found or you don't have the correct permission to access it
**Resolution:**
@@ -83,14 +83,14 @@ Indicates that the resource is not found or you don't have the correct permissio
- Ensure you include the user `Authorization` header
- Verify the object exists
-### 409 already_exists
+### 409 `already_exists`
Indicates that the resource already exists.
**Resolution:**
- Use the `upsert` functionality in order to overwrite the file. Find out more [here](/docs/guides/storage/uploads/standard-uploads#overwriting-files).
-### 403 unauthorized
+### 403 `unauthorized`
You don't have permission to action this request
**Resolution:**
@@ -98,7 +98,7 @@ You don't have permission to action this request
- Add RLS policy to grant permission. See our [Access Control docs](/docs/guides/storage/security/access-control) for more information.
- Ensure you include the user `Authorization` header
-### 429 too many requests
+### 429 `too many requests`
This problem typically arises when a large number of clients are concurrently interacting with the Storage service, and the pooler has reached its `max_clients` limit.
@@ -107,7 +107,7 @@ This problem typically arises when a large number of clients are concurrently in
- Increase the max_clients limits of the pooler.
- Upgrade to a bigger project compute instance [here](https://supabase.com/dashboard/project/_/settings/addons).
-### 544 database_timeout
+### 544 `database_timeout`
This problem arises when a high number of clients are concurrently using the Storage service, and Postgres doesn't have enough available connections to efficiently handle requests to Storage.
@@ -116,7 +116,7 @@ This problem arises when a high number of clients are concurrently using the Sto
- Increase the pool_size limits of the pooler.
- Upgrade to a bigger project compute instance [here](https://supabase.com/dashboard/project/_/settings/addons).
-### 500 internal_server_error
+### 500 `internal_server_error`
This issue occurs where there is a unhandled error.
**Resolution:**
diff --git a/apps/docs/content/guides/storage/s3/compatibility.mdx b/apps/docs/content/guides/storage/s3/compatibility.mdx
index b6770b12da8..e9b17cfd4c2 100644
--- a/apps/docs/content/guides/storage/s3/compatibility.mdx
+++ b/apps/docs/content/guides/storage/s3/compatibility.mdx
@@ -22,6 +22,8 @@ The most commonly used endpoints are implemented, and more will be added. Implem
### Bucket operations
+{/* supa-mdx-lint-disable Rule003Spelling */}
+
| API Name | Feature |
| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ✅ [ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html) | |
@@ -36,8 +38,12 @@ The most commonly used endpoints are implemented, and more will be added. Implem
| ❌ [PutBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html) | ❌ Checksums:
❌ x-amz-sdk-checksum-algorithm
❌ x-amz-checksum-algorithm
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner |
| ❌ [PutBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html) | ❌ Checksums:
❌ x-amz-sdk-checksum-algorithm
❌ x-amz-checksum-algorithm
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner |
+{/* supa-mdx-lint-enable Rule003Spelling */}
+
### Object operations
+{/* supa-mdx-lint-disable Rule003Spelling */}
+
| API Name | Feature |
| -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ✅ [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) | ✅ Conditional Operations:
✅ If-Match
✅ If-Modified-Since
✅ If-None-Match
✅ If-Unmodified-Since
✅ Range:
✅ Range (has no effect in HeadObject)
✅ partNumber
❌ SSE-C:
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner |
@@ -55,3 +61,5 @@ The most commonly used endpoints are implemented, and more will be added. Implem
| ✅ [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html) | ✅ System Metadata:
❌ Content-MD5
❌ SSE-C:
❌ x-amz-server-side-encryption
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner |
| ✅ [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) | ❌ Conditional Operations:
❌ x-amz-copy-source
❌ x-amz-copy-source-if-match
❌ x-amz-copy-source-if-modified-since
❌ x-amz-copy-source-if-none-match
❌ x-amz-copy-source-if-unmodified-since
✅ Range:
✅ x-amz-copy-source-range
❌ SSE-C:
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ x-amz-copy-source-server-side-encryption-customer-algorithm
❌ x-amz-copy-source-server-side-encryption-customer-key
❌ x-amz-copy-source-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner
❌ x-amz-source-expected-bucket-owner |
| ✅ [ListParts](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html) | Query Parameters:
✅ max-parts
✅ part-number-marker
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner |
+
+{/* supa-mdx-lint-enable Rule003Spelling */}
diff --git a/apps/docs/content/guides/storage/serving/downloads.mdx b/apps/docs/content/guides/storage/serving/downloads.mdx
index c0603bbd2eb..88055fd63f7 100644
--- a/apps/docs/content/guides/storage/serving/downloads.mdx
+++ b/apps/docs/content/guides/storage/serving/downloads.mdx
@@ -17,7 +17,7 @@ You can access them by using this conventional URL:
https://[project_id].supabase.co/storage/v1/object/public/[bucket]/[asset-name]
```
-You can also use the Supabase SDK `getPublicUrl` to generate this url for you
+You can also use the Supabase SDK `getPublicUrl` to generate this URL for you
```js
const { data } = supabase.storage.from('bucket').getPublicUrl('filePath.jpg')
@@ -27,18 +27,18 @@ console.log(data.publicUrl)
### Downloading
-If you want the browser to start an automatic download of the asset instead of trying serving it, you can add the `?download` querystring parameter.
+If you want the browser to start an automatic download of the asset instead of trying serving it, you can add the `?download` query string parameter.
By default it will use the asset name to save the file on disk. You can optionally pass a custom name to the `download` parameter as following: `?download=customname.jpg`
## Private buckets
-Assets stored in a non-public bucket are considered private and are not accessible via a public url like the public buckets.
+Assets stored in a non-public bucket are considered private and are not accessible via a public URL like the public buckets.
You can access them only by:
- Signing a time limited URL on the Server, for example with Edge Functions.
-- with a GET request the url `https://[project_id].supabase.co/storage/v1/object/authenticated/[bucket]/[asset-name]` and the user Authorization header
+- with a GET request the URL `https://[project_id].supabase.co/storage/v1/object/authenticated/[bucket]/[asset-name]` and the user Authorization header
### Signing URLs
diff --git a/apps/docs/content/guides/storage/serving/image-transformations.mdx b/apps/docs/content/guides/storage/serving/image-transformations.mdx
index b09ef5639ad..de4cac9835d 100644
--- a/apps/docs/content/guides/storage/serving/image-transformations.mdx
+++ b/apps/docs/content/guides/storage/serving/image-transformations.mdx
@@ -245,7 +245,7 @@ response = supabase.storage.from_('bucket').download(
## Automatic image optimization (WebP)
-When using the image transformation API, Storage will automatically find the best format supported by the client and return that to the client, without any code change. For instance, if you use Chrome when viewing a jpeg image and using transformation options, you'll see that images are automatically optimized as `webp` images.
+When using the image transformation API, Storage will automatically find the best format supported by the client and return that to the client, without any code change. For instance, if you use Chrome when viewing a JPEG image and using transformation options, you'll see that images are automatically optimized as `webp` images.
As a result, this will lower the bandwidth that you send to your users and your application will load much faster.
@@ -599,9 +599,9 @@ response = supabase.storage.from_('bucket').download(
## Self hosting
-Our solution to image resizing and optimization can be self-hosted as with any other Supabase product. Under the hood we use [Imgproxy](https://imgproxy.net/)
+Our solution to image resizing and optimization can be self-hosted as with any other Supabase product. Under the hood we use [imgproxy](https://imgproxy.net/)
-#### Imgproxy configuration:
+#### imgproxy configuration:
Simply deploy an imgproxy container with the following configuration:
@@ -617,7 +617,7 @@ Note: make sure that this service can only be reachable within an internal netwo
#### Storage API configuration:
-Once [Imgproxy](https://imgproxy.net/) is deployed we need to configure a couple of environment variables in your self-hosted [storage-api](https://github.com/supabase/storage-api) service as follows:
+Once [imgproxy](https://imgproxy.net/) is deployed we need to configure a couple of environment variables in your self-hosted [`storage-api`](https://github.com/supabase/storage-api) service as follows:
```shell
ENABLE_IMAGE_TRANSFORMATION=true
diff --git a/apps/docs/content/guides/storage/uploads/resumable-uploads.mdx b/apps/docs/content/guides/storage/uploads/resumable-uploads.mdx
index 635ab2207d0..d12d1cc6924 100644
--- a/apps/docs/content/guides/storage/uploads/resumable-uploads.mdx
+++ b/apps/docs/content/guides/storage/uploads/resumable-uploads.mdx
@@ -12,7 +12,7 @@ The resumable upload method is recommended when:
- Network stability is a concern
- You want to have progress events for your uploads
-Supabase Storage implements the [TUS protocol](https://tus.io/) to enable resumable uploads. TUS stands for The Upload Server and is an open protocol for supporting resumable uploads. The protocol allows the upload process to be resumed from where it left off in case of interruptions. This method can be implemented using the [tus-js-client](https://github.com/tus/tus-js-client) library, or other client-side libraries like [Uppy-js](https://uppy.io/docs/tus/) that support the TUS protocol.
+Supabase Storage implements the [TUS protocol](https://tus.io/) to enable resumable uploads. TUS stands for The Upload Server and is an open protocol for supporting resumable uploads. The protocol allows the upload process to be resumed from where it left off in case of interruptions. This method can be implemented using the [`tus-js-client`](https://github.com/tus/tus-js-client) library, or other client-side libraries like [Uppy](https://uppy.io/docs/tus/) that support the TUS protocol.
-
+
Kotlin supports resumable uploads natively for all targets:
@@ -268,11 +268,11 @@ When two or more clients upload a file to the same path using different upload U
If you provide the `x-upsert` header the last client to complete the upload will succeed instead.
-### UppyJS example
+### Uppy example
-You can check a [full example using UppyJS](https://github.com/supabase/supabase/tree/master/examples/storage/resumable-upload-uppy).
+You can check a [full example using Uppy](https://github.com/supabase/supabase/tree/master/examples/storage/resumable-upload-uppy).
-UppyJS has integrations with different frameworks:
+Uppy has integrations with different frameworks:
- [React](https://uppy.io/docs/react/)
- [Svelte](https://uppy.io/docs/svelte/)
diff --git a/apps/docs/content/guides/telemetry/advanced-log-filtering.mdx b/apps/docs/content/guides/telemetry/advanced-log-filtering.mdx
index e3e81cad023..84890cc2d4b 100644
--- a/apps/docs/content/guides/telemetry/advanced-log-filtering.mdx
+++ b/apps/docs/content/guides/telemetry/advanced-log-filtering.mdx
@@ -15,7 +15,7 @@ The log tables are queried with a subset of BigQuery SQL syntax. They all have t
| event_message | the log's message |
| metadata | information about the event |
-The `metadata` column is an array of JSON objects that stores important details about each recorded event. For example, in the postgres table, the `metadata.parsed.error_severity` field indicates the error level of an event. To work with its values, you need to `unnest` them using a `cross join`.
+The `metadata` column is an array of JSON objects that stores important details about each recorded event. For example, in the Postgres table, the `metadata.parsed.error_severity` field indicates the error level of an event. To work with its values, you need to `unnest` them using a `cross join`.
This approach is commonly used with JSON and array columns, so it might look a bit unfamiliar if you're not used to working with these data types.
diff --git a/apps/docs/content/guides/telemetry/log-drains.mdx b/apps/docs/content/guides/telemetry/log-drains.mdx
index 0cd85cca823..248a9f1001f 100644
--- a/apps/docs/content/guides/telemetry/log-drains.mdx
+++ b/apps/docs/content/guides/telemetry/log-drains.mdx
@@ -15,7 +15,7 @@ The following table lists the supported destinations and the required setup conf
| Destination | Transport Method | Configuration |
| --------------------- | ---------------- | ------------------------------------------------- |
| Generic HTTP endpoint | HTTP | URL
HTTP Version
Gzip
Headers |
-| Datadog | HTTP | API Key
Region |
+| DataDog | HTTP | API Key
Region |
HTTP requests are batched with a max of 250 logs or 1 second intervals, whichever happens first. Logs are compressed via Gzip if the destination supports it.
@@ -68,7 +68,7 @@ And then deploy it with:
supabase functions deploy hello-world --project-ref [PROJECT REF]
```
-
+
This will create an infinite loop, as we are generating an additional log event that will eventually trigger a new request to this edge function. However, due to the batching nature of how Log Drain events are dispatched, the rate of edge function triggers will not increase greatly and will have an upper bound.
@@ -132,13 +132,13 @@ Deno.serve(async (req) => {
-## Datadog logs
+## DataDog logs
-Logs sent to Datadog have the name of the log source set on the `service` field of the event and the source set to `Supabase`. Logs are gzipped before they are sent to Datadog.
+Logs sent to DataDog have the name of the log source set on the `service` field of the event and the source set to `Supabase`. Logs are gzipped before they are sent to DataDog.
The payload message is a JSON string of the raw log event, prefixed with the event timestamp.
-To setup Datadog log drain, generate a Datadog API key [here](https://app.datadoghq.com/organization-settings/api-keys) and the location of your Datadog site.
+To setup DataDog log drain, generate a DataDog API key [here](https://app.datadoghq.com/organization-settings/api-keys) and the location of your DataDog site.
- 1. Generate API Key in [Datadog dashboard](https://app.datadoghq.com/organization-settings/api-keys)
+ 1. Generate API Key in [DataDog dashboard](https://app.datadoghq.com/organization-settings/api-keys)
2. Create log drain in [Supabase dashboard](https://supabase.com/dashboard/project/_/settings/log-drains)
- 3. Watch for events in the [Datadog Logs page](https://app.datadoghq.com/logs)
+ 3. Watch for events in the [DataDog Logs page](https://app.datadoghq.com/logs)
diff --git a/apps/docs/content/guides/telemetry/metrics.mdx b/apps/docs/content/guides/telemetry/metrics.mdx
index c1d3ea91075..f5824c33106 100644
--- a/apps/docs/content/guides/telemetry/metrics.mdx
+++ b/apps/docs/content/guides/telemetry/metrics.mdx
@@ -73,7 +73,7 @@ Supabase Grafana only tracks metrics while it's active. For monitoring historica
- Download the code from the [Github repo](https://github.com/supabase/supabase-grafana/tree/main)
+ Download the code from the [GitHub repo](https://github.com/supabase/supabase-grafana/tree/main)
@@ -139,8 +139,7 @@ Supabase Grafana only tracks metrics while it's active. For monitoring historica
For security, consider using a [password generator](https://bitwarden.com/password-generator/)
-
-
+
```text .env
diff --git a/apps/docs/content/guides/telemetry/sentry-monitoring.mdx b/apps/docs/content/guides/telemetry/sentry-monitoring.mdx
index 567955f92c1..e57dd6450d1 100644
--- a/apps/docs/content/guides/telemetry/sentry-monitoring.mdx
+++ b/apps/docs/content/guides/telemetry/sentry-monitoring.mdx
@@ -103,7 +103,7 @@ All available configuration options are available in our [`supabase-community/se
## Deduplicating spans
-If you're already monitoring HTTP errors in Sentry, for example with the Http, Fetch, or Undici integrations, you will get duplicate spans for Supabase calls. You can deduplicate the spans by skipping them in your other integration:
+If you're already monitoring HTTP errors in Sentry, for example with the HTTP, Fetch, or Undici integrations, you will get duplicate spans for Supabase calls. You can deduplicate the spans by skipping them in your other integration:
```ts
import * as Sentry from '@sentry/browser'
@@ -274,4 +274,4 @@ export async function register() {
-Afterward build your application (`npm run build`) and start it locally (`npm run start`). You will now see the transactions being logged in the terminal when making supabase-js requests.
+Afterwards, build your application (`npm run build`) and start it locally (`npm run start`). You will now see the transactions being logged in the terminal when making supabase-js requests.
diff --git a/apps/docs/content/troubleshooting/monitor-supavisor-postgres-connections.mdx b/apps/docs/content/troubleshooting/monitor-supavisor-postgres-connections.mdx
index 787c3331675..8f9755efafd 100644
--- a/apps/docs/content/troubleshooting/monitor-supavisor-postgres-connections.mdx
+++ b/apps/docs/content/troubleshooting/monitor-supavisor-postgres-connections.mdx
@@ -55,18 +55,18 @@ JOIN pg_stat_activity
Interpreting the query:
-| Column | Description |
-| ---------------- | ------------------------------------------------- |
-| pid | connection id |
-| ssl | Indicates if SSL is in use |
-| datname | Name of the connected database (usually postgres) |
-| usename | Role of the connected user |
-| application_name | Name of the connecting application |
-| client_addr | IP address of the connecting server |
-| query | Last query executed by the connection |
-| query_start | Time when the last query was executed |
-| state | Querying state: active or idle |
-| backend_start | Timestamp of the connection's establishment |
+| Column | Description |
+| ------------------ | --------------------------------------------------- |
+| `pid` | connection id |
+| `ssl` | Indicates if SSL is in use |
+| `datname` | Name of the connected database (usually `postgres`) |
+| `usename` | Role of the connected user |
+| `application_name` | Name of the connecting application |
+| `client_addr` | IP address of the connecting server |
+| `query` | Last query executed by the connection |
+| `query_start` | Time when the last query was executed |
+| `state` | Querying state: active or idle |
+| `backend_start` | Timestamp of the connection's establishment |
- Note: If you are unfamiliar with the Supabase database roles, check this [reference](https://gist.github.com/TheOtherBrian1/d6e862a65e03049eb4f102f6ca809401)
diff --git a/apps/docs/features/command/Quickstarts.tsx b/apps/docs/features/command/Quickstarts.tsx
index 15cfa1812af..3b0f75cc264 100644
--- a/apps/docs/features/command/Quickstarts.tsx
+++ b/apps/docs/features/command/Quickstarts.tsx
@@ -16,7 +16,7 @@ const quickstarts = [
url: '/guides/getting-started/quickstarts/nextjs',
},
{
- label: 'Nuxt.js',
+ label: 'Nuxt',
url: '/guides/getting-started/quickstarts/nuxtjs',
},
{
diff --git a/apps/docs/package.json b/apps/docs/package.json
index 784b3103692..101da5bf1dc 100644
--- a/apps/docs/package.json
+++ b/apps/docs/package.json
@@ -112,7 +112,7 @@
},
"devDependencies": {
"@aws-sdk/client-secrets-manager": "^3.410.0",
- "@supabase/supa-mdx-lint": "^0.1.7-alpha",
+ "@supabase/supa-mdx-lint": "0.2.3-alpha",
"@types/estree": "1.0.5",
"@types/hast": "^2.3.4",
"@types/jsrsasign": "^10.5.12",
diff --git a/apps/docs/spec/supabase_kt_v1.yml b/apps/docs/spec/supabase_kt_v1.yml
index 0758a277578..b8e67c1b51d 100644
--- a/apps/docs/spec/supabase_kt_v1.yml
+++ b/apps/docs/spec/supabase_kt_v1.yml
@@ -33,7 +33,7 @@ functions:
*Note: OTP link verification such as sign ups are not supported on JVM. You may have to send a verification token rather than a url in your E-Mail. To send the token, rather than a redirect url, you have to change `{{ .ConfirmationURL }}` in your sign up email to `{{ .Token }}`*
- **On Android, IOS & MacOS**, it uses deeplinks. Refer to the guide below on how to setup deeplinks. Alternatively you could use Native Google Auth or a WebView for OAuth. Refer to our [demo](https://github.com/supabase-community/supabase-kt/tree/master/demos/android-login) to learn more.
+ **On Android, IOS & macOS**, it uses deeplinks. Refer to the guide below on how to setup deeplinks. Alternatively you could use Native Google Auth or a WebView for OAuth. Refer to our [demo](https://github.com/supabase-community/supabase-kt/tree/master/demos/android-login) to learn more.
**On JS**, it uses the website origin as the callback url. Session importing gets handled automatically.
**Windows, tvOS, watchOS & Linux** currently have no default implementation. Feel free to create a PR.
@@ -42,10 +42,10 @@ functions:
### Configure deeplink callbacks for Authentication
- Deeplinks are supported on Android, IOS and MacOS.
+ Deeplinks are supported on Android, IOS and macOS.
1. **Setup a deeplink for you app** \
On Android you may setup a [deeplink](https://developer.android.com/training/app-links/deep-linking) in your Android manifest. \
- On IOS & MacOS you may setup a [url scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app).
+ On IOS & macOS you may setup a [url scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app).
2. **Add your deeplink to the [redirect URLs](https://supabase.com/dashboard/project/_/auth/url-configuration)** \
**Pattern**: scheme://host
3. **Configure the GoTrue plugin**
@@ -61,7 +61,7 @@ functions:
```
4. **Call platform specific function on startup** \
On Android: `supabase.handleDeeplinks(intent)` \
- On IOS/MacOS: `supabase.handleDeeplinks(url)`
+ On IOS/macOS: `supabase.handleDeeplinks(url)`
Then you can just login using OAuth:
```kotlin
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 752647903cb..f35f178ef2b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -443,8 +443,8 @@ importers:
specifier: ^3.410.0
version: 3.468.0
'@supabase/supa-mdx-lint':
- specifier: ^0.1.7-alpha
- version: 0.1.7-alpha
+ specifier: 0.2.3-alpha
+ version: 0.2.3-alpha
'@types/estree':
specifier: 1.0.5
version: 1.0.5
@@ -5270,49 +5270,49 @@ packages:
'@supabase/storage-js@2.7.1':
resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==}
- '@supabase/supa-mdx-lint-darwin@0.1.7-alpha':
- resolution: {integrity: sha512-ggvl/+g7TRWZ0tBvnTUPART38N8qIo2UgkShGsgi5/BnRdVsw5CwQqqDZT7+enEZRiobbVrE+hUDCTWCManqFA==}
+ '@supabase/supa-mdx-lint-darwin@0.2.3-alpha':
+ resolution: {integrity: sha512-uHDRg+ZUdLBJ+gKto36gMez+Wn5x5HFbrFf6e0GFzpVwOkyz9n4i19WF5rXMXeT/oxIYSRPLTBicd2J2+dls2g==}
engines: {node: '>=10'}
os: [darwin]
- '@supabase/supa-mdx-lint-linux-arm64@0.1.7-alpha':
- resolution: {integrity: sha512-e5MGzRdiqjc3mr8JJ3+tbwdbbuQQ4L0m6VBUwy+XQKNNbdlO4b1eP73dQNK5ZU1I8kjE9nloUXYEeTgA+E81kg==}
+ '@supabase/supa-mdx-lint-linux-arm64@0.2.3-alpha':
+ resolution: {integrity: sha512-V5pfEB9hhRE5toa+BUbXjUABZhY4+CtKfQysnjfGKoyXB8/drz/sGYZTQ2BiKoV2IAOWiv/TZ3xU4gzN7f7S3g==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux, freebsd]
- '@supabase/supa-mdx-lint-linux-arm@0.1.7-alpha':
- resolution: {integrity: sha512-TxZrhNOAH3NswuA3kITTdiUWF7xUQRmmh6QAfUeYAUj/E0zgH0g31YKhgOgbn+s0L88g+nEHSlGmgWDMibdJ4w==}
+ '@supabase/supa-mdx-lint-linux-arm@0.2.3-alpha':
+ resolution: {integrity: sha512-hL+6/TWS1UvyGPPHXluI/5jUynX60lU/jupVVWhhxrCDwggiZZ1F7PkG7ifwd9j7S8IENjou/2cp4FuTFx7vnA==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux, freebsd]
- '@supabase/supa-mdx-lint-linux-i686@0.1.7-alpha':
- resolution: {integrity: sha512-C+n7dJ7F14/4+IkzJCmGogPuTtOd+CuYQmseLy+aJkDFDyNicKXjCU4nF7pwtAx5HTMlU8Pnwl6mXyuaqd8e9w==}
+ '@supabase/supa-mdx-lint-linux-i686@0.2.3-alpha':
+ resolution: {integrity: sha512-XvcQHsFqX2GaLPmNep7nDGzlz1AqY26+2RlRR/mYU2WspBLpDaHcA0lXEKQjW9z189Itlh3iDnUc5wIS7MthMg==}
engines: {node: '>=10'}
cpu: [x86, ia32]
os: [linux, freebsd]
- '@supabase/supa-mdx-lint-linux-x64@0.1.7-alpha':
- resolution: {integrity: sha512-Oj7y9y/HBNV1X3F8HvWHeQNKXQxogkgDmxEhaZIojeiHnWXDZ6h6WCgSIWL86URwyjPNGxR4pdoZYsSR4Q8n0Q==}
+ '@supabase/supa-mdx-lint-linux-x64@0.2.3-alpha':
+ resolution: {integrity: sha512-nT5XD9Gp9iS1x91c01Ut5hykVzpcdgE6BNWp3X1EPxBM1vPVyNd/hJIOJnAJbIsjJmYRGb2iRw4xEPH9gw2rAg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux, freebsd]
- '@supabase/supa-mdx-lint-win32-i686@0.1.7-alpha':
- resolution: {integrity: sha512-3t2/KngOEhWsvZu2B8QMS2WsC99uTEpnklu9y5AFq6ln7QhoNjPKnlx4iy2hxaIF/NfN0WJAXIJsBrSn9CfqEA==}
+ '@supabase/supa-mdx-lint-win32-i686@0.2.3-alpha':
+ resolution: {integrity: sha512-Atjt/AB1DXXLIzpDyaOQZ9AryeIE6or5T1gWl0XtmWO1JSet+kLLZ9AcF9TaS3cFbZ6fzuO9HqCfv1dyOXeTDg==}
engines: {node: '>=10'}
cpu: [x86, ia32]
os: [win32]
- '@supabase/supa-mdx-lint-win32-x64@0.1.7-alpha':
- resolution: {integrity: sha512-LAr/ZV1pDWXjfsicHdd/QahyGX31SN4RMk+3J/s9xWVzQorrwrJwuiWAAQ/osPF4yEtWVb6vriS42f/t+q8oZQ==}
+ '@supabase/supa-mdx-lint-win32-x64@0.2.3-alpha':
+ resolution: {integrity: sha512-7eBvG9GflQ28RIwuzCjbPUYnrF3IkxDYZ8uln6eSfY2GBQjCbuHDOTjlKdNTylHF0ZfUD7+UOnuymSlO9gdF1g==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@supabase/supa-mdx-lint@0.1.7-alpha':
- resolution: {integrity: sha512-RSlUumUJ1LifWa2+a+t0eGOWay9kkroi1JaMHV8HJf30a92o2U6TaP/tXiAQesgTblZNC+ty2/74Al0rmp/OdQ==}
+ '@supabase/supa-mdx-lint@0.2.3-alpha':
+ resolution: {integrity: sha512-8rYPMyNIJpQPhdIGNuAkho1OlqZNB7MnObToUzmpni75A64ot0ih0goWrksO3Ah/UywPA2ht9fkQjUO1Zf6P7Q==}
hasBin: true
'@supabase/supabase-js@2.47.14':
@@ -17383,36 +17383,36 @@ snapshots:
dependencies:
'@supabase/node-fetch': 2.6.15
- '@supabase/supa-mdx-lint-darwin@0.1.7-alpha':
+ '@supabase/supa-mdx-lint-darwin@0.2.3-alpha':
optional: true
- '@supabase/supa-mdx-lint-linux-arm64@0.1.7-alpha':
+ '@supabase/supa-mdx-lint-linux-arm64@0.2.3-alpha':
optional: true
- '@supabase/supa-mdx-lint-linux-arm@0.1.7-alpha':
+ '@supabase/supa-mdx-lint-linux-arm@0.2.3-alpha':
optional: true
- '@supabase/supa-mdx-lint-linux-i686@0.1.7-alpha':
+ '@supabase/supa-mdx-lint-linux-i686@0.2.3-alpha':
optional: true
- '@supabase/supa-mdx-lint-linux-x64@0.1.7-alpha':
+ '@supabase/supa-mdx-lint-linux-x64@0.2.3-alpha':
optional: true
- '@supabase/supa-mdx-lint-win32-i686@0.1.7-alpha':
+ '@supabase/supa-mdx-lint-win32-i686@0.2.3-alpha':
optional: true
- '@supabase/supa-mdx-lint-win32-x64@0.1.7-alpha':
+ '@supabase/supa-mdx-lint-win32-x64@0.2.3-alpha':
optional: true
- '@supabase/supa-mdx-lint@0.1.7-alpha':
+ '@supabase/supa-mdx-lint@0.2.3-alpha':
optionalDependencies:
- '@supabase/supa-mdx-lint-darwin': 0.1.7-alpha
- '@supabase/supa-mdx-lint-linux-arm': 0.1.7-alpha
- '@supabase/supa-mdx-lint-linux-arm64': 0.1.7-alpha
- '@supabase/supa-mdx-lint-linux-i686': 0.1.7-alpha
- '@supabase/supa-mdx-lint-linux-x64': 0.1.7-alpha
- '@supabase/supa-mdx-lint-win32-i686': 0.1.7-alpha
- '@supabase/supa-mdx-lint-win32-x64': 0.1.7-alpha
+ '@supabase/supa-mdx-lint-darwin': 0.2.3-alpha
+ '@supabase/supa-mdx-lint-linux-arm': 0.2.3-alpha
+ '@supabase/supa-mdx-lint-linux-arm64': 0.2.3-alpha
+ '@supabase/supa-mdx-lint-linux-i686': 0.2.3-alpha
+ '@supabase/supa-mdx-lint-linux-x64': 0.2.3-alpha
+ '@supabase/supa-mdx-lint-win32-i686': 0.2.3-alpha
+ '@supabase/supa-mdx-lint-win32-x64': 0.2.3-alpha
'@supabase/supabase-js@2.47.14':
dependencies:
diff --git a/supa-mdx-lint.config.toml b/supa-mdx-lint.config.toml
index fc3403b3048..4377ad6a497 100644
--- a/supa-mdx-lint.config.toml
+++ b/supa-mdx-lint.config.toml
@@ -3,12 +3,10 @@ ignore_patterns = ["**/_*.mdx"]
# Heading should be sentence case
Rule001HeadingCase = "include('supa-mdx-lint/Rule001HeadingCase.toml')"
-Rule003Spelling = false
# Check spelling
# Error message: "Word not found in dictionary"
-# Rule003Spelling = "include('supa-mdx-lint/Rule003Spelling.toml')"
+Rule003Spelling = "include('supa-mdx-lint/Rule003Spelling.toml')"
-Rule002AdmonitionTypes = false
-# [Rule002AdmonitionTypes]
+[Rule002AdmonitionTypes]
# Allowed admonition types are:
-# admonition_types = ["note", "tip", "caution", "deprecation", "danger"]
+admonition_types = ["note", "tip", "caution", "deprecation", "danger"]
diff --git a/supa-mdx-lint/Rule001HeadingCase.toml b/supa-mdx-lint/Rule001HeadingCase.toml
index 8dbed08f963..e39cc3a1c6c 100644
--- a/supa-mdx-lint/Rule001HeadingCase.toml
+++ b/supa-mdx-lint/Rule001HeadingCase.toml
@@ -214,4 +214,4 @@ may_uppercase = [
# Words that may be lowercased even if they are the first word in the sentence.
# Can also specify a regex that is compatible with the [Rust regex crate](https://docs.rs/regex/latest/regex/).
-may_lowercase = ["asyncpg", "iOS"]
+may_lowercase = ["asyncpg", "iOS", "imgproxy"]
diff --git a/supa-mdx-lint/Rule003Spelling.toml b/supa-mdx-lint/Rule003Spelling.toml
index 1eeb1ed2ffe..53623c62c2a 100644
--- a/supa-mdx-lint/Rule003Spelling.toml
+++ b/supa-mdx-lint/Rule003Spelling.toml
@@ -9,46 +9,71 @@
#
# Before adding a new word to the allow list, double check that it is in fact
# the correct casing for the word! Especially for styling of company and product
-# names, the "official" casing might not be what you think.
+# names, the "official" casing and spacing might not be what you think.
allow_list = [
- "[A-Za-z0-9_-]+(\\.[A-Z-a-z0-9_-]+)+(\\/[A-Za-z0-9_-]+)*",
- "[KMG]iB",
"\\[#[A-Za-z0-9-]+\\]",
"\\$\\$.+?\\$\\$",
+ "\\s\\.[a-z]+",
"\\S+\\.json",
"\\S+\\.toml",
"\\S+\\.yaml",
"[A-Z]{2,5}s?",
+ "[A-Za-z0-9_-]+(\\.[A-Z-a-z0-9_-]+)+(\\/[A-Za-z0-9_-]+)*",
+ "[Aa]dd-ons?",
+ "[Aa]llowlists?",
"[Aa]utovacuum(s|ing|ed)?",
"[Bb]ackend",
+ "[Bb]ackoff",
+ "[Bb]lockchains?",
+ "[Bb]reakpoints?",
"[Bb]uilt-ins?",
+ "[Cc]odebases?",
+ "[Cc]odepaths?",
"[Cc]onfigs?",
"[Cc]ooldowns?",
"[Cc]ron",
"[Dd]atasets?",
+ "[Dd]atasources?",
+ "[Dd]e facto",
"[Dd]evs?",
"[Dd]ropdown",
"[Ee]nums?",
"[Ee]nv",
"[Ff]rontend",
- "[Gg]zip(s|ed)?",
+ "[Gg]lobs?",
+ "[Gg]lobstar",
+ "[Gg]zip(s|ped|ping)?",
+ "[Hh]r",
+ "[Hh]ypertables?",
+ "[KMG]bps",
+ "[KMG]iB",
+ "[Mm]essageBird",
+ "[Mm]icroservices?",
"[Mm]iddlewares?",
+ "[Mm]onorepos?",
"[Mm]ultimodal",
"[Mm]ultipart",
"[Mm]ultithreading",
+ "[Nn]amespace(d|s)?",
"[Nn]onces?",
"[Nn]ullable",
+ "[Oo]ffboarding",
+ "[Oo]nboard(ing)?",
"[Pp]arams?",
"[Pp]laintext",
"[Pp]olyfill(s|ed)?",
- "[Pp]ooler",
+ "[Pp]oolers?",
"[Qq]uickstarts?",
"[Rr]ealtime",
"[Rr]ebas(e|ed|es|ing)",
+ "[Rr]eplayability",
"[Rr]epos?",
"[Rr]untimes?",
"[Ss]erverless",
+ "[Ss]erverside",
+ "[Ss]itekeys?",
+ "[Ss]tructs?",
"[Ss]ubcommands?",
"[Ss]ubdomains?",
"[Ss]ubfolders?",
@@ -59,52 +84,82 @@ allow_list = [
"[Uu]ptime",
"[Ww]aitlists?",
"[Ww]ebhooks?",
+ "Airbyte",
"AndroidX",
+ "AppleAuthentication",
+ "Astro",
"AsyncStorage",
+ "Authy",
+ "Basejump",
"BigQuery",
"Bitbucket",
+ "Brevo",
"CAPTCHA",
+ "Cartes Bancaires",
"ChatGPT",
+ "ClickHouse",
"Clippy",
"Cloudflare",
+ "Cognito",
"Colab",
+ "DBeaver",
"Database Functions?",
"DataDog",
"DevTools",
"DDoS",
"Deno",
+ "DigitalOcean",
"Django",
"Docker",
"Drizzle",
+ "Entra",
"Erlang",
+ "Figma",
"Firestore",
+ "Fivetran",
+ "Floyd-Warshall",
"GDScript",
+ "GSSAPI",
"Git",
"GitHub",
"GitLab",
"GoTrue",
"Grafana",
"GraphQL",
+ "Groonga",
+ "HashiCorp",
"Heroku",
"Homebrew",
"Hono",
+ "HypoPG",
"IdP",
"ImageMagick",
"Inbucket",
+ "Inferencer",
+ "Infisical",
"IntelliJ",
+ "IntelliSense",
"IVFFlat",
"Jupyter",
"JWTs",
+ "Kakao",
+ "Keycloak",
"Kotlin",
"Ktor",
"Kysely",
"LangChain",
"Laravel",
+ "LineString",
+ "LinkedIn",
"LlamaIndex",
"Llamafile",
"Lua",
+ "Mansueli",
+ "Metabase",
"Mixpeek",
+ "Multiplatform",
"MySQL",
+ "[Nn]amespaces?",
"Nano",
"Netlify",
"Next.js",
@@ -114,67 +169,115 @@ allow_list = [
"OAuth",
"Okta",
"Ollama",
+ "OneLogin",
"OpenAI",
+ "OpenID",
"OrbStack",
+ "OrioleDB",
+ "OpenTelemetry",
+ "PGAudit",
+ "PGroonga",
+ "PgBouncer",
+ "PingIdentity",
+ # For historical purposes
+ "POSTGRES",
"PascalCase",
"Podman",
+ "PostGIS",
+ "PostQUEL",
"PostgREST",
"Postgres",
# We prefer Postgres, but check for vocabulary preference in a separate rule
"PostgreSQL",
+ "ProGuard",
"PubSub",
"Prisma",
+ "README",
"Redis",
"RedwoodJS",
"Roboflow",
"SDKs",
"SQLAlchemy",
+ "SQLModel",
"SQLite",
+ "SecureStore",
"SendGrid",
"Snaplet",
"SolidJS",
+ "Spotify",
+ "Sqitch",
"Supavisor",
"SvelteKit",
"SwiftUI",
"Supabase",
+ "Remapper",
+ "TextLocal",
"TimescaleDB",
"Transformers.js",
"Twilio",
"Undici",
+ "UnionPay",
"Unsplash",
"Uppy",
"Upstash",
+ "[Uu]pvote(s|d)?",
"VSCode",
"Vecs",
"Vercel",
"Vite",
+ "Vonage",
"Vue",
+ "Wasm",
"WebAssembly",
"WebP",
"WebSockets?",
"WebStorm",
+ "WhatsApp",
+ "WorkOS",
"Xcode",
+ "Zapier",
+ "ZeptoMail",
+ "asyncpg",
"bcrypt",
"camelCase",
+ "dbdev",
+ "degit",
"deno-postgres",
+ "dotenv",
"e.g.",
"gte-small",
+ "hCaptcha",
"https?:\\/\\/\\S+",
"i.e.",
+ "imgproxy",
"iOS",
+ "localStorage",
"localhost",
"macOS",
+ "magick-wasm",
+ "ms",
+ "ngrok",
+ "node-postgres",
"npm",
"npmrc",
+ "ns",
+ "pgAdmin",
"pgAudit",
+ "pgTAP",
+ "pgloader",
+ "pgmq",
"pgsodium",
"pgvector",
+ "plpgsql",
"psql",
+ "psycopg",
"scrypt",
+ "sessionStorage",
"stdin",
"stdout",
"supabase-auth-ui",
"supabase-csharp",
+ "supabase-community",
"supabase-flutter",
"supabase-gdscript",
"supabase-go",
@@ -185,7 +288,10 @@ allow_list = [
"supabase-rb",
"supabase-swift",
"supautils",
+ "tvOS",
"vecs",
+ "vs",
+ "watchOS",
]
prefixes = ["bi", "pre"]
diff --git a/vale/styles/Custom/Spelling.yml b/vale/styles/Custom/Spelling.yml
deleted file mode 100644
index 527ac07d318..00000000000
--- a/vale/styles/Custom/Spelling.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-extends: existence
-message: "In general, use American spelling instead of '%s'."
-link: 'https://developers.google.com/style/spelling'
-ignorecase: true
-level: warning
-tokens:
- - '(?:\w+)nised?'
- - 'colour'
- - 'labour'
- - 'centre'