Gecode 6.3.0 and 6.4.0 are released

mzl1 pts0 comments

Gecode 6.3.0 and 6.4.0 are released - zayenz.seMenu

← Back to all blog posts← Newer<br>Older →

Gecode 6.3.0 and 6.4.0 are releasedDRAFT<br>2026-07-16•7 min read•Cite<br>•constraint programmingGecodeC++MiniZincreleases

_p]:my-0<br>[&_li_>_ul]:my-2<br>[&_li_>_ol]:my-2<br>[&_a]:text-primary [&_a]:hover:underline [&_a]:font-medium<br>[&_blockquote]:border-l-4 [&_blockquote]:border-accent [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-muted-foreground [&_blockquote]:my-4<br>[&_pre]:bg-muted [&_pre]:p-4 [&_pre]:rounded-lg [&_pre]:overflow-x-auto [&_pre]:my-4<br>[&_pre_code]:bg-transparent [&_pre_code]:p-0<br>[&_code]:bg-muted [&_code]:text-foreground [&_code]:px-1.5 [&_code]:py-1 [&_code]:rounded<br>[&_hr]:border-t [&_hr]:border-accent [&_hr]:my-8<br>[&_section[data-footnotes]]:mt-12 [&_section[data-footnotes]]:pt-0<br>[&_section[data-footnotes]]:border-t [&_section[data-footnotes]]:border-accent/60<br>[&_section[data-footnotes]]:text-sm [&_section[data-footnotes]_ol]:mt-1<br>[&_section[data-footnotes]_p]:my-2<br>[&_strong]:font-bold<br>[&_em]:italic<br>[&_table]:w-full [&_table]:my-4 [&_table]:border-collapse<br>[&_th]:border [&_th]:border-accent [&_th]:p-2 [&_th]:text-left [&_th]:font-semibold<br>[&_td]:border [&_td]:border-accent [&_td]:p-2<br>[&_img]:rounded-lg [&_img]:my-4<br>">

After a long pause, there are two new Gecode releases. Gecode 6.3.0 is dated 7 July 2026, and Gecode 6.4.0 was released on 15 July 2026.

The two releases play different roles.<br>Version 6.3.0 records the changes that accumulated on its release branch during the seven years since Gecode 6.2.0.<br>Version 6.4.0 is also a new starting point.<br>From now on development is on the main branch, CMake is the intended build system, and releases will be source-only.

If you are starting a new project or upgrading an existing one, 6.4.0 is the version to use.<br>The rest of this post groups the changes by what they mean for users and developers, rather than following the history commit by commit.

Building and using Gecode is more conventional

The most visible change in Gecode 6.4.0 is the build and installation flow.<br>CMake was available before, but it now covers the native build properly and is the intended way to build Gecode.<br>A normal source build looks like this:

Terminal windowcmake -S . -B build -DCMAKE_BUILD_TYPE=Release

cmake --build build --parallel

cmake --build build --target check

cmake --install build --prefix /path/to/install

The install step creates a CMake package. A separate CMake project can therefore consume Gecode without maintaining its own FindGecode.cmake file or manually assembling include paths and libraries:

find_package(Gecode CONFIG REQUIRED)

add_executable(my-model main.cpp)

target_link_libraries(my-model PRIVATE Gecode::gecode)

The aggregate Gecode::gecode target is the simple default.<br>Projects that want to state a narrower dependency can request and link individual components, such as driver, flatzinc, or gist.<br>The package also exports Gecode_VERSION, so downstream version checks no longer need to inspect generated headers.

The new packages carry transitive dependencies and record which optional components were built.<br>That is particularly useful for installations involving MPFR, Qt, or Gist.<br>Qt 6 is now preferred, while Qt 5.15 and later remains supported.

The minimum CMake version is 3.21, and the current build expects a C++17-capable compiler.<br>The Autotools build remains supported in 6.4.0, but is planned for removal in a later release.<br>The maintenance generators have also moved from Perl to Python scripts run through uv, which makes the maintenance environment easier to reproduce.<br>Ordinary CMake builds use the generated files included in the source release and do not need to run those scripts.

MiniZinc and FlatZinc have caught up

Much of Gecode 6.3.0 brings its MiniZinc integration up to date. The accumulated changes include:

support for the standard sliding_among and regular_set constraints;

the full cumulatives scheduling constraint, including optional activities for cumulative and disjunctive;

solver configuration and library files installed in the locations expected by MiniZinc;

value, domain, and bounds propagation annotations;

better FlatZinc errors, including MiniZinc constraint names when they are available; and

the experimental on_restart interface for expressing restart-based meta-search.1

Several fixes are small individually but important together.<br>Array arguments are correctly unshared for constraints such as inverse, division, modulo, arg_min, arg_max, and tables.<br>Element constraints can preserve index offsets rather than introducing transformed arrays.<br>Zero-duration tasks, empty sets, integer powers, and Boolean tables now follow their intended MiniZinc semantics.

Gecode 6.4.0 adds support for the experimental MiniZinc black-box propagator interface.2<br>A FlatZinc model can connect a custom value or bounds propagator implemented in either a shared library or a persistent subprocess.<br>The propagator returns both its result and the...

gecode build border cmake _section data

Related Articles