The JuMP ecosystem

The JuMP project consists of the main JuMP package, and a large collection of supporting Julia packages.

The JuMP source code can be found at


Beneath JuMP, there is an abstraction layer called MathOptInterface (source code).

MathOptInterface defines an API that solvers should implement so that they can be used by JuMP, handles the automatic reformulation of problems via bridges, and has a large infrastructure for automatically testing solvers.

Solvers and solver-wrappers

At the bottom of the stack, there are solvers. These packages are either pure-Julia implementations of optimization algorithms, or they provide a Julia interface to external solvers (often written in C or C++). Each solver also implements the API defined by MathOptInterface so that it can be used from JuMP.

A non-exhaustive list of solvers available through JuMP is available in the JuMP documentation.

JuMP extensions

JuMP extensions are Julia packages which extend JuMP’s algebraic modeling language by providing additional syntax and functionality for specific problem classes.

Examples of JuMP extensions include:

Note that with the exception of SumOfSquares, these JuMP extensions are not part of the core JuMP-dev ecosystem, but are developed independently by the community.

(This list of JuMP extensions is open to new contributions! If you know one that isn’t listed here, tell us by making a pull-request to edit the file


An alternative to JuMP is Convex.jl. Convex.jl is a Julia package for disciplined convex programming, built on-top-of MathOptInterface. Thus, it can use all of the same MathOptInterface-compatible solvers as JuMP.