<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Read the Docs Blog - Posts tagged feature</title>
  <id>https://blog.readthedocs.com/archive/tag/feature/atom.xml</id>
  <updated>2021-12-07T00:00:00Z</updated>
  <link href="https://blog.readthedocs.com" />
  <link href="https://blog.readthedocs.com/archive/tag/feature/atom.xml" rel="self" />
  <generator uri="http://ablog.readthedocs.org" version="0.9.5">ABlog</generator>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">Announcing Embed API v3 and sphinx-hoverxref 1.0</title>
    <id>https://blog.readthedocs.com/embed-api-v3/</id>
    <updated>2021-12-07T00:00:00Z</updated>
    <published>2021-12-07T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/embed-api-v3/" />
    <author>
      <name>Juan Luis Cano Rodríguez</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;announcing-embed-api-v3-and-sphinx-hoverxref-1-0&quot;&gt;

&lt;p&gt;We are thrilled to announce the availability of Read the Docs Embed API v3,
along with its official client, sphinx-hoverxref 1.0.
This work has been possible in part thanks to the
&lt;a class=&quot;reference internal&quot; href=&quot;../../../czi-grant-announcement/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;the CZI grant we received&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;the-value-of-content-embedding&quot;&gt;
&lt;h2&gt;The value of content embedding&lt;/h2&gt;
&lt;p&gt;As we wrote in
&lt;a class=&quot;reference internal&quot; href=&quot;../../../hoverxref-intersphinx/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;our first blog post about sphinx-hoverxref&lt;/span&gt;&lt;/a&gt;,
one of the most powerful features of Sphinx
is the possibility of creating cross references
to other documentation projects.
However, a reader finding several links in a technical documentation
might need to open several browser tabs to fully understand the context,
resulting in a lot of friction in the form of context switching.&lt;/p&gt;
&lt;p&gt;One way of mitigating the problem is to show a small preview
in the form of tooltip or modal with the contents of the link.
This is where the Embed API and sphinx-hoverxref come in.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/&quot;&gt;sphinx-hoverxref&lt;/a&gt; is a Sphinx extension that addresses this problem
by adding tooltips on the cross references of the HTML documentation
with the content of the linked section.
To do so, it inserts a small JavaScript file that
calls the Read the Docs Embed API when the user hovers any link.
&lt;a class=&quot;reference internal&quot; href=&quot;../../../hoverxref-intersphinx/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;Back in June&lt;/span&gt;&lt;/a&gt; we announced
intersphinx support in &lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/&quot;&gt;sphinx-hoverxref&lt;/a&gt; 0.6b1,
which allowed users to include modals and tooltips
also for cross references to other projects.&lt;/p&gt;
&lt;div class=&quot;figure align-center&quot; id=&quot;id2&quot;&gt;
&lt;a class=&quot;reference external image-reference&quot; href=&quot;/_images/sphinx-hoverxref-showcase.gif&quot;&gt;&lt;img alt=&quot;sphinx-hoverxref displaying tooltips for cross references&quot; src=&quot;../../../_images/sphinx-hoverxref-showcase.gif&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/a&gt;
&lt;p class=&quot;caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;sphinx-hoverxref displaying a tooltip including an equation&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Some big projects already using it include &lt;a class=&quot;reference external&quot; href=&quot;https://docs.tweepy.org/&quot;&gt;Tweepy&lt;/a&gt;,
a Python client for Twitter, and &lt;a class=&quot;reference external&quot; href=&quot;https://docs.scrapy.org/&quot;&gt;Scrapy&lt;/a&gt;,
a framework for crawling websites.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;embed-api-v3-and-sphinx-hoverxref-1-0&quot;&gt;
&lt;h2&gt;Embed API v3 and sphinx-hoverxref 1.0&lt;/h2&gt;
&lt;p&gt;After some months of work, &lt;strong&gt;we are excited to publish v3 of our Embed API,
and with it, version 1.0 of sphinx-hoverxref&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Among other things,
the new versions allow you to
&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/guides/embedding-content.html#embedding-content-from-your-documentation&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;embed content from pages hosted outside Read the Docs&lt;/span&gt;&lt;/a&gt;.
For security reasons, we have an allowlist of such external domains
that currently includes Python, NumPy, SciPy, SymPy,
and we would like to
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/issues&quot;&gt;invite the community to suggest more domains to add&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Other additions and fixes include:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Support for JS and CSS assets in Sphinx 4.1+.&lt;/li&gt;
&lt;li&gt;Support for &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;glossary&lt;/span&gt;&lt;/code&gt; / &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;term&lt;/span&gt;&lt;/code&gt; and sphinxcontrib-bibtex.&lt;/li&gt;
&lt;li&gt;Avoid showing the browser built-in tooltip for links that have the extension enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, version 3 of the Embed API
paves the way for supporting non-Sphinx projects in the future.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;embedding-content-with-sphinx-hoverxref&quot;&gt;
&lt;h2&gt;Embedding content with sphinx-hoverxref&lt;/h2&gt;
&lt;p&gt;To use sphinx-hoverxref in your Read the Docs project,
&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;declare it as part of your dependencies&lt;/span&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;literal-block-wrapper docutils container&quot; id=&quot;id3&quot;&gt;
&lt;div class=&quot;code-block-caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;requirements.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;highlight-default notranslate&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sphinx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.3.1&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;sphinx_rtd_theme&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0.0&lt;/span&gt;
&lt;span class=&quot;hll&quot;&gt;&lt;span class=&quot;n&quot;&gt;sphinx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hoverxref&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And add it to your list of Sphinx extensions:&lt;/p&gt;
&lt;div class=&quot;literal-block-wrapper docutils container&quot; id=&quot;id4&quot;&gt;
&lt;div class=&quot;code-block-caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;conf.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;highlight-default notranslate&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;extensions&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ...other extensions&lt;/span&gt;
&lt;span class=&quot;hll&quot;&gt;    &lt;span class=&quot;s2&quot;&gt;&amp;quot;hoverxref.extension&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To enable the extension on all &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;:ref:&lt;/span&gt;&lt;/code&gt; of your documentation,
set the &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;hoverxref_auto_ref&lt;/span&gt;&lt;/code&gt; to &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;True&lt;/span&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;literal-block-wrapper docutils container&quot; id=&quot;id5&quot;&gt;
&lt;div class=&quot;code-block-caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;conf.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;highlight-default notranslate&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hoverxref_auto_ref&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;True&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And you will start seeing tooltips on your internal references.
Apart from &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;:ref:&lt;/span&gt;&lt;/code&gt; roles, you can also enable tooltips on:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/en/stable/usage.html#tooltip-on-sphinx-domains&quot; title=&quot;(in sphinx-hoverxref)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Code objects from any Sphinx domain&lt;/span&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/en/stable/usage.html#tooltip-on-glossary-terms&quot; title=&quot;(in sphinx-hoverxref)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Glossary terms&lt;/span&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/en/stable/usage.html#tooltip-on-sphinxcontrib-bibtex-cites&quot; title=&quot;(in sphinx-hoverxref)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;BibTeX citations&lt;/span&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/en/stable/usage.html#tooltip-with-content-that-needs-extra-rendering-steps&quot; title=&quot;(in sphinx-hoverxref)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Pages containing extra JavaScript like sphinx-tabs and
MathJax&lt;/span&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/en/stable/usage.html#tooltip-on-intersphinx-content&quot; title=&quot;(in sphinx-hoverxref)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Intersphinx references&lt;/span&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://sphinx-hoverxref.readthedocs.io/en/stable/usage.html#tooltip-on-custom-object&quot; title=&quot;(in sphinx-hoverxref)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;And custom objects!&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;sphinx-hoverxref includes the JavaScript embed client in the HTML assets,
but it is not yet available as a standalone library that can be reused
with standard frontend packaging tools.
If you would like to see this happening,
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/sphinx-hoverxref/issues/&quot;&gt;let us know&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;calling-the-embed-api-directly&quot;&gt;
&lt;h2&gt;Calling the Embed API directly&lt;/h2&gt;
&lt;p&gt;As explained in &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/guides/embedding-content.html#calling-the-embed-api-directly&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;our embedding
guide&lt;/span&gt;&lt;/a&gt;,
you can call the API directly from any HTTP client:&lt;/p&gt;
&lt;div class=&quot;highlight-console notranslate&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;curl -s &lt;span class=&quot;s2&quot;&gt;&amp;quot;https://readthedocs.org/api/v3/embed/\&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;?url=https://docs.readthedocs.io/en/latest/features.html\&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;%23read-the-docs-features&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; python -m json.tool
&lt;span class=&quot;go&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &amp;quot;url&amp;quot;: &amp;quot;https://docs.readthedocs.io/en/latest/features.html#read-the-docs-features&amp;quot;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &amp;quot;fragment&amp;quot;: &amp;quot;read-the-docs-features&amp;quot;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &amp;quot;content&amp;quot;: &amp;quot;&amp;lt;div class=\&amp;quot;section\&amp;quot; id=\&amp;quot;read-the-docs-features\&amp;quot;&amp;gt;\n&amp;lt;h1&amp;gt;Read the Docs ...&amp;quot;,&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;  &amp;quot;external&amp;quot;: false&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Or visually explore the query in the &lt;a class=&quot;reference external&quot; href=&quot;https://readthedocs.org/api/v3/embed/?url=https://docs.readthedocs.io/en/latest/features.html%23read-the-docs-features&quot;&gt;web interface&lt;/a&gt; instead.&lt;/p&gt;
&lt;p&gt;The &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#embed&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;reference documentation&lt;/span&gt;&lt;/a&gt;
includes more detail about the parameters and return values of the API.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;try-it-out&quot;&gt;
&lt;h2&gt;Try it out!&lt;/h2&gt;
&lt;p&gt;We would like to invite the community to try out these features and
send us feedback. With the help of our users, we will keep moving towards
a more cohesive documentation ecosystem of interlinked Python projects.&lt;/p&gt;
&lt;hr class=&quot;docutils&quot; /&gt;
&lt;p&gt;Considering using Read the Docs for your next Sphinx or MkDocs project?
Check out &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/&quot;&gt;our documentation&lt;/a&gt; to get started!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">Read the Docs ❤️ Jupyter Book</title>
    <id>https://blog.readthedocs.com/jupyter-book-read-the-docs/</id>
    <updated>2021-11-11T00:00:00Z</updated>
    <published>2021-11-11T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/jupyter-book-read-the-docs/" />
    <author>
      <name>Juan Luis Cano Rodríguez</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;read-the-docs-jupyter-book&quot;&gt;

