The future of file storage
See the codeA better cloud
git clone https://github.com/nimbusdotstorage/Nimbus.git
cd Nimbus
bun i
cp .env.example .env
Copy .env to child directories
bun run env:sync
Follow the instructions on the first step of this guide.
Navigate to Google Cloud console.
Create a new project and navigate to its dashboard.
Navigate to OAuth Consent Screen and enter the details.
Navigate to Clients.
http://localhost:3000http://localhost:1284/api/auth/callback/googleclient_id and client_secret.Enable Google Drive API
Now navigate to Audience and add Test users.
Official Guide: Microsoft Register App
Go to the Microsoft Azure Portal.
Navigate to Microsoft Entra ID → Click Add → Click App registrations.
http://localhost:1284/api/auth/callback/microsoft (Also add http://localhost:3000 under front-end origins if needed.)After registration, navigate to the app's Overview to copy your Application (client) ID.
In the left menu, Click Manage. Use this to navigate.
Navigate to Certificates & secrets → Click New client secret → Add a description and expiry → Click Add → Copy the generated secret value.
Navigate to API permissions and make sure these delegated Microsoft Graph permissions are added and granted:
email – View users' email addressoffline_access – Maintain access to data you have given it access toopenid – Sign users inprofile – View users' basic profileUser.Read – Sign in and read user profileFiles.ReadWrite.All – Have full access to user files (OneDrive access)Click Grant admin consent to apply the permissions.
Official Guide: Box Create OAuth 2.0 App
Navigate to Box Developer Console console.
Click Create App. Select Custom App.
Fill in the form.
Copy the Client ID and Client Secret under OAuth 2.0 Credentials.
Add OAuth 2.0 Redirect URIs as http://localhost:1284/api/auth/oauth2/callback/box.
Note: The redirect URI is different because it uses the generic oauth2 plugin from better-auth.
Add Application Scopes:
Read all files and folders stored in BoxWrite all files and folders stored in BoxManage UsersEnable IntegrationsAdd CORS Domains as http://localhost:3000.
Click Save Changes.
Official Guide: Dropbox OAuth Guide
Navigate to Dropbox App Console.
Click Create App.
Copy the App key and App secret.
Add OAuth 2 Redirect URIs as http://localhost:1284/api/auth/callback/dropbox.
Navigate to Permission and add Scopes.
account_info.readfiles.metadata.readfiles.content.readfiles.content.writesharing.readClick Submit in the pop up bar.
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
MICROSOFT_CLIENT_ID=
MICROSOFT_CLIENT_SECRET=
BOX_CLIENT_ID=
BOX_CLIENT_SECRET=
# To generate a secret, just run `openssl rand -base64 32`
BETTER_AUTH_SECRET=
Go to Resend.com and sign up or log in to your account.
From the dashboard, click on "API Keys" in the sidebar.
Click the "Create API Key" button.
Enter a name for your key (e.g., nimbus-dev) and confirm.
Copy the generated API key.
Add it to your .env file:
RESEND_API_KEY=your-api-key-here
We use Docker to run a PostgreSQL database and Valkey for local development. Follow these steps to set it up:
Start the database and valkey:
bun db:up
bun cache:up
This will start a Postgres container with default credentials:
localhost5432nimbuspostgrespostgresAnd a Valkey container with credentials:
localhost6379valkeyvalkeyVerify the database and valkey is running if running a detached container:
docker ps
You should see the nimbus-db and nimbus-cache containers in the list with a status of "Up".
Run Database Migrations
After setting up the database, run the migrations:
bun db:push
Connect to the database (optional):
# Using psql client inside the container
docker compose exec postgres psql -U postgres -d nimbus
Connect to the valkey (optional):
# Using valkey-cli inside the container
docker compose exec valkey valkey-cli --user valkey --pass valkey
In a new terminal, start the development server:
NOTE: this starts both the web and server development servers, to run just one, use
bun dev:weborbun dev:server. Both will need the db running to work.
bun dev
The application should now be running at http://localhost:3000
Once the development server is running, you can access the authentication pages:
Make sure you have configured the Google OAuth credentials in your .env file as described in step 4 for authentication to work properly. Additionally, configure your Resend API key for the forgot password functionality to work.
If you want to contribute, please refer to the contributing guide
Follow the DEPLOYMENT.md file for instructions on how to deploy with Coolify.
Deployment is the same locally or on a server, but OAuth providers (e.g., Google) require a domain for callback URLs.
https://example.com:1284/api/auth/callback/google)..env file with the domain (e.g., TRUSTED_ORIGINS=https://example.com:3000).503 followers · starred Jul 2025
104 followers · starred May 2025
541 followers · starred May 2025
425 followers · starred May 2025
The future of file storage
See the codeA better cloud
git clone https://github.com/nimbusdotstorage/Nimbus.git
cd Nimbus
bun i
cp .env.example .env
Copy .env to child directories
bun run env:sync
Follow the instructions on the first step of this guide.
Navigate to Google Cloud console.
Create a new project and navigate to its dashboard.
Navigate to OAuth Consent Screen and enter the details.
Navigate to Clients.
http://localhost:3000http://localhost:1284/api/auth/callback/googleclient_id and client_secret.Enable Google Drive API
Now navigate to Audience and add Test users.
Official Guide: Microsoft Register App
Go to the Microsoft Azure Portal.
Navigate to Microsoft Entra ID → Click Add → Click App registrations.
http://localhost:1284/api/auth/callback/microsoft (Also add http://localhost:3000 under front-end origins if needed.)After registration, navigate to the app's Overview to copy your Application (client) ID.
In the left menu, Click Manage. Use this to navigate.
Navigate to Certificates & secrets → Click New client secret → Add a description and expiry → Click Add → Copy the generated secret value.
Navigate to API permissions and make sure these delegated Microsoft Graph permissions are added and granted:
email – View users' email addressoffline_access – Maintain access to data you have given it access toopenid – Sign users inprofile – View users' basic profileUser.Read – Sign in and read user profileFiles.ReadWrite.All – Have full access to user files (OneDrive access)Click Grant admin consent to apply the permissions.
Official Guide: Box Create OAuth 2.0 App
Navigate to Box Developer Console console.
Click Create App. Select Custom App.
Fill in the form.
Copy the Client ID and Client Secret under OAuth 2.0 Credentials.
Add OAuth 2.0 Redirect URIs as http://localhost:1284/api/auth/oauth2/callback/box.
Note: The redirect URI is different because it uses the generic oauth2 plugin from better-auth.
Add Application Scopes:
Read all files and folders stored in BoxWrite all files and folders stored in BoxManage UsersEnable IntegrationsAdd CORS Domains as http://localhost:3000.
Click Save Changes.
Official Guide: Dropbox OAuth Guide
Navigate to Dropbox App Console.
Click Create App.
Copy the App key and App secret.
Add OAuth 2 Redirect URIs as http://localhost:1284/api/auth/callback/dropbox.
Navigate to Permission and add Scopes.
account_info.readfiles.metadata.readfiles.content.readfiles.content.writesharing.readClick Submit in the pop up bar.
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
MICROSOFT_CLIENT_ID=
MICROSOFT_CLIENT_SECRET=
BOX_CLIENT_ID=
BOX_CLIENT_SECRET=
# To generate a secret, just run `openssl rand -base64 32`
BETTER_AUTH_SECRET=
Go to Resend.com and sign up or log in to your account.
From the dashboard, click on "API Keys" in the sidebar.
Click the "Create API Key" button.
Enter a name for your key (e.g., nimbus-dev) and confirm.
Copy the generated API key.
Add it to your .env file:
RESEND_API_KEY=your-api-key-here
We use Docker to run a PostgreSQL database and Valkey for local development. Follow these steps to set it up:
Start the database and valkey:
bun db:up
bun cache:up
This will start a Postgres container with default credentials:
localhost5432nimbuspostgrespostgresAnd a Valkey container with credentials:
localhost6379valkeyvalkeyVerify the database and valkey is running if running a detached container:
docker ps
You should see the nimbus-db and nimbus-cache containers in the list with a status of "Up".
Run Database Migrations
After setting up the database, run the migrations:
bun db:push
Connect to the database (optional):
# Using psql client inside the container
docker compose exec postgres psql -U postgres -d nimbus
Connect to the valkey (optional):
# Using valkey-cli inside the container
docker compose exec valkey valkey-cli --user valkey --pass valkey
In a new terminal, start the development server:
NOTE: this starts both the web and server development servers, to run just one, use
bun dev:weborbun dev:server. Both will need the db running to work.
bun dev
The application should now be running at http://localhost:3000
Once the development server is running, you can access the authentication pages:
Make sure you have configured the Google OAuth credentials in your .env file as described in step 4 for authentication to work properly. Additionally, configure your Resend API key for the forgot password functionality to work.
If you want to contribute, please refer to the contributing guide
Follow the DEPLOYMENT.md file for instructions on how to deploy with Coolify.
Deployment is the same locally or on a server, but OAuth providers (e.g., Google) require a domain for callback URLs.
https://example.com:1284/api/auth/callback/google)..env file with the domain (e.g., TRUSTED_ORIGINS=https://example.com:3000).503 followers · starred Jul 2025
104 followers · starred May 2025
541 followers · starred May 2025
425 followers · starred May 2025