the universal sandbox runtime for agents and humans.
pocketenv.io
sandbox
openclaw
agent
claude-code
vercel-sandbox
deno-sandbox
cloudflare-sandbox
atproto
sprites
daytona
1import dotenv from "dotenv";
2import { bool, cleanEnv, host, port, str } from "envalid";
3
4dotenv.config();
5
6export const env = cleanEnv(process.env, {
7 NODE_ENV: str({
8 default: "development",
9 choices: ["development", "production", "test"],
10 }),
11 HOST: host({ default: "localhost" }),
12 PORT: port({ default: 8789 }),
13 PUBLIC_URL: str({ default: "http://localhost:8789" }),
14 DB_PATH: str({ devDefault: ":memory:" }),
15 KV_DB_PATH: str({ devDefault: ":memory:" }),
16 COOKIE_SECRET: str({}),
17 FRONTEND_URL: str({ devDefault: "http://localhost:5174" }),
18 JWT_SECRET: str({}),
19 POSTGRES_URL: str({}),
20 REDIS_URL: str({ default: "redis://localhost:6379" }),
21 POCKETENV_DID: str({}),
22 PRIVATE_KEY_1: str({}),
23 PRIVATE_KEY_2: str({}),
24 PRIVATE_KEY_3: str({}),
25 PUBLIC_KEY: str({}),
26 PRIVATE_KEY: str({}),
27 MODAL_SANDBOX_API_URL: str({ default: "http://localhost:8790" }),
28 SANDBOX_API_URL: str({ default: "http://localhost:8788" }),
29 CF_SANDBOX_API_URL: str({ default: "http://localhost:8787" }),
30 CF_SECRET_KEY: str({}),
31 CF_LOCAL: bool({ default: false }),
32 ACCOUNT_ID: str({}),
33 VOLUME_BUCKET: str({}),
34 R2_ACCESS_KEY_ID: str({}),
35 R2_SECRET_ACCESS_KEY: str({}),
36});