- Add support for named arguments. Function calls can now refer to
arguments by name, in addition to the usual positional arguments.
The parameter names of the global constraints in the standard library have
been revised so that they read well as named arguments (now that named
arguments make them part of the public interface).
It is now a type error to declare two overloads of a function or predicate
that a call supplying all of its arguments by name could not tell apart,
i.e. two overloads that give the same name and type to every parameter
that has to be supplied.
Named arguments are available for user-defined and library operations. The
low-level operations a solver supports natively (those declared without a
body) remain positional-only for now, until solver libraries have converged
on a common set of parameter names; calling one by name is an error. The new
--warn-non-authoritative-namesoption helps solver implementers audit their libraries against the standard-library names ahead of that change. - Add support for default values for function and parameter arguments.
- Add support for set cardinality declarations using the syntax
set(e) of T: s;. Whenehas typeintorvar int, this desugars to an additionalcard(s) = econstraint; whenehas typeset of intorvar set of int, it desugars tocard(s) in e. The syntax works for tuple- and record-typed sets as well as arrays (and arrays of arrays) of sets. - Add support for index-dependent array declarations, where an index list
entry of the form
c in Sbinds the namecin the element type's domain expression — for examplearray[c in 1..n] of var 1..f(c): x;. The per-element domain is desugared into an additional constraint and works for tuple- and record-typed elements as well as arrays of arrays; it also composes with theset(e) of Tcardinality syntax. - Make the
listtype behave like a real 1-based array type. It is now syntactic sugar forarray [1..infinity] of T. Checks ensure that only 1-based arrays match thelisttype. - Allow par tuples and records to be optional.
optmakes the tuple or record optional as a whole (it is either a complete value or<>); it does not distribute into the fields, soopt record(int: a)remains a different type fromrecord(opt int: a). Accessing a field of an optional tuple or record yields an optional value.var opttuples and records remain type errors, including when thevarcomes from a field, since a tuple or record with anyvarfield is itselfvar. - And many more changes and bugfixes!
Downloads
Official binary packages are provided for Windows, macOS and Linux.
These contain MiniZinc 2.10.0, the MiniZinc IDE 2.10.0, as well as several state of the art solvers.
For detailed installation instructions, see the documentation.
Windows
Windows 10 or later, 64-bit processor.
MiniZincIDE-2.10.0-bundled-setup-win64.exemacOS
macOS 11 or later, universal binary.
MiniZincIDE-2.10.0-bundled.dmgLinux AppImage
AppImage for 64-bit Linux (tested on Ubuntu 22.04).
MiniZincIDE-2.10.0-x86_64.AppImageLinux Snap package
Snap package for 64-bit Linux.
View on the Snap storeLinux binary archive
Binary archive for 64-bit Linux (tested on Ubuntu 22.04).
MiniZincIDE-2.10.0-bundle-linux-x86_64.tgzSource code
Source code is available from the GitHub repositories.
View on GitHub
Both the compiler tool chain and the IDE are available as free and open source software.
Have a look at our License Information page for the details.
The MiniZinc compiler and IDE
The compiler is the heart of the MiniZinc tool chain. It translates constraint models into FlatZinc, a language that is understood by a wide range of solvers.
MiniZinc comes with a simple Integrated Development Environment, the MiniZinc IDE, which makes it easy to develop and run constraint models.
Solvers
A number of solvers are included in the official binary packages:
MiniZinc can also interface with the following solvers if installed:
Additionally, many other compatible solvers can be installed, including:
Note that if you build MiniZinc from source, you will have to install any desired solvers yourself.
Reporting issues
We are grateful for feedback on MiniZinc, including bug reports, feature requests and ideas for improvements.
For general discussions about MiniZinc, please use the discussion forum.
To report an issue, please use the following issue trackers:
Releases
The latest release of MiniZinc is version 2.10.0, released 23 July 2026.
Development builds
Unstable development builds with upcoming bugfixes and features are available on GitHub.
Documentation for the latest development version of MiniZinc is available here.
For a list of bugfixes/changes please refer to the changelog.
Previous releases
- MiniZinc 2.9.7 (released 30 April 2026, change log)
- MiniZinc 2.9.6 (released 24 April 2026, change log)
- MiniZinc 2.9.5 (released 23 January 2026, change log)
- MiniZinc 2.9.4 (released 29 September 2025, change log)
- MiniZinc 2.9.3 (released 23 May 2025, change log)
- MiniZinc 2.9.2 (released 6 March 2025, change log)
- MiniZinc 2.9.1 (released 3 March 2025, change log)
- MiniZinc 2.9.0 (released 11 February 2025, change log)
- MiniZinc 2.8.7 (released 2 October 2024, change log)
- MiniZinc 2.8.6 (released 25 September 2024, change log)
- MiniZinc 2.8.5 (released 3 June 2024, change log)
- MiniZinc 2.8.4 (released 10 May 2024, change log)
- MiniZinc 2.8.3 (released 1 February 2024, change log)
- MiniZinc 2.8.2 (released 15 December 2023, change log)
- MiniZinc 2.8.1 (released 27 November 2023, change log)
- MiniZinc 2.8.0 (released 16 November 2023, change log)
- MiniZinc 2.7.6 (released 20 June 2023, change log)
- MiniZinc 2.7.5 (released 7 June 2023, change log)
- MiniZinc 2.7.4 (released 11 May 2023, change log)
- MiniZinc 2.7.3 (released 20 April 2023, change log)
- MiniZinc 2.7.2 (released 5 April 2023, change log)
- MiniZinc 2.7.1 (released 31 March 2023, change log)
- MiniZinc 2.7.0 (released 23 February 2023, change log)