&lt;p&gt;We are proud to announce that now Jupyter Book projects are supported on Read the Docs!&lt;/p&gt;
&lt;p&gt;Both Read the Docs and The Executable Book Project, the folks behind Jupyter Book,
share a common passion for documentation,
and we have been collaborating on various topics for some time already.
For example, we started promoting MyST in favor of our recommonmark
&lt;a class=&quot;reference internal&quot; href=&quot;../../../newsletter-april-2021/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;back in April this year&lt;/span&gt;&lt;/a&gt;,
and we wrote a guide on &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/guides/jupyter.html&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;using Jupyter notebook with Sphinx&lt;/span&gt;&lt;/a&gt;
that benefitted a lot from their feedback.&lt;/p&gt;
&lt;p&gt;Now we are happy to announce that Jupyter Book itself is supported on Read the Docs,
after some thorough discussion about the possible implementations
and thanks in large part to the Jupyter Book developers,
who addressed all the minor incompatibilities that prevented this from happening.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;what-is-jupyter-book&quot;&gt;
&lt;h2&gt;What is Jupyter Book?&lt;/h2&gt;
&lt;p&gt;According to &lt;a class=&quot;reference external&quot; href=&quot;https://jupyterbook.org/&quot;&gt;its own documentation&lt;/a&gt;,&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;Jupyter Book is an open source project for building beautiful,
publication-quality books and documents from computational material.&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;Jupyter Book is the flagship product of &lt;a class=&quot;reference external&quot; href=&quot;https://executablebooks.org/&quot;&gt;the Executable Book Project&lt;/a&gt;,
an international collaboration between several universities and software projects
seeking to build open source tools
that facilitate publishing computational narratives
using the Jupyter ecosystem.&lt;/p&gt;
&lt;p&gt;Even though Jupyter Book is much younger than Read the Docs as a project,
it has become very popular in recent times
among scientific software developers and educators.
It enables users to
write publication-quality content in Markdown thanks to &lt;a class=&quot;reference external&quot; href=&quot;https://myst-parser.readthedocs.io/&quot;&gt;MyST&lt;/a&gt;
(a Markdown dialect compatible with Sphinx
&lt;a class=&quot;reference internal&quot; href=&quot;../../../newsletter-april-2021/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;we started promoting back in April this year&lt;/span&gt;&lt;/a&gt;),
use Jupyter notebooks to author content thanks to &lt;a class=&quot;reference external&quot; href=&quot;https://myst-nb.readthedocs.io/&quot;&gt;MyST-NB&lt;/a&gt;
(featured in our &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/guides/jupyter.html&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;Jupyter on Sphinx guide&lt;/span&gt;&lt;/a&gt;),
easily add interactivity thanks to &lt;a class=&quot;reference external&quot; href=&quot;https://thebe.readthedocs.io&quot;&gt;Thebe&lt;/a&gt;,
and much more.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;why-a-change-was-needed&quot;&gt;
&lt;h2&gt;Why a change was needed&lt;/h2&gt;
&lt;p&gt;Read the Docs supports two documentation generation systems
&lt;a class=&quot;reference external&quot; href=&quot;https://www.sphinx-doc.org/&quot;&gt;Sphinx&lt;/a&gt; and &lt;a class=&quot;reference external&quot; href=&quot;https://www.mkdocs.org/&quot;&gt;MkDocs&lt;/a&gt;.
Adding extra systems is difficult with the current codebase,
because it requires lots of effort to match all the features
currently supported by the existing ones.&lt;/p&gt;
&lt;p&gt;On the other hand, even though &lt;a class=&quot;reference external&quot; href=&quot;https://jupyterbook.org/explain/sphinx.html#jupyter-book-is-a-distribution-of-sphinx&quot;&gt;Jupyter Book leverages Sphinx “for almost everything that it
does”&lt;/a&gt;,
it purposefully hides some of the Sphinx implementation details from the user
to create a more user friendly experience.
One of the consequences of this is that
the assumptions that Read the Docs makes to build the documentation of Sphinx projects don’t hold:
in particular, Jupyter Book uses a declarative configuration file &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;_config.yml&lt;/span&gt;&lt;/code&gt;
that gets translated on the fly to the Sphinx dynamic configuration usually stored in &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;conf.py&lt;/span&gt;&lt;/code&gt;.
As a result, Jupyter Book projects could not be hosted on Read the Docs - until now!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;how-to-deploy-a-jupyter-book-project-to-read-the-docs&quot;&gt;
&lt;h2&gt;How to deploy a Jupyter Book project to Read the Docs&lt;/h2&gt;
&lt;p&gt;With the current development version of Jupyter Book,
you can now export a Sphinx &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;conf.py&lt;/span&gt;&lt;/code&gt; configuration
from the Jupyter Book declarative &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;_config.yml&lt;/span&gt;&lt;/code&gt;
and save it to disk,
which allows Read the Docs to build the documentation from it
like any other Sphinx project.&lt;/p&gt;
&lt;p&gt;The challenge then becomes keeping both configuration files synchronized,
since every update to &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;_config.yml&lt;/span&gt;&lt;/code&gt; or new Jupyter Book release
can potentially produce changes in the &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;conf.py&lt;/span&gt;&lt;/code&gt;.
As described in &lt;a class=&quot;reference external&quot; href=&quot;https://jupyterbook.org/publish/readthedocs.html&quot; title=&quot;(in Python)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;the official documentation&lt;/span&gt;&lt;/a&gt;,
users can either &lt;a class=&quot;reference external&quot; href=&quot;https://jupyterbook.org/sphinx/index.html#sphinx-convert&quot; title=&quot;(in Python)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;manually export the configuration&lt;/span&gt;&lt;/a&gt;
running a command at will,
or &lt;a class=&quot;reference external&quot; href=&quot;https://jupyterbook.org/sphinx/index.html#sphinx-convert-pre-commit&quot; title=&quot;(in Python)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;set up an automation to do it on every change&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To see this in action, have a look at
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/astrojuanlu/jupyterbook-on-read-the-docs&quot;&gt;this example project&lt;/a&gt;
that contains the bare minimum to make &lt;a class=&quot;reference external&quot; href=&quot;https://jupyterbook.org/start/create.html&quot; title=&quot;(in Python)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;the demo book&lt;/span&gt;&lt;/a&gt;
work on Read the Docs.&lt;/p&gt;
&lt;p&gt;We are excited that this is now possible
and look forward to seeing more projects built with Jupyter Book!&lt;/p&gt;
&lt;p&gt;—&lt;/p&gt;
&lt;p&gt;Considering using Read the Docs for your next Sphinx or MkDocs project?
Check out &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/&quot;&gt;our documentation&lt;/a&gt; to get started!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">Ubuntu 20.04, Python 3.10, and support for Node, Rust, and Go</title>
    <id>https://blog.readthedocs.com/new-build-specification/</id>
    <updated>2021-10-14T00:00:00Z</updated>
    <published>2021-10-14T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/new-build-specification/" />
    <author>
      <name>Juan Luis Cano Rodríguez</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;ubuntu-20-04-python-3-10-and-support-for-node-rust-and-go&quot;&gt;

