2025-05-07 15:12:35 +08:00
# Basecoat
2025-04-18 12:58:28 +08:00
2026-06-04 12:18:40 +08:00
Basecoat is a Tailwind CSS, vanilla HTML/CSS/JavaScript implementation of the shadcn/ui design system. It provides shadcn-style components for any web stack without React, Radix, or framework runtime dependencies.
2025-05-07 15:12:35 +08:00
2025-05-07 15:16:36 +08:00

2025-05-07 15:12:35 +08:00
## Features
2026-06-04 12:18:40 +08:00
- Semantic HTML-first components.
- Tailwind CSS v4 source files and generated CSS bundles.
- Small vanilla JavaScript for components that need behavior.
- Nunjucks and Jinja template macros.
- Standalone style packs: Vega, Nova, Maia, Lyra, Mira, Luma, Sera, and Rhea.
- Dark mode and CSS variable theming.
- CDN, npm, and CLI usage paths.
2025-05-07 15:12:35 +08:00
## Documentation
2026-06-04 12:18:40 +08:00
- Website: [basecoatui.com ](https://basecoatui.com )
- Installation: [basecoatui.com/installation ](https://basecoatui.com/installation )
- Customization: [basecoatui.com/customization ](https://basecoatui.com/customization )
2025-05-07 15:12:35 +08:00
2026-06-04 12:18:40 +08:00
## Packages
2025-05-07 15:12:35 +08:00
2026-06-04 12:18:40 +08:00
This repository publishes two workspace packages:
- `basecoat-css` : CSS, JavaScript, Nunjucks macros, and Jinja macros.
- `basecoat-cli` : CLI for adding Basecoat assets to a project.
Package details live in:
- `packages/css/README.md`
- `packages/cli/README.md`
## Install
```bash
npm install basecoat-css
```
Use the default bundle:
```css
@ import "tailwindcss" ;
@ import "basecoat-css" ;
```
Use a specific style bundle:
```css
@ import "tailwindcss" ;
@ import "basecoat-css/nova" ;
```
Use the styleless base plus a custom style file:
```css
@ import "tailwindcss" ;
@ import "basecoat-css/base" ;
@ import "./style-acme.css" ;
```
## Repository Layout
```text
.
├── docs/
2026-06-13 12:53:17 +08:00
│ ├── generated/ Generated RSD/Astro docs input
│ └── src/ Documentation source pages, examples, and fragments
2026-06-04 12:18:40 +08:00
├── packages/
│ ├── cli/ Published CLI package
│ └── css/ Published CSS package
2026-06-13 12:53:17 +08:00
├── public/ Generated docs assets for Astro
2026-06-04 12:18:40 +08:00
├── scripts/ Build and generation scripts
└── src/
2026-06-13 12:53:17 +08:00
├── components/ Astro overrides for ReallySimpleDocs
2026-06-04 12:18:40 +08:00
├── css/
│ ├── base/ Shared tokens, base layer, and semantic utilities
│ ├── components/ Component structure and behavior hooks
│ └── styles/ Style-pack visual rules
2026-06-13 12:53:17 +08:00
├── docs.css Documentation-site CSS extension
2026-06-04 12:18:40 +08:00
├── jinja/ Jinja component macros
├── js/ Vanilla JS components and registry
└── nunjucks/ Nunjucks component macros
```
## CSS Architecture
Basecoat separates structure from style:
- `src/css/base/base.css` : shared tokens and semantic utilities.
- `src/css/components/*.css` : component layout, structure, accessibility selectors, and behavior hooks.
- `src/css/styles/*.css` : style-pack visuals such as color, radius, shadow, typography, spacing, variants, and state styles.
Generated source entrypoints are committed for transparency and package imports:
- `src/css/basecoat.css` : default backward-compatible Vega bundle.
- `src/css/basecoat-base.css` : base plus components, no style pack.
- `src/css/basecoat-components.css` : component imports only.
- `src/css/basecoat-<style>.css` : base plus one style pack.
- `src/css/basecoat-<style>.cdn.css` : CDN-compatible wrapper.
These entrypoints are generated by `scripts/generate-css-entrypoints.js` and by the build scripts.
2026-06-08 21:42:31 +08:00
## JavaScript Lifecycle
- `window.basecoat.init(name)` initializes uninitialized components for one registered component.
- `window.basecoat.initAll()` initializes all uninitialized registered components.
- `window.basecoat.refresh(element)` asks an initialized component to rescan dynamic children when it supports refresh.
- Components use internal destroy hooks to clean up listeners when initialized roots are removed from the DOM.
2026-06-04 12:18:40 +08:00
## Development
```bash
2026-06-13 12:53:17 +08:00
# Install dependencies.
2026-06-04 12:18:40 +08:00
npm i
2026-06-13 12:53:17 +08:00
# Generate docs input and run the ReallySimpleDocs/Astro site.
2026-06-04 12:18:40 +08:00
npm run docs:dev
2026-06-13 12:53:17 +08:00
# Build package assets.
2026-06-04 12:18:40 +08:00
npm run build
2026-06-13 12:53:17 +08:00
# Build the static docs site.
2026-06-04 12:18:40 +08:00
npm run docs:build
2026-06-13 12:53:17 +08:00
# Run the Workers docs site locally.
2026-06-04 12:18:40 +08:00
npm run workers:dev
2026-06-13 12:53:17 +08:00
# Deploy the Workers docs site.
2026-06-04 12:18:40 +08:00
npm run workers:deploy
```
2025-05-07 15:12:35 +08:00
## License
2026-06-04 12:18:40 +08:00
[MIT ](LICENSE.md )