diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 12e13193f12ba..9fc45bcbbde8e 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -355,6 +355,10 @@ export const gettingstarted: NavMenuConstant = { name: 'Hono', url: '/guides/getting-started/quickstarts/hono', }, + { + name: 'Expo React Native', + url: '/guides/getting-started/quickstarts/expo-react-native', + }, { name: 'Flutter', url: '/guides/getting-started/quickstarts/flutter', @@ -371,6 +375,15 @@ export const gettingstarted: NavMenuConstant = { name: 'SvelteKit', url: '/guides/getting-started/quickstarts/sveltekit' as `/${string}`, }, + { + name: 'Flask (Python)', + url: '/guides/getting-started/quickstarts/flask' as `/${string}`, + enabled: !jsOnly, + }, + { + name: 'TanStack Start', + url: '/guides/getting-started/quickstarts/tanstack' as `/${string}`, + }, { name: 'Laravel PHP', url: '/guides/getting-started/quickstarts/laravel' as `/${string}`, @@ -381,7 +394,6 @@ export const gettingstarted: NavMenuConstant = { url: '/guides/getting-started/quickstarts/ruby-on-rails' as `/${string}`, enabled: !jsOnly, }, - { name: 'SolidJS', url: '/guides/getting-started/quickstarts/solidjs', diff --git a/apps/docs/content/guides/getting-started/quickstarts/expo-react-native.mdx b/apps/docs/content/guides/getting-started/quickstarts/expo-react-native.mdx new file mode 100644 index 0000000000000..f4fd73b4cb678 --- /dev/null +++ b/apps/docs/content/guides/getting-started/quickstarts/expo-react-native.mdx @@ -0,0 +1,195 @@ +--- +title: 'Use Supabase with Expo React Native' +subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from an Expo app.' +breadcrumb: 'Framework Quickstarts' +hideToc: true +--- + + + + + + <$Partial path="quickstart_db_setup.mdx" /> + + + + + + + + Create a minimal Expo app using the `create-expo-app` command with the blank TypeScript template. + + <$Partial path="uiLibCta.mdx" /> + + + + + + ```bash name=Terminal + npx create-expo-app my-app --template blank-typescript + ``` + + + + + + + + + The fastest way to get started is to use the `@supabase/supabase-js` client library which provides a convenient interface for working with Supabase from a React Native app. + + Navigate to the Expo app and install `supabase-js` along with the required dependencies for secure storage and URL handling. + + + + + + ```bash name=Terminal + cd my-app && npx expo install @supabase/supabase-js @react-native-async-storage/async-storage react-native-url-polyfill + ``` + + + + + + + + + Create a `.env` file in the root of your project and populate it with your Supabase connection variables. + + Expo requires environment variables to be prefixed with `EXPO_PUBLIC_` to be accessible in your app code. + + + + + + + + + + ```text name=.env + EXPO_PUBLIC_SUPABASE_URL= + EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY= + ``` + <$Partial path="api_settings_steps.mdx" variables={{ "framework": "", "tab": "" }} /> + + + + + + + + + Create a helper file at `lib/supabase.ts` to initialize the Supabase client using the environment variables. + + The code below uses [AsyncStorage](https://www.npmjs.com/package/@react-native-async-storage/async-storage) to persist the user session in your app. + + + + + + ```ts name=lib/supabase.ts + import 'react-native-url-polyfill/auto' + import { createClient } from '@supabase/supabase-js' + import AsyncStorage from '@react-native-async-storage/async-storage' + + const supabaseUrl = process.env.EXPO_PUBLIC_SUPABASE_URL + const supabaseAnonKey = process.env.EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY + + export const supabase = createClient(supabaseUrl, supabaseAnonKey, { + auth: { + storage: AsyncStorage, + autoRefreshToken: true, + persistSession: true, + detectSessionInUrl: false, + }, + }) + ``` + + + + + + + + + Replace the contents of `App.tsx` with the following code to fetch and display the instruments from your database. + + Use `useEffect` to fetch the data when the component mounts and display the query result using React Native components. + + + + + ```tsx name=App.tsx + import { useEffect, useState } from 'react' + import { StyleSheet, View, FlatList, Text } from 'react-native' + import { supabase } from './lib/supabase' + + export default function App() { + const [instruments, setInstruments] = useState([]) + + useEffect(() => { + getInstruments() + }, []) + + async function getInstruments() { + const { data } = await supabase.from('instruments').select() + setInstruments(data) + } + + return ( + + item.id.toString()} + renderItem={({ item }) => ( + {item.name} + )} + /> + + ) + } + + const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#fff', + paddingTop: 50, + paddingHorizontal: 16, + }, + item: { + padding: 16, + borderBottomWidth: 1, + borderBottomColor: '#ccc', + }, + }) + ``` + + + + + + + + + Run the development server and scan the QR code with the Expo Go app on your phone, or press `i` for iOS simulator or `a` for Android emulator. + + + + + + ```bash name=Terminal + npx expo start + ``` + + + + + + + +## Next steps + +- Set up [Auth](/docs/guides/auth) for your app +- [Insert more data](/docs/guides/database/import-data) into your database +- Upload and serve static files using [Storage](/docs/guides/storage) diff --git a/apps/docs/content/guides/getting-started/quickstarts/flask.mdx b/apps/docs/content/guides/getting-started/quickstarts/flask.mdx new file mode 100644 index 0000000000000..4944233d846e1 --- /dev/null +++ b/apps/docs/content/guides/getting-started/quickstarts/flask.mdx @@ -0,0 +1,154 @@ +--- +title: 'Use Supabase with Python' +subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a Python app.' +breadcrumb: 'Framework Quickstarts' +hideToc: true +--- + + + + + + <$Partial path="quickstart_db_setup.mdx" /> + + + + + + + + Create a new directory for your Python app and set up a virtual environment. + + + + + + ```bash name=Terminal + mkdir my-app && cd my-app + python3 -m venv venv + source venv/bin/activate + ``` + + + + + + + + + The fastest way to get started is to use Flask for the web framework and the `supabase-py` client library which provides a convenient interface for working with Supabase from a Python app. + + Install both packages using pip. + + + + + + ```bash name=Terminal + pip install flask supabase + ``` + + + + + + + + + Create a `.env` file in your project root and populate it with your Supabase connection variables: + + + + + + + + + + <$CodeTabs> + + ```text name=.env + SUPABASE_URL= + SUPABASE_PUBLISHABLE_KEY= + ``` + + + + <$Partial path="api_settings_steps.mdx" variables={{ "framework": "", "tab": "" }} /> + + + + + + + + + Install the `python-dotenv` package to load environment variables: + + ```bash + pip install python-dotenv + ``` + + Create an `app.py` file and add a route that fetches data from your `instruments` table using the Supabase client. + + + + + ```python name=app.py + import os + from flask import Flask + from supabase import create_client, Client + from dotenv import load_dotenv + + load_dotenv() + + app = Flask(__name__) + + supabase: Client = create_client( + os.environ.get("SUPABASE_URL"), + os.environ.get("SUPABASE_PUBLISHABLE_KEY") + ) + + @app.route('/') + def index(): + response = supabase.table('instruments').select("*").execute() + instruments = response.data + + html = '