&lt;p&gt;We are excited to announce that now Read the Docs users
can use a newer build specification in their projects
that will change the base image to one based on Ubuntu 20.04,
ship the recently released Python 3.10,
and allow users to easily specify the version of Node.js, Rust, and Go.
This feature has been a long time in the making,
and we think it will simplify the configuration of many projects.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;previous-situation&quot;&gt;
&lt;h2&gt;Previous situation&lt;/h2&gt;
&lt;p&gt;The Docker images used by our builders were based on Ubuntu 18.04.
Recently, we added a new feature to &lt;a class=&quot;reference internal&quot; href=&quot;../../../apt-packages/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;install custom system packages&lt;/span&gt;&lt;/a&gt;,
which allowed many projects to have better control of their build process
without having to use conda to manage non-Python dependencies.&lt;/p&gt;
&lt;p&gt;However, this Ubuntu version was released three years ago and,
even though it was good enough for most projects,
we have been receiving requests to upgrade certain system packages over the years.
Since these are managed through the operating system package manager,
and we do not provide a way to add custom Personal Package Archives,
such upgrades were not possible.&lt;/p&gt;
&lt;p&gt;Many Python projects use a secondary programming language
for a variety of reasons. Established compiled languages like C, C++, and FORTRAN
have readily available compilers that will work for the majority of use cases.
However, other younger technologies move at a faster pace,
and developers often want specific versions of the toolchains
that cannot be installed with the system package manager.
This affected projects that combine backend and frontend code
that need Node.js to compile their JavaScript sources, such as Jupyter extensions,
and libraries with performance-critical code written in Rust or Go.&lt;/p&gt;
&lt;p&gt;We have often suggested specifying custom versions of non-Python dependencies
&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/guides/conda.html&quot;&gt;using conda&lt;/a&gt;,
to specify custom versions of non-Python dependencies,
but this requires learning another tool that might be unfamiliar for some projects.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;new-build-yaml-configuration&quot;&gt;
&lt;h2&gt;New &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;build&lt;/span&gt;&lt;/code&gt; YAML configuration&lt;/h2&gt;
&lt;p&gt;To overcome all these problems, we have added a new configuration value,
&lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;build.tools&lt;/span&gt;&lt;/code&gt;, that receive a dictionary of toolchain versions.
This new configuration requires specifying the base image name
in &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;build.os&lt;/span&gt;&lt;/code&gt;, currently &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;ubuntu-20.04&lt;/span&gt;&lt;/code&gt;.
&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/config-file/v2.html&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;Our configuration documentation&lt;/span&gt;&lt;/a&gt;
contains a simple example:&lt;/p&gt;
&lt;div class=&quot;highlight-yaml notranslate&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# Set the version of Python and other tools you might need&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;ubuntu-20.04&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;tools&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;python&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;3.9&amp;quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# You can also specify other tool versions:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# nodejs: &amp;quot;16&amp;quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# rust: &amp;quot;1.55&amp;quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# golang: &amp;quot;1.17&amp;quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And you can draw inspiration from some community projects
that are using this feature already:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://cryptography.io/&quot;&gt;cryptography&lt;/a&gt;, the reference Python library for cryptographic algorithms,
can now &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/pyca/cryptography/blob/c3fcc6759a86bbd847e3da067152ee7d2b88c194/.readthedocs.yml#L10-L15&quot;&gt;specify the Rust version required to build the
package&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://parsel.readthedocs.io/&quot;&gt;parsel&lt;/a&gt;, a Python library to manipulate HTML and XML using XPath and CSS selectors,
leverages the new specification to &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/scrapy/parsel/blob/eb4657934cddb8b44726cda7893852c925bcda3a/.readthedocs.yml#L6-L11&quot;&gt;build their documentation on the just released
Python 3.10&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://thebe.readthedocs.io/&quot;&gt;Thebe&lt;/a&gt;, a Jupyter-powered tool to make HTML pages interactive,
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/executablebooks/thebe/pull/472&quot;&gt;needs Node.js to build the latest version of the code&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do you think this feature will be useful for you as well?
Give it a try and let us know.&lt;/p&gt;
&lt;p&gt;Remember you can always see the latest changes to our platforms in our &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/page/changelog.html&quot;&gt;Read the Docs
Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;—&lt;/p&gt;
&lt;p&gt;Considering using Read the Docs for your next Sphinx or MkDocs project?
Check out &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/&quot;&gt;our documentation&lt;/a&gt; to get started!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">Install custom operating system packages (apt)</title>
    <id>https://blog.readthedocs.com/apt-packages/</id>
    <updated>2021-05-19T00:00:00Z</updated>
    <published>2021-05-19T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/apt-packages/" />
    <author>
      <name>Juan Luis Cano Rodríguez</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;install-custom-operating-system-packages-apt&quot;&gt;

