View Source Dotenv Config

Erlang apps config based on environment variables and .env files

Usage

At the start of your application, load the .env files (later files will overwrite the previous ones values).

dotenv_config:init(parser_module, ["path/to/.env"]).

parser_module is a module that implements the dotenv_config_parser behaviour. It should have a get_parser/0 function that returns a list of {ConfigItemName, ConfigItemType} tuples. See the parser_module example below.

Get the config value:

dotenv_config:get(<<"CLIENT_ID">>).

Set the config value:

dotenv_config:set(<<"CLIENT_ID">>, <<"new_client_id">>).

Get all the config values:

dotenv_config:get_all().

parser_module example

-module(client_config_example).
-behaviour(dotenv_config_parser).

-export([get_parser/0]).

get_parser() ->
    [
        {<<"CLIENT_ID">>, str},
        {<<"PORT">>, int},
        {<<"DEBUG">>, bool},
        {<<"NAMES">>, json},
        {<<"LOG_LEVEL">>, atom},
        {<<"CALLBACK_MODULE">>, module},
        {<<"CHARLIST">>, charlist},
        {<<"SOME_LIST_MODE">>, [{exact, <<"allowlist">>}, {exact, <<"blocklist">>}]},
        {<<"SOME_CALL_TIMEOUT">>, [{exact, <<"infinity">>}, int]},
        {<<"SOME_COMPLEX_TYPE">>, fun (RawValue) -> <<RawValue/binary, "_42">> end}
    ].

json type would be parsed to list or map using jiffy:decode(RawValue, [return_maps]).

module type would be checked for existence.