Changelog

All notable changes to this project will be documented in this file.

The format is based on a mixture of Keep a Changelog and Common Changelog. This project adheres to Semantic Versioning, with the exception that minor releases may include breaking changes.

Unreleased

3.6.1 - 2026-05-21

Fixed

  • 🐛 Fix segfaults on permutation mismatches in the ZX checker (#929) (@denialhaag)

3.6.0 - 2026-05-13

If you are upgrading: please see UPGRADING.md.

Added

  • ✨ Add support for many multi-controlled gates to the ZX-calculus checker (#907) (@burgholzer)

Changed

3.5.0 - 2026-02-02

If you are upgrading: please see UPGRADING.md.

Changed

3.4.0 - 2026-01-13

If you are upgrading: please see UPGRADING.md.

Changed

  • ♻️ Migrate Python bindings from pybind11 to nanobind (#817) (@denialhaag)

  • 📦️ Provide Stable ABI wheels for Python 3.12+ (#817) (@denialhaag)

  • ⬆️ Bump minimum required mqt-core version to 3.4.0 (#817) (@denialhaag)

  • 👷 Stop testing on ubuntu-22.04 and ubuntu-22.04-arm runners (#796) (@denialhaag)

  • 👷 Stop testing with clang-19 and start testing with clang-21 (#796) (@denialhaag)

  • 👷 Fix macOS tests with Homebrew Clang via new munich-quantum-toolkit/workflows version (#796) (@denialhaag)

  • 👷 Re-enable macOS tests with GCC by disabling module scanning (#796) (@denialhaag)

Removed

3.3.0 - 2025-10-14

If you are upgrading: please see UPGRADING.md.

Added

Changed

  • ⬆️ Bump minimum required mqt-core version to 3.3.1 (#735) (@denialhaag)

Removed

3.2.0 - 2025-08-01

If you are upgrading: please see UPGRADING.md.

Added

Changed

  • ⬆️ Bump minimum required mqt-core version to 3.2.1 (#668) (@denialhaag)

  • ⬆️ Bump minimum required mqt-core version to 3.2.0 (#667) (@denialhaag)

  • ⬆️ Require C++20 (#667) (@denialhaag)

  • ✨ Expose enums to Python via pybind11’s new (enum.Enum-compatible) py::native_enum (#663) (@denialhaag)

Fixed

  • 🚸 Increase binary compatibility between mqt-qcec and mqt-core (#662) (@denialhaag)

3.1.0 - 2025-07-11

If you are upgrading: please see UPGRADING.md.

Changed

  • ⬆️ Bump minimum required mqt-core version to 3.1.0 (#646) (@denialhaag)

  • ⬆️ Bump minimum required pybind11 version to 3.0.0 (#646) (@denialhaag)

  • ♻️ Move the C++ code for the Python bindings to the top-level bindings directory (#618) (@denialhaag)

  • ♻️ Move all Python code (no tests) to the top-level python directory (#618) (@denialhaag)

  • 💥 ZX-calculus checker now reports that it can’t handle circuits with non-garbage ancilla qubits (#512) (@pehamTom)

Deprecated

  • 🗑️ Deprecate the mode argument of generate_profile() and the ancilla_mode argument of verify_compilation() (#626) (@denialhaag)

Fixed

  • 🐛 Fix bug in ZX-calculus checker for circuits without data qubits (#512) (@pehamTom)

3.0.0 - 2025-05-05

If you are upgrading: please see UPGRADING.md.

Added

Changed

  • 🚚 Move MQT QCEC to the munich-quantum-toolkit GitHub organization

  • ♻️ Use the mqt-core Python package for handling circuits (#432) (@burgholzer)

  • ♻️ Return counterexamples as decision diagrams instead of dense arrays (#566) (@burgholzer)

  • ♻️ Reduce and restructure public interface of the EquivalenceCheckingManager (#566) (@burgholzer)

  • ⬆️ Bump minimum required CMake version to 3.24.0 (#582) (@burgholzer)

  • 📝 Rework existing project documentation (#566) (@burgholzer)

Removed

  • 🔥 Remove support for .real, .qc, .tfc, and GRCS files (#582) (@burgholzer)

  • 🔥 Remove several re-exports from the top-level mqt-qcec package (#566) (@burgholzer)

2.8.2 - 2025-02-18

📚 Refer to the GitHub Release Notes for previous changelogs.