cap-go/capgo-skills/ionic-design

Claude Code and agent skill by cap-go/capgo-skills

Trust tier 2
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Builds and reviews Ionic Framework UI in Capacitor apps (Ionic 9 current, Ionic 8 still common) - page structure (`ion-header`/`ion-content`/`ion-footer`), lists, modern form syntax (`label`/`labelPlacement` on `ion-input`/`ion-select`), sheet modals, tabs + `ion-router-outlet`, CSS variable theming, dark palettes (`palettes/dark.system.css`, `.ion-palette-dark`), iOS vs MD mode, and Ionic 8 -> 9 breaking changes (React Router 6, Vue Router 5, Angular 18-22 zoneless, removed `ion-picker-legacy`, boolean `autocorrect`, `npx @ionic/migrate`). Use when writing Ionic components, theming an Ionic app, fixing platform-mode styling, or upgrading @ionic/react, @ionic/vue, @ionic/angular. Do not use for Konsta UI (konsta-ui), Tailwind setup (tailwind-capacitor), raw safe-area CSS (safe-area-handling), keyboard resize (capacitor-keyboard), or Ionic Appflow/Enterprise migrations (ionic-appflow-migration, ionic-enterprise-sdk-migration).

Install

npx vskill@latest install cap-go/capgo-skills/ionic-design

SKILL.md

Ionic Framework Design

When to Use

TRIGGER when:

  • Writing or reviewing Ion* / ion-* components in a Capacitor app
  • Theming: --ion-color-*, dark mode, high contrast, per-platform styles
  • iOS vs Material Design mode looks wrong, or mode overrides misbehave
  • Upgrading Ionic 7/8 -> 9, or errors after npm i @ionic/*@latest
  • Choosing Ionic vs another UI kit for a new Capacitor app

Do not use:

  • Konsta UI components: konsta-ui
  • Tailwind v4 install / config: tailwind-capacitor
  • Notch / system bar padding outside Ionic: safe-area-handling
  • Keyboard covering inputs: capacitor-keyboard (Ionic apps use resize: 'ionic')
  • Leaving Appflow / Ionic Enterprise plugins: ionic-appflow-migration, ionic-enterprise-sdk-migration

Versions (October 2026)

PackageCurrentNotes
@ionic/core, @ionic/react, @ionic/vue, @ionic/angular9.x (latest)8.x on v8-lts tag
ionicons8.x
Ionic 9 minimumsCapacitor 7+, iOS 16+, Android Chromium 89+, Angular 18-22, React 18/19 + React Router 6.4+, Vue 3.5 + vue-router 5, TypeScript 5.4+

Check installed versions first: npm ls @ionic/core @ionic/react @ionic/vue @ionic/angular. Write code for the installed major; do not mix v8 and v9 APIs.

Workflow

  1. Inspect framework, Ionic major, router version, global CSS imports, setupIonicReact / IonicVue / provideIonicAngular config, capacitor.config Keyboard.resize.
  2. Upgrading? Load references/ionic-9-migration.md; run npx @ionic/migrate in preview first, report findings, then apply.
  3. Components: references/components.md for page shell, lists, forms, overlays, tabs.
  4. Theming: references/theming.md for colors, dark/high-contrast palettes, mode-specific CSS, shadow parts.
  5. Verify in both modes and on devices (below).

Only load a reference when its topic is in play.

Rules that prevent most Ionic bugs

  • Every routed page = IonPage > IonHeader + IonContent (+ optional IonFooter). Missing IonPage breaks transitions and lifecycle hooks.
  • Scroll lives in ion-content. Do not make body or a wrapper div scroll; use IonContent scrollToTop()/getScrollElement().
  • Use ion-router-outlet (IonRouterOutlet, IonTabs) for URL routing. In Ionic 9 ion-nav no longer integrates with ion-router; keep it for local URL-less stacks inside a page.
  • Safe areas are handled through --ion-safe-area-top|right|bottom|left (default env()); do not add body padding on top. Requires viewport-fit=cover.
  • Forms: put label + labelPlacement on the control itself (<IonInput label="Email" labelPlacement="floating" />). Legacy <IonItem><IonLabel/><IonInput/></IonItem> labeling was removed in Ionic 8.
  • Overlays: prefer inline <IonModal isOpen> / trigger or hooks (useIonModal, modalController) consistently; always handle didDismiss to reset state.
  • Platform: style via .ios / .md classes on html or mode CSS selectors; use isPlatform('ios') only for behavior, never navigator.userAgent.
  • Icons: import only used icons (import { heart } from 'ionicons/icons') and pass icon={heart}; string names need addIcons registration in standalone/bundled builds.

Verification

  1. Build and sync: npm run build && npx cap sync.
  2. Run both modes in the browser: append ?ionic:mode=ios and ?ionic:mode=md to the dev URL; check headers, toolbars, lists, buttons.
  3. Toggle OS dark mode (or add ion-palette-dark to <html> if using the class palette); check contrast of custom colors.
  4. Device check: iPhone with Dynamic Island + Android 15/16 gesture nav for header/tab bar insets; open keyboard on a form page.
  5. After upgrade: grep -rn "ion-picker-legacy\|pickerController\|useIonPicker\|@ionic/angular/standalone\|autocorrect=\"off\"" src/ returns nothing; npx tsc --noEmit passes.

Error Handling

Error / symptomCauseFix
Package path ./dist/... is not exported from package (webpack) / ERR_PACKAGE_PATH_NOT_EXPORTED (Node) for @ionic/coreIonic 9 exports map; deep importImport from @ionic/core, @ionic/core/components, @ionic/core/components/ion-*.js, @ionic/core/loader, @ionic/core/css/*.css
Import errors or migrate warnings for @ionic/angular/standalone (Ionic 9)Standalone imports movedImport from @ionic/angular; lazy APIs from @ionic/angular/lazy
React: Property 'component' does not exist on Route / IonRouteIonic 9 requires React Router 6element={<Page />}, Navigate instead of Redirect, useNavigate instead of useHistory
Autocorrect turned ON after upgradeautocorrect="off" string is truthy in Ionic 9Remove the attribute or bind false
ionChange no longer fires on re-selecting same optionIonic 9 fires only on value changeUse ionDismiss for dismissal
Sheet modal handle now focusable / cycles breakpointsIonic 9 handleBehavior default cyclehandle-behavior="none" to restore
Styles missing, components unstyledCore CSS not importedImport @ionic/<fw>/css/core.css (+ structure/typography) once at entry
Dark mode never activatesNo palette importedImport css/palettes/dark.system.css (or .class.css + ion-palette-dark class)
Angular 21 view not updating after async workZoneless default in Ionic 9 + Angular 21Use signals / markForCheck(), or add provideZoneChangeDetection()

Resources

  • Ionic docs: https://ionicframework.com/docs
  • Ionic 9 breaking changes: https://github.com/ionic-team/ionic-framework/blob/main/BREAKING.md
  • Theming: https://ionicframework.com/docs/theming/basics
  • Dark mode: https://ionicframework.com/docs/theming/dark-mode

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
20
Repository forks
3
Repository npm downloads, 7 days
4
7-day trend score
21

Stars and forks are for the whole GitHub repository, not this skill alone. Downloads are for the repository's npm package. Refreshed 22 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/cap-go/capgo-skills/ionic-design/badge)](https://verified-skill.com/skills/cap-go/capgo-skills/ionic-design)

Something wrong with this skill or its page? Tell us.