Skip to main content

Development Mode

Filter which modules load during development for faster iteration.

Overview​

Development mode allows you to load only specific modules, reducing startup time and isolating features during development.

Configuration​

Set convars in server.cfg:

# Enable development mode
set dev_mode "true"
 
# Load only specific modules (comma-separated)
set dev_features "spawning,characters,banking"
 
# Or leave empty to load all modules (useful for debugging only)
set dev_features ""

Behavior​

dev_modedev_featuresResult
"false"(ignored)All modules load normally
"true""" (empty)All modules load
"true""mod1,mod2"Only listed modules load

How It Works​

The enabled() function checks module loading:

import { DEV, ONLY, enabled } from "@core/dev";
 
// DEV = true if dev_mode is "true"
// ONLY = Set of module names from dev_features
 
// In module loader:
for (const mod of sortedModules) {
	if (!enabled(mod.name)) {
		console.log(`Skipping ${mod.name} - dev mode filter`);
		continue;
	}
	await mod.start();
}

Dependency Handling​

When a module is skipped, its dependents are also skipped:

With filter "init,banking":

  • ✓ init - in filter
  • ✗ characters - not in filter
  • ✗ banking - dependency characters not running
  • ✗ atm - dependency banking not running

Common Workflows​

Working on a Specific Feature​

set dev_mode "true"
set dev_features "init,characters,your-feature"

Quick Server Tests​

set dev_mode "true"
set dev_features "init"  # Minimal load for testing infrastructure

Disable for Production​

set dev_mode "false"
# dev_features is ignored

Best Practices​

  1. Always include init - Core module required by most others
  2. Include dependency chain - List all dependencies of your feature
  3. Disable in production - Ensure dev_mode is "false" in prod configs