&lt;p&gt;We are thrilled to announce that now Read the Docs users
can declare custom operating system packages in their project configuration
that will get installed in our Ubuntu-based builders using &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;apt&lt;/span&gt;&lt;/code&gt;.
This has been a long awaited feature,
and we think it will simplify the configuration of many projects,
especially scientific ones.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;previous-solutions&quot;&gt;
&lt;h2&gt;Previous solutions&lt;/h2&gt;
&lt;p&gt;The Ubuntu images used by our builders
contain &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs-docker-images/blob/8e4f035c219307e30f5e3326c3c8271cee4f2631/Dockerfile#L15-L131&quot;&gt;lots of preinstalled system
packages&lt;/a&gt;
that we ship to all the projects
to make the most common use cases possible.
This includes compilers, development headers of common libraries, and others.&lt;/p&gt;
&lt;p&gt;However, on one hand this makes our images way bigger than necessary,
and it is still not enough to solve 100 % of the use cases.
Fortunately, Read the Docs has supported the &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/guides/conda.html&quot;&gt;conda package
manager&lt;/a&gt;
for a long time already,
and this has allowed users with special needs to add
any non-Python libraries they needed.
Still, interoperability between conda and pip is not perfect,
and for users that are not used to conda this could feel like a hack.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;new-apt-packages-configuration&quot;&gt;
&lt;h2&gt;New &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;apt_packages&lt;/span&gt;&lt;/code&gt; configuration&lt;/h2&gt;
&lt;p&gt;To overcome all these problems, we have added a new configuration value,
&lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;build.apt_packages&lt;/span&gt;&lt;/code&gt;, that receive a list of APT packages
that will be installed in our Ubuntu-based images.
&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/config-file/v2.html#build-apt-packages&quot;&gt;Our configuration
documentation&lt;/a&gt;
contains a simple example:&lt;/p&gt;
&lt;div class=&quot;highlight-yaml notranslate&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;latest&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;apt_packages&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p p-Indicator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;libclang&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p p-Indicator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;l l-Scalar l-Scalar-Plain&quot;&gt;cmake&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;(Notice that at the moment our images are based Ubuntu 18.04,
this will change in the near future)&lt;/p&gt;
&lt;p&gt;And you can draw inspiration from some community projects that are using this feature already:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://geoserver-rest.readthedocs.io/&quot;&gt;geoserver-rest&lt;/a&gt;, a Python library to interact with GeoServer, uses &lt;cite&gt;apt_packages&lt;/cite&gt;
to &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/gicait/geoserver-rest/blob/70ec799937b18ec7baed6fd3f7b2bf2f11dd8237/.readthedocs.yaml#L3-L12&quot;&gt;install some GDAL and pycurl
dependencies&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://ucx-py.readthedocs.io/&quot;&gt;UCX-Py&lt;/a&gt;, a Python interface for the low-level networking library UCX,
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/rapidsai/ucx-py/blob/504ba8efecafaf48b5a2692113b8da70f8229721/.readthedocs.yml#L3-L6&quot;&gt;installs extra dependencies to temporarily work around upstream
issues&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are happy that this feature is already being used
minutes after being deployed
and are looking forward to seeing more projects make use of it.&lt;/p&gt;
&lt;p&gt;Remember you can always see the latest changes to our platforms in our &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/page/changelog.html&quot;&gt;Read the Docs
Changelog&lt;/a&gt; and &lt;a class=&quot;reference external&quot; href=&quot;https://ethical-ad-server.readthedocs.io/page/developer/changelog.html&quot;&gt;Ethical Ad Server
Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Considering using Read the Docs for your next Sphinx or MkDocs project?
Check out &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/&quot;&gt;our documentation&lt;/a&gt; to get started!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">API v3 is now stable</title>
    <id>https://blog.readthedocs.com/api-v3-stable/</id>
    <updated>2021-02-16T00:00:00Z</updated>
    <published>2021-02-16T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/api-v3-stable/" />
    <author>
      <name>Manuel Kaufmann</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;api-v3-is-now-stable&quot;&gt;

