Skip to content
On this page

Configuration library for Node.js written in TypeScript. Can load and merge configuration for multiple sources into one object for easy access. Inspired by Go's Konfig.

Quick look

yaml
# configs/default.yaml
name: "my-app"
json
// configs/development.json
{
  "database": {
    "host": "localhost",
    "port": 5432,
    "user": "development",
    "password": "development"
  }
}
typescript
import * as Konfig from "@willsoto/node-konfig-core";
import { VaultLoader } from "@willsoto/node-konfig-vault";
import path from "node:path";
import process from "node:process";

const configDir = path.join(process.cwd(), "configs");

// Create the store, this is the object you will use to access your config
export const store = new Konfig.Store();

// Always load some defaults.
// These values will be merged with subsequent loaders. On conflicts, last one wins.
store.regiserLoader(
  new Konfig.FileLoader({
    files: [
      {
        path: path.join(configDir, "default.yaml"),
        // This will tell the `FileLoader` how it should interpret the files it loads
        parser: new Konfig.YAMLParser(),
      },
    ],
  }),
);

// Use a local json file in development
if (process.env.NODE_ENV === "development") {
  const loader = new Konfig.FileLoader({
    files: [
      {
        path: path.join(configDir, "development.json"),
        parser: new Konfig.JSONParser(),
      },
    ],
  });

  // Make sure the loader is registered on the store in order for it to be processed
  store.registerLoader(loader);
} else {
  // Use Vault in production or any other non-development environment.
  store.regiserLoader(
    new VaultLoader({
      secrets: [
        {
          key: "secret/data/database",
        },
      ],
    }),
  );
}

// `init` must be called in order to actually resolve and process all the registered loaders
// This only needs to be called once at some point during application startup
await store.init();

store.get("name"); // "my-app"
store.get("database"); // Will return the appropriate database configuration based on `NODE_ENV`