Metis - Free Bootstrap 5 Admin Dashboard Template
See the codeA completely modernized, powerful, and free Bootstrap 5 admin dashboard template built with cutting-edge web technologies.
π Version 3.7.0 Release - Charts are now Chart.js (MIT): every chart rebuilt, re-themed live on light/dark switch, and the chart bundle down from 207 KB to 73 KB gzip. See the CHANGELOG for the full list.

scripts/utils/chart-palette.js is the single source for every chart colour, checked for lightness band, chroma floor, colour-blind separation and contrast in both themes<canvas>; only the chart types used are registered, and charts re-theme live when you switch light/darkTake your project to the next level with premium dashboards from DashboardPack β polished designs, extensive documentation, and ongoing updates included.
TailPanel React + TypeScript + Tailwind CSS + Vite. 9 unique dashboards with light/dark toggle. |
Admindek Bootstrap 5 + vanilla JS. 100+ components, theme switcher, RTL, 10 color presets. |
Adminty Bootstrap 5. 160+ pages, rich component library for enterprise applications. |
ArchitectUI Bootstrap 5. 250+ elements, component-driven architecture, 9 dashboard styles. |
Kero Bootstrap 5 + Webpack. Horizontal and sidebar navigation modes, SASS customization. |
Cryptocurrency Dashboard Bootstrap. Tailored for ICO launches, crypto wallets, and blockchain analytics. |
See All Templates on DashboardPack
# Clone the repository
git clone https://github.com/puikinsh/Bootstrap-Admin-Template.git metis-admin
cd metis-admin
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
metis-admin/
βββ src-modern/ # Modern source files
β βββ *.html # Page templates
β βββ scripts/ # JavaScript modules
β β βββ components/ # Page-specific components
β β βββ utils/ # Utility functions
β β βββ main.js # Application entry point
β βββ styles/ # SCSS stylesheets
β β βββ abstracts/ # Variables, mixins, utilities
β β βββ components/ # UI component styles
β β βββ layout/ # Layout-specific styles
β β βββ pages/ # Page-specific styles
β β βββ themes/ # Theme variants
β βββ assets/ # Static assets
βββ dist-modern/ # Production build output
βββ node_modules/ # Dependencies
βββ package.json # Project configuration
βββ vite.config.js # Build configuration
βββ README.md # This file
# Development
npm run dev # Start development server with HMR
npm run dev:host # Start dev server accessible on network
# Production
npm run build # Create optimized production build
npm run preview # Preview production build locally
# Quality
npm run lint # ESLint check
npm run format # Format with Prettier
npm run audit # Fail on high/critical advisories
npm run test:build # Build, load all 30 pages headless, then drive the auth flows
npm run verify # lint + audit + test:build
# Maintenance
npm run clean # Clean build artifacts
npm run test:build loads every built page in headless Chromium and fails on
uncaught exceptions, console errors, failed or external requests, chart pages
that render no charts, and element pages that render no highlighted code.
Playwright is intentionally not a dependency β it would add a large install for everyone who just wants to build the template. Provide it yourself:
npx playwright install chromium
PLAYWRIGHT_PATH=playwright npm run test:build
CI installs it as a separate step (see .github/workflows/ci.yml).
Edit src-modern/styles/scss/abstracts/_variables.scss:
// Brand colors β the accent is an interaction signal, not decoration.
// It marks primary actions, the active nav item and focus rings; it does not
// tint icon tiles, headings or backgrounds.
$primary: #2563eb; // Your brand primary color
$secondary: #52525b; // Zinc 600
$success: #16a34a; // Success state color
// Typography
$font-family-sans-serif: "Inter", system-ui, sans-serif;
$font-size-base: 0.875rem;
// Spacing & layout
$border-radius: 0.5rem;
// Shadows are reserved for surfaces that genuinely float β dropdowns, modals,
// the mobile sidebar. Static cards get a 1px border instead; shadowing them all
// makes the whole page appear to hover and the shadow stops meaning anything.
$box-shadow: 0 1px 3px rgba(9, 9, 11, 0.06), 0 1px 2px rgba(9, 9, 11, 0.04);
Changing $primary does not repaint the charts β chart colors are validated for
color-blind separation and contrast, so they live in
src-modern/scripts/utils/chart-palette.js. See below.
src-modern/src-modern/styles/scss/pages/src-modern/scripts/components/src-modern/scripts/main.js// src-modern/scripts/components/example.js
import Alpine from 'alpinejs';
document.addEventListener('alpine:init', () => {
Alpine.data('exampleComponent', () => ({
// Component state and methods
init() {
console.log('Example component initialized');
}
}));
});
chartjs-chart-treemap (Sales by Location) and chartjs-plugin-zoom (drag-to-zoom on Reports β Revenue Trends). Nothing in the template carries a commercial or OEM licence, so you can ship it in client and commercial projects.scripts/utils/charts.js holds all chart styling (fonts, gridlines, tooltips, legends) read from the same CSS tokens as the rest of the UI.See the CHANGELOG for the full chart-by-chart list.
flagcdn.com images are all gone. Fonts, charts, highlighting and images are self-hosted, so the template works offline, behind a strict CSP, and without disclosing visitor IPs to a CDN. The smoke test enforces this.postcss (path traversal), immutable (trie overflow + hash-collision DoS), brace-expansion (DoS). npm audit reports 0, with overrides pinning the transitive packages so a fresh resolve can't regress.lucide (a 411 KB unfinished icon provider that rendered blank SVGs) and the unused @vitejs/plugin-legacy.Swal was used as a global in 7 components without an import β 19 crash sites. All fixed and verified in a real browser.npm run test:build loads all 30 built pages in headless Chromium and fails on uncaught exceptions, console errors, failed or external requests, or missing charts/highlighting, then drives the auth flows for real (scripts/auth-interaction-test.mjs). GitHub Actions runs it on every push plus weekly for fresh advisories.onclick handlers replaced with delegated data-* handlers.See the CHANGELOG for full detail, including known follow-ups.
innerHTML interpolation in toast/activity feed; inline onclick removed from elements-tables; Referrer-Policy + X-Content-Type-Options meta tags added to every page; localStorage reads schema-validated; password fields tagged autocomplete="new-password"; console.* and debugger stripped from production bundles:focus-visible), prefers-reduced-motion media query, aria-controls/aria-expanded on the sidebar toggle, sortable table headers gain role="button" + aria-sort + keyboard handlers, single <h1> per page, normalized heading hierarchycssCodeSplit, cssMinify: lightningcss, target: 'es2020' in Vite configpagehide; chart instances .destroy()'dvendor-charts chunk)searchComponent definitions extracted to a createSearchComponent factory; magic numbers hoisted to a constants.js moduledist-modern/ no longer tracked in git; abandoned dev scripts removedIE11 is not supported.
We welcome contributions! Please see our Contributing Guidelines for details.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE.md file for details.
Copyright (c) 2025 Aigars Silkalns & Colorlib
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Colorlib - The most popular source for free WordPress themes and HTML templates.
Aigars Silkalns - Project maintainer and founder of Colorlib.
β Star this repository if you found it helpful!
Built with β€οΈ by the Colorlib team
227 followers Β· starred Jan 2014
201 followers Β· starred May 2013
78 followers Β· starred Mar 2015
9 followers Β· starred Nov 2013
Metis - Free Bootstrap 5 Admin Dashboard Template
See the codeA completely modernized, powerful, and free Bootstrap 5 admin dashboard template built with cutting-edge web technologies.
π Version 3.7.0 Release - Charts are now Chart.js (MIT): every chart rebuilt, re-themed live on light/dark switch, and the chart bundle down from 207 KB to 73 KB gzip. See the CHANGELOG for the full list.