&lt;p&gt;We are excited to announce that our &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/page/api/v3.html&quot;&gt;API v3&lt;/a&gt; has reached a stable release,
and is now available for all Read the Docs users.
Since we &lt;a class=&quot;reference internal&quot; href=&quot;../../../api-v3-beta/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;announced the API v3 beta&lt;/span&gt;&lt;/a&gt;,
we have been adding extra functionality and bug-fixing minor issues based on user feedback.&lt;/p&gt;
&lt;p&gt;The new API v3 &lt;em&gt;is not&lt;/em&gt; a fully replacement (yet!) of API v2,
but &lt;strong&gt;we highly recommend using API v3 for all the new integrations&lt;/strong&gt;.
API v2 will be deprecated soon,
though we don’t have a firm timeline for deprecation.
We will alert users with our plans when we do.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;new-features&quot;&gt;
&lt;h2&gt;New features&lt;/h2&gt;
&lt;p&gt;We’re excited about the following actions that API v3 makes possible:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Import new projects&lt;/li&gt;
&lt;li&gt;Activate a version&lt;/li&gt;
&lt;li&gt;Trigger builds&lt;/li&gt;
&lt;li&gt;Check build status&lt;/li&gt;
&lt;li&gt;Manage redirects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;API v3 allows you to easily manage common tasks on your Read the Docs project and organization.
These include:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Setting up documentation for a new project&lt;/li&gt;
&lt;li&gt;Automating the release of a new version&lt;/li&gt;
&lt;li&gt;Pausing a release if you detect a failed build&lt;/li&gt;
&lt;li&gt;Automatically create redirects for changes files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to know more about it,
please check out the full &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/page/api/v3.html&quot;&gt;APIv3 documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;help-us-make-it-better&quot;&gt;
&lt;h2&gt;Help us make it better&lt;/h2&gt;
&lt;p&gt;We always love to hear from users about how they are using the API.
We want to help you manage your documentation in the easiest and most efficient way possible.
Please, feel free to &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/rtfd/readthedocs.org/issues/&quot;&gt;open an issue in our issue tracker&lt;/a&gt;
if there is a use case we are not covering.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">Pull Request Builders available for all users</title>
    <id>https://blog.readthedocs.com/pull-request-builder-general-availability/</id>
    <updated>2021-01-27T00:00:00Z</updated>
    <published>2021-01-27T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/pull-request-builder-general-availability/" />
    <author>
      <name>Eric Holscher</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;pull-request-builders-available-for-all-users&quot;&gt;

&lt;p&gt;We’re excited to announce that &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/latest/guides/autobuild-docs-for-pull-requests.html&quot;&gt;Pull Request building&lt;/a&gt; is now available for all Read the Docs users.
We have been working on this feature for over a year,
and having it available for all our users is a major milestone.&lt;/p&gt;
&lt;p&gt;This feature allows users to confirm documentation builds correctly for all of their commits,
not just ones merged into branches that are activated on Read the Docs.
This moves documentation into your continuous integration pipeline,
and improves the workflow for everyone working on documentation.&lt;/p&gt;
&lt;div class=&quot;figure align-default&quot; id=&quot;id1&quot;&gt;
&lt;img alt=&quot;GitHub Build Status Reporting for Pull Requests.&quot; src=&quot;../../../_images/github-build-status-reporting.gif&quot; style=&quot;width: 70%;&quot; /&gt;
&lt;p class=&quot;caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;GitHub Build Status Reporting for Pull Requests&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You can read more about this new feature in our &lt;a class=&quot;reference internal&quot; href=&quot;../../../building-docs-for-pull-requests/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;previous blog post announcing it&lt;/span&gt;&lt;/a&gt; and in our &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/page/guides/autobuild-docs-for-pull-requests.html&quot;&gt;documentation for the feature&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;serving-docs-for-every-branch&quot;&gt;
&lt;h2&gt;Serving docs for every branch&lt;/h2&gt;
&lt;p&gt;Along with building and validating each branch on your repository,
&lt;strong&gt;we also host a rendered version of the documentation.&lt;/strong&gt;
This allows you to see exactly how the docs will look when they are deployed.&lt;/p&gt;
&lt;p&gt;Building the documentation on Read the Docs during the development process also helps test integration with Read the Docs.
The entire build process is run for each commit,
so this will ensure that builds work as expected when you’re ready to merge into production.&lt;/p&gt;
&lt;p&gt;These previews will stay live for 90 days from the time you merge or close the Pull Request,
allowing you to finish any outstanding work on the task.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;limitations&quot;&gt;
&lt;h2&gt;Limitations&lt;/h2&gt;
&lt;p&gt;Due to the increased demand for build resources,
the Pull Request builders have the following limitations:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Read the Docs search is not enabled on these versions&lt;/li&gt;
&lt;li&gt;Only HTML versions of the documentation are built (not PDF, ePub, etc.)&lt;/li&gt;
&lt;li&gt;Documentation builds are concurrency limited. Read the Docs for Business concurrency varies based on your plan, and Read the Docs Community are limited to 2 concurrent builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are working to address these limitations over time,
but given the increase in scale with these builds it will take some time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;give-us-feedback&quot;&gt;
&lt;h2&gt;Give us feedback&lt;/h2&gt;
&lt;p&gt;We always love to hear from our users about the product.
If you have feedback on this feature of any others,
you can always reach us at &lt;a class=&quot;reference external&quot; href=&quot;mailto:hello&amp;#37;&amp;#52;&amp;#48;readthedocs&amp;#46;org&quot;&gt;hello&lt;span&gt;&amp;#64;&lt;/span&gt;readthedocs&lt;span&gt;&amp;#46;&lt;/span&gt;org&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">Automation Rules</title>
    <id>https://blog.readthedocs.com/automation-rules/</id>
    <updated>2020-05-04T00:00:00Z</updated>
    <published>2020-05-04T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/automation-rules/" />
    <author>
      <name>Santos Gallegos</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;automation-rules&quot;&gt;

