Snippets Admin

Bootstrap 5 Admin Dashboard with Sidebar and Data Table

A document manager dashboard with an icon rail, filter sidebar, content tabs and a selectable table with bulk archive.

Bootstrap 5 Bootstrap 6 No jQuery Jan 2020 4.5K views

<section class="wdw-stage p-0">
  <div class="container-fluid px-3 px-lg-4 py-4" style="max-width:1200px">
    <div class="wdw-dash wdw-card overflow-hidden d-flex">
      <nav class="wdw-rail d-none d-sm-flex flex-column align-items-center gap-2 py-3" aria-label="Main"><a href="#" class="wdw-rail-link" aria-label="Search"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg></a><a href="#" class="wdw-rail-link" aria-label="Files"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg></a><a href="#" class="wdw-rail-link is-active" aria-label="Documents" aria-current="page"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"/><path d="M14 3v5h5M9 13h6M9 17h6"/></svg></a><a href="#" class="wdw-rail-link" aria-label="Analytics"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 20V10M10 20V4M16 20v-7M22 20H2"/></svg></a><a href="#" class="wdw-rail-link" aria-label="Settings"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h10M18 6h2M4 12h2M10 12h10M4 18h12"/><circle cx="16" cy="6" r="2"/><circle cx="8" cy="12" r="2"/><circle cx="18" cy="18" r="2"/></svg></a></nav>
      <div class="flex-grow-1 min-w-0 d-flex flex-column flex-lg-row">
        <aside class="wdw-side p-3 p-lg-4">
          <h1 class="h4 wdw-heading mb-3 mb-lg-4">Docs</h1>
          <div class="nav nav-pills flex-lg-column gap-1" id="doc-filter" aria-label="Filter documents">
            <button class="nav-link active text-start" data-filter="all" type="button">All</button>
            <button class="nav-link text-start" data-filter="mine" type="button">Mine</button>
            <button class="nav-link text-start" data-filter="shared" type="button">Shared</button>
            <button class="nav-link text-start" data-filter="drafts" type="button">Drafts</button>
          </div>
        </aside>
        <main class="flex-grow-1 min-w-0 p-3 p-lg-4 bg-body-tertiary">
          <ul class="nav nav-underline mb-3 flex-nowrap overflow-auto" aria-label="Document types">
            <li class="nav-item"><a class="nav-link active" href="#" aria-current="page">Reports</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Presentations</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Pinboards</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Tickets</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Forms</a></li>
          </ul>
          <div class="bg-body rounded-4 border overflow-hidden">
            <div class="d-flex align-items-center justify-content-between px-3 py-2 border-bottom" style="min-height:52px">
              <span class="small text-body-secondary" id="doc-count" role="status">0 selected</span>
              <button type="button" class="btn btn-sm btn-primary rounded-pill px-3" id="doc-archive" disabled>Archive</button>
            </div>
            <div class="table-responsive">
              <table class="table table-hover align-middle mb-0" id="doc-table">
                <thead><tr class="small text-uppercase text-body-secondary"><th class="ps-3" style="width:48px"><input class="form-check-input" type="checkbox" id="doc-all" aria-label="Select all"></th><th>Name</th><th class="d-none d-md-table-cell">Description</th><th class="text-end pe-3">Created</th></tr></thead>
                <tbody><tr data-cat="mine"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select Last quarter revenue"></td><td class="fw-semibold">Last quarter revenue</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Revenue for last quarter in state America for year 2025</td><td class="text-body-secondary text-end pe-3 text-nowrap small">6 minutes ago</td></tr><tr data-cat="mine"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select Expenses in 2025"></td><td class="fw-semibold">Expenses in 2025</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Annual expense breakdown by department</td><td class="text-body-secondary text-end pe-3 text-nowrap small">2 hours ago</td></tr><tr data-cat="shared"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select Accounting"></td><td class="fw-semibold">Accounting</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Ledger exports and reconciliations</td><td class="text-body-secondary text-end pe-3 text-nowrap small">5 hours ago</td></tr><tr data-cat="shared"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select Starbucks orders"></td><td class="fw-semibold">Starbucks orders</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Supplier orders for the Riga office</td><td class="text-body-secondary text-end pe-3 text-nowrap small">12 hours ago</td></tr><tr data-cat="shared"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select East coast customers"></td><td class="fw-semibold">East coast customers</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Customer list and renewal dates</td><td class="text-body-secondary text-end pe-3 text-nowrap small">Yesterday</td></tr><tr data-cat="drafts"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select Last quarter expenses"></td><td class="fw-semibold">Last quarter expenses</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Travel, software and contractor spend</td><td class="text-body-secondary text-end pe-3 text-nowrap small">2 days ago</td></tr><tr data-cat="drafts"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select HR worksheet"></td><td class="fw-semibold">HR worksheet</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Headcount plan and onboarding checklist</td><td class="text-body-secondary text-end pe-3 text-nowrap small">2 days ago</td></tr><tr data-cat="mine"><td class="ps-3"><input class="form-check-input row-check" type="checkbox" aria-label="Select Salaries last quarter"></td><td class="fw-semibold">Salaries last quarter</td><td class="text-body-secondary d-none d-md-table-cell text-truncate" style="max-width:260px">Payroll summary, restricted access</td><td class="text-body-secondary text-end pe-3 text-nowrap small">1 week ago</td></tr></tbody>
              </table>
            </div>
          </div>
        </main>
      </div>
    </div>
  </div>
</section>

Built on Bootstrap 6.0.0-alpha.1 (ES modules, no jQuery). Load Bootstrap through an import map and run the JavaScript as type="module" — the downloaded file is already set up that way. Alpha releases can still change class names.

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.

Free to use in personal and commercial projects under the MIT license.