diff --git a/site/assets/js/application.js b/site/assets/js/application.js
index c825d737378ebbd87ccd23d520f6c917c0ba4cde..e99fbb8a78fcd3db6bf13a2695adcaa6cd614015 100644
--- a/site/assets/js/application.js
+++ b/site/assets/js/application.js
@@ -19,19 +19,6 @@
     return [].slice.call(list)
   }
 
-  makeArray(document.querySelectorAll('.js-sidenav-group'))
-    .forEach(function (sidenavGroup) {
-      var groupHasLinks = Boolean(sidenavGroup.querySelector('li'))
-      var groupLink = sidenavGroup.querySelector('a')
-
-      if (groupHasLinks) {
-        groupLink.addEventListener('click', function (e) {
-          e.preventDefault()
-          e.target.parentNode.classList.toggle('active')
-        }, true)
-      }
-    })
-
   // Tooltip and popover demos
   makeArray(document.querySelectorAll('.tooltip-demo'))
     .forEach(function (tooltip) {
diff --git a/site/assets/scss/_sidebar.scss b/site/assets/scss/_sidebar.scss
index 4348615d6287d44bbeb16df79f8039b6255359f3..4e9e0846c27fa08683e3e021e99067d24c8fce08 100644
--- a/site/assets/scss/_sidebar.scss
+++ b/site/assets/scss/_sidebar.scss
@@ -1,82 +1,67 @@
-// stylelint-disable declaration-no-important
-
 .bd-links {
-  @include media-breakpoint-up(md) {
-    @supports (position: sticky) {
-      position: sticky;
-      top: 5rem;
-      height: subtract(100vh, 7rem);
-      overflow-y: auto;
-    }
-  }
+  font-weight: 600;
 
-  // Override collapse behaviors
   @include media-breakpoint-up(md) {
+    position: sticky;
+    top: 5rem;
+    // Override collapse behaviors
+    // stylelint-disable-next-line declaration-no-important
     display: block !important;
-  }
-}
-
-:not(.active) > .bd-sidenav {
-  display: none;
-}
-
-.bd-sidenav-group-link {
-  padding: .25rem .625rem .25rem .5rem;
-  font-weight: 600;
-  color: rgba($black, .65);
-  text-decoration: none;
-  @include border-radius(.25rem);
-
-  > * { pointer-events: none; }
-
-  &:hover,
-  &:focus {
-    color: rgba($black, .85);
-    background-color: rgba($bd-purple-bright, .1);
-  }
-}
-
-.bd-sidenav-group {
-  &.has-children .bd-sidenav-group-link::before {
-    display: inline-block;
-    margin-right: .25rem;
-    line-height: 0; // Align in the middle
-    content: escape-svg($sidebar-collapse-icon);
+    height: subtract(100vh, 7rem);
+    // Prevent focus styles to be cut off:
+    padding-left: .25rem;
+    margin-left: -.25rem;
+    overflow-y: auto;
   }
 
-  &.active {
-    .bd-sidenav-group-link::before {
-      transform: rotate(90deg);
-    }
-
-    > .bd-sidenav-group-link {
-      color: rgba($black, .85);
-    }
-  }
-}
-
-// All levels of nav
-.bd-sidebar .nav {
-  padding-left: 1.25rem;
-
-  > li > a {
-    display: inline-block;
-    padding: .25rem .5rem;
-    @include font-size(.875rem);
+  a {
+    display: inline-flex;
+    align-items: center;
+    padding: .1875rem .5rem;
+    margin-top: .125rem;
     color: rgba($black, .65);
-    text-decoration: none;
+    text-decoration: if($link-decoration == none, null, none);
     @include border-radius(.25rem);
 
     &:hover,
     &:focus {
       color: rgba($black, .85);
+      text-decoration: if($link-hover-decoration == underline, none, null);
       background-color: rgba($bd-purple-bright, .1);
     }
+
+    // Indent if there's no submenu
+    &:only-child {
+      margin-left: 1.25rem;
+    }
+
+    // Add chevron if there's a submenu
+    &:not(:only-child) {
+      &::before {
+        width: 1.25em;
+        line-height: 0; // Align in the middle
+        content: escape-svg($sidebar-collapse-icon);
+        @include transition(transform .35s ease);
+        transform-origin: .5em 50%;
+      }
+
+      &:not(.collapsed) {
+        color: rgba($black, .85);
+
+        &::before {
+          transform: rotate(90deg);
+        }
+      }
+    }
+
+    // Adjust font size and font weights in submenu
+    + ul {
+      @include font-size(.875rem);
+      font-weight: 400;
+    }
   }
 
-  > .active > a,
-  > .active:hover > a,
-  > .active:focus > a {
+  .active {
     font-weight: 600;
     color: rgba($black, .85);
   }
diff --git a/site/layouts/_default/docs.html b/site/layouts/_default/docs.html
index b1efb6b132bdd67f1116782776cf43d506657d32..383ff0f0c1d0958a7cd50686990ab79d885c18b8 100644
--- a/site/layouts/_default/docs.html
+++ b/site/layouts/_default/docs.html
@@ -11,7 +11,7 @@
 
     <div class="container-xl my-4">
       <div class="row flex-xl-nowrap">
-        <div class="col-md-3 bd-sidebar">
+        <div class="col-md-3">
           {{ partial "docs-sidebar" . }}
         </div>
 
diff --git a/site/layouts/partials/docs-sidebar.html b/site/layouts/partials/docs-sidebar.html
index 772cbd7f739d0ac5dd2873e29f9fa338d28c54d2..9af562340ddacf4642e9cb4ffa5bc7c5e3093f88 100644
--- a/site/layouts/partials/docs-sidebar.html
+++ b/site/layouts/partials/docs-sidebar.html
@@ -2,7 +2,7 @@
   {{- $url := split .Permalink "/" -}}
   {{- $page_slug := index $url (sub (len $url) 2) -}}
 
-  <ul class="list-unstyled">
+  <ul class="list-unstyled mb-0">
   {{- range $group := .Site.Data.sidebar -}}
     {{- $link := $group.title -}}
     {{- $link_slug := $link | urlize -}}
@@ -15,17 +15,17 @@
     {{- $group_slug := $group.title | urlize -}}
     {{- $active_group := eq $.Page.Params.group $group_slug }}
 
-    <li class="bd-sidenav-group my-1{{ if $active_group }} active{{ end }} js-sidenav-group{{ if $group.pages }} has-children{{ end }}">
-      <a class="d-inline-flex align-items-center bd-sidenav-group-link" href="/docs/{{ $.Site.Params.docs_version }}/{{ $group_slug }}/{{ if $group.pages }}{{ $link_slug }}/{{ end }}"{{ if $active_group }} aria-current="true"{{ end }}>
+    <li class="my-1{{ if $active_group }} active{{ end }}">
+      <a class="{{ if not $active_group }} collapsed{{ end }}" data-toggle="collapse" href="#{{ $group_slug }}-collapse" role="button" aria-expanded="{{ $active_group }}"{{ if $active_group }} aria-current="true"{{ end }}>
         {{ $group.title }}
       </a>
 
       {{- if $group.pages }}
-      <ul class="nav bd-sidenav flex-column mb-2">
+      <ul class="list-unstyled mb-2 collapse{{ if $active_group }} show{{ end }}" id="{{ $group_slug }}-collapse">
         {{- range $doc := $group.pages -}}
           {{- $doc_slug := $doc.title | urlize }}
-          <li{{ if and $active_group (eq $page_slug $doc_slug) }} class="active bd-sidenav-active"{{ end }}>
-            <a href="/docs/{{ $.Site.Params.docs_version }}/{{ $group_slug }}/{{ $doc_slug }}/"{{ if and $active_group (eq $page_slug $doc_slug) }} aria-current="page"{{ end }}>
+          <li>
+            <a href="/docs/{{ $.Site.Params.docs_version }}/{{ $group_slug }}/{{ $doc_slug }}/"{{ if and $active_group (eq $page_slug $doc_slug) }} class="active" aria-current="page"{{ end }}>
               {{- $doc.title -}}
             </a>
           </li>
@@ -36,8 +36,8 @@
   {{- end }}
 
     <li class="my-3 mx-4 border-top"></li>
-    <li class="bd-sidenav-group pl-3">
-      <a class="d-inline-flex align-items-center bd-sidenav-group-link" href="/docs/{{ $.Site.Params.docs_version }}/migration/">
+    <li{{ if eq $page_slug "migration" }} class="active"{{ end }}>
+      <a href="/docs/{{ $.Site.Params.docs_version }}/migration/">
         Migration
       </a>
     </li>