Meh uses a layered configuration system that allows for flexible setup across multiple sites:
Default Values: Every configuration option has a sensible default value.
Environment Variables: Defaults can be overridden by environment variables prefixed with MEH_ (e.g., the site_url config can be set via the MEH_SITE_URL env var).
.env File: For convenience, you can place environment variables in a .env file in the project root. The project contains a .env.example file that you can copy and modify.
Database Storage: Site-specific configurations can be stored in each site's database and take precedence over environment variables.
When Meh looks for a configuration value, it checks these sources in order:
.env fileNote: the following options can only be set via the environment or .env file:
db_path -> MEH_DB_PATHenv -> MEH_ENV Use the meh config CLI command to view or modify database configuration values:
# View all configuration values and their sources
./meh config
# View a specific configuration value
./meh config site_url
# Set a configuration value in the database
./meh config site_url https://example.com
# Remove a database configuration (revert to environment or default)
./meh config site_url ""
For multi-site setups, use the --site parameter:
./meh --site blog1 config site_url https://blog1.example.com
./meh --site blog2 config site_url https://blog2.example.com
Configs set up via Environment always apply to all sites, while configs set up via the database are site-specific.