Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration

Library Directories

Configuration Key: lib_dirs

Default: []

Purpose: Additional directories to search for applications

Example:

{lib_dirs, ["apps", "my_libs"]}.

Result: Searches apps/*/ and my_libs/*/ for applications


Source Directories

Configuration Key: src_dirs

Default: ["src"]

Purpose: Directories within each app containing source files

Example:

{src_dirs, ["src", "lib"]}.

Result: Searches APP/src/ and APP/lib/ for .app.src files


Application Resource Extensions

Configuration Key: application_resource_extensions

Default: [".app", ".app.src", ".app.src.script"]

Purpose: File extensions to recognize as application resources

Rarely Changed: Standard OTP conventions


Application Structure

Single-App Project

my_app/
├── rebar.config
├── src/
│   ├── my_app.app.src
│   └── *.erl
└── include/
    └── *.hrl

Discovery: One app found at root → single-app project


Umbrella Project

my_project/
├── rebar.config
└── apps/
    ├── app1/
    │   ├── src/
    │   │   ├── app1.app.src
    │   │   └── *.erl
    ├── app2/
    │   └── src/
    │       ├── app2.app.src
    │       └── *.erl

Discovery: Multiple apps in apps/ → umbrella project


Application Resource File Format

.app.src

Location: src/APP.app.src

Format: Erlang term

Example:

{application, my_app, [
    {description, "My Application"},
    {vsn, "1.0.0"},
    {registered, []},
    {applications, [kernel, stdlib]},
    {mod, {my_app_app, []}},
    {env, []}
]}.

.app

Location: ebin/APP.app

Format: Same as .app.src but with modules list

Generated: Usually created from .app.src during compilation


.app.src.script

Location: src/APP.app.src.script

Format: Erlang code that returns application term

Example:

case os:getenv("PROD") of
    "true" ->
        {application, my_app, [{vsn, "1.0.0"}, ...]};
    _ ->
        {application, my_app, [{vsn, "dev"}, ...]}
end.