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

tailwind-preset-mantine

v4.1.0

Published

Integrate Mantine with Tailwind CSS

Readme

tailwind-preset-mantine

npm version

A Tailwind CSS (v4) preset for seamless integration with Mantine UI (>= v7).

Compatibility

| Tailwind CSS Version | Mantine Version | Preset Version | |----------------------|-----------------|----------------| | v4 | v7 or v8 or v9 | v4 (current) | | v4 | v7 or v8 or v9 | v3 | | v4 | v7 or v8 | v2 | | v3 | v7 or v8 | v1* |

*Note: you can still use v1 for Tailwind CSS V4 via @config directive.

Installation

npm install tailwind-preset-mantine

Refer to the Tailwind installation guide for the rest of the setup steps, since they depend on your framework or build tooling.

Usage

Default mantine theme

  1. All-in-one import (recommended)

When importing the styles, instead of importing the tailwind css file, importing this preset in the css file:

@import "tailwind-preset-mantine";

(No extra tailwind / mantine styles imported mantually.)

That's it!

Now you can use tailwind with mantine's style applied:

import { Button } from '@mantine/core';

export default function Page() {
	// `bg-red-500` will be `background-color: var(--mantine-color-red-5)`
	// `text-white` will be `color: var(--mantine-color-white)`
	return <Button className="bg-red-500 text-white">Hello</Button>
}
  1. More styles from other mantine libraries

If you use additional Mantine packages with their own styles, import them after the preset:

@import "tailwind-preset-mantine";

@import "@mantine/dates/styles.layer.css";
@import "@mantine/dropzone/styles.layer.css";
@import "@mantine/carousel/styles.layer.css";
@import "@mantine/notifications/styles.layer.css";
@import "mantine-react-table/styles.css";

@mantine/core/styles.layer.css is already included by tailwind-preset-mantine, so you do not need to import it again in the all-in-one setup.

  1. Manual import (advanced)

If you want to take more control on the import, you can expand and use the ./theme.css file:

@layer theme, base, mantine, components, utilities;
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/preflight.css" layer(base);
@import "tailwindcss/utilities.css" layer(utilities);

@import "@mantine/core/styles.layer.css";

@import "tailwind-preset-mantine/theme.css"; /* <-- import the preset */

With more styles you have:

@layer theme, base, mantine, components, utilities;
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/preflight.css" layer(base);
@import "tailwindcss/utilities.css" layer(utilities);

@import "@mantine/core/styles.layer.css";
@import "@mantine/dates/styles.layer.css";
@import "@mantine/dropzone/styles.layer.css";
@import "@mantine/carousel/styles.layer.css";
@import "@mantine/notifications/styles.layer.css";

@import "tailwind-preset-mantine/theme.css"; /* <-- import the preset */
@import "mantine-react-table/styles.css"; /* regular CSS, placement relative to theme.css is flexible */

Additional Mantine package styles.layer.css imports can be placed either before or after tailwind-preset-mantine/theme.css. The important part is that they are imported after the @layer theme, base, mantine, components, utilities; declaration so they participate in the mantine layer correctly. The example above keeps them grouped with other Mantine imports for readability.

What's @layer?

Note that here we setup tailwind slightly different from the official docs. We use the CSS @layer directive to control the order of the css. This is because we want to make sure that the mantine styles doesn't get overridden by tailwind reset (base). In this case, the order is theme -> base -> mantine -> components -> utilities.

Custom mantine theme

If you have a custom mantine theme (https://mantine.dev/theming/theme-object/), the recommended setup is to generate a complete stylesheet from your theme file and import that stylesheet directly.

  1. Create a theme file (e.g., mantine-theme.ts):
import { createTheme } from "@mantine/core";

const theme = createTheme({
  colors: {
    // your custom colors
    "brand-blue": [
      "#e6f7ff",
      "#bae7ff",
      "#91d5ff",
      "#69c0ff",
      "#40a9ff",
      "#1890ff",
      "#096dd9",
      "#0050b3",
      "#003a8c",
      "#002766",
    ],
  },
  breakpoints: {
    // your custom breakpoints
    xs: "360px",
    sm: "480px",
    md: "768px",
    lg: "960px",
    xl: "1200px",
  },
  // other theme customizations
});

export default theme;
  1. Configure the integration to generate a stylesheet from your Mantine theme.

By default, the generated file is written next to the theme file with the same basename and a .css extension. For example, ./src/mantine-theme.ts generates ./src/mantine-theme.css.

PostCSS:

import mantineTheme from "tailwind-preset-mantine/postcss";

export default {
  plugins: [
    mantineTheme({
      input: "./src/mantine-theme.ts",
    }),
  ],
};

Next.js:

// postcss.config.mjs
export default {
  plugins: {
    "tailwind-preset-mantine/postcss": {
      input: "./src/mantine-theme.ts",
    },
    "@tailwindcss/postcss": {},
  },
};

Vite:

import { defineConfig } from "vite";
import mantineTheme from "tailwind-preset-mantine/vite";

export default defineConfig({
  plugins: [
    mantineTheme({
      input: "./src/mantine-theme.ts",
    }),
  ],
});

The Vite integration also watches local modules imported by your Mantine theme file, so updates to split files like theme/colors.ts or theme/spacing.ts trigger the generated stylesheet to update automatically.

  1. Import the generated stylesheet.
@import "./mantine-theme.css";

The generated stylesheet includes the default imports and your merged Mantine theme.

Integration options

| Option | Required | Default | Description | |--------|----------|---------|-------------| | input | Yes | – | Path to the Mantine theme source file | | output | No | input basename with .css extension | Path to the generated stylesheet | | format | No | theme | theme generates Tailwind aliases only; standalone generates Mantine variables plus Tailwind aliases |

Standalone pages without MantineProvider

If a page does not render MantineProvider but still needs your custom Mantine variables, generate the standalone variant instead:

PostCSS or Vite:

mantineTheme({
  input: "./src/mantine-theme.ts",
  format: "standalone",
});

This generates both:

  • Mantine CSS variables like --mantine-color-* and --mantine-spacing-*
  • Tailwind aliases like --color-* and --spacing-*

standalone defaults to the light color scheme. To use the dark scheme on a standalone page, set data-mantine-color-scheme="dark" on the document root or host element.

If you already render MantineProvider on the same page, prefer the default theme format instead. standalone is meant for routes or templates that do not get Mantine runtime variable injection.

CLI fallback

If your setup does not use PostCSS or Vite, you can still generate the theme CSS with the CLI:

npx tailwind-preset-mantine mantine-theme.ts

Options:

  • -o, --output: Output file name/location (defaults to the input filename with a .css extension)
  • --format theme|standalone: Output either Tailwind aliases only (theme, default) or Mantine variables plus Tailwind aliases (standalone)

Then import the generated file:

@import "./mantine-theme.css";

Use --format standalone when generating CSS for pages that do not render MantineProvider.

Minimal template

Here's a minimal template that you can use to get started:

https://github.com/songkeys/next-app-mantine-tailwind-template

License

MIT