nowo-tech / pwa-bundle
Symfony bundle to turn any application into a fully configurable Progressive Web App (manifest, service worker, offline, install prompt)
Fund package maintenance!
v1.1.0
2026-07-05 15:02 UTC
Requires
- php: >=8.2 <8.6
- symfony/config: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/twig-bundle: ^7.4 || ^8.0
- symfony/yaml: ^7.4 || ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.0
- rector/rector: ^2.0
- symfony/browser-kit: ^7.4 || ^8.0
- symfony/dom-crawler: ^7.4 || ^8.0
- symfony/translation: ^7.4 || ^8.0
This package is auto-updated.
Last update: 2026-07-05 17:23:29 UTC
README
⭐ Found this useful? Give it a star on GitHub so more developers can find it.
Turn any Symfony application into a Progressive Web App with a fully configurable manifest, service worker, offline page, and install prompt — no vendor lock-in, no hardcoded assets.
Features
- Web App Manifest generated from
nowo_pwa.yaml(name, icons, shortcuts, theme, display mode, scope, start URL) - Service worker with configurable cache strategy (
network-first,cache-first,stale-while-revalidate), precache URLs, and offline fallback - Twig helpers
nowo_pwa_head(),nowo_pwa_install_prompt(), andnowo_pwa_install_links()with route targeting (all/only/except) - Override-friendly Twig templates and translations (en, es, fr, it, pt, de, nl; REQ-TWIG-001 / REQ-I18N-001)
- TypeScript client for SW registration and install banner (Vite build →
pwa.js) - Works with Symfony 7.4+ and 8.x; no database required
Installation
composer require nowo-tech/pwa-bundle
# config/packages/nowo_pwa.yaml nowo_pwa: manifest: name: 'My Application' short_name: MyApp theme_color: '#0f172a' icons: - { src: '/icons/icon-192.png', sizes: '192x192', type: image/png } - { src: '/icons/icon-512.png', sizes: '512x512', type: image/png } service_worker: precache_urls: ['/', '/offline'] offline_url: '/offline'
In your base layout:
<head> {{ nowo_pwa_head() }} </head> <body> {% block body %}{% endblock %} {{ nowo_pwa_install_prompt() }} {{ nowo_pwa_install_links() }} </body>
See Installation and Configuration.
Documentation
- Installation
- Configuration
- Usage
- Contributing
- Changelog
- Upgrading
- Release process
- Security
- Engram
- Spec-driven development
Additional documentation
Tests and coverage
make test make test-ts make test-coverage make release-check # includes demo healthcheck on port 8025
License
MIT — see LICENSE.