The two formats are actually the same. This can be confusing but what's called the Info field lists can be considered the reST docstring syntax. If you look carefully at the version number it's been around since Sphinx version 0.4, next if we look at the current Sphinx change list it remits to a change list that predates version 1.0... The earliest mention there is:

Release 0.4 (Jun 23, 2008)

==========================

  • Sphinx now interprets field lists with fields like :param foo: in description units.

If we want to dig further back to the definition of the reST docstring syntax the archives of the Doc-SIG - Python Documentation Special Interest Group would be the way to go, but a good enough overview is given by PEP 256 - Rationale dated 01-Jun-2001. The document that emerged from then and is most frequently cited only makes a loose recommendation:

PEP 257 -- Docstring Conventions

Python is case sensitive and the argument names can be used for keyword arguments, so the docstring should document the correct argument names. It is best to list each argument on a separate line.

To summarize things, the reST docstring syntax consists simply of using reST Field Lists! (the NumPy and Google styles are just different styles of also writing reST Field Lists)!

Field List - reStructuredText Markup Specification

Field lists are mappings from field names to field bodies,

(...)

The interpretation of individual words in a multi-word field name is up to the application. The application may specify a syntax for the field name.

Syntax diagram (simplified):

+--------------------+----------------------+
| ":" field name ":" | field body           |
+-------+------------+                      |
        | (body elements)+                  |
        +-----------------------------------+

It's up to the application to specify the syntax of the field names; so what Sphinx documentation generator specifies for the 2 example syntaxes in the question is that they are equivalent (this does not necessarily hold if you change to a different documentation generator).

Answer from bad_coder on Stack Overflow
🌐
GitHub
gist.github.com › jesugmz › d83b5e9de7ccc16f71c02adf7d2f3f44
Python docstring reStructuredText style · GitHub
Python docstring reStructuredText style · Raw · Python-docstring-restructuredtext-style.rst · Signatures of functions, methods and class constructors can be given like they would be written in Python. Default values for optional arguments can be given (but if they contain commas, they will confuse the signature parser).
🌐
Python
peps.python.org › pep-0287
PEP 287 – reStructuredText Docstring Format | peps.python.org
March 25, 2002 - When plaintext hasn’t been expressive enough for inline documentation, Python programmers have sought out a format for docstrings. This PEP proposes that the reStructuredText markup be adopted as a standard markup format for structured plaintext docume...
Discussions

python - Utilizing Sphinx with reStructuredText formatted docstrings - Stack Overflow
Python is case sensitive and the argument names can be used for keyword arguments, so the docstring should document the correct argument names. It is best to list each argument on a separate line. To summarize things, the reST docstring syntax consists simply of using reST Field Lists! (the NumPy and Google styles are just different styles of also writing reST Field Lists)! Field List - reStructuredText ... More on stackoverflow.com
🌐 stackoverflow.com
Stupid Q: class docstring reStructuredText guide?
Sphinx is probably the most used documentation generator. It has a section about reStructuredText in their docs: https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html More on reddit.com
🌐 r/learnpython
8
1
October 29, 2024
What format do you use for your docstrings?
ReST since that is what is supported natively by Sphinx. Tried Google style docstrings and could never get it to work easily with RTD More on reddit.com
🌐 r/Python
12
11
July 21, 2017
Which docstring format do you prefer?
There's also PEP 257 -- Docstring Conventions . More on reddit.com
🌐 r/learnpython
4
3
May 4, 2021
🌐
Readthedocs
pydoctor.readthedocs.io › en › latest › docformat › restructuredtext_demo › index.html
restructuredtext_demo
Escaping is used to write text that would otherwise be interpreted as reStructuredText markup. ReStructuredText handles escaping with the backslash character. ... The docstring must be declared as a raw docstring: with the r prefix to prevent Python to interpret the backslashes.
🌐
Sphinx
sphinx-doc.org › en › master › usage › restructuredtext › basics.html
reStructuredText Primer — Sphinx documentation
Doctest blocks (ref) are interactive Python sessions cut-and-pasted into docstrings. They do not require the literal blocks syntax.
🌐
JetBrains
jetbrains.com › help › pycharm › using-docstrings-to-specify-types.html
Specify types with docstrings | PyCharm Documentation
September 1, 2025 - Note that for reStructuredText it's possible to specify types in two formats: :param param_type param_name: parameter description (type description is on the same line as the parameter description). :type param_name: param_type (type description is on a separate line) ... Press Ctrl+Alt+S and go to Build, Execution, Deployment | Python Debugger.
Top answer
1 of 2
2

The two formats are actually the same. This can be confusing but what's called the Info field lists can be considered the reST docstring syntax. If you look carefully at the version number it's been around since Sphinx version 0.4, next if we look at the current Sphinx change list it remits to a change list that predates version 1.0... The earliest mention there is:

Release 0.4 (Jun 23, 2008)

==========================

  • Sphinx now interprets field lists with fields like :param foo: in description units.

If we want to dig further back to the definition of the reST docstring syntax the archives of the Doc-SIG - Python Documentation Special Interest Group would be the way to go, but a good enough overview is given by PEP 256 - Rationale dated 01-Jun-2001. The document that emerged from then and is most frequently cited only makes a loose recommendation:

PEP 257 -- Docstring Conventions

Python is case sensitive and the argument names can be used for keyword arguments, so the docstring should document the correct argument names. It is best to list each argument on a separate line.

To summarize things, the reST docstring syntax consists simply of using reST Field Lists! (the NumPy and Google styles are just different styles of also writing reST Field Lists)!

Field List - reStructuredText Markup Specification

