Description
Hi all 👋🏼. I want to communicate we are deprecating auto-injected Sphinx context and enabling Read the Docs Addons by default on October 7th, 2024. Read the public announcement at our blog post Read the Docs Addons enabled by default.
I'm opening this issue here as a way to connect with other Sphinx theme authors and coordinate the required changes on those themes before reaching the deprecation date and make the transition as smooth as possible:
- @jbms & @2bndy5 (jbms/sphinx-immaterial)
- @agoose77 & @choldgraf (executablebooks/sphinx-book-theme)
- @pradyunsg (pradyunsg/furo)
- @drammock (pydata/pydata-sphinx-theme)
- @mgeier (mgeier/insipid-sphinx-theme)
Feel free to ping other theme authors you may know here so they are aware of the upcoming changes as well.
Summary of the changes
Read the Docs will stop installing readthedocs-sphinx-ext
Python package by default and stop appending extra configurations to the Sphinx's conf.py
when building projects.
We've created projects on Read the Docs to show the Sphinx configuration for the old and new behavior. This allow us to understand what are the differences (search for html_context
on each page, as an example):
- Page with current and deprecated behavior: https://test-builds.readthedocs.io/en/latest/sphinx-context.html
- Page with new default behavior: https://test-builds-disable-sphinx-manipulation.readthedocs.io/en/latest/sphinx-context.html
Details of the changes
When building on Read the Docs, there are some changes performed automatically via a Sphinx configuration file by conf.py.tmpl
:
- There are some workarounds to support old versions of Sphinx
- Injects plenty of variables in the
html_context
- Adds
_static
directory tohtml_static_path
if it exists - Sets
alabaster
theme if there is no theme defined - Set
html_baseurl
ascanonical_url
if Sphinx>=1.8
- Install
readthedocs_ext.readthedocs
as a Sphinx extension - Install
readthedocs_ext.external_version_warning
if the Read the Docs version isexternal
- Define some LaTeX configurations based on project's language
Template variables available via html_context
If you are depending on any of this variables injected into the HTML context, you will need to perform some changes on your theme. Note there are some environment variables that Read the Docs passes to the build process that you may be able to use for this purpose. As an example, note that html_context["commit"]
won't injected anymore, but you can use the environment variable READTHEDOCS_GIT_COMMIT_HASH
instead to get this value.
Read the Docs embeded flyout replaced by new addons
We are moving away from the HTML blob injection we are currently doing to generate the flyout into a #readthedocs-embed-flyout
selector. We already implemented Read the Docs Addons as a replacement to this approach which is modular and customizable.
The removal of the HTML blob injection means that if the theme were using an explicit selector to decide where to inject the flyout menu, it has to be migrated to listen to the readthedocs-addons-data-ready
JavaScript event to get all the Read the Docs data in a JSON-like1 object and generate the flyout as you prefer. Note that you can style and render the flyout as you prefer --even splitting it into different selectors, placement or integrate it more with your theme.
Example integrations using the JavaScript custom event:
- Read the Docs Sphinx theme kept the exact look&feel than before.
- CPython documentation doesn't render the flyout as-is but split it into version and language selectors at the top-left of the page.
You are free to integrate this data as you prefer, the only requirement here is to mention the documentation is hosted by Read the Docs somewhere in the page 😄
EthicalAds
If your theme is using a specific placement for the EthicalAd as described in our documentation via #ethical-ad-placement
, it should keep working properly.
If that's not the case, Read the Docs will try to place the ad in the best placement possible based on some heuristic.
Hopefully, I was able to communicate this clearly enough 😅 . I'm happy to keep this issue open or open one issue per theme, depending on your needs, and I'm happy to collaborate with you all with this migration to the new Read the Docs Addons. Let me know if you have any doubt or if you want me to help you with anything related to this work 👍🏼
Footnotes
-
Unfortunately, not yet documented 😓, but you can find an example of it at https://docs.readthedocs.io/_/addons/?client-version=0.17.0&api-version=1&project-slug=docs&version-slug=stable ↩