scripts/utils/chart-palette.js is the single source for every chart colour, checked for lightness band, chroma floor, colour-blind separation and contrast in both themes<canvas>; only the chart types used are registered, and charts re-theme live when you switch light/darkTake your project to the next level with premium dashboards from DashboardPack β polished designs, extensive documentation, and ongoing updates included.
TailPanel React + TypeScript + Tailwind CSS + Vite. 9 unique dashboards with light/dark toggle. |
Admindek Bootstrap 5 + vanilla JS. 100+ components, theme switcher, RTL, 10 color presets. |
Adminty Bootstrap 5. 160+ pages, rich component library for enterprise applications. |
ArchitectUI Bootstrap 5. 250+ elements, component-driven architecture, 9 dashboard styles. |
Kero Bootstrap 5 + Webpack. Horizontal and sidebar navigation modes, SASS customization. |
Cryptocurrency Dashboard Bootstrap. Tailored for ICO launches, crypto wallets, and blockchain analytics. |
See All Templates on DashboardPack
# Clone the repository
git clone https://github.com/puikinsh/Bootstrap-Admin-Template.git metis-admin
cd metis-admin
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
metis-admin/
βββ src-modern/ # Modern source files
β βββ *.html # Page templates
β βββ scripts/ # JavaScript modules
β β βββ components/ # Page-specific components
β β βββ utils/ # Utility functions
β β βββ main.js # Application entry point
β βββ styles/ # SCSS stylesheets
β β βββ abstracts/ # Variables, mixins, utilities
β β βββ components/ # UI component styles
β β βββ layout/ # Layout-specific styles
β β βββ pages/ # Page-specific styles
β β βββ themes/ # Theme variants
β βββ assets/ # Static assets
βββ dist-modern/ # Production build output
βββ node_modules/ # Dependencies
βββ package.json # Project configuration
βββ vite.config.js # Build configuration
βββ README.md # This file
# Development
npm run dev # Start development server with HMR
npm run dev:host # Start dev server accessible on network
# Production
npm run build # Create optimized production build
npm run preview # Preview production build locally
# Quality
npm run lint # ESLint check
npm run format # Format with Prettier
npm run audit # Fail on high/critical advisories
npm run test:build # Build, load all 30 pages headless, then drive the auth flows
npm run verify # lint + audit + test:build
# Maintenance
npm run clean # Clean build artifacts
npm run test:build loads every built page in headless Chromium and fails on
uncaught exceptions, console errors, failed or external requests, chart pages
that render no charts, and element pages that render no highlighted code.
Playwright is intentionally not a dependency β it would add a large install for everyone who just wants to build the template. Provide it yourself:
npx playwright install chromium
PLAYWRIGHT_PATH=playwright npm run test:build
CI installs it as a separate step (see .github/workflows/ci.yml).
Edit src-modern/styles/scss/abstracts/_variables.scss:
// Brand colors β the accent is an interaction signal, not decoration.
// It marks primary actions, the active nav item and focus rings; it does not
// tint icon tiles, headings or backgrounds.
$primary: #2563eb; // Your brand primary color
$secondary: #52525b; // Zinc 600
$success: #16a34a; // Success state color
// Typography
$font-family-sans-serif: "Inter", system-ui, sans-serif;
$font-size-base: 0.875rem;
// Spacing & layout
$border-radius: 0.5rem;
// Shadows are reserved for surfaces that genuinely float β dropdowns, modals,
// the mobile sidebar. Static cards get a 1px border instead; shadowing them all
// makes the whole page appear to hover and the shadow stops meaning anything.
$box-shadow: 0 1px 3px rgba(9, 9, 11, 0.06), 0 1px 2px rgba(9, 9, 11, 0.04);
Changing $primary does not repaint the charts β chart colors are validated for
color-blind separation and contrast, so they live in
src-modern/scripts/utils/chart-palette.js. See below.
src-modern/src-modern/styles/scss/pages/src-modern/scripts/components/src-modern/scripts/main.js// src-modern/scripts/components/example.js
import Alpine from 'alpinejs';
document.addEventListener('alpine:init', () => {
Alpine.data('exampleComponent', () => ({
// Component state and methods
init() {
console.log('Example component initialized');
}
}));
});
chartjs-chart-treemap (Sales by Location) and chartjs-plugin-zoom (drag-to-zoom on Reports β Revenue Trends). Nothing in the template carries a commercial or OEM licence, so you can ship it in client and commercial projects.scripts/utils/charts.js holds all chart styling (fonts, gridlines, tooltips, legends) read from the same CSS tokens as the rest of the UI.See the CHANGELOG for the full chart-by-chart list.
flagcdn.com images are all gone. Fonts, charts, highlighting and images are self-hosted, so the template works offline, behind a strict CSP, and without disclosing visitor IPs to a CDN. The smoke test enforces this.postcss (path traversal), immutable (trie overflow + hash-collision DoS), brace-expansion (DoS). npm audit reports 0, with overrides pinning the transitive packages so a fresh resolve can't regress.lucide (a 411 KB unfinished icon provider that rendered blank SVGs) and the unused @vitejs/plugin-legacy.Swal was used as a global in 7 components without an import β 19 crash sites. All fixed and verified in a real browser.npm run test:build loads all 30 built pages in headless Chromium and fails on uncaught exceptions, console errors, failed or external requests, or missing charts/highlighting, then drives the auth flows for real (scripts/auth-interaction-test.mjs). GitHub Actions runs it on every push plus weekly for fresh advisories.onclick handlers replaced with delegated data-* handlers.See the CHANGELOG for full detail, including known follow-ups.
innerHTML interpolation in toast/activity feed; inline onclick removed from elements-tables; Referrer-Policy + X-Content-Type-Options meta tags added to every page; localStorage reads schema-validated; password fields tagged autocomplete="new-password"; console.* and debugger stripped from production bundles:focus-visible), prefers-reduced-motion media query, aria-controls/aria-expanded on the sidebar toggle, sortable table headers gain role="button" + aria-sort + keyboard handlers, single <h1> per page, normalized heading hierarchycssCodeSplit, cssMinify: lightningcss, target: 'es2020' in Vite configpagehide; chart instances .destroy()'dvendor-charts chunk)searchComponent definitions extracted to a createSearchComponent factory; magic numbers hoisted to a constants.js moduledist-modern/ no longer tracked in git; abandoned dev scripts removedIE11 is not supported.
We welcome contributions! Please see our Contributing Guidelines for details.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE.md file for details.
Copyright (c) 2025 Aigars Silkalns & Colorlib
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Colorlib - The most popular source for free WordPress themes and HTML templates.
Aigars Silkalns - Project maintainer and founder of Colorlib.
β Star this repository if you found it helpful!
Built with β€οΈ by the Colorlib team
227 followers Β· starred Jan 2014
201 followers Β· starred May 2013
78 followers Β· starred Mar 2015
9 followers Β· starred Nov 2013