Building Progressive Web Apps (PWAs) with JavaScript

Guidelines for developing PWAs that offer native app-like experiences, including offline capabilities and push notifications, using JavaScript.

0 likes
7 views

Rule Content

---
description: Enforce best practices for developing Progressive Web Apps (PWAs) using JavaScript to ensure native app-like experiences, including offline capabilities and push notifications.
globs: ["**/*.js"]
tags: [pwa, javascript, best-practices]
priority: 1
version: 1.0.0
---

# Building Progressive Web Apps (PWAs) with JavaScript

## Context
- Applicable to all JavaScript files in projects aiming to develop Progressive Web Apps (PWAs).
- Ensures adherence to PWA standards for offline functionality, performance, and user engagement.

## Requirements

- **Service Worker Implementation**: Register a service worker to manage caching and enable offline functionality.
  - Ensure the service worker caches essential assets and handles fetch events appropriately.
  - Update the service worker to manage cache versions and delete outdated caches.

- **Web App Manifest**: Include a `manifest.json` file with the following properties:
  - `name` or `short_name`
  - `start_url`
  - `display` (set to `standalone`, `fullscreen`, or `minimal-ui`)
  - `icons` (provide at least 192px and 512px versions)

- **HTTPS Requirement**: Serve the PWA over HTTPS to ensure secure communication.

- **Responsive Design**: Implement responsive design principles to ensure the PWA adapts to various screen sizes and orientations.

- **Performance Optimization**: Optimize performance by:
  - Minifying and compressing JavaScript and CSS files.
  - Implementing code splitting to load only necessary code for specific pages or features.
  - Utilizing lazy loading for non-critical resources.

- **Push Notifications**: Implement push notifications using the Push API to enhance user engagement.

- **Accessibility**: Ensure the PWA is accessible by:
  - Using semantic HTML elements.
  - Providing alternative text for images.
  - Ensuring keyboard navigability.

- **Testing**: Conduct thorough testing, including:
  - Unit tests for JavaScript functions.
  - Integration tests for service worker functionality.
  - End-to-end tests to simulate user interactions.

## Examples

<example>
// Registering a service worker
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(registration => {
      console.log('Service Worker registered with scope:', registration.scope);
    })
    .catch(error => {
      console.error('Service Worker registration failed:', error);
    });
}
</example>

<example type="invalid">
// Registering a service worker without error handling
navigator.serviceWorker.register('/service-worker.js');
*Missing error handling for service worker registration.*
</example>