| Authors: | Günter Milde
Adam Turner |
|---|---|
| Discussions-To: | https://sourceforge.net/p/docutils/feature-requests/89/ |
| Status: | Active |
| Type: | Process |
| Created: | 2025-04-22 |
| Docutils-Version: | 0.23 |
| Resolution: | 2026-04-09 |
Abstract
This document defines the public API provided by the Docutils project and its backwards compatibility policy.
Docutils has a large user base and is used in production at several places (Python documentation, Linux kernel documentation, CMake documentation, readthedocs, ...). OTOH, Docutils has a version number below 1.0 (widely seen as an indicator of "beta" status of a project).
The current Docutils Project Policies section on version identification concentrates on the formal definition of the version specifier but leaves open what consists a "major change in the design or API".
The current backwards compatibility policy is a stub referencing PEP 387.
Clearly defining how we will balance evolution with stability is important to both users and project developers.
People affected by changes in Docutils include:
i.e. authors and maintainers of
A person may belong to more than one of these categories.
Docutils' public API includes:
Exemptions:
Tip
To find out if an object from the docutils package is safe to use, look up its docstring and the docstring of its parent(s). [*]
If there is no documentation or the documentation says provisional or internal, the name, behaviour, and existence of the object is not guaranteed to be stable.
Code relying on non-public objects should be made robust using public alternatives. If there is a no such alternative or the required change would be a problem, contact the Docutils developers or file a feature request.
| [*] | Attribute docstrings are not shown by pydoc. To find out whether attributes have a docstring, check the source. |
| [1] | Cf. Backwards Compatibility Rules in PEP 387 and Public and Internal Interfaces in PEP 8. |
Beginning with version 1.0, Docutils will follow the rules of Semantic Versioning. All incompatible changes to the public APIs require increasing the major part of the version specifier. Backwards compatible changes can be done in minor releases.
If required, critical bug fixes may change the public API without advance warning.
Use type annotations as an indication of status in the public API.
Use Calendar Versioning (CalVer).
Allow breaking API changes in minor versions after prior announcement and a deprecation period.
Mark all internal objects with a prefix underscore.
Use the __all__ attribute to declare modules, classes, and functions that form the public API.
Differentiate between "core API" and "extended API"?
There are many objects that were not intended for public use but are still used by downstream projects.
Before the switch to semantic versioning, the Docutils Project Policies contained the lines:
When Docutils reaches version 1.0, the major APIs will be considered frozen.
The major number [...] may be incremented later if there is a major change in the design or API.
Define a minimum deprecation time similar to DocBook?
A "major" release […] may contain backward-incompatible changes if:
- the change was announced in the release notes for the previous version (major or minor) and
- the change was announced in a release that occurred at least six months previously.
By these rules, the technical committee can announce, in 5.1, for example, plans to make a backward-incompatible change in 6.0. Then, in 6.0, if it’s been at least six months since 5.1 was released, they can make that change.
Generate API documentation with Sphinx?
| [doctree] | The Docutils Document Tree |
| [docutils.dtd] | Docutils Generic DTD |
| [publisher] | The Docutils Publisher |
| [tools] | Docutils Front-End Tools |
| [restructuredtext] | reStructuredText Markup Specification |
| [settings] | Docutils Runtime Settings |
| [transforms] | Docutils Transforms |
This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.