
****************************
  What's New In Python 3.13
****************************

:Release: |release|
:Date: |today|

.. Rules for maintenance:

   * Anyone can add text to this document.  Do not spend very much time
   on the wording of your changes, because your text will probably
   get rewritten to some degree.

   * The maintainer will go through Misc/NEWS periodically and add
   changes; it's therefore more important to add your changes to
   Misc/NEWS than to this file.

   * This is not a complete list of every single change; completeness
   is the purpose of Misc/NEWS.  Some changes I consider too small
   or esoteric to include.  If such a change is added to the text,
   I'll just remove it.  (This is another reason you shouldn't spend
   too much time on writing your addition.)

   * If you want to draw your new text to the attention of the
   maintainer, add 'XXX' to the beginning of the paragraph or
   section.

   * It's OK to just add a fragmentary note about a change.  For
   example: "XXX Describe the transmogrify() function added to the
   socket module."  The maintainer will research the change and
   write the necessary text.

   * You can comment out your additions if you like, but it's not
   necessary (especially when a final release is some months away).

   * Credit the author of a patch or bugfix.   Just the name is
   sufficient; the e-mail address isn't necessary.

   * It's helpful to add the issue number as a comment:

   XXX Describe the transmogrify() function added to the socket
   module.
   (Contributed by P.Y. Developer in :gh:`12345`.)

   This saves the maintainer the effort of going through the VCS log
   when researching a change.

This article explains the new features in Python 3.13, compared to 3.12.

For full details, see the :ref:`changelog <changelog>`.

.. note::

   Prerelease users should be aware that this document is currently in draft
   form. It will be updated substantially as Python 3.13 moves towards release,
   so it's worth checking back even after reading earlier versions.


Summary -- Release highlights
=============================

.. This section singles out the most important changes in Python 3.13.
   Brevity is key.


.. PEP-sized items next.



New Features
============



Other Language Changes
======================



New Modules
===========

* None yet.


Improved Modules
================


Optimizations
=============




Deprecated
==========



Removed
=======

* :pep:`594`: Remove the :mod:`!telnetlib` module, deprecated in Python 3.11:
  use the projects `telnetlib3 <https://pypi.org/project/telnetlib3/>`_ or
  `Exscript <https://pypi.org/project/Exscript/>`_ instead.
  (Contributed by Victor Stinner in :gh:`104773`.)

* Remove the ``2to3`` program and the :mod:`!lib2to3` module,
  deprecated in Python 3.11.
  (Contributed by Victor Stinner in :gh:`104780`.)

* Namespaces ``typing.io`` and ``typing.re``, deprecated in Python 3.8,
  are now removed. The items in those namespaces can be imported directly
  from :mod:`typing`. (Contributed by Sebastian Rittau in :gh:`92871`.)

* Remove the untested and undocumented :mod:`webbrowser` :class:`!MacOSX` class,
  deprecated in Python 3.11.
  Use the :class:`!MacOSXOSAScript` class (introduced in Python 3.2) instead.
  (Contributed by Hugo van Kemenade in :gh:`104804`.)

* Remove support for using :class:`pathlib.Path` objects as context managers.
  This functionality was deprecated and made a no-op in Python 3.9.

* Remove the undocumented :class:`!configparser.LegacyInterpolation` class,
  deprecated in the docstring since Python 3.2,
  and with a deprecation warning since Python 3.11.
  (Contributed by Hugo van Kemenade in :gh:`104886`.)

* Remove the :meth:`!turtle.RawTurtle.settiltangle` method,
  deprecated in docs since Python 3.1
  and with a deprecation warning since Python 3.11.
  (Contributed by Hugo van Kemenade in :gh:`104876`.)

* Removed the following :mod:`unittest` functions, deprecated in Python 3.11:

  * :func:`!unittest.findTestCases`
  * :func:`!unittest.makeSuite`
  * :func:`!unittest.getTestCaseNames`

  Use :class:`~unittest.TestLoader` methods instead:

  * :meth:`unittest.TestLoader.loadTestsFromModule`
  * :meth:`unittest.TestLoader.loadTestsFromTestCase`
  * :meth:`unittest.TestLoader.getTestCaseNames`

  (Contributed by Hugo van Kemenade in :gh:`104835`.)

