Skip to main content
The EngineConfig struct defines the structure of the config.yaml file used to configure the iii framework engine.

EngineConfig Struct

src/modules/config.rs

Fields

u16
default:"49134"
WebSocket server port. Defaults to 49134 if not specified.
Vec<ModuleEntry>
default:"[]"
List of modules to load. Each entry specifies a module class and optional configuration.

ModuleEntry Struct

src/modules/config.rs

Fields

String
required
Fully qualified module class name (e.g., "modules::api::RestApiModule")
Option<Value>
default:"None"
Module-specific JSON configuration. Structure varies by module type.

YAML Configuration

Basic Example

config.yaml

With Environment Variables

The configuration supports environment variable expansion using the ${VAR_NAME} or ${VAR_NAME:default} syntax:
config.yaml
Environment Variable Syntax:
  • ${VAR_NAME} - Required variable (panics if not set)
  • ${VAR_NAME:default} - Optional with default value
  • ${VAR_NAME:} - Optional with empty string default

Complete Example

config.yaml

Methods

EngineConfig::config_file_or_default()

Loads configuration from a file or returns default configuration.
&str
required
Path to YAML configuration file
Returns: Result<EngineConfig> - Parsed config or error Behavior:
  • If file exists: Parses YAML, expands environment variables, returns config
  • If file missing: Returns config with default modules from inventory
  • If parse error: Returns error with details
Example:
src/main.rs

EngineConfig::expand_env_vars()

Expands environment variables in YAML content.
&str
required
Raw YAML content containing environment variable placeholders
Returns: String - YAML content with variables expanded Panics: If a required variable (without default) is not set Example:

EngineConfig::default_modules()

Returns configuration with default modules from the inventory.
Returns: EngineConfig with default port and modules

Constants

DEFAULT_PORT

Default WebSocket server port used when not specified in config.

DEFAULT_HOST

Default server host (binds to all interfaces).

Module Configuration by Type

HTTP Module

Queue Module

Stream Module

State Module

Cron Module

Observability Module

Default Modules

When using config_file_or_default() with a missing config file, the following default modules are loaded:
  • All modules registered in the inventory with is_default = true
  • Modules are loaded with config: None
You can check which modules are registered by examining the codebase for inventory::submit! macro calls.

Environment Variable Examples

Required Variables

Optional with Defaults

Complex URLs

Loading Configuration

From File

Programmatically

Error Handling

Parse Errors

Missing Environment Variables

Best Practices

Use environment variables for secrets: Never commit API keys, passwords, or tokens to config files
Provide sensible defaults: Use ${VAR:default} syntax for non-sensitive configuration
Document required variables: List all required environment variables in your README
Environment variables without defaults will panic if not set. Use defaults for optional configuration.

EngineBuilder

Learn about the builder API

Modules Overview

Available modules and configuration

Deployment

Production configuration guide

Custom Modules

Build custom modules