supabase
Frameworksupabase/supabase
Open-source Firebase alternative with Postgres database, auth, APIs, and realtime features.
Overview
Supabase is a hosted Postgres development platform that includes authentication, auto-generated REST and GraphQL APIs, realtime subscriptions, file storage, and AI/vector tools. Built on enterprise-grade open source tools, it offers a Firebase-like developer experience.
README Preview
\n\n\n\n\n# Supabase\n\n[Supabase](https://supabase.com) is the Postgres development platform. We're building the features of Firebase using enterprise-grade open source tools.\n\n- [x] Hosted Postgres Database. [Docs](https://supabase.com/docs/guides/database)\n- [x] Authentication and Authorization. [Docs](https://supabase.com/docs/guides/auth)\n- [x] Auto-generated APIs.\n - [x] REST. [Docs](https://supabase.com/docs/guides/api)\n - [x] GraphQL. [Docs](https://supabase.com/docs/guides/graphql)\n - [x] Realtime subscriptions. [Docs](https://supabase.com/docs/guides/realtime)\n- [x] Functions.\n - [x] Database Functions. [Docs](https://supabase.com/docs/guides/database/functions)\n - [x] Edge Functions [Docs](https://supabase.com/docs/guides/functions)\n- [x] File Storage. [Docs](https://supabase.com/docs/guides/storage)\n- [x] AI + Vector/Embeddings Toolkit. [Docs](https://supabase.com/docs/guides/ai)\n- [x] Dashboard\n\n\n\nWatch "releases" of this repo to get notified of major updates.\n\n\n\n## Documentation\n\nFor full documentation, visit [supabase.com/docs](https://supabase.com/docs)\n\nTo see how to Contribute, visit [Getting Started](./DEVELOPERS.md)\n\n## Community & Support\n\n- [Community Forum](https://github.com/supabase/supabase/discussions). Best for: help with building, discussion about database best practices.\n- [GitHub Issues](https://github.com/supabase/supabase/issues). Best for: bugs and errors you encounter using Supabase.\n- [Email Support](https://supabase.com/docs/support#business-support). Best for: problems with your database or infrastructure.\n- [Discord](https://discord.supabase.com). Best for: sharing your applications and hanging out with the community.\n\n## How it works\n\nSupabase is a combination of open source tools. We’re building the features of Firebase using enterprise-grade, open source products. If the tools and communities exist, with an MIT, Apache 2, or equivalent open license, we will use and support that tool.
FAQ (5)
TroubleshootingWhy does Supabase storage upload contain multipart boundaries instead of the actual file content?
This happens when you pass a capitalized Content-Type header in file_options. The storage backend fails to parse the multipart body and stores the entire envelope (including --boundary strings) as the file content, while still returning 200 OK.
**Fix:** Use the lowercase content-type header instead:
# ❌ Broken - stores multipart boundaries
supabase.storage.from_("bucket").upload(
filename, file_content,
file_options={"Content-Type": file.content_type}
)
# ✅ Works - stores actual file bytes
supabase.storage.from_("bucket").upload(
filename, file_content,
file_options={"content-type": file.content_type}
)
This affects both the Python client (confirmed on v2.17.0) and direct REST API calls. Although HTTP headers should be case-insensitive per RFC, the storage backend's multipart parser is case-sensitive. If you already uploaded corrupted files, re-upload them with the lowercase header and verify downloads return valid content.
TroubleshootingWhy does window.location.href become undefined after calling supabase.auth.oauth.approveAuthorization()?
The response from supabase.auth.oauth.approveAuthorization() / denyAuthorization() returns data.redirect_url, not data.redirect_to. Older Supabase docs examples used the wrong property name, causing window.location.href = undefined and an infinite redirect loop to /oauth/undefined. Fix: use const { data, error } = await supabase.auth.oauth.approveAuthorization(authorizationId) then window.location.href = data.redirect_url. Note: in browsers the SDK auto-redirects by default, so the manual redirect is only needed when passing skipBrowserRedirect: true. The documentation has since been corrected.
TroubleshootingWhy do I still get 'Email Not Confirmed' error after disabling email confirmation in Supabase?
The 'Enable email confirmations' toggle (Authentication > Providers > Email) only applies to NEW signups. Users who registered while confirmation was enabled remain unconfirmed and still get the 'Email Not Confirmed' error. To fix existing users, either: 1) Manually confirm them via the SQL Editor: UPDATE auth.users SET email_confirmed_at = NOW() WHERE email_confirmed_at IS NULL; (or target a specific user with WHERE email = 'user@example.com'), or 2) Delete the test user from Authentication > Users and sign up again. New signups after disabling the setting will be confirmed automatically and can sign in immediately.
TroubleshootingHow to recover an accidentally deleted Supabase project?
Contact Supabase support immediately at support@supabase.com with your project ref, organization, and deletion date so they can review your specific case. Note that per Supabase's documentation, deleted projects are normally permanently removed and cannot be self-restored, so recovery is not guaranteed. For future prevention: enable daily backups (available on the Pro plan) under Project Settings > Database > Backups, download backups regularly, or create your own dumps with pg_dump via the connection string found in Project Settings > Database.
TroubleshootingWhy is my credit or debit card being declined when paying a Supabase invoice?
If your card is declined when paying a Supabase invoice, first confirm with your bank or card issuer that they are not blocking the transaction. If the bank confirms the card is fine but payment still fails across multiple cards, this is a billing-side issue that cannot be fixed on your end. Contact Supabase billing support directly at support@supabase.com with your organization/project details so the team can investigate the payment failure and process your invoice.