Skip to main content

Configuration

Tymber provides a centralized and reactive configuration management system. It allows components to declare their own configuration schema and react to configuration changes at runtime.

Usage

Components can subscribe to configuration by declaring a schema and a handler. This is typically done in the component's constructor.

Tymber uses JSON Schema for configuration validation.

import { Component, INJECT, ConfigService } from "@tymber/core";

interface Config {
MY_SERVICE_API_URL: string;
MY_SERVICE_API_KEY: string;
}

export class MyService extends Component {
static [INJECT] = [ConfigService];

private config: Config = {
MY_SERVICE_API_URL: "",
MY_SERVICE_API_KEY: "",
};

constructor(configService: ConfigService) {
super();

configService.subscribe<Config>(
{
MY_SERVICE_API_URL: {
type: "string",
format: "uri",
},
MY_SERVICE_API_KEY: {
type: "string",
},
},
(config) => {
this.config = config;
},
);
}

async doSomething() {
// use this.config
}
}

When the application starts, ConfigService will:

  1. Collect all subscribed schemas.
  2. Fetch current values from the active configuration source.
  3. Validate values against the combined schema.
  4. Notify all subscribers with their specific configuration.

Configuration sources

Environment variables

By default, Tymber reads configuration from environment variables.

You can use it with the dotenv package (or Node.js built-in .env support) to load environment variables from a .env file.

Database

For more advanced needs, the @tymber/config module provides a database-backed implementation with versioning and encryption.