Instruments

    ' + for instrument in instruments: + html += f'
  • {instrument["name"]}
  • ' + html += '
' + + return html + + if __name__ == '__main__': + app.run(debug=True) + ``` + +
+ +
+ + + + + Run the Flask development server, go to http://localhost:5000 in a browser and you should see the list of instruments. + + + + + + ```bash name=Terminal + python app.py + ``` + + + + +
+ +## Next steps + +- Set up [Auth](/docs/guides/auth) for your app +- [Insert more data](/docs/guides/database/import-data) into your database +- Upload and serve static files using [Storage](/docs/guides/storage) diff --git a/apps/docs/content/guides/getting-started/quickstarts/tanstack.mdx b/apps/docs/content/guides/getting-started/quickstarts/tanstack.mdx new file mode 100644 index 0000000000000..655434f82e2dd --- /dev/null +++ b/apps/docs/content/guides/getting-started/quickstarts/tanstack.mdx @@ -0,0 +1,164 @@ +--- +title: 'Use Supabase with TanStack Start' +subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a TanStack Start app.' +breadcrumb: 'Framework Quickstarts' +hideToc: true +--- + + + + + + <$Partial path="quickstart_db_setup.mdx" /> + + + + + + + + - Create a TanStack Start app using the official CLI. + + <$Partial path="uiLibCta.mdx" /> + + + + + + ```bash name=Terminal + npm create @tanstack/start@latest my-app -- --package-manager npm --toolchain biome + ``` + + + + + + + + + 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 TanStack Start app. + + Navigate to the TanStack Start app and install `supabase-js`. + + + + + + ```bash name=Terminal + cd my-app && npm install @supabase/supabase-js + ``` + + + + + + + + + Create a `.env` file in the root of your project and populate with your Supabase connection variables: + + + + + + + + + + <$CodeTabs> + + ```text name=.env + VITE_SUPABASE_URL= + VITE_SUPABASE_PUBLISHABLE_KEY= + ``` + + + + <$Partial path="api_settings_steps.mdx" variables={{ "framework": "", "tab": "" }} /> + + + + + + + + + Create a new file at `src/utils/supabase.ts` to initialize the Supabase client. + + + + + + ```ts name=src/utils/supabase.ts + import { createClient } from "@supabase/supabase-js"; + + export const supabase = createClient( + import.meta.env.VITE_SUPABASE_URL, + import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY + ); + ``` + + + + + + + + + Replace the contents of `src/routes/index.tsx` with the following code to add a loader function that fetches the instruments data and displays it on the page. + + + + + ```tsx name=src/routes/index.tsx + import { createFileRoute } from '@tanstack/react-router' + import { supabase } from '../utils/supabase' + + export const Route = createFileRoute('/')({ + loader: async () => { + const { data: instruments } = await supabase.from('instruments').select() + return { instruments } + }, + component: Home, + }) + + function Home() { + const { instruments } = Route.useLoaderData() + + return ( +
    + {instruments?.map((instrument) => ( +
  • {instrument.name}
  • + ))} +
