t3-env: Type-safe Environment Validation untuk TypeScript & Node.js

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
Search for a command to run...

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
No comments yet. Be the first to comment.
Ringkasan: Jika OpenClaw adalah AI Operating System yang menghubungkan berbagai layanan dan agent, maka Hermes adalah AI Worker yang fokus mengerjakan pekerjaan, belajar dari pengalaman, dan semakin p

Ketika membangun aplikasi modern seperti Next.js, Cloudflare Workers, platform AI, microservices, atau real-time dashboard, ada banyak istilah jaringan yang sering muncul: TCP, UDP, HTTP/2, QUIC, WebS

Setiap tahun, ribuan mahasiswa jurusan Teknologi Informasi, Sistem Informasi, dan Teknik Informatika diwisuda. Namun, tidak sedikit di antara mereka yang kemudian menghadapi kenyataan yang cukup berat

Jika Anda menggunakan Next.js, kemungkinan besar Anda pernah mendengar anggapan bahwa: "Next.js = Vercel" Padahal kenyataannya tidak harus demikian. Di sinilah OpenNext hadir. OpenNext adalah proyek

Saat pertama kali mencoba OpenCode Go, saya hampir langsung berlangganan tanpa membaca detail program yang mereka sediakan. Untungnya saya menemukan bahwa OpenCode memiliki program referral yang membe