&lt;p&gt;A time ago we introduced a new feature to help users to automate some tasks on Read the Docs.
&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/automation-rules.html&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;Automation rules&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you manage a project with several versions,
you may have noticed that Read the Docs doesn’t always activate your new versions &lt;a class=&quot;footnote-reference&quot; href=&quot;#id2&quot; id=&quot;id1&quot;&gt;[1]&lt;/a&gt;.
If you require to do any action over a new version,
you’ll need to log in your Read the Docs account and manually do so.&lt;/p&gt;
&lt;p&gt;With automation rules,
you can choose what do to after a new version is created.
To add a rule, you only need to choose a pattern and an action.
After that, every new tag or branch that matches the pattern will trigger the action.&lt;/p&gt;
&lt;img alt=&quot;../../../_images/automation-rule.png&quot; src=&quot;../../../_images/automation-rule.png&quot; style=&quot;width: 100%;&quot; /&gt;
&lt;p&gt;Currently, we only have two actions available:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Activate version&lt;/li&gt;
&lt;li&gt;Set version as default&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the pattern, you can select:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;All versions&lt;/li&gt;
&lt;li&gt;The ones that match SemVer&lt;/li&gt;
&lt;li&gt;Or you can write your own using a regular expression&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With automation rules you can do things like:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Activate new tags only&lt;/li&gt;
&lt;li&gt;Activate only branches that start with &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;v&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Activate tags and branches that belong to the &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;1.x&lt;/span&gt;&lt;/code&gt; release&lt;/li&gt;
&lt;li&gt;Set as default tags that have the &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-stable&lt;/span&gt;&lt;/code&gt; or &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;-release&lt;/span&gt;&lt;/code&gt; suffix&lt;/li&gt;
&lt;li&gt;Activate all tags except those containing the &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;--nightly&lt;/span&gt;&lt;/code&gt; suffix&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Find more information and examples in &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/automation-rules.html&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-doc&quot;&gt;our documentation&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What other tasks you would like to automate?
Let us know on a &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/issues/&quot;&gt;GitHub issue&lt;/a&gt;!&lt;/p&gt;
&lt;table class=&quot;docutils footnote&quot; frame=&quot;void&quot; id=&quot;id2&quot; rules=&quot;none&quot;&gt;
&lt;colgroup&gt;&lt;col class=&quot;label&quot; /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign=&quot;top&quot;&gt;
&lt;tr&gt;&lt;td class=&quot;label&quot;&gt;&lt;a class=&quot;fn-backref&quot; href=&quot;#id1&quot;&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;We activate and build new versions automatically only if you follow &lt;span class=&quot;target&quot; id=&quot;index-0&quot;&gt;&lt;/span&gt;&lt;a class=&quot;pep reference external&quot; href=&quot;https://www.python.org/dev/peps/pep-0440&quot;&gt;&lt;strong&gt;PEP 440&lt;/strong&gt;&lt;/a&gt;,
and the new version is greater than the current stable version.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">Announcing API v3 Beta</title>
    <id>https://blog.readthedocs.com/api-v3-beta/</id>
    <updated>2019-08-27T00:00:00Z</updated>
    <published>2019-08-27T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/api-v3-beta/" />
    <author>
      <name>Manuel Kaufmann</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;announcing-api-v3-beta&quot;&gt;

&lt;p&gt;In the last months, we have been working on making our API better.
Considering the limitations of our current REST API v2,
we decided to make a bigger step forward and create a new API v3,
putting the focus on the use cases we heard about from existing users.&lt;/p&gt;
&lt;p&gt;Compared to API v2, our new API v3 has some big differences that make it more user-friendly and useful.&lt;/p&gt;
&lt;p&gt;These differences includes:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;API access requires authentication&lt;/li&gt;
&lt;li&gt;Token based API authentication&lt;/li&gt;
&lt;li&gt;Read and write&lt;/li&gt;
&lt;li&gt;Resource lookup can use project’s slug&lt;/li&gt;
&lt;li&gt;Wider resource coverage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some examples of new queries and actions that will be possible with the API are:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#project-create&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Import a new project&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#projects-list&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;List all my projects&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#version-update&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Activate a version&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#build-triggering&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Trigger a build for a specific version&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#build-details&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Check build status&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#redirects&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;Manage redirects&lt;/span&gt;&lt;/a&gt; and &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/stable/api/v3.html#environment-variables&quot; title=&quot;(in Read the Docs user documentation v7.4.1)&quot;&gt;&lt;span class=&quot;xref std std-ref&quot;&gt;environment variables programmatically&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to know more about it,
please check out the full &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/page/api/v3.html&quot;&gt;APIv3 documentation&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;invite-only-beta-feature&quot;&gt;
&lt;h2&gt;Invite-only beta feature&lt;/h2&gt;
&lt;p&gt;APIv3 is currently in an invite-only beta state on our community site, &lt;a class=&quot;reference external&quot; href=&quot;https://readthedocs.org&quot;&gt;https://readthedocs.org&lt;/a&gt;.
In case you want to test it and give us feedback on it,
please &lt;a class=&quot;reference external&quot; href=&quot;mailto:support&amp;#37;&amp;#52;&amp;#48;readthedocs&amp;#46;org&quot;&gt;email us&lt;/a&gt; to get early access.&lt;/p&gt;
&lt;p&gt;Based on the feedback we receive from you, we plan to add more features to cover most of the common use cases.
Please, help us with your feedback to make the new APIv3 &lt;em&gt;even&lt;/em&gt; better!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">GSOC 2019: Autobuild Documentation for Pull Requests</title>
    <id>https://blog.readthedocs.com/building-docs-for-pull-requests/</id>
    <updated>2019-08-14T00:00:00Z</updated>
    <published>2019-08-14T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/building-docs-for-pull-requests/" />
    <author>
      <name>Maksudul Haque</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;gsoc-2019-autobuild-documentation-for-pull-requests&quot;&gt;

