Zero-config auto-discovery of external PhoenixKit modules.
Uses the same pattern as Elixir's protocol consolidation: scans .beam files
for persisted @phoenix_kit_module attributes via :beam_lib.chunks/2.
No module loading required — pure file I/O.
How It Works
use PhoenixKit.Modulepersists@phoenix_kit_module truein the.beamfile- This module scans only deps that depend on
:phoenix_kit(fast, targeted) - Reads the persisted attribute from each beam file without loading the module
- Works at both compile time (route generation) and runtime (ModuleRegistry)
Fallback
Also reads Application.get_env(:phoenix_kit, :modules, []) for backwards
compatibility. Both sources are merged and deduplicated.
Summary
Functions
Discovers external PhoenixKit modules from beam files + config fallback.
Scans beam files of phoenix_kit-dependent apps for @phoenix_kit_module attribute.
Functions
@spec discover_external_modules() :: [module()]
Discovers external PhoenixKit modules from beam files + config fallback.
Returns a deduplicated list of module atoms that implement PhoenixKit.Module.
Excludes internal modules (those in the PhoenixKit.Modules namespace that are
bundled with PhoenixKit itself).
@spec scan_beam_files() :: [module()]
Scans beam files of phoenix_kit-dependent apps for @phoenix_kit_module attribute.
Only checks apps that explicitly list :phoenix_kit in their dependencies,
keeping the scan fast and targeted.