* :pep:`594`: Remove the :mod:`!cgi`` and :mod:`!cgitb` modules,
  deprecated in Python 3.11.

  * ``cgi.FieldStorage`` can typically be replaced with
    :func:`urllib.parse.parse_qsl` for ``GET`` and ``HEAD`` requests, and the
    :mod:`email.message` module or `multipart
    <https://pypi.org/project/multipart/>`__ PyPI project for ``POST`` and
    ``PUT``.

  * ``cgi.parse()`` can be replaced by calling :func:`urllib.parse.parse_qs`
    directly on the desired query string, except for ``multipart/form-data``
    input, which can be handled as described for ``cgi.parse_multipart()``.

  * ``cgi.parse_multipart()`` can be replaced with the functionality in the
    :mod:`email` package (e.g. :class:`email.message.EmailMessage` and
    :class:`email.message.Message`) which implements the same MIME RFCs, or
    with the `multipart <https://pypi.org/project/multipart/>`__ PyPI project.

  * ``cgi.parse_header()`` can be replaced with the functionality in the
    :mod:`email` package, which implements the same MIME RFCs. For example,
    with :class:`email.message.EmailMessage`::

        from email.message import EmailMessage
        msg = EmailMessage()
        msg['content-type'] = 'application/json; charset="utf8"'
        main, params = msg.get_content_type(), msg['content-type'].params

  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!sndhdr` module, deprecated in Python 3.11: use
  the projects `filetype <https://pypi.org/project/filetype/>`_, `puremagic
  <https://pypi.org/project/puremagic/>`_, or `python-magic
  <https://pypi.org/project/python-magic/>`_ instead.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!pipes` module, deprecated in Python 3.11:
  use the :mod:`subprocess` module instead.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!ossaudiodev` module, deprecated in Python 3.11:
  use the `pygame project <https://www.pygame.org/>`_ for audio playback.
  (Contributed by Victor Stinner in :gh:`104780`.)

* :pep:`594`: Remove the :mod:`!sunau` module, deprecated in Python 3.11.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!mailcap` module, deprecated in Python 3.11.
  The :mod:`mimetypes` module provides an alternative.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!spwd` module, deprecated in Python 3.11:
  the `python-pam project <https://pypi.org/project/python-pam/>`_ can be used
  instead.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!nntplib` module, deprecated in Python 3.11:
  the `PyPI nntplib project <https://pypi.org/project/nntplib/>`_ can be used
  instead.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!nis` module, deprecated in Python 3.11.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!xdrlib` module, deprecated in Python 3.11.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!msilib` module, deprecated in Python 3.11.
  (Contributed by Zachary Ware in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!crypt` module and its private :mod:`!_crypt`
  extension, deprecated in Python 3.11.
  The :mod:`hashlib` module is a potential replacement for certain use cases.
  Otherwise, the following PyPI projects can be used:

  * `bcrypt <https://pypi.org/project/bcrypt/>`_:
    Modern password hashing for your software and your servers.
  * `passlib <https://pypi.org/project/passlib/>`_:
    Comprehensive password hashing framework supporting over 30 schemes.
  * `argon2-cffi <https://pypi.org/project/argon2-cffi/>`_:
    The secure Argon2 password hashing algorithm.
  * `legacycrypt <https://pypi.org/project/legacycrypt/>`_:
    Wrapper to the POSIX crypt library call and associated functionality.

  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!uu` module, deprecated in Python 3.11:
  the :mod:`base64` module is a modern alternative.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!aifc` module, deprecated in Python 3.11.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!audioop` module, deprecated in Python 3.11.
  (Contributed by Victor Stinner in :gh:`104773`.)

* :pep:`594`: Remove the :mod:`!chunk` module, deprecated in Python 3.11.
  (Contributed by Victor Stinner in :gh:`104773`.)

* Remove support for the keyword-argument method of creating
  :class:`typing.TypedDict` types, deprecated in Python 3.11.
  (Contributed by Tomas Roun in :gh:`104786`.)

* :pep:`594`: Remove the :mod:`!imghdr` module, deprecated in Python 3.11:
  use the projects
  `filetype <https://pypi.org/project/filetype/>`_,
  `puremagic <https://pypi.org/project/puremagic/>`_,
  or `python-magic <https://pypi.org/project/python-magic/>`_ instead.
  (Contributed by Victor Stinner in :gh:`104773`.)

* Remove the untested and undocumented :meth:`!unittest.TestProgram.usageExit`
  method, deprecated in Python 3.11.
  (Contributed by Hugo van Kemenade in :gh:`104992`.)

* Remove the :mod:`!tkinter.tix` module, deprecated in Python 3.6.  The
  third-party Tix library which the module wrapped is unmaintained.
  (Contributed by Zachary Ware in :gh:`75552`.)



Porting to Python 3.13
======================

This section lists previously described changes and other bugfixes
that may require changes to your code.


Build Changes
=============


C API Changes
=============

New Features
------------

Porting to Python 3.13
----------------------

Deprecated
----------

Removed
-------

