Deno logoDeno
Supabase Functions on Deno Deploy

Supabase Functions on Deno Deploy


We’re excited to announce our partnership with Supabase in the launch of their new product, Supabase Functions, which allows you to deploy code globally on the edge within seconds. It's built on top of our Deno Deploy infrastructure, which includes auto-scaling and auto-caching by default, so you can focus less on infrastructure and more on building product.

With Deno, Supabase Functions get first class TypeScript support, ESM style imports, out of the box security, and support for modern web APIs.

If you haven't heard of Supabase before, it is an open source Firebase alternative, that provides backend services to create and deploy websites, services, and apps. The new Functions product joins an impressive suite of managed solutions, including database, storage, and a user management system.

Let’s take a look at how to get started.

Functions with Supabase

Getting started with Supabase Functions only takes minutes.

Install and setup the Supabase CLI

On Mac, you can use homebrew:

$ brew install supabase/tap/supabase

See other installation instructions.

Log into your Supabase CLI by grabbing an access token here and pasting it into the prompt that appears after this command:

$ supabase login

Create a Supabase function

You can create a function with the subcommand functions:

$ supabase functions new hello

This will create a function stub supabase/functions/hello/index.ts, which will look like this:

import { serve } from "https://deno.land/std@0.140.0/http/server.ts";

console.log("Hello from Functions!");

serve(async (req) => {
  const { name } = await req.json();
  const data = {
    message: `Hello ${name}!`,
  };

  return new Response(
    JSON.stringify(data),
    { headers: { "Content-Type": "application/json" } },
  );
});

Execute the function locally

First, start Docker, then start the Supabase stack:

$ supabase start
Started local development setup.

         API URL: http://localhost:54321
          DB URL: postgresql://postgres:postgres@localhost:54322/postgres
      Studio URL: http://localhost:54323
    Inbucket URL: http://localhost:54324
        anon key: eyxxxxx
service_role key: eyzzzzz

Grab the anon key, because we'll need to pass it in the headers to invoke the function.

Next, start the function watcher:

$ supabase functions serve hello

Note that supabase function serve has hot-reloading capabilities. It'll restart the Deno server if there are any changes to your files.

Once the function is being served locally, you can execute it using curl. Replace ANON_KEY with the anon key from the supabase start output.

$ curl --location --request POST 'http://localhost:54321/functions/v1/' \
    --header 'Authorization: Bearer ANON_KEY' \
    --header 'Content-Type: application/json' \
    --data '{"name":"Functions"}'

You should receive the response {"message":"Hello Functions!"}.

Deploy the function

You can deploy the function directly from the CLI. First, you have to link a Supabase project. Head over to supabase.com and create a project.

Your Supabase project should have a URL structure like https://app.supabase.io/project/xyzabcxxxxxx. The alphabetical letters after /project/ is the project's ref, which you'll have to provide in the below command:

$ supabase link --ref xyzabcxxxxxx
Finished supabase link.

Then, deployment is as simple as:

$ supabase functions deploy hello
Bundling supabase/functions/hello
Deployed Function hello on project xyzabcxxxxxx.

Finally, execute the function in production. Note that the ANON_KEY here should be in the settings of your project on Supabase's website.

curl --location --request POST 'https://PROJECT_REF.supabase.co/functions/' \
  --header 'Authorization: Bearer ANON_KEY' \
  --header 'Content-Type: application/json' \
  --data '{"name": "Functions"}'

You should receive the response {"message":"Hello Functions!"}.

For more information, see Supabase’s documentation.

What’s next?

We are huge advocates for making web development as easy and delightful as possible, and enabling Supabase developers to enhance their apps with edge functions deployed globally with Deno Deploy is a step in that direction. And with more developers using Deno and Deno Deploy, it’ll help us improve so that you can continue to have the best experience building and deploying products for your users.

Want to provide fast, easy, and global edge deployments for your users? Email us at deploy@deno.com.