- Script: improve
mrelto always ask a Fedora Kerberos ticket. - Use CMake
EVAL CODEto forward arguments passed tomoduleCMake function. (fix issue #419 with contribution from Benoit Dumas) - Doc: update email address in
Code of conductto report bad behavior to maintainers. - Move modules-interest mailing-list to HPSF.
- Script: add tests on
mbutility to track performance of load, list and purge sub-commands with large number (>100) of modules. - Script: fix procedure call timing of Tcllib profiler module within
mlprofto avoid mixing timers from calls made at different interpretation level. - Parse loaded environment in early execution stage and always fail if an inconsistency is detected.
- Improve performances of loaded module comparison used when checking conflict and requirement dependencies. (fix issue #603)
- Fix environment variable synchronization issue between modulefile evaluation interpreters: supersede the
appendTcl command rather sync interpreters for each environment variable change. A substantial performance improvement is observed when loading or unloading many modulefiles. (fix issue #603) - Script: add
--with-lmodoption tombcommand to compare current Modules version against an installed version of Lmod. - Update the
sh-to-modmechanism to correctly parse shell alias on Dash shell version 0.5.13. - Update the
sh-to-modmechanism to correctly parse path-like environment variable on Fish shell version 4.3. - When fetching user's groups, in case a group name cannot be resolved use this group gid number as name instead of raising an error. (fix issue #604)
- Introduce
path_entry_reorderconfiguration option that change order of entry in a path-like environment variable when it is added again. This new configuration option is disabled by default. This option can be changed at installation time with--enable-path-entry-reorder. Whenpath_entry_reorderis changed withconfigsub-command, it sets theMODULES_PATH_ENTRY_REORDERenvironment variable. (fix issue #595 with contribution from Achim Gsell) - Install: reorder the options in the
configurescript help message alphabetically. - Doc: add manual page for
modulecmd(1)command. - Make
getenvmodulefile command available from module rc file evaluation context. (fix issue #588) - Install: add installation option
--disable-compressed-changelog<--enable-compressed-changelog>to cope with packaging process handling documentation file compression at their level. (fix issue #592) - Add
-poption as an abbreviated form for--paginate. (fix issue #593) - Add
-Poption as an abbreviated form for--no-pager. (fix issue #606) - Doc: add
organize-tsc-meetingguide. - Add the
paginateconfiguration option to control whether or not output message should be piped into defined pager by default. This option can be changed at installation time with--enable-paginate. Whenpaginateis changed withconfigsub-command, it sets theMODULES_PAGINATEenvironment variable. (fix issue #594) - Doc: add
plan-next-release-contentguide - Introduce the
non_exportable_tagsconfiguration option that lists tags that should not be exported to modules once loaded. Whennon_exportable_tagsis changed withconfigsub-command, it sets theMODULES_NON_EXPORTABLE_TAGSenvironment variable. (fix issue #608) - Improve the performance of the module’s column output by removing the costly optimization that attempts to fit more columns within the available screen width. (fix issue #622)
- Fix superseding definition of
sourceTcl command whensource_cacheconfiguration option is enabled to support-encodingoption. (fix issue #627) - Correctly parse the module specifications passed as argument on
depends-on,always-loadandprereq-allmodulefile commands. It especially fixes module specification containing the definition of variants. (fixes issue #626) - Report the full via path for modules on
availandspidersub-commands rather the last part of this via information. JSON output is updated to report theviakey as an array rather as a string. (fix issue #586) - Introduce the
info_extensionconfiguration option to consider that module extensions have a pure informational purpose and no module alias is associated to them. Extensions defined withprovidemodulefile command are not affected by this mechanism. Wheninfo_extensionis changed withconfigsub-command, it sets theMODULES_INFO_EXTENSIONenvironment variable. (fix issue #585) - Doc: add
linked-envvarsdesign notes. - Add the
linked_envvarsconfiguration option to apply the same value update commands to all linked environment variables. Whenlinked_envvarsis changed withconfigsub-command, it sets theMODULES_LINKED_ENVVARSenvironment variable. (fix issue #609) - Doc: add
init-envvarsdesign notes. - Add the
init_envvarsconfiguration option to define initial values to assign to environment variables before they are modified for the first time. This option can be changed at installation time with--with-init-envvars. Wheninit_envvarsis changed withconfigsub-command, it sets theMODULES_INIT_ENVVARSenvironment variable. (fix issue #572) - Enable lexical binding in Emacs addon file. (contribution from Peter Oliver)
- Script: update
mtutility to analyze test suite log file when test suite run is aborted. - Correctly match loaded modules specified as requirement with a trailing
/character after module name. (fix issue #640) - Also consider
-in addition to.as a version number separator character when selecting a module with theextended_defaultmechanism. (fix issue #619) - Rename Modules initialization script for Python
env_modules.pyto make it a proper Python module name. - Rename the Python initialization script to
env_modules.pyso that it uses a valid Python module name. Generates apython.pysymlink ontoenv_modules.pyto preserve compatibility. (contribution from Byron Boulton) - Install: introduce the
--enable-set-pythonpathinstallation option to prepend Modulesinitdirectory to thePYTHONPATHenvironment variable during Modules initialization. This option is enabled by default and make it easier to import theenv_modulesPython module. (fix issue #483 with contribution from Byron Boulton) - Install: add the
--enable-append-pythonpathinstallation option, which causes--enable-set-pythonpathto append the Modulesinitdirectory toPYTHONPATHinstead of prepending it. (contribution from Byron Boulton) - Doc: clarify shell script, executed by
source-shmodulefile command orsh-to-modsub-command, does not get access to shell aliases, functions or completions settings only available in interactive sessions or defined in profile files. (fix issue #646) - Report a global known error when Modules Tcl extension library cannot be loaded. (fix issue #644)
- Add
domainnameconfiguration option to define the command to run to fetch domain name. It can be changed at installation time with--with-domainnameand--with-domainname-optsoptions. Whendomainnameis changed withconfigsub-command, it sets theMODULES_DOMAINNAMEenvironment variable. (fix issue #645) - Update the
source-shmodulefile command andsh-to-modsub-command mechanism to produce a more consistent value for a path-like environment variable change that requires both a prepended and an appended part expressed with a different delimiter character: asetenvcommand is now generated instead in this situation. - Update the
source-shmodulefile command andsh-to-modsub-command mechanism to no longer de-duplicate a path entry found several times in the entries it prepends or in the entries it appends, and to add the--duplicatesoption on a generatedprepend-pathorappend-pathcommand when one of the path entries it adds is already found in the variable value prior script evaluation, is found several times in the entries it adds or is found in both the entries it prepends and the entries it appends, so this entry is not silently absorbed by these commands' default de-duplication behavior nor relocated by thepath_entry_reorderconfiguration option. - Resolve an exact
name/versionspecification without validating every sibling modulefile found in its directory, by walking versions from the dictionary-highest to the dictionary-lowest and stopping as soon as the implicitdefaultandlatestsymbolic versions are settled. A substantial performance improvement is observed when loading an existing modulefile out of a directory holding hundreds or thousands of sibling versions. (fix issue #561) - Doc: add
module-find-and-resolutiondesign notes. - Doc: add
devel-testsuiteguide describing the DejaGnu testsuite structure. - Doc: document and cross-reference
commit-message-conventionsinCONTRIBUTING. - Doc: document
code-commentsconventions inCONTRIBUTING. - Doc: add
devel-ciguide describing continuous integration usage. - Install: rename the shipped
COPYING.GPLv2license file toCOPYING, the name convention recognized by packaging tools. - Doc: fix favicon rendering with a black background instead of white on viewers that ignore transparency, by setting its transparent pixels to a white matte color instead of black.
- Doc: document Windows Terminal profile setup as an alternative way to initialize Modules on Windows without an install script. (fix issue #634)
- Install: use
reg addinstead ofsetx /Mto persist the system-widePATHenvironment variable inINSTALL.batandUNINSTALL.bat, assetxsilently truncates the value it writes to 1024 characters, which could corrupt the systemPATHwhen installing from a shell with an already long inheritedPATH(e.g. a Visual Studio Developer Prompt). (fix issue #654) - Doc: add
hook-apidesign notes. - Add the
add-hooksiteconfig command to register a procedure on one of 4 stable hook events (before-modulefile-eval,after-modulefile-eval,before-modulerc-eval,after-modulerc-eval), so sites no longer need to rely ontraceor procedure renaming, which bind to internal implementation details, to run code before or after a modulefile or modulerc evaluation. (fix issue #607) - Doc: add
add-new-hook-eventguide describing how to contribute a new hook event. - Doc: add
sync-remote-appdircookbook recipe. - Testsuite: add completion testsuite to validate shell Tab completion of this project. This testsuite can be invoked with
make testcompletionorscript/mt comp. It drives a real bash, zsh, fish or tcsh session through Expect to press the Tab key against the built shell completion script and check the resulting candidate list. - Init: fix numerous inconsistencies between
module help's usage message and the option flags and positional arguments each sub-command actually accepts, and between that usage message and what bash, fish, tcsh and zsh Tab completion offer for each sub-command. Guarded against regressing with a new ground-truth check in the completion testsuite that comparesmodule/mlTab completion against the sub-commands, switches, options and argument kinds parsed straight out ofmodule help. - Init: no longer offer the legacy
initadd,initclear,initlist,initprependandinitrmsub-commands as Tab completion candidates (bash, fish, tcsh, zsh), sincemodule helpdoes not document them. - Testsuite: add cookbook testsuite to validate the recipes documented under
cookbook. This testsuite can be invoked withmake testcookbookorscript/mt cook. It builds a sandboxed fixture from the exact files a recipe ships underdoc/example/, then runs the commands demonstrated in the recipe'sUsage exampledocumentation in order and checks that similar output is obtained. Currently covers thesync-remote-appdirrecipe. - Doc: add
modulepath-ignoredesign notes. - Add
modulepath-ignoremodulefile command to define, from rc files, gitignore-style patterns describing modulepath content to ignore when searching for modulefiles. Ignored files and directories are handled as if they do not exist: they are not checked, not walked down, not reported and not recorded in modulepath cache file. Addmodulepath_ignoreconfiguration option and--no-modulepath-ignorecommand line switch to control whether pattern definitions are applied. (fix issue #562) - Install: add the
--with-pythondirinstallation option to define the directory where to install theenv_modulesPython module. It enables for instance to installenv_modules.pywith the other Python modules available on the system. When this option is set,--enable-set-pythonpathadds this directory toPYTHONPATHinstead of the Modulesinitdirectory. (fix issue #643) - Introduce
ignore_cache_subcmdsconfiguration option that defines a list of module sub-commands on which module cache files are ignored. It is useful when cache files are large: a sub-command targeting specific modules (likeload) may find them faster by walking through modulepath directories than by evaluating whole cache files. Whenignore_cache_subcmdsis changed withconfigsub-command, it sets theMODULES_IGNORE_CACHE_SUBCMDSenvironment variable. (fix issue #563) - Protect the creation of the Tcl sub-interpreters used to evaluate modulercs and modulefiles with the quarantine mechanism. Environment variables listed in the
run_quarantineconfiguration option are unset or set to the value of their correspondingMODULES_RUNENV_\<VAR\>variable during this creation step, then restored to their original value. (fix issue #623) - Doc: adopt the Linux kernel policy on
ai-coding-assistantsinCONTRIBUTING: AI agents must never add their ownSigned-off-by:trailer and their involvement must be disclosed with anAssisted-by:trailer. - Doc: add the
user-guidedocument that explains a selection of useful but lesser known features through practical examples and common use cases. - Init: fix command injection in Bash completion when module names contain shell meta-characters. Completion candidates were passed to
compgen -Wwhich evaluates command substitution syntax. (fix CVE-2026-85013 found by AISLE in partnership with Red Hat) - Accept abbreviated upper bounds in version ranges such as
@3.20:3to select versions starting at3.20within major version3. (fix issue #698) - Fix resolution of relative path entries in
MODULEPATHwhen a module is loaded during a modulefile evaluation. Such entry was resolved against the directory of the evaluating modulefile rather than against the current working directory. A relative directory argument of theis-usedmodulefile command or of theunusesub-command is also resolved against the current working directory to recognize such entry whatever its form. - Keep non-sticky requirements of sticky modules loaded during a
purgeand explicitly report why their unload is skipped according to thesticky_purgeconfiguration. (fix issue #582) - Fix internal error raised by
switchsub-command when the unload of the switched-off module fails after some of its dependent modules were unloaded for reload, and switch sequence continues asswitch_unloadis not set inabort_on_error. Dependent modules restored by the failed unload are not reloaded anymore.