Documentation
Configure Firebase Admin and Fireclass for a Next.js App Router project.
This guide uses @dharayush7/fireclass-ssr. Keep every model and main-package
import on the server.
For local development, add service-account values to .env.local:
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_CLIENT_EMAIL=firebase-adminsdk-xxxxx@your-project-id.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"Keep .env.local out of Git. On Google-hosted environments you can omit the
service-account values and use Application Default Credentials.
No firebase.ts file
fireclass-ssr initializes and memoizes Firebase Admin through
getFireclass(). A separate lib/firebase.ts would duplicate that
responsibility and is not recommended.
Run the initializer after the credentials are ready:
$ npx fireclass init
Choose Next.js (App Router) when prompted. The CLI writes a server-only
Fireclass entry, environment templates, fireclass.json, and a starter model.
npx fireclass doctor$ npm install @dharayush7/fireclass-ssr firebase-admin class-validator class-transformer reflect-metadata server-only
import "server-only";
import "reflect-metadata";
import { getFireclass } from "@dharayush7/fireclass-ssr";
export const { BaseModel, adapter } = getFireclass();Only initialized values belong in this file. Import Collection,
serializeList, and runAction directly from
@dharayush7/fireclass-ssr where they are used.
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}import "server-only";
import { Collection } from "@dharayush7/fireclass-ssr";
import { IsBoolean, IsString } from "class-validator";
import { BaseModel } from "../lib/fireclass.server";
@Collection("todos")
export class Todo extends BaseModel<Todo> {
@IsString()
title!: string;
@IsBoolean()
done!: boolean;
constructor(data?: Partial<Todo>) {
super(data);
Object.assign(this, data);
}
}Client Components must import serialization helpers from
@dharayush7/fireclass-ssr/client, never the server-only main entry.
Run a production build to prove that server imports do not enter the client bundle:
npx fireclass doctor
npm run build