# Modules This document aims to document how the engine modules are designed to work together. _This is not a description of the current state of this project, but rather where I want it to be._ A module provides some basic functionality to the engine. Since that is incredibly broad, we define specific resources and functions to be implemented by each module in order to function with daw. ## Goals The design and implementation of the module system aims to provide the following features: 1. Hot reloading modules. 2. Provide a implementation and platform agnostic interface. 3. Allow implementations to be easily interchangeable. ## Types DAW defines different module types, each type is a definition of a _struct_ that a module of that specific type must implement. It usually consists of function pointers that are called by the core of the engine. A specific function could be the `window_init` function, required by the `Platform` module type. ## TODO This module system is, at this current commit in time, nowhere near the above description. Once all of this is done in code I want to make sure the static compilation configuration does not rely on function pointers, but on functions themselves. This is probably done through macros.