auto_awesome Material 3 Expressive • Pure ESM

Material 3 Web Components for Pure ESM

A comprehensive, pure ESM library of Google Material Design 3 components. Zero build step required, completely framework-agnostic, and beautifully expressive.

bolt Get Started widgets Browse 20+ Components open_in_new Kitchen Sink Demo
npm install material-esm/material
palette Live Material 3 Studio
Live ESM
Day Week Month
check Filled Tonal Outlined add
M3 Expressive Wavy Progress Active
notifications Toast
flash_on

Zero Build Required

Runs natively in modern browsers with standard ESM imports and import maps.

style

Material 3 Expressive

Full support for modern wavy tracks, morphing loaders, and connected button groups.

layers

Framework Agnostic

Standard Web Components compatible with React, Vue, Svelte, Lit, or vanilla HTML.

accessibility_new

Accessible & Tested

Full keyboard navigation, ARIA semantics, focus rings, and high-contrast styling.

Engineered For Modern Browsers

Why Developers Choose Material ESM

A pure, standalone implementation continuing Google's Material Web project, optimized for the modern ECMAScript module ecosystem.

javascript

Native ESM & No Tooling

Drop in a single importmap in your HTML and start writing custom elements right away. No webpack, Vite, or Node compilation required for rapid prototyping or production apps.

waves

Material 3 Expressive Motion

Features the cutting-edge Material 3 Expressive spec: dynamic waveform progress indicators, shape-morphing loaders, spring physics, and modern button group corner radii.

dark_mode

Dynamic Theming & Dark Mode

CSS custom property token system allows one-line color customization, seamless system dark mode adaptability, and full Material 3 tonal palette integration.

devices

Universal Compatibility

Works flawlessly across all frontends: vanilla JS, React, Vue, Angular, Svelte, Solid, Astro, or server-rendered frameworks like Go, Ruby on Rails, Django, and PHP.

deployed_code

Fine-Grained Tree-Shaking

Import only the individual elements you use—such as material/buttons/button.js—keeping your page weight featherlight with zero unnecessary bundle bloat.

volunteer_activism

Actively Maintained Fork

While the original Google repository paused updates, Material ESM continues active development, resolving issues, supporting forms, and implementing new M3 specifications.

Instant Setup

Get Started in Seconds

Choose your preferred integration method—from zero-build CDN to npm package managers.

Add the importmap to your HTML <head> and immediately import components:

<!-- 1. Add Importmap in <head> -->
<script type="importmap">
{
  "imports": {
    "lit": "https://cdn.jsdelivr.net/npm/lit@3/index.js",
    "lit/": "https://cdn.jsdelivr.net/npm/lit@3/",
    "@lit/localize": "https://cdn.jsdelivr.net/npm/@lit/localize/lit-localize.js",
    "@lit/reactive-element": "https://cdn.jsdelivr.net/npm/@lit/reactive-element@2/reactive-element.js",
    "@lit/reactive-element/": "https://cdn.jsdelivr.net/npm/@lit/reactive-element@2/",
    "lit-element/lit-element.js": "https://cdn.jsdelivr.net/npm/lit-element@4/lit-element.js",
    "lit-html": "https://cdn.jsdelivr.net/npm/lit-html@3/lit-html.js",
    "lit-html/": "https://cdn.jsdelivr.net/npm/lit-html@3/",
    "material/": "https://cdn.jsdelivr.net/gh/material-esm/material@3/"
  }
}
</script>

<!-- 2. Import components anywhere -->
<script type="module">
  import 'material/buttons/button.js'
  import 'material/text/text-field.js'
</script>

<!-- 3. Use components directly -->
<md-text-field label="Your Name"></md-text-field>
<md-button color="filled">Submit</md-button>

Install via npm or yarn for Vite, Next.js, Rollup, or webpack setups:

# Install with npm
npm install material-esm/material

# Or with pnpm / yarn
pnpm add material-esm/material

// In your application code (React, Vue, Svelte, Vite):
import 'material/buttons/button.js'
import 'material/text/text-field.js'
import 'material/indicators/progress.js'

