diff --git a/apps/docs/content/guides/ai/engineering-for-scale.mdx b/apps/docs/content/guides/ai/engineering-for-scale.mdx
index f0e5e5be6a0ce..8159a4b14659e 100644
--- a/apps/docs/content/guides/ai/engineering-for-scale.mdx
+++ b/apps/docs/content/guides/ai/engineering-for-scale.mdx
@@ -110,7 +110,7 @@ We can now create a foreign table to access the data in our secondary project.
 ```sql
 create foreign table docs (
   id text not null,
-  embedding vector(384),
+  embedding extensions.vector(384),
   metadata jsonb,
   url text
 )
diff --git a/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx b/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx
index ff8b7bafdb05a..f2f1efc62cb94 100644
--- a/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx
+++ b/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx
@@ -84,7 +84,7 @@ def seed():
         "id": "text",
         "start_time": "float8",
         "end_time": "float8",
-        "embedding": "vector(768)",
+        "embedding": "extensions.vector(768)",
         "metadata": "jsonb"
     })
 
diff --git a/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx b/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx
index 741680e583ad3..7bd534938ab97 100644
--- a/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx
+++ b/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx
@@ -130,7 +130,7 @@ Let's prepare the database schema. We can use the "OpenAI Vector Search" quickst
       page_id bigint not null references public.nods_page on delete cascade,
       content text,
       token_count int,
-      embedding vector(1536),
+      embedding extensions.vector(1536),
       slug text,
       heading text
     );
@@ -156,7 +156,7 @@ Let's prepare the database schema. We can use the "OpenAI Vector Search" quickst
     ```sql
     -- Create embedding similarity search functions
     create or replace function match_page_sections(
-        embedding vector(1536),
+        embedding extensions.vector(1536),
         match_threshold float,
         match_count int,
         min_content_length int
diff --git a/apps/docs/content/guides/ai/hybrid-search.mdx b/apps/docs/content/guides/ai/hybrid-search.mdx
index 8c53309df9d2d..de1dafe897ce7 100644
--- a/apps/docs/content/guides/ai/hybrid-search.mdx
+++ b/apps/docs/content/guides/ai/hybrid-search.mdx
@@ -53,7 +53,7 @@ create table documents (
   id bigint primary key generated always as identity,
   content text,
   fts tsvector generated always as (to_tsvector('english', content)) stored,
-  embedding vector(512)
+  embedding extensions.vector(512)
 );
 ```
 
@@ -83,7 +83,7 @@ Finally we'll create our `hybrid_search` function:
 ```sql
 create or replace function hybrid_search(
   query_text text,
-  query_embedding vector(512),
+  query_embedding extensions.vector(512),
   match_count int,
   full_text_weight float = 1,
   semantic_weight float = 1,
@@ -158,7 +158,7 @@ select
 from
   hybrid_search(
     'Italian recipes with tomato sauce', -- user query
-    '[...]'::vector(512), -- embedding generated from user query
+    '[...]'::extensions.vector(512), -- embedding generated from user query
     10
   );
 ```
diff --git a/apps/docs/content/guides/ai/langchain.mdx b/apps/docs/content/guides/ai/langchain.mdx
index a25168eb31c19..bb950bab43dbe 100644
--- a/apps/docs/content/guides/ai/langchain.mdx
+++ b/apps/docs/content/guides/ai/langchain.mdx
@@ -36,12 +36,12 @@ create table documents (
   id bigserial primary key,
   content text, -- corresponds to Document.pageContent
   metadata jsonb, -- corresponds to Document.metadata
-  embedding vector(1536) -- 1536 works for OpenAI embeddings, change if needed
+  embedding extensions.vector(1536) -- 1536 works for OpenAI embeddings, change if needed
 );
 
 -- Create a function to search for documents
 create function match_documents (
-  query_embedding vector(1536),
+  query_embedding extensions.vector(1536),
   match_count int default null,
   filter jsonb DEFAULT '{}'
 ) returns table (
diff --git a/apps/docs/content/guides/ai/rag-with-permissions.mdx b/apps/docs/content/guides/ai/rag-with-permissions.mdx
index 20156f36c2ef3..763952e2974f9 100644
--- a/apps/docs/content/guides/ai/rag-with-permissions.mdx
+++ b/apps/docs/content/guides/ai/rag-with-permissions.mdx
@@ -29,7 +29,7 @@ create table document_sections (
   id bigint primary key generated always as identity,
   document_id bigint not null references documents (id),
   content text not null,
-  embedding vector (384)
+  embedding extensions.vector (384)
 );
 ```
 
@@ -176,7 +176,7 @@ create table document_sections (
   id bigint primary key generated always as identity,
   document_id bigint not null,
   content text not null,
-  embedding vector (384)
+  embedding extensions.vector (384)
 );
 ```
 
diff --git a/apps/docs/content/guides/ai/semantic-search.mdx b/apps/docs/content/guides/ai/semantic-search.mdx
index 7310323494e3c..8052f85050c60 100644
--- a/apps/docs/content/guides/ai/semantic-search.mdx
+++ b/apps/docs/content/guides/ai/semantic-search.mdx
@@ -48,7 +48,7 @@ To implement semantic search in Postgres we use `pgvector` - an extension that a
    create table documents (
      id bigint primary key generated always as identity,
      content text,
-     embedding vector(512)
+     embedding extensions.vector(512)
    );
    ```
 
@@ -56,7 +56,7 @@ To implement semantic search in Postgres we use `pgvector` - an extension that a
 
    ```sql
    alter table documents
-   add column embedding vector(512);
+   add column embedding extensions.vector(512);
    ```
 
    In this example, we create a column named `embedding` which uses the newly enabled `vector` data type. The size of the vector (as indicated in parentheses) represents the number of dimensions in the embedding. Here we use 512, but adjust this to match the number of dimensions produced by your embedding model.
@@ -80,7 +80,7 @@ The easiest way to perform semantic search in Postgres is by creating a function
 ```sql
 -- Match documents using cosine distance (<=>)
 create or replace function match_documents (
-  query_embedding vector(512),
+  query_embedding extensions.vector(512),
   match_threshold float,
   match_count int
 )
@@ -108,7 +108,7 @@ You'll notice we are using the cosine distance (`<=>`) operator in our query. Co
 ```sql
 -- Match documents using negative inner product (<#>)
 create or replace function match_documents (
-  query_embedding vector(512),
+  query_embedding extensions.vector(512),
   match_threshold float,
   match_count int
 )
@@ -142,7 +142,7 @@ You can also call this method directly from SQL:
 ```sql
 select *
 from match_documents(
-  '[...]'::vector(512), -- pass the query embedding
+  '[...]'::extensions.vector(512), -- pass the query embedding
   0.78, -- chose an appropriate threshold for your data
   10 -- choose the number of matches
 );
diff --git a/apps/docs/content/guides/ai/structured-unstructured.mdx b/apps/docs/content/guides/ai/structured-unstructured.mdx
index b594ae3c80e0c..583612f5ccb17 100644
--- a/apps/docs/content/guides/ai/structured-unstructured.mdx
+++ b/apps/docs/content/guides/ai/structured-unstructured.mdx
@@ -13,7 +13,7 @@ Most vector stores treat metadata associated with embeddings like NoSQL, unstruc
 ```sql
 create table docs (
   id uuid primary key,
-  embedding vector(3),
+  embedding extensions.vector(3),
   content text,
   url text
 );
@@ -31,7 +31,7 @@ Notice that we've associated two pieces of metadata, `content` and `url`, with t
 ```sql
 create table docs (
   id uuid primary key,
-  embedding vector(3),
+  embedding extensions.vector(3),
   meta jsonb
 );
 
@@ -84,7 +84,7 @@ The structured metadata style is recommended when the fields being tracked are k
 ```sql
 create table docs (
   id uuid primary key,
-  embedding vector(3),
+  embedding extensions.vector(3),
   content text,
   url string,
   meta jsonb
diff --git a/apps/docs/content/guides/ai/vector-columns.mdx b/apps/docs/content/guides/ai/vector-columns.mdx
index 9767dfcc074ac..86d122c5a21c9 100644
--- a/apps/docs/content/guides/ai/vector-columns.mdx
+++ b/apps/docs/content/guides/ai/vector-columns.mdx
@@ -55,7 +55,7 @@ create table documents (
   id serial primary key,
   title text not null,
   body text not null,
-  embedding vector(384)
+  embedding extensions.vector(384)
 );
 ```
 
@@ -113,7 +113,7 @@ Supabase client libraries like `supabase-js` connect to your Postgres instance v
 
 ```sql
 create or replace function match_documents (
-  query_embedding vector(384),
+  query_embedding extensions.vector(384),
   match_threshold float,
   match_count int
 )
diff --git a/apps/docs/content/guides/database/extensions/http.mdx b/apps/docs/content/guides/database/extensions/http.mdx
index 2daf11fe010fd..31f5aa4438a83 100644
--- a/apps/docs/content/guides/database/extensions/http.mdx
+++ b/apps/docs/content/guides/database/extensions/http.mdx
@@ -94,7 +94,7 @@ A successful call to a web URL from the `http` extension returns a record with t
 select
   "status", "content"::jsonb
 from
-  http_get('https://jsonplaceholder.typicode.com/todos/1');
+  extensions.http_get('https://jsonplaceholder.typicode.com/todos/1');
 ```
 
 ### Simple `POST` example
@@ -103,7 +103,7 @@ from
 select
   "status", "content"::jsonb
 from
-  http_post(
+  extensions.http_post(
     'https://jsonplaceholder.typicode.com/posts',
     '{ "title": "foo", "body": "bar", "userId": 1 }',
     'application/json'
diff --git a/apps/docs/content/guides/database/extensions/pgrouting.mdx b/apps/docs/content/guides/database/extensions/pgrouting.mdx
index 82ca28f412652..70f7197c8f628 100644
--- a/apps/docs/content/guides/database/extensions/pgrouting.mdx
+++ b/apps/docs/content/guides/database/extensions/pgrouting.mdx
@@ -67,7 +67,7 @@ create table wi29 (
   id bigint,
   x float,
   y float,
-  geom geometry
+  geom gis.geometry
 );
 
 insert into wi29 (id, x, y)
diff --git a/apps/docs/content/guides/database/extensions/pgvector.mdx b/apps/docs/content/guides/database/extensions/pgvector.mdx
index 56918c381ccdb..97ead48a31ad4 100644
--- a/apps/docs/content/guides/database/extensions/pgvector.mdx
+++ b/apps/docs/content/guides/database/extensions/pgvector.mdx
@@ -70,7 +70,7 @@ create table posts (
   id serial primary key,
   title text not null,
   body text not null,
-  embedding vector(384)
+  embedding extensions.vector(384)
 );
 ```
 
diff --git a/apps/docs/content/guides/database/extensions/postgis.mdx b/apps/docs/content/guides/database/extensions/postgis.mdx
index aaf3d18e67597..599f65be591d2 100644
--- a/apps/docs/content/guides/database/extensions/postgis.mdx
+++ b/apps/docs/content/guides/database/extensions/postgis.mdx
@@ -35,11 +35,8 @@ You can get started with PostGIS by enabling the PostGIS extension in your Supab
 
 
 ```sql
--- Create a dedicated separate schema
-create schema if not exists "gis";
-
 -- Example: enable the "postgis" extension
-create extension postgis with schema "gis";
+create extension postgis with schema "extensions";
 
 -- Example: disable the "postgis" extension
 drop extension if exists postgis;
@@ -58,7 +55,7 @@ Let’s create our table. Each row represents a restaurant with its location sto
 create table if not exists public.restaurants (
 	id int generated by default as identity primary key,
 	name text not null,
-	location gis.geography(POINT) not null
+	location extensions.geography(POINT) not null
 );
 ```
 
@@ -102,9 +99,9 @@ You can insert geographical data through SQL or through our API.
 insert into public.restaurants
   (name, location)
 values
-  ('Supa Burger', gis.st_point(-73.946823, 40.807416)),
-  ('Supa Pizza', gis.st_point(-73.94581, 40.807475)),
-  ('Supa Taco', gis.st_point(-73.945826, 40.80629));
+  ('Supa Burger', extensions.st_point(-73.946823, 40.807416)),
+  ('Supa Pizza', extensions.st_point(-73.94581, 40.807475)),
+  ('Supa Taco', extensions.st_point(-73.945826, 40.80629));
 ```
 
 
@@ -216,18 +213,12 @@ returns table (id public.restaurants.id%TYPE, name public.restaurants.name%TYPE,
 set search_path = ''
 language sql
 as $$
-  select id, name, gis.st_y(location::gis.geometry) as lat, gis.st_x(location::gis.geometry) as long, gis.st_distance(location, gis.st_point(long, lat)::gis.geography) as dist_meters
+  select id, name, extensions.st_y(location::extensions.geometry) as lat, extensions.st_x(location::extensions.geometry) as long, extensions.st_distance(location, extensions.st_point(long, lat)::extensions.geography) as dist_meters
   from public.restaurants
-  order by location operator(gis.<->) gis.st_point(long, lat)::gis.geography;
+  order by location operator(extensions.<->) extensions.st_point(long, lat)::extensions.geography;
 $$;
 ```
 
-Before being able to call this function from our client we need to grant access to our `gis` schema:
-
-```sql
-grant usage on schema gis to anon, authenticated;
-```
-
 Now you can call this function from your client using `rpc()` like this:
 
 > 'sql'
     )
-from http(
+from extensions.http(
     (
         'GET',
         'https://api.database.dev/rest/v1/'
@@ -35,7 +35,7 @@ from http(
         || '&order=version.desc'
         || '&limit=1',
         array[
-            ('apiKey', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InhtdXB0cHBsZnZpaWZyYndtbXR2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODAxMDczNzIsImV4cCI6MTk5NTY4MzM3Mn0.z2CN0mvO2No8wSi46Gw59DFGCTJrzM0AQKsu_5k134s')::http_header
+            ('apiKey', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InhtdXB0cHBsZnZpaWZyYndtbXR2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODAxMDczNzIsImV4cCI6MTk5NTY4MzM3Mn0.z2CN0mvO2No8wSi46Gw59DFGCTJrzM0AQKsu_5k134s')::extensions.http_header
         ],
         null,
         null
@@ -141,7 +141,7 @@ select
         'PostgreSQL package manager',
         resp.contents ->> 'sql'
     )
-from http(
+from extensions.http(
     (
         'GET',
         'https://api.database.dev/rest/v1/'
@@ -150,7 +150,7 @@ from http(
         || '&order=version.desc'
         || '&limit=1',
         array[
-            ('apiKey', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InhtdXB0cHBsZnZpaWZyYndtbXR2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODAxMDczNzIsImV4cCI6MTk5NTY4MzM3Mn0.z2CN0mvO2No8wSi46Gw59DFGCTJrzM0AQKsu_5k134s')::http_header
+            ('apiKey', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InhtdXB0cHBsZnZpaWZyYndtbXR2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODAxMDczNzIsImV4cCI6MTk5NTY4MzM3Mn0.z2CN0mvO2No8wSi46Gw59DFGCTJrzM0AQKsu_5k134s')::extensions.http_header
         ],
         null,
         null
diff --git a/apps/docs/spec/cli_v1_commands.yaml b/apps/docs/spec/cli_v1_commands.yaml
index 153dc0f52f017..a0e6dca64e672 100644
--- a/apps/docs/spec/cli_v1_commands.yaml
+++ b/apps/docs/spec/cli_v1_commands.yaml
@@ -1,7 +1,7 @@
 clispec: '001'
 info:
   id: cli
-  version: 2.48.3
+  version: 2.54.10
   title: Supabase CLI
   language: sh
   source: https://github.com/supabase/cli
@@ -78,7 +78,7 @@ flags:
     name: --workdir 
     description: path to a Supabase project directory
     default_value: ''
-  - id: 'yes'
+  - id: "yes"
     name: --yes
     description: answer yes to all prompts
     default_value: 'false'
@@ -1772,6 +1772,10 @@ commands:
         name: --project-ref 
         description: Project ref of the Supabase project.
         default_value: ''
+      - id: skip-pooler
+        name: --skip-pooler
+        description: Use direct connection instead of pooler.
+        default_value: 'false'
   - id: supabase-inspect
     title: supabase inspect
     summary: Tools to inspect your Supabase project
@@ -1824,6 +1828,7 @@ commands:
       - supabase-inspect-db-replication-slots
       - supabase-inspect-db-role-stats
       - supabase-inspect-db-table-stats
+      - supabase-inspect-db-traffic-profile
       - supabase-inspect-db-vacuum-stats
     flags: []
   - id: supabase-inspect-db-vacuum-stats
@@ -1865,6 +1870,52 @@ commands:
         name: --local
         description: Inspect the local database.
         default_value: 'false'
+  - id: supabase-inspect-db-traffic-profile
+    title: supabase inspect db traffic-profile
+    summary: |
+      Show read/write activity ratio for tables based on block I/O operations
+    description: |2+
+
+      This command analyzes table I/O patterns to show read/write activity ratios based on block-level operations. It combines data from PostgreSQL's `pg_stat_user_tables` (for tuple operations) and `pg_statio_user_tables` (for block I/O) to categorize each table's workload profile.
+
+
+      The command classifies tables into categories:
+      - **Read-Heavy** - Read operations are more than 5x write operations (e.g., 1:10, 1:50)
+      - **Write-Heavy** - Write operations are more than 20% of read operations (e.g., 1:2, 1:4, 2:1, 10:1)
+      - **Balanced** - Mixed workload where writes are between 20% and 500% of reads
+      - **Read-Only** - Only read operations detected
+      - **Write-Only** - Only write operations detected
+
+      ```
+      SCHEMA │ TABLE        │ BLOCKS READ │ WRITE TUPLES │ BLOCKS WRITE │ ACTIVITY RATIO
+      ───────┼──────────────┼─────────────┼──────────────┼──────────────┼────────────────────
+      public │ user_events  │     450,234 │     9,004,680│       23,450 │ 20:1 (Write-Heavy)
+      public │ users        │      89,203 │        12,451│        1,203 │ 7.2:1 (Read-Heavy)
+      public │ sessions     │      15,402 │        14,823│        2,341 │ ≈1:1 (Balanced)
+      public │ cache_data   │     123,456 │             0│            0 │ Read-Only
+      auth   │ audit_logs   │           0 │        98,234│       12,341 │ Write-Only
+      ```
+
+      **Note:** This command only displays tables that have had both read and write activity. Tables with no I/O operations are not shown. The classification ratio threshold (default: 5:1) determines when a table is considered "heavy" in one direction versus balanced.
+
+    tags: []
+    links: []
+    usage: supabase inspect db traffic-profile
+    subcommands: []
+    flags:
+      - id: db-url
+        name: --db-url 
+        description: |
+          Inspect the database specified by the connection string (must be percent-encoded).
+        default_value: ''
+      - id: linked
+        name: --linked
+        description: Inspect the linked project.
+        default_value: 'true'
+      - id: local
+        name: --local
+        description: Inspect the local database.
+        default_value: 'false'
   - id: supabase-inspect-db-table-stats
     title: supabase inspect db table-stats
     summary: |
@@ -3114,7 +3165,7 @@ commands:
         default_value: '[]'
       - id: use-copy
         name: --use-copy
-        description: Uses copy statements in place of inserts.
+        description: Use copy statements in place of inserts.
         default_value: 'false'
   - id: supabase-db-diff
     title: supabase db diff
@@ -3391,6 +3442,10 @@ commands:
         name: --name 
         description: Rename the preview branch.
         default_value: ''
+      - id: notify-url
+        name: --notify-url 
+        description: URL to notify when branch is active healthy.
+        default_value: ''
       - id: persistent
         name: --persistent
         description: Switch between ephemeral and persistent branch.
@@ -3491,6 +3546,10 @@ commands:
     usage: supabase branches create [name] [flags]
     subcommands: []
     flags:
+      - id: notify-url
+        name: --notify-url 
+        description: URL to notify when branch is active healthy.
+        default_value: ''
       - id: persistent
         name: --persistent
         description: Whether to create a persistent branch.
diff --git a/apps/docs/spec/common-cli-sections.json b/apps/docs/spec/common-cli-sections.json
index b6cd3b5c097c9..43ece8d6f388c 100644
--- a/apps/docs/spec/common-cli-sections.json
+++ b/apps/docs/spec/common-cli-sections.json
@@ -240,21 +240,9 @@
         "type": "cli-command",
         "items": [
           {
-            "id": "supabase-inspect-db-calls",
-            "title": "Show most frequently run queries",
-            "slug": "supabase-inspect-db-calls",
-            "type": "cli-command"
-          },
-          {
-            "id": "supabase-inspect-db-long-running-queries",
-            "title": "Show long running queries",
-            "slug": "supabase-inspect-db-long-running-queries",
-            "type": "cli-command"
-          },
-          {
-            "id": "supabase-inspect-db-outliers",
-            "title": "Show queries ordered by total execution time",
-            "slug": "supabase-inspect-db-outliers",
+            "id": "supabase-inspect-db-bloat",
+            "title": "Show estimated database bloat",
+            "slug": "supabase-inspect-db-bloat",
             "type": "cli-command"
           },
           {
@@ -264,69 +252,39 @@
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-locks",
-            "title": "Show queries taking exclusive locks",
-            "slug": "supabase-inspect-db-locks",
+            "id": "supabase-inspect-db-calls",
+            "title": "Show most frequently run queries",
+            "slug": "supabase-inspect-db-calls",
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-total-index-size",
-            "title": "Show total size of all indexes",
-            "slug": "supabase-inspect-db-total-index-size",
+            "id": "supabase-inspect-db-db-stats",
+            "title": "Show statistics related to database usage",
+            "slug": "supabase-inspect-db-db-stats",
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-index-sizes",
+            "id": "supabase-inspect-db-index-stats",
             "title": "Show sizes of individual indexes",
-            "slug": "supabase-inspect-db-index-sizes",
-            "type": "cli-command"
-          },
-          {
-            "id": "supabase-inspect-db-index-usage",
-            "title": "Show information about index efficiency",
-            "slug": "supabase-inspect-db-index-usage",
-            "type": "cli-command"
-          },
-          {
-            "id": "supabase-inspect-db-unused-indexes",
-            "title": "Show indexes with low usage",
-            "slug": "supabase-inspect-db-unused-indexes",
-            "type": "cli-command"
-          },
-          {
-            "id": "supabase-inspect-db-total-table-sizes",
-            "title": "Show total size of all tables",
-            "slug": "supabase-inspect-db-total-table-sizes",
-            "type": "cli-command"
-          },
-          {
-            "id": "supabase-inspect-db-table-sizes",
-            "title": "Show sizes of individual tables",
-            "slug": "supabase-inspect-db-table-sizes",
+            "slug": "supabase-inspect-db-index-stats",
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-table-index-sizes",
-            "title": "Show index sizes of individual tables",
-            "slug": "supabase-inspect-db-table-index-sizes",
-            "type": "cli-command"
-          },
-          {
-            "id": "supabase-inspect-db-cache-hit",
-            "title": "Show cache hit rates for tables and indices",
-            "slug": "supabase-inspect-db-cache-hit",
+            "id": "supabase-inspect-db-locks",
+            "title": "Show queries taking exclusive locks",
+            "slug": "supabase-inspect-db-locks",
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-table-record-counts",
-            "title": "Show estimated number of rows per table",
-            "slug": "supabase-inspect-db-table-record-counts",
+            "id": "supabase-inspect-db-long-running-queries",
+            "title": "Show long running queries",
+            "slug": "supabase-inspect-db-long-running-queries",
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-seq-scans",
-            "title": "Show number of sequential scans for all tables",
-            "slug": "supabase-inspect-db-seq-scans",
+            "id": "supabase-inspect-db-outliers",
+            "title": "Show queries ordered by total execution time",
+            "slug": "supabase-inspect-db-outliers",
             "type": "cli-command"
           },
           {
@@ -336,15 +294,21 @@
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-role-connections",
+            "id": "supabase-inspect-db-role-stats",
             "title": "Show number of active connections",
             "slug": "supabase-inspect-db-role-connections",
             "type": "cli-command"
           },
           {
-            "id": "supabase-inspect-db-bloat",
-            "title": "Show estimated database bloat",
-            "slug": "supabase-inspect-db-bloat",
+            "id": "supabase-inspect-db-table-stats",
+            "title": "Show sizes of individual tables",
+            "slug": "supabase-inspect-db-table-stats",
+            "type": "cli-command"
+          },
+          {
+            "id": "supabase-inspect-db-traffic-profile",
+            "title": "Show read / write activity ratio for tables",
+            "slug": "supabase-inspect-db-traffic-profile",
             "type": "cli-command"
           },
           {
diff --git a/apps/studio/components/grid/components/grid/Grid.utils.tsx b/apps/studio/components/grid/components/grid/Grid.utils.tsx
index 025aeb7102904..b822b4be1d95b 100644
--- a/apps/studio/components/grid/components/grid/Grid.utils.tsx
+++ b/apps/studio/components/grid/components/grid/Grid.utils.tsx
@@ -28,11 +28,11 @@ export function useOnRowsChange(rows: SupaRow[]) {
 
       const queryKey = tableRowKeys.tableRows(projectRef, { table: { id: table.id } })
 
-      await queryClient.cancelQueries(queryKey)
+      await queryClient.cancelQueries({ queryKey })
 
-      const previousRowsQueries = queryClient.getQueriesData(queryKey)
+      const previousRowsQueries = queryClient.getQueriesData({ queryKey })
 
-      queryClient.setQueriesData(queryKey, (old) => {
+      queryClient.setQueriesData({ queryKey }, (old) => {
         return {
           rows:
             old?.rows.map((row) => {
@@ -67,9 +67,9 @@ export function useOnRowsChange(rows: SupaRow[]) {
 
       previousRowsQueries.forEach(([queryKey, previousRows]) => {
         if (previousRows) {
-          queryClient.setQueriesData(queryKey, previousRows)
+          queryClient.setQueriesData({ queryKey }, previousRows)
         }
-        queryClient.invalidateQueries(queryKey)
+        queryClient.invalidateQueries({ queryKey })
       })
 
       toast.error(error?.message ?? error)
diff --git a/apps/studio/components/grid/components/header/RefreshButton.tsx b/apps/studio/components/grid/components/header/RefreshButton.tsx
index 91c611c8c9ad0..d63217423209c 100644
--- a/apps/studio/components/grid/components/header/RefreshButton.tsx
+++ b/apps/studio/components/grid/components/header/RefreshButton.tsx
@@ -16,7 +16,7 @@ export const RefreshButton = ({ tableId, isRefetching }: RefreshButtonProps) =>
   const queryKey = tableRowKeys.tableRowsAndCount(ref, tableId)
 
   async function onClick() {
-    await queryClient.invalidateQueries(queryKey)
+    await queryClient.invalidateQueries({ queryKey })
   }
 
   return (
diff --git a/apps/studio/components/interfaces/Account/TOTPFactors/AddNewFactorModal.tsx b/apps/studio/components/interfaces/Account/TOTPFactors/AddNewFactorModal.tsx
index 58445c0829e21..c0db7372cc8f8 100644
--- a/apps/studio/components/interfaces/Account/TOTPFactors/AddNewFactorModal.tsx
+++ b/apps/studio/components/interfaces/Account/TOTPFactors/AddNewFactorModal.tsx
@@ -128,7 +128,9 @@ const SecondStep = ({
     },
     onSuccess: async () => {
       if (lastVisitedOrganization) {
-        await queryClient.invalidateQueries(organizationKeys.members(lastVisitedOrganization))
+        await queryClient.invalidateQueries({
+          queryKey: organizationKeys.members(lastVisitedOrganization),
+        })
       }
       toast.success(`Successfully added a second factor authentication`)
       onClose()
diff --git a/apps/studio/components/interfaces/Account/TOTPFactors/DeleteFactorModal.tsx b/apps/studio/components/interfaces/Account/TOTPFactors/DeleteFactorModal.tsx
index d72b59a37110f..57d5aed609bf1 100644
--- a/apps/studio/components/interfaces/Account/TOTPFactors/DeleteFactorModal.tsx
+++ b/apps/studio/components/interfaces/Account/TOTPFactors/DeleteFactorModal.tsx
@@ -29,7 +29,9 @@ const DeleteFactorModal = ({
   const { mutate: unenroll, isLoading } = useMfaUnenrollMutation({
     onSuccess: async () => {
       if (lastVisitedOrganization) {
-        await queryClient.invalidateQueries(organizationKeys.members(lastVisitedOrganization))
+        await queryClient.invalidateQueries({
+          queryKey: organizationKeys.members(lastVisitedOrganization),
+        })
       }
       toast.success(`Successfully deleted factor`)
       onClose()
diff --git a/apps/studio/components/interfaces/Auth/Policies/PolicyEditorPanel/index.tsx b/apps/studio/components/interfaces/Auth/Policies/PolicyEditorPanel/index.tsx
index 5ef3a92f3dee7..7e824bbed8c88 100644
--- a/apps/studio/components/interfaces/Auth/Policies/PolicyEditorPanel/index.tsx
+++ b/apps/studio/components/interfaces/Auth/Policies/PolicyEditorPanel/index.tsx
@@ -125,7 +125,7 @@ export const PolicyEditorPanel = memo(function ({
   const { mutate: executeMutation, isLoading: isExecuting } = useExecuteSqlMutation({
     onSuccess: async () => {
       // refresh all policies
-      await queryClient.invalidateQueries(databasePoliciesKeys.list(ref))
+      await queryClient.invalidateQueries({ queryKey: databasePoliciesKeys.list(ref) })
       toast.success('Successfully created new policy')
       onSelectCancel()
     },
diff --git a/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx b/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx
index 394a533578810..b1b1b9636ee99 100644
--- a/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx
+++ b/apps/studio/components/interfaces/Auth/Users/UsersV2.tsx
@@ -296,7 +296,9 @@ export const UsersV2 = () => {
         userIds.map((id) => deleteUser({ projectRef, userId: id, skipInvalidation: true }))
       )
       // [Joshen] Skip invalidation within RQ to prevent multiple requests, then invalidate once at the end
-      await Promise.all([queryClient.invalidateQueries(authKeys.usersInfinite(projectRef))])
+      await Promise.all([
+        queryClient.invalidateQueries({ queryKey: authKeys.usersInfinite(projectRef) }),
+      ])
       toast.success(
         `Successfully deleted the selected ${selectedUsers.size} user${selectedUsers.size > 1 ? 's' : ''}`
       )
diff --git a/apps/studio/components/interfaces/Billing/Payment/AddPaymentMethodForm.tsx b/apps/studio/components/interfaces/Billing/Payment/AddPaymentMethodForm.tsx
index 55ac23228a4a6..8d34ff5da70e4 100644
--- a/apps/studio/components/interfaces/Billing/Payment/AddPaymentMethodForm.tsx
+++ b/apps/studio/components/interfaces/Billing/Payment/AddPaymentMethodForm.tsx
@@ -74,12 +74,12 @@ const AddPaymentMethodForm = ({ onCancel, onConfirm }: AddPaymentMethodFormProps
             paymentMethodId: result.setupIntent.payment_method,
           })
 
-          await queryClient.invalidateQueries(
-            organizationKeys.paymentMethods(selectedOrganization.slug)
-          )
+          await queryClient.invalidateQueries({
+            queryKey: organizationKeys.paymentMethods(selectedOrganization.slug),
+          })
 
           queryClient.setQueriesData(
-            organizationKeys.paymentMethods(selectedOrganization.slug),
+            { queryKey: organizationKeys.paymentMethods(selectedOrganization.slug) },
             (prev: any) => {
               if (!prev) return prev
               return {
@@ -97,9 +97,9 @@ const AddPaymentMethodForm = ({ onCancel, onConfirm }: AddPaymentMethodFormProps
         }
       } else {
         if (selectedOrganization) {
-          await queryClient.invalidateQueries(
-            organizationKeys.paymentMethods(selectedOrganization.slug)
-          )
+          await queryClient.invalidateQueries({
+            queryKey: organizationKeys.paymentMethods(selectedOrganization.slug),
+          })
         }
       }
 
diff --git a/apps/studio/components/interfaces/BranchManagement/CreateBranchModal.tsx b/apps/studio/components/interfaces/BranchManagement/CreateBranchModal.tsx
index fc3397f00f205..a5f85aa5f893a 100644
--- a/apps/studio/components/interfaces/BranchManagement/CreateBranchModal.tsx
+++ b/apps/studio/components/interfaces/BranchManagement/CreateBranchModal.tsx
@@ -186,7 +186,9 @@ export const CreateBranchModal = () => {
     onSuccess: async (data) => {
       toast.success(`Successfully created preview branch "${data.name}"`)
       if (projectRef) {
-        await Promise.all([queryClient.invalidateQueries(projectKeys.detail(projectRef))])
+        await Promise.all([
+          queryClient.invalidateQueries({ queryKey: projectKeys.detail(projectRef) }),
+        ])
       }
       sendEvent({
         action: 'branch_create_button_clicked',
diff --git a/apps/studio/components/interfaces/Database/Privileges/Privileges.utils.ts b/apps/studio/components/interfaces/Database/Privileges/Privileges.utils.ts
index 0ffcd7b57633a..7c0675e3ca676 100644
--- a/apps/studio/components/interfaces/Database/Privileges/Privileges.utils.ts
+++ b/apps/studio/components/interfaces/Database/Privileges/Privileges.utils.ts
@@ -343,8 +343,10 @@ export function useApplyPrivilegeOperations(callback?: () => void) {
       }
 
       await Promise.all([
-        queryClient.invalidateQueries(privilegeKeys.tablePrivilegesList(project.ref)),
-        queryClient.invalidateQueries(privilegeKeys.columnPrivilegesList(project.ref)),
+        queryClient.invalidateQueries({ queryKey: privilegeKeys.tablePrivilegesList(project.ref) }),
+        queryClient.invalidateQueries({
+          queryKey: privilegeKeys.columnPrivilegesList(project.ref),
+        }),
       ])
 
       setIsLoading(false)
diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/CreditTopUp.tsx b/apps/studio/components/interfaces/Organization/BillingSettings/CreditTopUp.tsx
index cf0db499a2b76..2a914112ed834 100644
--- a/apps/studio/components/interfaces/Organization/BillingSettings/CreditTopUp.tsx
+++ b/apps/studio/components/interfaces/Organization/BillingSettings/CreditTopUp.tsx
@@ -185,7 +185,7 @@ export const CreditTopUp = ({ slug }: { slug: string | undefined }) => {
 
   const onSuccessfulPayment = async () => {
     onTopUpDialogVisibilityChange(false)
-    await queryClient.invalidateQueries(subscriptionKeys.orgSubscription(slug))
+    await queryClient.invalidateQueries({ queryKey: subscriptionKeys.orgSubscription(slug) })
     toast.success(
       'Successfully topped up balance. It may take a minute to reflect in your account.'
     )
diff --git a/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx b/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx
index dc9f83dfef30d..29954b0a30375 100644
--- a/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx
+++ b/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx
@@ -61,7 +61,7 @@ export const ProjectClaimConfirm = ({
         window.location.href = url.toString()
       } catch {
         // invalidate the org projects to force them to be refetched
-        queryClient.invalidateQueries(projectKeys.list())
+        queryClient.invalidateQueries({ queryKey: projectKeys.list() })
         router.push(`/org/${selectedOrganization.slug}`)
       }
     } catch (error: any) {
diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesConfirmationModal.tsx b/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesConfirmationModal.tsx
index 7e87156097cfd..537f615903af5 100644
--- a/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesConfirmationModal.tsx
+++ b/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesConfirmationModal.tsx
@@ -146,8 +146,8 @@ export const UpdateRolesConfirmationModal = ({
       }
 
       await Promise.all([
-        queryClient.invalidateQueries(organizationKeys.rolesV2(slug)),
-        queryClient.invalidateQueries(organizationKeysV1.members(slug)),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.rolesV2(slug) }),
+        queryClient.invalidateQueries({ queryKey: organizationKeysV1.members(slug) }),
       ])
       toast.success(`Successfully updated role for ${member.username}`)
       onClose(true)
diff --git a/apps/studio/components/interfaces/Organization/Usage/Activity.tsx b/apps/studio/components/interfaces/Organization/Usage/Activity.tsx
index 1c943dd901af9..394694da3a697 100644
--- a/apps/studio/components/interfaces/Organization/Usage/Activity.tsx
+++ b/apps/studio/components/interfaces/Organization/Usage/Activity.tsx
@@ -6,7 +6,7 @@ import { dailyUsageToDataPoints } from './Usage.utils'
 
 export interface ActivityProps {
   orgSlug: string
-  projectRef?: string
+  projectRef?: string | null
   startDate: string | undefined
   endDate: string | undefined
   subscription: OrgSubscription | undefined
diff --git a/apps/studio/components/interfaces/Organization/Usage/Egress.tsx b/apps/studio/components/interfaces/Organization/Usage/Egress.tsx
index 68e6e111dc21f..d9988db578c5d 100644
--- a/apps/studio/components/interfaces/Organization/Usage/Egress.tsx
+++ b/apps/studio/components/interfaces/Organization/Usage/Egress.tsx
@@ -1,16 +1,12 @@
 import { DataPoint } from 'data/analytics/constants'
-import {
-  PricingMetric,
-  useOrgDailyStatsQuery,
-  type OrgDailyUsageResponse,
-} from 'data/analytics/org-daily-stats-query'
+import { PricingMetric, type OrgDailyUsageResponse } from 'data/analytics/org-daily-stats-query'
 import type { OrgSubscription } from 'data/subscriptions/types'
 import UsageSection from './UsageSection/UsageSection'
 import { dailyUsageToDataPoints } from './Usage.utils'
 
 export interface EgressProps {
   orgSlug: string
-  projectRef?: string
+  projectRef: string | null
   subscription: OrgSubscription | undefined
   currentBillingCycleSelected: boolean
   orgDailyStats: OrgDailyUsageResponse | undefined
diff --git a/apps/studio/components/interfaces/Organization/Usage/SizeAndCounts.tsx b/apps/studio/components/interfaces/Organization/Usage/SizeAndCounts.tsx
index 812a7a80068ce..ebaa53b183774 100644
--- a/apps/studio/components/interfaces/Organization/Usage/SizeAndCounts.tsx
+++ b/apps/studio/components/interfaces/Organization/Usage/SizeAndCounts.tsx
@@ -10,7 +10,7 @@ import { dailyUsageToDataPoints } from './Usage.utils'
 
 export interface SizeAndCountsProps {
   orgSlug: string
-  projectRef?: string
+  projectRef?: string | null
   subscription: OrgSubscription | undefined
   currentBillingCycleSelected: boolean
   orgDailyStats: OrgDailyUsageResponse | undefined
diff --git a/apps/studio/components/interfaces/Organization/Usage/TotalUsage.tsx b/apps/studio/components/interfaces/Organization/Usage/TotalUsage.tsx
index 733b78daf406b..70cdf7bae9456 100644
--- a/apps/studio/components/interfaces/Organization/Usage/TotalUsage.tsx
+++ b/apps/studio/components/interfaces/Organization/Usage/TotalUsage.tsx
@@ -20,7 +20,7 @@ import { SectionContent } from './SectionContent'
 
 export interface ComputeProps {
   orgSlug: string
-  projectRef?: string
+  projectRef?: string | null
   startDate: string | undefined
   endDate: string | undefined
   subscription: OrgSubscription | undefined
diff --git a/apps/studio/components/interfaces/Organization/Usage/Usage.tsx b/apps/studio/components/interfaces/Organization/Usage/Usage.tsx
index 17644f6ff2f78..69db3ffb4dad4 100644
--- a/apps/studio/components/interfaces/Organization/Usage/Usage.tsx
+++ b/apps/studio/components/interfaces/Organization/Usage/Usage.tsx
@@ -1,7 +1,7 @@
 import { PermissionAction } from '@supabase/shared-types/out/constants'
 import dayjs from 'dayjs'
 import Link from 'next/link'
-import { useEffect, useMemo, useState } from 'react'
+import { useMemo, useState } from 'react'
 
 import { useParams } from 'common'
 import {
@@ -16,7 +16,6 @@ import NoPermission from 'components/ui/NoPermission'
 import { OrganizationProjectSelector } from 'components/ui/OrganizationProjectSelector'
 import ShimmeringLoader from 'components/ui/ShimmeringLoader'
 import { useOrgDailyStatsQuery } from 'data/analytics/org-daily-stats-query'
-import { OrgProject } from 'data/projects/org-projects-infinite-query'
 import { useProjectDetailQuery } from 'data/projects/project-detail-query'
 import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
 import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
@@ -30,35 +29,21 @@ import Compute from './Compute'
 import Egress from './Egress'
 import SizeAndCounts from './SizeAndCounts'
 import { TotalUsage } from './TotalUsage'
-
-// [Joshen] JFYI this component could use nuqs to handle `projectRef` state which will help
-// simplify some of the implementation here.
+import { useQueryState } from 'nuqs'
 
 export const Usage = () => {
   const { slug, projectRef } = useParams()
 
   const [dateRange, setDateRange] = useState()
-  const [selectedProject, setSelectedProject] = useState()
 
-  const [selectedProjectRefInputValue, setSelectedProjectRefInputValue] = useState<
-    string | undefined
-  >('all-projects')
+  const [selectedProjectRef, setSelectedProjectRef] = useQueryState('projectRef')
   const [openProjectSelector, setOpenProjectSelector] = useState(false)
 
-  // [Alaister] 'all-projects' is not a valid project ref, it's just used as an extra
-  // state for the select input. As such we need to remove it for the selected project ref
-  const selectedProjectRef =
-    selectedProjectRefInputValue === 'all-projects' ? undefined : selectedProjectRefInputValue
-
   const { can: canReadSubscriptions, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
     PermissionAction.BILLING_READ,
     'stripe.subscriptions'
   )
 
-  const { isSuccess: isSuccessProjectDetail } = useProjectDetailQuery({
-    ref: selectedProjectRef,
-  })
-
   const {
     data: subscription,
     error: subscriptionError,
@@ -67,6 +52,10 @@ export const Usage = () => {
     isSuccess: isSuccessSubscription,
   } = useOrgSubscriptionQuery({ orgSlug: slug })
 
+  const { data: selectedProject } = useProjectDetailQuery({
+    ref: selectedProjectRef ?? undefined,
+  })
+
   const billingCycleStart = useMemo(() => {
     return dayjs.unix(subscription?.current_period_start ?? 0).utc()
   }, [subscription])
@@ -122,13 +111,6 @@ export const Usage = () => {
     endDate,
   })
 
-  useEffect(() => {
-    if (projectRef && isSuccessProjectDetail) {
-      setSelectedProjectRefInputValue(projectRef)
-    }
-    // [Joshen] Since we're already looking at isSuccess
-  }, [projectRef, isSuccessProjectDetail])
-
   return (
     <>
       
@@ -175,10 +157,9 @@ export const Usage = () => {
                    {
-                      setSelectedProject(project)
-                      setSelectedProjectRefInputValue(project.ref)
+                      setSelectedProjectRef(project.ref)
                     }}
                     renderTrigger={() => {
                       return (
@@ -190,14 +171,12 @@ export const Usage = () => {
                           className="justify-between w-[180px]"
                           iconRight={}
                         >
-                          {!selectedProject || selectedProjectRefInputValue === 'all-projects'
-                            ? 'All projects'
-                            : selectedProject?.name}
+                          {!selectedProject ? 'All projects' : selectedProject?.name}
                         
                       )
                     }}
                     renderRow={(project) => {
-                      const isSelected = selectedProjectRefInputValue === project.ref
+                      const isSelected = selectedProjectRef === project.ref
                       return (
                         
                           
@@ -213,15 +192,15 @@ export const Usage = () => {
                           className="cursor-pointer flex items-center justify-between w-full"
                           onSelect={() => {
                             setOpenProjectSelector(false)
-                            setSelectedProjectRefInputValue('all-projects')
+                            setSelectedProjectRef(null)
                           }}
                           onClick={() => {
                             setOpenProjectSelector(false)
-                            setSelectedProjectRefInputValue('all-projects')
+                            setSelectedProjectRef(null)
                           }}
                         >
                           All projects
-                          {selectedProjectRefInputValue === 'all-projects' && }
+                          {!selectedProjectRef && }
                         
                       
                     )}
@@ -270,7 +249,7 @@ export const Usage = () => {
         
       )}
 
-      {selectedProjectRef ? (
+      {selectedProject ? (
         
            {
     queryPerformanceQuery.runQuery()
-    queryClient.invalidateQueries(databaseKeys.indexAdvisorFromQuery(project?.ref, ''))
-    queryClient.invalidateQueries(databaseIndexesKeys.list(project?.ref))
+    queryClient.invalidateQueries({
+      queryKey: databaseKeys.indexAdvisorFromQuery(project?.ref, ''),
+    })
+    queryClient.invalidateQueries({ queryKey: databaseIndexesKeys.list(project?.ref) })
   }, [queryPerformanceQuery, queryClient, project?.ref])
 }
diff --git a/apps/studio/components/interfaces/Reports/Reports.tsx b/apps/studio/components/interfaces/Reports/Reports.tsx
index aa8d37a780e57..b51b6661b1348 100644
--- a/apps/studio/components/interfaces/Reports/Reports.tsx
+++ b/apps/studio/components/interfaces/Reports/Reports.tsx
@@ -274,15 +274,15 @@ const Reports = () => {
       (x) => x.provider === 'infra-monitoring' || x.provider === 'daily-stats'
     )
     monitoringCharts?.forEach((x) => {
-      queryClient.invalidateQueries(
-        analyticsKeys.infraMonitoring(ref, {
+      queryClient.invalidateQueries({
+        queryKey: analyticsKeys.infraMonitoring(ref, {
           attribute: x.attribute,
           startDate,
           endDate,
           interval: config?.interval,
           databaseIdentifier: state.selectedDatabaseId,
-        })
-      )
+        }),
+      })
     })
     setTimeout(() => setIsRefreshing(false), 1000)
   }
diff --git a/apps/studio/components/interfaces/SQLEditor/SQLEditor.tsx b/apps/studio/components/interfaces/SQLEditor/SQLEditor.tsx
index 8614d72f2fa2a..6b11da0a498f6 100644
--- a/apps/studio/components/interfaces/SQLEditor/SQLEditor.tsx
+++ b/apps/studio/components/interfaces/SQLEditor/SQLEditor.tsx
@@ -165,7 +165,7 @@ export const SQLEditor = () => {
       refetchEntityDefinitions()
 
       // revalidate lint query
-      queryClient.invalidateQueries(lintKeys.lint(ref))
+      queryClient.invalidateQueries({ queryKey: lintKeys.lint(ref) })
     },
     onError(error: any, vars) {
       if (id) {
diff --git a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/DropAllReplicasConfirmationModal.tsx b/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/DropAllReplicasConfirmationModal.tsx
index 8f64c09bdc535..7c6169eb581f9 100644
--- a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/DropAllReplicasConfirmationModal.tsx
+++ b/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/DropAllReplicasConfirmationModal.tsx
@@ -42,8 +42,8 @@ const DropAllReplicasConfirmationModal = ({
       toast.success(`Tearing down all read replicas`)
 
       await Promise.all([
-        queryClient.invalidateQueries(replicaKeys.list(projectRef)),
-        queryClient.invalidateQueries(replicaKeys.loadBalancers(projectRef)),
+        queryClient.invalidateQueries({ queryKey: replicaKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: replicaKeys.loadBalancers(projectRef) }),
       ])
 
       onSuccess()
diff --git a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/RestartReplicaConfirmationModal.tsx b/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/RestartReplicaConfirmationModal.tsx
index b77953ba24034..cc6eace64e1bf 100644
--- a/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/RestartReplicaConfirmationModal.tsx
+++ b/apps/studio/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/RestartReplicaConfirmationModal.tsx
@@ -29,7 +29,7 @@ export const RestartReplicaConfirmationModal = ({
       toast.success(`Restarting read replica (ID: ${formattedId})`)
 
       // [Joshen] Temporarily optimistic rendering until API supports immediate status update
-      queryClient.setQueriesData(replicaKeys.list(ref), (old: Database[]) => {
+      queryClient.setQueriesData({ queryKey: replicaKeys.list(ref) }, (old: Database[]) => {
         const updatedReplicas = old.map((x) => {
           if (x.identifier === selectedReplica?.identifier) {
             return { ...x, status: REPLICA_STATUS.RESTARTING }
diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx
index 037c59d8b926e..61f5e76fdc1f3 100644
--- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx
+++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx
@@ -269,21 +269,23 @@ const SidePanelEditor = ({
       }
 
       await Promise.all([
-        queryClient.invalidateQueries(tableEditorKeys.tableEditor(project?.ref, selectedTable?.id)),
-        queryClient.invalidateQueries(
-          databaseKeys.foreignKeyConstraints(project?.ref, selectedTable?.schema)
-        ),
-        queryClient.invalidateQueries(
-          databaseKeys.tableDefinition(project?.ref, selectedTable?.id)
-        ),
-        queryClient.invalidateQueries(entityTypeKeys.list(project?.ref)),
+        queryClient.invalidateQueries({
+          queryKey: tableEditorKeys.tableEditor(project?.ref, selectedTable?.id),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: databaseKeys.foreignKeyConstraints(project?.ref, selectedTable?.schema),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: databaseKeys.tableDefinition(project?.ref, selectedTable?.id),
+        }),
+        queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(project?.ref) }),
       ])
 
       // We need to invalidate tableRowsAndCount after tableEditor
       // to ensure the query sent is correct
-      await queryClient.invalidateQueries(
-        tableRowKeys.tableRowsAndCount(project?.ref, selectedTable?.id)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: tableRowKeys.tableRowsAndCount(project?.ref, selectedTable?.id),
+      })
 
       setIsEdited(false)
       snap.closeSidePanel()
@@ -435,8 +437,10 @@ const SidePanelEditor = ({
         if (isRealtimeEnabled) await updateTableRealtime(table, isRealtimeEnabled)
 
         await Promise.all([
-          queryClient.invalidateQueries(tableKeys.list(project?.ref, table.schema, includeColumns)),
-          queryClient.invalidateQueries(entityTypeKeys.list(project?.ref)),
+          queryClient.invalidateQueries({
+            queryKey: tableKeys.list(project?.ref, table.schema, includeColumns),
+          }),
+          queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(project?.ref) }),
         ])
 
         toast.success(
@@ -461,8 +465,10 @@ const SidePanelEditor = ({
         if (isRealtimeEnabled) await updateTableRealtime(table, true)
 
         await Promise.all([
-          queryClient.invalidateQueries(tableKeys.list(project?.ref, table.schema, includeColumns)),
-          queryClient.invalidateQueries(entityTypeKeys.list(project?.ref)),
+          queryClient.invalidateQueries({
+            queryKey: tableKeys.list(project?.ref, table.schema, includeColumns),
+          }),
+          queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(project?.ref) }),
         ])
 
         toast.success(`Table ${table.name} is good to go!`, { id: toastId })
@@ -574,9 +580,9 @@ const SidePanelEditor = ({
       }
     }
 
-    await queryClient.invalidateQueries(
-      tableRowKeys.tableRowsAndCount(project?.ref, selectedTable?.id)
-    )
+    await queryClient.invalidateQueries({
+      queryKey: tableRowKeys.tableRowsAndCount(project?.ref, selectedTable?.id),
+    })
     toast.success(`Successfully imported ${rowCount} rows of data into ${selectedTable.name}`, {
       id: toastId,
     })
diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.tsx b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.tsx
index 2a65b4d517e73..b02a74b855e55 100644
--- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.tsx
+++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.tsx
@@ -19,6 +19,7 @@ import { executeSql } from 'data/sql/execute-sql-query'
 import { tableEditorKeys } from 'data/table-editor/keys'
 import { prefetchTableEditor } from 'data/table-editor/table-editor-query'
 import { tableRowKeys } from 'data/table-rows/keys'
+import { executeWithRetry } from 'data/table-rows/table-rows-query'
 import { tableKeys } from 'data/tables/keys'
 import { createTable as createTableMutation } from 'data/tables/table-create-mutation'
 import { deleteTable as deleteTableMutation } from 'data/tables/table-delete-mutation'
@@ -42,7 +43,6 @@ import type { ForeignKey } from './ForeignKeySelector/ForeignKeySelector.types'
 import type { ColumnField, CreateColumnPayload, UpdateColumnPayload } from './SidePanelEditor.types'
 import { checkIfRelationChanged } from './TableEditor/ForeignKeysManagement/ForeignKeysManagement.utils'
 import type { ImportContent } from './TableEditor/TableEditor.types'
-import { executeWithRetry } from 'data/table-rows/table-rows-query'
 
 const BATCH_SIZE = 1000
 const CHUNK_SIZE = 1024 * 1024 * 0.1 // 0.1MB
@@ -399,7 +399,7 @@ export const duplicateTable = async (
         : '',
     ].join('\n'),
   })
-  await queryClient.invalidateQueries(tableKeys.list(projectRef, sourceTableSchema))
+  await queryClient.invalidateQueries({ queryKey: tableKeys.list(projectRef, sourceTableSchema) })
 
   // Duplicate foreign key constraints over
   if (foreignKeyRelations.length > 0) {
@@ -868,16 +868,20 @@ export const updateTable = async ({
   })
 
   await Promise.all([
-    queryClient.invalidateQueries(tableEditorKeys.tableEditor(projectRef, table.id)),
-    queryClient.invalidateQueries(databaseKeys.foreignKeyConstraints(projectRef, table.schema)),
-    queryClient.invalidateQueries(databaseKeys.tableDefinition(projectRef, table.id)),
-    queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
-    queryClient.invalidateQueries(tableKeys.list(projectRef, table.schema, true)),
+    queryClient.invalidateQueries({ queryKey: tableEditorKeys.tableEditor(projectRef, table.id) }),
+    queryClient.invalidateQueries({
+      queryKey: databaseKeys.foreignKeyConstraints(projectRef, table.schema),
+    }),
+    queryClient.invalidateQueries({ queryKey: databaseKeys.tableDefinition(projectRef, table.id) }),
+    queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(projectRef) }),
+    queryClient.invalidateQueries({ queryKey: tableKeys.list(projectRef, table.schema, true) }),
   ])
 
   // We need to invalidate tableRowsAndCount after tableEditor
   // to ensure the query sent is correct
-  await queryClient.invalidateQueries(tableRowKeys.tableRowsAndCount(projectRef, table.id))
+  await queryClient.invalidateQueries({
+    queryKey: tableRowKeys.tableRowsAndCount(projectRef, table.id),
+  })
 
   return {
     table: await prefetchTableEditor(queryClient, {
diff --git a/apps/studio/components/interfaces/TableGridEditor/ViewEntityAutofixSecurityModal.tsx b/apps/studio/components/interfaces/TableGridEditor/ViewEntityAutofixSecurityModal.tsx
index d4029a6d970ef..762e2bb2d075f 100644
--- a/apps/studio/components/interfaces/TableGridEditor/ViewEntityAutofixSecurityModal.tsx
+++ b/apps/studio/components/interfaces/TableGridEditor/ViewEntityAutofixSecurityModal.tsx
@@ -38,7 +38,7 @@ export default function ViewEntityAutofixSecurityModal({
     onSuccess: async () => {
       toast.success('View security changed successfully')
       setIsAutofixViewSecurityModalOpen(false)
-      await queryClient.invalidateQueries(lintKeys.lint(project?.ref))
+      await queryClient.invalidateQueries({ queryKey: lintKeys.lint(project?.ref) })
     },
     onError: (error) => {
       toast.error(`Failed to autofix view security: ${error.message}`)
diff --git a/apps/studio/components/ui/OrganizationProjectSelector.tsx b/apps/studio/components/ui/OrganizationProjectSelector.tsx
index 70a9a26e2a2f9..9fe5e3fd3ee56 100644
--- a/apps/studio/components/ui/OrganizationProjectSelector.tsx
+++ b/apps/studio/components/ui/OrganizationProjectSelector.tsx
@@ -25,7 +25,7 @@ import ShimmeringLoader from 'ui-patterns/ShimmeringLoader'
 interface OrganizationProjectSelectorSelectorProps {
   slug?: string
   open?: boolean
-  selectedRef?: string
+  selectedRef?: string | null
   searchPlaceholder?: string
   sameWidthAsTrigger?: boolean
   checkPosition?: 'right' | 'left'
diff --git a/apps/studio/data/__templates/README.md b/apps/studio/data/__templates/README.md
index 5cc02004da10e..07fad53f683a5 100644
--- a/apps/studio/data/__templates/README.md
+++ b/apps/studio/data/__templates/README.md
@@ -30,7 +30,7 @@ For getting a single item based on parameter(s). `id` is used in this example bu
 For updating a resource. This can easily be adapted to work for create, delete, or any verb that is needed. You may need to modify the `invalidateQueries` section depending on your use case. For example removing:
 
 ```ts
-queryClient.invalidateQueries(resourceKeys.resource(projectRef, id))
+queryClient.invalidateQueries({ queryKey: resourceKeys.resource(projectRef, id) })
 ```
 
 if you are creating a new resource.
diff --git a/apps/studio/data/__templates/resource-query.ts b/apps/studio/data/__templates/resource-query.ts
index 2aff5ed875cda..b79eec258df2a 100644
--- a/apps/studio/data/__templates/resource-query.ts
+++ b/apps/studio/data/__templates/resource-query.ts
@@ -58,9 +58,10 @@ export const useResourcePrefetch = ({ projectRef, id }: ResourceVariables) => {
 
   return useCallback(() => {
     if (projectRef && id) {
-      client.prefetchQuery(resourceKeys.resource(projectRef, id), ({ signal }) =>
-        getResource({ projectRef, id }, signal)
-      )
+      client.prefetchQuery({
+        queryKey: resourceKeys.resource(projectRef, id),
+        queryFn: ({ signal }) => getResource({ projectRef, id }, signal),
+      })
     }
   }, [projectRef, id])
 }
diff --git a/apps/studio/data/__templates/resource-update-mutation.ts b/apps/studio/data/__templates/resource-update-mutation.ts
index ef292042c981b..e17c5abb1c0d6 100644
--- a/apps/studio/data/__templates/resource-update-mutation.ts
+++ b/apps/studio/data/__templates/resource-update-mutation.ts
@@ -40,8 +40,8 @@ export const useResourceUpdateMutation = ({
       const { projectRef, id } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(resourceKeys.list(projectRef)),
-        queryClient.invalidateQueries(resourceKeys.resource(projectRef, id)),
+        queryClient.invalidateQueries({ queryKey: resourceKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: resourceKeys.resource(projectRef, id) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/__templates/resources-query.ts b/apps/studio/data/__templates/resources-query.ts
index 8e278b130184f..d15450497a364 100644
--- a/apps/studio/data/__templates/resources-query.ts
+++ b/apps/studio/data/__templates/resources-query.ts
@@ -53,9 +53,10 @@ export const useResourcesPrefetch = ({ projectRef }: ResourcesVariables) => {
 
   return useCallback(() => {
     if (projectRef) {
-      client.prefetchQuery(resourceKeys.list(projectRef), ({ signal }) =>
-        getResources({ projectRef }, signal)
-      )
+      client.prefetchQuery({
+        queryKey: resourceKeys.list(projectRef),
+        queryFn: ({ signal }) => getResources({ projectRef }, signal),
+      })
     }
   }, [projectRef])
 }
diff --git a/apps/studio/data/access-tokens/access-tokens-create-mutation.ts b/apps/studio/data/access-tokens/access-tokens-create-mutation.ts
index 6a0990ebf4a88..928cc983f59cc 100644
--- a/apps/studio/data/access-tokens/access-tokens-create-mutation.ts
+++ b/apps/studio/data/access-tokens/access-tokens-create-mutation.ts
@@ -35,7 +35,7 @@ export const useAccessTokenCreateMutation = ({
   return useMutation({
     mutationFn: (vars) => createAccessToken(vars),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(accessTokenKeys.list())
+      await queryClient.invalidateQueries({ queryKey: accessTokenKeys.list() })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/access-tokens/access-tokens-delete-mutation.ts b/apps/studio/data/access-tokens/access-tokens-delete-mutation.ts
index b4169903648f7..dcf677b9cf2a2 100644
--- a/apps/studio/data/access-tokens/access-tokens-delete-mutation.ts
+++ b/apps/studio/data/access-tokens/access-tokens-delete-mutation.ts
@@ -33,7 +33,7 @@ export const useAccessTokenDeleteMutation = ({
   return useMutation({
     mutationFn: (vars) => deleteAccessToken(vars),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(accessTokenKeys.list())
+      await queryClient.invalidateQueries({ queryKey: accessTokenKeys.list() })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/analytics/project-log-requests-count-query.ts b/apps/studio/data/analytics/project-log-requests-count-query.ts
index 8898c8a227a73..bc1064a01d187 100644
--- a/apps/studio/data/analytics/project-log-requests-count-query.ts
+++ b/apps/studio/data/analytics/project-log-requests-count-query.ts
@@ -51,7 +51,8 @@ export function prefetchProjectLogRequestsCount(
   client: QueryClient,
   { projectRef }: ProjectLogRequestsCountVariables
 ) {
-  return client.fetchQuery(analyticsKeys.usageApiRequestsCount(projectRef), ({ signal }) =>
-    getProjectLogRequestsCountStats({ projectRef }, signal)
-  )
+  return client.fetchQuery({
+    queryKey: analyticsKeys.usageApiRequestsCount(projectRef),
+    queryFn: ({ signal }) => getProjectLogRequestsCountStats({ projectRef }, signal),
+  })
 }
diff --git a/apps/studio/data/analytics/project-log-stats-query.ts b/apps/studio/data/analytics/project-log-stats-query.ts
index be3379ef52159..e9668785123a6 100644
--- a/apps/studio/data/analytics/project-log-stats-query.ts
+++ b/apps/studio/data/analytics/project-log-stats-query.ts
@@ -71,7 +71,8 @@ export function prefetchProjectLogStats(
   client: QueryClient,
   { projectRef, interval }: ProjectLogStatsVariables
 ) {
-  return client.fetchQuery(analyticsKeys.usageApiCounts(projectRef, interval), ({ signal }) =>
-    getProjectLogStats({ projectRef, interval }, signal)
-  )
+  return client.fetchQuery({
+    queryKey: analyticsKeys.usageApiCounts(projectRef, interval),
+    queryFn: ({ signal }) => getProjectLogStats({ projectRef, interval }, signal),
+  })
 }
diff --git a/apps/studio/data/analytics/utils.ts b/apps/studio/data/analytics/utils.ts
index 543bd472de6b8..67f5249a73d44 100644
--- a/apps/studio/data/analytics/utils.ts
+++ b/apps/studio/data/analytics/utils.ts
@@ -20,15 +20,15 @@ export const useInvalidateAnalyticsQuery = () => {
       databaseIdentifier?: string
     }
   ) => {
-    queryClient.invalidateQueries(
-      analyticsKeys.infraMonitoring(ref, {
+    queryClient.invalidateQueries({
+      queryKey: analyticsKeys.infraMonitoring(ref, {
         attribute,
         startDate,
         endDate,
         interval,
         databaseIdentifier,
-      })
-    )
+      }),
+    })
   }
 
   return { invalidateInfraMonitoringQuery }
diff --git a/apps/studio/data/api-keys/[id]/api-key-id-update-mutation.ts b/apps/studio/data/api-keys/[id]/api-key-id-update-mutation.ts
index 05cee5366a8c6..0548af5bdbaff 100644
--- a/apps/studio/data/api-keys/[id]/api-key-id-update-mutation.ts
+++ b/apps/studio/data/api-keys/[id]/api-key-id-update-mutation.ts
@@ -52,7 +52,7 @@ export const useResourceUpdateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef, id } = variables
 
-      await queryClient.invalidateQueries(apiKeysKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: apiKeysKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/api-keys/api-key-create-mutation.ts b/apps/studio/data/api-keys/api-key-create-mutation.ts
index b5838231537df..65d50087034fb 100644
--- a/apps/studio/data/api-keys/api-key-create-mutation.ts
+++ b/apps/studio/data/api-keys/api-key-create-mutation.ts
@@ -68,7 +68,7 @@ export const useAPIKeyCreateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(apiKeysKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: apiKeysKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/api-keys/api-key-delete-mutation.ts b/apps/studio/data/api-keys/api-key-delete-mutation.ts
index d85ab96687f0c..7ad3e9b1b7529 100644
--- a/apps/studio/data/api-keys/api-key-delete-mutation.ts
+++ b/apps/studio/data/api-keys/api-key-delete-mutation.ts
@@ -40,7 +40,7 @@ export const useAPIKeyDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(apiKeysKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: apiKeysKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/api-keys/legacy-api-key-toggle-mutation.ts b/apps/studio/data/api-keys/legacy-api-key-toggle-mutation.ts
index fc2a370a6063e..23c25d44bbc86 100644
--- a/apps/studio/data/api-keys/legacy-api-key-toggle-mutation.ts
+++ b/apps/studio/data/api-keys/legacy-api-key-toggle-mutation.ts
@@ -40,7 +40,7 @@ export const useToggleLegacyAPIKeysMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(apiKeysKeys.status(projectRef))
+      await queryClient.invalidateQueries({ queryKey: apiKeysKeys.status(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/api-settings/create-and-expose-api-schema-mutation.ts b/apps/studio/data/api-settings/create-and-expose-api-schema-mutation.ts
index 60946310a3489..c331557c1f5d9 100644
--- a/apps/studio/data/api-settings/create-and-expose-api-schema-mutation.ts
+++ b/apps/studio/data/api-settings/create-and-expose-api-schema-mutation.ts
@@ -70,8 +70,8 @@ export const useCreateAndExposeAPISchemaMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       await Promise.all([
-        queryClient.invalidateQueries(databaseKeys.schemas(projectRef)),
-        queryClient.invalidateQueries(configKeys.postgrest(projectRef)),
+        queryClient.invalidateQueries({ queryKey: databaseKeys.schemas(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: configKeys.postgrest(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/auth/auth-config-query.ts b/apps/studio/data/auth/auth-config-query.ts
index 9d84e0634dfc1..466c28339a9a6 100644
--- a/apps/studio/data/auth/auth-config-query.ts
+++ b/apps/studio/data/auth/auth-config-query.ts
@@ -49,9 +49,10 @@ export const useAuthConfigPrefetch = ({ projectRef }: AuthConfigVariables) => {
 
   return useCallback(() => {
     if (projectRef) {
-      client.prefetchQuery(authKeys.authConfig(projectRef), ({ signal }) =>
-        getProjectAuthConfig({ projectRef }, signal)
-      )
+      client.prefetchQuery({
+        queryKey: authKeys.authConfig(projectRef),
+        queryFn: ({ signal }) => getProjectAuthConfig({ projectRef }, signal),
+      })
     }
   }, [client, projectRef])
 }
diff --git a/apps/studio/data/auth/auth-config-update-mutation.ts b/apps/studio/data/auth/auth-config-update-mutation.ts
index 019bfe1699a39..322165a466e65 100644
--- a/apps/studio/data/auth/auth-config-update-mutation.ts
+++ b/apps/studio/data/auth/auth-config-update-mutation.ts
@@ -41,7 +41,7 @@ export const useAuthConfigUpdateMutation = ({
     mutationFn: (vars) => updateAuthConfig(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(authKeys.authConfig(projectRef))
+      await queryClient.invalidateQueries({ queryKey: authKeys.authConfig(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/auth/auth-hooks-update-mutation.ts b/apps/studio/data/auth/auth-hooks-update-mutation.ts
index 535901a9615ec..10b00616cf872 100644
--- a/apps/studio/data/auth/auth-hooks-update-mutation.ts
+++ b/apps/studio/data/auth/auth-hooks-update-mutation.ts
@@ -37,7 +37,7 @@ export const useAuthHooksUpdateMutation = ({
     mutationFn: (vars) => updateAuthHooks(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(authKeys.authConfig(projectRef))
+      await queryClient.invalidateQueries({ queryKey: authKeys.authConfig(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/auth/user-create-mutation.ts b/apps/studio/data/auth/user-create-mutation.ts
index 1db52c575a9c6..f199977e79a18 100644
--- a/apps/studio/data/auth/user-create-mutation.ts
+++ b/apps/studio/data/auth/user-create-mutation.ts
@@ -44,7 +44,9 @@ export const useUserCreateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await Promise.all([queryClient.invalidateQueries(authKeys.usersInfinite(projectRef))])
+      await Promise.all([
+        queryClient.invalidateQueries({ queryKey: authKeys.usersInfinite(projectRef) }),
+      ])
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/auth/user-delete-mutation.ts b/apps/studio/data/auth/user-delete-mutation.ts
index 62e0c671fc27d..ffa2924656753 100644
--- a/apps/studio/data/auth/user-delete-mutation.ts
+++ b/apps/studio/data/auth/user-delete-mutation.ts
@@ -37,7 +37,9 @@ export const useUserDeleteMutation = ({
       const { projectRef, skipInvalidation = false } = variables
 
       if (!skipInvalidation) {
-        await Promise.all([queryClient.invalidateQueries(authKeys.usersInfinite(projectRef))])
+        await Promise.all([
+          queryClient.invalidateQueries({ queryKey: authKeys.usersInfinite(projectRef) }),
+        ])
       }
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/auth/user-invite-mutation.ts b/apps/studio/data/auth/user-invite-mutation.ts
index 77fcfd13e3116..e493f0a892b4d 100644
--- a/apps/studio/data/auth/user-invite-mutation.ts
+++ b/apps/studio/data/auth/user-invite-mutation.ts
@@ -36,7 +36,9 @@ export const useUserInviteMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await Promise.all([queryClient.invalidateQueries(authKeys.usersInfinite(projectRef))])
+      await Promise.all([
+        queryClient.invalidateQueries({ queryKey: authKeys.usersInfinite(projectRef) }),
+      ])
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/auth/user-update-mutation.ts b/apps/studio/data/auth/user-update-mutation.ts
index 01209b201256c..d65b40604a858 100644
--- a/apps/studio/data/auth/user-update-mutation.ts
+++ b/apps/studio/data/auth/user-update-mutation.ts
@@ -38,7 +38,7 @@ export const useUserUpdateMutation = ({
     mutationFn: (vars) => updateUser(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(authKeys.usersInfinite(projectRef))
+      await queryClient.invalidateQueries({ queryKey: authKeys.usersInfinite(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/auth/users-infinite-query.ts b/apps/studio/data/auth/users-infinite-query.ts
index 2fed18be6dec1..2447d5656b66b 100644
--- a/apps/studio/data/auth/users-infinite-query.ts
+++ b/apps/studio/data/auth/users-infinite-query.ts
@@ -43,9 +43,9 @@ export const useUsersInfiniteQuery = (
   const { data: project } = useSelectedProjectQuery()
   const isActive = project?.status === PROJECT_STATUS.ACTIVE_HEALTHY
 
-  return useInfiniteQuery(
-    authKeys.usersInfinite(projectRef, { keywords, filter, providers, sort, order }),
-    ({ signal, pageParam }) => {
+  return useInfiniteQuery({
+    queryKey: authKeys.usersInfinite(projectRef, { keywords, filter, providers, sort, order }),
+    queryFn: ({ signal, pageParam }) => {
       return executeSql(
         {
           projectRef,
@@ -66,21 +66,19 @@ export const useUsersInfiniteQuery = (
         signal
       )
     },
-    {
-      enabled: enabled && typeof projectRef !== 'undefined' && isActive,
-      getNextPageParam(lastPage, pages) {
-        const hasNextPage = lastPage.result.length >= USERS_PAGE_LIMIT
-        if (column) {
-          const lastItem = lastPage.result[lastPage.result.length - 1]
-          if (hasNextPage && lastItem) return lastItem[column]
-          return undefined
-        } else {
-          const page = pages.length
-          if (!hasNextPage) return undefined
-          return page
-        }
-      },
-      ...options,
-    }
-  )
+    enabled: enabled && typeof projectRef !== 'undefined' && isActive,
+    getNextPageParam(lastPage, pages) {
+      const hasNextPage = lastPage.result.length >= USERS_PAGE_LIMIT
+      if (column) {
+        const lastItem = lastPage.result[lastPage.result.length - 1]
+        if (hasNextPage && lastItem) return lastItem[column]
+        return undefined
+      } else {
+        const page = pages.length
+        if (!hasNextPage) return undefined
+        return page
+      }
+    },
+    ...options,
+  })
 }
diff --git a/apps/studio/data/banned-ips/banned-ips-delete-mutations.ts b/apps/studio/data/banned-ips/banned-ips-delete-mutations.ts
index 3fff21f34bafa..8cbda71f254db 100644
--- a/apps/studio/data/banned-ips/banned-ips-delete-mutations.ts
+++ b/apps/studio/data/banned-ips/banned-ips-delete-mutations.ts
@@ -36,7 +36,7 @@ export const useBannedIPsDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(BannedIPKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: BannedIPKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/branches/branch-create-mutation.ts b/apps/studio/data/branches/branch-create-mutation.ts
index 08d426c1f20af..fb3ffaa181ea9 100644
--- a/apps/studio/data/branches/branch-create-mutation.ts
+++ b/apps/studio/data/branches/branch-create-mutation.ts
@@ -56,7 +56,7 @@ export const useBranchCreateMutation = ({
     mutationFn: (vars) => createBranch(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(branchKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: branchKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/branches/branch-delete-mutation.ts b/apps/studio/data/branches/branch-delete-mutation.ts
index 1b9ca55e56e86..ef7381eca44df 100644
--- a/apps/studio/data/branches/branch-delete-mutation.ts
+++ b/apps/studio/data/branches/branch-delete-mutation.ts
@@ -36,7 +36,7 @@ export const useBranchDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { branchRef, projectRef } = variables
       setTimeout(() => {
-        queryClient.invalidateQueries(branchKeys.list(projectRef))
+        queryClient.invalidateQueries({ queryKey: branchKeys.list(projectRef) })
       }, 5000)
 
       const branches: BranchesData | undefined = queryClient.getQueryData(
diff --git a/apps/studio/data/branches/branch-merge-mutation.ts b/apps/studio/data/branches/branch-merge-mutation.ts
index 9c2c8bf24d70f..5da2ecdf74668 100644
--- a/apps/studio/data/branches/branch-merge-mutation.ts
+++ b/apps/studio/data/branches/branch-merge-mutation.ts
@@ -3,9 +3,9 @@ import { toast } from 'sonner'
 
 import { handleError, post } from 'data/fetchers'
 import type { ResponseError } from 'types'
-import { branchKeys } from './keys'
-import { getBranchDiff } from './branch-diff-query'
 import { upsertMigration } from '../database/migration-upsert-mutation'
+import { getBranchDiff } from './branch-diff-query'
+import { branchKeys } from './keys'
 
 export type BranchMergeVariables = {
   branchProjectRef: string
@@ -67,7 +67,7 @@ export const useBranchMergeMutation = ({
     mutationFn: (vars) => mergeBranch(vars),
     async onSuccess(data, variables, context) {
       const { baseProjectRef } = variables
-      await queryClient.invalidateQueries(branchKeys.list(baseProjectRef))
+      await queryClient.invalidateQueries({ queryKey: branchKeys.list(baseProjectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/branches/branch-push-mutation.ts b/apps/studio/data/branches/branch-push-mutation.ts
index 3b36d83ff0a6e..d90c72ce0aa1d 100644
--- a/apps/studio/data/branches/branch-push-mutation.ts
+++ b/apps/studio/data/branches/branch-push-mutation.ts
@@ -35,7 +35,7 @@ export const useBranchPushMutation = ({
     mutationFn: (vars) => pushBranch(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(branchKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: branchKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/branches/branch-reset-mutation.ts b/apps/studio/data/branches/branch-reset-mutation.ts
index fd2b21f6a6be8..6be95f3c0da2c 100644
--- a/apps/studio/data/branches/branch-reset-mutation.ts
+++ b/apps/studio/data/branches/branch-reset-mutation.ts
@@ -35,7 +35,7 @@ export const useBranchResetMutation = ({
     mutationFn: (vars) => resetBranch(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(branchKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: branchKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/branches/branch-update-mutation.ts b/apps/studio/data/branches/branch-update-mutation.ts
index f8233395ba9b6..0dc4cd28f73d8 100644
--- a/apps/studio/data/branches/branch-update-mutation.ts
+++ b/apps/studio/data/branches/branch-update-mutation.ts
@@ -52,7 +52,7 @@ export const useBranchUpdateMutation = ({
     mutationFn: (vars) => updateBranch(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(branchKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: branchKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/config/disk-attributes-update-mutation.ts b/apps/studio/data/config/disk-attributes-update-mutation.ts
index e50d3dbec245a..ddbfead579be1 100644
--- a/apps/studio/data/config/disk-attributes-update-mutation.ts
+++ b/apps/studio/data/config/disk-attributes-update-mutation.ts
@@ -58,7 +58,7 @@ export const useUpdateDiskAttributesMutation = ({
     mutationFn: (vars) => updateDiskAttributes(vars),
     async onSuccess(data, variables, context) {
       const { ref } = variables
-      await queryClient.invalidateQueries(configKeys.diskAttributes(ref))
+      await queryClient.invalidateQueries({ queryKey: configKeys.diskAttributes(ref) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/config/disk-autoscale-config-update-mutation.ts b/apps/studio/data/config/disk-autoscale-config-update-mutation.ts
index 6da6272a27942..13a30ad319ca8 100644
--- a/apps/studio/data/config/disk-autoscale-config-update-mutation.ts
+++ b/apps/studio/data/config/disk-autoscale-config-update-mutation.ts
@@ -57,7 +57,7 @@ export const useUpdateDiskAutoscaleConfigMutation = ({
     mutationFn: (vars) => updateDiskAutoscaleConfig(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(configKeys.diskAutoscaleConfig(projectRef))
+      await queryClient.invalidateQueries({ queryKey: configKeys.diskAutoscaleConfig(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/config/jwt-secret-update-mutation.ts b/apps/studio/data/config/jwt-secret-update-mutation.ts
index d3debe12df6cf..c2ead8572cda8 100644
--- a/apps/studio/data/config/jwt-secret-update-mutation.ts
+++ b/apps/studio/data/config/jwt-secret-update-mutation.ts
@@ -1,5 +1,4 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
-import { toast } from 'sonner'
 
 import { handleError, patch } from 'data/fetchers'
 import type { ResponseError } from 'types'
@@ -47,7 +46,9 @@ export const useJwtSecretUpdateMutation = ({
     mutationFn: (vars) => updateJwtSecret(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(configKeys.jwtSecretUpdatingStatus(projectRef))
+      await queryClient.invalidateQueries({
+        queryKey: configKeys.jwtSecretUpdatingStatus(projectRef),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/config/project-compliance-config-mutation.ts b/apps/studio/data/config/project-compliance-config-mutation.ts
index 5e8740fcf8d85..8218f85b8ffef 100644
--- a/apps/studio/data/config/project-compliance-config-mutation.ts
+++ b/apps/studio/data/config/project-compliance-config-mutation.ts
@@ -41,7 +41,7 @@ export const useComplianceConfigUpdateMutation = ({
     mutationFn: (vars) => updateComplianceConfig(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(configKeys.settingsV2(projectRef))
+      await queryClient.invalidateQueries({ queryKey: configKeys.settingsV2(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/config/project-disk-resize-mutation.ts b/apps/studio/data/config/project-disk-resize-mutation.ts
index c5e81ae511dbb..da75b76af0383 100644
--- a/apps/studio/data/config/project-disk-resize-mutation.ts
+++ b/apps/studio/data/config/project-disk-resize-mutation.ts
@@ -44,7 +44,7 @@ export const useProjectDiskResizeMutation = ({
     mutationFn: (vars) => resizeProjectDisk(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      queryClient.setQueriesData(usageKeys.usage(projectRef), (prev: any) => {
+      queryClient.setQueriesData({ queryKey: usageKeys.usage(projectRef) }, (prev: any) => {
         if (!prev) return prev
         return { ...prev, disk_volume_size_gb: variables.volumeSize }
       })
diff --git a/apps/studio/data/config/project-postgrest-config-update-mutation.ts b/apps/studio/data/config/project-postgrest-config-update-mutation.ts
index 510bbb08247da..43dcfeff8dd1f 100644
--- a/apps/studio/data/config/project-postgrest-config-update-mutation.ts
+++ b/apps/studio/data/config/project-postgrest-config-update-mutation.ts
@@ -63,7 +63,7 @@ export const useProjectPostgrestConfigUpdateMutation = ({
     mutationFn: (vars) => updateProjectPostgrestConfig(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      queryClient.invalidateQueries(configKeys.postgrest(projectRef))
+      queryClient.invalidateQueries({ queryKey: configKeys.postgrest(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/config/project-storage-config-update-mutation.ts b/apps/studio/data/config/project-storage-config-update-mutation.ts
index c5fd540656512..bb525ef5eedfc 100644
--- a/apps/studio/data/config/project-storage-config-update-mutation.ts
+++ b/apps/studio/data/config/project-storage-config-update-mutation.ts
@@ -1,10 +1,10 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { components } from 'api-types'
 import { handleError, patch } from 'data/fetchers'
 import type { ResponseError } from 'types'
 import { configKeys } from './keys'
-import { components } from 'api-types'
 
 type StorageConfigUpdatePayload = components['schemas']['UpdateStorageConfigBody']
 
@@ -51,7 +51,7 @@ export const useProjectStorageConfigUpdateUpdateMutation = ({
     mutationFn: (vars) => updateProjectStorageConfigUpdate(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(configKeys.storage(projectRef))
+      await queryClient.invalidateQueries({ queryKey: configKeys.storage(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/config/project-temp-disable-read-only-mutation.ts b/apps/studio/data/config/project-temp-disable-read-only-mutation.ts
index 3769f48ec594c..f7995c7e1e1e5 100644
--- a/apps/studio/data/config/project-temp-disable-read-only-mutation.ts
+++ b/apps/studio/data/config/project-temp-disable-read-only-mutation.ts
@@ -32,7 +32,10 @@ export const useDisableReadOnlyModeMutation = ({
   return useMutation({
     mutationFn: (vars) => tempDisableReadOnlyMode(vars),
     async onSuccess(data, variables, context) {
-      setTimeout(() => queryClient.invalidateQueries(usageKeys.resourceWarnings()), 2000)
+      setTimeout(
+        () => queryClient.invalidateQueries({ queryKey: usageKeys.resourceWarnings() }),
+        2000
+      )
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/content/content-delete-mutation.ts b/apps/studio/data/content/content-delete-mutation.ts
index a502816b0837f..c19b5ac959941 100644
--- a/apps/studio/data/content/content-delete-mutation.ts
+++ b/apps/studio/data/content/content-delete-mutation.ts
@@ -41,8 +41,8 @@ export const useContentDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       await Promise.all([
-        queryClient.invalidateQueries(contentKeys.allContentLists(projectRef)),
-        queryClient.invalidateQueries(contentKeys.infiniteList(projectRef)),
+        queryClient.invalidateQueries({ queryKey: contentKeys.allContentLists(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: contentKeys.infiniteList(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/content/content-infinite-query.ts b/apps/studio/data/content/content-infinite-query.ts
index 00c77b1e11d1a..169fb8a578bea 100644
--- a/apps/studio/data/content/content-infinite-query.ts
+++ b/apps/studio/data/content/content-infinite-query.ts
@@ -50,14 +50,12 @@ export const useContentInfiniteQuery = (
   { projectRef, type, name, limit, sort }: GetContentVariables,
   { enabled = true, ...options }: UseInfiniteQueryOptions = {}
 ) => {
-  return useInfiniteQuery(
-    contentKeys.infiniteList(projectRef, { type, name, limit, sort }),
-    ({ signal, pageParam }) =>
+  return useInfiniteQuery({
+    queryKey: contentKeys.infiniteList(projectRef, { type, name, limit, sort }),
+    queryFn: ({ signal, pageParam }) =>
       getContent({ projectRef, type, name, limit, sort, cursor: pageParam }, signal),
-    {
-      enabled: enabled && typeof projectRef !== 'undefined',
-      getNextPageParam: (lastPage) => lastPage.cursor,
-      ...options,
-    }
-  )
+    enabled: enabled && typeof projectRef !== 'undefined',
+    getNextPageParam: (lastPage) => lastPage.cursor,
+    ...options,
+  })
 }
diff --git a/apps/studio/data/content/content-insert-mutation.ts b/apps/studio/data/content/content-insert-mutation.ts
index 0d25a50b27d8e..31e32de6a45f3 100644
--- a/apps/studio/data/content/content-insert-mutation.ts
+++ b/apps/studio/data/content/content-insert-mutation.ts
@@ -56,7 +56,7 @@ export const useContentInsertMutation = ({
     mutationFn: (args) => insertContent(args),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(contentKeys.allContentLists(projectRef))
+      await queryClient.invalidateQueries({ queryKey: contentKeys.allContentLists(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/content/content-upsert-mutation.ts b/apps/studio/data/content/content-upsert-mutation.ts
index 685cab48e36ae..3676727c2ddf1 100644
--- a/apps/studio/data/content/content-upsert-mutation.ts
+++ b/apps/studio/data/content/content-upsert-mutation.ts
@@ -52,8 +52,8 @@ export const useContentUpsertMutation = ({
       const { projectRef } = variables
       if (invalidateQueriesOnSuccess) {
         await Promise.all([
-          queryClient.invalidateQueries(contentKeys.allContentLists(projectRef)),
-          queryClient.invalidateQueries(contentKeys.infiniteList(projectRef)),
+          queryClient.invalidateQueries({ queryKey: contentKeys.allContentLists(projectRef) }),
+          queryClient.invalidateQueries({ queryKey: contentKeys.infiniteList(projectRef) }),
         ])
       }
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/content/sql-folder-contents-query.ts b/apps/studio/data/content/sql-folder-contents-query.ts
index a792caf3f112e..6027e3923c74b 100644
--- a/apps/studio/data/content/sql-folder-contents-query.ts
+++ b/apps/studio/data/content/sql-folder-contents-query.ts
@@ -57,15 +57,14 @@ export const useSQLSnippetFolderContentsQuery =  = {}
 ) =>
-  useInfiniteQuery(
-    contentKeys.folderContents(projectRef, folderId, { name, sort }),
-    ({ signal, pageParam }) =>
+  useInfiniteQuery({
+    queryKey: contentKeys.folderContents(projectRef, folderId, { name, sort }),
+    queryFn: ({ signal, pageParam }) =>
       getSQLSnippetFolderContents({ projectRef, folderId, cursor: pageParam, name, sort }, signal),
-    {
-      enabled: enabled && typeof projectRef !== 'undefined' && typeof folderId !== 'undefined',
-      getNextPageParam(lastPage) {
-        return lastPage.cursor
-      },
-      ...options,
-    }
-  )
+
+    enabled: enabled && typeof projectRef !== 'undefined' && typeof folderId !== 'undefined',
+    getNextPageParam(lastPage) {
+      return lastPage.cursor
+    },
+    ...options,
+  })
diff --git a/apps/studio/data/content/sql-folder-create-mutation.ts b/apps/studio/data/content/sql-folder-create-mutation.ts
index fe8435c254517..a626de9b399ce 100644
--- a/apps/studio/data/content/sql-folder-create-mutation.ts
+++ b/apps/studio/data/content/sql-folder-create-mutation.ts
@@ -48,7 +48,7 @@ export const useSQLSnippetFolderCreateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       if (invalidateQueriesOnSuccess) {
-        await queryClient.invalidateQueries(contentKeys.folders(projectRef))
+        await queryClient.invalidateQueries({ queryKey: contentKeys.folders(projectRef) })
       }
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/content/sql-folder-update-mutation.ts b/apps/studio/data/content/sql-folder-update-mutation.ts
index c2664a8215249..4225a2ed9d2d5 100644
--- a/apps/studio/data/content/sql-folder-update-mutation.ts
+++ b/apps/studio/data/content/sql-folder-update-mutation.ts
@@ -49,7 +49,7 @@ export const useSQLSnippetFolderCreateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       if (invalidateQueriesOnSuccess) {
-        await queryClient.invalidateQueries(contentKeys.folders(projectRef))
+        await queryClient.invalidateQueries({ queryKey: contentKeys.folders(projectRef) })
       }
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/content/sql-folders-delete-mutation.ts b/apps/studio/data/content/sql-folders-delete-mutation.ts
index 27db3961e47e2..cee6f915e0e60 100644
--- a/apps/studio/data/content/sql-folders-delete-mutation.ts
+++ b/apps/studio/data/content/sql-folders-delete-mutation.ts
@@ -44,7 +44,7 @@ export const useSQLSnippetFoldersDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       if (invalidateQueriesOnSuccess) {
-        await queryClient.invalidateQueries(contentKeys.folders(projectRef))
+        await queryClient.invalidateQueries({ queryKey: contentKeys.folders(projectRef) })
       }
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/content/sql-folders-query.ts b/apps/studio/data/content/sql-folders-query.ts
index 7b041b3ec27b6..c329e5ce01453 100644
--- a/apps/studio/data/content/sql-folders-query.ts
+++ b/apps/studio/data/content/sql-folders-query.ts
@@ -62,15 +62,13 @@ export const useSQLSnippetFoldersQuery = (
     ...options
   }: UseInfiniteQueryOptions = {}
 ) =>
-  useInfiniteQuery(
-    contentKeys.folders(projectRef, { name, sort }),
-    ({ signal, pageParam }) =>
+  useInfiniteQuery({
+    queryKey: contentKeys.folders(projectRef, { name, sort }),
+    queryFn: ({ signal, pageParam }) =>
       getSQLSnippetFolders({ projectRef, cursor: pageParam, name, sort }, signal),
-    {
-      enabled: enabled && typeof projectRef !== 'undefined',
-      getNextPageParam(lastPage) {
-        return lastPage.cursor
-      },
-      ...options,
-    }
-  )
+    enabled: enabled && typeof projectRef !== 'undefined',
+    getNextPageParam(lastPage) {
+      return lastPage.cursor
+    },
+    ...options,
+  })
diff --git a/apps/studio/data/content/sql-snippets-query.ts b/apps/studio/data/content/sql-snippets-query.ts
index b48a3d39328e3..d2ea729c5e0f6 100644
--- a/apps/studio/data/content/sql-snippets-query.ts
+++ b/apps/studio/data/content/sql-snippets-query.ts
@@ -63,15 +63,13 @@ export const useSqlSnippetsQuery = (
     ...options
   }: UseInfiniteQueryOptions = {}
 ) =>
-  useInfiniteQuery(
-    contentKeys.sqlSnippets(projectRef, { sort, name, visibility, favorite }),
-    ({ signal, pageParam: cursor }) =>
+  useInfiniteQuery({
+    queryKey: contentKeys.sqlSnippets(projectRef, { sort, name, visibility, favorite }),
+    queryFn: ({ signal, pageParam: cursor }) =>
       getSqlSnippets({ projectRef, cursor, sort, name, visibility, favorite }, signal),
-    {
-      enabled: enabled && typeof projectRef !== 'undefined',
-      getNextPageParam(lastPage) {
-        return lastPage.cursor
-      },
-      ...options,
-    }
-  )
+    enabled: enabled && typeof projectRef !== 'undefined',
+    getNextPageParam(lastPage) {
+      return lastPage.cursor
+    },
+    ...options,
+  })
diff --git a/apps/studio/data/custom-domains/custom-domains-activate-mutation.ts b/apps/studio/data/custom-domains/custom-domains-activate-mutation.ts
index d9c2e6a797903..e49c8845ccdf6 100644
--- a/apps/studio/data/custom-domains/custom-domains-activate-mutation.ts
+++ b/apps/studio/data/custom-domains/custom-domains-activate-mutation.ts
@@ -34,7 +34,7 @@ export const useCustomDomainActivateMutation = ({
     mutationFn: (vars) => activateCustomDomain(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(customDomainKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: customDomainKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/custom-domains/custom-domains-create-mutation.ts b/apps/studio/data/custom-domains/custom-domains-create-mutation.ts
index 2635ef561a15e..6c0f7c69632fd 100644
--- a/apps/studio/data/custom-domains/custom-domains-create-mutation.ts
+++ b/apps/studio/data/custom-domains/custom-domains-create-mutation.ts
@@ -39,7 +39,7 @@ export const useCustomDomainCreateMutation = ({
     mutationFn: (vars) => createCustomDomain(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(customDomainKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: customDomainKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/custom-domains/custom-domains-delete-mutation.ts b/apps/studio/data/custom-domains/custom-domains-delete-mutation.ts
index d4f20311908b5..2cd70feb212d6 100644
--- a/apps/studio/data/custom-domains/custom-domains-delete-mutation.ts
+++ b/apps/studio/data/custom-domains/custom-domains-delete-mutation.ts
@@ -40,7 +40,7 @@ export const useCustomDomainDeleteMutation = ({
       // we manually setQueriesData here instead of using
       // the standard invalidateQueries is the custom domains
       // endpoint doesn't immediately return the new state
-      queryClient.setQueriesData(customDomainKeys.list(projectRef), () => {
+      queryClient.setQueriesData({ queryKey: customDomainKeys.list(projectRef) }, () => {
         return {
           customDomain: null,
           status: '0_no_hostname_configured',
diff --git a/apps/studio/data/custom-domains/custom-domains-reverify-mutation.ts b/apps/studio/data/custom-domains/custom-domains-reverify-mutation.ts
index b3a4755096258..3ed924f6e1508 100644
--- a/apps/studio/data/custom-domains/custom-domains-reverify-mutation.ts
+++ b/apps/studio/data/custom-domains/custom-domains-reverify-mutation.ts
@@ -34,7 +34,7 @@ export const useCustomDomainReverifyMutation = ({
     mutationFn: (vars) => reverifyCustomDomain(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(customDomainKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: customDomainKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-columns/database-column-delete-mutation.ts b/apps/studio/data/database-columns/database-column-delete-mutation.ts
index 2052406998658..1bae6d88ae896 100644
--- a/apps/studio/data/database-columns/database-column-delete-mutation.ts
+++ b/apps/studio/data/database-columns/database-column-delete-mutation.ts
@@ -53,22 +53,28 @@ export const useDatabaseColumnDeleteMutation = ({
       const { projectRef, column } = variables
       await Promise.all([
         // refetch all entities in the sidebar because deleting a column may regenerate a view (and change its id)
-        queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
-        queryClient.invalidateQueries(
-          databaseKeys.foreignKeyConstraints(projectRef, column.schema)
-        ),
-        queryClient.invalidateQueries(tableEditorKeys.tableEditor(projectRef, column.table_id)),
-        queryClient.invalidateQueries(databaseKeys.tableDefinition(projectRef, column.table_id)),
+        queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(projectRef) }),
+        queryClient.invalidateQueries({
+          queryKey: databaseKeys.foreignKeyConstraints(projectRef, column.schema),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: tableEditorKeys.tableEditor(projectRef, column.table_id),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: databaseKeys.tableDefinition(projectRef, column.table_id),
+        }),
         // invalidate all views from this schema, not sure if this is needed since you can't actually delete a column
         // which has a view dependent on it
-        queryClient.invalidateQueries(viewKeys.listBySchema(projectRef, column.schema)),
+        queryClient.invalidateQueries({
+          queryKey: viewKeys.listBySchema(projectRef, column.schema),
+        }),
       ])
 
       // We need to invalidate tableRowsAndCount after tableEditor
       // to ensure the query sent is correct
-      await queryClient.invalidateQueries(
-        tableRowKeys.tableRowsAndCount(projectRef, column.table_id)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: tableRowKeys.tableRowsAndCount(projectRef, column.table_id),
+      })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/database-cron-jobs/database-cron-jobs-create-mutation.ts b/apps/studio/data/database-cron-jobs/database-cron-jobs-create-mutation.ts
index f751ef6dd425f..c191b48609097 100644
--- a/apps/studio/data/database-cron-jobs/database-cron-jobs-create-mutation.ts
+++ b/apps/studio/data/database-cron-jobs/database-cron-jobs-create-mutation.ts
@@ -46,9 +46,15 @@ export const useDatabaseCronJobCreateMutation = ({
       const { projectRef, searchTerm, identifier } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(databaseCronJobsKeys.listInfinite(projectRef, searchTerm)),
+        queryClient.invalidateQueries({
+          queryKey: databaseCronJobsKeys.listInfinite(projectRef, searchTerm),
+        }),
         ...(!!identifier
-          ? [queryClient.invalidateQueries(databaseCronJobsKeys.job(projectRef, identifier))]
+          ? [
+              queryClient.invalidateQueries({
+                queryKey: databaseCronJobsKeys.job(projectRef, identifier),
+              }),
+            ]
           : []),
       ])
 
diff --git a/apps/studio/data/database-cron-jobs/database-cron-jobs-delete-mutation.ts b/apps/studio/data/database-cron-jobs/database-cron-jobs-delete-mutation.ts
index 85780c4499405..216984f143004 100644
--- a/apps/studio/data/database-cron-jobs/database-cron-jobs-delete-mutation.ts
+++ b/apps/studio/data/database-cron-jobs/database-cron-jobs-delete-mutation.ts
@@ -43,7 +43,9 @@ export const useDatabaseCronJobDeleteMutation = ({
     mutationFn: (vars) => deleteDatabaseCronJob(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, searchTerm } = variables
-      await queryClient.invalidateQueries(databaseCronJobsKeys.listInfinite(projectRef, searchTerm))
+      await queryClient.invalidateQueries({
+        queryKey: databaseCronJobsKeys.listInfinite(projectRef, searchTerm),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-cron-jobs/database-cron-jobs-infinite-query.ts b/apps/studio/data/database-cron-jobs/database-cron-jobs-infinite-query.ts
index a2847ada0b035..c116e1d6e6410 100644
--- a/apps/studio/data/database-cron-jobs/database-cron-jobs-infinite-query.ts
+++ b/apps/studio/data/database-cron-jobs/database-cron-jobs-infinite-query.ts
@@ -93,9 +93,9 @@ export const useCronJobsInfiniteQuery = (
     TData
   > = {}
 ) =>
-  useInfiniteQuery(
-    databaseCronJobsKeys.listInfinite(projectRef, searchTerm),
-    ({ pageParam }) => {
+  useInfiniteQuery({
+    queryKey: databaseCronJobsKeys.listInfinite(projectRef, searchTerm),
+    queryFn: ({ pageParam }) => {
       return getDatabaseCronJobs({
         projectRef,
         connectionString,
@@ -103,15 +103,13 @@ export const useCronJobsInfiniteQuery = (
         page: pageParam,
       })
     },
-    {
-      staleTime: 0,
-      enabled: enabled && typeof projectRef !== 'undefined',
-      getNextPageParam(lastPage, pages) {
-        const page = pages.length
-        const hasNextPage = lastPage.length >= CRON_JOBS_PAGE_LIMIT
-        if (!hasNextPage) return undefined
-        return page
-      },
-      ...options,
-    }
-  )
+    staleTime: 0,
+    enabled: enabled && typeof projectRef !== 'undefined',
+    getNextPageParam(lastPage, pages) {
+      const page = pages.length
+      const hasNextPage = lastPage.length >= CRON_JOBS_PAGE_LIMIT
+      if (!hasNextPage) return undefined
+      return page
+    },
+    ...options,
+  })
diff --git a/apps/studio/data/database-cron-jobs/database-cron-jobs-runs-infinite-query.ts b/apps/studio/data/database-cron-jobs/database-cron-jobs-runs-infinite-query.ts
index 1556bb1a0faa7..115ed9fabc34e 100644
--- a/apps/studio/data/database-cron-jobs/database-cron-jobs-runs-infinite-query.ts
+++ b/apps/studio/data/database-cron-jobs/database-cron-jobs-runs-infinite-query.ts
@@ -61,9 +61,9 @@ export const useCronJobRunsInfiniteQuery = (
     ...options
   }: UseInfiniteQueryOptions = {}
 ) =>
-  useInfiniteQuery(
-    databaseCronJobsKeys.runsInfinite(projectRef, jobId, { status }),
-    ({ pageParam }) => {
+  useInfiniteQuery({
+    queryKey: databaseCronJobsKeys.runsInfinite(projectRef, jobId, { status }),
+    queryFn: ({ pageParam }) => {
       return getDatabaseCronJobRuns({
         projectRef,
         connectionString,
@@ -71,15 +71,13 @@ export const useCronJobRunsInfiniteQuery = (
         afterTimestamp: pageParam,
       })
     },
-    {
-      staleTime: 0,
-      enabled: enabled && typeof projectRef !== 'undefined',
+    staleTime: 0,
+    enabled: enabled && typeof projectRef !== 'undefined',
 
-      getNextPageParam(lastPage) {
-        const hasNextPage = lastPage.length <= CRON_JOB_RUNS_PAGE_SIZE
-        if (!hasNextPage) return undefined
-        return last(lastPage)?.start_time
-      },
-      ...options,
-    }
-  )
+    getNextPageParam(lastPage) {
+      const hasNextPage = lastPage.length <= CRON_JOB_RUNS_PAGE_SIZE
+      if (!hasNextPage) return undefined
+      return last(lastPage)?.start_time
+    },
+    ...options,
+  })
diff --git a/apps/studio/data/database-cron-jobs/database-cron-jobs-toggle-mutation.ts b/apps/studio/data/database-cron-jobs/database-cron-jobs-toggle-mutation.ts
index 78536ec33be2a..54eba75d8f899 100644
--- a/apps/studio/data/database-cron-jobs/database-cron-jobs-toggle-mutation.ts
+++ b/apps/studio/data/database-cron-jobs/database-cron-jobs-toggle-mutation.ts
@@ -45,7 +45,9 @@ export const useDatabaseCronJobToggleMutation = ({
     mutationFn: (vars) => toggleDatabaseCronJob(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, searchTerm } = variables
-      await queryClient.invalidateQueries(databaseCronJobsKeys.listInfinite(projectRef, searchTerm))
+      await queryClient.invalidateQueries({
+        queryKey: databaseCronJobsKeys.listInfinite(projectRef, searchTerm),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-extensions/database-extension-disable-mutation.ts b/apps/studio/data/database-extensions/database-extension-disable-mutation.ts
index 7e3121d6b17a3..db703e7d58730 100644
--- a/apps/studio/data/database-extensions/database-extension-disable-mutation.ts
+++ b/apps/studio/data/database-extensions/database-extension-disable-mutation.ts
@@ -59,8 +59,8 @@ export const useDatabaseExtensionDisableMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       await Promise.all([
-        queryClient.invalidateQueries(databaseExtensionsKeys.list(projectRef)),
-        queryClient.invalidateQueries(configKeys.upgradeEligibility(projectRef)),
+        queryClient.invalidateQueries({ queryKey: databaseExtensionsKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: configKeys.upgradeEligibility(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/database-extensions/database-extension-enable-mutation.ts b/apps/studio/data/database-extensions/database-extension-enable-mutation.ts
index af1df84bd542d..fc993017bf21c 100644
--- a/apps/studio/data/database-extensions/database-extension-enable-mutation.ts
+++ b/apps/studio/data/database-extensions/database-extension-enable-mutation.ts
@@ -3,8 +3,8 @@ import { ident } from '@supabase/pg-meta/src/pg-format'
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
-import { executeSql } from 'data/sql/execute-sql-query'
 import { configKeys } from 'data/config/keys'
+import { executeSql } from 'data/sql/execute-sql-query'
 import type { ResponseError } from 'types'
 import { databaseExtensionsKeys } from './keys'
 
@@ -58,8 +58,8 @@ export const useDatabaseExtensionEnableMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       await Promise.all([
-        queryClient.invalidateQueries(databaseExtensionsKeys.list(projectRef)),
-        queryClient.invalidateQueries(configKeys.upgradeEligibility(projectRef)),
+        queryClient.invalidateQueries({ queryKey: databaseExtensionsKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: configKeys.upgradeEligibility(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/database-functions/database-functions-create-mutation.ts b/apps/studio/data/database-functions/database-functions-create-mutation.ts
index aa1749ef5b226..c399935c6cea0 100644
--- a/apps/studio/data/database-functions/database-functions-create-mutation.ts
+++ b/apps/studio/data/database-functions/database-functions-create-mutation.ts
@@ -46,7 +46,7 @@ export const useDatabaseFunctionCreateMutation = ({
     mutationFn: (vars) => createDatabaseFunction(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseKeys.databaseFunctions(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseKeys.databaseFunctions(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-functions/database-functions-delete-mutation.ts b/apps/studio/data/database-functions/database-functions-delete-mutation.ts
index 1e168d5b7314f..2d81c973562b9 100644
--- a/apps/studio/data/database-functions/database-functions-delete-mutation.ts
+++ b/apps/studio/data/database-functions/database-functions-delete-mutation.ts
@@ -47,7 +47,7 @@ export const useDatabaseFunctionDeleteMutation = ({
     mutationFn: (vars) => deleteDatabaseFunction(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseKeys.databaseFunctions(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseKeys.databaseFunctions(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-functions/database-functions-update-mutation.ts b/apps/studio/data/database-functions/database-functions-update-mutation.ts
index 9fc0518a79561..e8b539f1153b4 100644
--- a/apps/studio/data/database-functions/database-functions-update-mutation.ts
+++ b/apps/studio/data/database-functions/database-functions-update-mutation.ts
@@ -49,7 +49,7 @@ export const useDatabaseFunctionUpdateMutation = ({
     mutationFn: (vars) => updateDatabaseFunction(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseKeys.databaseFunctions(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseKeys.databaseFunctions(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-indexes/index-create-mutation.ts b/apps/studio/data/database-indexes/index-create-mutation.ts
index c0d03c1fd418a..7dc32ef126d7d 100644
--- a/apps/studio/data/database-indexes/index-create-mutation.ts
+++ b/apps/studio/data/database-indexes/index-create-mutation.ts
@@ -55,7 +55,7 @@ export const useDatabaseIndexCreateMutation = ({
     mutationFn: (vars) => createDatabaseIndex(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseIndexesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseIndexesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-indexes/index-delete-mutation.ts b/apps/studio/data/database-indexes/index-delete-mutation.ts
index 79c3f22b337de..d4f5deea373e1 100644
--- a/apps/studio/data/database-indexes/index-delete-mutation.ts
+++ b/apps/studio/data/database-indexes/index-delete-mutation.ts
@@ -46,7 +46,7 @@ export const useDatabaseIndexDeleteMutation = ({
     mutationFn: (vars) => deleteDatabaseIndex(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseIndexesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseIndexesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-policies/database-policy-create-mutation.ts b/apps/studio/data/database-policies/database-policy-create-mutation.ts
index 386abe32cb103..8fdc5ccb5a589 100644
--- a/apps/studio/data/database-policies/database-policy-create-mutation.ts
+++ b/apps/studio/data/database-policies/database-policy-create-mutation.ts
@@ -58,7 +58,7 @@ export const useDatabasePolicyCreateMutation = ({
     mutationFn: (vars) => createDatabasePolicy(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databasePoliciesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databasePoliciesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-policies/database-policy-delete-mutation.ts b/apps/studio/data/database-policies/database-policy-delete-mutation.ts
index effb26c5c0bcc..a53ef642a4aee 100644
--- a/apps/studio/data/database-policies/database-policy-delete-mutation.ts
+++ b/apps/studio/data/database-policies/database-policy-delete-mutation.ts
@@ -52,7 +52,7 @@ export const useDatabasePolicyDeleteMutation = ({
     mutationFn: (vars) => deleteDatabasePolicy(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databasePoliciesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databasePoliciesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-policies/database-policy-update-mutation.ts b/apps/studio/data/database-policies/database-policy-update-mutation.ts
index 8a24b5307ccb7..33c2e10ab90bf 100644
--- a/apps/studio/data/database-policies/database-policy-update-mutation.ts
+++ b/apps/studio/data/database-policies/database-policy-update-mutation.ts
@@ -59,7 +59,7 @@ export const useDatabasePolicyUpdateMutation = ({
     mutationFn: (vars) => updateDatabasePolicy(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databasePoliciesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databasePoliciesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-publications/database-publications-create-mutation.ts b/apps/studio/data/database-publications/database-publications-create-mutation.ts
index 993a8a96d7ef4..e4579a3b71144 100644
--- a/apps/studio/data/database-publications/database-publications-create-mutation.ts
+++ b/apps/studio/data/database-publications/database-publications-create-mutation.ts
@@ -70,7 +70,7 @@ export const useDatabasePublicationCreateMutation = ({
     mutationFn: (vars) => createDatabasePublication(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databasePublicationsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databasePublicationsKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-publications/database-publications-update-mutation.ts b/apps/studio/data/database-publications/database-publications-update-mutation.ts
index 7f9f9fb39abc9..f4056d465f33a 100644
--- a/apps/studio/data/database-publications/database-publications-update-mutation.ts
+++ b/apps/studio/data/database-publications/database-publications-update-mutation.ts
@@ -69,7 +69,7 @@ export const useDatabasePublicationUpdateMutation = ({
     mutationFn: (vars) => updateDatabasePublication(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databasePublicationsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databasePublicationsKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queue-messages-archive-mutation.ts b/apps/studio/data/database-queues/database-queue-messages-archive-mutation.ts
index be4621bc6a633..ea21e8994a88b 100644
--- a/apps/studio/data/database-queues/database-queue-messages-archive-mutation.ts
+++ b/apps/studio/data/database-queues/database-queue-messages-archive-mutation.ts
@@ -52,9 +52,9 @@ export const useDatabaseQueueMessageArchiveMutation = ({
     mutationFn: (vars) => archiveDatabaseQueueMessage(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, queryName } = variables
-      await queryClient.invalidateQueries(
-        databaseQueuesKeys.getMessagesInfinite(projectRef, queryName)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: databaseQueuesKeys.getMessagesInfinite(projectRef, queryName),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queue-messages-delete-mutation.ts b/apps/studio/data/database-queues/database-queue-messages-delete-mutation.ts
index 6cd51ca390c30..4aa186bdab8dc 100644
--- a/apps/studio/data/database-queues/database-queue-messages-delete-mutation.ts
+++ b/apps/studio/data/database-queues/database-queue-messages-delete-mutation.ts
@@ -52,9 +52,9 @@ export const useDatabaseQueueMessageDeleteMutation = ({
     mutationFn: (vars) => deleteDatabaseQueueMessage(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, queueName } = variables
-      await queryClient.invalidateQueries(
-        databaseQueuesKeys.getMessagesInfinite(projectRef, queueName)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: databaseQueuesKeys.getMessagesInfinite(projectRef, queueName),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queue-messages-infinite-query.ts b/apps/studio/data/database-queues/database-queue-messages-infinite-query.ts
index 6631308e8e805..2e3a436f56ea3 100644
--- a/apps/studio/data/database-queues/database-queue-messages-infinite-query.ts
+++ b/apps/studio/data/database-queues/database-queue-messages-infinite-query.ts
@@ -81,9 +81,9 @@ export const useQueueMessagesInfiniteQuery = (
     ...options
   }: UseInfiniteQueryOptions = {}
 ) =>
-  useInfiniteQuery(
-    databaseQueuesKeys.getMessagesInfinite(projectRef, queueName, { status }),
-    ({ pageParam }) => {
+  useInfiniteQuery({
+    queryKey: databaseQueuesKeys.getMessagesInfinite(projectRef, queueName, { status }),
+    queryFn: ({ pageParam }) => {
       return getDatabaseQueue({
         projectRef,
         connectionString,
@@ -92,15 +92,13 @@ export const useQueueMessagesInfiniteQuery = (
         status,
       })
     },
-    {
-      staleTime: 0,
-      enabled: enabled && typeof projectRef !== 'undefined',
+    staleTime: 0,
+    enabled: enabled && typeof projectRef !== 'undefined',
 
-      getNextPageParam(lastPage) {
-        const hasNextPage = lastPage.length <= QUEUE_MESSAGES_PAGE_SIZE
-        if (!hasNextPage) return undefined
-        return last(lastPage)?.enqueued_at
-      },
-      ...options,
-    }
-  )
+    getNextPageParam(lastPage) {
+      const hasNextPage = lastPage.length <= QUEUE_MESSAGES_PAGE_SIZE
+      if (!hasNextPage) return undefined
+      return last(lastPage)?.enqueued_at
+    },
+    ...options,
+  })
diff --git a/apps/studio/data/database-queues/database-queue-messages-read-mutation.ts b/apps/studio/data/database-queues/database-queue-messages-read-mutation.ts
index d451544cc5ba6..b5ba4a1d504ba 100644
--- a/apps/studio/data/database-queues/database-queue-messages-read-mutation.ts
+++ b/apps/studio/data/database-queues/database-queue-messages-read-mutation.ts
@@ -54,9 +54,9 @@ export const useDatabaseQueueMessageReadMutation = ({
     mutationFn: (vars) => readDatabaseQueueMessage(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, queryName } = variables
-      await queryClient.invalidateQueries(
-        databaseQueuesKeys.getMessagesInfinite(projectRef, queryName)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: databaseQueuesKeys.getMessagesInfinite(projectRef, queryName),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queue-messages-send-mutation.ts b/apps/studio/data/database-queues/database-queue-messages-send-mutation.ts
index 12e0a03ca1bb6..de5553dfcd6bc 100644
--- a/apps/studio/data/database-queues/database-queue-messages-send-mutation.ts
+++ b/apps/studio/data/database-queues/database-queue-messages-send-mutation.ts
@@ -54,9 +54,9 @@ export const useDatabaseQueueMessageSendMutation = ({
     mutationFn: (vars) => sendDatabaseQueueMessage(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, queueName } = variables
-      await queryClient.invalidateQueries(
-        databaseQueuesKeys.getMessagesInfinite(projectRef, queueName)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: databaseQueuesKeys.getMessagesInfinite(projectRef, queueName),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queues-create-mutation.ts b/apps/studio/data/database-queues/database-queues-create-mutation.ts
index 4866daee1aaaa..4ba580918c713 100644
--- a/apps/studio/data/database-queues/database-queues-create-mutation.ts
+++ b/apps/studio/data/database-queues/database-queues-create-mutation.ts
@@ -2,9 +2,9 @@ import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react
 import { toast } from 'sonner'
 
 import { executeSql } from 'data/sql/execute-sql-query'
+import { tableKeys } from 'data/tables/keys'
 import type { ResponseError } from 'types'
 import { databaseQueuesKeys } from './keys'
-import { tableKeys } from 'data/tables/keys'
 
 export type DatabaseQueueCreateVariables = {
   projectRef: string
@@ -61,8 +61,8 @@ export const useDatabaseQueueCreateMutation = ({
     mutationFn: (vars) => createDatabaseQueue(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseQueuesKeys.list(projectRef))
-      queryClient.invalidateQueries(tableKeys.list(projectRef, 'pgmq'))
+      await queryClient.invalidateQueries({ queryKey: databaseQueuesKeys.list(projectRef) })
+      queryClient.invalidateQueries({ queryKey: tableKeys.list(projectRef, 'pgmq') })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queues-delete-mutation.ts b/apps/studio/data/database-queues/database-queues-delete-mutation.ts
index 4edf1913669a8..23b035aeef2b8 100644
--- a/apps/studio/data/database-queues/database-queues-delete-mutation.ts
+++ b/apps/studio/data/database-queues/database-queues-delete-mutation.ts
@@ -42,7 +42,7 @@ export const useDatabaseQueueDeleteMutation = ({
     mutationFn: (vars) => deleteDatabaseQueue(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseQueuesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseQueuesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queues-purge-mutation.ts b/apps/studio/data/database-queues/database-queues-purge-mutation.ts
index a5f6c2389b4e2..6e084223c25bb 100644
--- a/apps/studio/data/database-queues/database-queues-purge-mutation.ts
+++ b/apps/studio/data/database-queues/database-queues-purge-mutation.ts
@@ -42,9 +42,9 @@ export const useDatabaseQueuePurgeMutation = ({
     mutationFn: (vars) => purgeDatabaseQueue(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, queueName } = variables
-      await queryClient.invalidateQueries(
-        databaseQueuesKeys.getMessagesInfinite(projectRef, queueName)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: databaseQueuesKeys.getMessagesInfinite(projectRef, queueName),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-queues/database-queues-toggle-postgrest-mutation.ts b/apps/studio/data/database-queues/database-queues-toggle-postgrest-mutation.ts
index 39e21f75727d3..4e1e14566e0cd 100644
--- a/apps/studio/data/database-queues/database-queues-toggle-postgrest-mutation.ts
+++ b/apps/studio/data/database-queues/database-queues-toggle-postgrest-mutation.ts
@@ -1,11 +1,11 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
-import { toast } from 'sonner'
 import minify from 'pg-minify'
+import { toast } from 'sonner'
 
+import { databaseKeys } from 'data/database/keys'
 import { executeSql } from 'data/sql/execute-sql-query'
 import type { ResponseError } from 'types'
 import { databaseQueuesKeys } from './keys'
-import { databaseKeys } from 'data/database/keys'
 
 export type DatabaseQueueExposePostgrestVariables = {
   projectRef: string
@@ -258,9 +258,11 @@ export const useDatabaseQueueToggleExposeMutation = ({
     mutationFn: (vars) => toggleQueuesExposurePostgrest(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseQueuesKeys.exposePostgrestStatus(projectRef))
+      await queryClient.invalidateQueries({
+        queryKey: databaseQueuesKeys.exposePostgrestStatus(projectRef),
+      })
       // [Joshen] Schemas can be invalidated without waiting
-      queryClient.invalidateQueries(databaseKeys.schemas(projectRef))
+      queryClient.invalidateQueries({ queryKey: databaseKeys.schemas(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-triggers/database-trigger-create-mutation.ts b/apps/studio/data/database-triggers/database-trigger-create-mutation.ts
index b74bf73fc3917..d88f44247e13c 100644
--- a/apps/studio/data/database-triggers/database-trigger-create-mutation.ts
+++ b/apps/studio/data/database-triggers/database-trigger-create-mutation.ts
@@ -1,10 +1,10 @@
+import pgMeta from '@supabase/pg-meta'
+import { PGTriggerCreate } from '@supabase/pg-meta/src/pg-meta-triggers'
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
+import { executeSql } from 'data/sql/execute-sql-query'
 import { toast } from 'sonner'
-import pgMeta from '@supabase/pg-meta'
 import type { ResponseError } from 'types'
 import { databaseTriggerKeys } from './keys'
-import { executeSql } from 'data/sql/execute-sql-query'
-import { PGTriggerCreate } from '@supabase/pg-meta/src/pg-meta-triggers'
 
 export type DatabaseTriggerCreateVariables = {
   projectRef: string
@@ -45,7 +45,7 @@ export const useDatabaseTriggerCreateMutation = ({
     mutationFn: (vars) => createDatabaseTrigger(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseTriggerKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseTriggerKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-triggers/database-trigger-delete-mutation.ts b/apps/studio/data/database-triggers/database-trigger-delete-mutation.ts
index e1706df661fbf..c949802ca9c57 100644
--- a/apps/studio/data/database-triggers/database-trigger-delete-mutation.ts
+++ b/apps/studio/data/database-triggers/database-trigger-delete-mutation.ts
@@ -1,10 +1,9 @@
-import type { PostgresTrigger } from '@supabase/postgres-meta'
+import pgMeta from '@supabase/pg-meta'
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
+import { executeSql } from 'data/sql/execute-sql-query'
 import { toast } from 'sonner'
-import pgMeta from '@supabase/pg-meta'
 import type { ResponseError } from 'types'
 import { databaseTriggerKeys } from './keys'
-import { executeSql } from 'data/sql/execute-sql-query'
 
 export type DatabaseTriggerDeleteVariables = {
   trigger: {
@@ -50,7 +49,7 @@ export const useDatabaseTriggerDeleteMutation = ({
     mutationFn: (vars) => deleteDatabaseTrigger(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseTriggerKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseTriggerKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-triggers/database-trigger-update-mutation.ts b/apps/studio/data/database-triggers/database-trigger-update-mutation.ts
index a57221377d5d8..54340e0dd971e 100644
--- a/apps/studio/data/database-triggers/database-trigger-update-mutation.ts
+++ b/apps/studio/data/database-triggers/database-trigger-update-mutation.ts
@@ -1,10 +1,10 @@
+import pgMeta from '@supabase/pg-meta'
+import { PGTriggerUpdate } from '@supabase/pg-meta/src/pg-meta-triggers'
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
+import { executeSql } from 'data/sql/execute-sql-query'
 import { toast } from 'sonner'
-import pgMeta from '@supabase/pg-meta'
 import type { ResponseError } from 'types'
 import { databaseTriggerKeys } from './keys'
-import { executeSql } from 'data/sql/execute-sql-query'
-import { PGTriggerUpdate } from '@supabase/pg-meta/src/pg-meta-triggers'
 
 export type DatabaseTriggerUpdateVariables = {
   originalTrigger: {
@@ -52,7 +52,7 @@ export const useDatabaseTriggerUpdateMutation = ({
     mutationFn: (vars) => updateDatabaseTrigger(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseTriggerKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseTriggerKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database-triggers/database-trigger-update-transaction-mutation.ts b/apps/studio/data/database-triggers/database-trigger-update-transaction-mutation.ts
index 42c55ad7f8f72..e030be2e119af 100644
--- a/apps/studio/data/database-triggers/database-trigger-update-transaction-mutation.ts
+++ b/apps/studio/data/database-triggers/database-trigger-update-transaction-mutation.ts
@@ -1,12 +1,12 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { PGTrigger, PGTriggerCreate } from '@supabase/pg-meta/src/pg-meta-triggers'
+import { PostgresTrigger } from '@supabase/postgres-meta'
 import { executeSql } from 'data/sql/execute-sql-query'
 import { quoteLiteral } from 'lib/pg-format'
 import type { ResponseError } from 'types'
 import { databaseTriggerKeys } from './keys'
-import { PostgresTrigger } from '@supabase/postgres-meta'
-import { PGTrigger, PGTriggerCreate } from '@supabase/pg-meta/src/pg-meta-triggers'
 
 // [Joshen] Writing this query within FE as the PATCH endpoint from pg-meta only supports updating
 // trigger name and enabled mode. So we'll delete and create the trigger, within a single transaction
@@ -67,7 +67,7 @@ export const useDatabaseTriggerUpdateMutation = ({
     mutationFn: (vars) => updateDatabaseTrigger(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseTriggerKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseTriggerKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database/database-password-reset-mutation.ts b/apps/studio/data/database/database-password-reset-mutation.ts
index 60b4b8116e358..6864c7fa411a2 100644
--- a/apps/studio/data/database/database-password-reset-mutation.ts
+++ b/apps/studio/data/database/database-password-reset-mutation.ts
@@ -37,7 +37,7 @@ export const useDatabasePasswordResetMutation = ({
   return useMutation({
     mutationFn: (vars) => resetDatabasePassword(vars),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(projectKeys.detail(variables.ref))
+      await queryClient.invalidateQueries({ queryKey: projectKeys.detail(variables.ref) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/database/foreign-key-constraints-query.ts b/apps/studio/data/database/foreign-key-constraints-query.ts
index 12b39230ebd3a..c15a0e762bed6 100644
--- a/apps/studio/data/database/foreign-key-constraints-query.ts
+++ b/apps/studio/data/database/foreign-key-constraints-query.ts
@@ -146,7 +146,9 @@ export function prefetchForeignKeyConstraints(
   client: QueryClient,
   { projectRef, connectionString, schema }: ForeignKeyConstraintsVariables
 ) {
-  return client.fetchQuery(databaseKeys.foreignKeyConstraints(projectRef, schema), ({ signal }) =>
-    getForeignKeyConstraints({ projectRef, connectionString, schema }, signal)
-  )
+  return client.fetchQuery({
+    queryKey: databaseKeys.foreignKeyConstraints(projectRef, schema),
+    queryFn: ({ signal }) =>
+      getForeignKeyConstraints({ projectRef, connectionString, schema }, signal),
+  })
 }
diff --git a/apps/studio/data/database/migration-upsert-mutation.ts b/apps/studio/data/database/migration-upsert-mutation.ts
index 8bd541e1b3ac7..c132e70f49356 100644
--- a/apps/studio/data/database/migration-upsert-mutation.ts
+++ b/apps/studio/data/database/migration-upsert-mutation.ts
@@ -53,7 +53,7 @@ export const useMigrationUpsertMutation = ({
     mutationFn: (vars) => upsertMigration(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(databaseKeys.migrations(projectRef))
+      await queryClient.invalidateQueries({ queryKey: databaseKeys.migrations(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database/pgbouncer-config-update-mutation.ts b/apps/studio/data/database/pgbouncer-config-update-mutation.ts
index 603feae87f2a7..4f9d34be8d7cd 100644
--- a/apps/studio/data/database/pgbouncer-config-update-mutation.ts
+++ b/apps/studio/data/database/pgbouncer-config-update-mutation.ts
@@ -58,7 +58,7 @@ export const usePgbouncerConfigurationUpdateMutation = ({
     mutationFn: (vars) => updatePgbouncerConfiguration(vars),
     async onSuccess(data, variables, context) {
       const { ref } = variables
-      await queryClient.invalidateQueries(databaseKeys.pgbouncerConfig(ref))
+      await queryClient.invalidateQueries({ queryKey: databaseKeys.pgbouncerConfig(ref) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/database/schemas-query.ts b/apps/studio/data/database/schemas-query.ts
index 9e52ea2067830..0295f93c0e098 100644
--- a/apps/studio/data/database/schemas-query.ts
+++ b/apps/studio/data/database/schemas-query.ts
@@ -53,7 +53,8 @@ export function prefetchSchemas(
   client: QueryClient,
   { projectRef, connectionString }: SchemasVariables
 ) {
-  return client.fetchQuery(databaseKeys.schemas(projectRef), ({ signal }) =>
-    getSchemas({ projectRef, connectionString }, signal)
-  )
+  return client.fetchQuery({
+    queryKey: databaseKeys.schemas(projectRef),
+    queryFn: ({ signal }) => getSchemas({ projectRef, connectionString }, signal),
+  })
 }
diff --git a/apps/studio/data/database/supavisor-configuration-update-mutation.ts b/apps/studio/data/database/supavisor-configuration-update-mutation.ts
index 5179822e3aca4..54c6bc21f6844 100644
--- a/apps/studio/data/database/supavisor-configuration-update-mutation.ts
+++ b/apps/studio/data/database/supavisor-configuration-update-mutation.ts
@@ -49,7 +49,7 @@ export const useSupavisorConfigurationUpdateMutation = ({
     mutationFn: (vars) => updateSupavisorConfiguration(vars),
     async onSuccess(data, variables, context) {
       const { ref } = variables
-      await queryClient.invalidateQueries(databaseKeys.poolingConfiguration(ref))
+      await queryClient.invalidateQueries({ queryKey: databaseKeys.poolingConfiguration(ref) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/edge-functions/edge-functions-delete-mutation.ts b/apps/studio/data/edge-functions/edge-functions-delete-mutation.ts
index c575d7dbcd7af..d001a37e31b97 100644
--- a/apps/studio/data/edge-functions/edge-functions-delete-mutation.ts
+++ b/apps/studio/data/edge-functions/edge-functions-delete-mutation.ts
@@ -39,7 +39,8 @@ export const useEdgeFunctionDeleteMutation = ({
     mutationFn: (vars) => deleteEdgeFunction(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(edgeFunctionsKeys.list(projectRef), {
+      await queryClient.invalidateQueries({
+        queryKey: edgeFunctionsKeys.list(projectRef),
         refetchType: 'all',
       })
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/edge-functions/edge-functions-deploy-mutation.ts b/apps/studio/data/edge-functions/edge-functions-deploy-mutation.ts
index fa00cb4f9e71e..b0cf2aae2ac45 100644
--- a/apps/studio/data/edge-functions/edge-functions-deploy-mutation.ts
+++ b/apps/studio/data/edge-functions/edge-functions-deploy-mutation.ts
@@ -63,9 +63,9 @@ export const useEdgeFunctionDeployMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef, slug } = variables
       await Promise.all([
-        queryClient.invalidateQueries(edgeFunctionsKeys.list(projectRef)),
-        queryClient.invalidateQueries(edgeFunctionsKeys.detail(projectRef, slug)),
-        queryClient.invalidateQueries(edgeFunctionsKeys.body(projectRef, slug)),
+        queryClient.invalidateQueries({ queryKey: edgeFunctionsKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: edgeFunctionsKeys.detail(projectRef, slug) }),
+        queryClient.invalidateQueries({ queryKey: edgeFunctionsKeys.body(projectRef, slug) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/edge-functions/edge-functions-update-mutation.ts b/apps/studio/data/edge-functions/edge-functions-update-mutation.ts
index 5962c93ef2f9e..57e76d11b4391 100644
--- a/apps/studio/data/edge-functions/edge-functions-update-mutation.ts
+++ b/apps/studio/data/edge-functions/edge-functions-update-mutation.ts
@@ -49,8 +49,8 @@ export const useEdgeFunctionUpdateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef, slug } = variables
       await Promise.all([
-        queryClient.invalidateQueries(edgeFunctionsKeys.detail(projectRef, slug)),
-        queryClient.invalidateQueries(edgeFunctionsKeys.list(projectRef)),
+        queryClient.invalidateQueries({ queryKey: edgeFunctionsKeys.detail(projectRef, slug) }),
+        queryClient.invalidateQueries({ queryKey: edgeFunctionsKeys.list(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/entity-types/entity-types-infinite-query.ts b/apps/studio/data/entity-types/entity-types-infinite-query.ts
index 6afdb4f9a0f2a..4b9358aea4db6 100644
--- a/apps/studio/data/entity-types/entity-types-infinite-query.ts
+++ b/apps/studio/data/entity-types/entity-types-infinite-query.ts
@@ -132,9 +132,9 @@ export const useEntityTypesQuery = (
     ...options
   }: UseInfiniteQueryOptions = {}
 ) => {
-  return useInfiniteQuery(
-    entityTypeKeys.list(projectRef, { schemas, search, sort, limit, filterTypes }),
-    ({ signal, pageParam }) =>
+  return useInfiniteQuery({
+    queryKey: entityTypeKeys.list(projectRef, { schemas, search, sort, limit, filterTypes }),
+    queryFn: ({ signal, pageParam }) =>
       getEntityTypes(
         {
           projectRef,
@@ -148,22 +148,20 @@ export const useEntityTypesQuery = (
         },
         signal
       ),
-    {
-      enabled: enabled && typeof projectRef !== 'undefined',
-      getNextPageParam(lastPage, pages) {
-        const page = pages.length
-        const currentTotalCount = page * limit
-        const totalCount = lastPage.data.count
+    enabled: enabled && typeof projectRef !== 'undefined',
+    getNextPageParam(lastPage, pages) {
+      const page = pages.length
+      const currentTotalCount = page * limit
+      const totalCount = lastPage.data.count
 
-        if (currentTotalCount >= totalCount) {
-          return undefined
-        }
+      if (currentTotalCount >= totalCount) {
+        return undefined
+      }
 
-        return page
-      },
-      ...options,
-    }
-  )
+      return page
+    },
+    ...options,
+  })
 }
 
 export function prefetchEntityTypes(
@@ -178,9 +176,9 @@ export function prefetchEntityTypes(
     filterTypes,
   }: Omit
 ) {
-  return client.prefetchInfiniteQuery(
-    entityTypeKeys.list(projectRef, { schemas, search, sort, limit, filterTypes }),
-    ({ signal, pageParam }) =>
+  return client.prefetchInfiniteQuery({
+    queryKey: entityTypeKeys.list(projectRef, { schemas, search, sort, limit, filterTypes }),
+    queryFn: ({ signal, pageParam }) =>
       getEntityTypes(
         {
           projectRef,
@@ -193,6 +191,6 @@ export function prefetchEntityTypes(
           filterTypes,
         },
         signal
-      )
-  )
+      ),
+  })
 }
diff --git a/apps/studio/data/enumerated-types/enumerated-type-create-mutation.ts b/apps/studio/data/enumerated-types/enumerated-type-create-mutation.ts
index 0d468544ce671..bd468194945be 100644
--- a/apps/studio/data/enumerated-types/enumerated-type-create-mutation.ts
+++ b/apps/studio/data/enumerated-types/enumerated-type-create-mutation.ts
@@ -49,7 +49,7 @@ export const useEnumeratedTypeCreateMutation = ({
     mutationFn: (vars) => createEnumeratedType(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(enumeratedTypesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: enumeratedTypesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/enumerated-types/enumerated-type-delete-mutation.ts b/apps/studio/data/enumerated-types/enumerated-type-delete-mutation.ts
index c36530d77493e..12514e2391bd2 100644
--- a/apps/studio/data/enumerated-types/enumerated-type-delete-mutation.ts
+++ b/apps/studio/data/enumerated-types/enumerated-type-delete-mutation.ts
@@ -39,7 +39,7 @@ export const useEnumeratedTypeDeleteMutation = ({
     mutationFn: (vars) => deleteEnumeratedType(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(enumeratedTypesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: enumeratedTypesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/enumerated-types/enumerated-type-update-mutation.ts b/apps/studio/data/enumerated-types/enumerated-type-update-mutation.ts
index df73e2ef7fc46..d8fb085ecafe8 100644
--- a/apps/studio/data/enumerated-types/enumerated-type-update-mutation.ts
+++ b/apps/studio/data/enumerated-types/enumerated-type-update-mutation.ts
@@ -75,7 +75,7 @@ export const useEnumeratedTypeUpdateMutation = ({
     mutationFn: (vars) => updateEnumeratedType(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(enumeratedTypesKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: enumeratedTypesKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/fdw/fdw-create-mutation.ts b/apps/studio/data/fdw/fdw-create-mutation.ts
index e8aabc120a17e..8c366b30cb442 100644
--- a/apps/studio/data/fdw/fdw-create-mutation.ts
+++ b/apps/studio/data/fdw/fdw-create-mutation.ts
@@ -253,10 +253,10 @@ export const useFDWCreateMutation = ({
       const { projectRef } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(fdwKeys.list(projectRef), { refetchType: 'all' }),
-        queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
-        queryClient.invalidateQueries(foreignTableKeys.list(projectRef)),
-        queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef)),
+        queryClient.invalidateQueries({ queryKey: fdwKeys.list(projectRef), refetchType: 'all' }),
+        queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: foreignTableKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: vaultSecretsKeys.list(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/fdw/fdw-delete-mutation.ts b/apps/studio/data/fdw/fdw-delete-mutation.ts
index 25efcf5a5c288..48c9fa56ab6f8 100644
--- a/apps/studio/data/fdw/fdw-delete-mutation.ts
+++ b/apps/studio/data/fdw/fdw-delete-mutation.ts
@@ -110,10 +110,10 @@ export const useFDWDeleteMutation = ({
       const { projectRef } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(fdwKeys.list(projectRef), { refetchType: 'all' }),
-        queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
-        queryClient.invalidateQueries(foreignTableKeys.list(projectRef)),
-        queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef)),
+        queryClient.invalidateQueries({ queryKey: fdwKeys.list(projectRef), refetchType: 'all' }),
+        queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: foreignTableKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: vaultSecretsKeys.list(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/fdw/fdw-import-foreign-schema-mutation.ts b/apps/studio/data/fdw/fdw-import-foreign-schema-mutation.ts
index 472b0353c1796..1667e2b41a061 100644
--- a/apps/studio/data/fdw/fdw-import-foreign-schema-mutation.ts
+++ b/apps/studio/data/fdw/fdw-import-foreign-schema-mutation.ts
@@ -56,10 +56,10 @@ export const useFDWImportForeignSchemaMutation = ({
       const { projectRef } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(fdwKeys.list(projectRef), { refetchType: 'all' }),
-        queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
-        queryClient.invalidateQueries(foreignTableKeys.list(projectRef)),
-        queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef)),
+        queryClient.invalidateQueries({ queryKey: fdwKeys.list(projectRef), refetchType: 'all' }),
+        queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: foreignTableKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: vaultSecretsKeys.list(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/fdw/fdw-update-mutation.ts b/apps/studio/data/fdw/fdw-update-mutation.ts
index c07a5e7ebdc6a..c4ac3307e2b3f 100644
--- a/apps/studio/data/fdw/fdw-update-mutation.ts
+++ b/apps/studio/data/fdw/fdw-update-mutation.ts
@@ -80,10 +80,10 @@ export const useFDWUpdateMutation = ({
       const { projectRef } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(fdwKeys.list(projectRef), { refetchType: 'all' }),
-        queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
-        queryClient.invalidateQueries(foreignTableKeys.list(projectRef)),
-        queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef)),
+        queryClient.invalidateQueries({ queryKey: fdwKeys.list(projectRef), refetchType: 'all' }),
+        queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: foreignTableKeys.list(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: vaultSecretsKeys.list(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/integrations/github-connection-create-mutation.ts b/apps/studio/data/integrations/github-connection-create-mutation.ts
index 69751280141c0..befd6698c4362 100644
--- a/apps/studio/data/integrations/github-connection-create-mutation.ts
+++ b/apps/studio/data/integrations/github-connection-create-mutation.ts
@@ -35,9 +35,9 @@ export const useGitHubConnectionCreateMutation = ({
     mutationFn: (vars) => createGitHubConnection(vars),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(
-          integrationKeys.githubConnectionsList(variables.organizationId)
-        ),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.githubConnectionsList(variables.organizationId),
+        }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/integrations/github-connection-delete-mutation.ts b/apps/studio/data/integrations/github-connection-delete-mutation.ts
index 178ea3988a056..4b43017a828e6 100644
--- a/apps/studio/data/integrations/github-connection-delete-mutation.ts
+++ b/apps/studio/data/integrations/github-connection-delete-mutation.ts
@@ -35,9 +35,9 @@ export const useGitHubConnectionDeleteMutation = ({
     mutationFn: (args) => deleteConnection(args),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(
-          integrationKeys.githubConnectionsList(variables.organizationId)
-        ),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.githubConnectionsList(variables.organizationId),
+        }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/integrations/github-connection-update-mutation.ts b/apps/studio/data/integrations/github-connection-update-mutation.ts
index 640d604cd792b..55b1bbb81e9c8 100644
--- a/apps/studio/data/integrations/github-connection-update-mutation.ts
+++ b/apps/studio/data/integrations/github-connection-update-mutation.ts
@@ -41,9 +41,9 @@ export const useGitHubConnectionUpdateMutation = ({
     mutationFn: (args) => updateConnection(args),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(
-          integrationKeys.githubConnectionsList(variables.organizationId)
-        ),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.githubConnectionsList(variables.organizationId),
+        }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts b/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts
index 1eddc25626945..ff6657312a865 100644
--- a/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts
+++ b/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts
@@ -52,14 +52,16 @@ export const useIntegrationVercelConnectionsCreateMutation = ({
     mutationFn: (vars) => createIntegrationVercelConnections(vars),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(integrationKeys.integrationsList()),
-        queryClient.invalidateQueries(integrationKeys.integrationsListWithOrg(variables.orgSlug)),
-        queryClient.invalidateQueries(
-          integrationKeys.vercelProjectList(variables.organizationIntegrationId)
-        ),
-        queryClient.invalidateQueries(
-          integrationKeys.vercelConnectionsList(variables.organizationIntegrationId)
-        ),
+        queryClient.invalidateQueries({ queryKey: integrationKeys.integrationsList() }),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.integrationsListWithOrg(variables.orgSlug),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.vercelProjectList(variables.organizationIntegrationId),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.vercelConnectionsList(variables.organizationIntegrationId),
+        }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/integrations/integrations-vercel-installed-connection-delete-mutation.ts b/apps/studio/data/integrations/integrations-vercel-installed-connection-delete-mutation.ts
index 2704aaf1a4c42..30eb1edf66212 100644
--- a/apps/studio/data/integrations/integrations-vercel-installed-connection-delete-mutation.ts
+++ b/apps/studio/data/integrations/integrations-vercel-installed-connection-delete-mutation.ts
@@ -41,14 +41,16 @@ export const useIntegrationsVercelInstalledConnectionDeleteMutation = ({
     mutationFn: (args) => deleteConnection(args),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(integrationKeys.integrationsList()),
-        queryClient.invalidateQueries(integrationKeys.integrationsListWithOrg(variables.orgSlug)),
-        queryClient.invalidateQueries(
-          integrationKeys.vercelProjectList(variables.organization_integration_id)
-        ),
-        queryClient.invalidateQueries(
-          integrationKeys.vercelConnectionsList(variables.organization_integration_id)
-        ),
+        queryClient.invalidateQueries({ queryKey: integrationKeys.integrationsList() }),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.integrationsListWithOrg(variables.orgSlug),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.vercelProjectList(variables.organization_integration_id),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.vercelConnectionsList(variables.organization_integration_id),
+        }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/integrations/vercel-connection-update-mutate.ts b/apps/studio/data/integrations/vercel-connection-update-mutate.ts
index 0e2788b7f69cd..c4514d2f374b1 100644
--- a/apps/studio/data/integrations/vercel-connection-update-mutate.ts
+++ b/apps/studio/data/integrations/vercel-connection-update-mutate.ts
@@ -47,9 +47,9 @@ export const useVercelConnectionUpdateMutation = ({
   return useMutation({
     mutationFn: (vars) => updateVercelConnection(vars),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(
-        integrationKeys.vercelConnectionsList(variables.organizationIntegrationId)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: integrationKeys.vercelConnectionsList(variables.organizationIntegrationId),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/integrations/vercel-integration-create-mutation.ts b/apps/studio/data/integrations/vercel-integration-create-mutation.ts
index d14c89ef74a38..6bc91571d61fe 100644
--- a/apps/studio/data/integrations/vercel-integration-create-mutation.ts
+++ b/apps/studio/data/integrations/vercel-integration-create-mutation.ts
@@ -56,9 +56,11 @@ export const useVercelIntegrationCreateMutation = ({
     mutationFn: (vars) => createVercelIntegration(vars),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(integrationKeys.integrationsList()),
-        queryClient.invalidateQueries(integrationKeys.integrationsListWithOrg(variables.orgSlug)),
-        queryClient.invalidateQueries(integrationKeys.vercelProjectList(data.id)),
+        queryClient.invalidateQueries({ queryKey: integrationKeys.integrationsList() }),
+        queryClient.invalidateQueries({
+          queryKey: integrationKeys.integrationsListWithOrg(variables.orgSlug),
+        }),
+        queryClient.invalidateQueries({ queryKey: integrationKeys.vercelProjectList(data.id) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/invoices/invoice-payment-link-mutation.ts b/apps/studio/data/invoices/invoice-payment-link-mutation.ts
index cc452ad32782d..6bbd7ffcb64f3 100644
--- a/apps/studio/data/invoices/invoice-payment-link-mutation.ts
+++ b/apps/studio/data/invoices/invoice-payment-link-mutation.ts
@@ -48,7 +48,9 @@ export const useInvoicePaymentLinkGetMutation = ({
     mutationFn: (vars) => updateInvoicePaymentLink(vars),
     async onError(error, variables, context) {
       // In case of an error, there is a good chance that the invoice status has changed, so we invalidate the cache to reflect the updated status
-      await Promise.all([queryClient.invalidateQueries(invoicesKeys.listAndCount(variables.slug))])
+      await Promise.all([
+        queryClient.invalidateQueries({ queryKey: invoicesKeys.listAndCount(variables.slug) }),
+      ])
 
       if (onError === undefined) {
         toast.error(error.message)
diff --git a/apps/studio/data/jwt-signing-keys/jwt-signing-key-create-mutation.ts b/apps/studio/data/jwt-signing-keys/jwt-signing-key-create-mutation.ts
index fdf264b4594ec..8c662686c73e0 100644
--- a/apps/studio/data/jwt-signing-keys/jwt-signing-key-create-mutation.ts
+++ b/apps/studio/data/jwt-signing-keys/jwt-signing-key-create-mutation.ts
@@ -48,7 +48,7 @@ export const useJWTSigningKeyCreateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(jwtSigningKeysKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: jwtSigningKeysKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/jwt-signing-keys/jwt-signing-key-delete-mutation.ts b/apps/studio/data/jwt-signing-keys/jwt-signing-key-delete-mutation.ts
index 64a58b5696ce4..4b5cc07bddeea 100644
--- a/apps/studio/data/jwt-signing-keys/jwt-signing-key-delete-mutation.ts
+++ b/apps/studio/data/jwt-signing-keys/jwt-signing-key-delete-mutation.ts
@@ -40,7 +40,7 @@ export const useJWTSigningKeyDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(jwtSigningKeysKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: jwtSigningKeysKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/jwt-signing-keys/jwt-signing-key-update-mutation.ts b/apps/studio/data/jwt-signing-keys/jwt-signing-key-update-mutation.ts
index edbc4f2bf89ae..83198de5b5e85 100644
--- a/apps/studio/data/jwt-signing-keys/jwt-signing-key-update-mutation.ts
+++ b/apps/studio/data/jwt-signing-keys/jwt-signing-key-update-mutation.ts
@@ -44,7 +44,7 @@ export const useJWTSigningKeyUpdateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(jwtSigningKeysKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: jwtSigningKeysKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/jwt-signing-keys/legacy-jwt-signing-key-create-mutation.ts b/apps/studio/data/jwt-signing-keys/legacy-jwt-signing-key-create-mutation.ts
index d20e775c79647..32e40a80fdedf 100644
--- a/apps/studio/data/jwt-signing-keys/legacy-jwt-signing-key-create-mutation.ts
+++ b/apps/studio/data/jwt-signing-keys/legacy-jwt-signing-key-create-mutation.ts
@@ -47,9 +47,9 @@ export const useLegacyJWTSigningKeyCreateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(jwtSigningKeysKeys.legacy(projectRef))
+      await queryClient.invalidateQueries({ queryKey: jwtSigningKeysKeys.legacy(projectRef) })
       // invalidate the keys as well since migration creates 2 new keys and the UI needs to be refreshed
-      await queryClient.invalidateQueries(jwtSigningKeysKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: jwtSigningKeysKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/lint/create-lint-rule-mutation.ts b/apps/studio/data/lint/create-lint-rule-mutation.ts
index e128c5345e459..11f0d8a1f5953 100644
--- a/apps/studio/data/lint/create-lint-rule-mutation.ts
+++ b/apps/studio/data/lint/create-lint-rule-mutation.ts
@@ -41,8 +41,8 @@ export const useLintRuleCreateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       await Promise.all([
-        queryClient.invalidateQueries(lintKeys.lintRules(projectRef)),
-        queryClient.invalidateQueries(lintKeys.lint(projectRef)),
+        queryClient.invalidateQueries({ queryKey: lintKeys.lintRules(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: lintKeys.lint(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/lint/delete-lint-rule-mutation.ts b/apps/studio/data/lint/delete-lint-rule-mutation.ts
index 507745b75754a..4a2a43c98f277 100644
--- a/apps/studio/data/lint/delete-lint-rule-mutation.ts
+++ b/apps/studio/data/lint/delete-lint-rule-mutation.ts
@@ -35,8 +35,8 @@ export const useLintRuleDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
       await Promise.all([
-        queryClient.invalidateQueries(lintKeys.lintRules(projectRef)),
-        queryClient.invalidateQueries(lintKeys.lint(projectRef)),
+        queryClient.invalidateQueries({ queryKey: lintKeys.lintRules(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: lintKeys.lint(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/log-drains/create-log-drain-mutation.ts b/apps/studio/data/log-drains/create-log-drain-mutation.ts
index 9e77581c1f2ee..afc9467afd719 100644
--- a/apps/studio/data/log-drains/create-log-drain-mutation.ts
+++ b/apps/studio/data/log-drains/create-log-drain-mutation.ts
@@ -46,7 +46,7 @@ export const useCreateLogDrainMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(logDrainsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: logDrainsKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/log-drains/delete-log-drain-mutation.ts b/apps/studio/data/log-drains/delete-log-drain-mutation.ts
index 862a0f0074c6c..075e11fa223f2 100644
--- a/apps/studio/data/log-drains/delete-log-drain-mutation.ts
+++ b/apps/studio/data/log-drains/delete-log-drain-mutation.ts
@@ -37,7 +37,7 @@ export const useDeleteLogDrainMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(logDrainsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: logDrainsKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/log-drains/update-log-drain-mutation.ts b/apps/studio/data/log-drains/update-log-drain-mutation.ts
index bec7a574481db..05f681088e979 100644
--- a/apps/studio/data/log-drains/update-log-drain-mutation.ts
+++ b/apps/studio/data/log-drains/update-log-drain-mutation.ts
@@ -51,7 +51,7 @@ export const useUpdateLogDrainMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
 
-      await queryClient.invalidateQueries(logDrainsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: logDrainsKeys.list(projectRef) })
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/logs/unified-logs-infinite-query.ts b/apps/studio/data/logs/unified-logs-infinite-query.ts
index 6c58cfee83c7a..e31534d98a3b8 100644
--- a/apps/studio/data/logs/unified-logs-infinite-query.ts
+++ b/apps/studio/data/logs/unified-logs-infinite-query.ts
@@ -161,25 +161,23 @@ export const useUnifiedLogsInfiniteQuery = (
     ...options
   }: UseInfiniteQueryOptions = {}
 ) => {
-  return useInfiniteQuery(
-    logsKeys.unifiedLogsInfinite(projectRef, search),
-    ({ signal, pageParam }) => {
+  return useInfiniteQuery({
+    queryKey: logsKeys.unifiedLogsInfinite(projectRef, search),
+    queryFn: ({ signal, pageParam }) => {
       return getUnifiedLogs({ projectRef, search, pageParam }, signal)
     },
-    {
-      enabled: enabled && typeof projectRef !== 'undefined',
-      keepPreviousData: true,
-      getPreviousPageParam: (firstPage) => {
-        if (!firstPage.prevCursor) return null
-        const result = { cursor: firstPage.prevCursor, direction: 'prev' }
-        return result
-      },
-      getNextPageParam(lastPage) {
-        if (!lastPage.nextCursor || lastPage.data.length === 0) return null
-        return { cursor: lastPage.nextCursor, direction: 'next' }
-      },
-      ...UNIFIED_LOGS_QUERY_OPTIONS,
-      ...options,
-    }
-  )
+    enabled: enabled && typeof projectRef !== 'undefined',
+    keepPreviousData: true,
+    getPreviousPageParam: (firstPage) => {
+      if (!firstPage.prevCursor) return null
+      const result = { cursor: firstPage.prevCursor, direction: 'prev' }
+      return result
+    },
+    getNextPageParam(lastPage) {
+      if (!lastPage.nextCursor || lastPage.data.length === 0) return null
+      return { cursor: lastPage.nextCursor, direction: 'next' }
+    },
+    ...UNIFIED_LOGS_QUERY_OPTIONS,
+    ...options,
+  })
 }
diff --git a/apps/studio/data/network-restrictions/network-retrictions-apply-mutation.ts b/apps/studio/data/network-restrictions/network-retrictions-apply-mutation.ts
index ec3211b30c76f..cceb2c51c868f 100644
--- a/apps/studio/data/network-restrictions/network-retrictions-apply-mutation.ts
+++ b/apps/studio/data/network-restrictions/network-retrictions-apply-mutation.ts
@@ -51,7 +51,7 @@ export const useNetworkRestrictionsApplyMutation = ({
     mutationFn: (vars) => applyNetworkRestrictions(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(networkRestrictionKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: networkRestrictionKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/notifications/notifications-v2-archive-all-mutation.ts b/apps/studio/data/notifications/notifications-v2-archive-all-mutation.ts
index 56ea6bb19118b..83ddae2501a50 100644
--- a/apps/studio/data/notifications/notifications-v2-archive-all-mutation.ts
+++ b/apps/studio/data/notifications/notifications-v2-archive-all-mutation.ts
@@ -25,7 +25,7 @@ export const useNotificationsArchiveAllMutation = ({
   return useMutation({
     mutationFn: () => archiveAllNotifications(),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(notificationKeys.list())
+      await queryClient.invalidateQueries({ queryKey: notificationKeys.list() })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/notifications/notifications-v2-query.ts b/apps/studio/data/notifications/notifications-v2-query.ts
index 60df39adb7920..b3ad7f4fdf83e 100644
--- a/apps/studio/data/notifications/notifications-v2-query.ts
+++ b/apps/studio/data/notifications/notifications-v2-query.ts
@@ -68,18 +68,16 @@ export const useNotificationsV2Query = (
     ...options
   }: UseInfiniteQueryOptions = {}
 ) => {
-  return useInfiniteQuery(
-    notificationKeys.listV2({ status, filters, limit }),
-    ({ signal, pageParam }) =>
+  return useInfiniteQuery({
+    queryKey: notificationKeys.listV2({ status, filters, limit }),
+    queryFn: ({ signal, pageParam }) =>
       getNotifications({ status, filters, limit, page: pageParam }, signal),
-    {
-      enabled: enabled,
-      getNextPageParam(lastPage, pages) {
-        const page = pages.length
-        if ((lastPage ?? []).length < limit) return undefined
-        return page
-      },
-      ...options,
-    }
-  )
+    enabled: enabled,
+    getNextPageParam(lastPage, pages) {
+      const page = pages.length
+      if ((lastPage ?? []).length < limit) return undefined
+      return page
+    },
+    ...options,
+  })
 }
diff --git a/apps/studio/data/notifications/notifications-v2-update-mutation.ts b/apps/studio/data/notifications/notifications-v2-update-mutation.ts
index 4cb2bea695ec4..3747cce4a6bf6 100644
--- a/apps/studio/data/notifications/notifications-v2-update-mutation.ts
+++ b/apps/studio/data/notifications/notifications-v2-update-mutation.ts
@@ -34,7 +34,7 @@ export const useNotificationsV2UpdateMutation = ({
   return useMutation({
     mutationFn: (vars) => updateNotifications(vars),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(['notifications'])
+      await queryClient.invalidateQueries({ queryKey: ['notifications'] })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/oauth-secrets/client-secret-create-mutation.ts b/apps/studio/data/oauth-secrets/client-secret-create-mutation.ts
index 13294777e913b..1ae00e41a42d0 100644
--- a/apps/studio/data/oauth-secrets/client-secret-create-mutation.ts
+++ b/apps/studio/data/oauth-secrets/client-secret-create-mutation.ts
@@ -32,7 +32,7 @@ export const useClientSecretCreateMutation = ({
     mutationFn: (vars) => createClientSecret(vars),
     async onSuccess(data, variables, context) {
       const { slug, appId } = variables
-      await queryClient.invalidateQueries(clientSecretKeys.list(slug, appId))
+      await queryClient.invalidateQueries({ queryKey: clientSecretKeys.list(slug, appId) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/oauth-secrets/client-secret-delete-mutation.ts b/apps/studio/data/oauth-secrets/client-secret-delete-mutation.ts
index 3429b788aae37..6ead4a0167aa7 100644
--- a/apps/studio/data/oauth-secrets/client-secret-delete-mutation.ts
+++ b/apps/studio/data/oauth-secrets/client-secret-delete-mutation.ts
@@ -33,7 +33,7 @@ export const useClientSecretDeleteMutation = ({
     mutationFn: (vars) => deleteClientSecret(vars),
     async onSuccess(data, variables, context) {
       const { slug, appId } = variables
-      await queryClient.invalidateQueries(clientSecretKeys.list(slug, appId))
+      await queryClient.invalidateQueries({ queryKey: clientSecretKeys.list(slug, appId) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/oauth/authorized-app-revoke-mutation.ts b/apps/studio/data/oauth/authorized-app-revoke-mutation.ts
index 22adc77b6240e..5b9a0a6f35371 100644
--- a/apps/studio/data/oauth/authorized-app-revoke-mutation.ts
+++ b/apps/studio/data/oauth/authorized-app-revoke-mutation.ts
@@ -38,7 +38,7 @@ export const useAuthorizedAppRevokeMutation = ({
     mutationFn: (vars) => revokeAuthorizedApp(vars),
     async onSuccess(data, variables, context) {
       const { slug } = variables
-      await queryClient.invalidateQueries(oauthAppKeys.authorizedApps(slug))
+      await queryClient.invalidateQueries({ queryKey: oauthAppKeys.authorizedApps(slug) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/oauth/oauth-app-create-mutation.ts b/apps/studio/data/oauth/oauth-app-create-mutation.ts
index a25d774f44c12..43b7d495bae6e 100644
--- a/apps/studio/data/oauth/oauth-app-create-mutation.ts
+++ b/apps/studio/data/oauth/oauth-app-create-mutation.ts
@@ -57,7 +57,7 @@ export const useOAuthAppCreateMutation = ({
     mutationFn: (vars) => createOAuthApp(vars),
     async onSuccess(data, variables, context) {
       const { slug } = variables
-      await queryClient.invalidateQueries(oauthAppKeys.oauthApps(slug))
+      await queryClient.invalidateQueries({ queryKey: oauthAppKeys.oauthApps(slug) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/oauth/oauth-app-delete-mutation.ts b/apps/studio/data/oauth/oauth-app-delete-mutation.ts
index d508fd895a181..51adba7fcb6da 100644
--- a/apps/studio/data/oauth/oauth-app-delete-mutation.ts
+++ b/apps/studio/data/oauth/oauth-app-delete-mutation.ts
@@ -38,7 +38,7 @@ export const useOAuthAppDeleteMutation = ({
     mutationFn: (vars) => deleteOAuthApp(vars),
     async onSuccess(data, variables, context) {
       const { slug } = variables
-      await queryClient.invalidateQueries(oauthAppKeys.oauthApps(slug))
+      await queryClient.invalidateQueries({ queryKey: oauthAppKeys.oauthApps(slug) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/oauth/oauth-app-update-mutation.ts b/apps/studio/data/oauth/oauth-app-update-mutation.ts
index c1ebe217b1b4e..c533853f84acf 100644
--- a/apps/studio/data/oauth/oauth-app-update-mutation.ts
+++ b/apps/studio/data/oauth/oauth-app-update-mutation.ts
@@ -2,9 +2,9 @@ import type { OAuthScope } from '@supabase/shared-types/out/constants'
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { handleError, put } from 'data/fetchers'
 import type { ResponseError } from 'types'
 import { oauthAppKeys } from './keys'
-import { handleError, put } from 'data/fetchers'
 
 export type OAuthAppUpdateVariables = {
   id: string
@@ -61,7 +61,7 @@ export const useOAuthAppUpdateMutation = ({
     mutationFn: (vars) => updateOAuthApp(vars),
     async onSuccess(data, variables, context) {
       const { slug } = variables
-      await queryClient.invalidateQueries(oauthAppKeys.oauthApps(slug))
+      await queryClient.invalidateQueries({ queryKey: oauthAppKeys.oauthApps(slug) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/organization-members/organization-invitation-create-mutation.ts b/apps/studio/data/organization-members/organization-invitation-create-mutation.ts
index 466ff6a6ac75f..184f3f2adba82 100644
--- a/apps/studio/data/organization-members/organization-invitation-create-mutation.ts
+++ b/apps/studio/data/organization-members/organization-invitation-create-mutation.ts
@@ -58,8 +58,8 @@ export const useOrganizationCreateInvitationMutation = ({
       const { slug } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(organizationKeys.rolesV2(slug)),
-        queryClient.invalidateQueries(organizationKeysV1.members(slug)),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.rolesV2(slug) }),
+        queryClient.invalidateQueries({ queryKey: organizationKeysV1.members(slug) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/organization-members/organization-invitation-delete-mutation.ts b/apps/studio/data/organization-members/organization-invitation-delete-mutation.ts
index 19a0d9ed66426..eef180c15b3a3 100644
--- a/apps/studio/data/organization-members/organization-invitation-delete-mutation.ts
+++ b/apps/studio/data/organization-members/organization-invitation-delete-mutation.ts
@@ -51,8 +51,8 @@ export const useOrganizationDeleteInvitationMutation = ({
 
       if (!skipInvalidation) {
         await Promise.all([
-          queryClient.invalidateQueries(organizationKeys.rolesV2(slug)),
-          queryClient.invalidateQueries(organizationKeysV1.members(slug)),
+          queryClient.invalidateQueries({ queryKey: organizationKeys.rolesV2(slug) }),
+          queryClient.invalidateQueries({ queryKey: organizationKeysV1.members(slug) }),
         ])
       }
 
diff --git a/apps/studio/data/organization-members/organization-member-role-assign-mutation.ts b/apps/studio/data/organization-members/organization-member-role-assign-mutation.ts
index bde0fd9360858..80a9ee5567e3b 100644
--- a/apps/studio/data/organization-members/organization-member-role-assign-mutation.ts
+++ b/apps/studio/data/organization-members/organization-member-role-assign-mutation.ts
@@ -61,8 +61,8 @@ export const useOrganizationMemberAssignRoleMutation = ({
 
       if (!skipInvalidation) {
         await Promise.all([
-          queryClient.invalidateQueries(organizationKeys.rolesV2(slug)),
-          queryClient.invalidateQueries(organizationKeysV1.members(slug)),
+          queryClient.invalidateQueries({ queryKey: organizationKeys.rolesV2(slug) }),
+          queryClient.invalidateQueries({ queryKey: organizationKeysV1.members(slug) }),
         ])
       }
 
diff --git a/apps/studio/data/organization-members/organization-member-role-unassign-mutation.ts b/apps/studio/data/organization-members/organization-member-role-unassign-mutation.ts
index 58680b9457fef..593013f5183d1 100644
--- a/apps/studio/data/organization-members/organization-member-role-unassign-mutation.ts
+++ b/apps/studio/data/organization-members/organization-member-role-unassign-mutation.ts
@@ -62,8 +62,8 @@ export const useOrganizationMemberUnassignRoleMutation = ({
 
       if (!skipInvalidation) {
         await Promise.all([
-          queryClient.invalidateQueries(organizationKeys.rolesV2(slug)),
-          queryClient.invalidateQueries(organizationKeysV1.members(slug)),
+          queryClient.invalidateQueries({ queryKey: organizationKeys.rolesV2(slug) }),
+          queryClient.invalidateQueries({ queryKey: organizationKeysV1.members(slug) }),
         ])
       }
 
diff --git a/apps/studio/data/organization-members/organization-member-role-update-mutation.ts b/apps/studio/data/organization-members/organization-member-role-update-mutation.ts
index a6939f982e900..8e52a5aa9d1d1 100644
--- a/apps/studio/data/organization-members/organization-member-role-update-mutation.ts
+++ b/apps/studio/data/organization-members/organization-member-role-update-mutation.ts
@@ -61,8 +61,8 @@ export const useOrganizationMemberUpdateRoleMutation = ({
 
       if (!skipInvalidation) {
         await Promise.all([
-          queryClient.invalidateQueries(organizationKeys.rolesV2(slug)),
-          queryClient.invalidateQueries(organizationKeysV1.members(slug)),
+          queryClient.invalidateQueries({ queryKey: organizationKeys.rolesV2(slug) }),
+          queryClient.invalidateQueries({ queryKey: organizationKeysV1.members(slug) }),
         ])
       }
 
diff --git a/apps/studio/data/organizations/organization-create-mutation.ts b/apps/studio/data/organizations/organization-create-mutation.ts
index 657a91940c797..cab7a6b97fb00 100644
--- a/apps/studio/data/organizations/organization-create-mutation.ts
+++ b/apps/studio/data/organizations/organization-create-mutation.ts
@@ -76,7 +76,7 @@ export const useOrganizationCreateMutation = ({
           }
         )
 
-        await queryClient.invalidateQueries(permissionKeys.list())
+        await queryClient.invalidateQueries({ queryKey: permissionKeys.list() })
       }
 
       await onSuccess?.(data, variables, context)
@@ -156,7 +156,7 @@ export const useAwsManagedOrganizationCreateMutation = ({
           }
         )
 
-        await queryClient.invalidateQueries(permissionKeys.list())
+        await queryClient.invalidateQueries({ queryKey: permissionKeys.list() })
       }
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/organizations/organization-customer-profile-update-mutation.ts b/apps/studio/data/organizations/organization-customer-profile-update-mutation.ts
index 341d24f715868..f396cae33521a 100644
--- a/apps/studio/data/organizations/organization-customer-profile-update-mutation.ts
+++ b/apps/studio/data/organizations/organization-customer-profile-update-mutation.ts
@@ -62,14 +62,17 @@ export const useOrganizationCustomerProfileUpdateMutation = ({
       const { address, slug, billing_name } = variables
 
       // We do not invalidate here as GET endpoint data is stale for 1-2 seconds, so we handle state manually
-      queryClient.setQueriesData(organizationKeys.customerProfile(slug), (prev: any) => {
-        if (!prev) return prev
-        return {
-          ...prev,
-          billing_name,
-          address,
+      queryClient.setQueriesData(
+        { queryKey: organizationKeys.customerProfile(slug) },
+        (prev: any) => {
+          if (!prev) return prev
+          return {
+            ...prev,
+            billing_name,
+            address,
+          }
         }
-      })
+      )
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/organizations/organization-delete-mutation.ts b/apps/studio/data/organizations/organization-delete-mutation.ts
index f4460804521eb..e303cbdc37430 100644
--- a/apps/studio/data/organizations/organization-delete-mutation.ts
+++ b/apps/studio/data/organizations/organization-delete-mutation.ts
@@ -34,8 +34,8 @@ export const useOrganizationDeleteMutation = ({
     mutationFn: (vars) => deleteOrganization(vars),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(organizationKeys.list()),
-        queryClient.invalidateQueries(permissionKeys.list()),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.list() }),
+        queryClient.invalidateQueries({ queryKey: permissionKeys.list() }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/organizations/organization-member-delete-mutation.ts b/apps/studio/data/organizations/organization-member-delete-mutation.ts
index 8b9b05c3f33f7..dc4a9e0f0e5fd 100644
--- a/apps/studio/data/organizations/organization-member-delete-mutation.ts
+++ b/apps/studio/data/organizations/organization-member-delete-mutation.ts
@@ -47,8 +47,8 @@ export const useOrganizationMemberDeleteMutation = ({
       const { slug } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(organizationKeys.members(slug)),
-        queryClient.invalidateQueries(organizationKeys.roles(slug)),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.members(slug) }),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.roles(slug) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/organizations/organization-payment-method-default-mutation.ts b/apps/studio/data/organizations/organization-payment-method-default-mutation.ts
index 145088ae520f4..fd0b6f1c2d7a5 100644
--- a/apps/studio/data/organizations/organization-payment-method-default-mutation.ts
+++ b/apps/studio/data/organizations/organization-payment-method-default-mutation.ts
@@ -52,14 +52,17 @@ export const useOrganizationPaymentMethodMarkAsDefaultMutation = ({
     async onSuccess(data, variables, context) {
       const { slug, paymentMethodId } = variables
       // We do not invalidate payment methods here as endpoint data is stale for 1-2 seconds, so we handle state manually
-      queryClient.setQueriesData(organizationKeys.paymentMethods(slug), (prev: any) => {
-        if (!prev) return prev
-        return {
-          ...prev,
-          defaultPaymentMethodId: paymentMethodId,
-          data: prev.data.map((pm: any) => ({ ...pm, is_default: pm.id === paymentMethodId })),
+      queryClient.setQueriesData(
+        { queryKey: organizationKeys.paymentMethods(slug) },
+        (prev: any) => {
+          if (!prev) return prev
+          return {
+            ...prev,
+            defaultPaymentMethodId: paymentMethodId,
+            data: prev.data.map((pm: any) => ({ ...pm, is_default: pm.id === paymentMethodId })),
+          }
         }
-      })
+      )
 
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/organizations/organization-payment-method-delete-mutation.ts b/apps/studio/data/organizations/organization-payment-method-delete-mutation.ts
index 12dd4d6f33a6e..35cc15ed959a5 100644
--- a/apps/studio/data/organizations/organization-payment-method-delete-mutation.ts
+++ b/apps/studio/data/organizations/organization-payment-method-delete-mutation.ts
@@ -52,7 +52,7 @@ export const useOrganizationPaymentMethodDeleteMutation = ({
     mutationFn: (vars) => deletePaymentMethod(vars),
     async onSuccess(data, variables, context) {
       const { slug } = variables
-      await queryClient.invalidateQueries(organizationKeys.paymentMethods(slug))
+      await queryClient.invalidateQueries({ queryKey: organizationKeys.paymentMethods(slug) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/organizations/organizations-query.ts b/apps/studio/data/organizations/organizations-query.ts
index d4948d3bfef35..c0898ea2c3e46 100644
--- a/apps/studio/data/organizations/organizations-query.ts
+++ b/apps/studio/data/organizations/organizations-query.ts
@@ -64,5 +64,5 @@ export const useOrganizationsQuery = ({
 }
 
 export function invalidateOrganizationsQuery(client: QueryClient) {
-  return client.invalidateQueries(organizationKeys.list())
+  return client.invalidateQueries({ queryKey: organizationKeys.list() })
 }
diff --git a/apps/studio/data/privileges/column-privileges-grant-mutation.ts b/apps/studio/data/privileges/column-privileges-grant-mutation.ts
index 346fb3cd917d4..31c485675b6c0 100644
--- a/apps/studio/data/privileges/column-privileges-grant-mutation.ts
+++ b/apps/studio/data/privileges/column-privileges-grant-mutation.ts
@@ -60,7 +60,7 @@ export const useColumnPrivilegesGrantMutation = ({
       const { projectRef } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(privilegeKeys.columnPrivilegesList(projectRef)),
+        queryClient.invalidateQueries({ queryKey: privilegeKeys.columnPrivilegesList(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/privileges/column-privileges-revoke-mutation.ts b/apps/studio/data/privileges/column-privileges-revoke-mutation.ts
index 7e15e29b4cfab..bffbb29542753 100644
--- a/apps/studio/data/privileges/column-privileges-revoke-mutation.ts
+++ b/apps/studio/data/privileges/column-privileges-revoke-mutation.ts
@@ -58,7 +58,7 @@ export const useColumnPrivilegesRevokeMutation = ({
       const { projectRef } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(privilegeKeys.columnPrivilegesList(projectRef)),
+        queryClient.invalidateQueries({ queryKey: privilegeKeys.columnPrivilegesList(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/privileges/table-privileges-grant-mutation.ts b/apps/studio/data/privileges/table-privileges-grant-mutation.ts
index a9892062bbacf..8347e44c1ea5b 100644
--- a/apps/studio/data/privileges/table-privileges-grant-mutation.ts
+++ b/apps/studio/data/privileges/table-privileges-grant-mutation.ts
@@ -4,8 +4,8 @@ import { toast } from 'sonner'
 
 import { executeSql } from 'data/sql/execute-sql-query'
 import type { ResponseError } from 'types'
-import { invalidateTablePrivilegesQuery } from './table-privileges-query'
 import { privilegeKeys } from './keys'
+import { invalidateTablePrivilegesQuery } from './table-privileges-query'
 
 export type TablePrivilegesGrant = Parameters<
   typeof pgMeta.tablePrivileges.grant
@@ -53,7 +53,7 @@ export const useTablePrivilegesGrantMutation = ({
 
       await Promise.all([
         invalidateTablePrivilegesQuery(queryClient, projectRef),
-        queryClient.invalidateQueries(privilegeKeys.columnPrivilegesList(projectRef)),
+        queryClient.invalidateQueries({ queryKey: privilegeKeys.columnPrivilegesList(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/privileges/table-privileges-revoke-mutation.ts b/apps/studio/data/privileges/table-privileges-revoke-mutation.ts
index eee996e3c8b29..5f0e9c4d76059 100644
--- a/apps/studio/data/privileges/table-privileges-revoke-mutation.ts
+++ b/apps/studio/data/privileges/table-privileges-revoke-mutation.ts
@@ -4,8 +4,8 @@ import { toast } from 'sonner'
 
 import { executeSql } from 'data/sql/execute-sql-query'
 import type { ResponseError } from 'types'
-import { invalidateTablePrivilegesQuery } from './table-privileges-query'
 import { privilegeKeys } from './keys'
+import { invalidateTablePrivilegesQuery } from './table-privileges-query'
 
 export type TablePrivilegesRevoke = Parameters<
   typeof pgMeta.tablePrivileges.revoke
@@ -53,7 +53,7 @@ export const useTablePrivilegesRevokeMutation = ({
 
       await Promise.all([
         invalidateTablePrivilegesQuery(queryClient, projectRef),
-        queryClient.invalidateQueries(privilegeKeys.columnPrivilegesList(projectRef)),
+        queryClient.invalidateQueries({ queryKey: privilegeKeys.columnPrivilegesList(projectRef) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts b/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts
index 556189898f2ed..2bac6e111e507 100644
--- a/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts
+++ b/apps/studio/data/profile/mfa-challenge-and-verify-mutation.ts
@@ -41,8 +41,10 @@ export const useMfaChallengeAndVerifyMutation = ({
       const refreshFactors = variables.refreshFactors ?? true
 
       await Promise.all([
-        ...(refreshFactors ? [queryClient.invalidateQueries(profileKeys.mfaFactors())] : []),
-        queryClient.invalidateQueries(profileKeys.aaLevel()),
+        ...(refreshFactors
+          ? [queryClient.invalidateQueries({ queryKey: profileKeys.mfaFactors() })]
+          : []),
+        queryClient.invalidateQueries({ queryKey: profileKeys.aaLevel() }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/profile/mfa-unenroll-mutation.ts b/apps/studio/data/profile/mfa-unenroll-mutation.ts
index 5b6aa5288b672..a94fe2582494c 100644
--- a/apps/studio/data/profile/mfa-unenroll-mutation.ts
+++ b/apps/studio/data/profile/mfa-unenroll-mutation.ts
@@ -29,8 +29,8 @@ export const useMfaUnenrollMutation = ({
     async onSuccess(data, variables, context) {
       // when a factor is unenrolled, the aaLevel is bumped down if it's the last factor
       await Promise.all([
-        queryClient.invalidateQueries(profileKeys.mfaFactors()),
-        queryClient.invalidateQueries(profileKeys.aaLevel()),
+        queryClient.invalidateQueries({ queryKey: profileKeys.mfaFactors() }),
+        queryClient.invalidateQueries({ queryKey: profileKeys.aaLevel() }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/profile/profile-create-mutation.ts b/apps/studio/data/profile/profile-create-mutation.ts
index 48e296baed3f2..b49484fd05e8f 100644
--- a/apps/studio/data/profile/profile-create-mutation.ts
+++ b/apps/studio/data/profile/profile-create-mutation.ts
@@ -30,9 +30,9 @@ export const useProfileCreateMutation = ({
     mutationFn: () => createProfile(),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(profileKeys.profile()),
-        queryClient.invalidateQueries(organizationKeys.list()),
-        queryClient.invalidateQueries(permissionKeys.list()),
+        queryClient.invalidateQueries({ queryKey: profileKeys.profile() }),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.list() }),
+        queryClient.invalidateQueries({ queryKey: permissionKeys.list() }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/profile/profile-unlink-identity-mutation.ts b/apps/studio/data/profile/profile-unlink-identity-mutation.ts
index 50653e0543b70..eb6eb658c683c 100644
--- a/apps/studio/data/profile/profile-unlink-identity-mutation.ts
+++ b/apps/studio/data/profile/profile-unlink-identity-mutation.ts
@@ -29,7 +29,7 @@ export const useUnlinkIdentityMutation = ({
     async onSuccess(data, variables, context) {
       await Promise.all([
         auth.refreshSession(),
-        queryClient.invalidateQueries(profileKeys.identities()),
+        queryClient.invalidateQueries({ queryKey: profileKeys.identities() }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/profile/profile-update-email-mutation.ts b/apps/studio/data/profile/profile-update-email-mutation.ts
index 02437e37ef536..f2e69821beb28 100644
--- a/apps/studio/data/profile/profile-update-email-mutation.ts
+++ b/apps/studio/data/profile/profile-update-email-mutation.ts
@@ -37,7 +37,7 @@ export const useEmailUpdateMutation = ({
     async onSuccess(data, variables, context) {
       await Promise.all([
         auth.refreshSession(),
-        queryClient.invalidateQueries(profileKeys.profile()),
+        queryClient.invalidateQueries({ queryKey: profileKeys.profile() }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/profile/profile-update-mutation.ts b/apps/studio/data/profile/profile-update-mutation.ts
index 5a4cf41227da9..204cb2014253d 100644
--- a/apps/studio/data/profile/profile-update-mutation.ts
+++ b/apps/studio/data/profile/profile-update-mutation.ts
@@ -46,7 +46,7 @@ export const useProfileUpdateMutation = ({
   return useMutation({
     mutationFn: (vars) => updateProfile(vars),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(profileKeys.profile())
+      await queryClient.invalidateQueries({ queryKey: profileKeys.profile() })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/projects/org-projects-infinite-query.ts b/apps/studio/data/projects/org-projects-infinite-query.ts
index c7d02b0bc39c3..607dd870f5cac 100644
--- a/apps/studio/data/projects/org-projects-infinite-query.ts
+++ b/apps/studio/data/projects/org-projects-infinite-query.ts
@@ -68,24 +68,22 @@ export const useOrgProjectsInfiniteQuery = (
   }: UseInfiniteQueryOptions = {}
 ) => {
   const { profile } = useProfile()
-  return useInfiniteQuery(
-    projectKeys.infiniteListByOrg(slug, { limit, sort, search, statuses }),
-    ({ signal, pageParam }) =>
+  return useInfiniteQuery({
+    queryKey: projectKeys.infiniteListByOrg(slug, { limit, sort, search, statuses }),
+    queryFn: ({ signal, pageParam }) =>
       getOrganizationProjects({ slug, limit, page: pageParam, sort, search, statuses }, signal),
-    {
-      enabled: enabled && profile !== undefined && typeof slug !== 'undefined',
-      staleTime: 30 * 60 * 1000, // 30 minutes
-      getNextPageParam(lastPage, pages) {
-        const page = pages.length
-        const currentTotalCount = page * limit
-        const totalCount = lastPage.pagination.count
+    enabled: enabled && profile !== undefined && typeof slug !== 'undefined',
+    staleTime: 30 * 60 * 1000, // 30 minutes
+    getNextPageParam(lastPage, pages) {
+      const page = pages.length
+      const currentTotalCount = page * limit
+      const totalCount = lastPage.pagination.count
 
-        if (currentTotalCount >= totalCount) return undefined
-        return page
-      },
-      ...options,
-    }
-  )
+      if (currentTotalCount >= totalCount) return undefined
+      return page
+    },
+    ...options,
+  })
 }
 
 export const getComputeSize = (project: OrgProject) => {
@@ -98,8 +96,8 @@ export const useInvalidateProjectsInfiniteQuery = () => {
   const invalidateProjectsQuery = () => {
     // [Joshen] Temporarily for completeness while we still have UIs depending on the old endpoint (Org teams)
     // Can be removed once we completely deprecate projects-query (Old unpaginated endpoint)
-    queryClient.invalidateQueries(projectKeys.list())
-    return queryClient.invalidateQueries([INFINITE_PROJECTS_KEY_PREFIX])
+    queryClient.invalidateQueries({ queryKey: projectKeys.list() })
+    return queryClient.invalidateQueries({ queryKey: [INFINITE_PROJECTS_KEY_PREFIX] })
   }
   return { invalidateProjectsQuery }
 }
diff --git a/apps/studio/data/projects/project-create-mutation.ts b/apps/studio/data/projects/project-create-mutation.ts
index ece39173d9eb2..d1206196641d0 100644
--- a/apps/studio/data/projects/project-create-mutation.ts
+++ b/apps/studio/data/projects/project-create-mutation.ts
@@ -99,8 +99,10 @@ export const useProjectCreateMutation = ({
     mutationFn: (vars) => createProject(vars),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(projectKeys.list()),
-        queryClient.invalidateQueries(projectKeys.infiniteListByOrg(variables.organizationSlug)),
+        queryClient.invalidateQueries({ queryKey: projectKeys.list() }),
+        queryClient.invalidateQueries({
+          queryKey: projectKeys.infiniteListByOrg(variables.organizationSlug),
+        }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/projects/project-delete-mutation.ts b/apps/studio/data/projects/project-delete-mutation.ts
index e803d1a007582..5e6bd9fba6068 100644
--- a/apps/studio/data/projects/project-delete-mutation.ts
+++ b/apps/studio/data/projects/project-delete-mutation.ts
@@ -36,19 +36,25 @@ export const useProjectDeleteMutation = ({
     mutationFn: (vars) => deleteProject(vars),
     async onSuccess(data, variables, context) {
       await Promise.all([
-        queryClient.invalidateQueries(projectKeys.list()),
-        queryClient.invalidateQueries(projectKeys.detail(data.ref)),
+        queryClient.invalidateQueries({ queryKey: projectKeys.list() }),
+        queryClient.invalidateQueries({ queryKey: projectKeys.detail(data.ref) }),
       ])
 
       if (variables.organizationSlug) {
         await Promise.all([
-          queryClient.invalidateQueries(projectKeys.infiniteListByOrg(variables.organizationSlug)),
-          queryClient.invalidateQueries(organizationKeys.detail(variables.organizationSlug)),
-          queryClient.invalidateQueries(projectKeys.orgProjects(variables.organizationSlug)),
+          queryClient.invalidateQueries({
+            queryKey: projectKeys.infiniteListByOrg(variables.organizationSlug),
+          }),
+          queryClient.invalidateQueries({
+            queryKey: organizationKeys.detail(variables.organizationSlug),
+          }),
+          queryClient.invalidateQueries({
+            queryKey: projectKeys.orgProjects(variables.organizationSlug),
+          }),
 
-          queryClient.invalidateQueries(
-            organizationKeys.freeProjectLimitCheck(variables.organizationSlug)
-          ),
+          queryClient.invalidateQueries({
+            queryKey: organizationKeys.freeProjectLimitCheck(variables.organizationSlug),
+          }),
         ])
       }
 
diff --git a/apps/studio/data/projects/project-detail-query.ts b/apps/studio/data/projects/project-detail-query.ts
index af3d4a636086a..df530655ef027 100644
--- a/apps/studio/data/projects/project-detail-query.ts
+++ b/apps/studio/data/projects/project-detail-query.ts
@@ -64,16 +64,17 @@ export const useProjectDetailQuery = (
   })
 
 export function prefetchProjectDetail(client: QueryClient, { ref }: ProjectDetailVariables) {
-  return client.fetchQuery(projectKeys.detail(ref), ({ signal }) =>
-    getProjectDetail({ ref }, signal)
-  )
+  return client.fetchQuery({
+    queryKey: projectKeys.detail(ref),
+    queryFn: ({ signal }) => getProjectDetail({ ref }, signal),
+  })
 }
 
 export const useInvalidateProjectDetailsQuery = () => {
   const queryClient = useQueryClient()
 
   const invalidateProjectDetailsQuery = (ref: string) => {
-    return queryClient.invalidateQueries(projectKeys.detail(ref))
+    return queryClient.invalidateQueries({ queryKey: projectKeys.detail(ref) })
   }
 
   return { invalidateProjectDetailsQuery }
@@ -84,7 +85,7 @@ export const useSetProjectPostgrestStatus = () => {
 
   const setProjectPostgrestStatus = (ref: Project['ref'], status: Project['postgrestStatus']) => {
     return queryClient.setQueriesData(
-      projectKeys.detail(ref),
+      { queryKey: projectKeys.detail(ref) },
       (old) => {
         if (!old) return old
         return { ...old, postgrestStatus: status }
@@ -111,7 +112,7 @@ export const useSetProjectStatus = () => {
     // Org projects infinite query
     if (slug) {
       queryClient.setQueriesData<{ pageParams: any; pages: OrgProjectsResponse[] } | undefined>(
-        projectKeys.infiniteListByOrg(slug),
+        { queryKey: projectKeys.infiniteListByOrg(slug) },
         (old) => {
           if (!old) return old
           return {
@@ -132,7 +133,7 @@ export const useSetProjectStatus = () => {
 
     // Projects infinite query
     queryClient.setQueriesData<{ pageParams: any; pages: OrgProjectsResponse[] } | undefined>(
-      projectKeys.infiniteList(),
+      { queryKey: projectKeys.infiniteList() },
       (old) => {
         if (!old) return old
         return {
@@ -152,7 +153,7 @@ export const useSetProjectStatus = () => {
 
     // Project details query
     queryClient.setQueriesData(
-      projectKeys.detail(ref),
+      { queryKey: projectKeys.detail(ref) },
       (old) => {
         if (!old) return old
         return { ...old, status }
@@ -163,7 +164,7 @@ export const useSetProjectStatus = () => {
     // [Joshen] Temporarily for completeness while we still have UIs depending on the old endpoint (Org teams)
     // Can be removed once we completely deprecate projects-query (Old unpaginated endpoint)
     queryClient.setQueriesData(
-      projectKeys.list(),
+      { queryKey: projectKeys.list() },
       (old) => {
         if (!old) return old
 
diff --git a/apps/studio/data/projects/project-transfer-mutation.ts b/apps/studio/data/projects/project-transfer-mutation.ts
index 82fe0a9ead00a..6f01d7ced6af2 100644
--- a/apps/studio/data/projects/project-transfer-mutation.ts
+++ b/apps/studio/data/projects/project-transfer-mutation.ts
@@ -46,11 +46,11 @@ export const useProjectTransferMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef, targetOrganizationSlug } = variables
       await Promise.all([
-        queryClient.invalidateQueries(
-          projectKeys.projectTransferPreview(projectRef, targetOrganizationSlug)
-        ),
-        queryClient.invalidateQueries(projectKeys.detail(projectRef)),
-        queryClient.invalidateQueries(projectKeys.list()),
+        queryClient.invalidateQueries({
+          queryKey: projectKeys.projectTransferPreview(projectRef, targetOrganizationSlug),
+        }),
+        queryClient.invalidateQueries({ queryKey: projectKeys.detail(projectRef) }),
+        queryClient.invalidateQueries({ queryKey: projectKeys.list() }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/projects/project-update-mutation.ts b/apps/studio/data/projects/project-update-mutation.ts
index a6f5fb4a72072..3953d5f5af876 100644
--- a/apps/studio/data/projects/project-update-mutation.ts
+++ b/apps/studio/data/projects/project-update-mutation.ts
@@ -42,8 +42,8 @@ export const useProjectUpdateMutation = ({
     async onSuccess(data, variables, context) {
       const { ref } = variables
       await Promise.all([
-        queryClient.invalidateQueries(projectKeys.list()),
-        queryClient.invalidateQueries(projectKeys.detail(ref)),
+        queryClient.invalidateQueries({ queryKey: projectKeys.list() }),
+        queryClient.invalidateQueries({ queryKey: projectKeys.detail(ref) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/projects/projects-infinite-query.ts b/apps/studio/data/projects/projects-infinite-query.ts
index 2abfd883cb14a..ebcee877657c2 100644
--- a/apps/studio/data/projects/projects-infinite-query.ts
+++ b/apps/studio/data/projects/projects-infinite-query.ts
@@ -53,22 +53,21 @@ export const useProjectsInfiniteQuery = (
   }: UseInfiniteQueryOptions = {}
 ) => {
   const { profile } = useProfile()
-  return useInfiniteQuery(
-    projectKeys.infiniteList({ limit, sort, search }),
-    ({ signal, pageParam }) => getProjects({ limit, page: pageParam, sort, search }, signal),
-    {
-      enabled: enabled && profile !== undefined,
-      staleTime: 30 * 60 * 1000, // 30 minutes
-      getNextPageParam(lastPage, pages) {
-        const page = pages.length
-        const currentTotalCount = page * limit
-        // @ts-ignore [Joshen] API type issue for Version 2 endpoints
-        const totalCount = lastPage.pagination.count
+  return useInfiniteQuery({
+    queryKey: projectKeys.infiniteList({ limit, sort, search }),
+    queryFn: ({ signal, pageParam }) =>
+      getProjects({ limit, page: pageParam, sort, search }, signal),
+    enabled: enabled && profile !== undefined,
+    staleTime: 30 * 60 * 1000, // 30 minutes
+    getNextPageParam(lastPage, pages) {
+      const page = pages.length
+      const currentTotalCount = page * limit
+      // @ts-ignore [Joshen] API type issue for Version 2 endpoints
+      const totalCount = lastPage.pagination.count
 
-        if (currentTotalCount >= totalCount) return undefined
-        return page
-      },
-      ...options,
-    }
-  )
+      if (currentTotalCount >= totalCount) return undefined
+      return page
+    },
+    ...options,
+  })
 }
diff --git a/apps/studio/data/read-replicas/replica-remove-mutation.ts b/apps/studio/data/read-replicas/replica-remove-mutation.ts
index dbd3a96136749..aa175e3cc4c32 100644
--- a/apps/studio/data/read-replicas/replica-remove-mutation.ts
+++ b/apps/studio/data/read-replicas/replica-remove-mutation.ts
@@ -42,8 +42,8 @@ export const useReadReplicaRemoveMutation = ({
 
       if (invalidateReplicaQueries) {
         await Promise.all([
-          queryClient.invalidateQueries(replicaKeys.list(projectRef)),
-          queryClient.invalidateQueries(replicaKeys.loadBalancers(projectRef)),
+          queryClient.invalidateQueries({ queryKey: replicaKeys.list(projectRef) }),
+          queryClient.invalidateQueries({ queryKey: replicaKeys.loadBalancers(projectRef) }),
         ])
       }
 
diff --git a/apps/studio/data/read-replicas/replica-setup-mutation.ts b/apps/studio/data/read-replicas/replica-setup-mutation.ts
index 51a330a9ea1ba..e7d812f36f37a 100644
--- a/apps/studio/data/read-replicas/replica-setup-mutation.ts
+++ b/apps/studio/data/read-replicas/replica-setup-mutation.ts
@@ -55,7 +55,7 @@ export const useReadReplicaSetUpMutation = ({
     mutationFn: (vars) => setUpReadReplica(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(replicaKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: replicaKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/realtime/realtime-config-mutation.ts b/apps/studio/data/realtime/realtime-config-mutation.ts
index d2c5d9d1c3f9a..62e29911ee5f3 100644
--- a/apps/studio/data/realtime/realtime-config-mutation.ts
+++ b/apps/studio/data/realtime/realtime-config-mutation.ts
@@ -69,7 +69,7 @@ export const useRealtimeConfigurationUpdateMutation = ({
     mutationFn: (vars) => updateRealtimeConfiguration(vars),
     async onSuccess(data, variables, context) {
       const { ref } = variables
-      await queryClient.invalidateQueries(realtimeKeys.configuration(ref))
+      await queryClient.invalidateQueries({ queryKey: realtimeKeys.configuration(ref) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/replication/create-destination-pipeline-mutation.ts b/apps/studio/data/replication/create-destination-pipeline-mutation.ts
index 9411ae09e9d76..92fa12e1275ce 100644
--- a/apps/studio/data/replication/create-destination-pipeline-mutation.ts
+++ b/apps/studio/data/replication/create-destination-pipeline-mutation.ts
@@ -133,8 +133,8 @@ export const useCreateDestinationPipelineMutation = ({
         const { projectRef } = variables
 
         await Promise.all([
-          queryClient.invalidateQueries(replicationKeys.destinations(projectRef)),
-          queryClient.invalidateQueries(replicationKeys.pipelines(projectRef)),
+          queryClient.invalidateQueries({ queryKey: replicationKeys.destinations(projectRef) }),
+          queryClient.invalidateQueries({ queryKey: replicationKeys.pipelines(projectRef) }),
         ])
 
         await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/replication/create-publication-mutation.ts b/apps/studio/data/replication/create-publication-mutation.ts
index ebe3669e7fba4..949592f796db9 100644
--- a/apps/studio/data/replication/create-publication-mutation.ts
+++ b/apps/studio/data/replication/create-publication-mutation.ts
@@ -1,9 +1,9 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { handleError, post } from 'data/fetchers'
 import type { ResponseError } from 'types'
 import { replicationKeys } from './keys'
-import { handleError, post } from 'data/fetchers'
 
 export type CreatePublicationParams = {
   projectRef: string
@@ -49,7 +49,9 @@ export const useCreatePublicationMutation = ({
     mutationFn: (vars) => createPublication(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, sourceId } = variables
-      await queryClient.invalidateQueries(replicationKeys.publications(projectRef, sourceId))
+      await queryClient.invalidateQueries({
+        queryKey: replicationKeys.publications(projectRef, sourceId),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/replication/create-tenant-source-mutation.ts b/apps/studio/data/replication/create-tenant-source-mutation.ts
index 09c9e02bf1de5..16251727e34c9 100644
--- a/apps/studio/data/replication/create-tenant-source-mutation.ts
+++ b/apps/studio/data/replication/create-tenant-source-mutation.ts
@@ -1,9 +1,9 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { handleError, post } from 'data/fetchers'
 import type { ResponseError } from 'types'
 import { replicationKeys } from './keys'
-import { handleError, post } from 'data/fetchers'
 
 export type CreateTenantSourceParams = {
   projectRef: string
@@ -39,7 +39,7 @@ export const useCreateTenantSourceMutation = ({
     mutationFn: (vars) => createTenantSource(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(replicationKeys.sources(projectRef))
+      await queryClient.invalidateQueries({ queryKey: replicationKeys.sources(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/replication/delete-destination-pipeline-mutation.ts b/apps/studio/data/replication/delete-destination-pipeline-mutation.ts
index 422c78a50332c..c6a6091c04bbf 100644
--- a/apps/studio/data/replication/delete-destination-pipeline-mutation.ts
+++ b/apps/studio/data/replication/delete-destination-pipeline-mutation.ts
@@ -50,14 +50,20 @@ export const useDeleteDestinationPipelineMutation = ({
         const { projectRef, destinationId, pipelineId } = variables
 
         await Promise.all([
-          queryClient.invalidateQueries(replicationKeys.destinations(projectRef)),
-          queryClient.invalidateQueries(replicationKeys.pipelines(projectRef)),
-          queryClient.invalidateQueries(replicationKeys.pipelineById(projectRef, pipelineId)),
-          queryClient.invalidateQueries(replicationKeys.pipelinesStatus(projectRef, pipelineId)),
-          queryClient.invalidateQueries(
-            replicationKeys.pipelinesReplicationStatus(projectRef, pipelineId)
-          ),
-          queryClient.invalidateQueries(replicationKeys.destinationById(projectRef, destinationId)),
+          queryClient.invalidateQueries({ queryKey: replicationKeys.destinations(projectRef) }),
+          queryClient.invalidateQueries({ queryKey: replicationKeys.pipelines(projectRef) }),
+          queryClient.invalidateQueries({
+            queryKey: replicationKeys.pipelineById(projectRef, pipelineId),
+          }),
+          queryClient.invalidateQueries({
+            queryKey: replicationKeys.pipelinesStatus(projectRef, pipelineId),
+          }),
+          queryClient.invalidateQueries({
+            queryKey: replicationKeys.pipelinesReplicationStatus(projectRef, pipelineId),
+          }),
+          queryClient.invalidateQueries({
+            queryKey: replicationKeys.destinationById(projectRef, destinationId),
+          }),
         ])
 
         await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/replication/rollback-table-mutation.ts b/apps/studio/data/replication/rollback-table-mutation.ts
index 5c5b8776c2d1b..cc4e2d1a8e99f 100644
--- a/apps/studio/data/replication/rollback-table-mutation.ts
+++ b/apps/studio/data/replication/rollback-table-mutation.ts
@@ -62,10 +62,12 @@ export const useRollbackTableMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef, pipelineId } = variables
       await Promise.all([
-        queryClient.invalidateQueries(replicationKeys.pipelinesStatus(projectRef, pipelineId)),
-        queryClient.invalidateQueries(
-          replicationKeys.pipelinesReplicationStatus(projectRef, pipelineId)
-        ),
+        queryClient.invalidateQueries({
+          queryKey: replicationKeys.pipelinesStatus(projectRef, pipelineId),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: replicationKeys.pipelinesReplicationStatus(projectRef, pipelineId),
+        }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/replication/start-pipeline-mutation.ts b/apps/studio/data/replication/start-pipeline-mutation.ts
index df6926492341f..a5cc611f86b40 100644
--- a/apps/studio/data/replication/start-pipeline-mutation.ts
+++ b/apps/studio/data/replication/start-pipeline-mutation.ts
@@ -1,9 +1,9 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { handleError, post } from 'data/fetchers'
 import type { ResponseError } from 'types'
 import { replicationKeys } from './keys'
-import { handleError, post } from 'data/fetchers'
 
 export type StartPipelineParams = {
   projectRef: string
@@ -43,7 +43,9 @@ export const useStartPipelineMutation = ({
     mutationFn: (vars) => startPipeline(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, pipelineId } = variables
-      await queryClient.invalidateQueries(replicationKeys.pipelinesStatus(projectRef, pipelineId))
+      await queryClient.invalidateQueries({
+        queryKey: replicationKeys.pipelinesStatus(projectRef, pipelineId),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/replication/stop-pipeline-mutation.ts b/apps/studio/data/replication/stop-pipeline-mutation.ts
index e662f81ac810d..ff59291ceca86 100644
--- a/apps/studio/data/replication/stop-pipeline-mutation.ts
+++ b/apps/studio/data/replication/stop-pipeline-mutation.ts
@@ -1,9 +1,9 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { handleError, post } from 'data/fetchers'
 import type { ResponseError } from 'types'
 import { replicationKeys } from './keys'
-import { handleError, post } from 'data/fetchers'
 
 export type StopPipelineParams = {
   projectRef: string
@@ -40,7 +40,9 @@ export const useStopPipelineMutation = ({
     mutationFn: (vars) => stopPipeline(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, pipelineId } = variables
-      await queryClient.invalidateQueries(replicationKeys.pipelinesStatus(projectRef, pipelineId))
+      await queryClient.invalidateQueries({
+        queryKey: replicationKeys.pipelinesStatus(projectRef, pipelineId),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/replication/update-destination-pipeline-mutation.ts b/apps/studio/data/replication/update-destination-pipeline-mutation.ts
index 0c852bd54286d..49412f264d8b7 100644
--- a/apps/studio/data/replication/update-destination-pipeline-mutation.ts
+++ b/apps/studio/data/replication/update-destination-pipeline-mutation.ts
@@ -138,11 +138,15 @@ export const useUpdateDestinationPipelineMutation = ({
 
         await Promise.all([
           // Invalidate lists
-          queryClient.invalidateQueries(replicationKeys.destinations(projectRef)),
-          queryClient.invalidateQueries(replicationKeys.pipelines(projectRef)),
+          queryClient.invalidateQueries({ queryKey: replicationKeys.destinations(projectRef) }),
+          queryClient.invalidateQueries({ queryKey: replicationKeys.pipelines(projectRef) }),
           // Invalidate item-level caches used by the editor panel
-          queryClient.invalidateQueries(replicationKeys.destinationById(projectRef, destinationId)),
-          queryClient.invalidateQueries(replicationKeys.pipelineById(projectRef, pipelineId)),
+          queryClient.invalidateQueries({
+            queryKey: replicationKeys.destinationById(projectRef, destinationId),
+          }),
+          queryClient.invalidateQueries({
+            queryKey: replicationKeys.pipelineById(projectRef, pipelineId),
+          }),
         ])
 
         await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/replication/update-pipeline-version-mutation.ts b/apps/studio/data/replication/update-pipeline-version-mutation.ts
index 6c1fa664104c1..1014f85d6ca5a 100644
--- a/apps/studio/data/replication/update-pipeline-version-mutation.ts
+++ b/apps/studio/data/replication/update-pipeline-version-mutation.ts
@@ -49,16 +49,18 @@ export const useUpdatePipelineVersionMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef, pipelineId } = variables
       // Ensure the version dot updates promptly
-      await queryClient.invalidateQueries(replicationKeys.pipelinesVersion(projectRef, pipelineId))
+      await queryClient.invalidateQueries({
+        queryKey: replicationKeys.pipelinesVersion(projectRef, pipelineId),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(error, variables, context) {
       const { projectRef, pipelineId } = variables
       if (error?.code === 404) {
         // Default image changed meanwhile. Refresh version info so UI reflects latest state.
-        await queryClient.invalidateQueries(
-          replicationKeys.pipelinesVersion(projectRef, pipelineId)
-        )
+        await queryClient.invalidateQueries({
+          queryKey: replicationKeys.pipelinesVersion(projectRef, pipelineId),
+        })
       } else if (onError === undefined) {
         toast.error(`Failed to update pipeline version: ${error.message}`)
       } else {
diff --git a/apps/studio/data/secrets/secrets-create-mutation.ts b/apps/studio/data/secrets/secrets-create-mutation.ts
index 52d6c7cb23430..9463a8b3874ae 100644
--- a/apps/studio/data/secrets/secrets-create-mutation.ts
+++ b/apps/studio/data/secrets/secrets-create-mutation.ts
@@ -37,7 +37,7 @@ export const useSecretsCreateMutation = ({
     mutationFn: (vars) => createSecrets(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(secretsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: secretsKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/secrets/secrets-delete-mutation.ts b/apps/studio/data/secrets/secrets-delete-mutation.ts
index 1a40214fb2db2..fc0df36948b7c 100644
--- a/apps/studio/data/secrets/secrets-delete-mutation.ts
+++ b/apps/studio/data/secrets/secrets-delete-mutation.ts
@@ -37,7 +37,7 @@ export const useSecretsDeleteMutation = ({
     mutationFn: (vars) => deleteSecrets(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(secretsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: secretsKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/sql/abort-query-mutation.ts b/apps/studio/data/sql/abort-query-mutation.ts
index 4cf9ee09ce170..34acbce8ccf42 100644
--- a/apps/studio/data/sql/abort-query-mutation.ts
+++ b/apps/studio/data/sql/abort-query-mutation.ts
@@ -32,7 +32,7 @@ export const useQueryAbortMutation = ({
     mutationFn: (vars) => abortQuery(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(sqlKeys.ongoingQueries(projectRef))
+      await queryClient.invalidateQueries({ queryKey: sqlKeys.ongoingQueries(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/sql/execute-sql-mutation.ts b/apps/studio/data/sql/execute-sql-mutation.ts
index 5a286142f6abf..575d3227b68b4 100644
--- a/apps/studio/data/sql/execute-sql-mutation.ts
+++ b/apps/studio/data/sql/execute-sql-mutation.ts
@@ -72,10 +72,12 @@ export const useExecuteSqlMutation = ({
       if (contextualInvalidation && projectRef && isMutationSQL) {
         const databaseRelatedKeys = queryClient
           .getQueryCache()
-          .findAll(['projects', projectRef])
+          .findAll({ queryKey: ['projects', projectRef] })
           .map((x) => x.queryKey)
           .filter((x) => !INVALIDATION_KEYS_IGNORE.some((a) => x.includes(a)))
-        await Promise.all(databaseRelatedKeys.map((key) => queryClient.invalidateQueries(key)))
+        await Promise.all(
+          databaseRelatedKeys.map((key) => queryClient.invalidateQueries({ queryKey: key }))
+        )
       }
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/ssl-enforcement/ssl-enforcement-update-mutation.ts b/apps/studio/data/ssl-enforcement/ssl-enforcement-update-mutation.ts
index dee05de43fa29..30149f874e081 100644
--- a/apps/studio/data/ssl-enforcement/ssl-enforcement-update-mutation.ts
+++ b/apps/studio/data/ssl-enforcement/ssl-enforcement-update-mutation.ts
@@ -1,9 +1,9 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
+import { handleError, put } from 'data/fetchers'
 import type { ResponseError } from 'types'
 import { sslEnforcementKeys } from './keys'
-import { handleError, put } from 'data/fetchers'
 
 export type SSLEnforcementUpdateVariables = {
   projectRef: string
@@ -47,7 +47,7 @@ export const useSSLEnforcementUpdateMutation = ({
     mutationFn: (vars) => updateSSLEnforcement(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(sslEnforcementKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: sslEnforcementKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/sso/sso-config-create-mutation.ts b/apps/studio/data/sso/sso-config-create-mutation.ts
index 8ad0e79e129ac..e631057715bc8 100644
--- a/apps/studio/data/sso/sso-config-create-mutation.ts
+++ b/apps/studio/data/sso/sso-config-create-mutation.ts
@@ -37,7 +37,7 @@ export const useSSOConfigCreateMutation = ({
     mutationFn: (vars) => createSSOConfig(vars),
     async onSuccess(data, variables, context) {
       const { slug } = variables
-      await queryClient.invalidateQueries(orgSSOKeys.orgSSOConfig(slug))
+      await queryClient.invalidateQueries({ queryKey: orgSSOKeys.orgSSOConfig(slug) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/sso/sso-config-update-mutation.ts b/apps/studio/data/sso/sso-config-update-mutation.ts
index 6391dd1398351..cf2bb27a3b2ff 100644
--- a/apps/studio/data/sso/sso-config-update-mutation.ts
+++ b/apps/studio/data/sso/sso-config-update-mutation.ts
@@ -37,7 +37,7 @@ export const useSSOConfigUpdateMutation = ({
     mutationFn: (vars) => updateSSOConfig(vars),
     async onSuccess(data, variables, context) {
       const { slug } = variables
-      await queryClient.invalidateQueries(orgSSOKeys.orgSSOConfig(slug))
+      await queryClient.invalidateQueries({ queryKey: orgSSOKeys.orgSSOConfig(slug) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/bucket-create-mutation.ts b/apps/studio/data/storage/bucket-create-mutation.ts
index 87becc9ec91f5..5199c50f119b0 100644
--- a/apps/studio/data/storage/bucket-create-mutation.ts
+++ b/apps/studio/data/storage/bucket-create-mutation.ts
@@ -55,7 +55,7 @@ export const useBucketCreateMutation = ({
     mutationFn: (vars) => createBucket(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(storageKeys.buckets(projectRef))
+      await queryClient.invalidateQueries({ queryKey: storageKeys.buckets(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/bucket-delete-mutation.ts b/apps/studio/data/storage/bucket-delete-mutation.ts
index 736b3d1a77d32..77f2db799110e 100644
--- a/apps/studio/data/storage/bucket-delete-mutation.ts
+++ b/apps/studio/data/storage/bucket-delete-mutation.ts
@@ -46,7 +46,7 @@ export const useBucketDeleteMutation = ({
     mutationFn: (vars) => deleteBucket(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(storageKeys.buckets(projectRef))
+      await queryClient.invalidateQueries({ queryKey: storageKeys.buckets(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/bucket-empty-mutation.ts b/apps/studio/data/storage/bucket-empty-mutation.ts
index 6e092848b904a..6598028c813f9 100644
--- a/apps/studio/data/storage/bucket-empty-mutation.ts
+++ b/apps/studio/data/storage/bucket-empty-mutation.ts
@@ -38,7 +38,7 @@ export const useBucketEmptyMutation = ({
     mutationFn: (vars) => emptyBucket(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(storageKeys.buckets(projectRef))
+      await queryClient.invalidateQueries({ queryKey: storageKeys.buckets(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/bucket-update-mutation.ts b/apps/studio/data/storage/bucket-update-mutation.ts
index 489a4666341a3..63dfcfcd31f3c 100644
--- a/apps/studio/data/storage/bucket-update-mutation.ts
+++ b/apps/studio/data/storage/bucket-update-mutation.ts
@@ -73,7 +73,7 @@ export const useBucketUpdateMutation = ({
     },
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(storageKeys.buckets(projectRef))
+      await queryClient.invalidateQueries({ queryKey: storageKeys.buckets(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/iceberg-namespace-create-mutation.ts b/apps/studio/data/storage/iceberg-namespace-create-mutation.ts
index 19abdadcc41b2..8b8010a4c8ea9 100644
--- a/apps/studio/data/storage/iceberg-namespace-create-mutation.ts
+++ b/apps/studio/data/storage/iceberg-namespace-create-mutation.ts
@@ -73,12 +73,16 @@ export const useIcebergNamespaceCreateMutation = ({
   return useMutation({
     mutationFn: (vars) => createIcebergNamespace(vars),
     async onSuccess(data, variables, context) {
-      await queryClient.invalidateQueries(
-        storageKeys.icebergNamespace(variables.catalogUri, variables.warehouse, variables.namespace)
-      )
-      await queryClient.invalidateQueries(
-        storageKeys.icebergNamespaces(variables.catalogUri, variables.warehouse)
-      )
+      await queryClient.invalidateQueries({
+        queryKey: storageKeys.icebergNamespace(
+          variables.catalogUri,
+          variables.warehouse,
+          variables.namespace
+        ),
+      })
+      await queryClient.invalidateQueries({
+        queryKey: storageKeys.icebergNamespaces(variables.catalogUri, variables.warehouse),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/s3-access-key-create-mutation.ts b/apps/studio/data/storage/s3-access-key-create-mutation.ts
index be716528f5afd..b8ce4f8f18454 100644
--- a/apps/studio/data/storage/s3-access-key-create-mutation.ts
+++ b/apps/studio/data/storage/s3-access-key-create-mutation.ts
@@ -41,7 +41,9 @@ export function useS3AccessKeyCreateMutation({
     mutationFn: (vars) => createS3AccessKeyCredential(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(storageCredentialsKeys.credentials(projectRef))
+      await queryClient.invalidateQueries({
+        queryKey: storageCredentialsKeys.credentials(projectRef),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/s3-access-key-delete-mutation.ts b/apps/studio/data/storage/s3-access-key-delete-mutation.ts
index 0007462375835..b02b899c889b2 100644
--- a/apps/studio/data/storage/s3-access-key-delete-mutation.ts
+++ b/apps/studio/data/storage/s3-access-key-delete-mutation.ts
@@ -44,7 +44,9 @@ export function useS3AccessKeyDeleteMutation({
     mutationFn: (vars) => deleteS3AccessKeyCredential(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(storageCredentialsKeys.credentials(projectRef))
+      await queryClient.invalidateQueries({
+        queryKey: storageCredentialsKeys.credentials(projectRef),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/storage/storage-archive-create-mutation.ts b/apps/studio/data/storage/storage-archive-create-mutation.ts
index 90f0dab6fc889..2d5978f51cfb8 100644
--- a/apps/studio/data/storage/storage-archive-create-mutation.ts
+++ b/apps/studio/data/storage/storage-archive-create-mutation.ts
@@ -36,7 +36,7 @@ export function useStorageArchiveCreateMutation({
     mutationFn: (vars) => createStorageArchive(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(storageKeys.archive(projectRef))
+      await queryClient.invalidateQueries({ queryKey: storageKeys.archive(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/subscriptions/org-subscription-confirm-pending-change.ts b/apps/studio/data/subscriptions/org-subscription-confirm-pending-change.ts
index ada01d200e472..564429b392e34 100644
--- a/apps/studio/data/subscriptions/org-subscription-confirm-pending-change.ts
+++ b/apps/studio/data/subscriptions/org-subscription-confirm-pending-change.ts
@@ -1,13 +1,13 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
-import { handleError, post } from 'data/fetchers'
-import type { ResponseError } from 'types'
 import type { components } from 'api-types'
+import { handleError, post } from 'data/fetchers'
+import { invoicesKeys } from 'data/invoices/keys'
 import { organizationKeys } from 'data/organizations/keys'
-import { subscriptionKeys } from './keys'
 import { usageKeys } from 'data/usage/keys'
-import { invoicesKeys } from 'data/invoices/keys'
+import type { ResponseError } from 'types'
+import { subscriptionKeys } from './keys'
 
 export type PendingSubscriptionChangeVariables = {
   payment_intent_id: string
@@ -81,13 +81,13 @@ export const useConfirmPendingSubscriptionChangeMutation = ({
       await new Promise((resolve) => setTimeout(resolve, 2000))
 
       await Promise.all([
-        queryClient.invalidateQueries(subscriptionKeys.orgSubscription(slug)),
-        queryClient.invalidateQueries(subscriptionKeys.orgPlans(slug)),
-        queryClient.invalidateQueries(usageKeys.orgUsage(slug)),
-        queryClient.invalidateQueries(invoicesKeys.orgUpcomingPreview(slug)),
-        queryClient.invalidateQueries(organizationKeys.detail(slug)),
-        queryClient.invalidateQueries(organizationKeys.list()),
-        queryClient.invalidateQueries(organizationKeys.paymentMethods(slug)),
+        queryClient.invalidateQueries({ queryKey: subscriptionKeys.orgSubscription(slug) }),
+        queryClient.invalidateQueries({ queryKey: subscriptionKeys.orgPlans(slug) }),
+        queryClient.invalidateQueries({ queryKey: usageKeys.orgUsage(slug) }),
+        queryClient.invalidateQueries({ queryKey: invoicesKeys.orgUpcomingPreview(slug) }),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.detail(slug) }),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.list() }),
+        queryClient.invalidateQueries({ queryKey: organizationKeys.paymentMethods(slug) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/subscriptions/org-subscription-confirm-pending-create.ts b/apps/studio/data/subscriptions/org-subscription-confirm-pending-create.ts
index af5c13100d5d1..5124b82bbb056 100644
--- a/apps/studio/data/subscriptions/org-subscription-confirm-pending-create.ts
+++ b/apps/studio/data/subscriptions/org-subscription-confirm-pending-create.ts
@@ -1,12 +1,12 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { toast } from 'sonner'
 
-import { handleError, post } from 'data/fetchers'
-import type { ResponseError } from 'types'
 import type { components } from 'api-types'
+import { handleError, post } from 'data/fetchers'
 import { organizationKeys } from 'data/organizations/keys'
-import { permissionKeys } from 'data/permissions/keys'
 import { castOrganizationResponseToOrganization } from 'data/organizations/organizations-query'
+import { permissionKeys } from 'data/permissions/keys'
+import type { ResponseError } from 'types'
 
 export type PendingSubscriptionCreateVariables = {
   payment_intent_id: string
@@ -86,7 +86,7 @@ export const useConfirmPendingSubscriptionCreateMutation = ({
         }
       )
 
-      await queryClient.invalidateQueries(permissionKeys.list())
+      await queryClient.invalidateQueries({ queryKey: permissionKeys.list() })
 
       // todo replace plan in org
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/subscriptions/org-subscription-update-mutation.ts b/apps/studio/data/subscriptions/org-subscription-update-mutation.ts
index 273fded335efa..f03dc3777f5d7 100644
--- a/apps/studio/data/subscriptions/org-subscription-update-mutation.ts
+++ b/apps/studio/data/subscriptions/org-subscription-update-mutation.ts
@@ -1,13 +1,13 @@
 import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
 import { handleError, put } from 'data/fetchers'
 import { invoicesKeys } from 'data/invoices/keys'
+import { organizationKeys } from 'data/organizations/keys'
+import type { CustomerAddress, CustomerTaxId } from 'data/organizations/types'
 import { usageKeys } from 'data/usage/keys'
 import { toast } from 'sonner'
 import type { ResponseError } from 'types/base'
 import { subscriptionKeys } from './keys'
 import type { SubscriptionTier } from './types'
-import { organizationKeys } from 'data/organizations/keys'
-import type { CustomerAddress, CustomerTaxId } from 'data/organizations/types'
 
 export type OrgSubscriptionUpdateVariables = {
   slug: string
@@ -70,27 +70,30 @@ export const useOrgSubscriptionUpdateMutation = ({
         await new Promise((resolve) => setTimeout(resolve, 2000))
 
         await Promise.all([
-          queryClient.invalidateQueries(subscriptionKeys.orgSubscription(slug)),
-          queryClient.invalidateQueries(subscriptionKeys.orgPlans(slug)),
-          queryClient.invalidateQueries(usageKeys.orgUsage(slug)),
-          queryClient.invalidateQueries(invoicesKeys.orgUpcomingPreview(slug)),
-          queryClient.invalidateQueries(organizationKeys.detail(slug)),
-          queryClient.invalidateQueries(organizationKeys.list()),
-          queryClient.invalidateQueries(organizationKeys.entitlements(slug)),
+          queryClient.invalidateQueries({ queryKey: subscriptionKeys.orgSubscription(slug) }),
+          queryClient.invalidateQueries({ queryKey: subscriptionKeys.orgPlans(slug) }),
+          queryClient.invalidateQueries({ queryKey: usageKeys.orgUsage(slug) }),
+          queryClient.invalidateQueries({ queryKey: invoicesKeys.orgUpcomingPreview(slug) }),
+          queryClient.invalidateQueries({ queryKey: organizationKeys.detail(slug) }),
+          queryClient.invalidateQueries({ queryKey: organizationKeys.list() }),
+          queryClient.invalidateQueries({ queryKey: organizationKeys.entitlements(slug) }),
         ])
 
         if (variables.paymentMethod) {
-          queryClient.setQueriesData(organizationKeys.paymentMethods(slug), (prev: any) => {
-            if (!prev) return prev
-            return {
-              ...prev,
-              defaultPaymentMethodId: variables.paymentMethod,
-              data: prev.data.map((pm: any) => ({
-                ...pm,
-                is_default: pm.id === variables.paymentMethod,
-              })),
+          queryClient.setQueriesData(
+            { queryKey: organizationKeys.paymentMethods(slug) },
+            (prev: any) => {
+              if (!prev) return prev
+              return {
+                ...prev,
+                defaultPaymentMethodId: variables.paymentMethod,
+                data: prev.data.map((pm: any) => ({
+                  ...pm,
+                  is_default: pm.id === variables.paymentMethod,
+                })),
+              }
             }
-          })
+          )
         }
       }
 
diff --git a/apps/studio/data/subscriptions/project-addon-remove-mutation.ts b/apps/studio/data/subscriptions/project-addon-remove-mutation.ts
index efd3ce5af9968..d842c89ecf611 100644
--- a/apps/studio/data/subscriptions/project-addon-remove-mutation.ts
+++ b/apps/studio/data/subscriptions/project-addon-remove-mutation.ts
@@ -49,7 +49,7 @@ export const useProjectAddonRemoveMutation = ({
       const { projectRef } = variables
       // [Joshen] Only invalidate addons, not subscriptions, as AddOn section in
       // subscription page is using AddOn react query
-      await queryClient.invalidateQueries(subscriptionKeys.addons(projectRef))
+      await queryClient.invalidateQueries({ queryKey: subscriptionKeys.addons(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/subscriptions/project-addon-update-mutation.ts b/apps/studio/data/subscriptions/project-addon-update-mutation.ts
index b963fd34ca3a2..c77075da5c135 100644
--- a/apps/studio/data/subscriptions/project-addon-update-mutation.ts
+++ b/apps/studio/data/subscriptions/project-addon-update-mutation.ts
@@ -54,7 +54,7 @@ export const useProjectAddonUpdateMutation = ({
     mutationFn: (vars) => updateSubscriptionAddon(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(subscriptionKeys.addons(projectRef))
+      await queryClient.invalidateQueries({ queryKey: subscriptionKeys.addons(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/table-editor/table-editor-query.ts b/apps/studio/data/table-editor/table-editor-query.ts
index 73a95b7bf3fe7..f92a7c5524102 100644
--- a/apps/studio/data/table-editor/table-editor-query.ts
+++ b/apps/studio/data/table-editor/table-editor-query.ts
@@ -58,14 +58,16 @@ export function prefetchTableEditor(
   client: QueryClient,
   { projectRef, connectionString, id }: TableEditorVariables
 ) {
-  return client.fetchQuery(tableEditorKeys.tableEditor(projectRef, id), ({ signal }) =>
-    getTableEditor(
-      {
-        projectRef,
-        connectionString,
-        id,
-      },
-      signal
-    )
-  )
+  return client.fetchQuery({
+    queryKey: tableEditorKeys.tableEditor(projectRef, id),
+    queryFn: ({ signal }) =>
+      getTableEditor(
+        {
+          projectRef,
+          connectionString,
+          id,
+        },
+        signal
+      ),
+  })
 }
diff --git a/apps/studio/data/table-rows/table-row-create-mutation.ts b/apps/studio/data/table-rows/table-row-create-mutation.ts
index 081d0cf4bc1e9..f182bc1c6f655 100644
--- a/apps/studio/data/table-rows/table-row-create-mutation.ts
+++ b/apps/studio/data/table-rows/table-row-create-mutation.ts
@@ -93,7 +93,9 @@ export const useTableRowCreateMutation = ({
         console.error('Failed to track table data insertion event:', error)
       }
 
-      await queryClient.invalidateQueries(tableRowKeys.tableRowsAndCount(projectRef, table.id))
+      await queryClient.invalidateQueries({
+        queryKey: tableRowKeys.tableRowsAndCount(projectRef, table.id),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/table-rows/table-row-delete-all-mutation.ts b/apps/studio/data/table-rows/table-row-delete-all-mutation.ts
index 47eadc2fa94c0..fbbc44538fef0 100644
--- a/apps/studio/data/table-rows/table-row-delete-all-mutation.ts
+++ b/apps/studio/data/table-rows/table-row-delete-all-mutation.ts
@@ -76,7 +76,9 @@ export const useTableRowDeleteAllMutation = ({
     mutationFn: (vars) => deleteAllTableRow(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, table } = variables
-      await queryClient.invalidateQueries(tableRowKeys.tableRowsAndCount(projectRef, table.id))
+      await queryClient.invalidateQueries({
+        queryKey: tableRowKeys.tableRowsAndCount(projectRef, table.id),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/table-rows/table-row-delete-mutation.tsx b/apps/studio/data/table-rows/table-row-delete-mutation.tsx
index 16caac04c332b..5588dad5f3105 100644
--- a/apps/studio/data/table-rows/table-row-delete-mutation.tsx
+++ b/apps/studio/data/table-rows/table-row-delete-mutation.tsx
@@ -76,7 +76,9 @@ export const useTableRowDeleteMutation = ({
     mutationFn: (vars) => deleteTableRow(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, table } = variables
-      await queryClient.invalidateQueries(tableRowKeys.tableRowsAndCount(projectRef, table.id))
+      await queryClient.invalidateQueries({
+        queryKey: tableRowKeys.tableRowsAndCount(projectRef, table.id),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/table-rows/table-row-truncate-mutation.ts b/apps/studio/data/table-rows/table-row-truncate-mutation.ts
index 9178163254725..9e7657571e822 100644
--- a/apps/studio/data/table-rows/table-row-truncate-mutation.ts
+++ b/apps/studio/data/table-rows/table-row-truncate-mutation.ts
@@ -50,7 +50,9 @@ export const useTableRowTruncateMutation = ({
     mutationFn: (vars) => truncateTableRow(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, table } = variables
-      await queryClient.invalidateQueries(tableRowKeys.tableRowsAndCount(projectRef, table.id))
+      await queryClient.invalidateQueries({
+        queryKey: tableRowKeys.tableRowsAndCount(projectRef, table.id),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/table-rows/table-row-update-mutation.ts b/apps/studio/data/table-rows/table-row-update-mutation.ts
index 33b08d7e9c1fc..cb3e0985897cc 100644
--- a/apps/studio/data/table-rows/table-row-update-mutation.ts
+++ b/apps/studio/data/table-rows/table-row-update-mutation.ts
@@ -78,9 +78,9 @@ export const useTableRowUpdateMutation = ({
     mutationFn: (vars) => updateTableRow(vars),
     async onSuccess(data, variables, context) {
       const { projectRef, table } = variables
-      await queryClient.invalidateQueries(
-        tableRowKeys.tableRows(projectRef, { table: { id: table.id } })
-      )
+      await queryClient.invalidateQueries({
+        queryKey: tableRowKeys.tableRows(projectRef, { table: { id: table.id } }),
+      })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/table-rows/table-rows-query.ts b/apps/studio/data/table-rows/table-rows-query.ts
index 4f9435c06efae..fef01f7d81a90 100644
--- a/apps/studio/data/table-rows/table-rows-query.ts
+++ b/apps/studio/data/table-rows/table-rows-query.ts
@@ -278,12 +278,12 @@ export function prefetchTableRows(
   client: QueryClient,
   { projectRef, connectionString, tableId, ...args }: Omit
 ) {
-  return client.fetchQuery(
-    tableRowKeys.tableRows(projectRef, {
+  return client.fetchQuery({
+    queryKey: tableRowKeys.tableRows(projectRef, {
       table: { id: tableId },
       ...args,
     }),
-    ({ signal }) =>
-      getTableRows({ queryClient: client, projectRef, connectionString, tableId, ...args }, signal)
-  )
+    queryFn: ({ signal }) =>
+      getTableRows({ queryClient: client, projectRef, connectionString, tableId, ...args }, signal),
+  })
 }
diff --git a/apps/studio/data/tables/table-create-mutation.ts b/apps/studio/data/tables/table-create-mutation.ts
index 195dd850f384d..3a3717c5a933b 100644
--- a/apps/studio/data/tables/table-create-mutation.ts
+++ b/apps/studio/data/tables/table-create-mutation.ts
@@ -50,8 +50,12 @@ export const useTableCreateMutation = ({
       const { projectRef, payload } = variables
 
       await Promise.all([
-        queryClient.invalidateQueries(tableKeys.list(projectRef, payload.schema, true)),
-        queryClient.invalidateQueries(tableKeys.list(projectRef, payload.schema, false)),
+        queryClient.invalidateQueries({
+          queryKey: tableKeys.list(projectRef, payload.schema, true),
+        }),
+        queryClient.invalidateQueries({
+          queryKey: tableKeys.list(projectRef, payload.schema, false),
+        }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/tables/table-delete-mutation.ts b/apps/studio/data/tables/table-delete-mutation.ts
index 3934fb5036f26..79499c4238757 100644
--- a/apps/studio/data/tables/table-delete-mutation.ts
+++ b/apps/studio/data/tables/table-delete-mutation.ts
@@ -55,11 +55,11 @@ export const useTableDeleteMutation = ({
     async onSuccess(data, variables, context) {
       const { id, projectRef, schema } = variables
       await Promise.all([
-        queryClient.invalidateQueries(tableEditorKeys.tableEditor(projectRef, id)),
-        queryClient.invalidateQueries(tableKeys.list(projectRef, schema)),
-        queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
+        queryClient.invalidateQueries({ queryKey: tableEditorKeys.tableEditor(projectRef, id) }),
+        queryClient.invalidateQueries({ queryKey: tableKeys.list(projectRef, schema) }),
+        queryClient.invalidateQueries({ queryKey: entityTypeKeys.list(projectRef) }),
         // invalidate all views from this schema
-        queryClient.invalidateQueries(viewKeys.listBySchema(projectRef, schema)),
+        queryClient.invalidateQueries({ queryKey: viewKeys.listBySchema(projectRef, schema) }),
       ])
 
       await onSuccess?.(data, variables, context)
diff --git a/apps/studio/data/tables/table-update-mutation.ts b/apps/studio/data/tables/table-update-mutation.ts
index f872454f084af..7b8ce1134b18e 100644
--- a/apps/studio/data/tables/table-update-mutation.ts
+++ b/apps/studio/data/tables/table-update-mutation.ts
@@ -63,9 +63,9 @@ export const useTableUpdateMutation = ({
     async onSuccess(data, variables, context) {
       const { projectRef, schema, id } = variables
       await Promise.all([
-        queryClient.invalidateQueries(tableEditorKeys.tableEditor(projectRef, id)),
-        queryClient.invalidateQueries(tableKeys.list(projectRef, schema)),
-        queryClient.invalidateQueries(lintKeys.lint(projectRef)),
+        queryClient.invalidateQueries({ queryKey: tableEditorKeys.tableEditor(projectRef, id) }),
+        queryClient.invalidateQueries({ queryKey: tableKeys.list(projectRef, schema) }),
+        queryClient.invalidateQueries({ queryKey: lintKeys.lint(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/data/third-party-auth/integration-create-mutation.ts b/apps/studio/data/third-party-auth/integration-create-mutation.ts
index 520e63f62bc73..ab1d4d67cd736 100644
--- a/apps/studio/data/third-party-auth/integration-create-mutation.ts
+++ b/apps/studio/data/third-party-auth/integration-create-mutation.ts
@@ -51,7 +51,7 @@ export const useCreateThirdPartyAuthIntegrationMutation = ({
       mutationFn: (vars) => createThirdPartyIntegration(vars),
       async onSuccess(data, variables, context) {
         const { projectRef } = variables
-        await queryClient.invalidateQueries(keys.integrations(projectRef))
+        await queryClient.invalidateQueries({ queryKey: keys.integrations(projectRef) })
         await onSuccess?.(data, variables, context)
       },
       async onError(data, variables, context) {
diff --git a/apps/studio/data/third-party-auth/integration-delete-mutation.ts b/apps/studio/data/third-party-auth/integration-delete-mutation.ts
index 7ee48bdf825fd..493c91eec5738 100644
--- a/apps/studio/data/third-party-auth/integration-delete-mutation.ts
+++ b/apps/studio/data/third-party-auth/integration-delete-mutation.ts
@@ -49,7 +49,7 @@ export const useDeleteThirdPartyAuthIntegrationMutation = ({
     mutationFn: (vars) => deleteThirdPartyIntegration(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(keys.integrations(projectRef))
+      await queryClient.invalidateQueries({ queryKey: keys.integrations(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/usage/org-usage-query.ts b/apps/studio/data/usage/org-usage-query.ts
index 2bfbfafb983d5..e8a9e7bdf4b99 100644
--- a/apps/studio/data/usage/org-usage-query.ts
+++ b/apps/studio/data/usage/org-usage-query.ts
@@ -8,7 +8,7 @@ import { usageKeys } from './keys'
 
 export type OrgUsageVariables = {
   orgSlug?: string
-  projectRef?: string
+  projectRef?: string | null
   start?: Date
   end?: Date
 }
@@ -24,7 +24,11 @@ export async function getOrgUsage(
   const { data, error } = await get(`/platform/organizations/{slug}/usage`, {
     params: {
       path: { slug: orgSlug },
-      query: { project_ref: projectRef, start: start?.toISOString(), end: end?.toISOString() },
+      query: {
+        project_ref: projectRef ?? undefined,
+        start: start?.toISOString(),
+        end: end?.toISOString(),
+      },
     },
     signal,
   })
@@ -40,7 +44,12 @@ export const useOrgUsageQuery = (
   { enabled = true, ...options }: UseQueryOptions = {}
 ) =>
   useQuery({
-    queryKey: usageKeys.orgUsage(orgSlug, projectRef, start?.toISOString(), end?.toISOString()),
+    queryKey: usageKeys.orgUsage(
+      orgSlug,
+      projectRef ?? undefined,
+      start?.toISOString(),
+      end?.toISOString()
+    ),
     queryFn: ({ signal }) => getOrgUsage({ orgSlug, projectRef, start, end }, signal),
     enabled: enabled && IS_PLATFORM && typeof orgSlug !== 'undefined',
     staleTime: 1000 * 60 * 60,
diff --git a/apps/studio/data/vault/vault-secret-create-mutation.ts b/apps/studio/data/vault/vault-secret-create-mutation.ts
index 40d4579805698..62a5d96e37b5a 100644
--- a/apps/studio/data/vault/vault-secret-create-mutation.ts
+++ b/apps/studio/data/vault/vault-secret-create-mutation.ts
@@ -45,7 +45,7 @@ export const useVaultSecretCreateMutation = ({
     mutationFn: (vars) => createVaultSecret(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: vaultSecretsKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/vault/vault-secret-delete-mutation.ts b/apps/studio/data/vault/vault-secret-delete-mutation.ts
index e1d6aaa5d6d7f..6ef380309b4b4 100644
--- a/apps/studio/data/vault/vault-secret-delete-mutation.ts
+++ b/apps/studio/data/vault/vault-secret-delete-mutation.ts
@@ -38,7 +38,7 @@ export const useVaultSecretDeleteMutation = ({
     mutationFn: (vars) => deleteVaultSecret(vars),
     async onSuccess(data, variables, context) {
       const { projectRef } = variables
-      await queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef))
+      await queryClient.invalidateQueries({ queryKey: vaultSecretsKeys.list(projectRef) })
       await onSuccess?.(data, variables, context)
     },
     async onError(data, variables, context) {
diff --git a/apps/studio/data/vault/vault-secret-update-mutation.ts b/apps/studio/data/vault/vault-secret-update-mutation.ts
index ee33ece65a397..753aee03a8f3e 100644
--- a/apps/studio/data/vault/vault-secret-update-mutation.ts
+++ b/apps/studio/data/vault/vault-secret-update-mutation.ts
@@ -49,8 +49,8 @@ export const useVaultSecretUpdateMutation = ({
     async onSuccess(data, variables, context) {
       const { id, projectRef } = variables
       await Promise.all([
-        queryClient.removeQueries(vaultSecretsKeys.getDecryptedValue(projectRef, id)),
-        queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef)),
+        queryClient.removeQueries({ queryKey: vaultSecretsKeys.getDecryptedValue(projectRef, id) }),
+        queryClient.invalidateQueries({ queryKey: vaultSecretsKeys.list(projectRef) }),
       ])
       await onSuccess?.(data, variables, context)
     },
diff --git a/apps/studio/hooks/analytics/useLogsPreview.tsx b/apps/studio/hooks/analytics/useLogsPreview.tsx
index 8f6bdde076190..1d9b6924f6166 100644
--- a/apps/studio/hooks/analytics/useLogsPreview.tsx
+++ b/apps/studio/hooks/analytics/useLogsPreview.tsx
@@ -100,9 +100,9 @@ function useLogsPreview({
     fetchNextPage,
     isFetchingNextPage,
     refetch,
-  } = useInfiniteQuery(
+  } = useInfiniteQuery({
     queryKey,
-    async ({ signal, pageParam }) => {
+    queryFn: async ({ signal, pageParam }) => {
       const { data, error } = await get(`/platform/projects/{ref}/analytics/endpoints/logs.all`, {
         params: {
           path: { ref: projectRef },
@@ -119,19 +119,17 @@ function useLogsPreview({
 
       return data as unknown as Logs
     },
-    {
-      refetchOnWindowFocus: false,
-      getNextPageParam(lastPage) {
-        if ((lastPage.result?.length ?? 0) === 0) {
-          return undefined
-        }
-        const len = lastPage.result.length
-        const { timestamp: tsLimit }: LogData = lastPage.result[len - 1]
-        const isoTsLimit = dayjs.utc(Number(tsLimit / 1000)).toISOString()
-        return isoTsLimit
-      },
-    }
-  )
+    refetchOnWindowFocus: false,
+    getNextPageParam(lastPage) {
+      if ((lastPage.result?.length ?? 0) === 0) {
+        return undefined
+      }
+      const len = lastPage.result.length
+      const { timestamp: tsLimit }: LogData = lastPage.result[len - 1]
+      const isoTsLimit = dayjs.utc(Number(tsLimit / 1000)).toISOString()
+      return isoTsLimit
+    },
+  })
 
   const { logData, error, oldestTimestamp } = useMemo(() => {
     let logData: LogData[] = []
diff --git a/apps/studio/hooks/misc/useLocalStorage.ts b/apps/studio/hooks/misc/useLocalStorage.ts
index b9bb8329b9e21..9b385839df138 100644
--- a/apps/studio/hooks/misc/useLocalStorage.ts
+++ b/apps/studio/hooks/misc/useLocalStorage.ts
@@ -89,7 +89,7 @@ export function useLocalStorageQuery(key: string, initialValue: T) {
     }
 
     queryClient.setQueryData(queryKey, valueToStore)
-    queryClient.invalidateQueries(queryKey)
+    queryClient.invalidateQueries({ queryKey })
   }
 
   return [storedValue, setValue, { isSuccess, isLoading, isError, error }] as const
diff --git a/apps/studio/pages/project/[ref]/reports/database.tsx b/apps/studio/pages/project/[ref]/reports/database.tsx
index 5eaca8b089d89..b1c10441c8a7d 100644
--- a/apps/studio/pages/project/[ref]/reports/database.tsx
+++ b/apps/studio/pages/project/[ref]/reports/database.tsx
@@ -148,27 +148,27 @@ const DatabaseUsage = () => {
     const { period_start, period_end, interval } = selectedDateRange
     REPORT_ATTRIBUTES.forEach((chart: any) => {
       chart.attributes.forEach((attr: any) => {
-        queryClient.invalidateQueries(
-          analyticsKeys.infraMonitoring(ref, {
+        queryClient.invalidateQueries({
+          queryKey: analyticsKeys.infraMonitoring(ref, {
             attribute: attr.attribute,
             startDate: period_start.date,
             endDate: period_end.date,
             interval,
             databaseIdentifier: state.selectedDatabaseId,
-          })
-        )
+          }),
+        })
       })
     })
     if (isReplicaSelected) {
-      queryClient.invalidateQueries(
-        analyticsKeys.infraMonitoring(ref, {
+      queryClient.invalidateQueries({
+        queryKey: analyticsKeys.infraMonitoring(ref, {
           attribute: 'physical_replication_lag_physical_replica_lag_seconds',
           startDate: period_start.date,
           endDate: period_end.date,
           interval,
           databaseIdentifier: state.selectedDatabaseId,
-        })
-      )
+        }),
+      })
     }
     setTimeout(() => setIsRefreshing(false), 1000)
   }
diff --git a/apps/studio/pages/project/[ref]/reports/realtime.tsx b/apps/studio/pages/project/[ref]/reports/realtime.tsx
index ba982757c0d96..d61c0259e1ad9 100644
--- a/apps/studio/pages/project/[ref]/reports/realtime.tsx
+++ b/apps/studio/pages/project/[ref]/reports/realtime.tsx
@@ -1,40 +1,33 @@
-import { useEffect, useState } from 'react'
 import { useQueryClient } from '@tanstack/react-query'
+import { useParams } from 'common'
 import dayjs from 'dayjs'
 import { ArrowRight, RefreshCw } from 'lucide-react'
-import { useParams } from 'common'
+import { useEffect, useState } from 'react'
 
-import DefaultLayout from 'components/layouts/DefaultLayout'
+import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar'
 import ReportHeader from 'components/interfaces/Reports/ReportHeader'
 import ReportPadding from 'components/interfaces/Reports/ReportPadding'
-import ReportsLayout from 'components/layouts/ReportsLayout/ReportsLayout'
-import { ButtonTooltip } from 'components/ui/ButtonTooltip'
-import { useDatabaseSelectorStateSnapshot } from 'state/database-selector'
 import {
-  LogsDatePicker,
   DatePickerValue,
+  LogsDatePicker,
 } from 'components/interfaces/Settings/Logs/Logs.DatePickers'
-import {
-  ResponseSpeedChartRenderer,
-  TopApiRoutesRenderer,
-  TotalRequestsChartRenderer,
-} from 'components/interfaces/Reports/renderers/ApiRenderers'
+import DefaultLayout from 'components/layouts/DefaultLayout'
+import ReportsLayout from 'components/layouts/ReportsLayout/ReportsLayout'
+import { ButtonTooltip } from 'components/ui/ButtonTooltip'
 import { LazyComposedChartHandler } from 'components/ui/Charts/ComposedChartHandler'
-import ReportWidget from 'components/interfaces/Reports/ReportWidget'
-import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar'
+import { useDatabaseSelectorStateSnapshot } from 'state/database-selector'
 
-import { analyticsKeys } from 'data/analytics/keys'
-import { getRealtimeReportAttributes } from 'data/reports/realtime-charts'
-import { useApiReport } from 'data/reports/api-report-query'
-import { useReportDateRange } from 'hooks/misc/useReportDateRange'
 import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants'
 import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav'
 import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt'
+import { analyticsKeys } from 'data/analytics/keys'
+import { getRealtimeReportAttributes } from 'data/reports/realtime-charts'
+import { useReportDateRange } from 'hooks/misc/useReportDateRange'
 
-import type { NextPageWithLayout } from 'types'
-import type { MultiAttribute } from 'components/ui/Charts/ComposedChart.utils'
 import { SharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport'
 import { useSharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants'
+import type { MultiAttribute } from 'components/ui/Charts/ComposedChart.utils'
+import type { NextPageWithLayout } from 'types'
 
 const RealtimeReport: NextPageWithLayout = () => {
   return (
@@ -100,15 +93,15 @@ const RealtimeUsage = () => {
 
     const { period_start, period_end, interval } = selectedDateRange
     REALTIME_REPORT_ATTRIBUTES.forEach((attr) => {
-      queryClient.invalidateQueries(
-        analyticsKeys.infraMonitoring(ref, {
+      queryClient.invalidateQueries({
+        queryKey: analyticsKeys.infraMonitoring(ref, {
           attribute: attr?.id,
           startDate: period_start.date,
           endDate: period_end.date,
           interval,
           databaseIdentifier: state.selectedDatabaseId,
-        })
-      )
+        }),
+      })
     })
 
     refetch()
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 5d9b3e82fb940..ddf29b523277b 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -11,7 +11,7 @@ services:
 
   studio:
     container_name: supabase-studio
-    image: supabase/studio:2025.10.20-sha-5005fc6
+    image: supabase/studio:2025.10.27-sha-85b84e0
     restart: unless-stopped
     healthcheck:
       test:
@@ -190,7 +190,7 @@ services:
   realtime:
     # This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain
     container_name: realtime-dev.supabase-realtime
-    image: supabase/realtime:v2.56.0
+    image: supabase/realtime:v2.57.2
     restart: unless-stopped
     depends_on:
       db:
@@ -235,7 +235,7 @@ services:
   # To use S3 backed storage: docker compose -f docker-compose.yml -f docker-compose.s3.yml up
   storage:
     container_name: supabase-storage
-    image: supabase/storage-api:v1.28.1
+    image: supabase/storage-api:v1.28.2
     restart: unless-stopped
     volumes:
       - ./volumes/storage:/var/lib/storage:z
@@ -300,7 +300,7 @@ services:
 
   meta:
     container_name: supabase-meta
-    image: supabase/postgres-meta:v0.93.0
+    image: supabase/postgres-meta:v0.93.1
     restart: unless-stopped
     depends_on:
       db:
@@ -319,7 +319,7 @@ services:
 
   functions:
     container_name: supabase-edge-functions
-    image: supabase/edge-runtime:v1.69.14
+    image: supabase/edge-runtime:v1.69.15
     restart: unless-stopped
     volumes:
       - ./volumes/functions:/home/deno/functions:Z
diff --git a/packages/common/feature-flags.tsx b/packages/common/feature-flags.tsx
index ee8b1c3b77d2b..f9ea005889d4f 100644
--- a/packages/common/feature-flags.tsx
+++ b/packages/common/feature-flags.tsx
@@ -4,7 +4,7 @@ import { FlagValues } from 'flags/react'
 import { createContext, PropsWithChildren, useContext, useEffect, useState } from 'react'
 
 import { components } from 'api-types'
-import { useUser } from './auth'
+import { useAuth } from './auth'
 import { getFlags as getDefaultConfigCatFlags } from './configcat'
 import { hasConsented } from './consent-state'
 import { get, post } from './fetchWrappers'
@@ -72,7 +72,8 @@ export const FeatureFlagProvider = ({
     userEmail?: string
   ) => Promise<{ settingKey: string; settingValue: boolean | number | string | null | undefined }[]>
 }>) => {
-  const user = useUser()
+  const { session, isLoading } = useAuth()
+  const userEmail = session?.user?.email
 
   const [store, setStore] = useState({
     API_URL,
@@ -85,7 +86,7 @@ export const FeatureFlagProvider = ({
     let mounted = true
 
     async function processFlags() {
-      if (!enabled) return
+      if (!enabled || isLoading) return
 
       const loadPHFlags =
         (enabled === true || (typeof enabled === 'object' && enabled.ph)) && !!API_URL
@@ -98,8 +99,8 @@ export const FeatureFlagProvider = ({
         loadPHFlags ? getFeatureFlags(API_URL) : Promise.resolve({}),
         loadCCFlags
           ? typeof getConfigCatFlags === 'function'
-            ? getConfigCatFlags(user?.email)
-            : getDefaultConfigCatFlags(user?.email)
+            ? getConfigCatFlags(userEmail)
+            : getDefaultConfigCatFlags(userEmail)
           : Promise.resolve([]),
       ])
 
@@ -139,7 +140,7 @@ export const FeatureFlagProvider = ({
     return () => {
       mounted = false
     }
-  }, [enabled, user?.email])
+  }, [enabled, isLoading, userEmail])
 
   return (