PrimeVue
Last updated:
hold
PrimeVue is a Vue UI component library by PrimeTek, the company behind PrimeFaces, PrimeNG for Angular and PrimeReact. It ships with a large set of ready-to-use components, from buttons and form inputs to carousels, trees and data tables, and comes with an official Nuxt module.
Since version 4, PrimeTek's libraries share a framework-agnostic foundation published under the @primeuix scope:
@primeuix/styled is the theming engine that turns design tokens into CSS variables, @primeuix/themes contains
ready-made presets such as Aura, and @primeuix/styles holds the component styles. PrimeVue itself provides the Vue
components, with packages such as @primevue/forms and @primevue/nuxt-module on top.
We used PrimeVue 4 in a Nuxt-based Shopware storefront serving several shops from one codebase. Shared components lived in a base Nuxt layer, and each shop was a separate layer extending it. PrimeVue's design tokens were organised in three tiers: primitive (e.g. color palettes), semantic (e.g. the primary color or focus ring) and component-level. Each shop only needed its own preset overriding the primitive and semantic tokens, while the components were shared. This worked well for us, although PrimeVue is not unique here: any component library with token-based theming would support a similar setup. We also found pass-through props useful, as they let us reach into a component's internal elements, for example to add utility classes or custom states that PrimeVue does not support out of the box, without having to fork the component.
Our biggest struggle was with server-side rendering. On earlier 4.x versions, PrimeVue components were rendered without
their CSS in the initial server response, which caused large layout shifts until the styles were applied on the client.
We were not the only ones: several GitHub issues describe the same problem, such as
#6026,
#6360, #7269
and #7420, and all of them are still open when the repository
switched to security fixes only. For a long time, we worked around it by rendering affected components only on the
client, with <ClientOnly> wrappers and loading skeletons. Upgrading was not an option for a long time, as newer
versions introduced even bigger problems in our setup. Only with version 4.5 were we finally able to upgrade, which
allowed us to render most components on the server again. With so many related issues still open, it is unclear whether
this was a general fix or whether our setup was simply no longer affected. The Carousel, however, still calculates its
layout in the browser and had to be rendered client-side only. For a library of this size, with an official Nuxt module,
we did not expect SSR to cause this much trouble when choosing the stack.
In 2026, PrimeTek introduced PrimeUI as a common licensing brand for PrimeNG, PrimeReact and PrimeVue. Version 4.x and earlier remain MIT-licensed, but PrimeVue 5, released in July 2026, is distributed under a commercial license, free only for small organisations that meet the Community license criteria. PrimeVue 4 is no longer actively developed and only receives security fixes. We have not used PrimeVue 5 yet, so our assessment is based on version 4. Given our SSR experience, and the fact that PrimeVue is no longer open source nor free for our use case, we will most likely choose a different library in future projects.