Rand Stats

CSS::Minifier

zef:sasha

CSS::Minifier

CSS minifier for Raku - parses, optimizes, and re-serializes CSS stylesheets.

Features

Dependencies

Installation

zef install CSS::Minifier

Installing from source

cd /path/to/CSS-Minifier
zef install .

Requires Raku 6.d or later.

Usage

Command Line

# Read from file
cssminify input.css > output.css

# Level 2 (structural optimizations: dedup, merging)
cssminify -l2 input.css > output.css

# Write to file
cssminify -o output.css input.css

# Read from stdin
cat input.css | cssminify

# Preserve license comments
cssminify -p input.css

# Disable hex color shortening (keep #FF0000 instead of #F00)
cssminify --no-color-masks input.css

# Disable unknown-property preservation (declarations dropped by CSS::Properties stay dropped)
cssminify --no-preserve-unknown input.css

# Separate rules with newlines (readable output)
cssminify -r input.css

# Convert hex colors to named colors
cssminify -n input.css

# Verbose output (log plugin names)
cssminify -v input.css

# Print version
cssminify --version

Flags

ShortLongDescription
-o--outputWrite to file instead of stdout
-l--levelOptimization level: 1 (default) or 2 (structural)
-p--preserve-licensesKeep /*! */ license comments
-n--color-namesConvert hex colors to named colors
-m / -/m--color-masks / --no-color-masksEnable/disable hex color shortening
-u / -/u--preserve-unknown / --no-preserve-unknownEnable/disable unknown-property preservation (default: enabled)
-r--readableSeparate rules with newlines
-v--verboseLog plugin names to stderr
--versionPrint version and exit

Negatable booleans accept --no-flag (long) or -/f (short), e.g. --no-color-masks or -/m.

Short flags with values use = or fused syntax: -l=2 or -l2 (not -l 2).

Library

use CSS::Minifier;

# Level 1 - safe normalizations
my $min = CSS::Minifier.minify($css);

# Level 2 - structural optimizations (dedup, merging)
my $min = CSS::Minifier.minify($css, :level(2));

# Preserve license comments
my $min = CSS::Minifier.minify($css, :preserve-licenses);

# Convert hex colors to named colors
my $min = CSS::Minifier.minify($css, :color-names);

# Disable hex color shortening
my $min = CSS::Minifier.minify($css, :!color-masks);

# Disable unknown-property preservation (dropped by CSS::Properties)
my $min = CSS::Minifier.minify($css, :!preserve-unknown);

# Add custom plugins (runs after all level plugins, in append order)
# Custom plugins must implement the CSS::Minifier::Plugin role.
my $min = CSS::Minifier.minify($css, :level(2), :extra-plugins[$my-plugin]);

Optimization Levels

Level 1 (default)

Level 2

Note: at-rules (@keyframes, @supports, @layer) are preserved with all their declarations intact via a pre-parse scan, but are not subject to deduplication or value normalization.

Examples

Input

h1 { color: red; }
h2 { color: red; }
h1 { margin: 0; }

Level 1 Output

h1{color:#F00}h2{color:#F00}h1{margin:0}

Level 2 Output

h1, h2{color:#F00}h1{margin:0}

Limitations

Warning: The merging plugin can silently change cascade order. Review level-2 output before deploying to production.

AUTHOR

Sasha Abbott sashaa@disroot.org

LICENSE

This library is free software; you can redistribute it and/or modify it under CC0.