Files
supabase/apps/docs/content/guides/functions/development-environment.mdx
T
Miranda Limonczenko abbf667084 fix(docs) Resolve local link paths caused that have redirects (#48453)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## Problem

The Docs E2E link checker found broken links throughout docs, starting
with `phone-login.mdx` pointing to `/docs/guides/cli/config` (404).

Old links like `/docs/guides/cli/config` still work on the live site
because `supabase.com` has redirects set up for them, but these links
break on the docs preview site, which is what the E2E check tests
against. These issues look clean on the live site, and I didn't catch
them in my first pass because I was testing production instead of the
preview.

The E2E check only tests the ~20 pages a given PR happens to touch, so
fixing the pages it flagged kept exposing more of the same problem one
page at a time as each fix pulled in a new file. To stop chasing this
incrementally, I cross-referenced every `/docs/guides/*` and
`/docs/reference/*` redirect source in `apps/www/lib/redirects.js`
against actual usage across all of `apps/docs`, and verified each
candidate against the live preview.

## Solution

Rather than updating the Docs E2E link checker, this PR resolves the
links. **Why:** we own these docs, so keeping the links clean without
redirects is keeping the house maintained. See [Broken Window
Theory](https://blog.codinghorror.com/the-broken-window-theory/).

Updated every link still using an old path to point straight at the
current page instead of relying on a redirect. This covers old links
like:

- `/docs/guides/cli/config` →
`/docs/guides/local-development/cli/config`
- `/docs/guides/cli/getting-started` →
`/docs/guides/local-development/cli/getting-started`
- `/docs/guides/cli/local-development` →
`/docs/guides/local-development/database-migrations`
- `/docs/guides/cli/managing-environments` →
`/docs/guides/deployment/managing-environments`
- `/docs/guides/cli/seeding-your-database` →
`/docs/guides/local-development/seeding-your-database`
- bare `/docs/guides/cli` → `/docs/guides/local-development`
- `/docs/guides/platform/compute-add-ons` →
`/docs/guides/platform/compute-and-disk`
- `/docs/guides/platform/shared-responsibility-model` →
`/docs/guides/deployment/shared-responsibility-model`
- `/docs/guides/database` → `/docs/guides/database/overview`
- `/docs/reference/javascript`, `/docs/reference/dart`,
`/docs/reference/kotlin`, `/docs/reference/python`,
`/docs/reference/csharp` → their `/introduction` pages (the redirect's
own destination, `/start`, turned out to be dead even on production — a
separate bug in `redirects.js` I didn't touch here)
- and about 35 more of the same pattern, listed in the commit messages

Also fixed a handful of dead heading anchors found along the way (links
that resolve to the right page but point at a `#section` that got
renamed or moved), including the original `#bigquery` anchor and a few
in `connecting-to-postgres.mdx` where content moved to its own dedicated
page.

Left alone on purpose:
- `content/guides/cli.mdx` — this page has no route in the docs app at
all (no `app/guides/cli/` directory), so it 404s even in production
before the `www` redirect ever fires. Fixing its internal link wouldn't
change that; it needs an actual routing/content decision, not a link
fix.
- A few candidates that already resolve fine as-is (`pg_partman`, bare
`/docs/reference/api`, bare `/docs/reference/cli`) — confirmed via curl,
left untouched.

## Manual testing

1. Confirmed every new link target actually exists by checking the
destination file/page and matching heading anchors.
2. Cross-referenced every `/docs/guides/*` and `/docs/reference/*`
redirect source in `apps/www/lib/redirects.js` against real usage in
`apps/docs`, and curl-verified each old path (404) and new path (200)
against the live PR preview before fixing it.
3. Ran the Docs E2E link checker locally against changed pages.
4. Spot-checked the original broken link from CI
(`/docs/guides/cli/config`) to confirm it now points to a working page.
2026-07-29 14:47:17 -07:00

119 lines
4.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: 'development-environment'
title: 'Development Environment'
description: 'Get the best Edge Functions experience with the right local developer environment.'
subtitle: 'Set up your local development environment for Edge Functions.'
tocVideo: 'lFhU3L8VoSQ'
---
<Admonition type="note">
Before getting started, make sure you have the Supabase CLI installed. Check out the [CLI installation guide](/docs/guides/local-development) for installation methods and troubleshooting.
</Admonition>
---
## Step 1: Install Deno CLI
The Supabase CLI doesn't use the standard Deno CLI to serve functions locally. Instead, it uses its own Edge Runtime to keep the development and production environment consistent.
You can follow the [Deno guide](https://deno.com/manual@v1.32.5/getting_started/setup_your_environment) for setting up your development environment with your favorite editor/IDE.
The benefit of installing Deno separately is that you can use the Deno LSP to improve your editor's autocompletion, type checking, and testing. You can also use Deno's built-in tools such as `deno fmt`, `deno lint`, and `deno test`.
After installing, you should have Deno installed and available in your terminal. Verify with `deno --version`
---
## Step 2: Set up your editor
Set up your editor environment for proper TypeScript support, autocompletion, and error detection.
### VSCode/Cursor (recommended)
1. **Install the Deno extension** from the VSCode marketplace
2. **Option 1: Auto-generate (easiest)**
When running `supabase init`, select `y` when prompted "Generate VS Code settings for Deno? [y/N]"
3. **Option 2: Manual setup**
Create a `.vscode/settings.json` in your project root:
```json
{
"deno.enablePaths": ["./supabase/functions"],
"deno.importMap": "./supabase/functions/deno.json"
}
```
This configuration enables the Deno language server only for the `supabase/functions` folder, while using VSCode's built-in JavaScript/TypeScript language server for all other files.
---
### Multi-root workspaces
The standard `.vscode/settings.json` setup works perfectly for projects where your Edge Functions live alongside your main application code. However, you might need multi-root workspaces if your development setup involves:
- **Multiple repositories:** Edge Functions in one repo, main app in another
- **Microservices:** Several services you need to develop in parallel
For this development workflow, create `edge-functions.code-workspace`:
<$CodeSample
path="/edge-functions/edge-functions.code-workspace"
meta="edge-functions.code-workspace"
language="json"
/>
You can find the complete example on [GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions).
---
## Recommended project structure
It's recommended to organize your functions according to the following structure:
```bash
└── supabase
├── functions
│ ├── deno.json # Top-level Deno configuration
│ ├── _shared # Shared code (underscore prefix)
│ │ ├── supabaseAdmin.ts # Supabase client with SECRET key
│ │ ├── supabaseClient.ts # Supabase client with PUBLISHABLE key
│ │ └── cors.ts # Reusable CORS headers
│ ├── function-one # Use hyphens for function names
│ │ └── index.ts
│ └── function-two
│ └── index.ts
├── tests
│ ├── function-one-test.ts
│ └── function-two-test.ts
├── migrations
└── config.toml
```
- **Use "fat functions"**. Develop few, large functions by combining related functionality. This minimizes cold starts.
- **Name functions with hyphens (`-`)**. This is the most URL-friendly approach
- **Store shared code in `_shared`**. Store any shared code in a folder prefixed with an underscore (`_`).
- **Separate tests**. Use a separate folder for [Unit Tests](/docs/guides/functions/unit-test) that includes the name of the function followed by a `-test` suffix.
---
## Essential CLI commands
Get familiar with the most commonly used CLI commands for developing and deploying Edge Functions.
### `supabase start`
This command spins up your entire Supabase stack locally: database, auth, storage, and Edge Functions runtime. You're developing against the exact same environment you'll deploy to.
### `supabase functions serve [function-name]`
Develop a specific function with hot reloading. Your functions run at `http://localhost:54321/functions/v1/[function-name]`. When you save your file, you’ll see the changes instantly without having to wait.
Alternatively, use `supabase functions serve` to serve all functions at once.
### `supabase functions deploy hello-world`
Deploy the function when you’re ready