Documentation
Documentation
Introduction

Getting Started

Getting started
Getting StartedInstallationQuick StartProject Structure

Configuration

Configuration
ConfigurationEnvironment ConfigurationEdge ConfigDatabaseAuth SecretStripeFirebaseStorageGoogle Maps And Cloud Service AccountOAuth ProvidersEmail DeliverySentryFeature Flags

Architecture

Architecture
Architecture OverviewTech StackoRPC MiddlewareDesign Principles

Patterns

Patterns
Code Patterns & ConventionsFeature ModulesError HandlingType Safety

Database

Database
DatabaseSetupSchema DefinitionDatabase OperationsMigrationsCaching
Data Tables

API

oRPCProceduresRoutersoRPC Proxy Setup
APIsOpenAPIREST Endpoints

Auth & Access

AuthenticationConfigurationOAuth ProvidersRolesSession Management
AuthorizationUser RolesPermissions

Routing & i18n

RoutingDeclarative RoutingNavigation
InternationalizationTranslationsLocale Routing

Components & UI

ComponentsButtonsFormsNavigationDialogs
StylesTailwind CSSThemingTypography

Storage

Storage
StorageConfigurationUsageBuckets
Stripe Billing

Extra

Caching

Templates

Templates
Template GuidesCreate New FeatureCreate New PageCreate Database TableCreate oRPC RouterAdd Translations

Development

Development
DevelopmentCommandsAI AgentsBest Practices
Pulling Updates

Storage

Configure storage provider selection, Firebase Storage, and S3-compatible buckets

Select Provider In App Config

Set the storage provider in src/config/app.ts:

Storage: {
  STORAGE_PROVIDER: "firebase", // or "s3"
}

Firebase Storage Provider

If you use Firebase for file buckets:

  1. Open Firebase project: https://console.firebase.google.com/
  2. Go to Storage.
  3. Click Get started if storage is not initialized.
  4. If prompted, enable billing.
  5. Create the storage bucket in production mode.
  6. Ensure Config.Storage.STORAGE_PROVIDER is set to \"firebase\".

Firebase storage setup screen

Admin SDK Access Model

This template uses Firebase Admin SDK for server-side file operations, so client storage rules are not the primary access control layer for app uploads/downloads.

S3-Compatible Provider (AWS S3, R2, MinIO)

Variables

VariableRequiredPurpose
S3_ENDPOINTConditionalCustom endpoint (R2/MinIO/etc.). Leave empty for AWS S3.
S3_REGIONYesRegion (or auto for R2).
S3_ACCESS_KEYYesAccess key ID.
S3_SECRET_KEYYesSecret access key.
S3_BUCKETYesTarget bucket name.

Setup

  1. Create a bucket in your storage provider.
  2. Create access key credentials with read/write permissions.
  3. Copy region and endpoint details.
  4. Add S3 env values to .env.local.
  5. Set Config.Storage.STORAGE_PROVIDER to \"s3\".
  6. Test with a small upload flow in the app.

If you are using Firebase provider, these S3 variables can remain unset.

AWS S3 Example

S3_ENDPOINT=""
S3_REGION="eu-central-1"
S3_ACCESS_KEY="AKIA..."
S3_SECRET_KEY="..."
S3_BUCKET="my-template-bucket"

Cloudflare R2 Example

S3_ENDPOINT="https://<account-id>.r2.cloudflarestorage.com"
S3_REGION="auto"
S3_ACCESS_KEY="..."
S3_SECRET_KEY="..."
S3_BUCKET="my-r2-bucket"

Notes

  1. Keep credentials server-side only.
  2. Restrict key permissions to the required bucket(s).
  3. Prefer separate credentials per environment.

On this page

Select Provider In App Config
Firebase Storage Provider
S3-Compatible Provider (AWS S3, R2, MinIO)
Variables
Setup
AWS S3 Example
Cloudflare R2 Example
Notes