Field lists are mappings from field names to field bodies,

(...)

The interpretation of individual words in a multi-word field name is up to the application. The application may specify a syntax for the field name.

Syntax diagram (simplified):

+--------------------+----------------------+
| ":" field name ":" | field body           |
+-------+------------+                      |
        | (body elements)+                  |
        +-----------------------------------+

It's up to the application to specify the syntax of the field names; so what Sphinx documentation generator specifies for the 2 example syntaxes in the question is that they are equivalent (this does not necessarily hold if you change to a different documentation generator).

2 of 2
1

Thanks to @mzjin's answer in the comments: this link describes that it is possible since v0.4.

The below example is given in the link, which is exactly what I was looking for.

py:function:: send_message(sender, recipient, message_body, [priority=1])
   """
   Send a message to a recipient

   :param str sender: The person sending the message
   :param str recipient: The recipient of the message
   :param str message_body: The body of the message
   :param priority: The priority of the message, can be a number 1-5
   :type priority: integer or None
   :return: the message id
   :rtype: int
   :raises ValueError: if the message_body exceeds 160 characters
   :raises TypeError: if the message_body is not a basestring
   """
🌐
Sweetpea-org
sweetpea-org.github.io › guide › contributing › rest_style_guide.html
reStructuredText Style Guide — SweetPea documentation
Fields cannot be documented with docstrings, and instead are documented with a modified form of the Python line comment using #: instead of #: from dataclasses import dataclass @dataclass class FieldExample: """An example for documenting a field. :param field: The field we're making an example of.
Find elsewhere
🌐
Linux find Examples
queirozf.com › entries › python-docstrings-reference-examples
Python Docstrings: Reference & Examples
September 1, 2020 - Examples to help you document your Python code using any of the commonly used docstring styles.
🌐
Python Developer's Guide
devguide.python.org › documentation › markup
reStructuredText markup
July 28, 2026 - This document describes the custom reStructuredText markup introduced by Sphinx to support Python documentation and how it should be used. Quick reference: This table summarizes which markup should...
🌐
Real Python
realpython.com › how-to-write-docstrings-in-python
How to Write Docstrings in Python – Real Python
August 25, 2025 - How should you format docstrings in Python?Show/Hide · You should format docstrings by starting with a concise summary and using triple quotes. For multiline docstrings, include details about parameters and return values. ... Common docstring formats include reStructuredText (reST), Google-style, NumPy-style, and doctest-style, each with its own conventions for organizing information about parameters, returns, and examples.
🌐
Readthedocs
sphinx-rtd-tutorial.readthedocs.io › en › latest › docstrings.html
Writing docstrings — Sphinx-RTD-Tutorial documentation
If you are using VS code, the Python Docstring extension can be used to auto-generate a docstring snippet once a function/class has been written.
🌐
Sphinx
sphinx-doc.org › en › master › usage › extensions › example_google.html
Example Google Style Python Docstrings — Sphinx documentation
Sections are created with a section header and a colon followed by a block of indented text. Example: Examples can be given using either the ``Example`` or ``Examples`` sections. Sections support any reStructuredText formatting, including literal blocks:: $ python example_google.py Section breaks ...
🌐
Readthedocs
pydoctor.readthedocs.io › en › latest › docformat › restructuredtext.html
reStructuredText - pydoctor documentation - Read the Docs
.. python:: def fib(n): """Print a Fibonacci series.""" a, b = 0, 1 while b < n: print b, a, b = b, a+b ... In any case, plaintext docstring format will be used if docstrings can’t be parsed with restructuredtext parser.
🌐
Lsst
developer.lsst.io › restructuredtext › style.html
ReStructuredText Style Guide — LSST DM Developer Guide main documentation
When writing reST documentation in Python docstrings, documentation lines should be wrapped at lengths of 110 characters for consistency with our Python Style Guide. For reStructuredText documents (e.g., .rst files), reST doesn’t care about line formatting. Emacs users, for example, are free to use hard-wrap formatting lines at 72 characters if that helps you write docs.
🌐
Stack Abuse
stackabuse.com › common-docstring-formats-in-python
Common Docstring Formats in Python
August 26, 2023 - Docstrings in Python are a powerful tool for documenting your code. They're essentially comments that are written in a specific format, which allows them to be parsed by documentation generation tools. There are several common formats for writing docstrings, and they each have their own strengths and weaknesses. The most commonly used formats are reStructuredText ...
🌐
iO Flood
ioflood.com › blog › python-docstring
Python Docstring Usage Guide (With Examples)
December 11, 2023 - Different projects may adopt varying Docstring formats. The most prevalent formats are reStructuredText, Google, and Numpydoc. reStructuredText is the standard Python Docstring format, used by tools like Sphinx for documentation generation. Google and Numpydoc formats, on the other hand, offer ...
🌐
Readthedocs
pydoctor.readthedocs.io › en › stable › docformat › restructuredtext.html
reStructuredText — pydoctor documentation - Read the Docs
.. python:: def fib(n): """Print a Fibonacci series.""" a, b = 0, 1 while b < n: print b, a, b = b, a+b ... In any case, plaintext docstring format will be used if docstrings can’t be parsed with restructuredtext parser.
🌐
Noirlab
datalab.noirlab.edu › docs › manual › DevGuide › DocumentingPythonAPIswithDocstrings › DocumentingPythonAPIswithDocstrings.html
3.2. Documenting Python APIs with Docstrings — Data Lab documentation
Conventional reStructuredText subsections are not allowed in docstrings, given the previous guideline. However, you may structure long sections with bold text that simulates subsection headers. This technique is useful for the Notes and Examples Numpydoc sections.