Skip to content

Getting Started ​

Progressive Web Apps (PWAs) are web applications built and enhanced with modern APIs to deliver enhanced capabilities, reliability, and installability while reaching anyone, anywhere, on any device—all with a single codebase.

At a high level, a PWA consists of a web application manifest to give the browser information about your app, and a service worker to manage the offline experience.

If you are new to Progressive Web Apps, you might consider reading Google's "Learn PWA" course before you begin.

Service Worker ​

Service workers essentially act as proxy servers that sit between web applications, the browser, and the network (when available). They are intended, among other things, to enable the creation of effective offline experiences, intercept network requests and take appropriate action based on whether the network is available, and update assets residing on the server. They will also allow access to push notifications and background sync APIs.

A service worker is an event-driven worker registered against an origin and a path. It takes the form of a JavaScript file that can control the web-page/site that it is associated with, intercepting and modifying navigation and resource requests, and caching resources in a very granular fashion to give you complete control over how your app behaves in certain situations (the most obvious one being when the network is not available).

You can find more information about service workers in Service Worker API.

Vite PWA ​

Vite PWA will help you to turn your existing applications into PWAs with very little configuration. It comes preset with sensible defaults for common use cases.

The @unplugin-pwa/vite plugin can:

Scaffolding Your First Vite PWA Project New ​

Compatibility Note

Vite requires Node.js version 18.x.x or 20+. However, some templates may require a higher Node.js version to work, please upgrade Node if your package manager warns about it.

bash
$ pnpm create @vite-pwa/pwa
bash
$ yarn create @vite-pwa/pwa
bash
$ npm create @vite-pwa/pwa@latest
bash
$ bun create @vite-pwa/pwa

Then follow the prompts!

You can also directly specify the project name and the template you want to use via additional command line options. For example, to scaffold a Vite PWA + Vue project, run:

bash
$ pnpm create @vite-pwa/pwa my-vue-app --template vue
bash
$ yarn create @vite-pwa/pwa my-vue-app --template vue
bash
$ npm create @vite-pwa/pwa@latest my-vue-app -- --template vue
bash
$ bun create @vite-pwa/pwa my-vue-app --template vue

See create-pwa for more details on each supported template: vanilla, vanilla-ts, vue, vue-ts, react, react-ts, preact, preact-ts, lit, lit-ts, svelte, svelte-ts, solid, solid-ts (templates can be found inside the templates folder).

Installing @unplugin-pwa/vite ​

To install the @unplugin-pwa/vite plugin, just add it to your project as a dev dependency:

bash
pnpm add -D @unplugin-pwa/vite
bash
yarn add -D @unplugin-pwa/vite
bash
npm install -D @unplugin-pwa/vite

Configuring @unplugin-pwa/vite ​

Edit your vite.config.js / vite.config.ts file and add the vite-plugin-pwa:

ts
import { VitePWA } from '@unplugin-pwa/vite'

export default defineConfig({
  plugins: [
    VitePWA({ registerType: 'autoUpdate' })
  ]
})

With this minimal configuration of the @unplugin-pwa/vite plugin, your application is now able to generate the Web App Manifest and inject it at the entry point, generate the service worker and register it in the browser.

You can find the full list of the @unplugin-pwa/vite plugin configuration options in the following client.d.ts.

If you want to check it in dev, add the devOptions option to the plugin configuration (you will have the Web App Manifest and the generated service worker):

ts
import { VitePWA } from '@unplugin-pwa/vite'

export default defineConfig({
  plugins: [
    VitePWA({
      registerType: 'autoUpdate',
      devOptions: {
        enabled: true
      }
    })
  ]
})

If you build your application, the Web App Manifest will be generated and configured on the application entry point, the service worker will be also generated and the script/module to register it in the browser added.

INFO

@unplugin-pwa/vite plugin uses @vite-pwa/workbox-build node package to build the service worker, you can find more information in the Service Worker Strategies And Behaviors and VITE PWA Workbox sections.

Released under the MIT License.