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

atomic-css-cli

v1.0.36

Published

Atomic CSS generator CLI — watch files and generate atomic.min.css automatically

Readme

English | 한국어

Atomic CSS

Auto-generate CSS rules from HTML class names. One naming rule covers every CSS property — no config files, no predefined values, total freedom.

Works with Any Project

Atomic CSS integrates into any existing project without touching your current CSS.

Key principle: load atomic.min.css last.

<!-- Your existing CSS -->
<link rel="stylesheet" href="/css/framework.css" />
<link rel="stylesheet" href="/css/custom.css" />

<!-- Atomic CSS always last → highest priority -->
<link rel="stylesheet" href="/assets/css/common/atomic.min.css" />

Works the same with React, Vue, or any import-based setup — just import it last.

Why Atomic CSS?

  • Zero CSS writing — class names ARE the styles. No separate CSS files needed.
  • Unlimited freedom — unlike other utility frameworks, no predefined value constraints. gap37px, w847px, fs1-3rem — any value works.
  • One rule to learn — combine the first letters of CSS property and value. Once you know the pattern, you can guess any class.
  • 14 responsive breakpoints — from QHD (2560px) to Ultra Small (420px).
  • 32 pseudo-classes — hover, focus, disabled, valid, and more — all via prefix.
  • Zero dependencies — just install the extension and start using it.
  • AI-native — built-in MCP server lets AI tools query classes in real-time.

Core Concept

Combine the first letters of CSS property and value:

display: flex           → df
justify-content: center → jcc
align-items: center     → aic
flex-direction: column  → fdc
white-space: nowrap     → wsn
text-overflow: ellipsis → toe
object-fit: cover       → ofc

Know this rule, and you can infer any class — even ones not in the docs.

<div class="df jcc aic gap2rem p2rem bgFFFFFF br8px">Hello Atomic CSS!</div>

Generated CSS:

