Changelog
Version 26.0.0
Released on February 18, 2026
Improvements
Asynchronous task execution: Otter now supports both synchronous and asynchronous tasks, with improved run logic and better coordination by using pull-style workers and a more robust process pool management system (@086911a, @b5d7dea, @2c8f37e, @f0e697e)
Improved storage handling: File operations are now handled through “StorageHandle” and “AsyncStorageHandle” classes which provide a consistent interface for local and cloud storage. (@aa6da20, @7e84c40, @dc2e4d2, @0c37f92, @6e62d59)
New copy_many task for batch operations: A new builtin task enables efficient copying of multiple files at once. This task is better suited for copying a large amount (100+) of relatively small (tens of MB) files. It avoids spawning a new process and a new client for each file. It supports passing a list of sources, a path to a file with a list of sources, or a glob (when copying from backends that can handle those, like cloud services). (@db0a2b9, @917e91f, @21a707e)
Bugfixes
Do not fail validation when file size cannot be determined (@8a3164f)
Fix
find_latesttask functionality (@b5d774d)Fix Google Cloud Storage glob pattern handling (@5de3d9d)
Fix scratchpad and add comprehensive tests (@1b26ee2)
Ensure mtime changes are properly tracked (@991bb9e, @71ee4d8)
Fix help not showing defaults (@4c8e07f)
Internal Changes
Switch to IOBase for improved I/O handling (@8b344f3)
Refactor builtin tasks for improved maintainability (@eb9701b)
Refactor manifest handling (@58a4a9e)
Make async and improve run logic (@086911a)
Remove gsheets special case and clean logs (@522e899)
Logger rename for clarity (@3fa8456)
Update dependencies and fix linting and tests (@3792e29)
Ensure process pool is larger than one (@f4a9be2)
Update dependencies (@50456a5)
Simplify download method (@87318af)
Switch to ty type system with type checking improvements (@3d29142, @4262c9c)
Update documentation (@843d36e)