I need to render just the submenu
I managed to grab just the child submenu of the current page. Each subtree has a getRouteParameters() fn that contains the node ID that it links to. I simply test if that route param node id == the current pages node id.

function mytheme_preprocess_page(&amp;$vars) {
  if (isset($vars['node']) &amp;&amp; is_numeric($vars['node']-&gt;id())) {
    $nid = $vars['node']-&gt;id();
    $menu_tree = \Drupal::menuTree();
    $menu_name = 'main';
    $parameters = $menu_tree-&gt;getCurrentRouteMenuTreeParameters($menu_name);
    $tree = $menu_tree-&gt;load($menu_name, $parameters);
    $manipulators = array(
      array('callable' =&gt; 'menu.default_tree_manipulators:checkAccess'),
      array('callable' =&gt; 'menu.default_tree_manipulators:generateIndexAndSort'),
      array('callable' =&gt; 'toolbar_menu_navigation_links'),
    );
    $tree = $menu_tree-&gt;transform($tree,$manipulators);
    $subtrees = array();
    foreach ($tree as $element) {
      $link = $element-&gt;link;
      if ($element-&gt;subtree) {
        $routeId = $element-&gt;link-&gt;getRouteParameters()['node'];
        if ($routeId == $nid) {
          $vars['menu_children'] = $menu_tree-&gt;build($element-&gt;subtree);
        }
      }
    }
  }
}