Skip to content
Erlang configuration provider / application:get_env/2 on steroids
Branch: master
Clone or download
Pull request Compare This branch is 7 commits ahead, 3 commits behind jtendo:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Confetti is configuration provider for your Erlang applications.

Basically it's application:get_env/2 on steroids.


  1. Management console (accessible via telnet) - maintenance department will love you for this:

    • Configuration reload in runtime (designated processes receive notifications on reload)

    • Easily extensible with your own management commands (plugins!)

    • (TODO) broadcast working configuration across the Erlang cluster

       ![Confetti management console](
  2. Configuration supervision:

    • Increase your system's uptime - previous working configuration is DETS-cached in case someone messes up the configuration files

    • Broken config for process_a can not break process_b

      Confetti supervision tree

  3. Easy to use



    %% your process
    %% (...)
    init([]) ->
        confetti:use(my_foo),   %% reads configuration terms
                                %% from "conf/my_foo.conf",
                                %% spawns new configuration provider
                                %% if needed...
        confetti:fetch(my_foo),  %% fetches the configuration terms
        {ok, #state{}}.
    %% (...)
    %% react to configuration changes
    handle_info({config_reloaded, NewConf}, State) -> (...)
  4. Customizable

    • Write configuration validators and more:

      confetti:use(foo, [
          %% Specify config file location
          {location, {"conf/bar", "foo.cnf"},
          %% Make sure it's more than just correct Erlang term
          %% or even transform the terms into something!
          %% Validator funs should accept Config and return {ok, NewConf}
          %% on success, error otherwise.
          {validators, [fun validate_foo_config/1]},
          %% ignore notifications for current process
          {subscribe, false}
    • Expose any module via the management console:

      export([foo/1, foo/3]).
      foo(help) ->
          "Foo does bar two times!".
      foo(Param1, Param2, Param3) ->
          %% perform command logic
          "bar bar".

      Let confetti know about it:

      %% conf/mgmt_conf.conf
      {port, 50000}.
      {plugins, [my_commands]}.

      Assuming your application is already running, perform live management configruation reload:

      $ telnet localhost 50000
      (nonode@nohost)> reload mgmt_conf
    • Provide your own welcome screen to the management console, i.e.:

      $ figlet MyApp > priv/helo.txt

Try it out quickly

  1. Obtain the source code
  2. rebar compile; erl -pa ebin -s confetti_app
  3. 1> example_srv:start_link().
  4. telnet localhost 50000
  5. Type help for available commands, and help COMMAND for command usage details.


BSD License. See LICENSE file for details.


Adam Rutkowski <>


Feel encouraged to spot bugs/poor code and implement new sexy features.

Also, make sure, you add yourself to the authors where appropriate! Thanks.

You can’t perform that action at this time.