Agent skill

Ktui

by keenthemes in keenthemes/ktui

Comprehensive guide to KtUI (Keenthemes Tailwind UI) — components, theming, initialization, data-attribute API, event system, helpers, and common patterns.

MITAuto-check passedFrontend & Design

Install Ktui

skills CLI
$ npx skills add keenthemes/ktui --skill ktui -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install keenthemes/ktui ktui --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/keenthemes/ktui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ktui .claude/skills/ktui && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ktui
GitHub stars
151
Token cost
~5.4k tokens
SKILL.md length
1,193 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

Comprehensive guide to KtUI (Keenthemes Tailwind UI) — components, theming, initialization, data-attribute API, event system, helpers, and common patterns.

  • Works in 12 steps: Installation & Setup → Initialization → Data-Attribute API (Declarative) → …
  • Building UI with KtUI
  • SKILL.md covers 1. Installation & Setup, 2. Initialization, 3. Data-Attribute API… and 4. Component Programmatic API, plus 2 more sections
  • Calls npm

What it does

Ktui is an agent skill from keenthemes/ktui. Comprehensive guide to KtUI (Keenthemes Tailwind UI) — components, theming, initialization, data-attribute API, event system, helpers, and common patterns. Use this skill when building UI with KtUI, adding/customizing components, working with KtUI theming/colors/dark-mode, or when the user mentions KtUI, ktui, Keenthemes components, or Tailwind UI components from Keenthemes.

Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Theming and dark mode and CSS and styling. It works with Tailwind CSS. The repository describes itself as: Open-source collection of customizable UI components for Tailwind CSS and vanilla JavaScript. The licence is MIT.

When your agent uses it

  • Building UI with KtUI
  • Adding/customizing components
  • Working with KtUI theming/colors/dark-mode
  • The user mentions KtUI

Example prompts

  • “/ktui”

Requirements

  • Node.js

Workflow steps

12 steps, taken from the step headings in SKILL.md.

  1. Installation & Setup
  2. Initialization
  3. Data-Attribute API (Declarative)
  4. Component Programmatic API
  5. Component Reference
  6. Key Components — Detailed
  7. Helpers (Internal, but useful to know)
  8. Global Configuration
  9. Theming
  10. RTL Support
  11. Common Pitfalls
  12. Source Code Structure

What it can do on your machine

Read from SKILL.md and the folder at commit 74a8e60. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • ktui.io
    • popper.js.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ktui loads about 5.4k tokens when it runs. Until then it costs about 96 tokens; SKILL.md has 1,193 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~96
When it runs · the whole SKILL.md, loaded when a task matches
~5.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from keenthemes/ktui at commit 74a8e60, republished under its MIT licence (© keenthemes). 1,193 words, ~5,363 tokens.

