https://github.com/supabase/storage
S3 compatible object storage service that stores metadata in Postgres
https://github.com/supabase/storage
gotrue iceberg object-storage postgres s3 tus vector
Last synced: 1 day ago
JSON representation
S3 compatible object storage service that stores metadata in Postgres
- Host: GitHub
- URL: https://github.com/supabase/storage
- Owner: supabase
- License: apache-2.0
- Created: 2021-03-15T06:32:53.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2026-04-06T09:50:03.000Z (9 days ago)
- Last Synced: 2026-04-06T09:55:25.242Z (9 days ago)
- Topics: gotrue, iceberg, object-storage, postgres, s3, tus, vector
- Language: TypeScript
- Homepage: https://supabase.com/docs/guides/storage
- Size: 9.75 MB
- Stars: 1,247
- Watchers: 35
- Forks: 280
- Open Issues: 44
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
- jimsghstars - supabase/storage - S3 compatible object storage service that stores metadata in Postgres (TypeScript)
README
# Supabase Storage Engine [](https://coveralls.io/github/supabase/storage?branch=master) [](https://deepwiki.com/supabase/storage)
A scalable, lightweight object storage service.
> Read [this post](https://supabase.io/blog/2021/03/30/supabase-storage) on why we decided to build a new object storage service.
- Multi-protocol support (HTTP, TUS, S3, Iceberg)
- Uses Postgres as its datastore for storing metadata
- Authorization rules are written as Postgres Row Level Security policies
- Integrates with S3 Compatible Storages
- Extremely lightweight and performant
**Supported Protocols**
- [x] HTTP/REST
- [x] TUS Resumable Upload
- [x] S3 Compatible API
- [x] Iceberg REST Catalog

## Documentation
- [OpenAPI Spec](https://supabase.github.io/storage)
- [Storage Guides](https://supabase.io/docs/guides/storage)
- [Client library](https://supabase.io/docs/reference/javascript/storage-createbucket)
## Development
- Copy `.env.sample` to `.env` file.
- Copy `.env.test.sample` to `.env.test`.
```bash
cp .env.sample .env && cp .env.test.sample .env.test
```
**Your root directory should now have both `.env` and `.env.test` files.**
- Then run the following:
```bash
# this sets up a postgres database and postgrest locally via docker
npm run infra:restart
# Start the storage server
npm run dev
```
The server should now be running at http://localhost:5000/
The following request should insert and return the list of buckets.
```bash
# insert a bucket named avatars
curl --location --request POST 'http://localhost:5000/bucket' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjEzNTMxOTg1LCJleHAiOjE5MjkxMDc5ODV9.th84OKK0Iz8QchDyXZRrojmKSEZ-OuitQm_5DvLiSIc' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "avatars"
}'
# get buckets
curl --location --request GET 'http://localhost:5000/bucket' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaWF0IjoxNjEzNTMxOTg1LCJleHAiOjE5MjkxMDc5ODV9.th84OKK0Iz8QchDyXZRrojmKSEZ-OuitQm_5DvLiSIc'
```
### Testing
To perform your tests you can run the following command: `npm test`
### Code Quality
- Check: `npm run lint`
- Automatic fix if possible: `npm run lint:fix`