Created: 2011-07-11 09:15
Updated: 2019-03-04 10:12
License: bsd-2-clause


Confetti is configuration provider for your Erlang applications.

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


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

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

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) -> (...)


  • 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 -boot start_sasl -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.

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more