Dalam pengembangan aplikasi modern β baik di Next.js, Hono, Bun, atau Node.js murni β kita sering menggunakan variabel environment (process.env) untuk menyimpan konfigurasi penting seperti:
API key
URL database
Secret token
Konfigurasi mode (production/development)
Namun, masalah klasik yang sering muncul adalah:
β Salah ketik nama variabel (API_URL vs APIURL)
β οΈ Variabel tidak didefinisikan di .env
π§© Nilai environment tidak sesuai format (misalnya, bukan URL yang valid)
π Variabel rahasia tidak sengaja terekspos ke sisi client
Masalah-masalah ini bisa berujung pada bug runtime, error production, atau kebocoran data sensitif.
Untuk itulah hadir t3-env β solusi dari tim T3 Stack (pencipta create-t3-app) untuk memberikan validasi, keamanan, dan type safety penuh terhadap variabel environment di proyek TypeScript.
t3-env?t3-env adalah library yang:
Menggunakan Zod untuk memvalidasi variabel environment
Menghasilkan type definitions otomatis
Membedakan antara server-side dan client-side
Menjamin semua variabel environment terdefinisi dan valid sebelum aplikasi berjalan
Dengan kata lain, t3-env membuat process.env menjadi type-safe dan reliable.
dotenv| Aspek | dotenv | t3-env |
| Fungsi utama | Membaca file .env ke process.env | Memvalidasi dan memberi tipe pada variabel ENV |
| Level keamanan | Tidak ada validasi | Validasi ketat menggunakan zod |
| TypeScript support | Tidak ada (semua `string | undefined`) |
| Beda client/server | Tidak ada | Ada pemisahan jelas |
| Error handling | Silent (jika variabel hilang) | Throw error langsung |
| Digunakan di | Semua proyek Node.js | Proyek TS/JS modern seperti Next.js, Hono, Bun, dkk |
Kesimpulan:t3-env bukan pengganti langsung dotenv, tapi pelengkap dan peningkatnya.
Jika framework-mu sudah memuat .env otomatis (seperti Next.js, Bun, Vite), maka tidak perlu menginstal dotenv lagi.
Jika kamu menggunakan Bun, Node.js, atau Hono:
npm install @t3-oss/env-core zod
Atau jika kamu memakai Next.js:
npm install @t3-oss/env-nextjs zod
import { createEnv } from "@t3-oss/env-core";
import { z } from "zod";
export const env = createEnv({
server: {
DATABASE_URL: z.string().url(),
SECRET_KEY: z.string().min(1),
},
client: {
NEXT_PUBLIC_API_URL: z.string().url(),
},
runtimeEnv: process.env,
});
console.log(env.DATABASE_URL); // β
Sudah pasti string valid
console.log(env.NEXT_PUBLIC_API_URL); // β
Hanya bisa diakses jika di client schema
Jika ada kesalahan seperti:
Variabel belum didefinisikan
Format tidak sesuai schema
maka t3-env akan langsung menampilkan error pada runtime dan di IDE TypeScript.
Salah satu keunggulan besar t3-env adalah pemisahan konteks.
Variabel seperti:
DATABASE_URL=postgresql://...
SECRET_KEY=abc123
Hanya didefinisikan di:
server: {
DATABASE_URL: z.string().url(),
SECRET_KEY: z.string(),
}
Variabel dengan prefix NEXT_PUBLIC_:
NEXT_PUBLIC_API_URL=https://api.example.com
Hanya boleh didefinisikan di:
client: {
NEXT_PUBLIC_API_URL: z.string().url(),
}
Jika kamu mencoba mengakses SECRET_KEY di browser, t3-env akan mencegahnya secara otomatis.
Misal file .env kamu tidak lengkap:
DATABASE_URL=
SECRET_KEY=supersecret
Maka t3-env akan memberikan error seperti:
β Invalid environment variables:
DATABASE_URL: Expected URL, received ""
Artinya aplikasi tidak akan berjalan sebelum environment valid β memastikan keamanan sejak awal.
dotenv (Opsional)Jika kamu menggunakan Node.js tanpa framework seperti Bun atau Next.js, tambahkan:
npm install dotenv
Lalu di file env.ts:
import "dotenv/config";
import { createEnv } from "@t3-oss/env-core";
import { z } from "zod";
export const env = createEnv({
server: {
DATABASE_URL: z.string().url(),
PORT: z.string().default("3000"),
},
runtimeEnv: process.env,
});
// src/env.ts
import { createEnv } from "@t3-oss/env-core";
import { z } from "zod";
export const env = createEnv({
server: {
DATABASE_URL: z.string().url(),
API_SECRET: z.string(),
},
runtimeEnv: process.env,
});
// src/index.ts
import { Hono } from "hono";
import { env } from "./env";
const app = new Hono();
app.get("/", (c) => c.text(`Connected to: ${env.DATABASE_URL}`));
export default app;
t3-envType safety penuh
Tidak ada lagi
process.env.MY_KEY as string.
Validasi otomatis
Aplikasi gagal start jika ENV tidak valid.
Keamanan terjaga
Variabel rahasia tidak bocor ke client.
Error cepat dan jelas
Developer tahu persis variabel mana yang salah.
Terintegrasi mulus
Cocok dengan Next.js, Hono, Bun, dan semua framework modern.
Gunakan prefix NEXT_PUBLIC_ untuk variabel yang boleh diakses di frontend.
Jangan definisikan variabel rahasia di client.
Selalu commit file env.example (bukan .env!) untuk panduan environment rekan tim.
Gunakan z.union() atau z.enum() untuk nilai pilihan seperti NODE_ENV.
Contoh:
NODE_ENV: z.enum(["development", "production", "test"]),
t3-env membawa revolusi kecil tapi penting dalam dunia JavaScript/TypeScript modern:
dari sekadar βmembaca file .envβ menjadi validasi environment yang aman, kuat, dan terintegrasi penuh dengan TypeScript.
Jika kamu sudah terbiasa menggunakan dotenv, migrasi ke t3-env akan membuat workflow-mu lebih:
Aman
Jelas
Profesional
| Fitur | dotenv | t3-env |
Load .env file | β | β (bisa lewat dotenv) |
| Validasi nilai | β | β (via Zod) |
| Type safety | β | β |
| Pemisahan client/server | β | β |
| Cocok untuk Next.js / Bun / Hono | β οΈ | β |
| Throw error bila salah | β | β |