S3 compatible object storage service that stores metadata in Postgres
1,324
stars
1,226
commits
TypeScript
primary language
Sep 10, 2026
updated
A scalable, lightweight object storage service.
Read this post on why we decided to build a new object storage service.
Supported Protocols

.env.sample to .env file..env.test.sample to .env.test.cp .env.sample .env && cp .env.test.sample .env.test
Your root directory should now have both .env and .env.test files.
# 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.
# 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'
To perform your tests you can run the following command: npm test
npm run lintnpm run lint:fix(top 30 of 52)
TypeScript
95.9%
PLpgSQL
3.8%
S3 compatible object storage service that stores metadata in Postgres
1,324
stars
1,226
commits
TypeScript
primary language
Sep 10, 2026
updated
A scalable, lightweight object storage service.
Read this post on why we decided to build a new object storage service.
Supported Protocols

.env.sample to .env file..env.test.sample to .env.test.cp .env.sample .env && cp .env.test.sample .env.test
Your root directory should now have both .env and .env.test files.
# 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.
# 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'
To perform your tests you can run the following command: npm test
npm run lintnpm run lint:fix(top 30 of 52)
TypeScript
95.9%
PLpgSQL
3.8%