mcpField
A
angular-pwa

angular-pwa

github.com/oguzhan18Development7189 installsUpdated 31w ago
Repository

About angular-pwa

A guidance skill for adding Progressive Web App capabilities to Angular projects. It covers service-worker caching, offline handling, push subscriptions, updates, and manifest configuration.

Key features

  1. 01Add PWA support with ng add @angular/pwa
  2. 02Configure service-worker caching
  3. 03Handle offline state and push subscriptions
  4. 04Check service-worker version updates
  5. 05Customize the web app manifest

Use cases

  1. 01Add offline support to an Angular app
  2. 02Set caching policies for APIs and static files
  3. 03Prompt users to subscribe to notifications
  4. 04Reload an app when a new version is ready

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-pwa

After installing, type/angular-pwain Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/discussions/
_INDEX.md
references/docs/
_INDEX.md
references/issues/
_INDEX.md
references/releases/
_INDEX.md

Details

From the project README

@angular/pwa

Version: Angular 21 (2025) Tags: PWA, Service Worker, Offline, Web App Manifest

References: PWA Guide • ngsw-config

API Changes

This section documents recent version-specific API changes.

  • NEW: Angular Service Worker v2 — Improved caching strategies

  • NEW: esbuild PWA support — Faster builds

  • NEW: @angular/build:application — Modern PWA building

Best Practices

  • Add PWA to project
ng add @angular/pwa
  • Configure ngsw-config.json
{
  "$schema": "./node_modules/@angular/service-worker/config/schema.json",
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "resources": {
        "files": [
          "/favicon.ico",
          "/index.html",
          "/*.css",
          "/*.js"
        ]
      }
    },
    {
      "name": "assets",
      "installMode": "lazy",
      "updateMode": "prefetch",
      "resources": {
        "files": [
          "/assets/**",
          "/*.(svg|cur|jpg|jpeg|png)"
        ]
      }
    }
  ],
  "dataGroups": [
    {
      "name": "api-freshness",
      "urls": ["/api/**"],
      "cacheConfig": {
        "strategy": "freshness",
        "maxSize": 100,
        "maxAge": "1h",
        "timeout": "10s"
      }
    }
  ]
}
  • Use network-first for API calls
{
  "dataGroups": [
    {
      "name": "api",
      "urls": ["/api/**"],
      "cacheConfig": {
        "strategy": "freshness",
        "maxSize": 50,
        "maxAge": "1h"
      }
    }
  ]
}
  • Use cache-first for static assets
{
  "assetGroups": [
    {
      "name": "static",
      "installMode": "prefetch",
      "updateMode": "prefetch",
      "resources": {
        "files": ["/*.js", "/*.css"]
      }
    }
  ]
}
  • Handle offline state
import { SwPush } from '@angular/service-worker';

constructor(private swPush: SwPush) {}

subscribeToNotifications() {
  if (this.swPush.isEnabled) {
    this.swPush.requestSubscription({
      serverPublicKey: 'VAPID_PUBLIC_KEY'
    });
  }
}
  • Check service worker updates
import { SwUpdate } from '@angular/service-worker';

constructor(private updates: SwUpdate) {
  this.updates.versionUpdates.subscribe(event => {
    if (event.type === 'VERSION_READY') {
      // Reload to get new version
      window.location.reload();
    }
  });
}
  • Customize manifest
{
  "name": "My PWA",
  "short_name": "MyPWA",
  "theme_color": "#1976d2",
  "background_color": "#ffffff",
  "display": "standalone",
  "scope": "/",
  "start_url": "/",
  "icons": [
    {
      "src": "assets/icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    }
  ]
}

Comments

Markdown supported