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.jsoncontent:{"name": "MyArcheryApp"}-> Key:app.namedatabase/connections.jsoncontent:{"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);