mcpField
K
konsta-ui

konsta-ui

github.com/cap-goDesign & UI73840 installsUpdated 2w ago
Repository

About konsta-ui

A development skill for integrating Konsta UI into Capacitor interfaces, covering setup, components, and upgrades for React, Vue, and Svelte projects. It also addresses platform themes, safe areas, and styling problems.

Key features

  1. 01Configure Konsta UI and Tailwind
  2. 02Use React, Vue, or Svelte components
  3. 03Set iOS and Material themes
  4. 04Handle safe areas and dark mode
  5. 05Migrate Konsta v4 to v5

Use cases

  1. 01Build screens in a Capacitor app
  2. 02Troubleshoot unstyled components or ignored colors
  3. 03Adjust spacing around system and gesture bars

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/cap-go/capgo-skills --skill konsta-ui

After installing, type/konsta-uiin Claude Code to confirm it loaded.

Bundled filesmetadata.jsonreferences/components.md

Details

From the project README

Konsta UI for Capacitor

When to Use

TRIGGER when:

  • Adding Konsta UI to a Capacitor app or choosing it over Ionic
  • Upgrading Konsta v3/v4 (Tailwind v3 konstaConfig) to v5 (Tailwind v4)
  • Components unstyled, colors ignored, ios:/material: classes do nothing
  • Navbar / Tabbar under the status bar or gesture bar
  • Theme should follow platform (ios on iPhone, material on Android)

Do not use:

  • Ionic Framework components or theming: ionic-design
  • Tailwind install/config without Konsta: tailwind-capacitor
  • Android SystemBars / edge-to-edge native config: safe-area-handling
  • Keyboard overlap in forms: capacitor-keyboard

Versions (October 2026)

KonstaTailwindFrameworksConfig style
5.x (latest, 5.5.0)v4React 19 (ref as prop), Vue 3, Svelte 5 (runes, snippets)CSS: @import 'konsta/<fw>/theme.css' + @theme
4.xv3adds Svelte 5 typesJS: konstaConfig() in tailwind.config.js
3.x and belowv3JS konstaConfig()

Check first: npm ls konsta tailwindcss react vue svelte. Never mix v5 CSS setup with a tailwind.config.js konstaConfig wrapper.

Workflow

  1. Inspect versions, main CSS file, tailwind.config.*, postcss.config.*, vite.config.*, index.html viewport meta, whether Ionic is also present.
  2. Install / upgrade (below). For an existing Tailwind v3 project, migrate Tailwind first (tailwind-capacitor).
  3. Wrap the app in App (or KonstaProvider with Ionic/Framework7).
  4. Build screens with components: references/components.md.
  5. Verify (below).

Only load a reference when its topic is in play.

Setup (v5, React shown; Vue/Svelte use konsta/vue/theme.css / konsta/svelte/theme.css)

npm i konsta tailwindcss @tailwindcss/vite
// vite.config.ts
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({ plugins: [react(), tailwindcss()] });
/* src/index.css */
@import 'tailwindcss';
@import 'konsta/react/theme.css';

@theme {
  --color-brand-primary: #007aff; /* only --color-brand-* drive component colors */
  --color-brand-red: #ff3b30;     /* use with class k-color-brand-red */
}
import { Capacitor } from '@capacitor/core';
import { App } from 'konsta/react';

const theme = Capacitor.getPlatform() === 'android' ? 'material' : 'ios';

export default function Root() {
  return (
    <App theme={theme} safeAreas>
      {/* pages */}
    </App>
  );
}
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />

App props: theme ('ios' | 'material' | 'parent', default material), safeAreas (default true), dark, iosHoverHighlight, materialTouchRipple (global switches added in v5). Only one App per app.

Material Roboto font: add it yourself (Google Fonts link or self-hosted for offline). iOS uses the system font.

Migrating v4 -> v5

v4v5
tailwind.config.js: module.exports = konstaConfig({...})Delete wrapper; @import 'konsta/react/theme.css' in CSS
konstaConfig.colors.primary@theme { --color-brand-primary: ... }
Per-component ripple configPrefer the global App materialTouchRipple; check component types in your installed version
SegmentedButton strong roundedRemoved; use Segmented theme-specific style props
Link navbar/toolbar/tabbar propsRemoved; context-driven
React forwardRef usage / innerRef patternsref prop (React 19)
Svelte slots{#snippet ...}

Then run the Tailwind v4 upgrade (npx @tailwindcss/upgrade) if Tailwind itself is still v3; see tailwind-capacitor.

Traps

  • With Ionic in the same app, use KonstaProvider (not App) and pick one owner for safe areas (Ionic's --ion-safe-area-* or Konsta's safe-areas), not both.
  • Dark mode in Konsta v5 is class-based (@custom-variant dark (&:where(.dark, .dark *)) in its CSS): toggle dark on <html>, set App dark, and match native bars with SystemBars.setStyle.
  • Konsta's own docs show user-scalable=no, maximum-scale=1; prefer allowing zoom for accessibility and fix iOS input zoom with 16px inputs instead.
  • Modals/side panels that are not full-screen need no-safe-areas (or no-safe-areas-top etc.) to avoid extra padding.
  • Konsta is UI only: no router, no page transitions. Pair with React Router / Vue Router / SvelteKit and handle Android back button with @capacitor/app backButton.

Verification

  1. npm run build && npx cap sync, run on iOS and Android.
  2. Inspect <html>/root: .k-ios or .k-material class present; ios:/material: utilities apply.
  3. Navbar clears the Dynamic Island; Tabbar clears the home indicator and Android gesture bar (Android 15+ edge-to-edge).
  4. Toggle dark mode; components and status bar icons switch together.
  5. Leftover check: grep -rn "konstaConfig\|konsta/config" . returns nothing on v5.

Error Handling

Error / symptomCauseFix
Cannot find module 'konsta/config'v5 removed JS configUse CSS @import 'konsta/react/theme.css'
Components render unstyledTheme CSS not imported, or Tailwind not scanning (no @tailwindcss/vite / @tailwindcss/postcss)Import theme after @import 'tailwindcss'; add the Tailwind plugin
[postcss] It looks like you're trying to use tailwindcss directly as a PostCSS pluginTailwind v4 PostCSS plugin movedUse @tailwindcss/postcss or @tailwindcss/vite
Brand color ignoredVariable not named --color-brand-*, or defined outside @themeRename inside @theme
ios: classes have no effectApp/KonstaProvider missing, so no .k-ios ancestorWrap app
React warning about ref / forwardRef after upgradeReact 18 with Konsta 5Upgrade to React 19 or stay on Konsta 4
Double top paddingKonsta safeAreas + Ionic or custom env() paddingKeep one owner

Resources

Comments

Markdown supported