The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Blatui listing page.
A CLI that copies open-source, copy-paste UI components you own straight into your Laravel project.
155 components · 614 variants · 64 blocks · 70 charts · accessible (WCAG AA) · Livewire-ready · fully themeable · light + dark · MIT
🧩 This is the BlatUI monorepo. The Composer package is the repo root (
src/+stubs/) — Packagist reads it directly, socomposer require anousss007/blatuiis unchanged and theapps/are stripped from the dist tarball. Components are authored inapps/demo/and generated intostubs/. See Contributing before editing a component.
vendor/. Edit them however you like; updating the package never overwrites your edits.wire:model works on every form control — inputs, selects, checkboxes, switches, sliders, date/time pickers, file uploads and more — with full two-way binding. A free, you-own-the-code alternative to Flux Pro. See the Livewire guide →Point your two Vite entrypoints at the published foundations — replace each file's contents:
blatui.cssbrings Tailwind, the design tokens and the@thememapping;blatui.jsboots Alpine + its plugins and lazy-loads ApexCharts. Runblatui:initto confirm everything (packages, tokens, imports) is wired up.
The foundations are published once and become yours — tweak the tokens, drop the chart engine if you don't need charts, etc.
blatui:initwill tell you what's still missing.
Everything is additive — you don't replace your files.
@theme inline, oklch). On
Tailwind v3, migrate first with npx @tailwindcss/upgrade; blatui:init detects the version.@import "./blatui.css"; to your existing app.css, below @import "tailwindcss";.blatui.js (it would boot a second Alpine).
Register BlatUI into your own instance instead, before you start it:npm install alpinejs (that's the duplicate-Alpine trap) and don't import blatui.js.
Install only the plugins — npm install -D @alpinejs/anchor @floating-ui/dom @alpinejs/collapse @alpinejs/focus
(add apexcharts only if you use charts) — and register BlatUI onto Livewire's Alpine via
the alpine:init hook:BlatUI registers a theme store for dark mode. If Flux already drives dark mode, pass
registerBlatUI(window.Alpine, { darkMode: false }) so the two don't both toggle .dark.
Components land in resources/views/components/ui/ as Blade tags:
blatui:add prints any extra composer/npm packages a component needs
(e.g. charts pull in apexcharts).
You own the copied files, so an upgrade is never automatic — blatui:update
shows you what changed and lets you decide, file by file:
A file that differs is either your customisation or an outdated copy — nothing on
disk tells the two apart, so BlatUI never overwrites one without showing the diff
and asking. --force still writes a .bak next to each file it replaces (opt out
with --no-backup). Files a family gained in a newer release are simply added.
Running Pint or Prettier over resources/views? Your formatter rewrites the
layout of every component you copied, and all of them then read as changed. They
are counted separately as same content, reformatted, and --ignore-whitespace
leaves them out:
The CSS/JS foundations are published, not copied — re-sync those with
vendor:publish --tag=blatui-foundations --force; blatui:init tells you when
the engine has fallen behind.
Blocks (dashboards, sidebars, login pages…) and the 70 charts are copy-paste from the demo site — they're full-page compositions, not primitives, so you grab the exact source you want rather than installing it:
👉 Browse blocks & charts on the live demo
| Command | Description |
|---|---|
blatui:init | Doctor — checks packages, Tailwind v4, theme tokens, Alpine/engine wiring |
blatui:list [component] | List all component families, or detail one |
blatui:add <components...> | Copy components (+ deps) into your project |
blatui:update [components...] | Diff installed components against this version and update them (--dry-run, --diff, --force, --ignore-whitespace) |
blatui:doctor [path] | Scan your Blade for known footguns (typeless buttons in forms, leaked tags) |
blatui:mcp | Run the MCP server (stdio) so an AI editor can search and install components |
vendor:publish --tag=blatui-foundations | Publish theme CSS + JS engine |
BlatUI is a monorepo — one repo, one PR, one CI. The Composer package is the repo root;
the demo/docs site and starter kit are apps that live alongside it (excluded from the published
package via .gitattributes).
Components are authored in apps/demo/resources/views/components/ui/ (the only place they
render, so it's the source of truth); stubs/ is generated — don't hand-edit it. After changing
a component, run bash scripts/build-package.sh and commit both. CI fails if they drift.
Full guide: CONTRIBUTING.md.
BlatUI is a port of shadcn/ui to the Laravel/Blade ecosystem. Thanks to shadcn and contributors. Icons by Lucide. Charts by ApexCharts.
MIT — free for personal and commercial use.