kiso
Kiso
Rails component library built on ERB partials + Tailwind CSS + class_variants + tailwind_merge. Inspired by shadcn/ui and Nuxt UI, adapted for Rails + Hotwire.
Installation
# Gemfile
gem "kiso"
bundle install
bin/rails generate kiso:install
Rendering Components
Use the kui() helper to render components:
<%= kui(:badge, color: :success, variant: :soft) { "Active" } %>
<%= kui(:card) do %>
<%= kui(:card, :header) do %>
<%= kui(:card, :title, text: "Members") %>
<% end %>
<%= kui(:card, :content) do %>
...
<% end %>
<% end %>
Colors
7 semantic colors configurable via theme CSS variables:
| Color | Default Palette | Purpose |
|---|---|---|
primary |
blue | CTAs, brand, active states |
secondary |
teal | Secondary actions |
success |
green | Success messages |
info |
sky | Informational |
warning |
amber | Warnings |
error |
red | Errors, destructive actions |
neutral |
zinc | Text, borders, surfaces |
Variants
Components that accept both color and variant use compound variants (Nuxt UI pattern):
| Variant | Style |
|---|---|
solid |
Filled background, contrasting text |
outline |
Transparent background, colored ring |
soft |
Light tinted background, colored text |
subtle |
Light tinted background, colored text, faint ring |
Theming
Components use semantic Tailwind utilities (bg-primary, text-foreground, bg-muted) that resolve to CSS variables. Dark mode flips automatically — components never use dark: prefixes.
Override brand colors in your app's CSS:
@theme inline {
--color-primary: var(--color-orange-600);
--color-primary-foreground: white;
}
Customizing Components
Global overrides
Override all instances of a component via Kiso.configure in an initializer:
# config/initializers/kiso.rb
Kiso.configure do |config|
config.theme[:button] = { base: "rounded-full", defaults: { variant: :outline } }
config.theme[:card_header] = { base: "p-8 sm:p-10" }
end
Override hashes accept base:, variants:, compound_variants:, defaults:. Applied once at boot — zero per-render cost.
Per-instance overrides
Pass css_classes: to override styles on a specific instance. Conflicting classes are resolved automatically via tailwind_merge:
<%= kui(:badge, color: :primary, css_classes: "rounded-full px-4") { "Custom" } %>
Layer order: theme default < global config < per-instance css_classes:.
Icons
Kiso uses kiso-icons for server-side inline SVG rendering. Lucide (~1500 icons) is bundled and works out of the box:
<%= kiso_icon("check") %>
<%= kiso_icon("settings", size: :md) %>
<%= kiso_icon("heroicons:check-circle") %> <%# from a pinned set %>
Add more icon libraries:
bin/kiso-icons pin heroicons mdi tabler
Override component default icons globally:
Kiso.configure do |config|
config.icons[:chevron_right] = "heroicons:chevron-right"
config.icons[:menu] = "heroicons:bars-3"
end
Additional references
Load based on your task — do not load all at once:
- references/components.md — all components with props and usage
- references/theming.md — CSS variables, tokens, brand customization
- references/icons.md — icon rendering, pinning sets, component icon overrides
More from steveclarke/dotfiles
bruno-endpoint-creation
Create Bruno REST API endpoint configurations with proper authentication, environment setup, and documentation. Use when setting up API testing with Bruno, creating new endpoints, or configuring collection-level authentication. Triggers on "create Bruno endpoint", "Bruno API testing", "set up Bruno collection".
68readme-writer
Write and revise READMEs and technical documentation for software projects. Scores readability with Flesch-Kincaid and vocabulary profiling. Use when writing, revising, or reviewing a README, README.md, or project documentation. Triggers on "write readme", "improve readme", "readme review", "documentation writing".
56time-tracking
Manage time tracking with Toggl or Clockify. Use when user asks about time tracking, timers, timesheets, logging hours, starting/stopping work, checking what's running, viewing time entries, or creating manual entries. Triggers on "toggl", "clockify", "time tracking", "timer", "timesheet", "log time", "track time", "hours worked".
52feature-spec
Creates concise technical specification documents through guided architectural decisions, system contracts, and technical design. Produces a spec.md covering API design, data models, frontend architecture, and integration points without implementation details.
491password
Fetch secrets and create/manage 1Password items via CLI. Use when needing API keys, tokens, or credentials, or when storing new secrets. Ask user for the 1Password secret reference (op://Vault/Item/field format) rather than the actual secret.
49humanizer
|
47