skilld-dev/vue-ecosystem-skills7 files

Quasar Skilld

Build, configure, and debug apps with the Quasar framework (`quasar` npm package, v2.33.1). Use when writing, reviewing, or debugging code that imports "quasar" or "quasar/wrappers", configuring Quasar with Vite, Vitest, Storybook, UMD, or Quasar CLI, styling with Quasar Sass variables, or upgrading between Quasar v2 releases.

Specification
Skill ID
skilld-dev/vue-ecosystem-skills/quasar-skilld
Publisher
skilld-dev
Repository
vue-ecosystem-skills
Installs
0
Files
7
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

skilld-dev/vue-ecosystem-skills/quasar-skilldInstalls these files
  • SKILL.md
  • references/api-surface.md
  • references/best-practices.md
  • references/installation.md
  • references/offline-docs.md
  • references/security.md
  • references/whats-new.md

What this skill tells the agent

Quasar quasar@2.33.1

Vue 3 UI framework for SPA, PWA, SSR, SSG, mobile (Cordova/Capacitor) and desktop (Electron) apps from one codebase. Vue 3 only. ESM package, Node >= 22 (package.json:102-104). Baseline for this Skill: quasar 2.33.1 (2026-09-22).

First: read the docs shipped in the installed package

Quasar 2.33+ bundles its documentation offline. Before guessing an API, look inside the project's node_modules/quasar:

  • dist/api/<Name>.json — props, slots, events, methods of every component, plugin and directive, with addedIn version markers. This is the ground truth.
  • dist/mcp/**/*.md — the quasar.dev pages (components, plugins, directives, composables, utils, styling, layout) as Markdown; dist/mcp/api/<Name>.md holds the same API in compact readable form. dist/mcp/meta.json (160 pages, version: 2.33.1) indexes them all.
  • @quasar/mcp MCP server serves the same docs to MCP-capable agents.

Details and search commands: references/offline-docs.md

Package map

EntryPathNotes
browser ESMdist/quasar.client.jsdefault import target
node/serverdist/quasar.server.prod.jswhat Node/Vitest resolve without the Vite plugin
UMDdist/quasar.umd.prod.jsCDN usage with Vue 3 global build
typesdist/types/index.d.ts
wrapperswrappers/index.jsno-op typings, deprecated; use #q-app/wrappers (wrappers/index.js:9-16)
lang packslang/*.js (75)import langDe from 'quasar/lang/de'
icon setsicon-set/*.js (44)import iconSet from 'quasar/icon-set/material-icons'

Full export surface (components, plugins, directives, composables, utils): references/api-surface.md

Common tasks

Install with the Vite plugin (@quasar/vite-plugin v2 needs Vite 8+, @vitejs/plugin-vue 6+, quasar v2.24+, Node 20.19+; ESM-only; dist/mcp/start/vite-plugin.md:10):

// main.js
import { createApp } from 'vue'
import { Quasar, Notify } from 'quasar'
import '@quasar/extras/material-icons/material-icons.css'
import 'quasar/src/css/index.sass'
import App from './App.vue'

createApp(App).use(Quasar, { plugins: { Notify } }).mount('#app')
// vite.config.js
import { quasar, transformAssetUrls } from '@quasar/vite-plugin'
import vue from '@vitejs/plugin-vue'

plugins: [vue({ template: { transformAssetUrls } }), quasar()]

Access $q in Composition API:

import { useQuasar } from 'quasar'
const $q = useQuasar()
$q.notify('Saved') // $q.platform, $q.dark, $q.screen, $q.lang, ...

Templates use kebab-case props exactly as the API JSON lists them (hide-dropdown-icon, no-error-icon); two-way props bind as v-model:propName (the v1 .sync modifier is gone).

Sass variables: quasar >= 2.14 pairs with sass-embedded@^1.93.2; quasar <= 2.13 needs sass@1.32.12 pinned (dist/mcp/start/vite-plugin.md:38-39).

More on Vite, Vitest, Storybook, UMD and Quasar CLI: references/installation.md

Best practices (verified against the 2.33.1 shipped docs)

  • Prefer responsive CSS classes (gt-sm, lt-md, window-width visibility classes) over the Screen plugin in JS, for performance.
  • Large QTree: no-transition for big datasets; virtual-scroll (v2.25+) for huge ones.
  • Custom Dialog plugin components: bootstrap with useDialogPluginComponent; bind @hide="onDialogHide" directly (v2.28+ forwards the dismissal reason).
  • Prefer useInterval/useTimeout/useAnimationFrame over native timers; they auto-cancel on unmount and are SSR-safe no-ops.
  • SSR/SSG: avoid Dark mode 'auto' unless the server knows the preference (cookie), else users see a light flash.
  • Use the LoadingBar plugin instead of a manual QAjaxBar.
  • Validation for QInput: Quasar recommends Regle (dist/mcp/vue-components/input.md:2397).
  • Quasar CLI projects: import wrappers from #q-app/wrappers, never quasar/wrappers.

Full list with citations: references/best-practices.md

Upgrading (2.20 -> 2.33.1 highlights)

  • v2.33.0: docs + compact API now ship inside the package (offline, exact version); pair with the @quasar/mcp server. Fixes: extractDate() matches the longest locale name; QTable rows-per-page selector follows a controlled v-model:pagination; virtual-scroll scrollTo() no longer dropped right after a scroll event.
  • v2.33.1: QPagination input mode clears the typed page on submit (src/components/pagination/QPagination.js:290-292); textToRgb() keeps the alpha of rgb(R, G, B, A) (src/utils/colors/colors.js:149-174).
  • v2.28: QMenu/QTooltip lost the scroll-target prop; popups track every scrolling container automatically. Platform.is dropped ie, edgeChromium, winphone, kindle, silk.
  • v2.29: a @click listener on QItem/QChip now implies clickable.
  • v2.31: readonly fields (QInput/QSelect/QFile/QField) now reflect focus and validate on blur.
  • v2.32: QImg renders its <img> into SSR HTML when the box shape is known (ratio/initial-ratio/height); ssr-prerender opts in otherwise. QExpansionItem/QTree no longer wrap content in QSlideTransition.
  • Deprecated: QInput/QFile getNativeElement() -> use the nativeEl property (dist/api/QInput.json).

No API was added in 2.33.x itself: no addedIn: v2.33 marker exists in dist/api/*.json. All behavior changes and new APIs, with release URLs: references/whats-new.md

Security

The *-html boolean props (options-html, display-value-html, html on Notify/Dialog/Loading) opt into rendering HTML and are an XSS surface: sanitize before enabling. QEditor has no sanitize option; strip <script>/<iframe> server-side. Quasar CLI only exposes env variables with the QCLI_ prefix to client code.

Checklist: references/security.md

Use this skill in a project

Open any RiverX project, search the Skills panel for skilld-dev/vue-ecosystem-skills/quasar-skilld, and install it in one click.

Use this skill