Getting Started / Config

App Config

Archery features a powerful, file-based configuration system that uses JSON files to manage your application's settings. All configuration is loaded into an in-memory repository accessible via dot-notation.

Configuration Directory

By default, Archery looks for configuration files in: lib/src/config/

Any .json file placed in this directory (or its subdirectories) will be automatically loaded when the application boots.

Root Loading & Dot-Notation

The configuration system converts file paths into nested keys.

Example Structure:

lib/src/config/
├── app.json
└── database/
    └── connections.json
  • app.json content: {"name": "MyArcheryApp"} -> Key: app.name
  • database/connections.json content: {"driver": "sqlite"} -> Key: database.connections.driver

[!NOTE] If a filename contains dots (e.g., app.settings.json), Archery sanitizes it by replacing dots with underscores (app_settings) to prevent conflicts with dot-notation pathing.

Accessing Configuration

You can access configuration values using the AppConfig class from the IoC container.

final config = app.make<AppConfig>();

// Basic retrieval
String name = config.get('app.name');

// With default value
int port = config.get('server.port', 5500);

// Accessing nested data
String driver = config.get('database.connections.driver');

Runtime Overrides

You can temporarily override configuration values in memory (these are not persisted to disk):

config.set('app.env', 'production');

Initialization in main.dart

To ensure configuration is loaded, initialize it before booting your application:

final config = await AppConfig.create();
app.container.singleton<AppConfig>(factory: (_, [_]) => config, eager: true);