npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@griffel/vite-plugin

v1.0.0

Published

Vite plugin that performs CSS extraction for Griffel

Downloads

5,583

Readme

Vite plugin to perform CSS extraction in Griffel

A plugin for Vite that performs CSS extraction for @griffel/react.

Install

yarn add --dev @griffel/vite-plugin
# or
npm install --save-dev @griffel/vite-plugin

⚠️ The plugin requires Vite 8 or above and @griffel/react 1.7.7 or above.

Usage

Within your Vite configuration, add the plugin:

import { defineConfig } from 'vite';
import { griffel } from '@griffel/vite-plugin';

export default defineConfig({
  plugins: [griffel()],
});

The plugin automatically:

  • Transforms makeStyles(), makeResetStyles(), and makeStaticStyles() calls at build time
  • Extracts CSS from these calls into stylesheets handled by Vite
  • Sorts CSS rules by specificity buckets, media queries, and container queries

No extra configuration is required: CSS is handled by Vite itself, so <link> tags in production work as usual. In development the plugin does nothing and Griffel handles styles in runtime.

Options

griffel({
  // Files to process (default: /\.[cm]?[jt]sx?$/)
  include: /\.[cm]?[jt]sx?$/,
  // Files to skip, nothing is excluded by default as dependencies may also use Griffel
  exclude: undefined,

  // Compare function for sorting media queries (default: @griffel/core's defaultCompareMediaQueries)
  compareMediaQueries: myCompareFunction,

  // Compare function for sorting container queries (default: same comparator as compareMediaQueries)
  compareContainerQueries: myCompareFunction,

  // Override the resolver used to resolve imports inside evaluated modules
  resolverFactory: myResolverFactory,

  // A salt that is added to generated class names
  classNameHashSalt: '',

  // Modules that export Griffel functions (default: ["@griffel/core", "@griffel/react", "@fluentui/react-components"])
  importsToTransform: ['@griffel/react'],

  // Functions that should be treated as Griffel style calls
  functionsToTransform: ['makeStyles', 'makeResetStyles', 'makeStaticStyles'],

  // Rules that define how matched files are transformed during the evaluation
  evaluationRules: undefined,

  // Collect and log timing stats once a build is finished
  collectStats: false,

  // Collect and log dependencies that slow down evaluation (CJS modules, "export *" barrels)
  collectPerfIssues: false,
});

How it works

The plugin is a pair of Vite plugins:

  • griffel:transform runs before other transforms (enforce: 'pre') and replaces Griffel calls with their evaluated results. The extracted CSS is served from a virtual CSS module that is imported by a transformed file.
  • griffel:extract runs after the CSS assets are produced (enforce: 'post') and merges the CSS of all chunks into the assets of entrypoints, sorting & deduplicating rules on the way.

Both apply to production builds only.

Griffel relies on the order of CSS rules: rules are grouped in style buckets and can be overridden only by rules from the same or a later bucket. As Vite emits a stylesheet per chunk, the rules of a lazy loaded chunk would be applied after the rules of an application. The plugin avoids it by moving all Griffel rules into a single stylesheet, this matches the behavior of the dedicated griffel chunk in @griffel/webpack-plugin.

Development mode

The plugin applies to production builds only (apply: 'build'). A dev server has no bundling step, so there is no stylesheet to extract rules into, and Griffel handles styles in runtime there as it does without the plugin.

Caveats

  • Files that are not ES modules are skipped, Griffel calls in them will be handled by the runtime.
  • If a project has multiple entrypoints, each of them gets a copy of all extracted Griffel CSS.