Tools
Node.js client
loadEnv, the client and the typed REST API for Node.js and Bun.
npm install envpass-cliThe package works in Node.js 20+ and Bun. It ships TypeScript types for the whole REST API.
Load values into process.env
import { loadEnv } from "envpass-cli"
await loadEnv({ environment: "prod", service: "api" })
console.log(process.env.DATABASE_URL)loadEnv reads the token from ENVPASS_TOKEN or the CLI login, and scope from its arguments, ENVPASS_* variables or .envpass.json. Existing variables are kept unless you pass override: true.
Client
import { createEnvpass } from "envpass-cli"
const envpass = createEnvpass({ token: process.env.ENVPASS_TOKEN })
const entries = await envpass.resolve({ environment: "prod" })
// [{ key: "DATABASE_URL", value: "postgres://...", source: "shared" }, ...]
const dotenv = await envpass.resolveText({ environment: "prod" }, "dotenv")
const me = await envpass.me()| Option | Default |
|---|---|
baseUrl |
ENVPASS_URL or https://envpass.dev |
token |
ENVPASS_TOKEN or the saved CLI login |
userAgent |
envpass-node |
Typed REST API
envpass.api is an openapi-fetch client generated from the OpenAPI spec, so paths, parameters and responses are typed:
const { data, error } = await envpass.api.GET("/api/v1/workspaces/{workspaceId}/projects", {
params: { path: { workspaceId } },
})
await envpass.api.PUT("/api/v1/workspaces/{workspaceId}/projects/{projectId}/secrets", {
params: { path: { workspaceId, projectId } },
body: { environmentId, entries: [{ key: "FEATURE_FLAG", value: "on" }] },
})Errors
Methods throw EnvpassError with status and code (unauthorized, forbidden, not_found, conflict, invalid, limit_reached, rate_limited).
import { EnvpassError } from "envpass-cli"
try {
await envpass.resolve({ environment: "prod" })
} catch (error) {
if (error instanceof EnvpassError && error.code === "forbidden") {
console.error("This token can't read prod")
}
}