Websites · Glossary

What is a Supabase project?

A Supabase project is one hosted back end on the Supabase platform: a dedicated PostgreSQL database plus the services around it, including user sign in, file storage, an automatic API, edge functions and realtime updates. Each project has its own web address, its own keys and its own dashboard, and belongs to an organisation on a Supabase account.

A Supabase project is a whole back end in one box, not just a database. Knowing what is inside it, and which of its keys are safe to share, is most of what a site owner needs before connecting one.

· Co-founder

5 min read · Published

What one Supabase project includes
PartWhat it doesWhat to watch
DatabaseA dedicated PostgreSQL databaseEnable row level security on every table
AuthAccounts, passwords, email links, Google and other providersAccounts belong to the project, not the site
StorageFiles in buckets with access policiesKeep confidential files in private buckets
APIREST and GraphQL generated from tablesOnly the public key belongs in the browser
Edge functionsSmall server code close to usersWhere secret keys may live
RealtimePushes database changes to connected clientsRespects row level security on subscribed tables
DashboardTable editor, SQL editor, logs, settingsWho in the organisation can open it

What a project is

Supabase is a hosted platform built around PostgreSQL. When you create a project, Supabase provisions a Postgres database for it and runs a set of services next to it, all reachable at an address like your-project-ref.supabase.co. The database is a full Postgres instance: tables, views, functions, triggers, extensions and row level security. Around it, Auth handles accounts, passwords, email links and sign in with providers such as Google. Storage holds files in buckets with their own access rules. A REST and GraphQL API is generated from the database's tables, so a browser or app can read and write without a custom server. Edge functions run small pieces of server code, and Realtime can push changes to connected clients. Projects live inside an organisation, which is where billing and team members are set, and each organisation can hold several projects.

How the pieces fit

A browser app talks to a project with two pieces of information: the project's address and a public key, called the anon or publishable key. That key is meant to be in the browser; it identifies the project, not the person. When someone signs in, Auth gives them a token, and every request then carries both. The database's row level security policies read that token to decide which rows the person may see or change. That is the core design: the public key opens the door to the API, and the policies decide what is inside each room. A second, secret key, the service role key, skips every policy and must stay on servers only. Storage works the same way, with policies on the objects table deciding who can upload, read or delete each file. Because it is all Postgres underneath, the data can be dumped and restored like any other Postgres database.

When a site needs its own project

Any site that stores what visitors do, such as bookings, orders, members, messages or saved items, needs a database somewhere, and a Supabase project is one common answer because the browser can use it directly with sign in and storage included. Owning the project yourself matters when you want the data under your own account and billing, want to see the tables in Supabase's dashboard, or plan to connect other tools to the same data later. One project can serve several apps, such as a website and a phone app reading the same bookings, which is often the point. Supabase offers a free plan with limits on the number of active projects and on resources, and pauses free projects after a period without activity, so a site that must stay up for real customers usually belongs on a paid organisation once it matters to the business.

Common mistakes

Putting the service role key in front end code, which hands every visitor full access to the database. Creating tables without row level security, so the public key can read them. Assuming the anon key is a password and rotating it in a panic, when the real fix is a missing policy. Letting a free project pause before launch day. Keeping one project for development and live customers, so a test migration changes real data. Not noting which organisation owns the project, then losing access when the person who created it leaves. Storing confidential files in a public bucket. And forgetting that Auth users belong to the project: two sites sharing one project share one list of accounts, which may or may not be what you want, so decide that before the first person signs up rather than after.

Where it shows up in OneCraft

When a site's features need data, the AI enables a database for it. By default that is a schema of its own in OneCraft's pool project, reached by a login that can reach no other site; every plan includes one such hosted database. The owner can instead connect their own Supabase account, and the site's tables are then created in a project on that account. Either way every table has row level security, checked by the AI as an anonymous visitor and as a signed in person, and the migrations and a schema.sql file are written into the site's code. Two storage buckets are set up for the site: site-files, public, up to 10 MB a file, and site-private, read only through the site's own rule, up to 25 MB a file. Visitor sign in uses Supabase Auth.

Questions people ask

Is the Supabase anon key a secret?

No. The anon or publishable key is designed to sit in browser and app code, and anyone can find it there. It only identifies the project. What protects the data is row level security on each table and storage policies on each bucket. The service role key is the secret one and must never leave a server.

Who owns the data in a Supabase project?

The organisation that holds the project controls it, and its owners can export, change or delete the data and manage billing. If a developer or tool created the project under their own account, ask for it to be transferred to your organisation, or for you to be made an owner, before the site goes live.

What happens when a free Supabase project pauses?

Supabase pauses free projects that have been inactive for a while. A paused project stops answering requests, so any site using it can no longer load data, sign people in or save anything until someone restores it from the dashboard. Data is kept while paused. Paid plans do not pause for inactivity.

Can two websites share one Supabase project?

Yes, and a website and a phone app often do so they see the same data. They also share one list of accounts and one set of tables, so policies have to tell the sites apart if their data should be separate. Separate schemas, or separate projects, keep unrelated sites from reading each other's rows.

Can I export my database from a Supabase project?

Yes. Because it is standard PostgreSQL, the database can be dumped with the usual Postgres tools or the Supabase command line and restored into another Postgres server. Files in storage are exported separately. Auth users live in their own schema in the same database and come across with a full dump.

Make one with websites

The button opens the generator with this use case already described. Change the wording to match your own.

Create a website with OneCraft

Related questions

Sources

Written and checked by the OneCraft team. Last checked .