# S-UI Environment Variables: Complete Configuration Guide with Default Values

> Explore S UI environment variables including SUI_LOG_LEVEL and SUI_DEBUG. Learn their default values and how to configure S-UI for optimal performance with this comprehensive guide.

- Repository: [Alireza Ahmadi/s-ui](https://github.com/alireza0/s-ui)
- Tags: api-reference
- Published: 2026-05-22

---

**S-UI respects four environment variables—`SUI_LOG_LEVEL`, `SUI_DEBUG`, `SUI_DB_FOLDER`, and `SUI_BIN_FOLDER`—which default to `info`, `false`, platform-specific paths, and `bin` respectively when unset.**

The S-UI panel (alireza0/s-ui) reads environment variables at runtime to configure logging, debugging, and storage paths without requiring code changes. Understanding these variables helps administrators deploy the application across different environments while maintaining predictable behavior.

## Overview of S-UI Environment Variables

S-UI centralizes its configuration logic in [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go), where helper functions read environment variables and apply hardcoded defaults when values are missing. The migration subsystem in [`cmd/migration/1_2.go`](https://github.com/alireza0/s-ui/blob/main/cmd/migration/1_2.go) introduces one additional variable specific to legacy data imports.

| Variable | Default Value | Purpose |
|----------|---------------|---------|
| `SUI_LOG_LEVEL` | `info` | Controls logging verbosity |
| `SUI_DEBUG` | `false` | Enables debug mode when set to `"true"` |
| `SUI_DB_FOLDER` | Platform-specific | Directory for the SQLite database |
| `SUI_BIN_FOLDER` | `bin` | Folder containing legacy [`config.json`](https://github.com/alireza0/s-ui/blob/main/config.json) for migrations |

## Detailed Variable Reference

### SUI_LOG_LEVEL (Logging Verbosity)

The `SUI_LOG_LEVEL` variable determines the application's logging threshold. Valid values include `debug`, `info`, `warn`, and `error`.

According to [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go) (lines 39-44), the `GetLogLevel()` function checks this variable and falls back to the `Info` constant when the variable is empty. If `SUI_DEBUG` is enabled, this setting is overridden to `debug` regardless of the environment value.

```go
lvl := config.GetLogLevel()  // Returns "info" if SUI_LOG_LEVEL is unset
fmt.Println("Current log level:", lvl)

```

### SUI_DEBUG (Debug Mode Toggle)

Setting `SUI_DEBUG=true` forces the application into debug mode. As implemented in [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go) (lines 46-48), the `IsDebug()` function returns `true` only when the environment variable exactly matches the string `"true"`.

When active, this variable overrides `SUI_LOG_LEVEL` to ensure debug messages are captured.

```go
if config.IsDebug() {
    log.Println("Debug mode enabled via SUI_DEBUG")
}

```

### SUI_DB_FOLDER (Database Directory)

`SUI_DB_FOLDER` specifies where S-UI stores its SQLite database file. The `GetDBFolderPath()` function in [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go) (lines 50-63) implements platform-aware defaults when this variable is unset:

- **Windows**: `C:\Program Files\s-ui\db`
- **Linux/macOS**: `/usr/local/s-ui/db`
- **Fallback**: `<binary-directory>/db`

The `GetDBPath()` function appends `s-ui.db` to this folder path to generate the final database file location.

```go
dbPath := config.GetDBPath()  // e.g., "/usr/local/s-ui/db/s-ui.db"
fmt.Println("Database location:", dbPath)

```

### SUI_BIN_FOLDER (Migration Binary Folder)

Used exclusively by the migration system in [`cmd/migration/1_2.go`](https://github.com/alireza0/s-ui/blob/main/cmd/migration/1_2.go) (lines 22-25), `SUI_BIN_FOLDER` identifies the directory containing the legacy [`config.json`](https://github.com/alireza0/s-ui/blob/main/config.json) file during version upgrades. Unlike other variables, this defaults simply to the string `"bin"` relative to the working directory.

```go
binFolder := os.Getenv("SUI_BIN_FOLDER")
if binFolder == "" {
    binFolder = "bin"  // Default as per cmd/migration/1_2.go
}

```

## How Defaults Are Applied Internally

The configuration logic follows a consistent pattern across the codebase:

1. **Log Level Resolution**: `GetLogLevel()` first checks `IsDebug()`; if true, it returns `debug`. Otherwise, it reads `SUI_LOG_LEVEL` or defaults to `Info`.

2. **Debug Detection**: `IsDebug()` performs a direct string comparison against `"true"`, returning `false` for any other value or empty string.

3. **Path Construction**: `GetDBFolderPath()` uses `os.Getenv()` to detect the environment variable. When empty, it calls `os.Executable()` to determine the binary location, then applies OS-specific logic to build the appropriate path.

4. **Migration Context**: The migration helper uses `os.Getenv()` directly with a hardcoded fallback to `"bin"`, as this code runs outside the main configuration initialization.

## Practical Configuration Examples

Run S-UI with custom logging and database locations:

```bash

# Enable debug logging and custom database path

SUI_DEBUG=true SUI_DB_FOLDER=/var/lib/s-ui ./s-ui

```

Docker deployment with explicit variable settings:

```bash
docker run -e SUI_LOG_LEVEL=warn -e SUI_DB_FOLDER=/data alireza0/s-ui

```

Programmatically checking configuration in Go:

```go
package main

import (
    "fmt"
    "github.com/alireza0/s-ui/config"
)

func main() {
    fmt.Printf("Log Level: %s\n", config.GetLogLevel())
    fmt.Printf("Debug Mode: %t\n", config.IsDebug())
    fmt.Printf("DB Path: %s\n", config.GetDBPath())
}

```

## Summary

- **SUI_LOG_LEVEL** defaults to `info` and controls message verbosity via `GetLogLevel()` in [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go)
- **SUI_DEBUG** defaults to `false` and forces debug logging when set to `"true"`
- **SUI_DB_FOLDER** uses platform-specific paths (Windows: `C:\Program Files\s-ui\db`, Unix: `/usr/local/s-ui/db`) when unset, resolved by `GetDBFolderPath()`
- **SUI_BIN_FOLDER** defaults to `"bin"` and is only used during legacy migrations in [`cmd/migration/1_2.go`](https://github.com/alireza0/s-ui/blob/main/cmd/migration/1_2.go)
- All defaults are applied at runtime, allowing flexible deployment without recompilation

## Frequently Asked Questions

### What is the default log level in S-UI?

The default log level is `info`. According to [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go) lines 39-44, the `GetLogLevel()` function returns the `Info` constant when `SUI_LOG_LEVEL` is unset and debug mode is disabled.

### How do I enable debug mode in S-UI?

Set the environment variable `SUI_DEBUG=true`. The `IsDebug()` function in [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go) checks for this exact string value. When enabled, it automatically forces the log level to `debug` regardless of the `SUI_LOG_LEVEL` setting.

### Where does S-UI store its database by default?

The default location depends on your operating system. As defined in [`config/config.go`](https://github.com/alireza0/s-ui/blob/main/config/config.go) lines 50-63, S-UI uses `C:\Program Files\s-ui\db` on Windows, `/usr/local/s-ui/db` on other operating systems, or falls back to a `db` folder adjacent to the binary if those paths are inaccessible.

### Is SUI_BIN_FOLDER required for new installations?

No. `SUI_BIN_FOLDER` is only used by the migration system in [`cmd/migration/1_2.go`](https://github.com/alireza0/s-ui/blob/main/cmd/migration/1_2.go) for importing legacy [`config.json`](https://github.com/alireza0/s-ui/blob/main/config.json) files during upgrades from older versions. Fresh installations can ignore this variable, as it defaults to `"bin"` when unspecified.