Next.js Setup
Set up Refirebase in a Next.js App Router project.
Environment variables
Next.js requires the NEXT_PUBLIC_ prefix for client-accessible variables. Refirebase reads both FIREBASE_* and NEXT_PUBLIC_FIREBASE_* automatically.
.env.local
# .env.local
NEXT_PUBLIC_FIREBASE_API_KEY=AIza...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=...
NEXT_PUBLIC_FIREBASE_PROJECT_ID=...
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=...
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=...
NEXT_PUBLIC_FIREBASE_APP_ID=...
NEXT_PUBLIC_FIREBASE_DATABASE_URL=...
# Server / Admin SDK
FIREBASE_PROJECT_ID=...
FIREBASE_CLIENT_EMAIL=...
FIREBASE_PRIVATE_KEY=...Singleton instance
Create one shared instance and export db, auth, and analytics from it.
lib/firebase.ts
// lib/firebase.ts
import { Refirebase } from 'refirebase';
// Singleton pattern — safe for Next.js
const refirebase = new Refirebase();
export const { db, auth, analytics } = refirebase;React Provider (Client Components)
Wrap your app in RefirebaseProvider inside a 'use client' component so hooks work throughout the app.
app/layout.tsx
// app/providers.tsx
'use client';
import { RefirebaseProvider } from 'refirebase/react';
import { refirebase } from '@/lib/firebase';
import type { ReactNode } from 'react';
export function Providers({ children }: { children: ReactNode }) {
return (
<RefirebaseProvider instance={refirebase}>
{children}
</RefirebaseProvider>
);
}
// app/layout.tsx
import { Providers } from './providers';
export default function RootLayout({ children }) {
return (
<html>
<body>
<Providers>{children}</Providers>
</body>
</html>
);
}Server Components
Use db directly in Server Components for SSR data fetching — no provider needed.
Server Component
// app/users/page.tsx (Server Component)
import { db } from '@/lib/firebase';
export default async function UsersPage() {
const users = await db.firestore.get('users');
return <ul>{users?.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
}💡
The Admin SDK (
refirebase/admin) is recommended for server-side privileged operations. Use the client SDK for SSR-only data reads.