diff --git a/apps/docs/components/FooterHelpCallout.tsx b/apps/docs/components/FooterHelpCallout.tsx
index 2eb6421dc4c..89f3265ec16 100644
--- a/apps/docs/components/FooterHelpCallout.tsx
+++ b/apps/docs/components/FooterHelpCallout.tsx
@@ -1,12 +1,38 @@
-const FooterHelpCallout = () => {
+import { ReactMarkdown } from 'react-markdown/lib/react-markdown'
+
+export type FooterHelpCalloutType = 'default' | 'postgres'
+
+const content = {
+ default: {
+ title: 'Need some help?',
+ description: `Not to worry, our specialist engineers are here to help. Submit a support ticket through the [Dashboard](https://app.supabase.com/support/new).`,
+ },
+ postgres: {
+ title: 'Looking for Serverless Postgres?',
+ description: `Supabase is the fastest way to get started with Postgres in a serverless environment. [Learn more](https://supabase.com/database?utm=postgres-helpers).`,
+ },
+}
+
+const FooterHelpCallout = ({
+ footerHelpType = 'default',
+ title,
+}: {
+ footerHelpType: FooterHelpCalloutType
+ title: any
+}) => {
return (
-
-
-
Need some help?
-
- Not to worry, our specialist engineers are here to help. Submit a support ticket through
- the Dashboard.
-
+
+
+
{content[footerHelpType].title}
+ {content[footerHelpType].description}
)
diff --git a/apps/docs/components/MDX/project_setup.mdx b/apps/docs/components/MDX/project_setup.mdx
index 9efe03df58e..f1f72f08e64 100644
--- a/apps/docs/components/MDX/project_setup.mdx
+++ b/apps/docs/components/MDX/project_setup.mdx
@@ -32,7 +32,12 @@ or you can just copy/paste the SQL from below and run it yourself.
3. Click **Run**.
@@ -53,5 +58,10 @@ We just need to get the URL and `anon` key from the API settings.
3. Find your API `URL`, `anon`, and `service_role` keys on this page.
diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx
index cbbb215e7a6..c21718dce72 100644
--- a/apps/docs/components/Navigation/Footer.tsx
+++ b/apps/docs/components/Navigation/Footer.tsx
@@ -1,6 +1,6 @@
import Image from 'next/image'
import Link from 'next/link'
-import { Button, IconGitHub, IconTwitter } from '~/../../packages/ui'
+import { Button, IconGitHub, IconTwitter, IconYoutube } from '~/../../packages/ui'
import footerData from '~/data/footer.json'
import { useTheme } from 'common/Providers'
@@ -20,6 +20,16 @@ const Footer = () => {
))}
+
- This reference documents every object and method available in Supabase's C#
- library, [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can
- use supabase-csharp to interact with your Postgres database, listen to database changes, invoke
- Deno Edge Functions, build login and user management functionality, and manage large files.
+ This reference documents every object and method available in Supabase's C# library,
+ [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can use supabase-csharp to
+ interact with your Postgres database, listen to database changes, invoke Deno Edge Functions,
+ build login and user management functionality, and manage large files.
+
+
+
+
The C# client library is created and maintained by the Supabase community, and is not an official library. Please be tolerant of areas where the library is still being developed, and — as with all the libraries — feel free to contribute wherever you find issues.
+
+
+ Huge thanks to official maintainer, [Joseph Schultz](https://github.com/acupofjose), and to [Ben
+ Randall](https://github.com/veleek) and [Rhuan Barros](https://github.com/rhuanbarros) for their
+ help.
+
+
diff --git a/apps/docs/docs/ref/csharp/release-notes.mdx b/apps/docs/docs/ref/csharp/release-notes.mdx
index 2f30b2cbed8..777621307dd 100644
--- a/apps/docs/docs/ref/csharp/release-notes.mdx
+++ b/apps/docs/docs/ref/csharp/release-notes.mdx
@@ -3,6 +3,39 @@ id: release-notes
title: Release Notes
---
+## 0.8.0 - 2023-01-31
+
+- Update dependency: realtime-csharp@5.0.0
+ - Re: [#21](https://github.com/supabase-community/realtime-csharp/pull/21) Provide API for `presence`, `broadcast` and `postgres_changes`
+ - [Major, New] `Channel.PostgresChanges` event will receive the wildcard `*` changes event, not `Channel.OnMessage`.
+ - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now conform to the server's payload of `Response.Payload.**Data**`
+ - [Major] `Channel.OnInsert`, `Channel.OnUpdate`, and `Channel.OnDelete` now return `PostgresChangesEventArgs`
+ - [Minor] Rename `Channel` to `RealtimeChannel`
+ - Supports better handling of disconnects in `RealtimeSocket` and adds a `Client.OnReconnect` event.
+ - [Minor] Moves `ChannelOptions` to `Channel.ChannelOptions`
+ - [Minor] Moves `ChannelStateChangedEventArgs` to `Channel.ChannelStateChangedEventArgs`
+ - [Minor] Moves `Push` to `Channel.Push`
+ - [Minor] Moves `Channel.ChannelState` to `Constants.ChannelState`
+ - [Minor] Moves `SocketResponse`, `SocketRequest`, `SocketResponsePayload`, `SocketResponseEventArgs`, and `SocketStateChangedEventArgs` to `Socket` namespace.
+ - [New] Adds `RealtimeBroadcast`
+ - [New] Adds `RealtimePresence`
+ - [Improvement] Better handling of disconnection/reconnection
+- Update dependency: postgrest-csharp@3.1.3
+ - Another fix for [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which further typechecks nullable values.
+
+## 0.7.2 - 2023-01-27
+
+- Update dependency: gotrue-csharp@3.0.4
+ - Makes `Session.CreatedAt` a publicly settable property, which should fix incorrect dates on retrieved `Session`s.
+- Update dependency: postgrest-csharp@3.1.2
+ - Fix [#61](https://github.com/supabase-community/postgrest-csharp/issues/61) which did not correctly parse Linq `Where` when encountering a nullable type.
+ - Add missing support for transforming for `== null` and `!= null`
+
+## 0.7.1 - 2023-01-17
+
+- Update dependency: postgrest-csharp@3.1.1
+ - Fix issue from supabase-community/supabase-csharp#48 where boolean model properties would not be evaluated in predicate expressions
+
## 0.7.0 - 2023-01-16
- Update dependency: postgrest-csharp@3.1.0
diff --git a/apps/docs/layouts/DefaultGuideLayout.tsx b/apps/docs/layouts/DefaultGuideLayout.tsx
index ea39047c4dd..d2c01704763 100644
--- a/apps/docs/layouts/DefaultGuideLayout.tsx
+++ b/apps/docs/layouts/DefaultGuideLayout.tsx
@@ -1,8 +1,15 @@
import { FC } from 'react'
+import { FooterHelpCalloutType } from '~/components/FooterHelpCallout'
import GuideLayout from './guides'
interface Props {
- meta: { title: string; description?: string; hide_table_of_contents?: boolean; video?: string }
+ meta: {
+ title: string
+ description?: string
+ hide_table_of_contents?: boolean
+ video?: string
+ footerHelpType?: FooterHelpCalloutType
+ }
children: any
toc?: any
currentPage?: string
diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx
index 0d53a6cd5f8..d1f37b40d1b 100644
--- a/apps/docs/layouts/SiteLayout.tsx
+++ b/apps/docs/layouts/SiteLayout.tsx
@@ -335,7 +335,6 @@ const SiteLayout = ({ children }) => {
{children}
-
diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx
index d5c1c811305..5899d282fc7 100644
--- a/apps/docs/layouts/guides/index.tsx
+++ b/apps/docs/layouts/guides/index.tsx
@@ -6,9 +6,9 @@ import { FC, useEffect, useRef, useState } from 'react'
import { IconExternalLink } from 'ui'
import components from '~/components'
import { highlightSelectedTocItem } from '~/components/CustomHTMLElements/CustomHTMLElements.utils'
+import FooterHelpCallout, { FooterHelpCalloutType } from '~/components/FooterHelpCallout'
import GuidesTableOfContents from '~/components/GuidesTableOfContents'
import useHash from '~/hooks/useHash'
-import { getPageType } from '~/lib/helpers'
interface Props {
meta: {
@@ -17,6 +17,9 @@ interface Props {
hide_table_of_contents?: boolean
breadcrumb?: string
subtitle?: string
+ footerHelpType?: FooterHelpCalloutType
+ video?: string
+ canonical?: string
}
children: any
toc?: any
@@ -67,12 +70,21 @@ const Layout: FC = (props) => {
= (props) => {
)}
+
>
)
}
diff --git a/apps/docs/pages/guides/api.mdx b/apps/docs/pages/guides/api.mdx
index c8fe10114a6..e31cafee9aa 100644
--- a/apps/docs/pages/guides/api.mdx
+++ b/apps/docs/pages/guides/api.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'Serverless APIs',
description: 'Auto-generating and Realtime APIs.',
sidebar_label: 'Overview',
+ video: 'https://www.youtube.com/v/rPAJJFdtPw0',
}
Supabase auto-generates three types of API directly from your database schema.
@@ -84,7 +85,12 @@ This creates a corresponding route `todos` which can accept `GET`, `POST`, `PATC
1. Click **Save**.
@@ -112,7 +118,12 @@ Every Supabase project has a unique API URL. Your API is secured behind an API g
3. Find your API `URL`, `anon`, and `service_role` keys on this page.
The REST API and the GraphQL API are both accessible through this URL:
@@ -141,7 +152,12 @@ Let's view the documentation for a `countries` table which we created in our dat
3. Switch between the JavaScript and the cURL docs using the tabs.
#### GraphQL
@@ -286,7 +302,12 @@ By default Realtime is disabled on your database. Let's turn on Realtime for the
4. Control which tables broadcast changes by selecting **Source** and toggling each table.
diff --git a/apps/docs/pages/guides/api/generating-types.mdx b/apps/docs/pages/guides/api/generating-types.mdx
index aeac584922b..1adba154fcc 100644
--- a/apps/docs/pages/guides/api/generating-types.mdx
+++ b/apps/docs/pages/guides/api/generating-types.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'generating-types',
title: 'Generating Types',
description: 'How to generate types for your API and Supabase libraries.',
+ video: 'https://www.youtube.com/v/7CqlTU9aOR4',
}
Supabase APIs are generated from your database, which means that we can use database introspection to generate type-safe API definitions.
diff --git a/apps/docs/pages/guides/auth/auth-captcha.mdx b/apps/docs/pages/guides/auth/auth-captcha.mdx
index 32945d8071d..6aaee2f4388 100644
--- a/apps/docs/pages/guides/auth/auth-captcha.mdx
+++ b/apps/docs/pages/guides/auth/auth-captcha.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'auth-captcha',
title: 'Enable Captcha Protection',
description: 'Add Captcha Protection to your Supabase project',
+ video: 'https://www.youtube.com/v/em1cpOAXknM',
}
Supabase provides you with the option of adding captcha to your sign-in, sign-up, and password reset forms. This keeps your website safe from bots and malicious scripts. Supabase authentication has support for [hCaptcha](https://www.hcaptcha.com/).
diff --git a/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx b/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx
index 1d07fb9db94..273b108db5b 100644
--- a/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx
+++ b/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx
@@ -34,10 +34,7 @@ Pass `supabaseClient` from `@supabase/supabase-js` as a prop to the component.
import { createClient } from '@supabase/supabase-js'
import { Auth } from '@supabase/auth-ui-react'
-const supabase = createClient(
- '',
- ''
-)
+const supabase = createClient('', '')
const App = () =>
```
@@ -75,20 +72,29 @@ The Auth component also supports login with [offical social providers](../../aut
import { createClient } from '@supabase/supabase-js'
import { Auth, ThemeSupa } from '@supabase/auth-ui-react'
-const supabase = createClient(
- '',
- ''
-)
+const supabase = createClient('', '')
const App = () => (
)
```
+### Supported Views
+
+The Auth component is currently shipped with the following views:
+
+- [Email Login](../auth-email)
+- [Magic Link login](../auth-magic-link)
+- [Social Login](../social-login)
+- Update password
+- Forgotten password
+
+We are planning on adding more views in the future. Follow along on that [repo](https://github.com/supabase/auth-ui).
+
## Customization
There are several ways to customize Auth UI:
@@ -161,10 +167,7 @@ Auth UI themes can be overridden using variable tokens. See the [list of variabl
import { createClient } from '@supabase/supabase-js'
import { Auth, ThemeSupa } from '@supabase/auth-ui-react'
-const supabase = createClient(
- '',
- ''
-)
+const supabase = createClient('', '')
const App = () => (
',
- ''
-)
+const supabase = createClient('', '')
const App = () => (
',
- ''
-)
+const supabase = createClient('', '')
const App = () => (
',
- ''
-)
+const supabase = createClient('', '')
const App = () => (
}
-const Context = createContext()
+const Context = createContext(undefined)
export default function SupabaseProvider({ children }: { children: React.ReactNode }) {
const [supabase] = useState(() => createClient())
@@ -294,7 +294,14 @@ export default function SupabaseProvider({ children }: { children: React.ReactNo
)
}
-export const useSupabase = () => useContext(Context)
+export const useSupabase = () => {
+ let context = useContext(Context);
+ if (context === undefined) {
+ throw new Error("useSupabase must be used inside SupabaseProvider");
+ } else {
+ return context;
+ }
+}
```
> TypeScript types can be [generated with the Supabase CLI](https://supabase.com/docs/reference/javascript/typescript-support) and passed to `createBrowserSupabaseClient` to add type support to the Supabase client.
diff --git a/apps/docs/pages/guides/auth/overview.mdx b/apps/docs/pages/guides/auth/overview.mdx
index d46b0eb3e9d..07cbc79859f 100644
--- a/apps/docs/pages/guides/auth/overview.mdx
+++ b/apps/docs/pages/guides/auth/overview.mdx
@@ -7,6 +7,7 @@ export const meta = {
title: 'Auth',
description: 'Use Supabase to Authenticate and Authorize your users.',
sidebar_label: 'Overview',
+ video: 'https://www.youtube.com/v/6ow_jW4epf8',
}
## Overview
@@ -115,7 +116,12 @@ Get started with our [Row Level Security Guides](/docs/guides/auth/row-level-sec
Authentication only gets you so far. When you need granular authorization rules, nothing beats PostgreSQL's [Row Level Security (RLS)](https://www.postgresql.org/docs/current/ddl-rowsecurity.html). Supabase makes it simple to turn RLS on and off.
### Policies
@@ -123,7 +129,12 @@ Authentication only gets you so far. When you need granular authorization rules,
[Policies](https://www.postgresql.org/docs/current/sql-createpolicy.html) are PostgreSQL's rule engine. They are incredibly powerful and flexible, allowing you to write complex SQL rules which fit your unique business needs.
With policies, your database becomes the rules engine. Instead of repetitively filtering your queries, like this ...
@@ -171,7 +182,12 @@ Supabase provides multiple endpoints to authenticate and manage your users:
When users sign up, Supabase assigns them a unique ID. You can reference this ID anywhere in your database. For example, you might create a `profiles` table referencing `id` in the `auth.users` table using a `user_id` field.
export const Page = ({ children }) =>
diff --git a/apps/docs/pages/guides/auth/phone-login/twilio.mdx b/apps/docs/pages/guides/auth/phone-login/twilio.mdx
index 4bdc9ac11e4..be9da960411 100644
--- a/apps/docs/pages/guides/auth/phone-login/twilio.mdx
+++ b/apps/docs/pages/guides/auth/phone-login/twilio.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'auth-twilio',
title: 'Phone Auth with Twilio',
description: 'How to set up and use Mobile OTP with Twilio and Supabase.',
+ video: 'https://www.youtube.com/v/akScoPO01bc',
}
## Overview
diff --git a/apps/docs/pages/guides/auth/row-level-security.mdx b/apps/docs/pages/guides/auth/row-level-security.mdx
index eca412cd214..1be866869e0 100644
--- a/apps/docs/pages/guides/auth/row-level-security.mdx
+++ b/apps/docs/pages/guides/auth/row-level-security.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'row-level-security',
title: 'Row Level Security',
description: 'Secure your data using Postgres Row Level Security.',
+ video: 'https://www.youtube.com/v/Ow_Uzedfohk',
}
When you need granular authorization rules, nothing beats PostgreSQL's [Row Level Security (RLS)](https://www.postgresql.org/docs/current/ddl-rowsecurity.html).
diff --git a/apps/docs/pages/guides/cli/local-development.mdx b/apps/docs/pages/guides/cli/local-development.mdx
index 183f670dd1c..1c8f21a9b05 100644
--- a/apps/docs/pages/guides/cli/local-development.mdx
+++ b/apps/docs/pages/guides/cli/local-development.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'local-development',
title: 'Local Development',
description: 'How to use Supabase on your local development machine.',
+ video: 'https://www.youtube.com/v/vyHyYpvjaks',
}
Learn how to use the Supabase CLI to develop your project locally and deploy to the Supabase Platform.
diff --git a/apps/docs/pages/guides/cli/managing-environments.mdx b/apps/docs/pages/guides/cli/managing-environments.mdx
index 4f93da230a5..25f91ce22ff 100644
--- a/apps/docs/pages/guides/cli/managing-environments.mdx
+++ b/apps/docs/pages/guides/cli/managing-environments.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'managing-environments',
title: 'Managing Environments',
description: 'How to deploy Supabase schema changes with a CI / CD pipeline.',
+ video: 'https://www.youtube.com/v/rOLyOsBR1Uc',
}
## Overview
diff --git a/apps/docs/pages/guides/database.mdx b/apps/docs/pages/guides/database.mdx
index 7efa2ad7513..d4667ed82a3 100644
--- a/apps/docs/pages/guides/database.mdx
+++ b/apps/docs/pages/guides/database.mdx
@@ -34,7 +34,10 @@ You don't have to be a database expert to start using Supabase. Our table view m
Dig into the relationships within your data.
### Clone tables
@@ -42,7 +45,12 @@ Dig into the relationships within your data.
You can duplicate your tables, just like you would inside a spreadsheet.
### The SQL Editor
@@ -50,7 +58,12 @@ You can duplicate your tables, just like you would inside a spreadsheet.
Supabase comes with a SQL Editor. You can also save your favorite queries to run later!
### Additional features
@@ -74,7 +87,12 @@ To expand the functionality of your Postgres database, you can use extensions.
You can enable Postgres extensions with the click of a button within the Supabase dashboard.
[Learn more](/docs/guides/database/extensions) about all the extensions provided on Supabase.
diff --git a/apps/docs/pages/guides/database/connecting-to-postgres.mdx b/apps/docs/pages/guides/database/connecting-to-postgres.mdx
index 13bade73e20..7d1162c6f8d 100644
--- a/apps/docs/pages/guides/database/connecting-to-postgres.mdx
+++ b/apps/docs/pages/guides/database/connecting-to-postgres.mdx
@@ -45,7 +45,12 @@ You cannot manage the database schema via the API (for security reasons). To do
You can find the API URL and Keys in the [Dashboard](https://app.supabase.com/project/_/settings/api).
## Direct connections
@@ -59,7 +64,12 @@ Every Supabase project provides a full Postgres database. You can connect to the
3. Find your Connection Info and Connection String. Direct connections are on port `5432`.
## Connection Pool
@@ -104,7 +114,12 @@ This is the most granular option. Connections are returned to the pool after eve
3. Find your Connection Info and Connection String. Connection pooling is on port `6543`.
## Connecting with SSL
diff --git a/apps/docs/pages/guides/database/extensions.mdx b/apps/docs/pages/guides/database/extensions.mdx
index 6ae1fd74546..1c10af0d6bd 100644
--- a/apps/docs/pages/guides/database/extensions.mdx
+++ b/apps/docs/pages/guides/database/extensions.mdx
@@ -24,7 +24,12 @@ Supabase has pre-installed some of the most useful open source extensions.
3. Enable or disable an extension.
diff --git a/apps/docs/pages/guides/database/extensions/http.mdx b/apps/docs/pages/guides/database/extensions/http.mdx
index 39d11b19c14..11ac8e55d41 100644
--- a/apps/docs/pages/guides/database/extensions/http.mdx
+++ b/apps/docs/pages/guides/database/extensions/http.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'http',
title: 'http: RESTful Client',
description: 'An HTTP Client for PostgreSQL Functions.',
+ video: 'https://www.youtube.com/v/rARgrELRCwY',
}
The `http` extension allows you to call RESTful endpoints within Postgres.
diff --git a/apps/docs/pages/guides/database/extensions/hypopg.mdx b/apps/docs/pages/guides/database/extensions/hypopg.mdx
new file mode 100644
index 00000000000..c493f9f89cd
--- /dev/null
+++ b/apps/docs/pages/guides/database/extensions/hypopg.mdx
@@ -0,0 +1,121 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ id: 'hypopg',
+ title: 'HypoPG: Hypothetical indexes',
+ description: 'Quickly check if an index can be used without creating it.',
+}
+
+`HypoPG` is PostgreSQL extension for creating hypothetical/virtual indexes. HypoPG allows users to rapidly create hypothetical/virtual indexes that have no resource cost (CPU, disk, memory) that are visible to the PostgreSQL query planner.
+That allows users to quickly search for an index to improve a slow query without waiting for them to build.
+
+## Usage
+
+### Enable the extension
+
+
+
+
+1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
+2. Click on **Extensions** in the sidebar.
+3. Search for "hypopg" and enable the extension.
+
+
+
+
+{/* prettier-ignore */}
+```sql
+-- Enable the "hypopg" extension
+create extension hypopg with schema extensions;
+
+-- Disable the "hypopg" extension
+drop extension if exists hypopg;
+```
+
+Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
+To disable an extension you can call `drop extension`.
+
+It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
+
+
+
+
+### Speeding up a query
+
+Given the following table and a simple query to select from the table by id:
+
+{/* prettier-ignore */}
+```sql
+create table account (
+ id int,
+ address text
+);
+
+insert into account(id, address)
+select
+ id,
+ id || ' main street'
+from
+ generate_series(1, 10000) id;
+```
+
+We can generate an explain plan for a description of how the PostgreSQL query planner
+intends to execute the query.
+
+{/* prettier-ignore */}
+```sql
+explain select * from account where id=1;
+
+ QUERY PLAN
+-------------------------------------------------------
+ Seq Scan on account (cost=0.00..180.00 rows=1 width=13)
+ Filter: (id = 1)
+(2 rows)
+```
+
+Using HypoPG, we can create a hypothetical index on the `account(id)` column to check if it would be useful to the query planner and then re-run the explain plan.
+
+Note that the virtual indexes created by HypoPG are only visible in the PostgreSQL connection that they were created in. Supabase connects to PostgreSQL through a connection pooler so the `hypopg_create_index` statement and the `explain` statement should be executed in a single query.
+
+{/* prettier-ignore */}
+```sql
+select * from hypopg_create_index('create index on account(id)');
+
+explain select * from account where id=1;
+
+ QUERY PLAN
+------------------------------------------------------------------------------------
+ Index Scan using <13504>btree_account_id on hypo (cost=0.29..8.30 rows=1 width=13)
+ Index Cond: (id = 1)
+(2 rows)
+```
+
+The query plan has changed from a `Seq Scan` to an `Index Scan` using the newly created virtual index, so we may choose to create a real version of the index to improve performance on the target query:
+
+{/* prettier-ignore */}
+```sql
+create index on account(id);
+```
+
+## Functions
+
+- [`hypo_create_index(text)`](https://hypopg.readthedocs.io/en/rel1_stable/usage.html#create-a-hypothetical-index): A function to create a hypothetical index.
+- [`hypopg_list_indexes`](https://hypopg.readthedocs.io/en/rel1_stable/usage.html#manipulate-hypothetical-indexes): A View that lists all hypothetical indexes that have been created.
+- [`hypopg()`](https://hypopg.readthedocs.io/en/rel1_stable/usage.html#manipulate-hypothetical-indexes): A function that lists all hypothetical indexes that have been created with the same format as pg_index.
+- [`hypopg_get_index_def(oid)`](https://hypopg.readthedocs.io/en/rel1_stable/usage.html#manipulate-hypothetical-indexes): A function to display the `create index` statement that would create the index.
+- [`hypopg_get_relation_size(oid)`](https://hypopg.readthedocs.io/en/rel1_stable/usage.html#manipulate-hypothetical-indexes): A function to estimate how large a hypothetical index would be.
+- [`hypopg_drop_index(oid)`](https://hypopg.readthedocs.io/en/rel1_stable/usage.html#manipulate-hypothetical-indexes): A function to remove a given hypothetical index by oid.
+- [`hypopg_reset()`](https://hypopg.readthedocs.io/en/rel1_stable/usage.html#manipulate-hypothetical-indexes): A function to remove all hypothetical indexes.
+
+## Resources
+
+- Official [HypoPG documentation](https://hypopg.readthedocs.io/en/rel1_stable/)
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/database/extensions/pg_jsonschema.mdx b/apps/docs/pages/guides/database/extensions/pg_jsonschema.mdx
new file mode 100644
index 00000000000..c51a4c3783e
--- /dev/null
+++ b/apps/docs/pages/guides/database/extensions/pg_jsonschema.mdx
@@ -0,0 +1,113 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ id: 'pg_jsonschema',
+ title: 'pg_jsonschema: JSON Schema Validation',
+ description: 'Validate json/jsonb with JSON Schema in PostgreSQL.',
+}
+
+[JSON Schema](https://json-schema.org) is a language for annotating and validating JSON documents. [`pg_jsonschema`](https://json-schema.org) is a PostgreSQL extension that adds the ability to validate PostgreSQL's built-in `json` and `jsonb` data types against a JSON Schema document.
+
+## Usage
+
+### Enable the extension
+
+
+
+
+1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
+2. Click on **Extensions** in the sidebar.
+3. Search for "pg_jsonschema" and enable the extension.
+
+
+
+
+{/* prettier-ignore */}
+```sql
+-- Enable the "pg_jsonschema" extension
+create extension pg_jsonschema with schema extensions;
+
+-- Disable the "pg_jsonschema" extension
+drop extension if exists pg_jsonschema;
+```
+
+Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
+To disable an extension you can call `drop extension`.
+
+It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
+
+
+
+
+## Functions
+
+- [`json_matches_schema(schema json, instance json)`](https://github.com/supabase/pg_jsonschema#api): Checks if a `json` _instance_ conforms to a JSON Schema _schema_.
+- [`jsonb_matches_schema(schema json, instance jsonb)`](https://github.com/supabase/pg_jsonschema#api): Checks if a `jsonb` _instance_ conforms to a JSON Schema _schema_.
+
+### Validating a document
+
+Since `pg_jsonschema` exposes its utilities as functions, we can test it with a simple select statement:
+
+{/* prettier-ignore */}
+```sql
+select
+ extensions.json_matches_schema(
+ schema := '{"type": "object"}',
+ instance := '{}'
+ );
+```
+
+`pg_jsonschema` is generally used in tandem with a [check constraint](https://www.postgresql.org/docs/current/ddl-constraints.html) as a way to constrain the contents of a json/b field to match a JSON Schema.
+
+{/* prettier-ignore */}
+```sql
+create table customer(
+ id serial primary key,
+ ...
+ metadata json,
+
+ check (
+ json_matches_schema(
+ '{
+ "type": "object",
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 16
+ }
+ }
+ }
+ }',
+ metadata
+ )
+ )
+);
+
+-- Example: Valid Payload
+insert into customer(metadata)
+values ('{"tags": ["vip", "darkmode-ui"]}');
+-- Result:
+-- INSERT 0 1
+
+-- Example: Invalid Payload
+insert into customer(metadata)
+values ('{"tags": [1, 3]}');
+-- Result:
+-- ERROR: new row for relation "customer" violates check constraint "customer_metadata_check"
+-- DETAIL: Failing row contains (2, {"tags": [1, 3]}).
+```
+
+## Resources
+
+- Official [`pg_jsonschema` documentation](https://github.com/supabase/pg_jsonschema)
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/database/extensions/pg_stat_statements.mdx b/apps/docs/pages/guides/database/extensions/pg_stat_statements.mdx
new file mode 100644
index 00000000000..711878d78c0
--- /dev/null
+++ b/apps/docs/pages/guides/database/extensions/pg_stat_statements.mdx
@@ -0,0 +1,93 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ id: 'pg_stat_statements',
+ title: 'pg_stat_statements: SQL Planning and Execution Statistics',
+ description:
+ 'Track planning and execution statistics of all SQL statements executed on the database.',
+}
+
+`pg_stat_statements` is a database extension that exposes a view, of the same name, to track statistics about SQL statements executed on the database. The following table shows some of the available statistics and metadata:
+
+| Column Type | Description |
+| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| userid oid (references pg_authid.oid) | OID of user who executed the statement |
+| dbid oid (references pg_database.oid) | OID of database in which the statement was executed |
+| toplevel bool | True if the query was executed as a top-level statement (always true if pg_stat_statements.track is set to top) |
+| queryid bigint | Hash code to identify identical normalized queries. |
+| query text | Text of a representative statement |
+| plans bigint | Number of times the statement was planned (if pg_stat_statements.track_planning is enabled, otherwise zero) |
+| total_plan_time double precision | Total time spent planning the statement, in milliseconds (if pg_stat_statements.track_planning is enabled, otherwise zero) |
+| min_plan_time double precision | Minimum time spent planning the statement, in milliseconds (if pg_stat_statements.track_planning is enabled, otherwise zero) |
+
+A full list of statistics is available in the [pg_stat_statements docs](https://www.postgresql.org/docs/current/pgstatstatements.html).
+
+## Usage
+
+### Enable the extension
+
+
+
+
+1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
+2. Click on **Extensions** in the sidebar.
+3. Search for "pg_stat_statements" and enable the extension.
+
+
+
+
+{/* prettier-ignore */}
+```sql
+-- Enable the "pg_stat_statements" extension
+create extension pg_stat_statements with schema extensions;
+
+-- Disable the "pg_stat_statements" extension
+drop extension if exists pg_stat_statements;
+```
+
+Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
+To disable an extension you can call `drop extension`.
+
+It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
+
+
+
+
+### Inspecting activity
+
+A common use for `pg_stat_statements` is to track down expensive or slow queries. The `pg_stat_statements` view contains a row for each executed query with statistics inlined. For example, you can leverage the statistics to identify frequently executed and slow queries against a given table.
+
+{/* prettier-ignore */}
+```sql
+select
+ calls,
+ mean_exec_time,
+ max_exec_time,
+ total_exec_time,
+ stddev_exec_time,
+ query,
+from
+ pg_stat_statements
+where
+ calls > 1000 -- at least 50 calls
+ and mean_exec_time > 2.0 -- averaging at least 2ms/call
+ and total_exec_time > 60000 -- at least one minute total server time spent
+ and query ilike '%user_in_organization%' -- filter to queries that touch the user_in_organization table
+order by
+ calls desc
+```
+
+From the results, an informed decision about which queries to optimize, index, or adjust can be made.
+
+## Resources
+
+- Official [pg_stat_statements documentation](https://www.postgresql.org/docs/current/pgstatstatements.html)
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/database/extensions/pgrepack.mdx b/apps/docs/pages/guides/database/extensions/pgrepack.mdx
new file mode 100644
index 00000000000..bea7f7474b2
--- /dev/null
+++ b/apps/docs/pages/guides/database/extensions/pgrepack.mdx
@@ -0,0 +1,110 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ title: 'pg_repack: Physical storage optimization and maintenance',
+ description:
+ 'A tool to remove bloat from tables and indexes and optimize physical data order and physical storage',
+}
+
+[pg_repack](https://github.com/reorg/pg_repack) is a PostgreSQL extension to remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly.
+
+pg_repack provides the following methods to optimize physical storage:
+
+- Online CLUSTER: ordering table data by cluster index in a non-blocking way
+- Ordering table data by specified columns
+- Online VACUUM FULL: packing rows only in a non-blocking way
+- Rebuild or relocate only the indexes of a table
+
+## Requirements
+
+- Only superusers can use the utility.
+- Target table must have a PRIMARY KEY, or a UNIQUE total index on a NOT NULL column.
+- Performing a full-table repack requires free disk space about twice as large as the target table and its indexes.
+
+## Usage
+
+### Enable the extension
+
+Get started with pg_repack by enabling the extension in the Supabase Dashboard.
+
+
+
+
+1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
+2. Click on **Extensions** in the sidebar.
+3. Search for "pg_repack" and enable the extension.
+
+
+
+
+```sql
+-- Example: enable the "pg_repack" extension
+create extension pg_repack with schema extensions;
+
+-- Example: disable the "pg_repack" extension
+drop extension if exists pg_repack;
+```
+
+
+
+
+### Syntax
+
+```sh
+pg_repack [OPTION]... [DBNAME]
+```
+
+## Examples
+
+It's useful for performance to support tables data ordered on disk and physically remove deleted data that remain
+otherwise.
+
+Perform an online CLUSTER of all the clustered tables in the database `db`, and perform an online `VACUUM FULL` of all the non-clustered tables:
+
+```sh
+pg_repack db
+```
+
+Perform an online `VACUUM FULL` on the tables `table1` and `table2` in the database `db` (an eventual cluster index is ignored):
+
+```sh
+pg_repack --no-order --table table1 --table table2 db
+```
+
+Moving indexes to a tablespace on a faster volume increases performance of `SELECT` queries using these indexes
+drastically. `INSERT`s and `UPDATE`s of a table with indexes on a fast volume are also faster. This is very useful
+when the fast volume is small and can not accommodate all tables, as indexes are much smaller than tables.
+
+Move all indexes of table `table1` to tablespace `tbs`:
+
+```sh
+pg_repack -d db --table table1 --only-indexes --tablespace tbs
+```
+
+Move the specified index `idx` to tablespace `tbs`:
+
+```sh
+pg_repack -d db --index idx --tablespace tbs
+```
+
+See the [official pg_repack documentation](https://reorg.github.io/pg_repack/) for the full list of options.
+
+## Restrictions
+
+- pg_repack cannot reorganize temp tables.
+- pg_repack cannot cluster tables by GiST indexes.
+- You cannot perform DDL commands of the target tables except VACUUM or ANALYZE while pg_repack is working.
+ pg_repack holds an ACCESS SHARE lock on the target table to enforce this restriction.
+
+## Resources
+
+- [Official pg_repack documentation](https://reorg.github.io/pg_repack/)
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/database/extensions/pgroonga.mdx b/apps/docs/pages/guides/database/extensions/pgroonga.mdx
new file mode 100644
index 00000000000..f006857303c
--- /dev/null
+++ b/apps/docs/pages/guides/database/extensions/pgroonga.mdx
@@ -0,0 +1,113 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ id: 'pgroonga',
+ title: 'PGRoonga: Multilingual Full Text Search',
+ description: 'Full Text Search for multiple languages in PostgreSQL',
+}
+
+`PGroonga` is a PostgreSQL extension adding a full text search indexing method based on [Groonga](https://groonga.org). While native PostgreSQL supports full text indexing, it is limited to alphabet and digit based languages. `PGroonga` offers a wider range of character support making it viable for a superset of languages supported by PostgreSQL including Japanese, Chinese, etc.
+
+## Usage
+
+### Enable the extension
+
+
+
+
+1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
+2. Click on **Extensions** in the sidebar.
+3. Search for "pgroonga" and enable the extension.
+
+
+
+
+{/* prettier-ignore */}
+```sql
+-- Enable the "pgroonga" extension
+create extension pgroonga with schema extensions;
+
+-- Disable the "pgroonga" extension
+drop extension if exists pgroonga;
+```
+
+Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
+To disable an extension you can call `drop extension`.
+
+It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
+
+
+
+
+### Creating a full text search index
+
+Given a table with a `text` column:
+
+{/* prettier-ignore */}
+```sql
+create table memos (
+ id serial primary key,
+ content text
+);
+```
+
+We can index the column for full text search with a `pgroonga` index:
+
+{/* prettier-ignore */}
+```sql
+create index ix_memos_content ON memos USING pgroonga(content);
+```
+
+To test the full text index, we'll add some data.
+
+{/* prettier-ignore */}
+```sql
+insert into memos(content)
+values
+ ('PostgreSQL is a relational database management system.'),
+ ('Groonga is a fast full text search engine that supports all languages.'),
+ ('PGroonga is a PostgreSQL extension that uses Groonga as index.'),
+ ('There is groonga command.');
+```
+
+The PostgreSQL query planner is smart enough to know that, for extremely small tables, it's faster to scan the whole table rather than loading an index. To force the index to be used, we can disable sequential scans:
+
+{/* prettier-ignore */}
+```sql
+-- For testing only. Don't do this in production
+set enable_seqscan = off;
+```
+
+Now if we run an explain plan on a query filtering on `memos.content`:
+
+{/* prettier-ignore */}
+```sql
+explain select * from memos where content like '%engine%';
+
+ QUERY PLAN
+-----------------------------------------------------------------------------
+Index Scan using ix_memos_content on memos (cost=0.00..1.11 rows=1 width=36)
+ Index Cond: (content ~~ '%engine%'::text)
+(2 rows)
+```
+
+The pgroonga index is used to retrive the result set:
+
+```markdown
+| id | content |
+| --- | ------------------------------------------------------------------------ |
+| 2 | 'Groonga is a fast full text search engine that supports all languages.' |
+```
+
+## Resources
+
+- Official [PGroonga documentation](https://pgroonga.github.io/tutorial/)
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/database/extensions/rum.mdx b/apps/docs/pages/guides/database/extensions/rum.mdx
new file mode 100644
index 00000000000..bfe5ede32ee
--- /dev/null
+++ b/apps/docs/pages/guides/database/extensions/rum.mdx
@@ -0,0 +1,163 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ id: 'rum',
+ 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 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:
+
+- Phrase search
+- Text search with ranking by text distance operator
+- Text `SELECT`s with ordering by some non-indexed additional column e.g. by timestamp.
+
+RUM works best in scenarios when the possible keys are highly repeatable. I.e. all texts are composed of a
+limited amount of words, so per-lexeme indexing gives significant speed-up in searching texts containing word
+combinations or phrases.
+
+Main operators for ordering are:
+
+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
+
+## Usage
+
+### Enable the extension
+
+You can get started with rum by enabling the extension in your Supabase dashboard.
+
+
+
+
+1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
+2. Click on **Extensions** in the sidebar.
+3. Search for "rum" and enable the extension.
+
+
+
+
+```sql
+-- Example: enable the "rum" extension
+create extension rum with schema extensions;
+
+-- Example: disable the "rum" extension
+drop extension if exists rum;
+```
+
+
+
+
+### Syntax
+
+#### For type: tsvector
+
+To understand the following you may need first to see [Official PostgreSQL documentation on text
+search](https://www.postgresql.org/docs/current/functions-textsearch.html)
+
+`rum_tsvector_ops`
+
+```sql
+CREATE TABLE test_rum(t text, a tsvector);
+
+CREATE TRIGGER tsvectorupdate
+BEFORE UPDATE OR INSERT ON test_rum
+FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('a', 'pg_catalog.english', 't');
+
+INSERT INTO test_rum(t) VALUES ('The situation is most beautiful');
+INSERT INTO test_rum(t) VALUES ('It is a beautiful');
+INSERT INTO test_rum(t) VALUES ('It looks like a beautiful place');
+
+CREATE INDEX rumidx ON test_rum USING rum (a rum_tsvector_ops);
+```
+
+And we can execute `tsvector` selects with ordering by text distance operator:
+
+```sql
+SELECT t, a `<=>` to_tsquery('english', 'beautiful | place') AS rank
+ FROM test_rum
+ WHERE a @@ to_tsquery('english', 'beautiful | place')
+ ORDER BY a `<=>` to_tsquery('english', 'beautiful | place');
+ t | rank
+---------------------------------+---------
+ It looks like a beautiful place | 8.22467
+ The situation is most beautiful | 16.4493
+ It is a beautiful | 16.4493
+(3 rows)
+```
+
+`rum_tsvector_addon_ops`
+
+```sql
+CREATE TABLE tsts (id int, t tsvector, d timestamp);
+CREATE INDEX tsts_idx ON tsts USING rum (t rum_tsvector_addon_ops, d)
+ WITH (attach = 'd', to = 't');
+```
+
+Now we can execute the selects with ordering distance operator on attached column:
+
+```sql
+SELECT id, d, d `<=>` '2016-05-16 14:21:25' FROM tsts WHERE t @@ 'wr&qh' ORDER BY d `<=>` '2016-05-16 14:21:25' LIMIT 5;
+ id | d | ?column?
+-----+---------------------------------+---------------
+ 355 | Mon May 16 14:21:22.326724 2016 | 2.673276
+ 354 | Mon May 16 13:21:22.326724 2016 | 3602.673276
+ 371 | Tue May 17 06:21:22.326724 2016 | 57597.326724
+ 406 | Wed May 18 17:21:22.326724 2016 | 183597.326724
+ 415 | Thu May 19 02:21:22.326724 2016 | 215997.326724
+(5 rows)
+```
+
+#### For type: anyarray
+
+`rum_anyarray_ops`
+
+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[]);
+INSERT INTO test_array VALUES ('{}'), ('{0}'), ('{1,2,3,4}'), ('{1,2,3}'), ('{1,2}'), ('{1}');
+CREATE INDEX idx_array ON test_array USING rum (i rum_anyarray_ops);
+```
+
+Now we can execute the query using index scan:
+
+```sql
+SELECT * FROM test_array WHERE i && '{1}' ORDER BY i `<=>` '{1}' ASC;
+ i
+-----------
+ {1}
+ {1,2}
+ {1,2,3}
+ {1,2,3,4}
+(4 rows)
+```
+
+`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
+operator by attached column.
+
+## Limitations
+
+`RUM` has slower build and insert times than `GIN` due to:
+
+1. It is bigger due to the additional attributes stored in the index.
+2. It uses generic WAL records.
+
+## Resources
+
+- [Official RUM documentation](https://github.com/postgrespro/rum)
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/database/full-text-search.mdx b/apps/docs/pages/guides/database/full-text-search.mdx
index b8ef3825e3f..6e2ec9ca087 100644
--- a/apps/docs/pages/guides/database/full-text-search.mdx
+++ b/apps/docs/pages/guides/database/full-text-search.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'full-text-search',
title: 'Full Text Search',
description: 'How to use full text search in PostgreSQL.',
+ video: 'https://www.youtube.com/v/b-mgca_2Oe4',
}
Postgres has built-in functions to handle `Full Text Search` queries. This is like a "search engine" within Postgres.
diff --git a/apps/docs/pages/guides/database/functions.mdx b/apps/docs/pages/guides/database/functions.mdx
index 3c547cf93fd..fda28116abe 100644
--- a/apps/docs/pages/guides/database/functions.mdx
+++ b/apps/docs/pages/guides/database/functions.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'functions',
title: 'Database Functions',
description: 'Creating and using Postgres functions.',
+ video: 'https://www.youtube.com/v/MJZCCpCYEqk',
}
Postgres has built-in support for [SQL functions](https://www.postgresql.org/docs/current/sql-createfunction.html).
diff --git a/apps/docs/pages/guides/database/overview.mdx b/apps/docs/pages/guides/database/overview.mdx
index 7efa2ad7513..d4667ed82a3 100644
--- a/apps/docs/pages/guides/database/overview.mdx
+++ b/apps/docs/pages/guides/database/overview.mdx
@@ -34,7 +34,10 @@ You don't have to be a database expert to start using Supabase. Our table view m
Dig into the relationships within your data.
### Clone tables
@@ -42,7 +45,12 @@ Dig into the relationships within your data.
You can duplicate your tables, just like you would inside a spreadsheet.
### The SQL Editor
@@ -50,7 +58,12 @@ You can duplicate your tables, just like you would inside a spreadsheet.
Supabase comes with a SQL Editor. You can also save your favorite queries to run later!
### Additional features
@@ -74,7 +87,12 @@ To expand the functionality of your Postgres database, you can use extensions.
You can enable Postgres extensions with the click of a button within the Supabase dashboard.
[Learn more](/docs/guides/database/extensions) about all the extensions provided on Supabase.
diff --git a/apps/docs/pages/guides/database/replication.mdx b/apps/docs/pages/guides/database/replication.mdx
index e7c349ca91f..15b20d3331a 100644
--- a/apps/docs/pages/guides/database/replication.mdx
+++ b/apps/docs/pages/guides/database/replication.mdx
@@ -21,7 +21,12 @@ Replication is done through _publications_, a method of choosing which changes t
4. Control which tables broadcast changes by selecting **Source** and toggling each table.
## Create a publication
diff --git a/apps/docs/pages/guides/database/tables.mdx b/apps/docs/pages/guides/database/tables.mdx
index 65367022480..239e08147cd 100644
--- a/apps/docs/pages/guides/database/tables.mdx
+++ b/apps/docs/pages/guides/database/tables.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'tables',
title: 'Tables and Data',
description: 'Creating and using Postgres tables.',
+ video: 'https://www.youtube.com/v/TKwF3IGij5c',
}
Tables are where you store your data.
@@ -41,7 +42,12 @@ and run the SQL queries yourself.
1. Go to the [Table Editor](https://app.supabase.com/project/_/editor) page in the Dashboard.
diff --git a/apps/docs/pages/guides/database/webhooks.mdx b/apps/docs/pages/guides/database/webhooks.mdx
index ebbe58ade3d..9cada9989cb 100644
--- a/apps/docs/pages/guides/database/webhooks.mdx
+++ b/apps/docs/pages/guides/database/webhooks.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'webhooks',
title: 'Database Webhooks',
description: 'Trigger external payloads on database events.',
+ video: 'https://www.youtube.com/v/codAs9-NeHM',
}
Database Webhooks allow you to send real-time data from your database to another system whenever a table event occurs.
diff --git a/apps/docs/pages/guides/functions/cicd-workflow.mdx b/apps/docs/pages/guides/functions/cicd-workflow.mdx
index fd7826ddf0e..e168c6c7642 100644
--- a/apps/docs/pages/guides/functions/cicd-workflow.mdx
+++ b/apps/docs/pages/guides/functions/cicd-workflow.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'cicd-workflow',
title: 'CI / CD Workflow',
description: 'How to deploy Supabase Edge Functions with a CI / CD pipeline.',
+ video: 'https://www.youtube.com/v/6OMVWiiycLs',
}
As described in the Supabase CLI [Environments Guide](/docs/guides/cli/managing-environments), you can use the [`setup-cli` GitHub Action](https://github.com/marketplace/actions/supabase-cli-action) to run Supabase CLI commands in your GitHub Actions, for example to deploy a Supabase Edge Function:
diff --git a/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx b/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx
index 560b3d9e454..ef38552855f 100644
--- a/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx
+++ b/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'examples-cloudflare-turnstile',
title: 'Cloudflare Turnstile',
description: 'Protecting Forms with Cloudflare Turnstile.',
+ video: 'https://www.youtube.com/v/OwW0znboh60',
}
diff --git a/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx b/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx
new file mode 100644
index 00000000000..3b66a4affd9
--- /dev/null
+++ b/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx
@@ -0,0 +1,68 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ id: 'examples-postgres-on-the-edge',
+ title: 'Connect to Postgres',
+ description: 'Connecting to Postgres from Edge Functions.',
+}
+
+
+
+
+
+Supabase Edge Functions allow you to go beyond HTTP and can connect to your Postgres Database directly!
+
+```ts index.ts
+import * as postgres from 'https://deno.land/x/postgres@v0.14.2/mod.ts'
+import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'
+
+// Get the connection string from the environment variable "DATABASE_URL"
+const databaseUrl = Deno.env.get('DATABASE_URL')!
+
+// Create a database pool with three connections that are lazily established
+const pool = new postgres.Pool(databaseUrl, 3, true)
+
+serve(async (_req) => {
+ try {
+ // Grab a connection from the pool
+ const connection = await pool.connect()
+
+ try {
+ // Run a query
+ const result = await connection.queryObject`SELECT * FROM animals`
+ const animals = result.rows // [{ id: 1, name: "Lion" }, ...]
+ console.log(animals)
+
+ // Encode the result as pretty printed JSON
+ const body = JSON.stringify(
+ animals,
+ (key, value) => (typeof value === 'bigint' ? value.toString() : value),
+ 2
+ )
+
+ // Return the response with the correct content type header
+ return new Response(body, {
+ status: 200,
+ headers: {
+ 'Content-Type': 'application/json; charset=utf-8',
+ },
+ })
+ } finally {
+ // Release the connection back into the pool
+ connection.release()
+ }
+ } catch (err) {
+ console.error(err)
+ return new Response(String(err?.message ?? err), { status: 500 })
+ }
+})
+```
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/functions/examples/github-actions.mdx b/apps/docs/pages/guides/functions/examples/github-actions.mdx
index 58a85484ab9..94777f4366d 100644
--- a/apps/docs/pages/guides/functions/examples/github-actions.mdx
+++ b/apps/docs/pages/guides/functions/examples/github-actions.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'examples-github-actions',
title: 'GitHub Actions',
description: 'Deploying Edge Functions with GitHub Actions.',
+ video: 'https://www.youtube.com/v/l2KlzGrhB6w',
}
diff --git a/apps/docs/pages/guides/functions/quickstart.mdx b/apps/docs/pages/guides/functions/quickstart.mdx
index 9652a280493..e94aaa84244 100644
--- a/apps/docs/pages/guides/functions/quickstart.mdx
+++ b/apps/docs/pages/guides/functions/quickstart.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'Edge Functions Quickstart',
description: 'Globally distributed TypeScript Functions.',
sidebar_label: 'Quickstart',
+ video: 'https://www.youtube.com/v/rzglqRdZUQE',
}
Learn how to build an Edge Function locally and deploy it to the Supabase Platform in less than 7 minutes.
diff --git a/apps/docs/pages/guides/getting-started/features.mdx b/apps/docs/pages/guides/getting-started/features.mdx
index c1e1a0dcfc9..71fc2953aa1 100755
--- a/apps/docs/pages/guides/getting-started/features.mdx
+++ b/apps/docs/pages/guides/getting-started/features.mdx
@@ -96,11 +96,11 @@ Receive your database changes through websockets. [Docs](/docs/guides/realtime/p
### User Broadcasting
-Send messages between connected users through websockets. [Docs](/docs/guides/realtime#broadcast).
+Send messages between connected users through websockets. [Docs](/docs/guides/realtime/broadcast).
### User Presence
-Synchronize shared state across your users, including online status and typing indicators. [Docs](/docs/guides/realtime#presence).
+Synchronize shared state across your users, including online status and typing indicators. [Docs](/docs/guides/realtime/presence).
### Client libraries
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx
index b76748ad8aa..ae2870332c2 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx
@@ -62,7 +62,6 @@ import {
User,
} from '@supabase/supabase-js'
import { environment } from 'src/environments/environment'
-import { Database } from 'src/schema'
export interface Profile {
id?: string
@@ -136,7 +135,7 @@ Let's set up an Angular component to manage logins and sign ups. We'll use Magic
Create an **AuthComponent** with `ng g c auth` Angular CLI command.
```ts title=src/app/auth/auth.component.ts
-import { Component, OnInit } from '@angular/core'
+import { Component } from '@angular/core'
import { FormBuilder } from '@angular/forms'
import { SupabaseService } from '../supabase.service'
@@ -145,7 +144,7 @@ import { SupabaseService } from '../supabase.service'
templateUrl: './auth.component.html',
styleUrls: ['./auth.component.css'],
})
-export class AuthComponent implements OnInit {
+export class AuthComponent {
loading = false
signInForm = this.formBuilder.group({
@@ -157,8 +156,6 @@ export class AuthComponent implements OnInit {
private readonly formBuilder: FormBuilder
) {}
- ngOnInit(): void {}
-
async onSubmit(): Promise {
try {
this.loading = true
@@ -406,7 +403,7 @@ 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.
```ts title=src/app/avatar/avatar.component.ts
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'
+import { Component, EventEmitter, Input, Output } from '@angular/core'
import { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser'
import { SupabaseService } from '../supabase.service'
@@ -415,7 +412,7 @@ import { SupabaseService } from '../supabase.service'
templateUrl: './avatar.component.html',
styleUrls: ['./avatar.component.css'],
})
-export class AvatarComponent implements OnInit {
+export class AvatarComponent {
_avatarUrl: SafeResourceUrl | undefined
uploading = false
@@ -430,8 +427,6 @@ export class AvatarComponent implements OnInit {
constructor(private readonly supabase: SupabaseService, private readonly dom: DomSanitizer) {}
- ngOnInit(): void {}
-
async downloadImage(path: string) {
try {
const { data } = await this.supabase.downLoadImage(path)
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx
index 78c6c444d1e..a63a164a42b 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'Quickstart: Next.js',
description: 'Learn how to use Supabase in your Next App.',
sidebar_label: 'Next.js',
+ video: 'https://www.youtube.com/v/0Fs96oZ4se0',
}
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx
index 6fd481ea9cc..2f3e0e9f4a4 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx
@@ -129,7 +129,12 @@ or you can just copy/paste the SQL from below and run it yourself.
3. Click **Run**.
@@ -204,7 +209,12 @@ We just need to get the URL as well as the `anon`, `service_role` and `JWT_SECRE
2. Find your API `URL`, `anon`, and `service_role` keys on this page.
## Building the App
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx
index 78f236a99d9..614dac516e2 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx
@@ -24,7 +24,7 @@ Let's start building the Svelte app from scratch.
### Initialize a Svelte app
We can use the [SvelteKit Skeleton Project](https://kit.svelte.dev/docs) to initialize
-an app called `supabase-sveltekit` (for this tutorial you do not need TypeScript, ESLint, Prettier, or Playwright):
+an app called `supabase-sveltekit` (for this tutorial we will be using TypeScript):
```bash
npm init svelte@next supabase-sveltekit
diff --git a/apps/docs/pages/guides/integrations/fezto.mdx b/apps/docs/pages/guides/integrations/fezto.mdx
index 17d48db27f4..60007bc3ed3 100644
--- a/apps/docs/pages/guides/integrations/fezto.mdx
+++ b/apps/docs/pages/guides/integrations/fezto.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'fezto',
title: 'Frontend Zero to One',
description: 'Create an app automatically from your Supabase Postgres using OpenAPI',
+ video: 'https://www.youtube.com/v/GOC6a0_AlgI',
}
[Frontend Zero to One is](https://www.fezto.xyz) is a service which creates an app for your Supabase Postgres database on-the-fly without any drag and drop, using the OpenAPI spec provided by PostgREST.
diff --git a/apps/docs/pages/guides/integrations/flutterflow.mdx b/apps/docs/pages/guides/integrations/flutterflow.mdx
new file mode 100644
index 00000000000..b7a25f8d1a5
--- /dev/null
+++ b/apps/docs/pages/guides/integrations/flutterflow.mdx
@@ -0,0 +1,147 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ id: 'flutterflow',
+ title: 'FlutterFlow',
+ description:
+ 'FlutterFlow is a low-code tool that allows you to build Flutter apps incredibly fast.',
+ canonical: 'https://docs.flutterflow.io/actions/actions/backend-database/supabase',
+}
+
+[FlutterFlow](https://flutterflow.io/) is a low-code builder for developing native mobile applications using Flutter. You can use the simple drag-and-drop interface to build your app faster than traditional development.
+
+
+
+
+
+This guide gives you a quick overview of implementing basic CRUD operations using FlutterFlow and Supabase. You can find the full docs on FlutterFlow and Supabase [here](https://docs.flutterflow.io/actions/actions/backend-database/supabase).
+
+## Step 1: Connect FlutterFlow to Supabase
+
+Before we dive into the code, this guide assumes that you have the following ready:
+
+- [Supabase](https://database.new/) project created
+- Have setup tables in your Supabase project
+- [FlutterFlow](https://app.flutterflow.io/) project created
+
+You can then connect your Supabase project to your FlutterFlow project with the following steps:
+
+1. In your Supabase project, navigate to Project Settings > API. Copy the Project URL.
+2. Return to FlutterFlow, navigate to Settings and Integrations > Integrations > Supabase. Turn on the toggle (i.e., enable Supabase) and paste the API URL.
+3. Similarly, from the Supabase API section, copy the anon key (under Project API keys) and paste it inside the FlutterFlow > Settings and Integrations > Integrations > Supabase > Anon Key.
+4. Click on the Get Schema button. This will show the list of all tables with their schema (structure) created in Supabase.
+5. (Optional) If you have defined an Array for any Column Data Type in Supabase, you must set its type here. To do so, tap the "Click to set Array type" and choose the right one.
+
+
+
+## Step 2: Inserting rows
+
+Go to your project page on FlutterFlow and follow the steps below to define the Action to any widget.
+
+1. Select the Widget (e.g., Button) on which you want to define the action.
+2. Select Actions from the Properties panel (the right menu), and click Open. This will open an Action flow Editor in a new popup window.
+ 1. Click on + Add Action.
+ 2. On the right side, search and select the Supabase > Insert Row action.
+ 3. Set the Table to your table name (e.g., assignments).
+ 4. Under the Set Fields section, click on the + Add Field button.
+ 5. Click on the Field name and scroll down to find the Value Source dropdown and change it to From Variable.
+ 6. Click on UNSET and select Widget State > Name of the TextField.
+ 7. Similarly, add the field for the other UI elements.
+
+
+
+## Step 3: Selecting and displaying rows
+
+To query a Supabase table on a ListView:
+
+1. Select the ListView widget. Make sure you choose the ListView widget, not the ListTile.
+2. Select Backend Query from the properties panel (the right menu), and click Add Backend Query.
+3. Set the Query Type to Supabase Query.
+4. Select your Table from the dropdown list
+5. Set the Query Type to List of Rows.
+6. Optional: If you want to display the limited result, say, for example, you have thousands of entries, but you want to display only 100, you can specify the limit.
+7. Click Confirm.
+
+
+
+## Step 4: Updating rows
+
+Go to your project page on FlutterFlow and follow the steps below to define the Action to any widget.
+
+1. Select the Widget (e.g., Button) on which you want to define the action.
+2. Select Actions from the Properties panel (the right menu), and click Open. This will open an Action flow Editor in a new popup window.
+ 1. Click on + Add Action.
+ 2. On the right side, search and select the Supabase > Update Row action.
+ 3. Set the Table to your table name (e.g., assignments).
+ 4. Optional: If you want to get the rows after the update is finished, enable the Return Matching Rows option.
+ 5. Now, you must set the row you want to update. Usually, this is done by finding a row in a table that matches the current row ID. To do so, click + Add Filter button inside the Matching Rows section.
+ 1. Set the Field Name to the field that contains the IDs. Typically, this is the id column.
+ 2. Set the Relation to Equal To because you want to find a row with the exact id.
+ 3. Into the Value Source, you can select the From Variable and provide the id of the row for which you just updated values in the UI.
+ 6. Under the Set Fields section, click on the + Add Field button.
+ 7. Click on the field name.
+ 8. Scroll down to find the Value Source dropdown and change it to From Variable.
+ 9. Click on UNSET and select Widget State > Name of the TextField.
+ 10. Similarly, add the field for the other UI elements.
+
+## Step 5: Deleting rows
+
+Go to your project page on FlutterFlow and follow the steps below to define the Action to any widget.
+
+1. Select the Widget (e.g., Button) on which you want to define the action.
+2. Select Actions from the Properties panel (the right menu), and click Open. This will open an Action flow Editor in a new popup window.
+ 1. Click on + Add Action.
+ 2. On the right side, search and select the Supabase -> Delete Row action.
+ 3. Set the Table to your table name (e.g., assignments).
+ 4. Optional: Later, if you want to know which rows were deleted from a table, enable the Return Matching Rows option.
+ 5. Now, you must set the row you want to delete. Usually, this is done by finding a row in a table that matches the current row ID. To do so, click + Add Filter button inside the Matching Rows section.
+ 1. Set the Field Name to the field that contains the IDs. Typically, this is the id column.
+ 2. Set the Relation to Equal To because you want to find a row with the exact id.
+ 3. Into the Value Source, you can select the From Variable and provide the id of the row you want to delete.
+
+
+
+## Resources
+
+You can find more detailed guides on FlutterFlow’s docs.
+
+- [FlutterFlow Supabase available actions](https://docs.flutterflow.io/actions/actions/backend-database/supabase)
+- [Retrieving Data from Supabase on FlutterFlow](https://docs.flutterflow.io/data-and-backend/supabase/supabase-database/retrieving-data)
+- [Adding data to Supabase DB from FlutterFlow](https://docs.flutterflow.io/data-and-backend/supabase/supabase-database/adding-data)
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/integrations/keyri.mdx b/apps/docs/pages/guides/integrations/keyri.mdx
index 70d53e23374..6e607205669 100644
--- a/apps/docs/pages/guides/integrations/keyri.mdx
+++ b/apps/docs/pages/guides/integrations/keyri.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'Keyri',
description:
'QR authentication for an easy and flexible biometric solution across all platforms.',
+ video: 'https://www.youtube.com/v/jrjrcpc2PFQ',
}
Keyri can be used to incorporate sign-in-with-QR functionality into your Supabase app, allowing users to scan a QR code on your web app with your mobile app and be instantly logged into the web app without having to input any credentials.
diff --git a/apps/docs/pages/guides/integrations/onesignal.mdx b/apps/docs/pages/guides/integrations/onesignal.mdx
index 446242bd07c..3f270c6f60e 100644
--- a/apps/docs/pages/guides/integrations/onesignal.mdx
+++ b/apps/docs/pages/guides/integrations/onesignal.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'OneSignal',
description:
'OneSignal allows you to send cloud messages to your users. Combine OneSignal with your Supabase apps and you can reach out to your users whenever there is a change in your database.',
+ video: 'https://www.youtube.com/v/mw0DLwItue4',
}
[OneSignal](https://onesignal.com/) is a tool that allows you to send messages across different channels such as the following to keep your users engaged.
diff --git a/apps/docs/pages/guides/integrations/plasmic.mdx b/apps/docs/pages/guides/integrations/plasmic.mdx
index 2ca62ccabcb..f90eb871bcc 100644
--- a/apps/docs/pages/guides/integrations/plasmic.mdx
+++ b/apps/docs/pages/guides/integrations/plasmic.mdx
@@ -106,7 +106,7 @@ To tell Plasmic to look for your code components on your dev server, you’ll ne
export const resources = [
- // removing until the examples page is reworked
- // {
- // title: 'Examples',
- // hasLightIcon: true,
- // href: '/guides/resources/examples',
- // description: 'Official GitHub examples, curated content from the community, and more.',
- // },
+ {
+ title: 'Examples',
+ hasLightIcon: true,
+ href: '/guides/resources/examples',
+ description: 'Official GitHub examples, curated content from the community, and more.',
+ },
{
title: 'Glossary',
hasLightIcon: true,
@@ -111,6 +137,27 @@ export const migrationGuides = [
},
]
+export const postgres = [
+ {
+ title: 'Drop all tables in schema',
+ hasLightIcon: true,
+ href: '/guides/resources/postgres/dropping-all-tables-in-schema',
+ description: 'Delete all tables in a given schema.',
+ },
+ {
+ title: 'Select first row per group',
+ hasLightIcon: true,
+ href: '/guides/resources/postgres/first-row-in-group',
+ description: 'Retreive the first row in each distinct group.',
+ },
+ {
+ title: 'Print PostgreSQL version',
+ hasLightIcon: true,
+ href: '/guides/resources/postgres/which-version-of-postgres',
+ description: 'Find out which version of Postgres you are running.',
+ },
+]
+
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/examples.mdx b/apps/docs/pages/guides/resources/examples.mdx
similarity index 99%
rename from apps/docs/pages/guides/examples.mdx
rename to apps/docs/pages/guides/resources/examples.mdx
index 8c0697297f3..23b102fb216 100644
--- a/apps/docs/pages/guides/examples.mdx
+++ b/apps/docs/pages/guides/resources/examples.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'examples',
title: 'Examples and Resources',
description: 'Examples you can use to get started with Supabase',
+ video: 'https://www.youtube.com/v/7uKQBl9uZ00',
}
{/* */}
diff --git a/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx b/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx
index 51ab83dfb49..b2b5df2acd2 100644
--- a/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx
+++ b/apps/docs/pages/guides/resources/migrating-to-supabase/heroku.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'Migrate from Heroku to Supabase',
description: 'Migrate your Heroku Postgres database to Supabase.',
sidebar_label: 'Heroku',
+ video: 'https://www.youtube.com/v/xsRhPMphtZ4',
}
Supabase is one of the best [free alternatives to Heroku Postgres](https://supabase.com/alternatives/supabase-vs-heroku-postgres). This guide shows how to migrate your Heroku Postgres database to Supabase. This migration requires the [pg_dump](https://www.postgresql.org/docs/current/app-pgdump.html) and [psql](https://www.postgresql.org/docs/current/app-psql.html) CLI tools, which are installed automatically as part of the complete PostgreSQL installation package.
diff --git a/apps/docs/pages/guides/resources/postgres/dropping-all-tables-in-schema.mdx b/apps/docs/pages/guides/resources/postgres/dropping-all-tables-in-schema.mdx
new file mode 100644
index 00000000000..602db8f9822
--- /dev/null
+++ b/apps/docs/pages/guides/resources/postgres/dropping-all-tables-in-schema.mdx
@@ -0,0 +1,34 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ title: 'Drop all tables in a PostgreSQL schema',
+ description: 'Useful snippet for deleting all tables in a given schema',
+ footerHelpType: 'postgres',
+}
+
+Execute the following query to drop all tables in a given schema.
+Replace `my-schema-name` with the name of your schema. In Supabase, the default schema is `public`.
+
+
+
+This deletes all tables and their associated data. Ensure you have a recent [backup](/docs/guides/platform/backups) before proceeding.
+
+
+
+```sql
+do $$ declare
+ r record;
+begin
+ for r in (select tablename from pg_tables where schemaname = 'my-schema-name') loop
+ execute 'drop table if exists ' || quote_ident(r.tablename) || ' cascade';
+ end loop;
+end $$;
+```
+
+This query works by listing out all the tables in the given schema and then executing a `drop table` for each (hence the `for... loop`).
+
+You can run this query using the [SQL Editor](https://app.supabase.com/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).
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/resources/postgres/first-row-in-group.mdx b/apps/docs/pages/guides/resources/postgres/first-row-in-group.mdx
new file mode 100644
index 00000000000..ba0297f903c
--- /dev/null
+++ b/apps/docs/pages/guides/resources/postgres/first-row-in-group.mdx
@@ -0,0 +1,52 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ title: 'Select first row for each group in PostgreSQL',
+ description: 'PostgreSQL snippet for grabbing the first row in each distinct group by group',
+ footerHelpType: 'postgres',
+}
+
+Given a table `seasons`:
+
+| id | team | points |
+| --- | :-------: | -----: |
+| 1 | Liverpool | 82 |
+| 2 | Liverpool | 84 |
+| 3 | Brighton | 34 |
+| 4 | Brighton | 28 |
+| 5 | Liverpool | 79 |
+
+We want to find the rows containing the maximum number of points _per team_.
+
+The expected output we want is:
+
+| id | team | points |
+| --- | :-------: | -----: |
+| 3 | Brighton | 34 |
+| 2 | Liverpool | 84 |
+
+From the [SQL Editor](https://app.supabase.com/project/_/sql), you can run a query like:
+
+```sql
+select distinct
+ on (team) id,
+ team,
+ points
+from
+ seasons
+order BY
+ id,
+ points desc,
+ team;
+```
+
+The important bits here are:
+
+- The `desc` keyword to order the `points` from highest to lowest.
+- The `distinct` keyword that tells Postgres to only return a single row per team.
+
+This query can also be executed via `psql` or any other query editor if you prefer to [connect directly to the database](/docs/guides/database/connecting-to-postgres#direct-connections).
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/resources/postgres/which-version-of-postgres.mdx b/apps/docs/pages/guides/resources/postgres/which-version-of-postgres.mdx
new file mode 100644
index 00000000000..29bea3ab32b
--- /dev/null
+++ b/apps/docs/pages/guides/resources/postgres/which-version-of-postgres.mdx
@@ -0,0 +1,28 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ title: 'Print PostgreSQL version',
+ description: 'Useful snippet for finding out which version of postgres you are running',
+ footerHelpType: 'postgres',
+}
+
+It's important to know which version of PostgreSQL you are running as each major version has different features and may cause breaking changes. You may also need to update your schema when [upgrading](https://www.postgresql.org/docs/current/pgupgrade.html) or downgrading to a major Postgres version.
+
+Run the following query using the [SQL Editor](https://app.supabase.com/project/_/sql) in the Supabase Dashboard:
+
+```sql
+select
+ version ();
+```
+
+Which should return something like:
+
+```sql
+PostgreSQL 15.1 on aarch64-unknown-linux-gnu, compiled by gcc (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0, 64-bit
+```
+
+This query can also be executed via `psql` or any other query editor if you prefer to [connect directly to the database](/docs/guides/database/connecting-to-postgres#direct-connections).
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/guides/storage.mdx b/apps/docs/pages/guides/storage.mdx
index fd024d292c8..b9367046382 100644
--- a/apps/docs/pages/guides/storage.mdx
+++ b/apps/docs/pages/guides/storage.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'Storage',
description: 'Use Supabase to store and serve files.',
sidebar_label: 'Overview',
+ video: 'https://www.youtube.com/v/J9mTPY8rIXE',
}
Supabase Storage makes it simple to store and serve large files.
diff --git a/apps/docs/pages/guides/storage/access-control.mdx b/apps/docs/pages/guides/storage/access-control.mdx
index 4adfd73e135..5079e23aebc 100644
--- a/apps/docs/pages/guides/storage/access-control.mdx
+++ b/apps/docs/pages/guides/storage/access-control.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'storage-access-control',
title: 'Access Control',
description: 'Manage who can access your Supabase Storage files.',
+ video: 'https://www.youtube.com/v/4ERX__Y908k',
}
Supabase Storage is integrated with your [Postgres Database](/docs/guides/database).
diff --git a/apps/docs/pages/guides/storage/image-transformations.mdx b/apps/docs/pages/guides/storage/image-transformations.mdx
index 0200d777e6a..49c4b370d5c 100644
--- a/apps/docs/pages/guides/storage/image-transformations.mdx
+++ b/apps/docs/pages/guides/storage/image-transformations.mdx
@@ -5,6 +5,7 @@ export const meta = {
title: 'Storage Image Transformations',
description: 'Transform images with Storage',
sidebar_label: 'Image Transformations',
+ video: 'https://www.youtube.com/v/dLqSmxX3r7I',
}
Supabase Storage offers the functionality to transform and resize images dynamically. Any image stored in your buckets can be transformed and optimized for fast delivery.
@@ -103,10 +104,8 @@ To get started, create a `supabase-image-loader.js` file in your NextJS project
```ts
const projectId = '' // your supabase project id
-export default function supabaseLoader({ src, width, height, quality }) {
- return `https://${projectId}.supabase.co/storage/v1/render/image/public/${src}?width=${width}&height=${
- height || 0
- }&quality=${quality || 75}`
+export default function supabaseLoader({ src, width, quality }) {
+ return `https://${projectId}.supabase.co/storage/v1/render/image/public/${src}?width=${width}&quality=${quality || 75}`
}
```
diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx
index 766c8a04806..d33020220ed 100644
--- a/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx
+++ b/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'auth-deep-dive-jwts',
title: 'Part One: JWTs',
description: 'Supabase Auth Deep Dive Part 1 - JWTs',
+ video: 'https://www.youtube.com/v/v3Exg5YpJvE',
}
### About
diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx
index 96a643aa696..c2b91673f74 100644
--- a/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx
+++ b/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'auth-google-oauth',
title: 'Part Five: Google Oauth',
description: 'Supabase Deep Dive Part 5: Google OAuth Provider',
+ video: 'https://www.youtube.com/v/_XM9ziOzWk4',
}
### About
diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx
index 902fbe6f8be..636eef09903 100644
--- a/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx
+++ b/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'auth-policies',
title: 'Part Three: Policies',
description: 'Supabase Auth Deep Dive Part 3: User Based Access Policies',
+ video: 'https://www.youtube.com/v/0LvCOlELs5U',
}
### About
diff --git a/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx
index 66687b36a7f..95a03060bc9 100644
--- a/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx
+++ b/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx
@@ -4,6 +4,7 @@ export const meta = {
id: 'auth-row-level-security',
title: 'Part Two: Row Level Security',
description: 'Supabase Auth Deep Dive Part Two - Row Level Security',
+ video: 'https://www.youtube.com/v/qY_iQ10IUhs',
}
### About
diff --git a/apps/docs/public/img/integrations/logos/flutterflow_logo.png b/apps/docs/public/img/integrations/logos/flutterflow_logo.png
new file mode 100644
index 00000000000..189e7ddc37d
Binary files /dev/null and b/apps/docs/public/img/integrations/logos/flutterflow_logo.png differ
diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml
index 2e86001d252..3e833c6253e 100644
--- a/apps/docs/public/sitemap.xml
+++ b/apps/docs/public/sitemap.xml
@@ -6,12 +6,6 @@
0.5
-
- https://supabase.com/docs/getting-started
- weekly
- 0.5
-
-
https://supabase.com/docs/indexweekly
@@ -30,6 +24,12 @@
0.5
+
+ https://supabase.com/docs/guides/cli
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/databaseweekly
@@ -91,7 +91,7 @@
- https://supabase.com/docs/guides/tutorials
+ https://supabase.com/docs/reference/indexweekly0.5
@@ -108,24 +108,6 @@
0.5
-
- https://supabase.com/docs/new/auth
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/reference/index
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/tutorials/nextjs
- weekly
- 0.5
-
-
https://supabase.com/docs/guides/api/generating-typesweekly
@@ -204,6 +186,18 @@
0.5
+
+ https://supabase.com/docs/guides/cli/local-development
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/cli/managing-environments
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/database/arraysweekly
@@ -295,13 +289,19 @@
- https://supabase.com/docs/guides/functions/auth
+ https://supabase.com/docs/guides/getting-started/architectureweekly0.5
- https://supabase.com/docs/guides/functions/best-practices
+ https://supabase.com/docs/guides/getting-started/features
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/authweekly0.5
@@ -312,6 +312,30 @@
0.5
+
+ https://supabase.com/docs/guides/functions/cors
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/debugging
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/import-maps
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/local-development
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/functions/quickstartweekly
@@ -319,13 +343,13 @@
- https://supabase.com/docs/guides/getting-started/architecture
+ https://supabase.com/docs/guides/functions/schedule-functionsweekly0.5
- https://supabase.com/docs/guides/getting-started/features
+ https://supabase.com/docs/guides/functions/secretsweekly0.5
@@ -390,6 +414,18 @@
0.5
+
+ https://supabase.com/docs/guides/integrations/flutterflow
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/integrations/illa
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/integrations/integrationsweekly
@@ -414,6 +450,12 @@
0.5
+
+ https://supabase.com/docs/guides/integrations/picket
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/integrations/plasmicweekly
@@ -510,6 +552,12 @@
0.5
+
+ https://supabase.com/docs/guides/platform/http-status-codes
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/platform/logsweekly
@@ -552,6 +600,12 @@
0.5
+
+ https://supabase.com/docs/guides/platform/troubleshooting
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/realtime/postgres-changesweekly
@@ -577,7 +631,7 @@
- https://supabase.com/docs/guides/resources/supabase-cli
+ https://supabase.com/docs/guides/self-hosting/dockerweekly0.5
@@ -612,12 +666,6 @@
0.5
-
- https://supabase.com/docs/guides/self-hosting/docker
- weekly
- 0.5
-
-
https://supabase.com/docs/learn/auth-deep-dive/auth-deep-dive-jwtsweekly
@@ -648,6 +696,180 @@
0.5
+
+ https://supabase.com/docs/guides/database/extensions/http
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/database/extensions/pgcron
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/database/extensions/pgnet
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/database/extensions/pgtap
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/database/extensions/plv8
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/database/extensions/postgis
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/database/extensions/rum
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/database/extensions/uuid-ossp
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/quickstarts/flutter
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/quickstarts/nextjs
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/quickstarts/nuxtjs
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/quickstarts/reactjs
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/quickstarts/solidjs
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/quickstarts/sveltekit
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/quickstarts/vue
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-angular
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-expo
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-flutter
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-angular
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-react
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-vue
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-nextjs
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-nuxt-3
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-react
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-redwoodjs
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-solidjs
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-svelte
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-sveltekit
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/getting-started/tutorials/with-vue-3
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/auth/auth-helpers/auth-uiweekly
@@ -696,6 +918,108 @@
0.5
+
+ https://supabase.com/docs/guides/functions/examples/cloudflare-turnstile
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/examples/connect-to-postgres
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/examples/github-actions
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/examples/og-image
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/examples/storage-caching
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/examples/stripe-webhooks
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/functions/examples/telegram-bot
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-storage
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/resources/migrating-to-supabase/firestore-data
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/resources/migrating-to-supabase/heroku
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/self-hosting/realtime/config
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/platform/sso/azure
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/platform/sso/gsuite
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/platform/sso/okta
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/self-hosting/auth/config
+ weekly
+ 0.5
+
+
+
+ https://supabase.com/docs/guides/self-hosting/storage/config
+ weekly
+ 0.5
+
+
https://supabase.com/docs/guides/auth/social-login/auth-appleweekly
@@ -798,228 +1122,6 @@
0.5
-
- https://supabase.com/docs/guides/database/extensions/http
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/database/extensions/pgcron
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/database/extensions/pgnet
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/database/extensions/pgtap
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/database/extensions/plv8
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/database/extensions/postgis
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/database/extensions/uuid-ossp
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-angular
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-expo
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-flutter
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-angular
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-react
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-ionic-vue
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-nextjs
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-nuxt-3
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-react
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-redwoodjs
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-solidjs
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-svelte
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-sveltekit
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/tutorials/with-vue-3
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/functions/examples/og-image
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/quickstarts/nextjs
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/quickstarts/nuxtjs
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/getting-started/quickstarts/reactjs
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/platform/sso/azure
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/platform/sso/gsuite
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/platform/sso/okta
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/resources/supabase-cli/local-development
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/resources/supabase-cli/managing-environments
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/self-hosting/auth/config
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-storage
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/resources/migrating-to-supabase/firestore-data
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/resources/migrating-to-supabase/heroku
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/self-hosting/realtime/config
- weekly
- 0.5
-
-
-
- https://supabase.com/docs/guides/self-hosting/storage/config
- weekly
- 0.5
-
-
https://supabase.com/docs/reference/javascript/initializingweekly
@@ -1443,7 +1545,7 @@
- https://supabase.com/docs/reference/javascript/auth-admin-invoke
+ https://supabase.com/docs/reference/javascript/functions-invokeweekly0.5
@@ -1677,7 +1779,7 @@
- https://supabase.com/docs/reference/javascript/v1/auth-admin-invoke
+ https://supabase.com/docs/reference/javascript/v1/functions-invokeweekly0.5
@@ -2018,6 +2120,12 @@
0.5
+
+ https://supabase.com/docs/reference/dart/initializing
+ weekly
+ 0.5
+
+
https://supabase.com/docs/reference/dart/auth-signupweekly
@@ -2085,7 +2193,7 @@
- https://supabase.com/docs/reference/dart/auth-admin-invoke
+ https://supabase.com/docs/reference/dart/functions-invokeweekly0.5
@@ -2493,7 +2601,7 @@
- https://supabase.com/docs/reference/dart/v0/auth-admin-invoke
+ https://supabase.com/docs/reference/dart/v0/functions-invokeweekly0.5
@@ -2895,7 +3003,7 @@
- https://supabase.com/docs/reference/dart/v0/auth-admin-invoke
+ https://supabase.com/docs/reference/dart/v0/functions-invokeweekly0.5
@@ -3446,6 +3554,12 @@
0.5
+
+ https://supabase.com/docs/reference/cli/supabase-functions-download
+ weekly
+ 0.5
+
+
https://supabase.com/docs/reference/cli/supabase-functions-deployweekly
diff --git a/apps/docs/public/videos/guides/integrations/flutterflow/connect-flutterflow-to-supabase.mp4 b/apps/docs/public/videos/guides/integrations/flutterflow/connect-flutterflow-to-supabase.mp4
new file mode 100644
index 00000000000..ea539a1b3e5
Binary files /dev/null and b/apps/docs/public/videos/guides/integrations/flutterflow/connect-flutterflow-to-supabase.mp4 differ
diff --git a/apps/docs/public/videos/guides/integrations/flutterflow/delete.mp4 b/apps/docs/public/videos/guides/integrations/flutterflow/delete.mp4
new file mode 100644
index 00000000000..ae82cf46081
Binary files /dev/null and b/apps/docs/public/videos/guides/integrations/flutterflow/delete.mp4 differ
diff --git a/apps/docs/public/videos/guides/integrations/flutterflow/insert.mp4 b/apps/docs/public/videos/guides/integrations/flutterflow/insert.mp4
new file mode 100644
index 00000000000..b72a940c825
Binary files /dev/null and b/apps/docs/public/videos/guides/integrations/flutterflow/insert.mp4 differ
diff --git a/apps/docs/public/videos/guides/integrations/flutterflow/select.mp4 b/apps/docs/public/videos/guides/integrations/flutterflow/select.mp4
new file mode 100644
index 00000000000..e3b0e8ae0c4
Binary files /dev/null and b/apps/docs/public/videos/guides/integrations/flutterflow/select.mp4 differ
diff --git a/apps/www/_blog/2020-06-01-supabase-alpha-may-2020.mdx b/apps/www/_blog/2020-06-01-supabase-alpha-may-2020.mdx
index 2d04b6b60b8..afacbae0458 100644
--- a/apps/www/_blog/2020-06-01-supabase-alpha-may-2020.mdx
+++ b/apps/www/_blog/2020-06-01-supabase-alpha-may-2020.mdx
@@ -9,6 +9,7 @@ authorURL: https://github.com/kiwicopple
tags:
- supabase
date: '06-01-2020'
+video: https://www.youtube.com/v/e4qXmcEFaUs
---
It has been a monster month at [Supabase](/) and we're back with a video update. It's a longer video this month because we have a couple of housekeeping items.
diff --git a/apps/www/_blog/2020-08-02-supabase-alpha-july-2020.mdx b/apps/www/_blog/2020-08-02-supabase-alpha-july-2020.mdx
index c9042608cc0..6d5847735c1 100644
--- a/apps/www/_blog/2020-08-02-supabase-alpha-july-2020.mdx
+++ b/apps/www/_blog/2020-08-02-supabase-alpha-july-2020.mdx
@@ -41,7 +41,10 @@ We've made some massive improvements to our Table Editor that we're excited to s
Last month we made it easy to drill into your table relationships. This month, we make it possible to drill multiple levels deep.
#### Add, delete, and download rows
@@ -49,7 +52,10 @@ Last month we made it easy to drill into your table relationships. This month, w
We're making it easier to manipulate your data. Next month, you'll be able to add and remove columns directly from the Table view.
### New Postgres Extensions
diff --git a/apps/www/_blog/2020-08-05-supabase-auth.mdx b/apps/www/_blog/2020-08-05-supabase-auth.mdx
index 1b908510843..90b5a7b5e50 100644
--- a/apps/www/_blog/2020-08-05-supabase-auth.mdx
+++ b/apps/www/_blog/2020-08-05-supabase-auth.mdx
@@ -37,7 +37,13 @@ Supabase Auth provides all the backend services you need to authenticate and aut
Supabase makes it simple to onboard your users with our new `supabase.auth.signUp()` and `supabase.auth.signIn()` [functions](/docs/guides/auth).
### Row Level Security
@@ -45,7 +51,13 @@ Supabase makes it simple to onboard your users with our new `supabase.auth.signU
Authentication only gets you so far. When you need granular authorization rules, nothing beats PostgreSQL's [Row Level Security](https://www.postgresql.org/docs/current/ddl-rowsecurity.html). Supabase makes it simple to turn RLS on and off.
### Policies
@@ -53,7 +65,13 @@ Authentication only gets you so far. When you need granular authorization rules,
[Policies](https://www.postgresql.org/docs/current/sql-createpolicy.html) are PostgreSQL's rule engine. They are incredibly powerful and flexible, allowing you to write complex SQL rules which fit your unique business needs.
With policies, your database becomes the rules engine. Instead of repetitively filtering your queries, like this ...
diff --git a/apps/www/_blog/2020-09-03-supabase-alpha-august-2020.mdx b/apps/www/_blog/2020-09-03-supabase-alpha-august-2020.mdx
index ce57ec62933..e20bf8a6a58 100644
--- a/apps/www/_blog/2020-09-03-supabase-alpha-august-2020.mdx
+++ b/apps/www/_blog/2020-09-03-supabase-alpha-august-2020.mdx
@@ -31,7 +31,13 @@ Watch a full demo:
Set up tables and columns directly from the table view.
### Invite your team
@@ -39,7 +45,13 @@ Set up tables and columns directly from the table view.
You can now invite team members to your organisation.
### Auth: Email Confirmations
@@ -47,7 +59,13 @@ You can now invite team members to your organisation.
You can now enable Email Confirmations for new users. This can be toggled on or off and the template for this email can be edited via the dashboard.
### TypeScript support
diff --git a/apps/www/_blog/2020-10-03-supabase-alpha-september-2020.mdx b/apps/www/_blog/2020-10-03-supabase-alpha-september-2020.mdx
index 4a803ba8360..f30c537eb23 100644
--- a/apps/www/_blog/2020-10-03-supabase-alpha-september-2020.mdx
+++ b/apps/www/_blog/2020-10-03-supabase-alpha-september-2020.mdx
@@ -38,7 +38,12 @@ We've released OAuth logins! You can now enable third-party logins on your app f
You can duplicate your tables, just like you would inside a spreadsheet.
### Enable and disable extensions
@@ -46,7 +51,12 @@ You can duplicate your tables, just like you would inside a spreadsheet.
Extensions are easier to use. You can enable Postgres extensions with the click of a button.
### Save your favorite queries
@@ -54,7 +64,12 @@ Extensions are easier to use. You can enable Postgres extensions with the click
The SQL editor now stores your query history in your browser. You can also save your favorite queries to run later!
### GitHub Discussions
diff --git a/apps/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx b/apps/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx
index 42ed611f260..9e4cc3dc193 100644
--- a/apps/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx
+++ b/apps/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx
@@ -10,6 +10,7 @@ image: supabase-october-2020.png
tags:
- supabase
date: '11-02-2020'
+video: https://www.youtube.com/v/1gNDMMsUPI0
---
We're now 8 months into building Supabase. We're focused on performance, stability, and reliability but that hasn't prevented us from shipping some great features.
diff --git a/apps/www/_blog/2020-12-01-supabase-alpha-november-2020.mdx b/apps/www/_blog/2020-12-01-supabase-alpha-november-2020.mdx
index 851b05010b9..7910f61bc42 100644
--- a/apps/www/_blog/2020-12-01-supabase-alpha-november-2020.mdx
+++ b/apps/www/_blog/2020-12-01-supabase-alpha-november-2020.mdx
@@ -10,6 +10,7 @@ image: supabase-november-2020.png
tags:
- supabase
date: '12-01-2020'
+video: https://www.youtube.com/v/unC_de7iytA
---
We've been building for 9 months now, and we're getting even closer to Beta.
diff --git a/apps/www/_blog/2020-12-02-case-study-monitoro.mdx b/apps/www/_blog/2020-12-02-case-study-monitoro.mdx
index 72b5d324b96..4bfceaf4e42 100644
--- a/apps/www/_blog/2020-12-02-case-study-monitoro.mdx
+++ b/apps/www/_blog/2020-12-02-case-study-monitoro.mdx
@@ -11,6 +11,7 @@ tags:
- case-study
- no-code
date: '12-02-2020'
+video: https://www.youtube.com/v/8A6_pg41M2s
---
Omar Kamali is the founder of [Monitoro](https://www.monitoro.xyz/), a service for scraping countless websites 24/7 to notify customers when these websites change. To create this product, Monitoro's team needed to handle massive data throughput whilst ensuring the product was reliable and resilient to satisfy a rapidly growing user base.
diff --git a/apps/www/_blog/2020-12-13-supabase-dashboard-performance.mdx b/apps/www/_blog/2020-12-13-supabase-dashboard-performance.mdx
index af301f4309a..3cfbdb4fcd8 100644
--- a/apps/www/_blog/2020-12-13-supabase-dashboard-performance.mdx
+++ b/apps/www/_blog/2020-12-13-supabase-dashboard-performance.mdx
@@ -74,7 +74,12 @@ Thanks to some skilled haxors (well, weak passwords mainly) we had crypto miners
The spreadsheet import is triggered when the user is creating a new table. However the code was previously loaded every time the page was visited - even when a new table was not being created. This made it a good candidate for lazy loading. Using [Next.js dynamic imports](https://nextjs.org/docs/advanced-features/dynamic-import) we are able to load this component (313 kb brotlied) dynamically, whenever the user clicks the "Add content" button.
We use the same technique to lazy load some Lottie animations which are relatively large.
diff --git a/apps/www/_blog/2021-01-02-supabase-beta-december-2020.mdx b/apps/www/_blog/2021-01-02-supabase-beta-december-2020.mdx
index 507b63ff479..91bcdeb34ee 100644
--- a/apps/www/_blog/2021-01-02-supabase-beta-december-2020.mdx
+++ b/apps/www/_blog/2021-01-02-supabase-beta-december-2020.mdx
@@ -11,6 +11,7 @@ thumb: supabase-december-2020.png
tags:
- supabase
date: '01-02-2021'
+video: https://www.youtube.com/v/ofSm4BJkZ1g
---
After 10 hectic months of building, Supabase is now in Beta.
@@ -40,7 +41,12 @@ We spent months working on Performance, Security, and Reliability. Read more on
Add comments and descriptions to your Tables directly from our auto-generated docs. Descriptions are stored as PostgreSQL comments (https://postgresql.org/docs/current/sql-comment.html), and are exposed over your OpenAPI spec.
### Table View now has realtime changes
@@ -48,7 +54,12 @@ Add comments and descriptions to your Tables directly from our auto-generated do
Any updates that happen to your database are reflected in the Table View immediately.
### Table Pagination
@@ -56,7 +67,12 @@ Any updates that happen to your database are reflected in the Table View immedia
Our table view now has pagination - better for working with large data sets.
### Supabase raised a Seed Round
diff --git a/apps/www/_blog/2021-02-02-supabase-beta-january-2021.mdx b/apps/www/_blog/2021-02-02-supabase-beta-january-2021.mdx
index d549beff71a..10e86ed878e 100644
--- a/apps/www/_blog/2021-02-02-supabase-beta-january-2021.mdx
+++ b/apps/www/_blog/2021-02-02-supabase-beta-january-2021.mdx
@@ -11,6 +11,7 @@ thumb: supabase-january-2021.png
tags:
- supabase
date: '02-02-2021'
+video: https://www.youtube.com/v/DlybOLANG4s
---
New year, new features. We've been busy at Supabase during January and our community has been even busier. Here's a few things you'll find interesting.
diff --git a/apps/www/_blog/2021-03-02-supabase-beta-february-2021.mdx b/apps/www/_blog/2021-03-02-supabase-beta-february-2021.mdx
index 63cc53838f8..2a14b71e615 100644
--- a/apps/www/_blog/2021-03-02-supabase-beta-february-2021.mdx
+++ b/apps/www/_blog/2021-03-02-supabase-beta-february-2021.mdx
@@ -10,6 +10,7 @@ image: /images/blog/release-feb-2021.jpg
tags:
- release-notes
date: '03-02-2021'
+video: https://www.youtube.com/v/h-ses99G45g
---
Supabase is an open source Firebase alternative. We've now been building for one year. Here's what we released last month.
diff --git a/apps/www/_blog/2021-03-11-using-supabase-replit.mdx b/apps/www/_blog/2021-03-11-using-supabase-replit.mdx
index 4b609ee47f1..e0856ab9753 100644
--- a/apps/www/_blog/2021-03-11-using-supabase-replit.mdx
+++ b/apps/www/_blog/2021-03-11-using-supabase-replit.mdx
@@ -13,6 +13,7 @@ tags:
- node-js
- postgres
date: '03-11-2021'
+video: https://www.youtube.com/v/lQ5iIxaYduI
---
[Replit.com](http://replit.com) is an awesome new browser based IDE where you can code alone or collaboratively with friends using their awesome multiplayer features! It's particularly useful for education, and sharing code examples with others.
diff --git a/apps/www/_blog/2021-04-06-supabase-beta-march-2021.mdx b/apps/www/_blog/2021-04-06-supabase-beta-march-2021.mdx
index 7d0618917e9..ba28fa69618 100644
--- a/apps/www/_blog/2021-04-06-supabase-beta-march-2021.mdx
+++ b/apps/www/_blog/2021-04-06-supabase-beta-march-2021.mdx
@@ -10,6 +10,7 @@ thumb: march-2021/release-mar-2021.jpg
tags:
- release-notes
date: '2021-04-06'
+video: https://www.youtube.com/v/TtLxxaYE1rA
---
Launch week, Storage, Supabase CLI, Connection Pooling, Supabase UI, and Pricing. Here's what we released last month.
diff --git a/apps/www/_blog/2021-05-03-supabase-beta-april-2021.mdx b/apps/www/_blog/2021-05-03-supabase-beta-april-2021.mdx
index e7d3215ca92..fb40d53ea65 100644
--- a/apps/www/_blog/2021-05-03-supabase-beta-april-2021.mdx
+++ b/apps/www/_blog/2021-05-03-supabase-beta-april-2021.mdx
@@ -10,6 +10,7 @@ thumb: april-2021/release-apr-2021.jpg
tags:
- release-notes
date: '2021-05-05'
+video: https://www.youtube.com/v/uWJmUTCFdak
---
This month was a "gardening" month for Supabase. The team focused on stability, security, and community support.
diff --git a/apps/www/_blog/2021-06-02-supabase-beta-may-2021.mdx b/apps/www/_blog/2021-06-02-supabase-beta-may-2021.mdx
index b81565782e5..6469fa46f1d 100644
--- a/apps/www/_blog/2021-06-02-supabase-beta-may-2021.mdx
+++ b/apps/www/_blog/2021-06-02-supabase-beta-may-2021.mdx
@@ -10,6 +10,7 @@ thumb: 2021-may/release-may-2021.jpg
tags:
- release-notes
date: '2021-06-02'
+video: https://www.youtube.com/v/qETcl3SUfzU
---
Apple & Twitter Logins, Supabase Grid, Go & Swift Libraries. Lots of great stuff to try out this month.
diff --git a/apps/www/_blog/2021-07-02-supabase-beta-june-2021.mdx b/apps/www/_blog/2021-07-02-supabase-beta-june-2021.mdx
index 2d4e0ca9bde..d42f3c7bbb6 100644
--- a/apps/www/_blog/2021-07-02-supabase-beta-june-2021.mdx
+++ b/apps/www/_blog/2021-07-02-supabase-beta-june-2021.mdx
@@ -11,6 +11,7 @@ tags:
- release-notes
date: '2021-06-02'
toc_depth: 3
+video: https://www.youtube.com/v/m3yRPNyYolk
---
Supabase is gearing up for another Launch Week on July the 26th. Until then, here's a few new things to try.
diff --git a/apps/www/_blog/2021-07-27-storage-beta.mdx b/apps/www/_blog/2021-07-27-storage-beta.mdx
index f416eb38feb..a6a5fb30f63 100644
--- a/apps/www/_blog/2021-07-27-storage-beta.mdx
+++ b/apps/www/_blog/2021-07-27-storage-beta.mdx
@@ -21,7 +21,7 @@ Clients can use the `Content-Range` HTTP header to request specific parts of a f
To simplify pricing, we've merged the “Pro” and “Pay as you go” tiers and introduced monthly spend caps to avoid nasty billing surprises.
@@ -136,7 +141,12 @@ We're also retaining our soft limits while we manage the transition to granular
### Database Add-ons
Today we're releasing self-serve Database Add-ons.
@@ -149,7 +159,12 @@ Today, Database Add-ons are available for a small set of customers. We will prog
### New Log Explorer
Today we're releasing a brand new [Log Explorer](/docs/guides/platform/logs) in the Supabase Dashboard.
diff --git a/apps/www/_blog/2022-03-31-supabase-edge-functions.mdx b/apps/www/_blog/2022-03-31-supabase-edge-functions.mdx
index fe17cc6ef21..eb07db93572 100644
--- a/apps/www/_blog/2022-03-31-supabase-edge-functions.mdx
+++ b/apps/www/_blog/2022-03-31-supabase-edge-functions.mdx
@@ -9,6 +9,7 @@ tags:
- functions
date: '2022-03-31'
toc_depth: 3
+video: https://www.youtube.com/v/rzglqRdZUQE
---
Today we're launching one of our [most](https://twitter.com/lau_cazanove/status/1506530181946691592) [requested](https://twitter.com/edgarasben/status/1506653203458363393) and [highly-](https://twitter.com/runjep/status/1507462077216088069)[anticipated](https://twitter.com/marcopolotwo/status/1506431782362632195) [features](https://github.com/supabase/supabase/discussions/4269) — Edge Functions. Edge Functions let you execute Typescript code close to your users, no matter where they're located.
@@ -80,7 +81,7 @@ We've [extended the Supabase CLI](https://supabase.com/docs/guides/local-develop
Our observability pipeline has been built [using Logflare](https://supabase.com/blog/supabase-acquires-logflare). Structured logs from your Edge Functions get sent to Logflare, which also processes them into metrics. Your Supabase Dashboard is able to reach out to Logflare endpoints, and with some of the [(not so) secret sauce](https://supabase.com/blog/supabase-studio) from our front-end team, you get responsive charts and logs for your Edge Functions.
diff --git a/apps/www/_blog/2022-04-01-supabase-realtime-with-multiplayer-features.mdx b/apps/www/_blog/2022-04-01-supabase-realtime-with-multiplayer-features.mdx
index 63600d109ee..584e9d26dc8 100644
--- a/apps/www/_blog/2022-04-01-supabase-realtime-with-multiplayer-features.mdx
+++ b/apps/www/_blog/2022-04-01-supabase-realtime-with-multiplayer-features.mdx
@@ -9,6 +9,7 @@ tags:
- realtime
date: '2022-04-01T22:30:00'
toc_depth: 3
+video: https://www.youtube.com/v/BelYEMJ2N00
---
Today is the 1st of April, or April Fool's Day, but I like to think of today as Supabase Realtime Day where we announce and demo the next version of Realtime.
diff --git a/apps/www/_blog/2022-07-13-supabase-auth-helpers-with-sveltekit-support.mdx b/apps/www/_blog/2022-07-13-supabase-auth-helpers-with-sveltekit-support.mdx
index 66f222c9750..8fcd5b9ff1d 100644
--- a/apps/www/_blog/2022-07-13-supabase-auth-helpers-with-sveltekit-support.mdx
+++ b/apps/www/_blog/2022-07-13-supabase-auth-helpers-with-sveltekit-support.mdx
@@ -8,6 +8,7 @@ tags:
- release-notes
date: '2022-07-13'
toc_depth: 9
+video: https://www.youtube.com/v/VgYPGOr3F-4
---
We've been hard at work making an Auth experience that is as smooth as possible for Supabase developers. One of the challenges has been creating a simple experience for server-side rendering (SSR) environments. We [previously released](https://supabase.com/blog/community-day#server-side-auth-for-nextjs-and-nuxt-sveltekit-and-remix-coming-soon) our Auth Helpers libraries with support for React and NextJS, and today we’re announcing some exciting updates.
diff --git a/apps/www/_blog/2022-08-10-launch-week-5-hackathon.mdx b/apps/www/_blog/2022-08-10-launch-week-5-hackathon.mdx
index 818acc5081d..dd12a99bee8 100644
--- a/apps/www/_blog/2022-08-10-launch-week-5-hackathon.mdx
+++ b/apps/www/_blog/2022-08-10-launch-week-5-hackathon.mdx
@@ -9,6 +9,7 @@ tags:
- hackathon
date: '2022-08-10'
toc_depth: 3
+video: https://www.youtube.com/v/rI3Ik7GyYEw
---
# The Supabase Open Source Hackathon
diff --git a/apps/www/_blog/2022-08-12-supabase-series-b.mdx b/apps/www/_blog/2022-08-12-supabase-series-b.mdx
index 24893bdbec3..0e6c33cc749 100644
--- a/apps/www/_blog/2022-08-12-supabase-series-b.mdx
+++ b/apps/www/_blog/2022-08-12-supabase-series-b.mdx
@@ -8,6 +8,7 @@ tags:
- supabase
date: '2022-08-12'
toc_depth: 3
+video: https://www.youtube.com/v/4t_63HT3rZY
---
Supabase raised $80M in May, bringing our total funding to $116M. This comes one year after our Series A, and so we're revisiting the plans
diff --git a/apps/www/_blog/2022-08-15-supabase-cli-v1-and-admin-api-beta.mdx b/apps/www/_blog/2022-08-15-supabase-cli-v1-and-admin-api-beta.mdx
index 1b554f476c6..5bc9888e6ee 100644
--- a/apps/www/_blog/2022-08-15-supabase-cli-v1-and-admin-api-beta.mdx
+++ b/apps/www/_blog/2022-08-15-supabase-cli-v1-and-admin-api-beta.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-08-15'
toc_depth: 3
+video: https://www.youtube.com/v/OpPOaJI_Z28
---
Today we are moving the Supabase CLI v1 out of beta. The Supabase CLI is capable of managing database migrations and generating TypeScript types. Follow these [install instructions](https://supabase.com/docs/guides/cli) to get started.
diff --git a/apps/www/_blog/2022-08-16-supabase-js-v2.mdx b/apps/www/_blog/2022-08-16-supabase-js-v2.mdx
index 07cf3fd54dc..5ca0414db64 100644
--- a/apps/www/_blog/2022-08-16-supabase-js-v2.mdx
+++ b/apps/www/_blog/2022-08-16-supabase-js-v2.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-08-16'
toc_depth: 3
+video: https://www.youtube.com/v/iqZlPtl_b-I
---
diff --git a/apps/www/_blog/2022-08-17-supabase-soc2.mdx b/apps/www/_blog/2022-08-17-supabase-soc2.mdx
index 06afc949188..7febf307779 100644
--- a/apps/www/_blog/2022-08-17-supabase-soc2.mdx
+++ b/apps/www/_blog/2022-08-17-supabase-soc2.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-08-17'
toc_depth: 3
+video: https://www.youtube.com/v/6bGQotxisoY
---
Supabase is now SOC2 Type 1 compliant. Let’s dig into what that means, and explain the process we went through to get there. If you’re building a SaaS product, this blog post should provide a rough guide to getting your SOC2 certification.
diff --git a/apps/www/_blog/2022-08-18-supabase-realtime-multiplayer-general-availability.mdx b/apps/www/_blog/2022-08-18-supabase-realtime-multiplayer-general-availability.mdx
index f41ae23b202..a30b10b8d00 100644
--- a/apps/www/_blog/2022-08-18-supabase-realtime-multiplayer-general-availability.mdx
+++ b/apps/www/_blog/2022-08-18-supabase-realtime-multiplayer-general-availability.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-08-18'
toc_depth: 3
+video: https://www.youtube.com/v/CGZr5tybW18
---
During our last Launch Week, we teased our plans for "multiplayer" features. If you need a refresher,
diff --git a/apps/www/_blog/2022-08-19-launch-week-5-community-day.mdx b/apps/www/_blog/2022-08-19-launch-week-5-community-day.mdx
index d7a63f6595e..dda88680ffd 100644
--- a/apps/www/_blog/2022-08-19-launch-week-5-community-day.mdx
+++ b/apps/www/_blog/2022-08-19-launch-week-5-community-day.mdx
@@ -9,6 +9,7 @@ tags:
- community
date: '2022-08-19'
toc_depth: 2
+video: https://www.youtube.com/v/4A6RKPp1b70
---
Supabase combines existing open-source tools with our own open-source contributions to provide a delightful experience for developers of all skill levels. Just as versatile as our platform, we're building a community of communities, bringing together developers from many different backgrounds, as well as new developers looking to get involved with open source.
diff --git a/apps/www/_blog/2022-08-24-building-a-realtime-trello-board-with-supabase-and-angular.mdx b/apps/www/_blog/2022-08-24-building-a-realtime-trello-board-with-supabase-and-angular.mdx
index a31291f27e2..c0e20a82629 100644
--- a/apps/www/_blog/2022-08-24-building-a-realtime-trello-board-with-supabase-and-angular.mdx
+++ b/apps/www/_blog/2022-08-24-building-a-realtime-trello-board-with-supabase-and-angular.mdx
@@ -10,6 +10,7 @@ tags:
- community
date: '2022-08-24'
toc_depth: 2
+video: https://www.youtube.com/v/jmCiI_OSarA
---
Everyone can code up a little hello world example quickly with a platform like [Supabase](https://supabase.com/) - but what about a _real world_ project of bigger scale?
diff --git a/apps/www/_blog/2022-11-17-fetching-and-caching-supabase-data-in-next-js-server-components.mdx b/apps/www/_blog/2022-11-17-fetching-and-caching-supabase-data-in-next-js-server-components.mdx
index 91f7c558d7e..4b1954e318c 100644
--- a/apps/www/_blog/2022-11-17-fetching-and-caching-supabase-data-in-next-js-server-components.mdx
+++ b/apps/www/_blog/2022-11-17-fetching-and-caching-supabase-data-in-next-js-server-components.mdx
@@ -8,6 +8,7 @@ tags:
- Next.js
date: '2022-11-17'
toc_depth: 3
+video: https://www.youtube.com/v/QH0P5xZt5wY
---
The biggest announcement from Next.js Conf 2022 was the [release of Next.js 13](https://nextjs.org/blog/next-13), which introduces a collection of improvements, most exciting of which is Server Components. The combination of Server Components and Suspense allow for a more streamlined, reimagined way to fetch and cache data in Next.js applications. This provides excellent DX improvements — such as async components — and aligns the Next framework even closer with the future of React.
diff --git a/apps/www/_blog/2022-11-22-flutter-authentication-and-authorization-with-rls.mdx b/apps/www/_blog/2022-11-22-flutter-authentication-and-authorization-with-rls.mdx
index 7183c9fb539..e6ecfbe4cd2 100644
--- a/apps/www/_blog/2022-11-22-flutter-authentication-and-authorization-with-rls.mdx
+++ b/apps/www/_blog/2022-11-22-flutter-authentication-and-authorization-with-rls.mdx
@@ -1351,7 +1351,7 @@ We used bloc for our state management solution. One thing we could have done dif
We could also explore some cool feature improvement.
At the top of the rooms page, we are loading the newest created users to start a conversation. This is fine, but it only allows users to start a conversation with new users.
-We can for example update this to a list of users that are online at the same time. We can implement this using the [presence feature](https://supabase.com/docs/guides/realtime#presence) of Supabase.
+We can for example update this to a list of users that are online at the same time. We can implement this using the [presence feature](https://supabase.com/docs/guides/realtime/presence) of Supabase.
## More Flutter Resources
diff --git a/apps/www/_blog/2022-12-09-who-we-hire.mdx b/apps/www/_blog/2022-12-09-who-we-hire.mdx
index 4ebfa438775..1047b27e691 100644
--- a/apps/www/_blog/2022-12-09-who-we-hire.mdx
+++ b/apps/www/_blog/2022-12-09-who-we-hire.mdx
@@ -1,6 +1,7 @@
---
title: 'Who We Hire at Supabase'
description: Traits we look for to maintain a culture of shipping fast and often
+video: https://www.youtube.com/v/-BG9XptyCKI
author: ant_wilson
image: who-we-hire.jpg
thumb: who-we-hire-cover.jpg
diff --git a/apps/www/_blog/2022-12-12-new-supabase-docs-built-with-nextjs.mdx b/apps/www/_blog/2022-12-12-new-supabase-docs-built-with-nextjs.mdx
index 9f725b9ab84..78bae4b10ed 100644
--- a/apps/www/_blog/2022-12-12-new-supabase-docs-built-with-nextjs.mdx
+++ b/apps/www/_blog/2022-12-12-new-supabase-docs-built-with-nextjs.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-12-12'
toc_depth: 3
+video: https://www.youtube.com/v/Q1Amk6iDlF8
youtubeHero: https://www.youtube-nocookie.com/embed/Q1Amk6iDlF8
---
@@ -102,4 +103,3 @@ Docs are more than just the tech behind them. The goal of docs is to give you, t
- [Point in Time Recovery is now available](https://supabase.com/blog/postgres-point-in-time-recovery)
- [Custom Domain Names are now available](https://supabase.com/blog/custom-domain-names)
- [Wrap Up: everything we shipped](https://supabase.com/blog/launch-week-6-wrap-up)
-
diff --git a/apps/www/_blog/2022-12-13-storage-image-resizing-smart-cdn.mdx b/apps/www/_blog/2022-12-13-storage-image-resizing-smart-cdn.mdx
index deb677996d5..02b1284ca5b 100644
--- a/apps/www/_blog/2022-12-13-storage-image-resizing-smart-cdn.mdx
+++ b/apps/www/_blog/2022-12-13-storage-image-resizing-smart-cdn.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-12-13'
toc_depth: 3
+video: https://www.youtube.com/v/NpEl20iuOtg
youtubeHero: https://www.youtube-nocookie.com/embed/NpEl20iuOtg
---
diff --git a/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx b/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx
index bfb8e02b25d..70e89a15e82 100644
--- a/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx
+++ b/apps/www/_blog/2022-12-14-mfa-auth-via-rls.mdx
@@ -11,6 +11,7 @@ tags:
- saml
date: '2022-12-14'
toc_depth: 3
+video: https://www.youtube.com/v/He7LI2mv9v0
---
Today, we’re releasing Multi Factor Authentication for everyone.
diff --git a/apps/www/_blog/2022-12-15-postgres-foreign-data-wrappers-rust.mdx b/apps/www/_blog/2022-12-15-postgres-foreign-data-wrappers-rust.mdx
index 62147a24dd0..28beba1875d 100644
--- a/apps/www/_blog/2022-12-15-postgres-foreign-data-wrappers-rust.mdx
+++ b/apps/www/_blog/2022-12-15-postgres-foreign-data-wrappers-rust.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-12-15'
toc_depth: 3
+video: https://www.youtube.com/v/QA2qC5F-4OU
---
Today we're releasing [Supabase Wrappers](https://github.com/supabase/wrappers), a framework for building Postgres Foreign Data Wrappers (FDW) which connects Postgres to external systems.
diff --git a/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx b/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx
index 81cbbfdf6d7..78facd9830a 100644
--- a/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx
+++ b/apps/www/_blog/2022-12-16-launch-week-6-community-day.mdx
@@ -9,6 +9,7 @@ tags:
- community
date: '2022-12-16'
toc_depth: 3
+video: https://www.youtube.com/v/hw9Q-NjASbU
---
Supabase is a collaborative company. We work with, sponsor, and support as many open source tools as possible. The great thing about this approach is that each tool brings their own community and it's starting to feel like Supabase is really just a “community of communities”. Far too much has happened in the Supabase community in the last 3 months for us to possibly feature it all here, so here's a collection of the highlights!
diff --git a/apps/www/_blog/2022-12-16-launch-week-6-wrap-up.mdx b/apps/www/_blog/2022-12-16-launch-week-6-wrap-up.mdx
index f8435ebed42..d609f5c361c 100644
--- a/apps/www/_blog/2022-12-16-launch-week-6-wrap-up.mdx
+++ b/apps/www/_blog/2022-12-16-launch-week-6-wrap-up.mdx
@@ -8,6 +8,7 @@ tags:
- launch-week
date: '2022-12-16'
toc_depth: 3
+video: https://www.youtube.com/v/hw9Q-NjASbU
---
That's a wrap on Supabase Launch Week Day 6. Here's everything we shipped in one long blog post.
diff --git a/apps/www/_blog/2022-12-16-vault-now-in-beta.mdx b/apps/www/_blog/2022-12-16-vault-now-in-beta.mdx
index 37a6397743f..2b02cda5cb3 100644
--- a/apps/www/_blog/2022-12-16-vault-now-in-beta.mdx
+++ b/apps/www/_blog/2022-12-16-vault-now-in-beta.mdx
@@ -11,6 +11,7 @@ tags:
- planetpg
date: '2022-12-16'
toc_depth: 3
+video: https://www.youtube.com/v/QHLPNDrdN2w
---
During our last Launch Week we [announced](/blog/supabase-vault) Supabase Vault as our “one more thing”. Today we're releasing it progressively across the platform.
diff --git a/apps/www/data/home/admin-access.json b/apps/www/data/home/admin-access.json
index 9ca4d408f4e..d6c5f82ad80 100644
--- a/apps/www/data/home/admin-access.json
+++ b/apps/www/data/home/admin-access.json
@@ -11,7 +11,7 @@
"label": "SQL Editor",
"title": "In-built SQL editor for when you need greater control",
"text": "Write, save, and execute SQL queries directly on our dashboard, with templates to save you time. Run common queries and even build applications using our growing list of templates.",
- "video_url": "videos/tabSqlEditor.mp4",
+ "video_url": "https://xguihxuzqibwxjnimxev.supabase.co/storage/v1/object/public/videos/marketing/tabSqlEditor.mp4",
"youtube_id": "Hch1mZPZ53A",
"cta": "Explore SQL Editor",
"url": "/database"
@@ -20,7 +20,7 @@
"label": "Auth rules",
"title": "User management as straight-forward as it can be",
"text": "Easily manage your users with Supabase Auth, with email logins, magic links, and third-party logins. Create complex access policies with SQL rules to fit your unique business needs.",
- "video_url": "videos/tabAuthRules.mp4",
+ "video_url": "https://xguihxuzqibwxjnimxev.supabase.co/storage/v1/object/public/videos/marketing/tabAuthRules.mp4",
"youtube_id": "vP319FCIZ6Y",
"cta": "Explore Auth",
"url": "/auth"
diff --git a/apps/www/lib/redirects.js b/apps/www/lib/redirects.js
index d5fa09975e2..6d2ad98989c 100644
--- a/apps/www/lib/redirects.js
+++ b/apps/www/lib/redirects.js
@@ -1220,13 +1220,13 @@ module.exports = [
},
{
permanent: true,
- source: '/docs/guides/realtime/broadcast',
- destination: '/docs/guides/realtime#broadcast',
+ source: '/docs/guides/realtime#broadcast',
+ destination: '/docs/guides/realtime/broadcast',
},
{
permanent: true,
- source: '/docs/guides/realtime/presence',
- destination: '/docs/guides/realtime#presence',
+ source: '/docs/guides/realtime#presence',
+ destination: '/docs/guides/realtime/presence',
},
{
permanent: true,
@@ -1780,37 +1780,37 @@ module.exports = [
{
permanent: true,
source: '/docs/reference/javascript',
- destination: '/docs/reference/javascript/introduction',
+ destination: '/docs/reference/javascript/start',
},
{
permanent: true,
source: '/docs/reference/dart',
- destination: '/docs/reference/dart/introduction',
+ destination: '/docs/reference/dart/start',
},
{
permanent: true,
source: '/docs/reference/cli',
- destination: '/docs/reference/cli/introduction',
+ destination: '/docs/reference/cli/start',
},
{
permanent: true,
source: '/docs/reference/api',
- destination: '/docs/reference/api/introduction',
+ destination: '/docs/reference/api/start',
},
{
permanent: true,
source: '/docs/reference/auth',
- destination: '/docs/reference/auth/introduction',
+ destination: '/docs/reference/self-hosting-auth/start',
},
{
permanent: true,
source: '/docs/reference/storage',
- destination: '/docs/reference/storage/introduction',
+ destination: '/docs/reference/self-hosting-storage/start',
},
{
permanent: true,
source: '/docs/reference/realtime',
- destination: '/docs/reference/realtime/introduction',
+ destination: '/docs/reference/self-hosting-realtime/start',
},
{
permanent: true,
@@ -1837,4 +1837,9 @@ module.exports = [
source: '/docs/reference/dart/upgrade-guide',
destination: '/docs/reference/dart/v0/upgrade-guide',
},
+ {
+ permanent: true,
+ source: '/docs/guides/examples',
+ destination: '/docs/guides/resources/examples',
+ },
]
diff --git a/apps/www/pages/beta.tsx b/apps/www/pages/beta.tsx
index e4bb383d555..881ad2000fd 100644
--- a/apps/www/pages/beta.tsx
+++ b/apps/www/pages/beta.tsx
@@ -28,7 +28,7 @@ const NavFlyOutMenu = (props: any) => {
return (
<>
-