Skip to main content

Supabase Functions

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 to your .env file.

You'll find them under Details > REST API > .env.

cp supabase/functions/upstash-redis-counter/.env.example supabase/functions/upstash-redis-counter/.env


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:

import { serve } from ''
import { Redis } from ''
console.log(`Function "upstash-redis-counter" up and running!`)
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: + 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: 200 })

Run locally

supabase start
supabase 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.


supabase functions deploy upstash-redis-counter --no-verify-jwt
supabase secrets set --env-file supabase/functions/upstash-redis-counter/.env