Next.js
Complete guide to integrate Redenv with Next.js from scratch.
A step-by-step guide to set up Redenv with Next.js 13+ App Router — from project creation to production deployment.
1. Create Your Next.js Project#
npx create-next-app@latest my-app
cd my-app2. Install Dependencies#
npm install -g @redenv/cli && npm install @redenv/clientpnpm add -g @redenv/cli && pnpm add @redenv/clientbun add -g @redenv/cli && bun add @redenv/client3. Set Up Redenv#
Connect to Upstash Redis#
redenv setup? Upstash Redis REST URL: https://your-redis.upstash.io
? Upstash Redis REST Token: AXxxxxxxxxxxxxxxxxxxxxxxxxxxxx
✓ Configuration savedTip
Get your Upstash credentials from console.upstash.com.
Create a project#
redenv register my-app? Master password: ********
? Confirm password: ********
✓ Project "my-app" createdWarning
Remember your master password! Redenv cannot recover it if lost.
4. Add Your Secrets#
redenv add DATABASE_URL "postgresql://user:pass@localhost:5432/mydb"
redenv add JWT_SECRET "your-super-secret-jwt-key"
redenv add STRIPE_SECRET_KEY "sk_test_..."Or import from an existing .env file:
redenv import .envVerify:
redenv list5. Create a Service Token#
redenv token create -p my-app? Token name: nextjs-token
✓ Service Token created
Token ID: stk_yYt2HXRprwYgpvwv
Token Key: redenv_sk_8f3a9b2c...
⚠ Save the Token Key now — it won't be shown again!6. Add Bootstrap Variables#
These are the only secrets in your .env.local:
REDENV_PROJECT=my-app
REDENV_TOKEN_ID=stk_yYt2HXRprwYgpvwv
REDENV_TOKEN_KEY=redenv_sk_8f3a9b2c...
UPSTASH_REDIS_URL=https://your-redis.upstash.io
UPSTASH_REDIS_TOKEN=AXxxxxxxxxxxxxxxxxxxxxxxxxxxxxEverything else (DATABASE_URL, API keys, etc.) is stored encrypted in Redenv.
7. Create the Redenv Client#
import { Redenv } from "@redenv/client";
export const redenv = new Redenv({
project: process.env.REDENV_PROJECT!,
tokenId: process.env.REDENV_TOKEN_ID!,
token: process.env.REDENV_TOKEN_KEY!,
upstash: {
url: process.env.UPSTASH_REDIS_URL!,
token: process.env.UPSTASH_REDIS_TOKEN!,
},
environment: process.env.NODE_ENV || "development",
});
await redenv.init().require(
"DATABASE_URL",
"JWT_SECRET",
); Tip
Validating here ensures your app crashes on startup if secrets are missing — not later when a route tries to use them.
8. Use Secrets in Your App#
Server Components#
import { redenv } from "@/lib/redenv";
export default async function HomePage() {
const secrets = await redenv.load();
const apiKey = secrets.API_KEY;
return <h1>Welcome</h1>;
}Server Actions#
"use server";
import { redenv } from "@/lib/redenv";
export async function sendEmail(formData: FormData) {
const secrets = await redenv.load();
await fetch("https://api.sendgrid.com/v3/mail/send", {
method: "POST",
headers: {
Authorization: `Bearer ${secrets.SENDGRID_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ to: formData.get("email") }),
});
}API Routes#
import { redenv } from "@/lib/redenv";
export async function GET() {
const secrets = await redenv.load();
// Use secrets.DATABASE_URL, secrets.API_KEY, etc.
return Response.json({ users: [] });
}Middleware#
import { redenv } from "@/lib/redenv";
import { NextResponse, type NextRequest } from "next/server";
export async function middleware(request: NextRequest) {
const secrets = await redenv.load();
if (secrets.get("MAINTENANCE_MODE").toBool()) {
return NextResponse.redirect(new URL("/maintenance", request.url));
}
return NextResponse.next();
}9. Database Integration#
With Prisma#
import { redenv } from "./redenv";
import { PrismaClient } from "@prisma/client";
let prisma: PrismaClient | undefined;
export async function getPrisma() {
if (!prisma) {
const secrets = await redenv.load();
prisma = new PrismaClient();
}
return prisma;
}10. Create Production Environment#
Before deploying, clone your development secrets to production:
# Clone dev secrets to a new production environment
redenv clone✔ Select source environment: development
✔ Select destination environment: New environment
? Enter new environment name: production
✓ Cloned 3 secrets to production# Switch to production and update values
redenv switch env production
redenv edit DATABASE_URL "postgresql://user:pass@prod-db:5432/mydb"
redenv edit STRIPE_SECRET_KEY "sk_live_..."Related#
- CLI Commands — Full CLI reference
- Configuration — All SDK options
- Caching Strategy — How SWR caching works
- Service Tokens — Token permissions and security