View Source Uniform Manifests (uniform.exs)

As explained in the How It Works guide, Ejectable Apps are defined by the existence of a uniform.exs file inside the app's lib directory.

Each app has its own uniform.exs.

structure

Structure

uniform.exs contains a keyword list with three supported options: mix_deps, lib_deps, and extra.

Each key is optional and defaults to [].

# the simplest valid uniform.exs
[]

A typical uniform.exs might look something like this.

# lib/my_app/uniform.exs
[
  mix_deps: [:gql, :timex],
  lib_deps: [:ui_components, :auth],
  extra: [
    some_data: "just for this app"
  ]
]

mix_deps

mix_deps

mix_deps lists Mix Dependencies of the app.

Provide the same atom as you do in mix.exs. (E.g. :ecto.)

lib_deps

lib_deps

lib_deps lists Lib Dependencies of the app.

Provide the directory in lib as an atom. (E.g. :ui_components for lib/ui_components.)

extra

extra

extra contains a keyword list of arbitrary, developer-defined data. The contents are placed in app.extra. (See Uniform.App)

When you need mix uniform.eject to emit different variations of code for different apps beyond including/excluding dependencies, you'll probably want to use app.extra with one of these tools:

Note that app.extra also contains keys returned by the extra callback. (uniform.exs has precedence for conflicting keys.)