Development output
Full CSS
~4 MB
emily.css
Includes all generated utilities, responsive variants, and state variants so teams can move quickly while building.
EmilyUI turns your design tokens into portable CSS, lightweight HTML behavior, editor guidance, migration tools, and quality checks, so every project stays aligned with your brand.
Works with
The problem
Colours, spacing, components, accessibility patterns, and tiny behavior rules get copied between projects until no one knows which version is correct. The issue is not only CSS. It is keeping the whole interface system consistent.
EmilyUI gives teams one source of truth for branded UI, then generates the CSS, metadata, checks, and optional HTML behavior each project needs.
Drupal, WordPress, Power Pages, or any system where runtime choices are constrained. Generate CSS ahead of time and link it.
Keep design values in one config and generate the classes every project needs. No duplicated token files, no slow drift.
Use EmilyJS for toggles, forms, visibility, class binding, focus trapping, and announcements without adopting a framework for every page.
How it works
Put colours, fonts, spacing, breakpoints, output paths, and tooling options in emily.config.json.
npx emily-css init
Build the stylesheet, manifest, and editor metadata each project can use to stay aligned with the same brand system.
npx emily-css build
Use EmilyJS attributes for small interactions without turning every page into a full frontend app.
One config file
Set your colours, typography, spacing, and breakpoints in emily.config.json. EmilyCSS turns that into CSS variables, utility classes, responsive variants, layout patterns, and tooling metadata.
Change one token, rebuild, and the generated classes, manifest, IntelliSense data, and checks stay aligned.
{
"name": "My Brand",
"colours": {
"brand": "#DB2777",
"accent": "#D4AF37",
"success": "#017F65"
},
"fontFamily": {
"heading": "inter",
"body": "inter"
},
"output": {
"css": "public/emily.min.css"
}
}Why teams choose it
Utilities are generated from your colours, spacing, type, radius, motion, and breakpoint settings.
The browser receives plain CSS that works wherever the project can load a stylesheet.
Doctor flags unknown classes, focus removal, likely invisible text, and low-contrast token pairs.
A report-only migrate command helps teams understand Tailwind usage before changing source files.
The ecosystem
emily-css generates the tokens and utilities. emily-components turns those into documented, manifest-tracked UI patterns. emily-starters assembles them into ready starting points. emily-js adds the small behaviours that need it. Each layer is usable on its own, and each is honestly tracked — built, in progress, or planned.
Generates CSS variables, utility classes, variants, and tooling metadata from one config file.
A 303-entry component manifest of atoms, molecules, organisms, and templates — 259 built today, the rest tracked openly.
Six built starter sites, each with its own emily.config.json. Re-brand with a config edit and rebuild.
Small HTML-attribute behaviours for where static HTML is not enough — no framework adoption required.
Manifest-powered
Every utility and every component pattern is described in a manifest — class, category, tokens, variants, dependencies, and build status. That is what powers documentation, audits, and integration work without guesswork.
Generated on every build by emily-css. It drives the searchable utilities reference, IntelliSense data, and doctor checks — so docs can never silently drift from the generated CSS.
303 entries across tokens, atoms, molecules, organisms, templates, and pages. Each entry carries an honest status — built, needs-css, needs-js, needs-a11y-review, planned, or deferred. See the current build status.
Starters
Token-driven starting points, not finished sites: swap the config, rebuild, then replace the placeholder copy and images with your own. Six of fourteen starter entries are built today — the rest are planned, not shipped.
local-service-businessTrade or service business serving an area — hero, trust strip, services grid, quote form.
one-page-businessEverything on one scrolling page: services, about, testimonials, FAQ, contact. Fastest to launch.
professional-servicesFirms selling expertise — credentials strip, process steps, team, consultation form.
charity-communityMission hero, impact stats, programmes, donate CTA, volunteer form.
portfolio-case-studyWork-led businesses — portfolio grid, featured case study, contact band.
campaign-landingOne campaign, one conversion goal. Minimal chrome, single short form, noindex.
Built examples use semantic HTML, token-driven focus styles, and honest status tracking. We do not claim WCAG compliance — we tell you what has been checked and what still needs manual testing. A manual assistive-technology checklist exists for the FAQ accordion, some patterns remain marked needs-a11y-review, and interactive widgets wait for emily-js behaviours. See accessibility status.
Starter and component examples use local placeholder paths — no live third-party image hosts and no source.unsplash.com dependency. For prototyping you can download and license images (for example from Unsplash) into the local placeholder folder; production projects should use approved, licensed images or a proper image pipeline.
Patterns
Copy the HTML, keep the semantics, then adjust the generated classes to match your config.
<div class="flex gap-3"> <button class="btn btn-primary">Save settings</button> <button class="btn btn-secondary">Preview</button> <button class="btn btn-secondary" disabled>Disabled</button> </div>
Used for build notifications only.
<label for="email" class="text-sm font-medium">Email address</label> <input id="email" type="email" aria-describedby="email-hint" class="mt-2 w-full rounded border border-neutral-30 px-4 py-2.5 text-sm" > <p id="email-hint" class="mt-2 text-xs text-neutral-60"> Used for build notifications only. </p>
Production output
Build generates the full utility catalogue for speed while designing. Purge removes unused classes for production so users download far less CSS.
Development output
~4 MB
emily.css
Includes all generated utilities, responsive variants, and state variants so teams can move quickly while building.
Production output
much smaller
emily.purged.css
Keeps only the classes your templates use. Run emily-css purge to see the exact output size for your project.
Visual size comparison
npx emily-css build
npx emily-css purge
EmilyUI ecosystem
EmilyCSS handles the branded stylesheet. EmilyJS handles small pieces of interactive behavior: toggles, tabs, forms, visibility, class binding, focus trapping, and live announcements using plain HTML attributes.
<!-- No build step. Drop in a script tag. -->
<script src="/emily.js"></script>
<!-- Toggle a menu open and closed -->
<div emily-state="{ open: false }">
<button emily-click="open = !open"
class="btn btn-secondary">
Toggle menu
</button>
<nav emily-show="open"
class="mt-4 flex flex-col gap-2">
<a href="/docs">Docs</a>
<a href="/components">Components</a>
<a href="/pricing">Pricing</a>
</nav>
</div>
<!-- aria-expanded is set automatically -->Start with token-generated CSS, add lightweight HTML behavior when needed, and use the tooling to keep classes, contrast, and migrations under control.