Repository navigation
Suggestions for documentation improvements #2348
Description
Hi there!
This issue is a catch-all for documentation improvement suggestions. I'll keep it updated with things to work on, rather than having lots of separate issues.
- If you have suggestions for things to add to the documentation, leave a comment below.
- If you're looking to contribute to JuMP, picking something off this list is a great place to start!
General editing
The easiest place to start is just to read through any portion of the docs and give it a good edit. Spelling, grammar, or edits for clarity are always good.
The easiest way to get started is to pick a Markdown page, e.g.,:
https://github.com/jump-dev/JuMP.jl/blob/master/docs/src/index.md
and then click the "Edit this file" pencil icon:

Make your changes, and then scroll to the bottom of the page for instructions on how to submit a pull request.
If you're not sure about a change, make it, open a pull request, and then we can discuss it.
Prior art
There are two existing sources of documentation that I would like us to work towards:
- The AMPL book https://ampl.com/resources/the-ampl-book/
- Mosek modeling cookbook https://docs.mosek.com/MOSEKPortfolioCookbook-a4paper.pdf
Resolved items
Resolved items
Improve current tutorials
A lot of the tutorials are quite basic and consist of just functions. We should revise the existing tutorials to show a wider range of interesting JuMP and Julia syntax and features.
I think it'd also help if each tutorial used a standardized template. Perhaps something like
# Title
This tutorial was contributed by XXX. It is based on the article/book/example of CITE.
## Goal
The goal of this tutorial is to demonstrate ...
## Setup
This tutorial requires the following packages
```Julia
using JuMP
import Foo
```
In addition, you need to data files [bar.txt] and [baz.json]. These files are contained in the JuMP repository
```
const _DATA_DIR = joinpath(@__DIR__, "data")
```
## Now start the tutorial
- linear/knapsack
- linear/multicommodity-flow
- linear/workforce-schedulig
- linear/steel-t3
- nonlinear/qcp
- nonlinear/rosenbrock
- nonlinear/mle
- nonlinear/clnlbeam
- conic/kmeans
- conic/correlation
- conic/sdp-max-cut
- conic/min-distortion
- conic/robust-uncertainty
Add new tutorials
Structuring larger models
I wrote a nice answer here:
https://discourse.julialang.org/t/integrating-mathoptinterface-into-an-industry-scale-project-e-g-constraint-management/71943/2?u=odow
Improved MIP modeling tricks
People consistently ask how to reformulate max and abs. These should be added. The Mosek modeling cookbook is the gold-standard for this: https://docs.mosek.com/modeling-cookbook/mio.html
Parallelism
I get this question quite frequently. A section should be added to the docs explaining the different options.
Links with content
- https://stackoverflow.com/questions/64177415/create-jump-model-with-multi-threading-in-julia
- https://discourse.julialang.org/t/parallel-solves-in-gurobi-jl/9908/8?u=odow
- https://discourse.julialang.org/t/improve-performance-of-a-code-with-very-large-of-garbage-collection/75548/20
How to debug a JuMP model
We need a getting started on debugging.
- The Julia debugger doesn't work well with JuMP.
- Update your packages to the latest version. JuMP will only support the LTS an the latest point release.
- Try a different solver
- Simplify the problem
- Comment out constraints until the infeasibility resolves itself
- Write tests.
@BenLauwens has a great chapter on debugging: https://benlauwens.github.io/ThinkJulia.jl/latest/book.html#chap21. We should link to it, and re-phrase some of the suggestions in a JuMP context.
Parametric problems
The same user as #2662 asked for ways to solve a collection of problems over a set of parameters. We don't have a good way of doing this in JuMP (we have @NLparameter, but not @parameter), but it could be scripted using the modification API (or even just rebuilding the problem).
We should write a tutorial with the different approaches. Here's their suggestion:

I like the idea of visualizing the heat map.
Activity
[-]Add documentation on parallel solves of a JuMP model[/-][+]Suggestions for documentation improvements[/+]odow commentedon Feb 3, 2022
odow commentedon Feb 3, 2022
odow commentedon Dec 7, 2022
odow commentedon Jan 11, 2023
odow commentedon Jan 26, 2023
odow commentedon Feb 22, 2023
jd-foster commentedon Feb 23, 2023
odow commentedon Feb 23, 2023
blegat commentedon Feb 27, 2023
odow commentedon Feb 27, 2023
51 remaining items
Akshit222 commentedon Oct 22, 2024
odow commentedon Nov 26, 2024
jd-foster commentedon Dec 16, 2024
More visual content in the docs would be welcome, I think.
This is a good example for flows in graphs: https://doc.sagemath.org/html/en/thematic_tutorials/linear_programming.html#flows
jd-foster commentedon Dec 16, 2024
Another interesting idea from Sage docs: a compilation page "presenting commands roughly in the order a student would learn the corresponding mathematics" (but for LP not group theory, of course)
https://doc.sagemath.org/html/en/thematic_tutorials/group_theory.html
joaquimg commentedon Jan 28, 2025
Some of these deserve a place in the docs: Sienna-Platform/PowerSimulations.jl#1218 (comment), possibly at performance tips
odow commentedon May 15, 2025
blegat commentedon May 15, 2025
Update maxcut tutorial with https://github.com/blegat/LowRankOpt.jl?tab=readme-ov-file#example
blegat commentedon May 16, 2025
odow commentedon Aug 21, 2025
Document how to drop down to MOI for some features: #4030
odow commentedon Aug 24, 2025
odow commentedon Nov 20, 2025
We should add tutorials and documentation for JuliaC/PackageCompiler. We may need to have a separate repo with tests so that they can be added to
solver-tests.ymlandextension-tests.yml.franckgaga commentedon Nov 27, 2025
odow commentedon Jan 15, 2026
So my conclusion from mucking about with PackageCompiler and JuliaC for the afternoon is that PackageCompiler just works. I'm hesitant to say we even need a tutorial.
You just need a package with a
julia_mainentry point:MyApp/src/MyApp.jlThen
JuliaC, on the other hand,
Has many many type stability issues all over the place.
blegat commentedon Jan 16, 2026
Yes, even in direct mode, the fact that the type of the moi backend is non-concrete, which is needed for
set_optimizer, makes it not possible to use with JuliaC. A possible solution would be to have a structThen, we could add a keyword argument like
cement_backendindirect_modelandModel. When set totrue, it makes the backend unremoveable. But it would make JuliaC closer to possible, and it could also give small performance gains, since we avoid the type instabilities everytime we access the backend (so we could recommend it in the docs next toset_string_names_on_creation).odow commentedon Feb 2, 2026
@Transurgeon suggested that we could use
distance_to_setmore liberally in the tutorials to convince people they may want to look at the quality of the returned solutions.