- Feature: Add optional
ruff check --fixsupport to ruff-format target [jensens, 2025-11-11] - Feature: Add
qa.tydomain for Astral's ty type checker. ty is an extremely fast Python type checker (10-100x faster than mypy). Registers with both CHECK_TARGETS and TYPECHECK_TARGETS for fast feedback. [jensens, 2026-01-28] - Use ty and extended ruff for check, drop isort and mypy from
pyproject.toml. [jensens, 2026-01-28]
-
Enhancement: Use tables in the generated sphinx code for topic/domains. [jensens, 02-11-2025]
-
Feature: Add monorepo support with
PROJECT_PATH_PYTHONsetting. Python projects can now be located in subdirectories while keeping the Makefile at the repository root. Includes auto-detection ofpyproject.tomlin subdirectories on init,--project-path-pythonCLI flag and preseed file support. Useful for monorepos with multiple applications (e.g., frontend + backend). See the "Monorepo Support" section in getting-started.md for details. -
Feature: Add
--version(-v) command line flag to display mxmake version. [jensens, 02-11-2025] -
Fix: All QA tool domains (ruff, isort, mypy, black, zpretty, pyupgrade, pyrefly) now respect the
PROJECT_PATH_PYTHONsetting when using default source paths. WhenPROJECT_PATH_PYTHONis set (e.g., tobackend), the tools automatically look for source code in the correct subdirectory (e.g.,backend/src) instead of justsrc. [jensens, 03-11-2025]
- Breaking: Drop Python 3.9 support. Minimum Python version is now 3.10.
- Feature: Modernize codebase to use Python 3.10+ features (PEP 604 union types, built-in generic types).
- Critical fix:
SOURCES_TARGETused mxdev wrongly with-o(offline) option. The offline option had a bug and was fixed in mxdev #34 and released with mxdev>=5. This fix switches from-oto the correct-f(no fetch from vcs). To update your makefile usemxmake updatein the folder with yourMakefile. - Fix: theme for newer Sphinx 7.x.
- Fix: interactive uv venv, use
--allow-existinginstead. - Fix: The project was using
pytestas the test runner all along (as configured in the Makefile and generated test scripts), butzope.testrunnerwas incorrectly listed as the dependency. - Feature: Add support for Python 3.14.
- Breaking: Removed
MXENV_UV_GLOBALsetting in favor of automatic UV detection. WhenPYTHON_PACKAGE_INSTALLER=uv, mxmake now automatically detects and uses a globally installeduvif available. To force local installation of uv, simply don't install it globally or remove it from PATH. - Feature: Add
UV_PYTHONsetting to specify Python version for UV-managed virtual environments. Defaults toPRIMARY_PYTHONfor backward compatibility. This provides semantic clarity:PRIMARY_PYTHONis the system interpreter path (e.g.,python3.11), whileUV_PYTHONis the version spec for UV (e.g.,3.14,cpython@3.14). - Feature: Automatic detection of global UV installation using simple shell check. No manual configuration required.
- Feature: All UV commands now run with
--quiet --no-progressflags for better CI/CD compatibility and cleaner log output. - Feature: When using global UV, mxmake checks if updates are available using
uv self update --dry-runand displays a helpful non-blocking warning if a newer version is available. - Improvement: Simplified mxenv.mk logic from 3+ nesting levels to 1-2 levels
using computed intermediate variables (
USE_GLOBAL_UV,USE_LOCAL_UV). Code is now more maintainable and easier to extend. - Tests/CI: Add UV-only CI job testing workflow without Python pre-installation.
New
uv-onlyjob in variants workflow verifies thatmake installworks with only UV installed (no Python) on Python 3.10 and 3.14, proving the UV-only team workflow documented in getting-started.md. - Docs: Complete overhaul of installation documentation. Document UV-only workflow requiring no Python pre-installation. Simplify UV configuration examples to show only required settings (PYTHON_PACKAGE_INSTALLER and UV_PYTHON). Add migration guide, FAQ/troubleshooting section, and clarify when PYTHON_MIN_VERSION/PRIMARY_PYTHON settings are needed vs. optional.
- Chore: Migrate to hatch-vcs for automated versioning from git tags.
- Introduce testargs for pytest to have more control over the test and pass it args.
-
Fix
pyreflydomain. -
Fix pytest related test and coverage script generation bugs introduced in 1.2.1.
- Fix test-script to not end with backslash if there is no
testpaths(which is valid). Improve tests to cover more edge cases, i.e. above and multi-line. - Improve test to read large amount of output from file (Makefile template check).
- Fix Python check for global UV and use PRIMARY_PYTHON for UV as version definition.
- add
pyreflytype checker support.
-
Chore: Build-system update and minor cleanups.
-
Feature: Add help system (make help).
-
Feature: Add target
zope-adduserto create an emergency user.
-
Chore: Add release workflow.
-
Fix
zope.mk, wrong config file was passed to zconsole. Now zope-debug and zope-runscript are functional.
- Fix preseed value reading.
- Add proxy target support.
Breaking changes
- Rename
npmdomain tonodejsand add support for usingpnpmas alternative package manager.
-
Fix bug in
Template.writewhen creating target folders to also create parent folders if not exists. -
Add support for preseeds configuration files.
-
Add
plone-sitetemplate configuration tomx.initemplate. -
More fine grained control over plone site creation and purging.
-
Drop Python 3.8 and set all defaults to a Python 3.9 minimum.
-
Export
OSenvironment variable inmxenvdomain to prevent warning on sub make calls. -
Add
LINGUA_OPTIONSsetting tolinguadomain ini18ntopic. Can be used for passing additional command line options topot-create. -
Perform
mxenvdomain related checks inside target to support setups which install their own python environment. -
Add
Makefileas dependency target forSENTINELtarget to make sure target execution if Makefile changes. -
Depend on
mxdev>=4.0.2, which fixes the deprecation ofpkg_resourcesand use the provided infrastructure of mxdev to handle entry_points in mxmake. -
Add Plone site creation and purging in new
plonedomain.
-
Add experimental windows support.
-
Support
mxmake updatecommand, updating the Makefile without prompting for settings. -
Use importlib.metadata to load entrypoints.
-
Add support for uv as fast alternative to pip #25.
-
Remove Python 3.7 from CI. Still works though.
-
Run test on GH-Actions on platform macos-latest.
-
Use
pathlib.Pathinstead ofos.path. -
Add
EXTRA_PATHsetting tobasedomain incoretopic. Can be used to specify additional directories added to environmentPATH. -
Export
PATHwith virtual environment and node modules bin folders. -
Get rid of
MXENV_PATH. -
Rename
PYTHON_BINtoPRIMARY_PYTHONinmxenvdomain. -
Introduce
MXENV_PYTHON. It defines the Python executable used for mxmake operations. -
Remove ruff cache when running
make ruff-cleantarget. -
Fix #20: make VENV_ENABLED=false test does not work.
-
Add
wtr(Web test runner) domain tojstopic. -
Add pyupgrade based code formatter, see https://pypi.org/project/pyupgrade/.
-
Add
ZOPE_TEMPLATE_CHECKOUToption to zope domain to allow pinning to a tag, branch or revision (uses cookiecutter--checkout). If empty, do not apply--checkoutoption. -
Add phony target
cookiecutterto be able to just install it. -
Add feature to pass options to zest-releaser commands.
-
Change default for venv folder to
.venv, since this is established practice.
-
Add
typechecktarget and use it for mypy instead ofchecktarget. -
Add basic CI config file generation for github actions.
-
Add
ruffdomain toqatopic. -
Fix exporting path in
jsdoctarget.
-
Add support for
pip.conffile. -
Fixes #18: VENV_CREATE is ignored.
-
Fix error when new source package gets added to
mx.iniinHook.generate_additional_sources_targets. -
Add
PROJECT_CONFIGas the dependency target ofSOURCES_TARGETto make sure the target runs when a new source package gets added tomx.ini.
-
Add
zest-releaserdomain toapplicationstopic. -
Support custom makefile include.
-
Support
pytestas a test runner and make it default if not configured otherwise. -
Add
RUN_TARGETsetting tobasedomain and generateruntarget inMakefile. -
Create
twisteddomain inapplicationstopic. -
Test and coverage templates consider
mxmake-test-path,mxmake-source-pathandmxmake-omit-pathinsettingssection ofmx.inito support inclusion of local package inrun-tests.shandrun-coverage.shscripts. -
Create
scssdomain injstopic. -
Create
gettextdomain ini18ntopic. -
Create
linguadomain ini18ntopic. -
Conditional add local [requirement|constraints}.txt to LOCAL_PACKAGE_FILES.
-
Generate one Makefile from snippets instead of including several files from subfolder.
-
Semantic overhaul. "Domains" become "Topics" and "Makefile" becomes "Domain".
-
Use inquirer to configure included domains and targets.
-
Generate initial
mx.iniconfig file. -
Generate "Topic" and "Domain" docs.
-
Change docs format from
rsttomd. -
Rename
_SENTINELto_TARGETin domains. -
generic
installdirtyandcleantargets in main makefile template. -
Rename
.sentinelsfolder to.mxmake-sentinels. -
Provide a set of default targets and a mechanism to extend it's dependency targets in domain make files.
-
Rename
installdomain topackages. -
Rename
filesdomain tomxfiles. -
Rename
venvdomain tomxenv. -
Extend hook to generate
sourcesdependency targets for package reinstall (setup.py, setup.cfg, pyproject.toml, requirements.txt, constraints.txt). -
Move
testsandcoveragedomains toqatopic. -
Create
black,mypy,isortand domains inqatopic. -
Move
system-dependenciestosystemtopic. -
Rename
docsdomain tosphinxand move todocstopic. -
Create
zprettydomains inqatopic. -
Add topic related metadata containing a topic description.
-
Create
npmdomains injstopic. -
Create
jsdocdomain, indocstopic. -
Create
rollupdomains injstopic. -
Create
karmadomain, injstopic. -
Create
zopedomain, inapplicationstopic. -
Add
soft-dependssetting in domains to define conditional order of domain rendering. -
Make
sourcestarget an optional dependency. -
Extend makefile parser to provide multi line settings.
-
Take local package into account to "dirty" if there (pyproject.toml, setup.[cfg|py]
-
Check for the existence of pip in
*-cleantargets before uninstalling a package, to ensure the targets are working when running via the defaultcleantarget, where the entire virtual env gets removed. -
Remove redundant dependencies from
zopedomain. -
sourcesdomain is now a soft dependency ofmxfilesdomain instead of thepackagesdomain. This ensures source package checkout happens before mxmake generates files, because templates might gain information from source packages if present. -
karmaandrolluptargets depend onNPM_TARGETnow.
- Initial release.