NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2177 most downloaded on PyPI
Automagic shell tab completion for Python CLI applications
Last release 1 months ago
01 Sep 2026
Release timing varies
gaps range from 8 days to 1.1 years
Most releases are documented
notes for 51 of 57 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
57 releases · first in 2020
One column per quarter.
💬 escape all PowerShell single-quote characters
📚 add helpful headers (instructions to end-users) to generated scripts
bash completion mid-command (#248 <- #116)bash: drop global compopt -o filenames (#250 <- #67)zsh: metavar overrides destzsh & fish: description overrides help, rewrap descriptionstcsh: respect help=SUPPRESSchoices: dict without confusing with subparsers (#214 -> #220)zsh positional ordering (#251 <- #123)bash completion mid-command (#248 <- #116)bash: drop global compopt -o filenames (#250 <- #67)zsh: metavar overrides destzsh & fish: description overrides help, rewrap descriptionstcsh: respect help=SUPPRESSchoices: dict without confusing with subparsers (#214 -> #220)zsh positional ordering (#251 <- #123)soft-deprecate complete(preamble: dict)
shtab.glob & shtab.cmd (e.g. glob("*.y*ml", "*.toml") & cmd("git branch")) (#226, #242 <- #240)
complete(preamble: dict)bash redirection (e.g. >&2) detection (#211)tcsh (sub)command completions (#247, #241 <- #236)fish: support shtab.FILE outside current directory (#246 <- #245).complete overrides choices (#239)bash: fix add_argument("--optional", help=SUPPRESS) (#211)bash<4 support (#244 <- #235, #196)fish<4 flags (#239)tcsh pty forks (#247)shtab.glob & shtab.cmd (e.g. glob("*.y*ml", "*.toml") & cmd("git branch")) (#226, #242 <- #240)
complete(preamble: dict)bash redirection (e.g. >&2) detection (#211)tcsh (sub)command completions (#247, #241 <- #236)fish: support shtab.FILE outside current directory (#246 <- #245).complete overrides choices (#239)bash: fix add_argument("--optional", help=SUPPRESS) (#211)bash<4 support (#244 <- #235, #196)fish<4 flags (#239)tcsh pty forks (#247)⚒️ misc tcsh improvements & fixes
tcsh improvements & fixes (#213)
.complete in the multi-requirement branch--opt=<TAB> for options taking a value (nargs != 0)fish backend (#232)
FILE missing filenames & options unintentionally completing filenames (#227)fish descriptions (#233 <- #231)
%(prog)s)help fallback if description missingcaplog (#237)diff examples output summary (#234)tcsh improvements & fixes (#213)
.complete in the multi-requirement branch--opt=<TAB> for options taking a value (nargs != 0)fish backend (#232)
fish descriptions (#233 <- #231)
%(prog)s)help fallback if description missingcaplog (#237)diff examples output summary (#234)🤦 revert to original (shtab<=1.8.1) zsh space/quote handling (#225 <- #224, #196)
shtab<=1.8.1) zsh space/quote handling (#225 <- #224, #196)zsh edge cases
nargs=0 (#221 <- #215)- 🐟 fix fish preamble (#222) - 👾 fix bash bug (#196) - 📚 slight docs tidy & refactor - 🛠️ minor CI framework updates
fish preamble (#222)bash bug (#196)🐟 support fish shell! (#216 <- #195, #174, #134, #196)
fish shell! (#216 <- #195, #174, #134, #196)shtab --verbose CLI behaviour (#223)git-fame generated contributors list- 💬 bash: fix quoting (#196) - 🔍 bash/docs: minor typo (#208) - 📩 zsh: fix optional message (#218) - 🛠️ misc: framework updates
bash: fix quoting (#196)bash/docs: minor typo (#208)zsh: fix optional message (#218)🛠️ misc framework updates (#217, #205, #194)
❓ fix bash error on optional nargs="?" (#184 <- #181)
bash error on optional nargs="?" (#184 <- #181)zsh duplicate default remainder & swapped one_or_more/remainder (#200 <- #183, #198)bash error on optional nargs="?" (#184 <- #181)zsh duplicate default remainder & swapped one_or_more/remainder (#200 <- #183, #198)▶️ bash: fixed redirection (>) handling
>) handling (#182)🎉 support -- delimeter in bash (#164 <- #163)
-- delimeter in bash (#164 <- #163)🎉 allow eval "$(my-prog --print-completion zsh)"
eval "$(my-prog --print-completion zsh)" (#159)🔨 Minor type hint updates & fixes
bash variable leaks (#147)🔨 misc bash safety fixes (#145, #144, #143) by @scop, author of `bash-completion` ❤️
bash safety fixes (#145, #144, #143) by @scop, author of bash-completion ❤️pre-commit & automate its CI config🎉 expand help '%(variables)' in zsh (#140 <- #104, #46)
'%(variables)' in zsh (#140 <- #104, #46)tcsh🔨 fix zsh completion not allowing single-letter stacking
zsh completion not allowing single-letter stacking (#137)tcsh completion for --double-hyphen-only args (#112)setup.{cfg,py} => pyproject.toml*.whl package data📚 docs: fix hyperlinks & cleanup reference descriptions
🎉 add shtab --print-own-completion (#114 <- #89)
shtab --print-own-completion (#114 <- #89)🎉 support ONE_OR_MORE, ZERO_OR_MORE
REMAINDER (#90)ONE_OR_MORE, ZERO_OR_MORE (#91)PrintCompletionAction terminate completion suggestions (#92)- 🎉 support py3.10 - 📚 update docs URLs - 🛠️ bump pre-commit & actions (#118) - 🛠️ fix external PR tests
🎉 support zsh subcommands with hyphens
zsh subcommands with hyphens (#108)bash subcommand completion (#106 <- #86):hammer: fix bash completion with space (#81 <- #74)
:tada: add zsh subcommand support
zsh subcommand support (#73):tada: add basic type hints support (#60 <- #59)
:hammer: remove unneeded shebang
:hammer: skip hidden arguments on tcsh
tcsh (#58)examples/customcomplete.py:tada: add tcsh completion & docs (#57 <- #56)
tcsh completion & docs (#57 <- #56)--verbose flagexamples/customcomplete.py:books: add documentation website https://docs.iterative.ai/shtab
string.Template (#53):hammer: fix zsh non-str choices
str choices (#48):hammer: skip hidden (add_help=False) subcommands
add_help=False) subcommands (#47):tada: more robust bash completion (#38 <- #37, #11)
bash completion (#38 <- #37, #11):hammer_and_wrench: misc build framework updates
preamble support (#42)🛠️ minor build framework updates (#39 <- #40)
:tada: bash: cleaner file/dir completions
:hammer: fix zsh positional multi-arg error (#35 <- #29)
zsh positional multi-arg error (#35 <- #29):hammer_and_wrench: build & tests framework upgrades
:hammer_and_wrench: major build framework upgrade
:hammer: fix add_argument_to(subparser)
add_argument_to(subparser) (#25)
parent=None to ensure parent (rather than subcommand) is completed:hammer: fix bash>=4.4 bad substitution (#23 <- #22)
bash>=4.4 bad substitution (#23 <- #22):tada: allow periods in script names (#21 <- #20)
script.py (not just console entrypoints such as script)./script.py (explicit local path):hammer: fix bash missing custom complete functionality (add_argument().complete = ...)
add_argument().complete = ...)examples/customcomplete.pyshtab.add_argument_to(parser, option_string) (#18)
your_cli_app [--print-completion={bash,zsh}]your_cli_app completion [{bash,zsh}]print(shtab.complete(parser, shell)) & exit(0) logic tooSUPPORTED_SHELLS:tada: search curdir for modules (#17 <- #12)
--prog override (#16):hammer: fix AssertionError on valid choices (#15 <- #14)
AssertionError on valid choices (#15 <- #14)add new custom-complete API add_argument().complete = shtab.FILE or shtab.DIR or dict(zsh=..., bash=...)
add_argument().complete = shtab.FILE or shtab.DIR or dict(zsh=..., bash=...) (#9)
bashzshREADME.rstexamples/*.pychoices APIuse_scm_version to auto-detect version via setuptools-scm if possible
--version
use_scm_version to auto-detect version via setuptools-scm if possibleComment Bot action
/tag vM.m.p SHA comments for releasing!re-fix argparse dependency for py<2.7 and 3.0<=py<3.2 (#7, #6 <- #5)
argparse dependency for py<2.7 and 3.0<=py<3.2 (#7, #6 <- #5)fix argparse dependency on py<3.2 (#5 -> #6)
argparse dependency on py<3.2 (#5 -> #6)zsh: fix subcommands containing hyphens -
- (#4)Check out https://github.com/iterative/shtab for documentation.
shtab release! :confetti_ball:Check out https://github.com/iterative/shtab for documentation.
-- much tab such complete :100: :tada:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →