Nuxt UI Pro

A collection of premium Vue components to create beautiful & responsive Nuxt applications in minutes.

Nuxt UI Pro is a collection of Vue components, composables and utils built on top of Nuxt UI, oriented on structure and layout and designed to be used as building blocks for your app.

It includes ready to use templates: Dashboard, SaaS, Docs and Landing.

Nuxt UI Pro is already trusted by 1,500+ users and teams around the world, we're confident that it will help you build your app faster and better, with 10x less code.

While Nuxt UI is free and open source, Pro is a premium product that helps sustain Nuxt OSS development.

Templates

You can get started with our minimal starter, one of our official templates or follow the Installation guide to install Nuxt UI Pro in your existing project.

Dashboard

A dashboard with multi-column layout.

SaaS

A template with landing, pricing, docs and blog.

Docs

A documentation with @nuxt/content.

Landing

A landing page you can use as starting point.

You can use the Use this template button on GitHub to create a new repository or use the CLI:

npx nuxi init -t github:nuxt-ui-pro/dashboard my-dashboard
Explore the community templates on GitHub.

Components

Nuxt UI Pro is a collection of 50+ components that can be used in various ways. This section will help you understand how the components are organized and where to use them. Feel free to dive into each component's documentation for examples and API documentation.

It does not inject any pages or layouts, you have to create them yourself. This provides more flexibility and allows you to build your app the way you want.

The code examples on this page are simplified for the sake of clarity and demonstrates only the structure.

Layout

Let's start with the layout components, they are used to create the structure of your app with a Header, Main and Footer. Most of the time, you will use those in your app.vue:

app.vue
<template>
  <UHeader />

  <UMain>
    <NuxtLayout>
      <NuxtPage />
    </NuxtLayout>
  </UMain>

  <UFooter />
</template>

Landing

When building a landing page or any marketing page, you will most likely need a LandingHero and some LandingSection to define the structure.

The ULandingSection component is enough in most cases with a title, a description, some links and features and an image in the default slot for example with its align prop set to left, center or right.

But sometimes, you might want to add some LandingLogos, a LandingGrid with some LandingCard, some LandingTestimonial, a LandingCTA or even a LandingFAQ:

pages/index.vue
<template>
  <ULandingHero>
    <ULandingLogos />
  </ULandingHero>

  <ULandingSection>
    <ULandingGrid>
      <ULandingCard />
      <ULandingCard />
      <ULandingCard />
    </ULandingGrid>
  </ULandingSection>

  <ULandingSection>
    <UPageColumns>
      <ULandingTestimonial />
      <ULandingTestimonial />
      <ULandingTestimonial />
    </UPageColumns>
  </ULandingSection>

  <ULandingSection>
    <ULandingCTA />
  </ULandingSection>

  <ULandingSection>
    <ULandingFAQ />
  </ULandingSection>
</template>
Take a look at the Landing template to see what you can do!

Pricing

When building pricing pages, you will most likely need some PricingCard inside a PricingGrid to display your plans and maybe a PricingToggle to switch between monthly and yearly plans:

pages/pricing.vue
<template>
  <ULandingHero>
    <template #links>
      <UPricingToggle />
    </template>
  </ULandingHero>

  <ULandingSection>
    <UPricingGrid>
      <UPricingCard />
      <UPricingCard />
      <UPricingCard />
    </UPricingGrid>
  </ULandingSection>

  <ULandingSection>
    <ULandingLogos />
  </ULandingSection>

  <ULandingSection>
    <ULandingFAQ />
  </ULandingSection>
</template>

Blog

When building a blog, you will most likely need a BlogList and some BlogPost to display your articles:

pages/blog.vue
<template>
  <UContainer>
    <UPageHeader />

    <UPageBody>
      <UBlogList>
        <UBlogPost />
        <UBlogPost />
        <UBlogPost />
        <UBlogPost />
        <UBlogPost />
      </UBlogList>
    </UPageBody>
  </UContainer>
</template>

Page

This category contains components to build the structure of your pages. For example, the Page component will create a grid of 10 columns with a 2 columns left and/or right slots. You will also find a PageHero, a PageHeader and a PageBody with prose support.

pages/[...slug].vue
<template>
  <UPageHero />

  <UPage>
    <UPageHeader />

    <UPageBody prose>
      <ContentRenderer />
    </UPageBody>
  </UPage>
</template>

You might also want to add a PageGrid or a PageColumns with some PageCard or add some PageLinks to display a list of links next to your content.

And if you need to display an error page, you can use the PageError component:

error.vue
<template>
  <UHeader />

  <UMain>
    <UPage>
      <UPageError :error="error" />
    </UPage>
  </UMain>

  <UFooter />
</template>

Aside

When you need to display a sticky sidebar, you can use the Aside component inside the left or right slot of the Page component:

pages/docs.vue
<template>
  <UPage>
    <template #left>
      <UAside />
    </template>

    <slot />
  </UPage>
</template>

When you need to display a list of links in a sidebar, you can use the NavigationTree component inside the default slot of the Aside component:

pages/docs.vue
<template>
  <UPage>
    <template #left>
      <UAside>
        <UNavigationTree :links="links" />
      </UAside>
    </template>

    <NuxtPage />
  </UPage>
</template>

Auth

The only component in this category is the AuthForm, you can use it to build your login, register, forgot password and reset password pages.

Take a look at the SaaS template to see an example of all those components!

Dashboard

This category contains 15+ components to build your own dashboard, designed specifically to create a consistent look and feel.

Wrap your layout with the DashboardLayout component and your pages with the DashboardPage component. Use the DashboardPanel component to create a multi-column layout with some DashboardNavbar, DashboardToolbar, DashboardSidebar inside, the responsive will be handled automatically.

layouts/dashboard.vue
<template>
  <UDashboardLayout>
    <UDashboardPanel :width="250" :resizable="{ min: 200, max: 300 }" collapsible>
      <UDashboardNavbar />

      <UDashboardSidebar>
        <template #header>
          <UDashboardSearchButton />
        </template>

        <UDashboardSidebarLinks />
      </UDashboardSidebar>
    </UDashboardPanel>

    <slot />

    <UDashboardSearch />
  </UDashboardLayout>
</template>
Take a look at the Dashboard template to see what you can do!

Content

As mentioned in the Content guide, if you choose to go with @nuxt/content to build your app, @nuxt/ui-pro will provide you with a set of fully-compatible components like the ContentSearch, ContentToc and ContentSurround components.

You'll also find some Prose components to use in your .md files using the MDC syntax like the Callout, Card, CodeGroup, Tabs, etc. You can find the full list in the Prose category.

Take a look at the Docs template to see what you can do!

Color Mode

The color mode category contains components to switch between light and dark mode in different ways such as ColorModeButton, ColorModeToggle and ColorModeSelect.

Those components will be automatically hidden if you've forced the color mode in your page with:

<script setup lang="ts">
definePageMeta({
  colorMode: 'dark'
})
</script>

There are also components to easily display an avatar or image with a different src for light and dark mode such as ColorModeAvatar and ColorModeImage.