Lightning CSS

1.32.0 · active · verified Wed Apr 22

Lightning CSS is an exceptionally fast CSS parser, transformer, and minifier written in Rust, primarily maintained by the Parcel team. Currently at version 1.32.0, it undergoes active development with frequent minor and patch releases, ensuring up-to-date feature support and performance improvements. Its key differentiators include leveraging Rust for unparalleled performance, a browser-grade parser (based on Mozilla's `cssparser` and `selectors` crates), and sophisticated typed property values that ensure consistent and accurate transformations across various CSS features. Beyond basic minification, it performs advanced optimizations such as combining longhand properties into shorthands, merging adjacent rules, and reducing `calc()` expressions. It also provides robust vendor prefixing based on configurable browser targets (integrating with Browserslist) and comprehensive syntax lowering for modern CSS features like CSS Nesting, Custom Media Queries, and advanced Color Level 4/5 functions, enabling developers to write modern CSS while ensuring broad browser compatibility and optimized output size.

Common errors

Warnings

Install

Imports

Quickstart

This example demonstrates how to use `lightningcss` to parse, minify, apply vendor prefixes, and lower modern CSS syntax (like nesting, custom media, and advanced color functions) for broad browser compatibility, while generating a source map.

import { transform, browserslistToTargets } from 'lightningcss';
import * as browserslist from 'browserslist';

const cssInput = `
  @custom-media --viewport-medium (width <= 800px);

  :root {
    --primary-color: oklch(50% 0.2 250);
  }

  .container {
    display: flex;
    gap: 10px;
    @media (--viewport-medium) {
      flex-direction: column;
    }
    background-color: color-mix(in srgb, var(--primary-color) 80%, black);
    font-size: clamp(1rem, 2vw, 1.5rem);
  }
`;

async function processCss() {
  const targets = browserslistToTargets(browserslist('>= 0.25%', 'not dead'));

  const { code, map } = transform({
    filename: 'input.css',
    code: Buffer.from(cssInput),
    minify: true,
    targets,
    nesting: true, // Enable CSS Nesting syntax lowering
    customMedia: true, // Enable Custom Media Query syntax lowering
    drafts: { // Enable experimental draft features like Color Level 5
      'nesting': true,
      'customMedia': true,
      'css-color-5': true
    },
    sourceMap: true
  });

  console.log('Minified CSS:');
  console.log(code.toString());
  console.log('\nSource Map (first 100 chars):');
  console.log(map?.toString().substring(0, 100));
}

processCss();

view raw JSON →