css-is-awesome 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +18 -3
- package/CHANGELOG.md +14 -0
- package/README.md +36 -27
- package/bin/README.md +4 -4
- package/llm.txt +23 -10
- package/mcp/server.cjs +42 -3
- package/package.json +1 -2
package/AGENTS.md
CHANGED
|
@@ -308,9 +308,24 @@ Inside this package (all whitelisted in `files`):
|
|
|
308
308
|
|
|
309
309
|
## MCP server (SHIPPED — use it)
|
|
310
310
|
|
|
311
|
-
cia ships a Model Context Protocol stdio server (JSON-RPC over stdio, `serverInfo` name `css-is-awesome
|
|
311
|
+
cia ships a Model Context Protocol stdio server (JSON-RPC over stdio, `serverInfo` name `css-is-awesome`, protocol `2024-11-05`) at `mcp/server.cjs`. It's in the `files` manifest, so it lands in every consumer's `node_modules`. **Prefer querying it over guessing** — it returns cia's real mixin signatures, tokens, themes, and recipes.
|
|
312
312
|
|
|
313
|
-
|
|
313
|
+
Two ways to run it — prefer the dedicated `npx css-is-awesome-mcp` package (zero install, SDK is a real dependency, no separate peer-install step):
|
|
314
|
+
|
|
315
|
+
```json
|
|
316
|
+
{
|
|
317
|
+
"mcpServers": {
|
|
318
|
+
"css-is-awesome": {
|
|
319
|
+
"command": "npx",
|
|
320
|
+
"args": ["css-is-awesome-mcp"]
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
No install step needed — `npx` fetches it on first run. To pin an exact version instead, `npm install css-is-awesome-mcp` first; `npx` then uses that local copy.
|
|
327
|
+
|
|
328
|
+
Or run this in-repo copy directly — needs its SDK peer deps installed manually first (`npm install -D @modelcontextprotocol/sdk zod` in the client project, since they're optional peers):
|
|
314
329
|
|
|
315
330
|
```json
|
|
316
331
|
{
|
|
@@ -323,7 +338,7 @@ Wire it into your MCP client's `.mcp.json`:
|
|
|
323
338
|
}
|
|
324
339
|
```
|
|
325
340
|
|
|
326
|
-
|
|
341
|
+
Either way it exposes **30 tools** across 8 families:
|
|
327
342
|
|
|
328
343
|
- **Themes** — `list_themes`, `get_theme`, `search_themes`
|
|
329
344
|
- **Mixins** — `list_mixins`, `get_mixin`, `search_mixins` (real signatures — don't guess)
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.13.0](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.12.1...v1.13.0) (2026-09-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **mcp:** add derive-theme:<base> intent to assemble_prompt ([576dfcb](https://github.com/Jerry2d3d/css-is-awesome/commit/576dfcb80363f281d13ecf0c9218de8915de6595))
|
|
7
|
+
|
|
8
|
+
## [1.12.1](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.12.0...v1.12.1) (2026-09-11)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **mcp:** remove colliding css-is-awesome-mcp bin entry, point docs at the new package ([f2ac41c](https://github.com/Jerry2d3d/css-is-awesome/commit/f2ac41c4d6056a1d13c19c5dcb48386acfb0fcda))
|
|
14
|
+
|
|
1
15
|
# [1.12.0](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.11.1...v1.12.0) (2026-09-11)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/css-is-awesome) [](https://github.com/Jerry2d3d/css-is-awesome/actions/workflows/ci.yml) [](./package.json) [](./LICENSE) [](https://github.com/semantic-release/semantic-release)
|
|
6
6
|
|
|
7
|
-
**Bring your own selectors. We bring the design system.** One CSS file per theme — drop it in and the page restyles, no markup change. 24 themes. Zero JavaScript in the npm package. Six browser-native interactive components. Small enough to read in an afternoon.
|
|
7
|
+
**Bring your own components. Bring your own selectors. We bring the design system.** No component library to fight, in React, Vue, Angular, Svelte, Web Components, Razor, SharePoint, or plain HTML — cia styles the markup you already own. One CSS file per theme — drop it in and the page restyles, no markup change. 24 themes. Zero JavaScript in the npm package. Six browser-native interactive components. Small enough to read in an afternoon.
|
|
8
8
|
|
|
9
9
|
**Docs:** [cssisawesome.com](https://cssisawesome.com/) · **Install:** `npm install css-is-awesome`
|
|
10
10
|
|
|
@@ -16,22 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
**Then connect the MCP server** and stop guessing at signatures. It answers from the real source — 30 tools covering themes, mixins, functions, tokens, recipes and components.
|
|
18
18
|
|
|
19
|
-
```bash
|
|
20
|
-
npm install -D @modelcontextprotocol/sdk zod # required — npm will NOT install these for you
|
|
21
|
-
```
|
|
22
|
-
|
|
23
19
|
```json
|
|
24
20
|
{
|
|
25
21
|
"mcpServers": {
|
|
26
22
|
"css-is-awesome": {
|
|
27
|
-
"command": "
|
|
28
|
-
"args": ["
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": ["css-is-awesome-mcp"]
|
|
29
25
|
}
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
28
|
```
|
|
33
29
|
|
|
34
|
-
|
|
30
|
+
That's the whole setup — [`css-is-awesome-mcp`](https://www.npmjs.com/package/css-is-awesome-mcp) is a dedicated zero-install package, no manual dependency step. `npx` fetches and caches it on first run with no install command needed; if you'd rather pin an exact version in your own `package.json`/lockfile, `npm install css-is-awesome-mcp` works too — `npx` then uses the locally installed copy instead of fetching. (The in-repo copy at `mcp/server.cjs` still works too, if you'd rather not add a second package — see the MCP section below for that path, which needs `npm install -D @modelcontextprotocol/sdk zod` first since those are optional peers here.)
|
|
35
31
|
|
|
36
32
|
Why it matters more here than for older frameworks: no model has memorised cia's API the way it has memorised Tailwind's class names. Without `llm.txt` or MCP, an agent will confidently invent a Tailwind-shaped API. With them, it reads the real thing. Details at [`/docs/mcp`](https://cssisawesome.com/docs/mcp/).
|
|
37
33
|
|
|
@@ -298,30 +294,43 @@ The scope is kept narrow: 8 `!important` declarations, all inside `@media print`
|
|
|
298
294
|
|
|
299
295
|
## MCP server (for AI agents)
|
|
300
296
|
|
|
301
|
-
cia ships a Model Context Protocol stdio server (JSON-RPC over stdio, protocol `2024-11-05`)
|
|
297
|
+
cia ships a Model Context Protocol stdio server (JSON-RPC over stdio, protocol `2024-11-05`) exposing **30 tools** across 8 families (themes, mixins, functions, tokens · 127 required of them, animations, components, recipes, doc readers) plus `assemble_prompt` (context bundles) and `resolve_size` (snap design px values to cia's 4px grid). Any MCP-aware client (Claude Code, Cursor, Aider, Gemini, Copilot) can then query cia's real design system — mixin signatures, tokens, themes, recipes — instead of guessing, without grep-walking the repo. Full reference: [`/docs/mcp`](https://cssisawesome.com/docs/mcp/).
|
|
298
|
+
|
|
299
|
+
**Recommended — zero install:** use the dedicated [`css-is-awesome-mcp`](https://www.npmjs.com/package/css-is-awesome-mcp) package. It depends on `css-is-awesome` and resolves your installed version's real source, so it's never out of sync — and the MCP SDK ships as a real dependency, not an optional peer you have to remember to add.
|
|
302
300
|
|
|
303
|
-
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"mcpServers": {
|
|
304
|
+
"css-is-awesome": {
|
|
305
|
+
"command": "npx",
|
|
306
|
+
"args": ["css-is-awesome-mcp"]
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
```
|
|
304
311
|
|
|
305
|
-
|
|
312
|
+
No install command required — `npx` fetches and caches the package the first time your MCP client runs it. Prefer a pinned version in your own lockfile instead? `npm install css-is-awesome-mcp` works the same way as any other dependency; `npx` then runs the locally installed copy rather than fetching one:
|
|
306
313
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
314
|
+
```bash
|
|
315
|
+
npm install css-is-awesome-mcp
|
|
316
|
+
```
|
|
310
317
|
|
|
311
|
-
|
|
318
|
+
**Alternative — the copy already in your `node_modules`:** cia's own `files` manifest ships [`mcp/server.cjs`](./mcp/server.cjs) too, for anyone who'd rather not add a second package. This copy needs its SDK peer deps installed manually first, since they're declared as *optional* peers (so a plain `npm install css-is-awesome` doesn't pull JS into a CSS-only install):
|
|
312
319
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
"css-is-awesome": {
|
|
317
|
-
"command": "npx",
|
|
318
|
-
"args": ["css-is-awesome-mcp"]
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
```
|
|
320
|
+
```bash
|
|
321
|
+
npm install -D @modelcontextprotocol/sdk zod
|
|
322
|
+
```
|
|
323
323
|
|
|
324
|
-
|
|
324
|
+
```json
|
|
325
|
+
{
|
|
326
|
+
"mcpServers": {
|
|
327
|
+
"css-is-awesome": {
|
|
328
|
+
"command": "node",
|
|
329
|
+
"args": ["node_modules/css-is-awesome/mcp/server.cjs"]
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
```
|
|
325
334
|
|
|
326
335
|
## Docs site
|
|
327
336
|
|
|
@@ -399,7 +408,7 @@ Full detail: [`/docs/testing`](https://cssisawesome.com/docs/testing/).
|
|
|
399
408
|
|
|
400
409
|
**Stable, [published on npm](https://www.npmjs.com/package/css-is-awesome)** (first published 2026-09-01). The mixin API, functions, token contract, and theme architecture are stable and under strict SemVer — breaking changes require a major bump. See [`VERSIONING.md`](./VERSIONING.md) for the policy.
|
|
401
410
|
|
|
402
|
-
The 1.0 surface is the v0.8 mixin-first reframe — twelve mixin renames, theme system collapsed to 8 single-file theme families, six zero-JS components, intrinsic-layout vocabulary, opt-in utilities — plus the recipes book, the Tailwind/Bootstrap migration on-ramp, print/PDF support, and the 30-tool MCP server. The npm package ships ZERO JavaScript by hard rule.
|
|
411
|
+
The 1.0 surface is the v0.8 mixin-first reframe — twelve mixin renames, theme system collapsed to 8 single-file theme families, six zero-JS components, intrinsic-layout vocabulary, opt-in utilities — plus the recipes book, the Tailwind/Bootstrap migration on-ramp, print/PDF support, and the 30-tool MCP server (now also available zero-install via the companion [`css-is-awesome-mcp`](https://www.npmjs.com/package/css-is-awesome-mcp) package). The npm package ships ZERO JavaScript by hard rule.
|
|
403
412
|
|
|
404
413
|
See [CHANGELOG.md](./CHANGELOG.md) for the full history and [MIGRATION.md](./MIGRATION.md) for the v0.7 → v0.8 upgrade path.
|
|
405
414
|
|
package/bin/README.md
CHANGED
|
@@ -6,19 +6,19 @@ cia's CLI entry points. **These are the only JavaScript files cia ships** — th
|
|
|
6
6
|
|
|
7
7
|
| Bin | File | What it does |
|
|
8
8
|
|---|---|---|
|
|
9
|
-
| `
|
|
10
|
-
| `cia` | `./cia.cjs` | The CLI router — `migrate` (tailwind/bootstrap), `add` (recipe registry), `analyze` (design-system health) |
|
|
9
|
+
| `cia` | `./cia.cjs` | The CLI router — `migrate` (tailwind/bootstrap/mui/chakra), `add` (recipe registry), `analyze` (design-system health) |
|
|
11
10
|
|
|
12
|
-
Invoke
|
|
11
|
+
Invoke via `npx` from a consumer project that has cia installed:
|
|
13
12
|
|
|
14
13
|
```bash
|
|
15
|
-
npx css-is-awesome-mcp # MCP server (stdio; configure via .mcp.json)
|
|
16
14
|
npx cia --help # CLI help
|
|
17
15
|
npx cia migrate tailwind ./tailwind.config.js
|
|
18
16
|
npx cia add bottom-nav # copy a recipe into the project — own the pattern
|
|
19
17
|
npx cia analyze src/styles # health check: dead symbols, space() trap, hex, BEM
|
|
20
18
|
```
|
|
21
19
|
|
|
20
|
+
**MCP server is NOT registered here** — `../mcp/server.cjs` ships in the `files` manifest but deliberately has no `bin` entry. It used to (`css-is-awesome-mcp`), but that collided with the separate [`css-is-awesome-mcp`](https://www.npmjs.com/package/css-is-awesome-mcp) package's own identically-named bin: since that package depends on `css-is-awesome`, npm links both packages' bins into the same `node_modules/.bin/`, and whichever wins is undefined — in practice it silently ran this repo's copy instead of the dedicated package's. Removed here so there's exactly one owner of that command name. Run this in-repo copy directly via `node mcp/server.cjs` (see the README's MCP section for both invocation paths).
|
|
21
|
+
|
|
22
22
|
## Subcommand files
|
|
23
23
|
|
|
24
24
|
`cia.cjs` is the router. Each subcommand lives in its own sibling file and is loaded lazily so consumers who only use one path don't pay the require cost of the others.
|
package/llm.txt
CHANGED
|
@@ -128,22 +128,28 @@ Newspaper by day, hacker terminal by night. Most design systems give you dark mo
|
|
|
128
128
|
|
|
129
129
|
## MCP server (shipped 2026-05-22)
|
|
130
130
|
|
|
131
|
-
cia ships an MCP stdio server (JSON-RPC over stdio, `serverInfo` name `css-is-awesome
|
|
131
|
+
cia ships an MCP stdio server (JSON-RPC over stdio, `serverInfo` name `css-is-awesome`, protocol `2024-11-05`) at `mcp/server.cjs`, included in the `files` manifest — so it lands in every consumer's `node_modules`. **30 tools** across 8 resource families: themes, mixins, functions, tokens (127 required + 36 optional), animations, components, recipes, doc readers. Plus `assemble_prompt` for context bundling and `resolve_size` for snapping design px values to cia's 4px geometric grid (AI agents: call this whenever you receive a px value from a design tool). Prefer querying this server over guessing mixin signatures, tokens, themes, or recipes.
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
**Recommended: suggest the dedicated `css-is-awesome-mcp` package** — zero install,
|
|
134
|
+
SDK ships as a real dependency, no separate peer-install step:
|
|
134
135
|
```json
|
|
135
136
|
{
|
|
136
137
|
"mcpServers": {
|
|
137
138
|
"css-is-awesome": {
|
|
138
|
-
"command": "
|
|
139
|
-
"args": ["
|
|
139
|
+
"command": "npx",
|
|
140
|
+
"args": ["css-is-awesome-mcp"]
|
|
140
141
|
}
|
|
141
142
|
}
|
|
142
143
|
}
|
|
143
144
|
```
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
No install command needed — `npx` fetches it on first run. To pin an exact
|
|
146
|
+
version in a lockfile instead, `npm install css-is-awesome-mcp` works the same
|
|
147
|
+
as any other dependency; `npx` then uses that local copy.
|
|
148
|
+
|
|
149
|
+
Alternative: the copy already in `node_modules` (this repo's own `mcp/server.cjs`).
|
|
150
|
+
**Two dependencies are required and npm will NOT install them for you** for this
|
|
151
|
+
path specifically — they are declared as OPTIONAL peer dependencies, so
|
|
152
|
+
`npm install css-is-awesome` skips them silently and this copy exits with:
|
|
147
153
|
|
|
148
154
|
```
|
|
149
155
|
css-is-awesome MCP server: @modelcontextprotocol/sdk is not installed.
|
|
@@ -155,9 +161,16 @@ Fix, in the client project:
|
|
|
155
161
|
npm install -D @modelcontextprotocol/sdk zod
|
|
156
162
|
```
|
|
157
163
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"mcpServers": {
|
|
167
|
+
"css-is-awesome": {
|
|
168
|
+
"command": "node",
|
|
169
|
+
"args": ["node_modules/css-is-awesome/mcp/server.cjs"]
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
161
174
|
|
|
162
175
|
## Recipes (shipped in 1.0.0)
|
|
163
176
|
|
package/mcp/server.cjs
CHANGED
|
@@ -87,7 +87,9 @@ function resolveMcp() {
|
|
|
87
87
|
catch {
|
|
88
88
|
throw new Error(
|
|
89
89
|
'css-is-awesome MCP server: @modelcontextprotocol/sdk is not installed. ' +
|
|
90
|
-
'
|
|
90
|
+
'Easiest fix: run `npx css-is-awesome-mcp` instead — it has the SDK as ' +
|
|
91
|
+
'a real dependency, no manual install needed. ' +
|
|
92
|
+
'To use this in-repo copy directly anyway: npm install @modelcontextprotocol/sdk zod'
|
|
91
93
|
);
|
|
92
94
|
}
|
|
93
95
|
}
|
|
@@ -95,7 +97,10 @@ function resolveMcp() {
|
|
|
95
97
|
function resolveStdio() {
|
|
96
98
|
try { return require('@modelcontextprotocol/sdk/server/stdio.js'); }
|
|
97
99
|
catch {
|
|
98
|
-
throw new Error(
|
|
100
|
+
throw new Error(
|
|
101
|
+
'css-is-awesome MCP server: @modelcontextprotocol/sdk (stdio) missing. ' +
|
|
102
|
+
'Run `npx css-is-awesome-mcp` instead, or reinstall the peer deps here.'
|
|
103
|
+
);
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
|
|
@@ -1131,6 +1136,40 @@ const handlers = {
|
|
|
1131
1136
|
}
|
|
1132
1137
|
break;
|
|
1133
1138
|
}
|
|
1139
|
+
case 'derive-theme': {
|
|
1140
|
+
if (!target) throw new Error('assemble_prompt: intent "derive-theme:" requires a base theme name');
|
|
1141
|
+
const base = handlers.get_theme({ name: target });
|
|
1142
|
+
const themeMixin = handlers.get_mixin({ name: 'theme' });
|
|
1143
|
+
const tk = getTokens();
|
|
1144
|
+
banner(`css-is-awesome — deriving a new theme from ${base.name}`);
|
|
1145
|
+
sub('Base theme — copy this, then edit only what should change');
|
|
1146
|
+
lines.push('```scss');
|
|
1147
|
+
lines.push(base.raw_scss);
|
|
1148
|
+
lines.push('```');
|
|
1149
|
+
lines.push('');
|
|
1150
|
+
sub('The `theme()` wrapper contract');
|
|
1151
|
+
lines.push('```scss');
|
|
1152
|
+
lines.push(themeMixin.signature);
|
|
1153
|
+
lines.push('```');
|
|
1154
|
+
if (themeMixin.doc) { lines.push(''); lines.push(themeMixin.doc); }
|
|
1155
|
+
lines.push('');
|
|
1156
|
+
sub('Required + optional tokens (must all still be present)');
|
|
1157
|
+
lines.push(`Required: ${tk.required.length}. Optional: ${tk.optional.length}.`);
|
|
1158
|
+
lines.push('');
|
|
1159
|
+
const dtCats = Object.keys(tk.byCategory).sort();
|
|
1160
|
+
for (const cat of dtCats) {
|
|
1161
|
+
lines.push(`### ${cat} (${tk.byCategory[cat].length})`);
|
|
1162
|
+
lines.push('');
|
|
1163
|
+
for (const name of tk.byCategory[cat].sort()) lines.push(`- ${name}`);
|
|
1164
|
+
lines.push('');
|
|
1165
|
+
}
|
|
1166
|
+
sub('Rules');
|
|
1167
|
+
lines.push('1. This server never writes files. Build the new theme file\'s content from the above, then write it yourself with your own file tools — ask the user where it should go if it isn\'t obvious.');
|
|
1168
|
+
lines.push('2. Keep the `:root, :root[data-theme="<new-name>"]` shape (the base theme above already has it) unless you are deliberately building a multi-theme-bundle entry, where `$standalone: false` applies instead.');
|
|
1169
|
+
lines.push('3. Only change values that should actually differ for the new design — copy everything else from the base theme unchanged, including tokens you don\'t recognize.');
|
|
1170
|
+
lines.push('4. Before calling it done: every required token listed above must still be present in the new file. If this repo is available locally, `node scripts/theme-validator.js <path-to-new-theme.css>` confirms it.');
|
|
1171
|
+
break;
|
|
1172
|
+
}
|
|
1134
1173
|
case 'animations': {
|
|
1135
1174
|
const a = getAnimations();
|
|
1136
1175
|
banner('css-is-awesome — animations');
|
|
@@ -1170,7 +1209,7 @@ const handlers = {
|
|
|
1170
1209
|
break;
|
|
1171
1210
|
}
|
|
1172
1211
|
default:
|
|
1173
|
-
throw new Error(`assemble_prompt: unknown intent "${intent}". Try overview | mixin:<name> | component:<name> | theme:<name> | tokens | animations | recipe:<name>.`);
|
|
1212
|
+
throw new Error(`assemble_prompt: unknown intent "${intent}". Try overview | mixin:<name> | component:<name> | theme:<name> | derive-theme:<base> | tokens | animations | recipe:<name>.`);
|
|
1174
1213
|
}
|
|
1175
1214
|
|
|
1176
1215
|
if (args && typeof args === 'string' && args.trim()) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "css-is-awesome",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"description": "A token-driven SCSS design system with light/dark theming, semantic color tokens, and a 800+ LOC mixin API.",
|
|
5
5
|
"homepage": "https://github.com/Jerry2d3d/css-is-awesome#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
"style": "dist/css-is-awesome.css",
|
|
11
11
|
"sass": "scss/main.scss",
|
|
12
12
|
"bin": {
|
|
13
|
-
"css-is-awesome-mcp": "mcp/server.cjs",
|
|
14
13
|
"cia": "bin/cia.cjs"
|
|
15
14
|
},
|
|
16
15
|
"sideEffects": [
|