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.
Indunil Asanka · Co-founder
5 min read · Published
| Part | What it does | What to watch |
|---|---|---|
| Database | A dedicated PostgreSQL database | Enable row level security on every table |
| Auth | Accounts, passwords, email links, Google and other providers | Accounts belong to the project, not the site |
| Storage | Files in buckets with access policies | Keep confidential files in private buckets |
| API | REST and GraphQL generated from tables | Only the public key belongs in the browser |
| Edge functions | Small server code close to users | Where secret keys may live |
| Realtime | Pushes database changes to connected clients | Respects row level security on subscribed tables |
| Dashboard | Table editor, SQL editor, logs, settings | Who 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 OneCraftRelated questions
- What is row level security?What is row level security? Database policies that decide which rows each signed in person can read or change, with common policy shapes and how to test them.
- Headless CMS vs a database of the site's ownHeadless CMS vs database: a content API for editors compared with tables a site reads and writes, such as orders, bookings and members. Which one you need.
- What is a data export request?What is a data export request? A person asking for a copy of the data a business holds on them. Timings under GDPR, UK GDPR and the Australian Privacy Act.
Written and checked by the OneCraft team. Last checked .