pwa 0.1.5

  • Installing
  • Versions
  • 42

Progressive Web App (PWA) for Dart #

Progressive web apps (PWA) are a hybrid of regular web pages (or websites) and a mobile application. This new application model attempts to combine features offered by most modern browsers with the benefits of mobile experience.

Warning: the API is experimental, and subject to change.

Background #

PWA is using ServiceWorkers:

Learn more about PWAs:

Tutorial and Examples #

Getting started

  • Getting started: pwa_defaults

    • Shows you how to use the pwa package and what it does.
    • Enables offline asset caching for you web app out-of-the-box.
  • Additional offline urls: additional_offline_urls

    • Show you how to create the entry point for customization.
    • Gives you the ability to add additional URLs for the offline cache.

Customize caching

  • Custom routes: custom_routes
    • Familiarize yourself with caching and routes.
    • Customize cache behavior for different parts of your app.

Push notification

  • Push notification: push_notification
    • Check and/or request Push permission.
    • Trigger and handle push event, show notification.

Planned features #

  • Typed Window <-> Worker communication, both Streams and request-reply patterns, something like:

    typedef Future<S> AsyncFunction<R, S>(R request);
    typedef S WireAdapter<R, S>(R input);
    abstract class MessageHub {
      AsyncFunction<R, S> getFunction<R, S>(String type,
          {WireAdapter<R, dynamic> encoder, WireAdapter<dynamic, S> decoder});
      void setHandler<R, S>(String type, AsyncFunction<R, S> handler,
          {WireAdapter<dynamic, R> decoder, WireAdapter<S, dynamic> encoder});
      Sink<T> getSink<T>(String type, {WireAdapter<T, dynamic> encoder});
      Stream<T> getStream<T>(String type, {WireAdapter<dynamic, T> decoder});
  • Push Notification

    • notification for the client app
    • one-method registration and/or status request

Changelog #

0.1.5 #

  • Console logging to uncover install/activation issues. That also causes a behavior change: errors during install won't interrupt the setup of the SW.
  • Updated code generator:
    • Breaking change: --lib-dir will refer to the lib directory of the project, while its previous purpose will be handled by --pwa-lib-dir. Most users won't be affected (when using the defaults).
    • Invoke pub build not only on empty build/ directory, but also when changes were detected.

0.1.4 #

  • Expose clientKeys in PushPermission.

0.1.3 #

  • Workaround for a bug in Chrome: ServiceWorkerContainer.ready may not complete in certain cases (for no apparent reason). Added a timeout of two seconds and return the registered SW instance.

  • Added higher-level API helpers for checking Push permission and handling push events.

0.1.2 #

  • Filter offline URLs:
    • dart2js debug outputs (
    • package:test and package:package_resolver assets

0.1.1 #

  • Generating lastModified timestamp (in String) for offline URLs.
  • Encouraging (but not yet enforcing) to use a version String in
  • The generated pwa.dart uses offline.lastModified as the version.

0.1.0 #

Breaking changes:

  • Remove deprecated methods and classes (see changes in version 0.0.5).

  • Changed the initialization of the Service Worker:

    • pwa.g.dart -> pwa.dart (source code generation is one-time only)
    • Client unregisters old version (ANY ServiceWorker ending with /pwa.g.dart.js)
  • Worker.onInstall and Worker.onActicate became fields (instead of being methods).

0.0.5 #

API refactoring:

  • Remove Pwa class name prefix (not immediately breaking, added deprecated notes)

    • PwaClient -> Client
    • PwaWorker -> Worker
    • PwaCacheMixin -> FetchStrategy
  • Renamed ambiguous items related to the Fetch API (not immediately breaking, added deprecated notes)

    • Handler -> RequestHandler
    • Matcher -> RequestMatcher
    • Router -> FetchRouter
    • defaultFetchHandler -> defaultRequestHandler
    • noCacheNetworkFetch -> noCacheNetworkRequestHandler
  • Renamed DynamicCache's noNetworkCaching -> skipDiskCache (not immediately breaking, added deprecated notes).

  • Updated methods in FetchRouter (not immediately breaking, added deprecated notes)

    • add -> registerMatcher
    • new method: registerUrl (will make urlPrefixMatcher internal)
    • get -> registerGetUrl
    • post -> registerPostUrl

0.0.4 #

  • Fix path separators on Windows.
  • Updated examples:
    • Added pwa_defaults.
    • Moved example into examples/custom_routes.
  • Execute pub build when the project has no build/web directory yet.

0.0.3 #

Breaking changes:

  • (API) BlockCache and DynamicCache don't expose their initialization parameters. This is a minor change, it is unlikely to affect anybody.

  • (behavior) BlockCache and DynamicCache use path-specific cache prefixes, in order to prevent collision between apps that are installed on the same domain.

    This fixes unintended cache collisions, but also breaks if you were building on sharing the caches between apps. In this case, use the new prefix optional argument when instantiating caches.

    If you have used only a single application in the root of the domain, you are not affected by this change.

0.0.2 #

  • Fix default codegen.
  • Call skipWaiting() by default (can be disabled through flag).
  • The generated offline URLs and the SW registration is changed to relative URLS, we can put the application in any directory.
  • DynamicCache evicts older entries first (previously it was random).
  • DynamicCache doesn't evicts old entries on initialization, which enables offline-aware caches to outlive the set expiration until the next successful network event.
  • Support for caching common web fonts.

0.0.1 #

Experimental release, looking for feedback.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  pwa: ^0.1.5

2. Install it

You can install packages from the command line:

with pub:

$ pub get

Alternatively, your editor might support pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:pwa/client.dart';
import 'package:pwa/worker.dart';
Version Uploaded Documentation Archive
0.1.12 Oct 23, 2018 Go to the documentation of pwa 0.1.12 Download pwa 0.1.12 archive
0.1.11 Aug 6, 2018 Go to the documentation of pwa 0.1.11 Download pwa 0.1.11 archive
0.1.10 Mar 21, 2018 Go to the documentation of pwa 0.1.10 Download pwa 0.1.10 archive
0.1.9+1 Feb 15, 2018 Go to the documentation of pwa 0.1.9+1 Download pwa 0.1.9+1 archive
0.1.9 Jan 10, 2018 Go to the documentation of pwa 0.1.9 Download pwa 0.1.9 archive
0.1.8 Nov 24, 2017 Go to the documentation of pwa 0.1.8 Download pwa 0.1.8 archive
0.1.7 May 15, 2017 Go to the documentation of pwa 0.1.7 Download pwa 0.1.7 archive
0.1.6 May 12, 2017 Go to the documentation of pwa 0.1.6 Download pwa 0.1.6 archive
0.1.5 May 11, 2017 Go to the documentation of pwa 0.1.5 Download pwa 0.1.5 archive
0.1.4 Apr 26, 2017 Go to the documentation of pwa 0.1.4 Download pwa 0.1.4 archive

All 19 versions...

Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

This package version is not analyzed, because it is more than two years old. Check the latest stable version for its analysis.

The package version is not analyzed, because it does not support Dart 2. Until this is resolved, the package will receive a health and maintenance score of 0.

Analysis issues and suggestions

Support Dart 2 in pubspec.yaml.

The SDK constraint in pubspec.yaml doesn't allow the Dart 2.0.0 release. For information about upgrading it to be Dart 2 compatible, please see

Maintenance issues and suggestions

Make sure dartdoc successfully runs on your package's source files. (-10 points)

Dependencies were not resolved.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=1.19.0 <2.0.0