Download SKILL.mdSave it as .claude/skills/ktui/SKILL.md (or your agent's skills folder).
name
ktui
description
Comprehensive guide to KtUI (Keenthemes Tailwind UI) — components, theming, initialization, data-attribute API, event system, helpers, and common patterns. Use this skill when building UI with KtUI, adding/customizing components, working with KtUI theming/colors/dark-mode, or when the user mentions KtUI, ktui, Keenthemes components, or Tailwind UI components from Keenthemes.

KtUI — AI Agent Reference

KtUI is a free, open-source Tailwind CSS component library by Keenthemes. Package: @keenthemes/ktui (npm).

Always prefer ktui.io docs and examples over guessing markup or options.


1. Installation & Setup

See the ktui-install skill for full installation, Tailwind config, framework integration, SSR, dark mode setup, and troubleshooting.

bash
npm install @keenthemes/ktui
ts
import { KTComponents } from '@keenthemes/ktui';
import '@keenthemes/ktui/dist/styles.css';
KTComponents.init();

2. Initialization

See the ktui-install skill for framework-specific init patterns, SSR safety, and dynamic content handling.

ts
// Global init
KTComponents.init();

// Per-component re-init after dynamic content
import { KTModal } from '@keenthemes/ktui';
KTModal.init();
Livewire SPA support

KtUI automatically re-initializes components on livewire:navigate events for seamless Laravel Livewire SPA navigation. No manual setup required.


3. Data-Attribute API (Declarative)

KtUI uses data-kt-* attributes for declarative wiring. This is the primary way to add behavior without writing JS.

Naming convention
AttributePurpose
data-kt-{component}Marks the root element (triggers instance creation on init)
data-kt-{component}-initializedAdded automatically after init (don't set manually)
data-kt-{component}-toggleClick target to toggle show/hide (value = CSS selector of target)
data-kt-{component}-dismissClick target to close/dismiss
data-kt-{component}-{option}Config override via HTML attribute
Example — Modal
html
<!-- Toggle button -->
<button data-kt-modal-toggle="#my-modal">Open Modal</button>

<!-- Modal root -->
<div data-kt-modal="true" id="my-modal">
  <div class="kt-modal-content">
    <h2>Hello</h2>
    <button data-kt-modal-dismiss="true">Close</button>
  </div>
</div>
Example — Dropdown
html
<div data-kt-dropdown="true">
  <button data-kt-dropdown-toggle="true">Menu</button>
  <div data-kt-dropdown-menu="true" class="hidden">
    <a data-kt-dropdown-item="true" href="#">Item 1</a>
    <a data-kt-dropdown-item="true" href="#">Item 2</a>
  </div>
</div>
Config via data attributes

Any config option can be set as a data attribute using kebab-case with the data-kt-{component}- prefix:

html
<!-- JS config: { zindex: '100', backdrop: true, persistent: true } -->
<div data-kt-modal="true"
     data-kt-modal-zindex="100"
     data-kt-modal-backdrop="true"
     data-kt-modal-persistent="true">
Config via CSS custom properties

Config can also be overridden with CSS custom properties:

css
.my-modal {
  --kt-modal-zindex: 200;
  --kt-modal-backdrop: true;
}

4. Component Programmatic API

Every component follows this pattern:

ts
// Get existing instance
const instance = KTModal.getInstance(element);

// Get or create
const instance = KTModal.getOrCreateInstance(element, config);

// Instance methods
instance.show();
instance.hide();
instance.toggle();
instance.isOpen();
instance.dispose();

// Events
const eventId = instance.on('show', (payload) => { /* ... */ });
instance.off('show', eventId);
Instance management
Static methodReturns
KTComponent.getInstance(el)Existing instance or null
KTComponent.getOrCreateInstance(el, config?)Existing or new instance
KTComponent.init()Scans DOM, creates instances, registers global handlers
Event system

Events fire in two ways:

  1. Callback registration (via on/off):

    ts
    const id = modal.on('show', (payload) => {
      if (payload.cancel) return; // cancelable events
      console.log('showing');
    });
    modal.off('show', id);
  2. Custom DOM events (bubbling, cancelable):

    ts
    element.addEventListener('show', (e) => {
      console.log(e.detail.payload);
      e.preventDefault(); // cancels the action
    });

Event lifecycle (most components):

  • toggle → show → shown (after transition)
  • toggle → hide → hidden (after transition)

Payload for cancelable events: { cancel: false }. Set cancel = true to prevent the action.


5. Component Reference

Exported components from @keenthemes/ktui
ComponentClassRoot attribute
DropdownKTDropdowndata-kt-dropdown
Context MenuKTContextMenudata-kt-context-menu
ModalKTModaldata-kt-modal
DrawerKTDrawerdata-kt-drawer
CollapseKTCollapsedata-kt-collapse
DismissKTDismissdata-kt-dismiss
TabsKTTabsdata-kt-tabs
AccordionKTAccordiondata-kt-accordion
ScrollspyKTScrollspydata-kt-scrollspy
ScrollableKTScrollabledata-kt-scrollable
Scroll ToKTScrolltodata-kt-scrollto
StickyKTStickydata-kt-sticky
ReparentKTReparentdata-kt-reparent
ToggleKTToggledata-kt-toggle
TooltipKTTooltipdata-kt-tooltip
StepperKTStepperdata-kt-stepper
Theme SwitchKTThemeSwitchdata-kt-theme-switch
Image InputKTImageInputdata-kt-image-input
Toggle PasswordKTTogglePassworddata-kt-toggle-password
DataTableKTDataTabledata-kt-datatable
SelectKTSelectdata-kt-select
ToastKTToast(static API, no root attr)
RatingKTRatingdata-kt-rating
RepeaterKTRepeaterdata-kt-repeater
ClipboardKTClipboarddata-kt-clipboard
Range SliderKTRangeSliderdata-kt-range-slider
Pin InputKTPinInputdata-kt-pin-input
Input NumberKTInputNumberdata-kt-input-number
CarouselKTCarouseldata-kt-carousel

6. Key Components — Detailed

6.1 Modal (KTModal)
html
<button data-kt-modal-toggle="#myModal">Open</button>
<div id="myModal" data-kt-modal="true" class="hidden">
  <div class="kt-modal-content">
    <button data-kt-modal-dismiss="true">×</button>
    <p>Content</p>
  </div>
</div>

Config options:

OptionTypeDefaultDescription
zindexstring'90'Base z-index
backdropbooleantrueShow backdrop overlay
backdropClassstring'kt-modal-backdrop'Backdrop CSS class
backdropStaticbooleanfalseStatic backdrop (no close on click)
keyboardbooleantrueClose on Escape
disableScrollbooleantrueLock body scroll
persistentbooleanfalsePrevent close on outside click
focusbooleantrueAuto-focus first [data-kt-modal-input-focus]
hiddenClassstring'hidden'Class to add when hidden

Events: toggle, show, shown, hide, hidden

Programmatic:

ts
const modal = KTModal.getInstance(document.getElementById('myModal'));
modal.show();
modal.hide();
modal.isOpen(); // boolean
modal.getTargetElement(); // the toggle button that opened it

Auto-focus: Add data-kt-modal-input-focus to an input inside the modal.

6.2 Dropdown (KTDropdown)

Uses Popper.js for positioning.

html
<div data-kt-dropdown="true">
  <button data-kt-dropdown-toggle="true">Click me</button>
  <div data-kt-dropdown-menu="true" class="hidden">
    <a data-kt-dropdown-item="true" href="#">Option 1</a>
    <a data-kt-dropdown-item="true" href="#">Option 2</a>
  </div>
</div>

Config options:

OptionTypeDefaultDescription
trigger'click' | 'hover''click'Open trigger
placementstring'bottom-start'Popper.js placement
permanentbooleanfalsePrevent auto-close
dismissbooleanfalseDismiss on item click
zindexnumber105Dropdown z-index
hoverTimeoutnumber200Delay before close on hover (ms)
offsetstring'0px, 5px'Popper offset [skidding, distance]
containerstring''Move menu to container (e.g. 'body')
keyboardbooleantrueKeyboard navigation

Events: show, shown, hide, hidden

Programmatic:

ts
const dd = KTDropdown.getInstance(el);
dd.show();
dd.hide();
dd.toggle();
dd.isOpen();
dd.disable(); // prevent interaction
dd.enable();
6.3 Drawer (KTDrawer)

Similar to Modal but slides from an edge.

html
<button data-kt-drawer-toggle="#myDrawer">Open Drawer</button>
<div id="myDrawer" data-kt-drawer="true" class="hidden">
  <div class="kt-drawer-content">
    <button data-kt-drawer-dismiss="true">×</button>
    <p>Drawer content</p>
  </div>
</div>
6.4 Collapse / Accordion
html
<button data-kt-collapse-toggle="#myCollapse">Toggle</button>
<div id="myCollapse" data-kt-collapse="true" class="hidden">
  Collapsed content
</div>

Accordion groups multiple collapses — only one open at a time.

6.5 Tabs (KTTabs)
html
<div data-kt-tabs="true">
  <div data-kt-tabs-toggle="true" data-kt-tab="#tab1">Tab 1</div>
  <div data-kt-tabs-toggle="true" data-kt-tab="#tab2">Tab 2</div>
</div>
<div id="tab1">Content 1</div>
<div id="tab2" class="hidden">Content 2</div>
6.6 Tooltip (KTTooltip)
html
<button data-kt-tooltip="true" data-kt-tooltip-content="Hello!">
  Hover me
</button>
6.7 Toast (KTToast) — Static API

Toast is unique: it uses a static API, not instance-based.

ts
import { KTToast } from '@keenthemes/ktui';

// Basic usage
KTToast.show({ message: 'Saved!', variant: 'success' });

// Full options
KTToast.show({
  message: 'Item deleted',
  variant: 'error',
  appearance: 'solid',      // 'solid' | 'outline' | 'light'
  size: 'md',               // 'sm' | 'md' | 'lg'
  position: 'top-end',      // 'top-end' | 'top-center' | 'top-start' |
                            // 'bottom-end' | 'bottom-center' | 'bottom-start' |
                            // 'middle-end' | 'middle-center' | 'middle-start'
  duration: 5000,           // ms, auto-dismiss
  important: false,         // if true, no auto-dismiss
  progress: true,           // show progress bar
  pauseOnHover: true,       // pause timer on hover
  dismiss: true,            // show close button
  icon: '<svg>...</svg>',   // leading icon HTML
  action: {
    label: 'Undo',
    onClick: (id) => { /* ... */ },
    className: 'btn btn-sm',
  },
  cancel: {
    label: 'Cancel',
    onClick: (id) => { /* ... */ },
  },
  beep: true,               // play notification sound
  onAutoClose: (id) => {},
  onDismiss: (id) => {},
});

// Global config
KTToast.config({
  position: 'bottom-end',
  duration: 4000,
  maxToasts: 5,
  offset: 15,
  gap: 10,
});

Variants: info, success, error, warning, primary, secondary, destructive, mono

Custom content:

ts
KTToast.show({
  content: document.getElementById('my-toast-template'),
  // or: content: () => document.createElement('div'),
  // or: content: '<div>HTML string</div>',
});
6.8 DataTable (KTDataTable)

Full reference: see the ktui-datatable skill for architecture, lifecycle, events, filters, fixed layouts, pitfalls, and build/testing.

Supports local data and remote API modes. Config: apiEndpoint, pageSize, stateSave, columns (render, checkbox, sortType, sortValue, createdCell), sort, search, pagination, checkbox, lockedLayout, tableLayout, filter.

Methods: sort(), goPage(), setPageSize(), search(), setFilter(), reload(), redraw(), getState(), check(), uncheck(), getChecked().

6.9 Select (KTSelect)

Full reference: see the ktui-select skill for features, remote data, tags, combobox, events, keyboard navigation, and pitfalls.

Replaces native <select> with rich, searchable dropdown. Key features: enable-search, tags, combobox, remote (with URL), pagination, select-all, placeholder.

Events dispatched on both element AND document: show, close, change, enabled, disabled, updated, reloadStart, reloadComplete, reloadError. Also namespaced: kt-select:change, kt-select:show, etc.

Global config: KTSelect.config({ enableSearch: true, searchPlaceholder: '...' })

Show full SKILL.md (474 more words)Show less
6.10 Input Number (KTInputNumber)
html
<input type="number"
       data-kt-input-number="true"
       data-kt-input-number-min="0"
       data-kt-input-number-max="100"
       data-kt-input-number-step="5" />
6.11 Range Slider (KTRangeSlider)
html
<input type="range"
       data-kt-range-slider="true"
       data-kt-range-slider-min="0"
       data-kt-range-slider-max="100" />
6.12 Pin Input (KTPinInput)
html
<div data-kt-pin-input="true"
     data-kt-pin-input-length="6">
</div>
html
<div data-kt-carousel="true"
     data-kt-carousel-infinite="true">
  <div data-kt-carousel-item="true">Slide 1</div>
  <div data-kt-carousel-item="true">Slide 2</div>
</div>
6.14 Clipboard (KTClipboard)
html
<button data-kt-clipboard="true"
        data-kt-clipboard-target="#code-block">
  Copy
</button>
<pre id="code-block">text to copy</pre>
6.15 Repeater (KTRepeater)

Dynamic form field groups — add/remove rows.

html
<div data-kt-repeater="true">
  <div data-kt-repeater-item="true">
    <input name="items[0][name]" />
    <button data-kt-repeater-delete="true">×</button>
  </div>
  <button data-kt-repeater-add="true">+ Add</button>
</div>
6.16 Rating (KTRating)
html
<div data-kt-rating="true"
     data-kt-rating-value="3"
     data-kt-rating-max="5">
</div>

7. Helpers (Internal, but useful to know)

KTDom
  • KTDom.getElement(el) — resolve string selector or element
  • KTDom.getCssProp(el, prop) — get computed CSS custom property
  • KTDom.getDataAttributes(el, prefix) — extract data-{prefix}-* attributes as config object
  • KTDom.isRTL() — check if document is RTL
  • KTDom.reflow(el) — force reflow (used before class changes)
  • KTDom.transitionEnd(el, callback) — listen for transition end
  • KTDom.getHighestZindex(el) — find highest z-index in parent tree
KTData
  • KTData.set(el, key, value) — store data on element (WeakMap-based)
  • KTData.get(el, key) — retrieve stored data
  • KTData.has(el, key) — check if data exists
  • KTData.remove(el, key) — remove stored data
KTEventHandler
  • KTEventHandler.on(el, selector, eventType, handler) — delegated event binding
  • KTEventHandler.off(el, eventId) — remove delegated handler
KTUtils
  • KTUtils.geUID(prefix?) — generate unique ID
  • KTUtils.stringToBoolean(str) — parse string to boolean
  • KTUtils.camelReverseCase(str) — camelCase → kebab-case

8. Global Configuration

Per-component static config
ts
// Set defaults for all future instances
KTSelect.config({ enableSearch: true });
KTToast.config({ position: 'bottom-end', duration: 5000 });
Window-level global config
ts
window.KTGlobalComponentsConfig = {
  modal: { zindex: '100' },
  dropdown: { placement: 'bottom-end' },
};

This is merged into every component's config (lowest priority).

Config merge priority (lowest → highest)
  1. window.KTGlobalComponentsConfig[component]
  2. Component class _defaultConfig
  3. Static .config() (per-component)
  4. data-kt-{component}-* HTML attributes
  5. --kt-{component}-{option} CSS custom properties
  6. Constructor config argument (highest)

9. Theming

CSS Variables

KtUI follows a Shadcn-inspired convention. Define in your Tailwind entry:

css
:root {
  /* Surfaces */
  --background: oklch(1 0 0);
  --foreground: oklch(14.1% 0.005 285.823);
  --card: oklch(1 0 0);
  --card-foreground: oklch(14.1% 0.005 285.823);
  --popover: oklch(1 0 0);
  --popover-foreground: oklch(14.1% 0.005 285.823);

  /* Brand */
  --primary: oklch(62.3% 0.214 259.815);
  --primary-foreground: oklch(1 0 0);
  --secondary: oklch(96.7% 0.001 264.542);
  --secondary-foreground: oklch(20.5% 0.002 285.823);

  /* Muted / Accent */
  --muted: oklch(96.7% 0.001 264.542);
  --muted-foreground: oklch(55.6% 0.005 285.823);
  --accent: oklch(96.7% 0.001 264.542);
  --accent-foreground: oklch(20.5% 0.002 285.823);

  /* Destructive */
  --destructive: oklch(63.7% 0.237 25.331);
  --destructive-foreground: oklch(1 0 0);

  /* Borders */
  --border: oklch(92% 0.004 264.531);
  --input: oklch(92% 0.004 264.531);
  --ring: oklch(62.3% 0.214 259.815);

  /* Radius */
  --radius: 0.5rem;
}
Background/foreground convention
  • Background colors omit the -background suffix: bg-primary uses var(--primary)
  • Foreground colors use -foreground: text-primary-foreground uses var(--primary-foreground)
Semantic classes

Use KtUI utilities for consistency:

  • bg-background, text-foreground
  • bg-primary, text-primary-foreground
  • bg-card, text-card
  • kt-btn, kt-card, kt-input
Dark mode

See the ktui-install skill for the full dark mode setup (Tailwind variant, CSS overrides).

Theme switch: Use KTThemeSwitch component or toggle .dark class on <html>.


10. RTL Support

KtUI has built-in RTL support:

  • KTDom.isRTL() checks dir="rtl" on <html>
  • Dropdowns auto-switch placement (placementRtl config)
  • Use logical properties in your CSS (inset-inline-start instead of left)

11. Common Pitfalls

ProblemCauseFix
Components not workinginit() not called or called before DOM readyCall KTComponents.init() after DOM is ready
Dropdown/Modal not openingMissing data-kt-*-toggle attributeEnsure toggle attribute value is a valid CSS selector
Styles missingKtUI CSS or variables not loadedImport styles.css and define CSS variables
SSR hydration errorsinit() called on serverGuard: if (typeof window !== 'undefined')
Re-init not workingExisting instance blocks re-initCall dispose() first, or use getOrCreateInstance()
DataTable not sortingMissing data-kt-datatable-column on <th>Add column attribute to each header cell
Select not searchableMissing data-kt-select-enable-searchAdd the attribute to the <select> element
Toast not appearingNo container createdToast auto-creates containers; check z-index conflicts
Popper positioning wrongContainer not in DOM or overflow hiddenUse data-kt-dropdown-container="body" to portal
Dynamic content not interactiveinit() not re-called after DOM mutationCall KTComponents.init() or per-component init after adding markup
getInstance() returns nullElement not initializedUse getOrCreateInstance() or ensure init() was called

12. Source Code Structure

ktui/src/
├── index.ts                    # Main exports + KTComponents.init()
├── init-all.ts                 # Auto-init on DOMContentLoaded
├── types.ts                    # Shared types (KTOptionType, etc.)
├── legacy.ts                   # Legacy compatibility
├── helpers/
│   ├── dom.ts                  # DOM utilities (KTDom)
│   ├── data.ts                 # WeakMap data store (KTData)
│   ├── event-handler.ts        # Delegated events (KTEventHandler)
│   └── utils.ts                # General utilities (KTUtils)
└── components/
    ├── component.ts            # Base class (KTComponent)
    ├── accordion/
    ├── carousel/
    ├── clipboard/
    ├── collapse/
    ├── context-menu/
    ├── datatable/              # Complex — has local/remote providers, sort, search, pagination
    ├── dismiss/
    ├── drawer/
    ├── dropdown/               # Uses @popperjs/core
    ├── image-input/
    ├── input-number/
    ├── modal/
    ├── pin-input/
    ├── range-slider/
    ├── rating/
    ├── repeater/
    ├── reparent/
    ├── scrollable/
    ├── scrollspy/
    ├── scrollto/
    ├── select/                 # Complex — has search, remote, tags, combobox modules
    ├── sticky/
    ├── stepper/
    ├── tabs/
    ├── theme-switch/
    ├── toast/                  # Static API
    ├── toggle/
    ├── toggle-password/
    └── tooltip/

© keenthemes, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/ktui of keenthemes/ktui.

Open the folder on GitHubat commit 74a8e60

Compare with similar skills

Ktui next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Ktui compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ktui this skillkeenthemes/ktui151—~5.4kAutomated safety check: PassMIT
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
UI StylingOhh-889/skyroc79513 repos~2.5kAutomated safety check: PassMIT
MCP Developmentcoollabsio/coolify63k1 repos~949Automated safety check: PassMIT
DaisyUI 5 Color Rulessaadeghi/daisyui43k—~1.7kAutomated safety check: PassMIT
Tailwind Theme Builderjezweb/claude-skills1.1k1 repos~3.2kAutomated safety check: PassMIT

Similar skills

  • Tailwindcss Development

    anonaddy/anonaddy

    Always invoke when the user's message includes 'tailwind' in any form.

    4.9k GitHub starsUsed in 10 repos~865 tokens
    Frontend & DesignAuto-check passed
  • UI Styling

    Ohh-889/skyroc

    Create beautiful, accessible user interfaces with shadcn/ui components (built on Radix UI + Tailwind), Tailwind CSS utility-first styling, and canvas-based visual designs.

    795 GitHub starsUsed in 13 repos~2.5k tokens
    Frontend & DesignAuto-check passed
  • MCP Development

    coollabsio/coolify

    A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 1 repo~949 tokens
    Frontend & DesignAuto-check passed
  • DaisyUI 5 Color Rules

    saadeghi/daisyui

    Rules for using daisyUI 5's semantic color names, such as primary and base-100, so interfaces stay readable across themes.

    43k GitHub stars~1.7k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Tailwind Theme Builder

    jezweb/claude-skills

    Set up Tailwind v4 + shadcn/ui themed UI with dark mode. An agent skill from jezweb/claude-skills.

    1.1k GitHub starsUsed in 1 repo~3.2k tokens
    Frontend & DesignAuto-check passed
  • Ask Sonner

    leepokai/Codync

    Guide to Sonner, the React toast library — install and wire up the Toaster, pick the right toast() call, promise and loading toasts, updating, dismissing and persisting toasts, styling, theming and…

    182 GitHub starsUsed in 4 repos~1.8k tokens
    Frontend & DesignAuto-check: warnings

More from keenthemes/ktui

  • Ktui Datatable

    keenthemes/ktui

    KtUI DataTable (KTDataTable) — local/remote data, sorting, filtering, pagination, checkbox selection, state persistence, fixed layouts, event system, and architecture.

    151 GitHub stars~2.6k tokensUpdated 3 mo ago
    Auto-check passed
  • Ktui Install

    keenthemes/ktui

    Install, configure, and initialize KtUI (Keenthemes Tailwind UI) in any project.

    151 GitHub stars~994 tokensUpdated 3 mo ago
    Auto-check passed
  • Ktui Select

    keenthemes/ktui

    KtUI Select (KTSelect) — rich searchable multi-select dropdown replacing native select.

    151 GitHub stars~1.9k tokensUpdated 3 mo ago
    Auto-check passed

Works with

Questions about Ktui

What does Ktui do?

Comprehensive guide to KtUI (Keenthemes Tailwind UI) — components, theming, initialization, data-attribute API, event system, helpers, and common patterns. Ktui is an agent skill from keenthemes/ktui. Comprehensive guide to KtUI (Keenthemes Tailwind UI) — components, theming, initialization, data-attribute API, event system, helpers, and common patterns.

When should I use Ktui?

Ktui fits situations like: building UI with KtUI; adding/customizing components; working with KtUI theming/colors/dark-mode; the user mentions KtUI.

How do I install Ktui in Claude Code?

Run `npx skills add keenthemes/ktui --skill ktui -a claude-code`. Or copy the skill folder (skills/ktui in keenthemes/ktui) into .claude/skills/ktui in your project. Claude Code loads it when a task matches its description.

How do I install Ktui in Codex?

Run `npx skills add keenthemes/ktui --skill ktui -a codex`. Or copy the skill folder (skills/ktui in keenthemes/ktui) into .agents/skills/ktui in your project. Codex loads it when a task matches its description.

Can I use Ktui in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add keenthemes/ktui --skill ktui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ktui, .gemini/skills/ktui, .github/skills/ktui and .opencode/skills/ktui in your project.

What does Ktui need to run?

Going by SKILL.md and its folder, Ktui needs the command-line tools its instructions call (npm). Our summary lists: Node.js.

Does Ktui access the network?

SKILL.md names 2 domains. As links in the text: ktui.io and popper.js.org. This is read from the text; nothing was executed.

Is Ktui safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ktui use?

Ktui is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ktui use?

About 5.4k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Ktui?

Skills that share tags, products or a category with Ktui: Tailwindcss Development (anonaddy/anonaddy, 4.9k stars), UI Styling (Ohh-889/skyroc, 795 stars), MCP Development (coollabsio/coolify, 63k stars) and DaisyUI 5 Color Rules (saadeghi/daisyui, 43k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ktui?

keenthemes (a GitHub organization) maintains it in keenthemes/ktui, which has 151 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on June 17, 2026.

Source: keenthemes/ktui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.