Serve the repository directly from your local static assets directory:

<!-- Point importmap to your local vendor directory -->
<script type="importmap">
{
  "imports": {
    "lit": "https://cdn.jsdelivr.net/npm/lit@3/index.js",
    "lit/": "https://cdn.jsdelivr.net/npm/lit@3/",
    "material/": "./vendor/material/"
  }
}
</script>
Interactive Catalog

Component Showcase

Explore live Material 3 components running in your browser.

Multi-Browse Carousel

Docs arrow_forward
Mountain Ocean Forest
<md-carousel layout="multi-browse" indicators loop> <md-carousel-item headline="Mountain Vista"> <img src="photo.jpg" /> </md-carousel-item> </md-carousel>

Expressive Progress & Loading

Docs arrow_forward
Wavy Linear Track (Expressive)
chat Show Toast
<md-progress type="linear" shape="wavy" indeterminate></md-progress> <md-loading contained></md-loading>

Buttons & Button Groups

Docs arrow_forward
Filled Tonal Outlined Elevated Text
Small Medium Large
<md-button color="filled">Filled</md-button> <md-button-group connected checkmark> <md-button color="tonal" selected>Option 1</md-button> </md-button-group>

FAB & Icon Buttons

Docs arrow_forward
edit favorite settings share
<md-fab variant="primary" label="New Item" extended> <md-icon slot="icon">edit</md-icon> </md-fab>
<md-text-field label="Full Name" supporting-text="..."></md-text-field> <md-text-field color="filled" label="Email"></md-text-field>

Switches, Checkboxes & Sliders

Docs arrow_forward
<md-switch selected icons></md-switch> <md-checkbox checked></md-checkbox> <md-slider value="65" labeled></md-slider>

Cards & Surfaces

Docs arrow_forward
Outlined Card Container
Supports filled, elevated, and outlined container styles with Material 3 elevation.
<md-card type="outlined"> <h4>Card Header</h4> </md-card>

Chips & Badges

Docs arrow_forward
favorite
notifications mail
<md-chip type="filter" label="Filter" selected></md-chip> <md-badge value="5"></md-badge>

Lists & List Items

Docs arrow_forward
widgets
Components Library
23 production-ready modules
chevron_right
auto_awesome
Material Expressive
Full motion & wave indicators
chevron_right
<md-list> <md-list-item> <md-icon slot="start">widgets</md-icon> <div slot="headline">Title</div> <div slot="supporting-text">Subhead</div> </md-list-item> </md-list>
Explore Live Applications

Specialized Component Demos

Interact with complete application layouts and dedicated component testbeds.

dashboard

Expressive Demo

The full kitchen-sink sandbox showcasing responsive navigation rail, app bar, search, and form inputs.

Open Demo arrow_forward
view_carousel

Carousel Showcase

Multi-browse, uncontained, and hero carousel layouts with touch/drag snapping and pagination indicators.

Open Demo arrow_forward
menu_open

App Bar & Nav Drawer

Mobile drawer toggle, responsive navigation rail, action items, and collapsible top bars.

Open Demo arrow_forward
calendar_month

Date Picker

Interactive calendar grid, year/month switching, date ranges, and dialog modal pickers.

Open Demo arrow_forward
schedule

Time Picker

Clock dial selection, AM/PM toggle, direct numeric keyboard input, and modal dialogues.

Open Demo arrow_forward
format_list_bulleted

List & Items

Single-line, two-line, and three-line lists with leading avatars, icons, badges, and trailing controls.

Open Demo arrow_forward
API Documentation

Component Directory

Comprehensive documentation and usage guides for each component in the library.

web_asset App Bar mark_chat_unread Badge smart_button Buttons crop_portrait Card view_carousel Carousel check_box Checkbox label Chips chat_bubble Dialog horizontal_rule Divider sentiment_satisfied Icon progress_activity Indicators format_list_bulleted List menu Menu navigation Navigation calendar_today Pickers radio_button_checked Radio search Search arrow_drop_down_circle Select tune Slider notifications Snackbar toggle_on Switch tab Tabs text_fields Text Field info Tooltip