Hi List,
Jug 2.6.0 has been released. You can install/upgrade with:
pip install jug --upgrade
conda-forge version is also updated, so conda/mamba/pixi will all work
with the newer version.
This is mostly a correctness and robustness release, but there are two
changes to task hashing that you should know about before upgrading.
IMPORTANT: cached results will be recomputed in two cases
1. Python 3.14 and 3.15 users. Jug hashes tasks by pickling their
arguments, and Python 3.14 changed pickle's default protocol from 4
to 5. Jug now pins the protocol to 4, so hashes are stable across
Python versions from now on. This is a one-time break for those on
Python 3.14 or 3.15: their task hashes change and cached results will
be recomputed. Python <= 3.13 already used protocol 4 and is
unaffected. This is not ideal, but the alternative would have been to
break hashes for people who are using something older than 3.14.
2. Tasklets built from lambdas. Previously, only the lambda's bytecode
was hashed, so two lambdas that differed only in their constants, the
names they reference, their closure or their default arguments hashed
identically (and could silently return each other's cached results).
Jug now takes all of these into account. This changes the hash of
every Tasklet that uses a lambda, so those will be recomputed.
If neither applies to you, your existing jugdata will keep
working as is.
Other fixes:
- write_task_out now writes numpy arrays in .npy format (they were
silently being pickled before), and numpy arrays of object dtype fall
back to pickle in the file store, as they cannot be saved in numpy's
native format.
- file_store.cleanup() no longer removes the temporary files of workers
that are running concurrently. Running `jug cleanup` while other
workers are active is now safe in this respect.
- `jug cleanup` now reports the number of removed objects and locks
separately.
- Error messages when loading a result fails are more informative (patch
by Justin R. Porter, GH #92).
- dict_store: fix saving to/loading from a file on Python 3, and fix the
wrong exception type raised in cleanup().
- Configuration files are now read as UTF-8 regardless of locale.
- Fix the tput fallback of get_terminal_size, and the help text of `jug
status --cache-file`.
- Removed use of the deprecated abstractproperty.
Full changelog:
https://jug.readthedocs.io/en/latest/history.html
As always, bug reports and feedback are welcome at
https://github.com/luispedro/jug/issues
If you use Jug to generate results for a scientific publication,
please cite:
Coelho, L.P., (2017). Jug: Software for Parallel Reproducible
Computation in Python. Journal of Open Research Software.
5(1), p.30.
https://doi.org/10.5334/jors.161
Since coding agents make it easier to release new versions, expect more
frequent (albeit perhaps smaller) releases going forward.
Best, Luis
--
Luis Pedro Coelho | Queensland University of Technology |
https://luispedro.org https://orcid.org/0000-0002-9280-7885
Recent preprints:
https://doi.org/10.64898/2026.05.11.724158 /
https://doi.org/10.1101/2025.09.17.676595