Skip to content
Configuration

Configuration

Overview

Lemmego uses a centralized configuration system that combines environment variables, .env files, and runtime configuration maps. The system supports dot-notation access, nested keys, and type-safe retrieval.

The Config System

Configuration is managed via the config package (github.com/lemmego/api/config). It follows a singleton pattern and is auto-loaded at application startup.

Setting Configuration

In your generated project, configuration is defined in internal/configs/ files using Go init() functions:

// internal/configs/app.go
package configs

import "github.com/lemmego/api/config"

func init() {
    config.Set("app", config.M{
        "name":  config.MustEnv("APP_NAME", "Lemmego"),
        "port":  config.MustEnv("APP_PORT", 8080),
        "env":   config.MustEnv("APP_ENV", "development"),
        "debug": config.MustEnv("APP_DEBUG", false),
    })
}

Config files are auto-loaded via a blank import in cmd/app/main.go:

import _ "github.com/lemmego/lemmego/internal/configs"

Reading Configuration

port := config.Get("app.port").(int)
name := config.Get("app.name", "default").(string)

Or using the typed accessor on a config.M map:

cfg := config.GetAll()
port := cfg.Int("app.port")
debug := cfg.Bool("app.debug")

Available accessor methods on config.M:

  • String(key, defaultVal...) string
  • Int(key, defaultVal...) int
  • Int64(key, defaultVal...) int64
  • Bool(key, defaultVal...) bool
  • Float64(key, defaultVal...) float64
  • Duration(key, defaultVal...) time.Duration
  • Time(key, defaultVal...) time.Time

Environment Variables

The framework loads .env files automatically via github.com/joho/godotenv/autoload. For type-safe environment variable access:

port := config.MustEnv("APP_PORT", 8080)
debug := config.MustEnv("APP_DEBUG", false)

MustEnv[T] supports string, int, float64, and bool types.

Configuration Sections

A generated project includes these configuration files:

app.go — Application Settings

Config KeyEnv VariableDefaultDescription
app.nameAPP_NAMELemmegoApplication display name
app.portAPP_PORT8080HTTP server port
app.envAPP_ENVdevelopmentEnvironment (production, development)
app.debugAPP_DEBUGfalseEnable debug mode
app.urlAPP_URLhttp://localhost:8080Application URL

database.go — Database Connections

Config KeyEnv VariableDefaultDescription
sql.defaultDB_CONNECTIONsqliteDefault connection name
sql.connections.sqlite.databaseDB_DATABASEstorage/database.sqliteSQLite path
sql.connections.mysql.hostDB_HOST127.0.0.1MySQL host
sql.connections.mysql.portDB_PORT3306MySQL port
keyvalue.redis.hostREDIS_HOST127.0.0.1Redis host

filesystems.go — Storage Disks

Config KeyEnv VariableDefaultDescription
filesystems.defaultFILESYSTEM_DISKlocalDefault storage disk
filesystems.disks.local.rootstorage/appLocal storage root

session.go — Session Configuration

Config KeyEnv VariableDefaultDescription
session.driverSESSION_DRIVERfileSession store driver
session.lifetimeSESSION_LIFETIME120Session lifetime (minutes)
session.cookieSESSION_COOKIElemmego_sessionCookie name

Adding Custom Configuration

You can add your own configuration by creating new files in internal/configs/:

// internal/configs/mail.go
package configs

import "github.com/lemmego/api/config"

func init() {
    config.Set("mail", config.M{
        "default":  config.MustEnv("MAIL_MAILER", "smtp"),
        "host":     config.MustEnv("MAIL_HOST", "smtp.mailtrap.io"),
        "port":     config.MustEnv("MAIL_PORT", 2525),
    })
}

Access your config anywhere in your application:

mailHost := config.Get("mail.host").(string)