I’ve published a new article in my Elixir learning series on dev.to exploring module attributes - the compile-time annotations and constants that describe and configure our modules.
The article covers:
- The three roles of module attributes: annotations, temporary storage, and compile-time constants
- Setting and reading attributes, and how compile time differs from runtime
- Using attributes as constants, including inside patterns and guards
- Precomputing values at compile time and exposing them through functions
- Documenting modules and functions with @moduledoc and @doc
- Describing function contracts with @spec and typespecs
- Defining custom types with @type, @typep, and @opaque
- The @vsn, @derive, @behaviour, and @impl attributes
- Registering custom attributes with Module.register_attribute/3 and accumulating values across the module
- Practical guidelines for when to reach for an attribute instead of a plain function
With complete working examples you can copy into IEx, you’ll learn how module attributes become the glue between documentation, configuration, and compile-time behavior - and how they shape the Elixir code you read every day.
Check it out:






















