$npx -y skills add skilld-dev/vue-ecosystem-skills --skill quasar-skilldBuild high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time. ALWAYS use when writing code importing \"quasar\". Consult for debugging, best practices, or modifying quasar.
| 1 | # quasarframework/quasar `quasar@2.19.3` |
| 2 | **Tags:** legacy: 1.22.10, latest: 2.19.3 |
| 3 | |
| 4 | **References:** [Docs](./references/docs/_INDEX.md) |
| 5 | ## API Changes |
| 6 | |
| 7 | This section documents version-specific API changes — prioritize recent major/minor releases. |
| 8 | |
| 9 | - BREAKING: `v-model` -> uses `model-value` + `@update:model-value` instead of `value` + `@input` in Vue 3 [source](./references/docs/start/upgrade-guide/upgrade-guide.md#vue-3-and-v-model) |
| 10 | |
| 11 | - BREAKING: `QDrawer`/`QDialog`/`QMenu`/`QTooltip` -> use `class` and `style` attributes instead of `content-class`/`content-style` props [source](./references/docs/start/upgrade-guide/upgrade-guide.md#qdrawerqdialogqmenuqtooltip) |
| 12 | |
| 13 | - BREAKING: `QImg` -> completely redesigned, removed `transition` and `basic` props; renamed `no-default-spinner` to `no-spinner` [source](./references/docs/start/upgrade-guide/upgrade-guide.md#qimg) |
| 14 | |
| 15 | - BREAKING: `QScrollArea` -> methods `getScrollPosition` returns `{ top, left }`; `setScrollPosition` and `setScrollPercentage` require `axis` parameter [source](./references/docs/start/upgrade-guide/upgrade-guide.md#qscrollarea) |
| 16 | |
| 17 | - BREAKING: `QTable` -> renamed `data` prop to `rows` to avoid TS naming conflicts [source](./references/docs/start/upgrade-guide/upgrade-guide.md#qtable) |
| 18 | |
| 19 | - BREAKING: `Platform.is` -> all boolean properties now explicitly `false` instead of `undefined` since v2.17.0 [source](./references/repos/quasarframework/quasar/releases/vquasar-v2.17.0.md#potential-upgrade-issue) |
| 20 | |
| 21 | - BREAKING: `colors` utils -> `getBrand` and `setBrand` replaced by `getCssVar` and `setCssVar` respectively [source](./references/docs/start/upgrade-guide/upgrade-guide.md#color-utils) |
| 22 | |
| 23 | - BREAKING: Scroll utils -> renamed `getScrollPosition` to `getVerticalScrollPosition`, `animScrollTo` to `animVerticalScrollTo`, and `setScrollPosition` to `setVerticalScrollPosition` [source](./references/docs/start/upgrade-guide/upgrade-guide.md#scroll-utils) |
| 24 | |
| 25 | - BREAKING: `date` utils -> `addToDate` and `subtractFromDate` property names normalized (e.g., `year` -> `years`, `month` -> `months`) [source](./references/docs/start/upgrade-guide/upgrade-guide.md#date-utils) |
| 26 | |
| 27 | - BREAKING: `QPopupEdit` -> must now use the default slot with `v-slot="scope"` for performance [source](./references/docs/start/upgrade-guide/upgrade-guide.md#qpopupedit) |
| 28 | |
| 29 | - BREAKING: `GoBack` directive -> removed; use router reference (`$router.back()` or `$router.go(-1)`) instead [source](./references/docs/start/upgrade-guide/upgrade-guide.md#quasar-directives) |
| 30 | |
| 31 | - NEW: `useQuasar` composable -> primary method for accessing the `$q` object within Composition API components |
| 32 | |
| 33 | - NEW: `useMeta` composable -> new way to define meta tags, replacing the now deprecated `meta` component property [source](./references/docs/start/upgrade-guide/upgrade-guide.md#meta-plugin) |
| 34 | |
| 35 | - NEW: `QTable` props -> added `table-row-style-fn`, `table-row-class-fn`, `grid-style-fn`, and `grid-class-fn` in v2.18.0 [source](./references/repos/quasarframework/quasar/releases/vquasar-v2.18.0.md#new) |
| 36 | |
| 37 | **Also changed:** `useFormChild()` new composable · `QOptionsGroup` props `option-value`, `option-label`, `option-disable` new v2.17.0 · `QUploader` prop `thumbnail-fit` new v2.17.0 · `QSelect` prop `disable-tab-select` new v2.17.0 · `QMenu`/`QBtnDropdown` `no-esc-dismiss` new v2.18.0 · `evt.qAvoidFocus` new flag v2.18.0 · `QDate` model-value no longer contains `changed` prop · `QPagination` prop `gutter` new · `QImg` props `loading`, `crossorigin`, `fit` new · `Dialog` plugin custom component props moved to `componentProps` · `Loading` plugin uses `html: true` for HTML content instead of `sanitize` · `App.vue` wrapper `<div id="q-app">` removed · `.sync` modifier replaced by `v-model:propName` |
| 38 | |
| 39 | ## Best Practices |
| 40 | |
| 41 | - Use `#q-app/wrappers` instead of `quasar/wrappers` for defining configurations and boot files — provides superior type inference and alignment with modern Quasar CLI [source](./references/docs/quasar-cli-vite/upgrade-guide.md:L256:258) |
| 42 | |
| 43 | - Use **Regle** as the recommended validation library for `QInput` and `QField` — provides a robust, externalized validation logic compared to inline rules [source](./references/docs/vue-components/input.md:L319) |
| 44 | |
| 45 | - Prefer **responsive CSS classes** (e.g., `gt-sm`, `lt-md`) over the `Screen` plugin in JavaScript — minimizes re-renders and layout shifts by leveraging CSS media queries directly [source](./references/docs/options/screen-plugin.md:L5) |
| 46 | |
| 47 | - Bootstrap custom dialog components with the `useDialogPluginComponent` composable — handles the complex internal communication and lifecycle requirements of the Dialog plugin automatically [source](./references/docs/vue |