Zotonic has an extra mechanism for starting additional things that need to be running under the zotonic_sup supervisor. These are called extensions. Extensions are not tied to any particular Zotonic site, but are regular Erlang processes, in OTP fashion.

On the startup of Zotonic, the global $ZOTONIC/priv/extensions folder is scanned once for folders starting with ext_. Each of these folders is considered an extension.

An extension (for instance, ext_foo/ext_foo.erl) can be a regular Erlang module, but is supposed to be something supervisable like a gen_server. It needs to expose at least a function start_link/0. On Zotonic startup, this function is called and the resulting pid is added to the Zotonic supervision tree as a worker process.