# Vue Star Rate (vue-js-star-rating)
> Zero-dependency Vue 3.5+ star rating component — keyboard accessible, TypeScript-first, half-star precision, Lucide / FontAwesome / custom icons, SSR & Nuxt ready.
**Package:** `vue-js-star-rating` · **License:** MIT · **Peer:** `vue ^3.5.0` · **Bundle:** ~4.6 KB gzip JS + ~0.75 KB gzip CSS for `import { VueStarRate }` (vue excluded; `useStarRating` alone is ~1 KB gzip)
Vue Star Rate is a modern, keyboard-accessible star rating component for Vue 3 applications. Built with `
```
## Props
- `v-model` (`number`, default `0`) — current rating value
- `maxStars` (`number`, default `5`)
- `allowHalf` (`boolean`, default `false`) — enable 0.5 increments
- `size` (`'xs' | 'sm' | 'md' | 'lg' | 'xl'`, default `'md'`)
- `iconSize` (`number | { width, height }`) — override pixel size
- `iconProvider` (`'custom' | 'lucide' | 'fontawesome'`, default `'custom'`)
- `colors` (`Partial`) — `{ empty, filled, hover, half }`
- `animation` (`Partial`) — `{ enabled, duration, type: 'scale'|'bounce'|'pulse'|'none' }`; not a full off-switch: interactive stars still scale to 1.1 on hover
- `readonly` (`boolean`, default `false`)
- `disabled` (`boolean`, default `false`)
- `clearable` (`boolean`, default `false`)
- `allowReset` (`boolean`, default `true`) — click active star again to reset
- `showCounter` / `counterTemplate` (default template `'{value} / {max}'`)
- `showTooltip` / `tooltipLabels` (`string[]`)
- `minRating` (`number`, default `0`) / `step` (`number`, default `1`)
- `rtl` (`boolean`; known gap: the half-star fill is still painted on the left side of the star and `ArrowLeft` / `ArrowRight` are not mirrored) / `inline` (`boolean`; not implemented: no visual effect) / `gap` (`number`, px)
- `ariaLabel` (`string`, default `'Star rating'`) / `className` / `faIcons` / `customIcon` (not implemented: accepted but ignored; use the `icon` slot)
## Events
- `update:modelValue` (`number`) — emitted by `v-model`
- `change` (`value`, `oldValue`)
- `hover` (`number | null`)
- `focus` / `blur`
## Slots
- `icon` — scoped: `{ filled, half, size, color, index }`
- `counter` — scoped: `{ value, max }`
- `clear` — content of the clear button
## Keyboard
- `→` / `↑` — increase · `←` / `↓` — decrease
- `Home` — minimum · `End` — maximum
- `1`–`9` — jump to value · `0` — reset
## Accessibility
- Root `role="group"` with an `aria-label`; each star is a `