Back to Supabase

Use Supabase with SvelteKit

apps/docs/content/guides/getting-started/quickstarts/sveltekit.mdx

1.26.045.2 KB
Original Source
<StepHikeCompact>

<StepHikeCompact.Step step={1}>

<$Partial path="quickstart_db_setup.mdx" />

</StepHikeCompact.Step>

<StepHikeCompact.Step step={2}>

<StepHikeCompact.Details title="Create a SvelteKit app">

Create a SvelteKit app using the `npm create` command.

</StepHikeCompact.Details>

<StepHikeCompact.Code>

  ```bash name=Terminal
  npx sv create my-app
  ```

</StepHikeCompact.Code>

</StepHikeCompact.Step>

<StepHikeCompact.Step step={3}> <StepHikeCompact.Details title="Install the Supabase client library">

The fastest way to get started is to use the `supabase-js` client library which provides a convenient interface for working with Supabase from a SvelteKit app.

Navigate to the SvelteKit app and install `supabase-js`.

</StepHikeCompact.Details>

<StepHikeCompact.Code>

  ```bash name=Terminal
  cd my-app && npm install @supabase/supabase-js
  ```

</StepHikeCompact.Code>

</StepHikeCompact.Step>

<StepHikeCompact.Step step={4}>

<StepHikeCompact.Details title="Declare Supabase Environment Variables">

Create a `.env` file at the root of your project and populate with your Supabase connection variables:

<ProjectConfigVariables variable="url" />
<ProjectConfigVariables variable="publishable" />


</StepHikeCompact.Details>

<StepHikeCompact.Code>

  <$CodeTabs>

    ```text name=.env
    PUBLIC_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
    PUBLIC_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
    ```

  </$CodeTabs>
  <$Partial path="api_settings_steps.mdx" variables={{ "framework": "sveltekit", "tab": "frameworks" }} />

</StepHikeCompact.Code>

</StepHikeCompact.Step>

<StepHikeCompact.Step step={5}> <StepHikeCompact.Details title="Create the Supabase client">

Create a `src/lib` directory in your SvelteKit app, create a file called `supabaseClient.js` and add the following code to initialize the Supabase client:

</StepHikeCompact.Details>

<StepHikeCompact.Code>

  <$CodeTabs>

    ```js name=src/lib/supabaseClient.js
    import { createClient } from '@supabase/supabase-js';
    import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';

    export const supabase = createClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY)
    ```

    ```ts name=src/lib/supabaseClient.ts
    import { createClient } from '@supabase/supabase-js';
    import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';

    export const supabase = createClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY)
    ```

  </$CodeTabs>

</StepHikeCompact.Code>

</StepHikeCompact.Step>

<StepHikeCompact.Step step={6}> <StepHikeCompact.Details title="Query data from the app">

Use `load` method to fetch the data server-side and display the query results as a simple list.

Create `+page.server.js` file in the `src/routes` directory with the following code.

</StepHikeCompact.Details>
<StepHikeCompact.Code>

  <$CodeTabs>

    ```js name=src/routes/+page.server.js
      import { supabase } from "$lib/supabaseClient";

      export async function load() {
        const { data } = await supabase.from("instruments").select();
        return {
          instruments: data ?? [],
        };
      }
    ```

    ```ts name=src/routes/+page.server.ts
    import type { PageServerLoad } from './$types';
    import { supabase } from '$lib/supabaseClient';

    type Instrument = {
      id: number;
      name: string;
    };

    export const load: PageServerLoad = async () => {
      const { data, error } = await supabase.from('instruments').select<'instruments', Instrument>();

      if (error) {
        console.error('Error loading instruments:', error.message);
        return { instruments: [] };
      }

      return {
        instruments: data ?? [],
      };
    };
    ```

  </$CodeTabs>

</StepHikeCompact.Code>

<StepHikeCompact.Details title="">

Replace the existing content in your `+page.svelte` file in the `src/routes` directory with the following code.

</StepHikeCompact.Details>
<StepHikeCompact.Code>


  ```svelte name=src/routes/+page.svelte
  <script>
    let { data } = $props();
  </script>

  <ul>
    {#each data.instruments as instrument}
      <li>{instrument.name}</li>
    {/each}
  </ul>
  ```

</StepHikeCompact.Code>

</StepHikeCompact.Step>

<StepHikeCompact.Step step={7}> <StepHikeCompact.Details title="Start the app">

Start the app and go to http://localhost:5173 in a browser and you should see the list of instruments.

</StepHikeCompact.Details>

<StepHikeCompact.Code>

  ```bash name=Terminal
  npm run dev
  ```

</StepHikeCompact.Code>

</StepHikeCompact.Step> </StepHikeCompact>

Next steps