@onderwijsin/nuxt-webmanifest

Nuxt module that generates a rich web app manifest with zero configuration.
1,592
Install
npm install @onderwijsin/nuxt-webmanifest
Latest Version:0.2.9
Vue:3
License:MIT
Last Updated:Oct 25, 2026
Links: GitHub  ·  npm
Maintainer: remihuigen

@onderwijsin/nuxt-webmanifest

Generate a rich app.webmanifest with zero configuration for Nuxt 4 applications.

Purpose

  • Provide a stable web manifest output for production deployments.
  • Build manifest values from Site Config and Schema.org identity metadata.
  • Generate icons through Cloudinary or Nuxt Image's IPX provider.

Behavior

  • Generates in development and production so the manifest link is available while developing.
  • Generates the manifest into build templates and exposes it as a public asset.
  • Adds <link rel="manifest"> at Nuxt's configured app.baseURL (for example, /portal/app.webmanifest).
  • Explicit manifest.icons bypasses automatic icon generation.
  • Manifest metadata and collection entries are validated against the supported W3C shapes during setup.
  • Automatically registers @nuxt/image, nuxt-site-config, and nuxt-schema-org as module dependencies while enabled.

Configuration

Install and register the module:

pnpm add @onderwijsin/nuxt-webmanifest
export default defineNuxtConfig({
  modules: ["@onderwijsin/nuxt-webmanifest"]
});

The module uses site.name, site.description, and schemaOrg.identity when available. Icon sources are module options, never environment variables. Set webmanifest.manifest fields and icon sources in nuxt.config.ts:

export default defineNuxtConfig({
  webmanifest: {
    icons: {
      favicon: "/icons/favicon",
      appIcon: "/icons/app",
      maskableAppIcon: "/icons/maskable"
    },
    manifest: {
      theme_color: "#0f766e",
      icons: [{ src: "/brand-icon.png", sizes: "512x512", type: "image/png" }]
    }
  }
});

When image.provider is "ipx", the module generates /_ipx-style manifest URLs. For cloudinary, it uses Nuxt Image's image.cloudinary.baseURL.

If favicon or appIcon is missing, the other is used as a fallback. If both are missing, maskableAppIcon is used for both. A missing maskable icon only omits maskable entries. Unsupported providers or missing icon sources produce a warning and skip automatic icon generation.

When manifest scope and start_url are not configured explicitly, they are derived from the application's app.baseURL, so subpath deployments remain inside the application mount point.

Notes

  • The module does not support multi-tenant Site Config values; it uses the global site config.

Compatibility

Developed and tested against Node.js 24 and Nuxt 4.5.x. The package declares Node.js >=24 and may work with other Nuxt versions permitted by its package metadata, but versions outside the current CI matrix are not continuously tested. Nuxt 3 is not guaranteed.

Related Packages

@onderwijsin/nuxt-directus-client

Server-safe Directus REST integration for Nuxt applications.

3,264 0
@onderwijsin/nuxt-turnstile

Nuxt Turnstile integration with client helpers and server-side validation.

2,924 0
@onderwijsin/nuxt-theme-customizer

Nuxt module for runtime theme selection and custom color editing in Nuxt UI.

2,719 0
@onderwijsin/nuxt-module-utils

Shared runtime and Nuxt module utilities for Onderwijs in modules.

2,622 0
@onderwijsin/nuxt-newsletter-signup

Provider-independent newsletter signup endpoint for Nuxt.

2,353 0

Version History

Version Released Vue License
0.2.9 ^3.0 MIT
0.2.8 ^3.0 MIT
0.2.7 ^3.0 MIT
0.2.6 ^3.0 MIT
0.2.5 ^3.0 MIT