# Create a new application by executing:
npm create vue@latest
# Follow the installation wizard to set everything up:
✔ Project name (target directory): "./my-app"
✔ Select features to include in your project:
◼ TypeScript "Yes"
◼ JSX Support "Yes"
◼ Router (SPA development) "Yes"
◼ Pinia (state management) "Yes"
◼ Vitest (unit testing) "Yes"
◼ End-to-End Testing "Yes"
◼ ESLint (error prevention) "Yes"
◼ Prettier (code formatting) "Yes"
✔ Select an End-to-End testing framework: "Playwright"
✔ Select experimental features to include in your project:
◻ Oxlint (experimental) "No"
◻ rolldown-vite "No"
✔ Skip all example code and start with a blank Vue project? "No"
npm install @porsche-design-system/components-vue
<PorscheDesignSystemProvider />.// src/App.vue
<script setup lang="ts">
import { RouterView } from 'vue-router';
import { PorscheDesignSystemProvider } from '@porsche-design-system/components-vue';
</script>
<template>
<PorscheDesignSystemProvider>
<header>…</header>
<RouterView />
</PorscheDesignSystemProvider>
</template>
<style scoped>
…
</style>
<head>
section of your HTML.// vite.config.ts
import …
import { defineConfig } from 'vite';
import {
getComponentChunkLinks,
getFontFaceStyles,
getFontLinks,
getIconLinks,
getInitialStyles,
getMetaTagsAndIconLinks,
} from '@porsche-design-system/components-vue/partials';
const transformIndexHtmlPlugin = () => {
return {
name: 'html-transform',
transformIndexHtml(html: string) {
const headPartials = [
// injects stylesheet which defines visibility of pre-hydrated PDS components
getInitialStyles(),
// injects stylesheet which defines Porsche Next CSS font-face definition (=> minimize FOUT)
getFontFaceStyles(),
// preloads Porsche Next font (=> minimize FOUT)
getFontLinks(),
// preloads PDS component core chunk from CDN for PDS component hydration (=> improve loading performance)
getComponentChunkLinks(),
// preloads Porsche icons (=> minimize FOUC)
getIconLinks(),
// injects favicon, apple touch icons, android touch icons, etc.
getMetaTagsAndIconLinks({ appTitle: 'Porsche' }),
].join('');
return html.replace(/<\/head>/, `${headPartials}$&`);
},
};
};
export default defineConfig({
plugins: [vue(), vueJsx(), vueDevTools(), transformIndexHtmlPlugin()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
});
Using Tailwind CSS with the Porsche Design System Theme provides a powerful benefit: Your styles are truly framework-agnostic. Since Tailwind generates atomic utility classes, you eliminate cascading style issues, promoting long-term scalability and maintainability for large projects. The patterns and components you build are easily portable. You can copy and paste the same styling code between projects, teams, and different technology stacks (React, Angular, Vue, plain HTML, etc.), ensuring 100% visual uniformity across the organization. You can now use and customize the provided
and Patterns , which are all written in Tailwind CSS, to build applications quickly and efficiently. Templates
npm install tailwindcss @tailwindcss/vite
// vite.config.ts
import …
import { defineConfig } from 'vite';
import tailwindcss from '@tailwindcss/vite';
const transformIndexHtmlPlugin = () => { … }
export default defineConfig({
plugins: [vue(), vueJsx(), vueDevTools(), transformIndexHtmlPlugin(), tailwindcss()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
});
/* src/assets/main.css */
@import 'tailwindcss';
@import '@porsche-design-system/components-vue/tailwindcss';
<PWordmark />) with some Tailwind CSS styles. Then, run npm run dev and
verify that the component and styles display correctly.// src/App.vue
<script setup lang="ts">
import { RouterView } from 'vue-router'
import { PorscheDesignSystemProvider } from '@porsche-design-system/components-vue';
import { PWordmark } from '@porsche-design-system/components-vue';
</script>
<template>
<PorscheDesignSystemProvider>
<div class="grid justify-items-center col-span-full gap-fluid-md m-static-lg p-fluid-lg bg-surface rounded-lg">
<PWordmark />
<h1 class="prose-display-md">Porsche Design System</h1>
</div>
<header>…</header>
<RouterView />
</PorscheDesignSystemProvider>
</template>
<style scoped>
…
</style>
