diff --git a/apps/docs/content/guides/auth/signing-keys.mdx b/apps/docs/content/guides/auth/signing-keys.mdx
index 1810a3861f734..6532cf7341e59 100644
--- a/apps/docs/content/guides/auth/signing-keys.mdx
+++ b/apps/docs/content/guides/auth/signing-keys.mdx
@@ -171,7 +171,7 @@ If you wish to make your own JWTs or have access to the private key or shared se
Use the [Supabase CLI](/docs/reference/cli/introduction) to quickly and securely generate a private key ready for import:
```sh
-supabase gen generate-key ES256
+supabase gen signing-key --algorithm ES256
```
Make sure you store this private key in a secure location, as it will not be extractable from Supabase.
diff --git a/apps/docs/content/guides/cron/quickstart.mdx b/apps/docs/content/guides/cron/quickstart.mdx
index 0ea18729a6a3d..cf1b2d6430b24 100644
--- a/apps/docs/content/guides/cron/quickstart.mdx
+++ b/apps/docs/content/guides/cron/quickstart.mdx
@@ -27,13 +27,6 @@ Attempting to create a second Job with the same name (and case) will overwrite t
4. Choose a schedule for your Job by inputting cron syntax (refer to the syntax chart in the form) or natural language.
5. Input SQL snippet or select a Database function, HTTP request, or Supabase Edge Function.
-
-
@@ -99,13 +92,6 @@ You can input seconds for your Job schedule interval as long as you're on Postgr
2. Click on the three vertical dots menu on the right side of the Job and click `Edit cron job`.
3. Make your changes and then click `Save cron job`.
-
-
@@ -148,13 +134,6 @@ It is also possible to modify a job by using the `cron.schedule()` function by i
1. Go to the [Jobs](/dashboard/project/_/integrations/cron/jobs) section and find the Job you'd like to unschedule.
2. Toggle the `Active`/`Inactive` switch next to Job name.
-
-
@@ -190,13 +169,6 @@ select cron.alter_job(
2. Click on the three vertical dots menu on the right side of the Job and click `Delete cron job`.
3. Confirm deletion by entering the Job name.
-
-
@@ -227,13 +199,6 @@ Unscheduling a Job will permanently delete the Job from `cron.job` table but its
1. Go to the [Jobs](/dashboard/project/_/integrations/cron/jobs) section and find the Job you want to see the runs of.
2. Click on the `History` button next to the Job name.
-
-
diff --git a/apps/docs/public/img/guides/database/cron/cron-create.png b/apps/docs/public/img/guides/database/cron/cron-create.png
deleted file mode 100644
index 0751b5c6186ac..0000000000000
Binary files a/apps/docs/public/img/guides/database/cron/cron-create.png and /dev/null differ
diff --git a/apps/docs/public/img/guides/database/cron/cron-edit.png b/apps/docs/public/img/guides/database/cron/cron-edit.png
deleted file mode 100644
index 632d4692a0e27..0000000000000
Binary files a/apps/docs/public/img/guides/database/cron/cron-edit.png and /dev/null differ
diff --git a/apps/docs/public/img/guides/database/cron/cron-history.png b/apps/docs/public/img/guides/database/cron/cron-history.png
deleted file mode 100644
index d65ef1f9a78a5..0000000000000
Binary files a/apps/docs/public/img/guides/database/cron/cron-history.png and /dev/null differ
diff --git a/apps/docs/public/img/guides/database/cron/cron-toggle.png b/apps/docs/public/img/guides/database/cron/cron-toggle.png
deleted file mode 100644
index 54a7c4a4936bc..0000000000000
Binary files a/apps/docs/public/img/guides/database/cron/cron-toggle.png and /dev/null differ
diff --git a/apps/docs/public/img/guides/database/cron/cron-unschedule.png b/apps/docs/public/img/guides/database/cron/cron-unschedule.png
deleted file mode 100644
index 10c6bb7275bf6..0000000000000
Binary files a/apps/docs/public/img/guides/database/cron/cron-unschedule.png and /dev/null differ
diff --git a/apps/studio/components/interfaces/Account/Preferences/AnalyticsSettings.tsx b/apps/studio/components/interfaces/Account/Preferences/AnalyticsSettings.tsx
index 694d94dd4ee60..f9928a5b2788c 100644
--- a/apps/studio/components/interfaces/Account/Preferences/AnalyticsSettings.tsx
+++ b/apps/studio/components/interfaces/Account/Preferences/AnalyticsSettings.tsx
@@ -1,53 +1,8 @@
-import { ButtonTooltip } from 'components/ui/ButtonTooltip'
-import { X } from 'lucide-react'
+import { Toggle } from 'ui'
import { toast } from 'sonner'
-import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Badge, Toggle } from 'ui'
-
import { useConsentState } from 'common'
-import { LOCAL_STORAGE_KEYS } from 'common/constants/local-storage'
import Panel from 'components/ui/Panel'
import { useSendResetMutation } from 'data/telemetry/send-reset-mutation'
-import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage'
-
-export const TermsUpdateBanner = () => {
- const [termsUpdateAcknowledged, setTermsUpdateAcknowledged, { isSuccess }] = useLocalStorageQuery(
- LOCAL_STORAGE_KEYS.TERMS_OF_SERVICE_ACKNOWLEDGED,
- false
- )
-
- if (!isSuccess || termsUpdateAcknowledged) return null
-
- return (
-
-
-
- NOTICE
-
- Terms of Service Update – Effective Aug 1, 2025
-
-
- We’ve updated our{' '}
-
- Terms of Service
-
- . The new terms take effect on August 1, 2025 and reflect changes to support our evolving
- business, legal requirements, and a new arbitration-based dispute resolution process.
- Questions? Contact{' '}
-
- our team
-
- .
-
- }
- className="absolute top-2 right-2 px-1"
- onClick={() => setTermsUpdateAcknowledged(true)}
- tooltip={{ content: { side: 'bottom', text: 'Dismiss' } }}
- />
-
- )
-}
export const AnalyticsSettings = () => {
const { hasAccepted, acceptAll, denyAll, categories } = useConsentState()
diff --git a/apps/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx b/apps/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx
index e915e23641ddd..c1fcb13167482 100644
--- a/apps/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx
+++ b/apps/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx
@@ -36,7 +36,7 @@ export const ProviderForm = ({ config, provider, isActive }: ProviderFormProps)
const [open, setOpen] = useState(false)
const { mutate: updateAuthConfig, isLoading: isUpdatingConfig } = useAuthConfigUpdateMutation()
- const doubleNegativeKeys = ['MAILER_AUTOCONFIRM', 'SMS_AUTOCONFIRM']
+ const doubleNegativeKeys = ['SMS_AUTOCONFIRM']
const canUpdateConfig: boolean = useCheckPermissions(
PermissionAction.UPDATE,
'custom_config_gotrue'
diff --git a/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx b/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx
index 54edfebbf88a1..8961d29c60a62 100644
--- a/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx
+++ b/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx
@@ -64,7 +64,8 @@ const BasicAuthSettingsForm = () => {
DISABLE_SIGNUP: !authConfig.DISABLE_SIGNUP,
EXTERNAL_ANONYMOUS_USERS_ENABLED: authConfig.EXTERNAL_ANONYMOUS_USERS_ENABLED,
SECURITY_MANUAL_LINKING_ENABLED: authConfig.SECURITY_MANUAL_LINKING_ENABLED,
- MAILER_AUTOCONFIRM: authConfig.MAILER_AUTOCONFIRM,
+ // The backend uses false to represent that email confirmation is required
+ MAILER_AUTOCONFIRM: !authConfig.MAILER_AUTOCONFIRM,
SITE_URL: authConfig.SITE_URL,
})
}
@@ -78,6 +79,9 @@ const BasicAuthSettingsForm = () => {
payload.PASSWORD_REQUIRED_CHARACTERS = ''
}
+ // The backend uses false to represent that email confirmation is required
+ payload.MAILER_AUTOCONFIRM = !values.MAILER_AUTOCONFIRM
+
updateAuthConfig(
{ projectRef: projectRef!, config: payload },
{
diff --git a/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx b/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx
index ac1fee9298d88..92c05be3e02df 100644
--- a/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx
+++ b/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx
@@ -1,6 +1,5 @@
import dayjs from 'dayjs'
import { Clipboard, Trash, UserIcon } from 'lucide-react'
-import { UIEvent } from 'react'
import { Column, useRowSelection } from 'react-data-grid'
import { User } from 'data/auth/users-infinite-query'
@@ -22,10 +21,6 @@ import { HeaderCell } from './UsersGridComponents'
const GITHUB_AVATAR_URL = 'https://avatars.githubusercontent.com'
const SUPPORTED_CSP_AVATAR_URLS = [GITHUB_AVATAR_URL, 'https://lh3.googleusercontent.com']
-export const isAtBottom = ({ currentTarget }: UIEvent): boolean => {
- return currentTarget.scrollTop + 10 >= currentTarget.scrollHeight - currentTarget.clientHeight
-}
-
export const formatUsersData = (users: User[]) => {
return users.map((user) => {
const provider: string = (user.raw_app_meta_data?.provider as string) ?? ''
diff --git a/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx b/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx
index 0593a02a59b30..2a142149b00e3 100644
--- a/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx
+++ b/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx
@@ -18,6 +18,7 @@ import { useUserDeleteMutation } from 'data/auth/user-delete-mutation'
import { useUsersCountQuery } from 'data/auth/users-count-query'
import { User, useUsersInfiniteQuery } from 'data/auth/users-infinite-query'
import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage'
+import { isAtBottom } from 'lib/helpers'
import {
Button,
cn,
@@ -51,7 +52,7 @@ import {
PROVIDER_FILTER_OPTIONS,
USERS_TABLE_COLUMNS,
} from './Users.constants'
-import { formatUserColumns, formatUsersData, isAtBottom } from './Users.utils'
+import { formatUserColumns, formatUsersData } from './Users.utils'
export type Filter = 'all' | 'verified' | 'unverified' | 'anonymous'
diff --git a/apps/studio/components/interfaces/Database/Extensions/ExtensionCard.tsx b/apps/studio/components/interfaces/Database/Extensions/ExtensionCard.tsx
index c155b75005a2f..b68d93f3c9764 100644
--- a/apps/studio/components/interfaces/Database/Extensions/ExtensionCard.tsx
+++ b/apps/studio/components/interfaces/Database/Extensions/ExtensionCard.tsx
@@ -111,7 +111,7 @@ const ExtensionCard = ({ extension }: ExtensionCardProps) => {