🏗️ Architecture

Configuration System

How Gauzy manages environment-based configuration across all modules.

Overview

Gauzy uses a layered configuration approach:

Diagram; its source is available below
Diagram source
graph TB
    A[Environment Variables] --> B[ConfigModule]
    B --> C[Feature-specific Config]
    C --> D[Runtime Configuration]
    A --> E[.env File]
    E --> B

ConfigModule

NestJS @nestjs/config module for centralized configuration:

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: ".env",
      load: [databaseConfig, jwtConfig, fileStorageConfig],
    }),
  ],
})
export class AppModule {}

Configuration Namespaces

NamespaceFileDescription
databasedatabase.config.tsDB connection
jwtjwt.config.tsJWT settings
fileStoragefile-storage.configStorage provider
emailemail.config.tsSMTP settings
socialsocial.config.tsOAuth credentials

Accessing Configuration

@Injectable()
export class MyService {
  constructor(private configService: ConfigService) {}

  getDbHost(): string {
    return this.configService.get<string>("database.host", "localhost");
  }
}

Environment Files

FilePurpose
.envLocal development
.env.localLocal overrides
.env.stagingStaging environment
.env.productionProduction settings

Validation

Configuration is validated at startup using class-validator:

export class EnvironmentVariables {
  @IsString()
  DB_HOST: string;

  @IsNumber()
  @Min(1)
  @Max(65535)
  DB_PORT: number;
}

Edit this page

Copyright © 2023-Present Ever Co. LTD.Docs by Sourcey