NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #5325 most downloaded on PyPI
doit - Automation Tool
Last release 7 months ago
09 Feb 2026
Ships unpredictably
gaps range from 2 weeks to 3.8 years
Nearly every release is documented
notes for 49 of 49 stable releases
Nothing withdrawn
no release was ever pulled
18 years old
49 releases · first in 2008
BACKWARD INCOMPATIBLE: drop Python 3.8 and 3.9 support. Minimum is 3.10.
io.capture respects out/err option.clean --clean-all cleans all even if default tasks are specified.BACKWARD INCOMPATIBLE: remove deprecated doit.cmd_base.py:TaskLoader.
doit.cmd_base.py:TaskLoader.toml package, use tomli instead.auto command, use plugin doit-auto1.doit[plugins].UnmetDependency, SetupError and DependencyError as sub-class of TaskError.CatchedException, renamed to BaseFail.pos_arg.error-onlyreport to BaseFail. Controls if reporter should create own output for failures.
If False relies on underlying action to output failure information.One column per quarter.
BACKWARD INCOMPATIBLE: Drop Python 3.6 support.
create_doit_tasks does NOT automatically ignored when processing class.clean: add support for wildcard *.TaskLoader2.task_opts attribute.
This is passed to task creator and also as task config.metavar attribute.actions.py:Writer, add support for fileno(). Taken from original stream.create_doit_tasks supports basename attribute.io; add io.capture.api.py::run_tasks()Fix #416: compare task_params using is operator.
task_params using is operator.Fix #410: if TOML lib not present, just print warning instead of raising error.
BACKWARD INCOMPATIBLE: Drop Python 3.5 support
started include microsecond as decimal number.setuptools as extras_require.meta.--disable-default and --all.create_after decorator to be used on methods.@task_params decorator.fix sdist distribution to include all files
BACKWARD INCOMPATIBLE: Drop Python 3.4 support
BACKWARD INCOMPATIBLE: Changed signature of DoitCommand
DoitCommanddependencies, targets and changed are a copied listcodec_cls--pdb drop into pdb on unhandled exception on PythonActiondodo.py file name with env var DOIT_FILEtools.config_changed deals with nested dictionaries.
Using json instead of repr.doit list now has a --sort parameter to determine the order in which the tasks are listed.DOIT_CONFIG action_string_formatting to control command action formatter.result_dep, use result after its executionfunctools.partial on tasks' dict metadata task.titleclean command, remove targets in reverse lexical orderTaskLoader in favor of TaskLoader2, which separates loading doit's configuration from loading tasks.doit.globals.Globals.dep_manager to access dependency manager during all task processing phases.Fix #249 reporter bug when using --continue option
--continue optionget_var fails on multiprocess execution on Windowsclean action takes dry-run into accountBACKWARD INCOMPATIBLE: Drop Python 3.3 support
seek_file control by ENV var DOIT_SEEK_FILEload_ipython_extension--forget can be used to also forget about cleaned tasksmock from stdlibinfo commandclean and teardown task paramsfile_depverbosity has precedence over verbosity from configfailure-verbosity. ConsoleReporter, by default,
do not print stderr twice.selected_tasks to Reporter.initialize()kwargsclean ordering, and following implicit task_depstask_depTask.is_subtask use Task.subtask_of insteadRevert usage of setuptools environment markers (feature too new)
Fix dependency on pathlib from PyPi
pathlib from PyPiFix GH-#159 KeyError on doit list --status when missing file dependency
BACKWARD INCOMPATIBLE: #112 drop python2 compatibility
file_dep, targets and CmdAction support pathlib.completion output deterministiclist command does not display task-doc for DelayedTask
when creates is specifiedauto command on OS-X systemsBACKWARD INCOMPATIBLE: revert - result_dep to create an implicit task_dep
result_dep to create an implicit task_deplist issue with unicode namescompletion escaping of apostrophes in zsh--always-execute and setup tasksDelayedLoader parameter target_regexDelayedLoader parameter createsRun add option --auto-delayed-regexinfo add option --status show reason a task is not up-to-dateauto support custom ( user specified ) commands to be executed
after each task executionBACKWARD INCOMPATIBLE: signature for custom DB backend changed
DoitMain API changeCommand API changedefault reporter renamed to consolereset-dep command to recompute dependencies state%doit magic-function loading tasks from its global
namespacerun commandminversion on python 2uptodate checks are executed (no short-circuit)BACKWARD INCOMPATIBLE: drop python 2.6 support
result_dep creates an implicit setup
(was task_dep)getargs creates an implicit result_depCmdAction would always decode process output
using errors='strict' default changed to replaceauto (linux) inotify also listen for MOVE_TO eventsCmdAction added parameters encoding and decode_errorloader.task_loader() accepts methods as task creatorsmoved development to git/github
uptodate callable "magic" arguments task and values are now optionalinfo to display task metadataclean smarter execution orderstrace short option -k because it conflicts with run optiondoit scriptentry_pointsBACKWARD INCOMPATIBLE: use function doit.get_initial_workdir() instead of variable doit.initial_workdir
doit.get_initial_workdir()
instead of variable doit.initial_workdirtools.InteractiveAction renamed to tools.LongRunningstrace raises InvalidCommand instead of using assertuptodate support string to be executed as shell commandtools.Interactive for use with interactive commandsrunruncmd list: added option --template
initialize()list: added option --templatedoit.initial_workdirisatty() to action.Writertabcompletion for bash and zshsupport definition of group tasks using basename without any task
watch to specific extra files/folders in auto command-k as short for --seek-filefix reporter output in py3 was being displayed as bytes instead of string
fix #49: skip unicode tests on systems with non utf8 locale
uptodate codefix race condition on CmdAction (affected only python>=3.3.1)
fix #38: doit.tools.create_folder() raise error if file exists in path
doit.tools.create_folder() raise error if file exists in pathcreate_doit_tasks not called for unbound methods2to3)BACKWARD INCOMPATIBLE getargs for a group task gets a dict where each key is the name of subtasks (previously it was a list)
dumpdbCmdAction.save_out paramCmdAction support for callable that returns a command stringgetargs for a group task gets a dict where
each key is the name of subtasks (previously it was a list)straceauto run tasks on separate processadded support to load tasks using create_doit_tasks
doit help <task-name>create_doit_tasksfix bug cmd option --continue not being recognized
remove DEPRECATED Task.insert_action, result_dep and getargs using strings
Task.insert_action, result_dep and getargs using stringsDEPRECATE task attribute result_dep (use tools.result_dep)
forget command on gdbm backendresult_dep (use tools.result_dep)getargs specification using strings (must use 2-element tuple)uptodateTask.insert_action (replaced by Task.value_savers)clean cleans all subtasks from a group-taskclean added flag --all to clean all tasksclean when no task is specified set --clean-dep and clean default tasksfix multiprocessing/parallel bug
DEPRECATE getargs being specified as .
basenamedoit process return value 3 in case tasks do start executing (reporter is not used)getargs take a tuple with 2 values (task_id, key_name)getargs being specified as <task_id>.<key_name>getargs can take all values from task if specified as (task_id, None)getargs will pass values from all sub-tasks if specified task is a group taskdoit.tools.PythonInteractiveActionadded genstandalone.py to create a standalone doit script
doit script (#891935)sub-command list: tasks on alphabetical order, better formatting
uptodate to accept instance methods callables (#871967)--seek-filetools.check_unchanged_timestamp (#862606)fix bug on unicode output when task fails
_tools.config_changed (to be used with uptodate)teardown actions are executed in reverse order they were registereddoit.get_var to get variables passed from command linedeprecate task attribute run_once. use tools.run_once on uptodate instead
uptodate accepts callablesfix bug on unicode filenames & unicode output
deprecate file_dep bool values and None
deprecate 'dependencies'. use file_dep, task_dep, result_dep.
parallel execution of tasks (multi-process support)
configure options on dodo file (deprecate DEFAULT_TASKS)
improve (speed optimization) of check if file modified
fix. task-result-dependencies should be also added as task-dependency to force its execution.
task parameter 'clean' == True, cleans empty folders, and display warning for non-empty folders
deprecate anything other than a boolean values as return of python actions
added subcommand "forget" to clear successful runs status
execute once (dependency = True)
- initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →