Developer Installation
These instructions were recently updated. If anything is unclear or you have suggestions for improvement, please share your feedback in this GitHub discussion.
The following instructions describe how to compile MOOSE or MOOSE-based applications from source. If you are not modifying MOOSE source, we suggest that you first start with User Installation to install a pre-built version of MOOSE.
MOOSE requires a complex set of dependencies (see Required Dependencies) to be built. While these dependencies can be installed by the developer, we provide a variety of development environments that reduce the need for these dependencies to be installed. These development environments are not required to build an application but greatly simplify the process of doing so.
First, you need to clone MOOSE or the MOOSE-based application that you wish to build and possibly develop. For the purposes of these instructions, we will assume that you are trying to build MOOSE. However, if you were given separate instructions for obtaining a MOOSE-based application, follow those instead. If not, follow the instructions in Cloning MOOSE.
After obtaining a git checkout of the MOOSE or MOOSE-based application you are developing, follow the instructions based on your operating system and/or environment below:
Cloning MOOSE
MOOSE is hosted on GitHub and should be cloned from there using git.
We recommend creating a projects directory to contain your cloned applications. Thus, the first two commands in the commands that follow will involve acting within the projects directory.
If using Windows, first follow the installation instructions for installing WSL first in Windows Install. The following commands can then be ran within the WSL Ubuntu window so that the repository is cloned within the WSL space.
On INL HPC, internet access is not available on compute nodes. That is, you can only perform git operations (including the operation that follows) like git clone, git push, git pull, and git fetch on a login node.
It is also suggested to clone and build applications within the scratch space instead. On INL HPC machines, your scratch directory is found at /scratch/USERNAME where USERNAME is your HPC username. File system performance on scratch is significantly faster than performance within your home directory. However, files stored within scratch may be deleted when they are more than 90 days old. Thus, be sure to copy content from scratch that you do not want to lose.
To clone MOOSE, run the following commands:
mkdir -p ~/projects
cd ~/projects
git clone --origin upstream https://github.com/idaholab/moose.git
cd moose
git checkout devel
For the instructions that follow, when we reference the "MOOSE repository", we are considering the repository you just cloned which is found at ~/projects/moose.
If you plan on contributing code changes to MOOSE, you will need to fork the GitHub repository and contribute changes via pull requests and your fork. For contributing code changes, you should base your pull request branches on the devel branch.
Installation
Choose the installation section that follows depending on your operating system and environment.
Linux Install
The preferred method of installation on Linux is using the pre-built development environment using Apptainer.
Developer Install: Apptainer (preferred)
Use Apptainer to execute in development environment containers.
Contains optional dependencies (libTorch, MFEM, NEML2).
Developer Install: Conda (Linux)
Use Conda to distribute the development environment.
Does not contain optional dependencies (libTorch, MFEM, NEML2).
INL HPC Install
These instructions describe building on INL HPC resources.
Use modules on INL HPC that provide convenient access to a containerized development environment.
Contains optional dependencies (libTorch, MFEM, NEML2).
Mac OS Install
We generally advise against the use of Homebrew on Mac OS. Intel Macs are currently still supported but this support will end at the end of 2026 as software updates to these machines are reduced to only security updates.
Developer Install: Conda (Mac) (preferred)
Use Conda to distribute the development environment.
Does not contain optional dependencies (libTorch, MFEM, NEML2).
Windows Install
Developer Install: Conda (Windows) (preferred)
Use Conda to distribute the development environment within WSL (Windows Subsystem for Linux).
Does not contain optional dependencies (libTorch, MFEM, NEML2).
Support is limited.
Dependencies
Required Dependencies
The required dependencies for MOOSE are as follows:
C and C++17 compiler
A compiler for building C and C++ code. The preferred compilers are:
Fortran compiler
A compiler for building Fortran code. The preferred compiler is:
GCC: tested on versions 9.2.1, 13.3.1, 14.3.0
GNU Make
GNU Make is used to execute Makefile files for building applications.
MPI
Message Passing Interface (MPI) is a portable message-passing standard to execute applications in parallel. The preferred implementations are:
PETSc
PETSc, the Portable, Extensible Toolkit for Scientific Computation, is for the scalable (parallel) solution of scientific applications modeled by partial differential equations (PDEs).
The currently supported version is v3.25.1. Other versions are not guaranteed to be compatible.
Pre-built distributions of PETSc are found in the distributed development environments via Apptainer, Conda, and Docker. Thus, PETSc does not need to be built with these environments.
If not using pre-built development environments from Apptainer, Conda, and Docker, PETSc can be installed via the (scripts/update_and_rebuild_petsc.sh) script within the MOOSE repository. By default, this script will install PETSc to ./petsc/arch-moose relative to the MOOSE repository root.
libMesh
libMesh provides a framework for mesh definition and finite-element assembly.
The currently supported commit is aeab0b9. Other commits are not guaranteed to be compatible.
Pre-built distributions of libMesh are found in the distributed development environments via Apptainer, Conda, and Docker. Thus, libMesh does not need to be built with these environments.
If not using pre-built development environments from Apptainer, Conda, and Docker, PETSc can be installed via the (scripts/update_and_rebuild_libmesh.sh) script within the MOOSE repository. By default, this script will install libMesh to ./libmesh/installed relative to the MOOSE repository root. This script requires PETSc to also be installed, where the PETSc directory is defined by the environment variable $PETSC_DIR or is installed in ./petsc/arch-moose relative to the MOOSE repository root.
Python
Python versions 3.10 - 3.14 are supported.
WASP
WASP is used as the backend for parsing MOOSE input files and also provides the language server for interacting with MOOSE input.
The currently supported commit is 09054a2. Other commits are not guaranteed to be compatible.
Pre-built distributions of PETSc are found in the distributed development environments via Apptainer, Conda, and Docker. Thus, WASP does not need to be built with these environments.
If not using pre-built development environments from Apptainer, Conda, and Docker, WASP can be installed via the (scripts/update_and_rebuild_wasp.sh) script within the MOOSE repository. This script requires CMake for configuration. By default, this script will install WASP to ./framework/contrib/wasp/install relative to the MOOSE repository root.