An open source alternative UI for your Cloudflare R2 buckets
OrangeCloud transforms your Cloudflare R2 storage experience with an intuitive web interface featuring file preview, upload progress tracking, sharing capabilities, and much more.
- Multipart uploads
- Create and manage folders
- File preview
- Syntax highlighting
- Presigned URL generation with configurable expiration (1 second to 7 days)
- Domain-based sharing with custom domain support
- Bun (latest version)
- Cloudflare account with R2 enabled
- Node.js 22+
git clone https://github.com/flashblaze/orangecloud.git
cd orangecloud
bun install
# Copy the example file
cp apps/api/.dev.vars.example apps/api/.dev.vars
Fill in your values:
ENVIRONMENT=local
BETTER_AUTH_SECRET=your-super-secret-key-here
# Development URLs
ORIGIN_URLS=http://localhost:5173
BASE_URL=http://localhost:8787
# Optional: Cloudflare Turnstile (for CAPTCHA)
TURNSTILE_SECRET_KEY=your-turnstile-secret-key
TURNSTILE_SITE_KEY=your-turnstile-site-key
# Optional: OAuth Providers
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
cp apps/web/.dev.vars.example apps/web/.dev.vars
API_URL=http://localhost:8787
ENVIRONMENT=local
BASE_URL=http://localhost:5173
# Navigate to API directory
cd apps/api
# Run database migrations
bun run db:migrate
# From the root directory
bun run dev
This starts:
- Web app: http://localhost:5173
- API: http://localhost:8787
- Landing page: http://localhost:4321
- React Router 7
- Mantine
- Tailwind CSS
- React Hook Form
- TanStack Query
- Zod
- React PDF
- React Shiki
- Framer Motion
- Hono
- Better Auth
- Drizzle ORM
- Cloudflare D1
- Cloudflare R2
- AWS4Fetch
- Rate limiting
- Astro
- Tailwind CSS
- Fork the repository or set up your own
- Configure Cloudflare secrets in your repository settings:
# This should have edit Workers permissions
CLOUDFLARE_API_TOKEN=your-api-token-with-workers-permissions
# You can find this in the Cloudflare dashboard
CLOUDFLARE_ACCOUNT_ID=your-cloudflare-account-id
# This should have edit D1 permissions
CLOUDFLARE_D1_TOKEN=your-api-token-with-d1-permissions
- Push to main branch
Update the wrangler.jsonc
files in each app with your production values:
- Custom domains (replace
orangecloud.app
with your domain) - Database IDs (your Cloudflare D1 database)
- API tokens and secrets
-
Create an R2 bucket in your Cloudflare dashboard
-
Generate API tokens:
- Account ID: Found in Cloudflare dashboard
- API Token: Create with Workers and R2 permissions
- R2 Access Keys: Create in R2 settings
-
Configure in OrangeCloud:
- Navigate to Settings after logging in
- Enter your Cloudflare credentials
- Validate and save configuration
- Create a GitHub OAuth app
- Set authorization callback URL:
https://your-domain.com/auth/github
- Add client ID and secret to environment variables
- Create a Google OAuth 2.0 client
- Set authorized redirect URI:
https://your-domain.com/auth/google
- Add client ID and secret to environment variables
- Create a Turnstile site in Cloudflare dashboard
- Add site key and secret key to environment variables
- Turnstile will protect signup forms from abuse