Plumeria logoPlumeria

Installation

Installing core

The core package is type definitions only. bundle and runtime are not included.
Skip to your bundler: Next.js / Vite

Terminal
npm i -D @plumeria/core
Terminal
yarn add -D @plumeria/core
Terminal
pnpm i -D @plumeria/core

ESLint Setup

By implementing ESLint, you can automatically organize the order of CSS properties and format line breaks, creating a more efficient environment than manual maintenance.

The plumerialint command installs @plumeria/eslint-plugin.
Setting languageOptions.parserOptions.projectService to true enables "@plumeria/no-invalid-selector-nesting" by utilizing TypeScript type information.

import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import { defineConfig } from 'eslint/config';
import { plumeria } from '@plumeria/eslint-plugin';

export default defineConfig(
  eslint.configs.recommended,
  tseslint.configs.recommended,
  plumeria.flatConfigs.recommended,
  {
    files: ['**/*.{ts,tsx}'],
    languageOptions: {
      parserOptions: { projectService: true },
    },
  }
);

oxlint is required to run the plumerialint command.
Integrating plumerialint into your build pipeline allows for proactive error detection.

pnpm i -D oxlint rimraf

For Next, we recommend running rimraf to clean up the cache to accommodate the differences between versions:

package.json
  "scripts": {
    "predev": "rimraf .next",
    "prebuild": "rimraf .next",
    "dev": "next dev",
    "build": "plumerialint && next build",
    "start": "next start",
  },
package.json
  "scripts": {
    "dev": "vite",
    "build": "plumerialint && tsc -b && vite build", 
  },

Next.js

Terminal
npm i -D @plumeria/next-plugin @plumeria/postcss-plugin
Terminal
yarn add -D @plumeria/next-plugin @plumeria/postcss-plugin
Terminal
pnpm add -D @plumeria/next-plugin @plumeria/postcss-plugin

postcss.config.js

Reduce build times by narrowing the scope using include and exclude.

postcss.config.js
/* application root */
module.exports = {
  plugins: {
    '@plumeria/postcss-plugin': {
      // use src directory
      include: ['./src/**/*.{ts,tsx}'],
      exclude: ['**/node_modules/**', '**/.next/**'],
    },
  },
};

CSS extraction marke

Inclulde css file @plumeria mark.
Atomic css is aggregated at build time into marked css files.

css
/* app/global.css */ 
/* import in app/layout.tsx */
@plumeria;
...

next.config.ts

It works with both Turbopack and Webpack.

next.config.ts
import type { NextConfig } from "next";
import { withPlumeria } from "@plumeria/next-plugin";

const nextConfig: NextConfig = {
  /* config options here */
};

export default withPlumeria(nextConfig);

Vite

Terminal
npm i -D @plumeria/unplugin
Terminal
yarn add -D @plumeria/unplugin
Terminal
pnpm add -D @plumeria/unplugin

vite.config

vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';
import plumeria from '@plumeria/unplugin';

export default defineConfig({
  plugins: [react(), plumeria.vite()],
});

On this page