&lt;p&gt;Building documentation for pull requests is one of the most requested features of Read the Docs.
Similar to how a continuous integration system runs a test suite on every pull request,
this change would build the documentation for each pull request
and send build status notification to the providers’ Status API (e.g. Github Status API).
This will let users check if the documentation build passed
and also how the documentation looks before merging it to master.&lt;/p&gt;
&lt;p&gt;As a student of Google Summer of Code (GSoC) 2019, I (&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/saadmk11&quot;&gt;Maksudul Haque&lt;/a&gt;) was tasked with building this feature.
The main goal of my project was to make it possible to build documentation whenever a pull request was created,
and send build status notification to the Providers’ Status API.&lt;/p&gt;
&lt;p&gt;To see this feature in action you can click on one of the &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/pulls&quot;&gt;pull requests&lt;/a&gt; on readthedocs.org repository.&lt;/p&gt;
&lt;div class=&quot;figure align-default&quot; id=&quot;id1&quot;&gt;
&lt;img alt=&quot;GitHub Build Status Reporting for Pull Requests.&quot; src=&quot;../../../_images/github-build-status-reporting.gif&quot; style=&quot;width: 70%;&quot; /&gt;
&lt;p class=&quot;caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;GitHub Build Status Reporting for Pull Requests&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;google-summer-of-code&quot;&gt;
&lt;h1&gt;Google Summer of Code&lt;/h1&gt;
&lt;p&gt;Google Summer of Code is a global program where students work with an open source organization
on a 3 month programming project. &lt;strong&gt;Autobuild Documentation for Pull Requests&lt;/strong&gt; was one of the project ideas on
Read the Docs &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/blob/3.5.3/docs/gsoc.rst#autobuild-docs-for-pull-requests&quot;&gt;Project Ideas&lt;/a&gt; for Google Summer of Code 2019. I applied for the project and got accepted.&lt;/p&gt;
&lt;p&gt;I started working on this project since May 2019.
All of my work on this project can be seen in the &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/orgs/readthedocs/projects/8&quot;&gt;Pull Request Builder Board&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;background&quot;&gt;
&lt;h1&gt;Background&lt;/h1&gt;
&lt;p&gt;Many of our users wanted a way to visualize the documentation update that was made in a pull request.
They also want to know whether the documentation build will pass before merging the pull request to master.
This would allow users to have more confidence on the pull request
and make the pull request less likely to break the documentation after merging.
So, to achieve this Read the Docs &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/en/latest/team.html#development-team&quot;&gt;core team&lt;/a&gt; selected &lt;strong&gt;Autobuild Documentation for Pull Requests&lt;/strong&gt;
as one of the projects of Google Summer of Code 2019.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;pull-request-builder-features&quot;&gt;
&lt;h1&gt;Pull Request Builder Features&lt;/h1&gt;
&lt;p&gt;Currently I have implemented these features and working on more upcoming features.
Some of the major features are as follows:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;strong&gt;Creating External Versions:&lt;/strong&gt; We create an external version when we receive a pull request
webhook event for a project from GitHub and trigger a build for that version.
External versions are short-lived versions that are separate from the project’s main documentation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synchronizing External Versions:&lt;/strong&gt; Whenever there is a new commit on the pull request,
we synchronize the external version for that pull request and trigger a new documentation build with the latest changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deleting External Versions:&lt;/strong&gt; Whenever the pull request is closed or merged,
we delete the external Version associated with that pull request.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Warning Banner for pull request documentation:&lt;/strong&gt; While building documentation for pull requests
we add a warning banner at the top of those documentations to let the users know that
this documentation was generated for pull requests and is not the main documentation for the project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We send build status reports to the status API of the provider (e.g. GitHub).
When a build is triggered for a pull request we send build pending notification with the build URL
and after the build has finished we send success notification if the build succeeded without any error
or failure notification if the build failed.
By going to the build URL provided in the status report users can view the build steps
and also see the documentation generated by that build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Currently, we only support GitHub and planning to extend to GitLab and BitBucket.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;getting-started&quot;&gt;
&lt;h1&gt;Getting Started&lt;/h1&gt;
&lt;p&gt;Building documentation for pull requests is currently in Beta testing and only supports Github repositories.
If you want to dive in and enable this feature for your project you can &lt;a class=&quot;reference external&quot; href=&quot;mailto:support&amp;#37;&amp;#52;&amp;#48;readthedocs&amp;#46;org&quot;&gt;email us&lt;/a&gt;
with the URL of your ReadtheDocs project.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;future-improvements&quot;&gt;
&lt;h1&gt;Future Improvements&lt;/h1&gt;
&lt;p&gt;We are planing to extend this feature to other platforms such as GitLab and BitBucket.
We are also planning to make this feature more customizable through our configuration file (&lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;.readthedocs.yaml&lt;/span&gt;&lt;/code&gt;).
If you have any improvements or features in mind for building documentation for Pull requests we would love to know about it.
Please feel free to let us know by submitting an &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/issues/new&quot;&gt;issue on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;contributors-wanted&quot;&gt;
&lt;h1&gt;Contributors Wanted&lt;/h1&gt;
&lt;p&gt;As Read the Docs is an open source project backed by a small team of developers,
most of them are busy to keep things up and running only. Therefore, its quite
hard for them to take time to implement new features. We would like to get more contributors
to improve this feature. If you know a bit of Django and Python and interested to improve this feature
you are always welcome to contribute. If you need any support to start contributing, you can get in touch with
me or any other member of  Read the Docs team. You can find all of us at &lt;cite&gt;#readthedocs&lt;/cite&gt; freenode
IRC channel or &lt;a class=&quot;reference external&quot; href=&quot;https://gitter.im/rtfd/readthedocs.org&quot;&gt;readthedocs gitter&lt;/a&gt; channel. I am &lt;cite&gt;saadmk11&lt;/cite&gt; at IRC and &lt;cite&gt;&amp;#64;saadmk11&lt;/cite&gt; at gitter.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;To conclude, I would like to say this was a much needed feature for Read the Docs and also its users.
This feature will improve our platform and make it a true Continuous Documentation platform.
I think that many users will benefit from this feature.
We will keep making improvements along the way for a better user experience.&lt;/p&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry xml:base="https://blog.readthedocs.com/archive/tag/feature/atom.xml">
    <title type="text">GSOC 2019: Improved Search Results and Search As You Type</title>
    <id>https://blog.readthedocs.com/improved-search-and-search-as-you-type/</id>
    <updated>2019-08-13T00:00:00Z</updated>
    <published>2019-08-13T00:00:00Z</published>
    <link href="https://blog.readthedocs.com/improved-search-and-search-as-you-type/" />
    <author>
      <name>Vaibhav Gupta</name>
    </author>
    <content type="html">&lt;div class=&quot;section&quot; id=&quot;gsoc-2019-improved-search-results-and-search-as-you-type&quot;&gt;

