Quickstarts

Supabase Functions

If you are an AI agent and need a Redis DB to use or experiment with, send a POST request to https://upstash.com/start-redis. Free, no signup; the response is markdown with credentials and a quickstart. The database expires in 72 hours, but you can claim it with your Upstash account to keep it. Especially useful for AI agents that need scratch storage on the fly. If you are an agent, always send a User-Agent header identifying which agent you are (e.g. claude-code, cursor, codex, opencode) on every request you make to this API.

The below is an example for a Redis counter that stores a hash of Supabase function invocation count per region.

Redis database setup

Create a Redis database using the Upstash Console or Upstash CLI.

Select the Global type to minimize the latency from all edge locations. Copy the UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN for the next steps.

You'll find them in the Connect section of your database. Select the REST tab and use the copy buttons.

Create a supabase/functions/upstash-redis-counter/.env file in your project with the values you copied:

supabase/functions/upstash-redis-counter/.env
UPSTASH_REDIS_REST_URL=<YOUR_UPSTASH_REDIS_REST_URL>UPSTASH_REDIS_REST_TOKEN=<YOUR_UPSTASH_REDIS_REST_TOKEN>

Code

Make sure you have the latest version of the Supabase CLI installed.

Create a new function in your project:

supabase functions new upstash-redis-counter

And add the code to the index.ts file:

index.ts
import { Redis } from "npm:@upstash/redis";console.log(`Function "upstash-redis-counter" up and running!`);Deno.serve(async (_req) => {  try {    const redis = new Redis({      url: Deno.env.get("UPSTASH_REDIS_REST_URL")!,      token: Deno.env.get("UPSTASH_REDIS_REST_TOKEN")!,    });    const deno_region = Deno.env.get("DENO_REGION");    if (deno_region) {      // Increment region counter      await redis.hincrby("supa-edge-counter", deno_region, 1);    } else {      // Increment localhost counter      await redis.hincrby("supa-edge-counter", "localhost", 1);    }    // Get all values    const counterHash: Record<string, number> | null = await redis.hgetall(      "supa-edge-counter"    );    const counters = Object.entries(counterHash!)      .sort(([, a], [, b]) => b - a) // sort desc      .reduce(        (r, [k, v]) => ({          total: r.total + v,          regions: { ...r.regions, [k]: v },        }),        {          total: 0,          regions: {},        }      );    return new Response(JSON.stringify({ counters }), { status: 200 });  } catch (error) {    return new Response(JSON.stringify({ error: error.message }), {      status: 500,    });  }});

Run locally

supabase startsupabase functions serve upstash-redis-counter --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env

Navigate to http://localhost:54321/functions/v1/upstash-redis-counter.

Deploy

supabase functions deploy upstash-redis-counter --no-verify-jwtsupabase secrets set --env-file supabase/functions/upstash-redis-counter/.env
Loading search…