---
title: 'Use Supabase with React'
subtitle: 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a React app.'
breadcrumb: 'Framework Quickstarts'
---
<$Partial path="quickstart_db_setup.mdx" />
## 3. Create a React app
Create a React app using a [Vite](https://vitejs.dev/guide/) template.
```bash
npm create vite@latest my-app -- --template react
```
## 4. Set up AI tooling (optional)
<$Partial path="quickstart_ai_tooling.mdx" />
## 5. 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 React app.
Navigate to the React app and install `supabase-js`.
```bash
cd my-app && npm install @supabase/supabase-js
```
## 6. Declare Supabase environment variables
Create a `.env.local` file and populate it with your Supabase URL and publishable key that you can get from the helper below, or [from the project **Connect** panel](/dashboard/project/_?showConnect=true&framework=react&connectTab=frameworks)
```text name=.env.local
VITE_SUPABASE_URL=
VITE_SUPABASE_PUBLISHABLE_KEY=
```
<$Partial path="api_settings.mdx" variables={{ "framework": "react", "tab": "frameworks" }} />
## 7. Create the Supabase client
Create a `src/lib` directory in your React app, create a file called `supabaseClient.js`, and add the following code to initialize the Supabase client:
```js name=src/lib/supabaseClient.js
import { createClient } from '@supabase/supabase-js'
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
const supabasePublishableKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
export const supabase = createClient(supabaseUrl, supabasePublishableKey)
```
## 8. Query data from the app
Replace the contents of `App.jsx` with a `getInstruments` function that fetches the data and displays the query result on the page.
```js name=src/App.jsx
import { useEffect, useState } from 'react'
import { supabase } from './lib/supabaseClient'
function App() {
const [instruments, setInstruments] = useState([])
useEffect(() => {
getInstruments()
}, [])
async function getInstruments() {
const { data, error } = await supabase.from('instruments').select()
if (error) {
console.error(error)
return
}
setInstruments(data)
}
return (
{instruments.map((instrument) => (
{instrument.name}
))}
)
}
export default App
```
## 9. Start the app
Run the development server, go to http://localhost:5173 in a browser, and you should see the list of instruments.
```bash
npm run dev
```
<$Partial path="quickstart_going_to_production.mdx" />
## 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)
- Explore [drop-in UI components](/ui) for your Supabase app