Display top level of book, in book navigation block In my theme's .theme file I have the book navigation block stored in a twig variable like so.

function mytheme_preprocess_page(&amp;$variables){
    $book = \Drupal\block\Entity\Block::load('booknavigation');
    $variables['book'] = \Drupal::entityTypeManager()
        -&gt;getViewBuilder('block')
        -&gt;view($book);
}


I'm then calling it in my page.html.twig template like so

&lt;div class="sidebar"&gt;
    {{ book }}
&lt;/div&gt;
&lt;div class="content"&gt;
    {{ page.content }}
&lt;/div&gt;


However on basic pages that are book pages, sibling book items are shown but the top level book page is not. Even when visiting the top level book page the link is not shown in the book block. 

Why isn't the top level of the book ever displayed? And is there a way I can get the top level to be shown?

UPDATE:
I've looked at creating a book-tree.html.twig. The contents are below 

{% import _self as book_tree %}

{#
  We call a macro which calls itself to render the full tree.
  @see http://twig.sensiolabs.org/doc/tags/macro.html
#}
{{ book_tree.book_links(items, attributes, 0) }}

{% macro book_links(items, attributes, menu_level) %}
  {% import _self as book_tree %}
  {% if items %}
    {% if menu_level == 0 %}
      &lt;ul{{ attributes.addClass('menu') }}&gt;
    {% else %}
      &lt;ul class="menu"&gt;
        {{ dump(book_tree|keys) }}
    {% endif %}
    {% for item in items %}
      {%
        set classes = [
          'menu-item',
          item.is_expanded ? 'menu-item--expanded',
          item.is_collapsed ? 'menu-item--collapsed',
          item.in_active_trail ? 'menu-item--active-trail',
        ]
      %}

      &lt;li{{ item.attributes.addClass(classes) }}&gt;
        {{ link(item.title, item.url) }}
        {% if item.below %}
          {{ book_tree.book_links(item.below, attributes, menu_level + 1) }}
        {% endif %}
      &lt;/li&gt;
    {% endfor %}
    &lt;/ul&gt;
  {% endif %}
{% endmacro %}


But I don't see where I can access the top level.

UPDATE: I found a workaround but I'm looking for a solution that does not require that workaround. Users should not have to create an empty page with the same title just to act as the non displayed top level.
This looks like a bug in the book module.

I have added a patch for it.

https://www.drupal.org/node/2827910#comment-11780887

You could add that patch, or create a new block that overrides the BookNavigationBlock,

in a custom module add /src/Plugin/Block/CustomBookNavigationBlock.php:

  namespace Drupal\mymodule\Plugin\Block;

  use Drupal\book\Plugin\Block\BookNavigationBlock;

    /**
     * Provides a 'Book navigation' block.
     *
     * @Block(
     *   id = "custom_book_navigation",
     *   admin_label = @Translation("Book navigation - Customized"),
     *   category = @Translation("Menus")
     * )
     */
    class CustomBookNavigationBlock extends BookNavigationBlock {

      /**
       * {@inheritdoc}
       */
      public function build() {
        $current_bid = 0;

        if ($node = $this-&gt;requestStack-&gt;getCurrentRequest()-&gt;get('node')) {
          $current_bid = empty($node-&gt;book['bid']) ? 0 : $node-&gt;book['bid'];
        }
        if ($this-&gt;configuration['block_mode'] == 'all pages') {
          return parent::build();
        }
        elseif ($current_bid) {
          // Only display this block when the user is browsing a book and do
          // not show unpublished books.
          $nid = \Drupal::entityQuery('node')
            -&gt;condition('nid', $node-&gt;book['bid'], '=')
            -&gt;condition('status', NODE_PUBLISHED)
            -&gt;execute();

          // Only show the block if the user has view access for the top-level node.
          if ($nid) {
            $tree = $this-&gt;bookManager-&gt;bookTreeAllData($node-&gt;book['bid'], $node-&gt;book);
            return $this-&gt;bookManager-&gt;bookTreeOutput($tree);
          }
        }
        return array();
      }

    }