.df { display: flex; }
.jcc { justify-content: center; }
.aic { align-items: center; }
.gap2rem { gap: 2rem; }
.p2rem { padding: 2rem; }
.bgFFFFFF { background-color: #ffffff; }
.br8px { border-radius: 8px; }

Installation

VS Code Extension

Search "Atomic CSS" in VS Code Marketplace, or install via CLI:

code --install-extension Drangon-Knight.atomicss

CLI (npm)

For non-VSCode workflows, CI/CD pipelines, or build scripts:

# Global install
npm install -g atomic-css-cli

# Or project-local
npm install --save-dev atomic-css-cli

Usage:

# One-time build
atomic-css build ./src

# Watch mode (auto-rebuild on file changes)
atomic-css watch ./src

# With options
atomic-css watch ./src --output ./public/css --extensions .html,.tsx,.vue --debug

MCP Server (AI Integration)

Add to your project root .mcp.json — no local install needed:

{
    "mcpServers": {
        "atomic-css": {
            "type": "sse",
            "url": "https://mcp.atomiccss.dev/sse"
        }
    }
}

Works with Claude Code, Cursor (.cursor/mcp.json), and Windsurf (.windsurf/mcp.json).


Configuration (.atomic.json)

Create .atomic.json at project root for custom behavior. Without it, defaults apply.

| Option | Type | Default | Description | |--------|------|---------|-------------| | cssDirectoryPath | string | "/assets/css/common/" | Output path for generated CSS | | extensions | string[] | [".html"] | File extensions to scan for classes | | selectedLanguages | string[] | ["html"] | VSCode language IDs for auto-update on save | | projects | array | — | Multi-project config for separate CSS outputs |

Examples:

// React / Next.js
{
    "cssDirectoryPath": "/src/assets/css/",
    "extensions": [".html", ".tsx", ".jsx"],
    "selectedLanguages": ["html", "typescriptreact", "javascriptreact"]
}
// Vue / Nuxt
{
    "cssDirectoryPath": "/src/assets/css/",
    "extensions": [".html", ".vue"],
    "selectedLanguages": ["html", "vue"]
}
// Multi-project (separate CSS per directory)
{
    "cssDirectoryPath": "/assets/css/common/",
    "extensions": [".html", ".php"],
    "projects": [
        { "name": "korean", "sources": ["/src/ko/"], "output": "/assets/css/ko/" },
        { "name": "english", "sources": ["/src/en/"], "output": "/assets/css/en/" }
    ]
}

IDE Features (VS Code)

Hover Preview

Hover over any class to see the full CSS rule. Hover over class keyword to see all classes combined.

Autocomplete

300+ fixed classes, prefix guides, real-time validation, context-aware suggestions (e.g., flex-related classes after df), duplicate prevention.

Color Preview

Inline color swatches for 13 color prefixes. Click swatch → color picker → class auto-updates.

Diagnostics & Quick Fix

Invalid classes get yellow underlines with Levenshtein-based suggestions. Ctrl+. for auto-correction.

Design Token System

Define tokens in .atomic.json (colors, spacing, fontSize, etc.). strict: true enforces team design system.

Commands & Shortcuts

| Command | Shortcut | Description | |---------|----------|-------------| | Search Class | Ctrl+Shift+A | Search classes by CSS property, insert on select | | Update All | Ctrl+Alt+A | Scan all project files and regenerate CSS | | CSS → Class | Ctrl+Shift+C | Convert CSS declarations to Atomic classes | | Sort Classes | Ctrl+Alt+S | Auto-sort classes by semantic order | | Detect Unused | Command Palette | Find CSS selectors not used in HTML |


Naming Rules

Units

| Unit | Notation | Example | |------|----------|---------| | px | px | w100px, gap8px | | % | p | w50pwidth: 50% | | rem | rem | fs1-5remfont-size: 1.5rem | | em | em | p1em | | vh / vw | vh, vw | h100vh, w100vw | | vmin / vmax | vmin, vmax | w50vmin | | fr | fr | gtc1fr-2fr |

Based on html { font-size: 10px }: 1rem = 10px2rem = 20px, 10rem = 100px

Hyphens (-)

| Use | Example | Result | |-----|---------|--------| | Decimal | gap1-5rem | 1.5rem | | Value separator | gtc1fr-2fr-1fr | 1fr 2fr 1fr | | Media prefix | sm-dn | @media(max-width:768px) | | Pseudo-class | hover-bg000000 | :hover |

Special Notation

| Notation | Meaning | Example | Result | |----------|---------|---------|--------| | i suffix | !important | w100pxi | width: 100px !important | | neg- prefix | Negative value | neg-mt10px | margin-top: -10px |


Display

| Class | CSS | |-------|-----| | df | display: flex | | dif | display: inline-flex | | dg | display: grid | | db | display: block | | dib | display: inline-block | | di | display: inline | | dn | display: none | | dt | display: table | | dtc | display: table-cell |

Flexbox

| Class | CSS | |-------|-----| | fdr / fdrr | flex-direction: row / row-reverse | | fdc / fdcr | flex-direction: column / column-reverse | | fwn / fww / fwr | flex-wrap: nowrap / wrap / wrap-reverse | | jcfs / jcfe / jcc | justify-content: flex-start / flex-end / center | | jcsb / jcsa / jcse | justify-content: space-between / around / evenly | | ais / aifs / aife / aic | align-items: stretch / flex-start / flex-end / center | | fs0 / fs1 | flex-shrink: 0 / 1 | | fg1 / fg2 | flex-grow: 1 / 2 | | flex1-1-auto | flex: 1 1 auto |

Grid

| Pattern | Example | CSS | |---------|---------|-----| | Direct | gtc1fr-2fr-1fr | grid-template-columns: 1fr 2fr 1fr | | repeat | gtcr3-1fr | repeat(3, 1fr) | | auto-fit | gtcrfit-minmax28rem-1fr | repeat(auto-fit, minmax(28rem, 1fr)) | | auto-fill | gtcrfill-minmax250px-1fr | repeat(auto-fill, minmax(250px, 1fr)) | | Rows | gtrauto-1fr-auto | grid-template-rows: auto 1fr auto | | minmax | gtcminmax100px-1fr | minmax(100px, 1fr) | | calc | gtccalc100p-200px-1fr | calc(100% - 200px) 1fr |

calc (Arithmetic)

Works with any unit property (width, height, margin, padding, top, etc.):

| Pattern | Example | CSS | |---------|---------|-----| | Subtract (default) | wcalc100p-200px | width: calc(100% - 200px) | | Add | wcalc-add50p-100px | width: calc(50% + 100px) | | Multiply | wcalc-mul2rem-3 | width: calc(2rem * 3) | | Divide | wcalc-div100p-3 | width: calc(100% / 3) |

Spacing

| Pattern | Property | |---------|----------| | m, mt, mr, mb, ml | margin (directional) | | p, pt, pr, pb, pl | padding (directional) | | gap, rg, cg | gap, row-gap, column-gap | | mta, mra, mba, mla | margin-direction: auto |

Spacing values in multiples of 4 recommended: 4px, 8px, 12px, 16px, 2rem...

Shorthand expansion: p, m, gap, bw are internally expanded to longhand. So p20px pl10px correctly overrides only padding-left, regardless of order.

Color

| Pattern | Example | CSS | |---------|---------|-----| | c + HEX | cFFFFFF | color: #FFFFFF | | bg + HEX | bg000000 | background-color: #000000 | | bc + HEX | bcDDDDDD | border-color: #DDDDDD | | RGBA | c255-0-0-50 | color: rgba(255,0,0,0.5) | | RGBA bg | bg0-0-0-80 | background-color: rgba(0,0,0,0.8) | | Opacity | o50, o80 | opacity: 0.5, opacity: 0.8 |

CSS Variables (Custom Properties)

Use prefix--variable-name pattern for var():

<div class="bg--box-color gap--spacing br--radius">

Supports all prefixes: colors (c--, bg--, bc--), sizing (w--, h--), spacing (gap--, p--, m--), typography (fs--, fw--), and more. Works with media queries, pseudo-classes, !important, ::before/::after, and relationship selectors.

Border

| Pattern | Example | CSS | |---------|---------|-----| | Shorthand | b1pxsolidDDDDDD | border: 1px solid #DDDDDD | | Directional | bt2pxdashed000000 | border-top: 2px dashed #000000 | | Radius | br8px, br50p | border-radius | | None | bn | border: none |

Shadow

| Pattern | Example | CSS | |---------|---------|-----| | Box Shadow (HEX) | bs2px4px10px0pxFF0000 | box-shadow: 2px 4px 10px 0px #FF0000 | | Box Shadow (RGBA) | bs0px4px12px0px0-0-0-10 | box-shadow: 0px 4px 12px 0px rgba(0,0,0,0.1) | | Inset | bsi0px2px4px0px000000 | box-shadow: inset 0px 2px 4px 0px #000000 | | Text Shadow | ts2px-2px-4px-DDDDDD | text-shadow: 2px 2px 4px #DDDDDD | | None | bsn | box-shadow: none |

Transform

| Class | CSS | |-------|-----| | ttx10px | transform: translateX(10px) | | tty2-5rem | transform: translateY(2.5rem) | | neg-ttx50p | transform: translateX(-50%) | | tr45deg | transform: rotate(45deg) | | ts1-5 | transform: scale(1.5) |

Transition

| Class | CSS | |-------|-----| | tall200msease | transition: all 200ms ease | | topacity500ms | transition: opacity 500ms | | tnone | transition: none |

Filter / Backdrop Filter

| Class | CSS | |-------|-----| | filterb5px | filter: blur(5px) | | filterbr120p | filter: brightness(120%) | | filterc80p | filter: contrast(80%) | | filtern | filter: none | | bfb10px | backdrop-filter: blur(10px) |

Media Queries (14 Breakpoints)

Prefix any class for responsive behavior:

| Prefix | Breakpoint | | Prefix | Breakpoint | |--------|------------|---|--------|------------| | qh- | 2560px | | rg- | 1080px | | uh- | 2160px | | md- | 1024px | | kk- | 2048px | | sm- | 768px | | fh- | 1920px | | es- | 640px | | hl- | 1800px | | us- | 420px | | sl- | 1700px | | | | | ul- | 1600px | | | | | el- | 1440px | | | | | lg- | 1280px | | | |

<!-- 3 columns → 2 → 1 -->
<div class="dg gtcr3-1fr md-gtcr2-1fr sm-gtc1fr gap2rem">
    <div class="db sm-dn">Desktop only</div>
    <div class="dn sm-db">Mobile only</div>
</div>

Pseudo-Classes (32)

| Category | Prefixes | |----------|----------| | Interaction | hover-, focus-, active-, focus-within-, focus-visible- | | Input state | disabled-, enabled-, checked-, indeterminate- | | Form validation | valid-, invalid-, required-, optional-, in-range-, out-of-range- | | Link | link-, visited-, any-link-, target- | | Other | placeholder-shown-, empty-, read-only-, fullscreen-, autofill-, modal-, etc. |

Pseudo-Elements & Relationship Selectors

Pseudo-elements: before-, after-

Relationship selectors:

| Combinator | Keyword | CSS | |------------|---------|-----| | > direct child | child | .parent:hover > target | | descendant | children | .parent:hover target | | + adjacent | next | .trigger:hover + target | | ~ general sibling | siblings | .trigger:hover ~ target |

<!-- On card hover, scale child img -->
<div class="card-hover-child-img-ts1-1"></div>

More Classes

| Class | CSS | |-------|-----| | ar16-9 | aspect-ratio: 16/9 | | lc3-1-5rem | Line clamp (3 lines) | | fw100~fw900 | font-weight | | zi10, zi999 | z-index | | w100p, h100vh | width: 100%, height: 100vh | | wa, ha | width: auto, height: auto | | mxa | margin-left: auto; margin-right: auto | | cp | cursor: pointer | | usn | user-select: none | | pen | pointer-events: none | | oh | overflow: hidden | | wsn | white-space: nowrap | | toe | text-overflow: ellipsis |


Examples

Flexbox Center

<div class="df jcc aic gap2rem p2rem">
    <span>Centered content</span>
</div>

Responsive Grid Cards

<div class="dg gtcrfit-minmax28rem-1fr gap2rem p2rem">
    <div class="bgFFFFFF br8px p2rem bs0px4px12px0px0-0-0-10">Card 1</div>
    <div class="bgFFFFFF br8px p2rem bs0px4px12px0px0-0-0-10">Card 2</div>
    <div class="bgFFFFFF br8px p2rem bs0px4px12px0px0-0-0-10">Card 3</div>
</div>

Glassmorphism

<div class="bfb10px bg255-255-255-20 br16px p2-4rem">
    <h2 class="fs2-4rem fw700 mb16px cFFFFFF">Title</h2>
    <p class="fs1-6rem lh1-6 c255-255-255-80">Content</p>
</div>

Hover Button

<button class="p12px-2-4rem bg007BFF cFFFFFF br8px fs1-6rem fw600
    cp tall200msease hover-bg0056B3 active-ts0_98
    md-p8px-2rem md-fs1-4rem">
    Click me
</button>

Full-Screen Layout

<div class="dg gtrauto-1fr-auto h100vh">
    <header class="p16px bg000000 cFFFFFF">Header</header>
    <main class="p2rem oa">Content</main>
    <footer class="p16px bgF0F0F0">Footer</footer>
</div>

Sidebar Layout

<div class="dg gtc25rem-1fr gap2rem md-gtc1fr">
    <aside class="p2rem bgF5F5F5 md-order2">Sidebar</aside>
    <main class="p2rem md-order1">Content</main>
</div>

MCP Server — AI Integration

AI tools can query Atomic CSS classes in real-time via MCP (Model Context Protocol).

No guessing, no stale docs — AI queries the server directly for accurate, up-to-date results.

6 Tools

| Tool | Description | |------|-------------| | get_guide | Full rules guide (call once for AI onboarding) | | css_to_classes | Convert CSS declarations → Atomic classes | | validate_classes | Validate classes + suggest fixes for invalid ones | | lookup_class | Class name → generated CSS | | search_by_css | Search by CSS property/value | | list_classes | Browse classes by category |

Setup

// .mcp.json (project root)
{
    "mcpServers": {
        "atomic-css": {
            "type": "sse",
            "url": "https://mcp.atomiccss.dev/sse"
        }
    }
}

| AI Tool | Config File | |---------|-------------| | Claude Code | .mcp.json | | Cursor | .cursor/mcp.json | | Windsurf | .windsurf/mcp.json |


CLI Reference

Commands

# One-time build
atomic-css build <directory>

# Watch mode
atomic-css watch <directory>

Options

| Option | Default | Description | |--------|---------|-------------| | --output, -o | .atomic.json config | CSS output directory | | --extensions, -e | .html | File extensions to scan (comma-separated) | | --debug, -d | false | Generate both atomic.css and atomic.min.css |

Config (.atomic.json)

CLI respects the same .atomic.json as the VS Code extension. Place it at project root:

{
    "cssDirectoryPath": "/assets/css/common/",
    "extensions": [".html", ".tsx", ".vue"]
}

Programmatic API

const { build, watch } = require('atomic-css-cli');

// One-time build
const result = await build('./src', {
    output: './public/css',
    extensions: ['.html', '.tsx']
});

// Watch mode
watch('./src', { extensions: ['.html', '.vue'], debug: true });

Links

| | Link | Description | |---|------|-------------| | Web | atomiccss.dev | Official docs — full class reference, live preview | | MCP | mcp.atomiccss.dev | AI MCP server — instant integration | | Marketplace | VS Code Marketplace | VS Code extension | | npm | atomic-css-cli | CLI tool | | Registry | io.github.Yoodaekyung/atomic-css | Official MCP Registry |


Support

[email protected]