ElmerFEM is an open source software designed to tackle complex multiphysics phenomena. It contains electromagnetic, fluid, thermal and mechanical solvers among many others. It supports weak and tight (strong) coupling of any arbitrary number of physical simulations. In order to successfully solve the complex numerical setups that arise from multiphysics problems, users have available a large number of powerful numerical techniques, such as: direct, iterative or multigrid methods; mesh deformation and adaptation and high-order elements. The code is highly parallel and scales efficiently. Its modular structure allows the development of customized solvers or the improvement of existing ones easily. ElmerFEM can be run from a textual input deck or via Python bindings, allowing it to be coupled with other programs. Additionally, it has a user-friendly GUI, making it very easy to learn and get started.