rel(5)

πŸ“¦
version 25.3.2.8 Β· 2 versions
, in debian bookworm, ubuntu noble

πŸ’– rel(5) β€” the release resource file, bestie πŸ’–

okay so this is a page from the Files corner of the manual, and the whole vibe is: this is the file that tells your Erlang/OTP system which apps get to come to the party. πŸŽ€

✨ NAME ✨

rel β€” Release resource file. That's it, that's the name, slay. πŸ’…

🌸 DESCRIPTION 🌸

The release resource file is the little receipt that says which applications are included in a release (aka a system) built on Erlang/OTP. It's the guest list. No cap.

This file is used by the functions in systools when generating:

  • start scripts β€” *.script, *.boot
  • release upgrade files β€” relup

So yeah, if you've ever wondered where .script and .boot come from, it's giving "this file walked so those could run." πŸ‘‘


πŸ¦‹ FILE SYNTAX πŸ¦‹

The release resource file is to be called Name.rel. Yes, that exact shape. Name is your name, .rel is the whole personality.

The .rel file contains one single Erlang term, and that term is called a release specification. One term. Not two. Do not try it. πŸ™ˆ

Here's the syntax, verbatim, don't touch a character:

{release, {RelName,Vsn}, {erts, EVsn},
  [{Application, AppVsn} |
   {Application, AppVsn, Type} |
   {Application, AppVsn, IncApps} |
   {Application, AppVsn, Type, IncApps}]}.

Now let's break down every single piece, because the way that each field matters is iconic:

  • RelName = string() β€” Release name. That's what it says on the tin, bestie.
  • Vsn = string() β€” Release version.
  • EVsn = string() β€” ERTS version the release is intended for. Gotta be specific about which runtime era you're living in. ✨
  • Application = atom() β€” Name of an application included in the release.
  • AppVsn = string() β€” Version of an application included in the release.
  • Type = permanent | transient | temporary | load | none β€” Start type of an application included in the release. Here's the tea:
    • If Type = permanent | transient | temporary, the application is loaded and started in the corresponding way β€” go check application(3erl) for the deets. πŸ“
    • If Type = load, the application is only loaded. That's it. Just loaded.
    • If Type = none, the application is not loaded and not started β€” but the code for its modules is loaded. Sneaky little thing, showing up without being invited to the loading party. πŸ’€
    • Defaults to permanent.
  • IncApps = [atom()] β€” A list of applications that are included by an application included in the release. The list must be a subset of the included applications specified in the application resource file (Application.app) β€” and it overrides this value. Defaults to the same value as in the application resource file.

πŸ‘‘ Note πŸ‘‘

The list of applications must contain the Kernel and STDLIB applications. Non-negotiable. Like, you literally cannot skip these two. Periodt. πŸ’…

🌈 SEE ALSO 🌈


And that's the whole page, bestie! This little love letter was brought to you by Ericsson AB, shipping as part of sasl 4.2. Go forth and build your release. πŸ¦‹βœ¨πŸ’–