NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1115 most downloaded on PyPI
Typing stubs for Markdown
Last release 2 months ago
12 Jul 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
73 releases · first in 2021
One column per quarter.
Avoid class-scope name collisions in stubs
Avoid class-scope name collisions in stubs (#15994)
Class members such as list, type, cursor, Model, and datetime shadow the builtins, classes, or modules referenced by nearby annotations. ty then resolves those annotations to Unknown, which can hide invalid calls in APIs including docker, sqlite3, psycopg2, Markdown, and requests.
Qualify shadowed builtins and use private aliases for colliding imports and classes. This removes 15 stdlib and 120 third-party collision diagnostics under ty 0.0.58, restores the affected public types, and fixes four existing psycopg2 type assertions.
Upgrade black to 26.5.0
Upgrade black to 26.5.0 (#15801)
Drop 3.9 support for third-party packages
Use dashes instead of underscores for METADATA.toml field names
Use dashes instead of underscores for METADATA.toml field names (#15614)
[Markdown] Update to 3.10.2
[Markdown] Update to 3.10.2 (#15414)
[Markdown] Update to 3.10.*
[Markdown] Update to 3.10.* (#14978)
[Markdown] Update to 3.9.*
[Markdown] Update to 3.9.* (#14676)
Mark stub-only private symbols as @type_check_only in third-party stubs
Mark stub-only private symbols as @type_check_only in third-party stubs (#14545)
[Markdown] Add missing stubs
[Markdown] Add missing stubs (#14285)
Annotate markdown.util.get_installed_extensions
Annotate markdown.util.get_installed_extensions (#13822)
[stubsabot] Bump Markdown to 3.8.*
[stubsabot] Bump Markdown to 3.8.* (#13819)
Release: https://pypi.org/pypi/Markdown/3.8 Homepage: https://Python-Markdown.github.io/ Repository: https://github.com/Python-Markdown/markdown Typeshed stubs: https://github.com/python/typeshed/tree/main/stubs/Markdown Changelog: https://python-markdown.github.io/changelog/ Diff: https://github.com/Python-Markdown/markdown/compare/3.7...3.8
Stubsabot analysis of the diff between the two releases:
If stubtest fails for this PR:
Note that you will need to close and re-open the PR in order to trigger CI
Co-authored-by: stubsabot <>
Clarify sequences for markdown stubs
Clarify sequences for markdown stubs (#13686)
Use _ReadableStream from codecs
Use _ReadableStream from codecs (#13167)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sebastian Rittau Co-authored-by: Jelle Zijls
Bump Markdown to 3.7.* (#12565)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sebastian Rittau srittau@rittau.biz Co-authored-by: Jelle Zijlstra jelle.zijlstra@gmail.com
[Markdown] Bump to 3.6.*
[Markdown] Bump to 3.6.* (#11607)
Use PEP 570 syntax in third party stubs
Use PEP 570 syntax in third party stubs (#11554)
markdown: Restore wrongly deleted DoubleTagPattern
markdown: Restore wrongly deleted DoubleTagPattern (#11335)
Update typing_extensions imports in third-party stubs
Update typing_extensions imports in third-party stubs (#11245)
Various improvements to Markdown stubs
Various improvements to Markdown stubs (#10972)
markdown: Accept legacy Pattern in inlinePatterns registry
markdown: Accept legacy Pattern in inlinePatterns registry (#11027)
Signed-off-by: Anders Kaseorg andersk@mit.edu
Various improvements to Markdown stubs
Various improvements to Markdown stubs (#10963)
[stubsabot] Bump Markdown to 3.5.*
[stubsabot] Bump Markdown to 3.5.* (#10851)
Release: https://pypi.org/pypi/Markdown/3.5 Homepage: https://Python-Markdown.github.io/ Repository: https://github.com/Python-Markdown/markdown Changelog: https://github.com/Python-Markdown/markdown/blob/master/docs/change_log/index.md Diff: https://github.com/Python-Markdown/markdown/compare/3.4.4...3.5
Stubsabot analysis of the diff between the two releases:
scripts/gen_ref_nav.py, scripts/griffe_extensions.py.Add an upstream_repository field to METADATA.toml
Add an upstream_repository field to METADATA.toml (#10487)
Closes: #10478
Add partial_stub metadata field
Add partial_stub metadata field (#10157)
Add Markdown.ESCAPED_CHARS to Markdown stubs
Add Markdown.ESCAPED_CHARS to Markdown stubs (#10134)
Various improvements to Markdown stubs
Various improvements to Markdown stubs (#10008)
Add defaults for third-party stubs M-O
Add defaults for third-party stubs M-O (#9956)
Stubtest settings: change ignore_missing_stub default to false
Stubtest settings: change ignore_missing_stub default to false (#9779)
If you're reading about this commit from an autogenerated changelog entry, this should have no user-visible impact on how the stubs are interpreted by a type checker; it's just an internal change to how typeshed's tests work.
Use typing_extensions.Self instead of _typeshed.Self
Use typing_extensions.Self instead of _typeshed.Self (#9702)
This replaced the deprecated markdown.postprocessors.UnescapePostprocessor in https://github.com/Python-Markdown/markdown/pull/1272.
Add markdown.treeprocessors.UnescapeTreeprocessor (#9671)
This replaced the deprecated
markdown.postprocessors.UnescapePostprocessor in
https://github.com/Python-Markdown/markdown/pull/1272.
Signed-off-by: Anders Kaseorg andersk@mit.edu
Replace Any with Incomplete in many places
Replace Any with Incomplete in many places (#9558)
markdown: Specify md type (#8857) Signed-off-by: Anders Kaseorg
markdown: Specify md type (#8857)
Signed-off-by: Anders Kaseorg andersk@mit.edu
Add markdown.util.nearing_recursion_limit
Add markdown.util.nearing_recursion_limit (#8764)
Markdown: BlockProcessor.detab returns a pair of strings
Markdown: BlockProcessor.detab returns a pair of strings (#8586)
[stubsabot] Bump Markdown to 3.4.*
[stubsabot] Bump Markdown to 3.4.* (#8309)
markdown: remove deleted methods of Registry.
markdown: remove deleted methods of Registry. (#8197)
Import Match and Pattern from re, not typing
Import Match and Pattern from re, not typing (#8277)
Markdown: Fix BlockProcessor method return types
Markdown: Fix BlockProcessor method return types (#8166)
Signed-off-by: Anders Kaseorg andersk@mit.edu
markdown: annotate HtmlStash.
markdown: annotate HtmlStash. (#8067)
markdown: remove INSTALLED_EXTENSIONS.
markdown: remove INSTALLED_EXTENSIONS. (#8002)
markdown: add Markdown.registeredExtensions
markdown: add Markdown.registeredExtensions (#7997)
markdown: annotate Registry.__len__().
markdown: annotate Registry.__len__(). (#7986)
markdown: remove __getattr__()
markdown: remove __getattr__() (#7962)
markdown: annotate __deprecated__
markdown: annotate __deprecated__ (#7955)
markdown: Annotate methods of Registry
markdown: Annotate methods of Registry (#7926)
Co-authored-by: Shantanu 12621235+hauntsaninja@users.noreply.github.com
markdown: Annotate parseBoolValue()
markdown: Annotate parseBoolValue() (#7875)
markdown: Annotate code_escape().
markdown: Annotate code_escape(). (#7857)
Markdown: use I/O protocols
Markdown: use I/O protocols (#7851)
markdown: Annotate Registry.get_index_for_name()
markdown: Annotate Registry.get_index_for_name() (#7848)
markdown: isBlockLevel() returns a bool value.
markdown: isBlockLevel() returns a bool value. (#7839)
markdown: @deprecated argument of message is a str.
markdown: @deprecated argument of message is a str. (#7835)
markdown: PY37 is a bool
markdown: PY37 is a bool (#7831)
Add various missing generic arguments
Add various missing generic arguments (#7702)
Co-authored-by: Akuli akuviljanen17@gmail.com
Python 3 stubs: use str instead of typing.Text
Always use _typeshed.Self, where applicable
Always use _typeshed.Self, where applicable (#6880)
Always use _typeshed.Self, where applicable
Revert changes to google-cloud-ndb (ambiguous)
Remove empty line added by script
Revert changes to stubs/python-dateutil/dateutil/relativedelta.pyi
Manually add a few more that the script missed
Improve filelock annotation
Source code here: https://github.com/tox-dev/py-filelock/blob/79ec7b2826e33b982fe83b057f359448b9d966ba/src/filelock/_api.py#L207
opentracing/scope annotationSource code here: https://github.com/opentracing/opentracing-python/blob/3e1d357a348269ef54d67f761302fab93dbfc0f7/opentracing/scope.py#L71
redis/client stubSource code here: https://github.com/redis/redis-py/blob/15f315a496c3267c8cbcc6d6d9c6005ea4d4a4d5/redis/client.py#L1217
redis/lock annotationSource code here: https://github.com/redis/redis-py/blob/15f315a496c3267c8cbcc6d6d9c6005ea4d4a4d5/redis/lock.py#L155
requests/models annotationSource code here: https://github.com/psf/requests/blob/d718e753834b84018014a23d663369ac27d1ab9c/requests/models.py#L653
Nothing published for this version
Use PEP 585 syntax wherever possible
Use PEP 585 syntax wherever possible (#6717)
Add mypy error codes to '# type: ignore' comments
Add mypy error codes to '# type: ignore' comments (#6379)
Add hilite(shebang) argument and return type
Add hilite(shebang) argument and return type (#6316)
Add markdown.blockprocessors.ReferenceProcessor
Add markdown.blockprocessors.ReferenceProcessor (#6270)
Your coding agent can read these notes before it upgrades. Set up the MCP server →