+ ) + } + ``` + +
+ +
+ + + + + Run the development server, go to http://localhost:3000 in a browser and you should see the list of instruments. + + + + + + ```bash name=Terminal + npm run dev + ``` + + + + +
+ +## Next steps + +- Set up [Auth](/docs/guides/auth) for your app +- [Insert more data](/docs/guides/database/import-data) into your database +- Upload and serve static files using [Storage](/docs/guides/storage) diff --git a/apps/docs/features/command/Quickstarts.tsx b/apps/docs/features/command/Quickstarts.tsx index 3b0f75cc264b3..66570336a34a5 100644 --- a/apps/docs/features/command/Quickstarts.tsx +++ b/apps/docs/features/command/Quickstarts.tsx @@ -35,6 +35,10 @@ const quickstarts = [ label: 'SolidJS', url: '/guides/getting-started/quickstarts/solidjs', }, + { + label: 'TanStack Start', + url: '/guides/getting-started/quickstarts/tanstack', + }, { label: 'Vue', url: '/guides/getting-started/quickstarts/vue', diff --git a/apps/docs/next-env.d.ts b/apps/docs/next-env.d.ts index 830fb594ca297..1b3be0840f3f6 100644 --- a/apps/docs/next-env.d.ts +++ b/apps/docs/next-env.d.ts @@ -1,6 +1,5 @@ /// /// -/// // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.