&lt;p&gt;Giving users the ability to easily find the information that they
are looking for has always been important for Read the Docs.
This year, I, &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/dojutsu-user&quot;&gt;Vaibhav Gupta&lt;/a&gt;, took the opportunity provided
by Google Summer of Code to improve the search.
The main goals of my &lt;a class=&quot;reference external&quot; href=&quot;https://summerofcode.withgoogle.com/projects/#5465587940065280&quot;&gt;GSoC project&lt;/a&gt; were:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;to make a &lt;a class=&quot;reference external&quot; href=&quot;https://readthedocs-sphinx-search.readthedocs.io/en/latest/&quot;&gt;Sphinx extension&lt;/a&gt; to provide “search you type” experience to the users.&lt;/li&gt;
&lt;li&gt;to add support for multiple hits per search result.&lt;/li&gt;
&lt;li&gt;to improve the UI/UX around code search.&lt;/li&gt;
&lt;li&gt;to add support for search analytics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Search as you type feature is live on our docs.
You can go through these links to experience it:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/?rtd_search=contributing&quot;&gt;https://docs.readthedocs.io/?rtd_search=contributing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/?rtd_search=api/v3/projects/&quot;&gt;https://docs.readthedocs.io/?rtd_search=api/v3/projects/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;section&quot; id=&quot;google-summer-of-code&quot;&gt;
&lt;h2&gt;Google Summer of Code&lt;/h2&gt;
&lt;p&gt;Google Summer of Code is a global program where students work with
an open source organization on a 3-month programming project.
I got accepted in the program and was excited to spend my summer with Read the Docs.&lt;/p&gt;
&lt;p&gt;I have worked full time during the GSoC coding period and implemented various features.
All of my search related work can be seen in the &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/orgs/readthedocs/projects/7&quot;&gt;In-Doc Search UI Project Board&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;background&quot;&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;The search code was originally contributed by &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/robhudson&quot;&gt;Rob Hudson&lt;/a&gt;,
&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/pull/493&quot;&gt;back in 2013&lt;/a&gt; and then improved upon by other contributors.
It was greatly improved and upgraded by &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/safwanrahman&quot;&gt;Safwan Rahman&lt;/a&gt; during &lt;a class=&quot;reference internal&quot; href=&quot;../../../search-improvements/&quot;&gt;&lt;span class=&quot;doc&quot;&gt;GSoC’18&lt;/span&gt;&lt;/a&gt;.
Continuing on the same path,
I have implemented some new features on top of the existing search backend.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;new-features&quot;&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;p&gt;During the GSoC period, I have worked on the following features:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;strong&gt;In-Doc Search UI&lt;/strong&gt;: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs-sphinx-search&quot;&gt;readthedocs-sphinx-search&lt;/a&gt; is a sphinx extension that adds a clean and minimal
search UI to your docs. It supports “search as you type” feature.
So, it is now possible to get instant results without being redirected to any other page.
Read the docs &lt;a class=&quot;reference external&quot; href=&quot;https://readthedocs-sphinx-search.readthedocs.io/en/latest/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;figure align-center&quot; id=&quot;id1&quot;&gt;
&lt;a class=&quot;reference external image-reference&quot; href=&quot;/_static/in-doc-search-demo.gif&quot;&gt;&lt;img alt=&quot;In-doc search ui demo&quot; src=&quot;../../../_images/in-doc-search-demo.gif&quot; style=&quot;width: 100%;&quot; /&gt;&lt;/a&gt;
&lt;p class=&quot;caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;In-Doc Search UI Demo&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;strong&gt;Multiple Hits Per Search Result&lt;/strong&gt;: This is one of the highly requested features.
We now support search results from the sections of the docs, clicking on which will take you
to that particular section and not just to the top of the result page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code Search&lt;/strong&gt;: We now support code search. If you want to search a particular function
or an API endpoint – you can just type your query and you will find it in the results.
Eg: &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;api/v3/&lt;/span&gt;&lt;/code&gt; or &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;module.function&lt;/span&gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search Analytics&lt;/strong&gt;: We now have support for search analytics.
These analytics makes it easy to know what the users are looking for in your documentation.
You can see these analytics in your project admin dashboard.
Currently, this feature is in beta state and is available under a &lt;a class=&quot;reference external&quot; href=&quot;http://docs.readthedocs.io/page/guides/feature-flags.html&quot;&gt;feature flag&lt;/a&gt;.
We plan to make this available for everyone soon.
If you want to test this feature out and help giving us feedback,
please contact us via &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/issues/new&quot;&gt;GitHub issues&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;figure align-center&quot; id=&quot;id2&quot;&gt;
&lt;a class=&quot;reference external image-reference&quot; href=&quot;/_static/search-analytics-demo.png&quot;&gt;&lt;img alt=&quot;Search analytics in project admin dashboard&quot; src=&quot;../../../_images/search-analytics-demo.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/a&gt;
&lt;p class=&quot;caption&quot;&gt;&lt;span class=&quot;caption-text&quot;&gt;Search analytics demo dashboard&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;what-next&quot;&gt;
&lt;h2&gt;What Next?&lt;/h2&gt;
&lt;p&gt;We don’t intend to stop just yet.
We are planning to work on some more cool features in the near future,
some of which are:&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;strong&gt;Search Facets&lt;/strong&gt;:
Facets can be used to make search more accurate.
For example: In &lt;a class=&quot;reference external&quot; href=&quot;http://docs.celeryproject.org/en/latest/&quot;&gt;Celery docs&lt;/a&gt;, facets can be used to search inside &lt;a class=&quot;reference external&quot; href=&quot;http://docs.celeryproject.org/projects/kombu/en/latest/&quot;&gt;Kombu docs&lt;/a&gt; for “serializers”,
like &lt;code class=&quot;docutils literal notranslate&quot;&gt;&lt;span class=&quot;pre&quot;&gt;subproject:&lt;/span&gt; &lt;span class=&quot;pre&quot;&gt;kombu&lt;/span&gt; &lt;span class=&quot;pre&quot;&gt;serializers&lt;/span&gt;&lt;/code&gt;.
(&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/issues/5966&quot;&gt;readthedocs/readthedocs.org#5966&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search Results Ordered By Most Viewed Pages&lt;/strong&gt;:
It would be much more useful if the most viewed pages are shown first in the search results.
(&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs.org/issues/5968&quot;&gt;readthedocs/readthedocs.org#5968&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search Inside Sections&lt;/strong&gt;:
It would be good if users have the option to get the
search results from a particular section of the documentation.
For example: Getting results from only &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/page/guides/&quot;&gt;Guides&lt;/a&gt; of our &lt;a class=&quot;reference external&quot; href=&quot;https://docs.readthedocs.io/&quot;&gt;documentation&lt;/a&gt;.
(&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/readthedocs/readthedocs-sphinx-search/issues/23&quot;&gt;readthedocs/readthedocs-sphinx-search#23&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;contributors-wanted&quot;&gt;
&lt;h2&gt;Contributors Wanted&lt;/h2&gt;
&lt;p&gt;As Read the Docs is an open source project backed by a small team of developers,
most of them are busy just keeping the site up and running.
Therefore, it’s quite hard for them to take time to implement new features.
If you know some bit of Django or Python and Elasticsearch,
you can contribute to the search functionality of Read the Docs.
If you need any support to start contributing,
you can get in touch with me or any member of Read the Docs team.
You can find all of us at &lt;em&gt;#readthedocs&lt;/em&gt; freenode IRC channel or &lt;a class=&quot;reference external&quot; href=&quot;https://gitter.im/rtfd/readthedocs.org&quot;&gt;readthedocs gitter&lt;/a&gt; channel.
I am &lt;em&gt;dojutsu-user&lt;/em&gt; at IRC and &lt;em&gt;&amp;#64;dojutsu-user&lt;/em&gt; at gitter.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;These new features will make it much easier to find the relevant information in the docs.
There are an infinite number of ways it can be improved and I believe we can compete
with major search engines in terms of documentation searching.
We don’t need superhero or coding guru, just need people who understand Python,
Django and Elasticsearch and have some time to write some code for us.
You are a &lt;strong&gt;Superhero&lt;/strong&gt; to us if you can lend your time and effort to improve Read the Docs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
  </entry>
</feed>
