Developer Installation

commentnote:Feedback welcome

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.

commentnote:Cloning on Windows

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.

commentnote:Cloning on INL HPC

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.

INL HPC Install

These instructions describe building on INL HPC resources.

  • Developer Install: INL HPC

    • 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.

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:

  • GCC: tested on versions 9.2.1, 13.3.1, 14.3.0

  • Clang: tested on versions 19.1.7, 20.1.8

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:

  • MPICH: tested on versions 4.3.2, 5.0.1

  • OpenMPI: tested on version 5.0.10

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.

Optional Dependencies