* feat: add support for dropping and auto-extracting zip files in Edge Functions editor * fix: add type assertions for readonly array includes checks in zip extraction Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: add support for PDF and image files in zip extraction - Moved wasm from ALLOWED_EXTENSIONS to ALLOWED_BINARY_EXTENSIONS - Added PDF support for document files - Added common image formats: jpg, jpeg, png, gif, svg, bmp, ico, webp - Binary files are extracted and preserved but show "Cannot Edit" message in editor Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: remove file extension validation from zip extraction Makes zip extraction behavior consistent with regular file drops. Now all file types are accepted in both cases, matching the permissive behavior users expect. Removed: - ALLOWED_EXTENSIONS and ALLOWED_BINARY_EXTENSIONS arrays - isAllowedExtension() and isAllowedBinaryFile() validation functions - getFileExtension() helper (no longer needed) - Extension-based rejection logic from extractZipFile() Kept: - File size validation (individual and total limits) - Hidden file filtering (.DS_Store, __MACOSX, etc.) - Binary file detection for proper content reading Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: correct file replacement detection in addDroppedFiles Bug: The condition `updatedFiles !== files` always evaluated to true because updatedFiles is created via files.map() which always returns a new array reference, even when no files were actually modified. This caused onFilesChange to be called unnecessarily when dropping zip files that only contained files with names not matching any existing files. Fix: Track whether any existing files were actually replaced using a hasReplacedFiles flag that is set to true only when we modify files in the updatedFiles array during zip extraction. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: add graceful error handling for zip file extraction Replaced dangerous non-null assertion operator (!) with proper error handling for entry.getData() calls. Changes: - Check entry.directory and entry.getData before extraction - Wrap getData calls in try-catch to handle extraction failures - Track failed files and include them in error reporting - Skip files that can't be extracted instead of crashing This prevents runtime errors when: - Zip entries are directories (defensive check) - Zip entries don't have getData method (corrupted/unusual entries) - File extraction fails for any reason (encoding issues, etc.) - Binary/text file reading encounters errors Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * refactor: improve file processing logic with enum and switch statement Replaced if-else chain with cleaner enum-based approach per PR feedback. Changes: - Added FileAction enum (CREATE_NEW, REPLACE_EXISTING, REPLACE_NEW) - Created getFileAction() helper function that returns action + index - Refactored file processing loop to use switch statement - Eliminated duplicate findIndex() calls (was calling it twice) - Reduced variable count from 2 (existingFileIndex, newFileIndex) to 1 (actionResult) Benefits: - More readable and maintainable code - Single source of truth for file lookup logic - Better type safety with discriminated union - Easier to extend with new file actions in the future Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * prettier * fix: add guard for undefined entry.uncompressedSize in zip extraction Prevents NaN from bypassing size validation when entry.uncompressedSize is undefined. Issue: - entry.uncompressedSize can be undefined in malformed/corrupted zips - Without guard: totalExtractedSize + undefined = NaN - NaN comparisons always return false, bypassing MAX_TOTAL_EXTRACTED_SIZE - Security risk: allows extraction of files with unknown sizes Fix: - Check if uncompressedSize is undefined or NaN before any arithmetic - Skip files with unknown sizes and add to oversizedFiles array - Provide descriptive error message: "unknown size - metadata unavailable" - Ensures size validation always runs safely Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Refactor to streamline handling of regular and zip files in FileExplorerAndEditor * Address rabbit feedback * Nit --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
Supabase
Supabase is the Postgres development platform. We're building the features of Firebase using enterprise-grade open source tools.
- Hosted Postgres Database. Docs
- Authentication and Authorization. Docs
- Auto-generated APIs.
- Functions.
- File Storage. Docs
- AI + Vector/Embeddings Toolkit. Docs
- Dashboard
Watch "releases" of this repo to get notified of major updates.
Documentation
For full documentation, visit supabase.com/docs
To see how to Contribute, visit Getting Started
Community & Support
- Community Forum. Best for: help with building, discussion about database best practices.
- GitHub Issues. Best for: bugs and errors you encounter using Supabase.
- Email Support. Best for: problems with your database or infrastructure.
- Discord. Best for: sharing your applications and hanging out with the community.
How it works
Supabase 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. If the tool doesn't exist, we build and open source it ourselves. Supabase is not a 1-to-1 mapping of Firebase. Our aim is to give developers a Firebase-like developer experience using open source tools.
Architecture
Supabase is a hosted platform. You can sign up and start using Supabase without installing anything. You can also self-host and develop locally.
- Postgres is an object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
- Realtime is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using websockets. Realtime polls Postgres' built-in replication functionality for database changes, converts changes to JSON, then broadcasts the JSON over websockets to authorized clients.
- PostgREST is a web server that turns your PostgreSQL database directly into a RESTful API.
- GoTrue is a JWT-based authentication API that simplifies user sign-ups, logins, and session management in your applications.
- Storage a RESTful API for managing files in S3, with Postgres handling permissions.
- pg_graphql a PostgreSQL extension that exposes a GraphQL API.
- postgres-meta is a RESTful API for managing your Postgres, allowing you to fetch tables, add roles, and run queries, etc.
- Kong is a cloud-native API gateway.
Client libraries
Our approach for client libraries is modular. Each sub-library is a standalone implementation for a single external system. This is one of the ways we support existing tools.
| Language | Client | Feature-Clients (bundled in Supabase client) | ||||
|---|---|---|---|---|---|---|
| Supabase | PostgREST | GoTrue | Realtime | Storage | Functions | |
| ⚡️ Official ⚡️ | ||||||
| JavaScript (TypeScript) | supabase-js | postgrest-js | auth-js | realtime-js | storage-js | functions-js |
| Flutter | supabase-flutter | postgrest-dart | gotrue-dart | realtime-dart | storage-dart | functions-dart |
| Swift | supabase-swift | postgrest-swift | auth-swift | realtime-swift | storage-swift | functions-swift |
| Python | supabase-py | postgrest-py | gotrue-py | realtime-py | storage-py | functions-py |
| 💚 Community 💚 | ||||||
| C# | supabase-csharp | postgrest-csharp | gotrue-csharp | realtime-csharp | storage-csharp | functions-csharp |
| Go | - | postgrest-go | gotrue-go | - | storage-go | functions-go |
| Java | - | - | gotrue-java | - | storage-java | - |
| Kotlin | supabase-kt | postgrest-kt | auth-kt | realtime-kt | storage-kt | functions-kt |
| Ruby | supabase-rb | postgrest-rb | - | - | - | - |
| Rust | - | postgrest-rs | - | - | - | - |
| Godot Engine (GDScript) | supabase-gdscript | - | - | - | - | - |
Badges
[](https://supabase.com)
<a href="https://supabase.com">
<img
width="168"
height="30"
src="https://supabase.com/badge-made-with-supabase.svg"
alt="Made with Supabase"
/>
</a>
[](https://supabase.com)
<a href="https://supabase.com">
<img
width="168"
height="30"
src="https://supabase.com/badge-made-with-supabase-dark.svg"
alt="Made with Supabase"
/>
</a>
Translations
- Arabic | العربية
- Albanian / Shqip
- Bangla / বাংলা
- Bulgarian / Български
- Catalan / Català
- Croatian / Hrvatski
- Czech / čeština
- Danish / Dansk
- Dutch / Nederlands
- English
- Estonian / eesti keel
- Finnish / Suomalainen
- French / Français
- German / Deutsch
- Greek / Ελληνικά
- Gujarati / ગુજરાતી
- Hebrew / עברית
- Hindi / हिंदी
- Hungarian / Magyar
- Nepali / नेपाली
- Indonesian / Bahasa Indonesia
- Italiano / Italian
- Japanese / 日本語
- Korean / 한국어
- Lithuanian / lietuvių
- Latvian / latviski
- Malay / Bahasa Malaysia
- Norwegian (Bokmål) / Norsk (Bokmål)
- Persian / فارسی
- Polish / Polski
- Portuguese / Português
- Portuguese (Brazilian) / Português Brasileiro
- Romanian / Română
- Russian / Pусский
- Serbian / Srpski
- Sinhala / සිංහල
- Slovak / slovenský
- Slovenian / Slovenščina
- Spanish / Español
- Simplified Chinese / 简体中文
- Swedish / Svenska
- Thai / ไทย
- Traditional Chinese / 繁體中文
- Turkish / Türkçe
- Ukrainian / Українська
- Vietnamese / Tiếng Việt
- List of translations



