<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Justin Willis on Medium]]></title>
        <description><![CDATA[Stories by Justin Willis on Medium]]></description>
        <link>https://medium.com/@justinwillis?source=rss-9a76f55a98d7------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*lCltDqEWCW0d85Hh.jpg</url>
            <title>Stories by Justin Willis on Medium</title>
            <link>https://medium.com/@justinwillis?source=rss-9a76f55a98d7------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 01:56:05 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@justinwillis/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Building PWAs with Web Components!]]></title>
            <link>https://medium.com/pwabuilder/building-pwas-with-web-components-33f986bf8e4c?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/33f986bf8e4c</guid>
            <category><![CDATA[microsoft]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[web-app-development]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Mon, 11 Jan 2021 18:20:24 GMT</pubDate>
            <atom:updated>2021-01-11T18:41:18.614Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="An image of 3 people working together to build a Progressive Web App!" src="https://cdn-images-1.medium.com/max/1024/1*qtBDuHwNbYU5vGz-Z6dYHQ.png" /></figure><p>There are MANY ways to build great <a href="https://docs.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/">Progressive Web Apps</a>, but today I wanted to share an approach that we have been exploring, building <a href="https://docs.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/">PWAs</a> with <a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components">Web Components</a> based solutions! Specifically, we will be discussing the following technology stack:</p><ul><li><a href="https://lit-element.polymer-project.org/">lit-element</a>: Our framework. Lit-element gives us a way to write code that feels remarkably familiar to popular frameworks like React but that compiles down to browser native Web Components with a tiny runtime that provides things such as performant asynchronous rendering.</li><li>S<a href="https://lit-element.polymer-project.org/guide/styles#shadow-dom">hadow DOM, CSS Variables, Shadow Parts</a>: Modern CSS is incredibly powerful, especially when combining the Shadow DOM, CSS variables and the Shadow Parts APIs. We will discuss how this provides everything we normally were using a CSS pre-processor, but without the extra complication that a CSS pre-processor adds to your build steps!</li><li><a href="https://www.rollupjs.org/guide/en/">Rollup</a>: Rollup is a “bundler” or build tool that will make working with NPM modules easy while also helping ensure our code is ready for production. It allows us to do things such as minify our code, run Workbox (another tool I will introduce next) and other build steps.</li><li><a href="https://developers.google.com/web/tools/workbox/">Workbox</a>: Workbox is a tool that makes working with <a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">Service Workers</a> easy!</li><li><a href="https://www.typescriptlang.org/">TypeScript</a>: TypeScript gives us features such as auto complete in our editors that helps make the development process easier, along with being perfect for working in a team because you can provide types for your APIs, making your code almost self-documenting.</li><li><a href="https://web.dev/fugu-status/">Project Fugu</a>: Project Fugu is an initiative involving Microsoft, Google, Samsung and many others that aims to bring all the capabilities of native apps to the Web! The APIs that this project has already brought to browsers like Edge, such as the Wake Lock API, Web Bluetooth, the File System Access API and more act as our “native toolkit” in this tech stack. The cool thing though is that all of these APIs are built into the browser and work just like any other JavaScript API you may have used, such as the Geolocation API.</li><li><a href="https://www.pwabuilder.com/">PWABuilder</a>: PWABuilder is there to help you get your PWA store ready and then easily ship your PWA to those stores! We provide easy ways to evaluate the quality (performance, security, Web Manifest content etc) of your PWA, improve if necessary (such as <a href="https://medium.com/pwabuilder/making-screenshots-easy-on-pwabuilder-5cc25343cfa6?source=friends_link&amp;sk=b0a3411611466d9007617d7b9c625f73">adding screenshots</a> and other necessary content to your Web Manifest) and then easily package your PWA for app stores. For example, with just a few button clicks you can have a package that is ready to ship to both the <a href="https://medium.com/pwabuilder/microsoft-and-google-team-up-to-make-pwas-better-in-the-play-store-b59710e487?source=friends_link&amp;sk=a633482f2510eba814b1949219c74d6d">Google Play Store </a>and the <a href="https://medium.com/pwabuilder/bringing-chromium-edge-pwas-progressive-web-apps-to-the-microsoft-store-c0bd07914ed9?source=friends_link&amp;sk=04ca8b2ae2bd094b04ef6b53780b5698">Microsoft Store</a>!</li></ul><blockquote>A quick note before we dive into the content: Our goal with sharing this with the community is not to say this is the only way to build web apps, or that it is even the absolute best way to build web apps, instead we wanted to share what works well for us in the hopes that it can help drive your team’s decisions around what works well for you and your application.</blockquote><h3>Setting our Goals</h3><p>When you are going to build a new app (of any kind) there are a series of decisions that must be made up front. These decisions normally involve picking a technology stack based on some set of goals for the project. With PWAs this becomes even more important as there are many frameworks, libraries, build tools and more to choose from and these choices can have large impacts on your PWA as you develop it. For example, if loading performance is a key metric for your application then the framework that you choose to build the application in at the beginning can have a significant impact on loading performance farther down the road. For the PWABuilder team our key goals look something like the below:</p><ul><li>Performance: Our current tech stack and codebase produces large bundles which can take seconds to not only load over the network (before our service worker has cached anything) but also to be parsed by the browser, which must happen before code can start executing. This is not only not great for our users, but also is not a shining example of best practices on the web.</li><li>Maintainability: Our current build is made up of multiple tools, a large <a href="https://webpack.js.org/">WebPack</a> config with many plugins, a CSS pre-processor, multiple CSS libraries and utilities, Polyfills, Redux for state management etc. This not only is a large reason of why we have the bundle size issues discussed above but also has had a substantial impact on development speed for the front end as we end up debugging our tooling or codebase more than building the quality features we know developers want. As we have rebuilt our backend over the last year, along with other PWAs we have built outside of pwabuilder.com we have seen that simplicity is key to maintainability.</li><li>Quality: As with any software project, the harder the codebase is to work on, the buggier it tends to be. Because of the above two challenges, we have also had to deal with a fair bit of tech debt. We think with our new focus on simplicity we can move much faster while still maintaining a high level of quality.</li><li>Developer experience: Maintaining a familiar developer experience is also incredibly important to us as it allows both community members and new members on the PWABuilder team to easily jump into the project and understand what is going on.</li></ul><p>Based on the above we have found that browser native, Web Components based solutions combined with tooling that is focused on simplicity and sticking to web standards gives us the easiest path to meeting these goals. Let’s dive into the details of this approach!</p><h3>Web Components? lit-element?</h3><p><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components">Web Components</a>! How do I build a whole app with them? Don’t I need something like <a href="https://reactjs.org/">React</a> or <a href="https://angular.io/">Angular </a>to build the app? Let’s answer those questions and more!</p><h4>What are Web Components?</h4><p>First, let’s touch on what <a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components">Web Components</a> are. Web Components are a collection of Web APIs that allow you to build components. You can think of this as the same as components you build with something like React or Angular, but there are some key differences with Web Components. They are currently supported in all browsers besides Internet Explorer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OacB87rEsMNfIO213Evt3g.png" /></figure><h4>What is lit-element?</h4><p><a href="https://lit-element.polymer-project.org/">Lit-element</a> is a library / framework that makes it easy to build Web Components. Lit-element gives us a way to write code that feels very familiar to popular frameworks like React but with Web Components. It also includes a tiny runtime that provides things such as performant asynchronous rendering. Also, <a href="https://lit-element.polymer-project.org/">lit-element</a> is now only one of many Web Components based frameworks / libraries that are available. We also recommend checking out <a href="https://www.fast.design/docs/fast-element/getting-started/">fast-element</a> and <a href="https://stenciljs.com/">Stencil</a>!</p><h4>Why Web Components?</h4><h4>- Performance</h4><p>First, components built with either React or Angular are not native components understood by browsers. Because of this, you need to ship a large runtime (the core of both React and Angular) of some sort that can run these components in the browser. Note that this is a basic explanation of how these frameworks work, there are of course many details in the actual implementations, but these details are not truly relevant to our discussion today. This runtime cost is a huge part of the loading performance issues that apps built with these frameworks commonly have.</p><p>With Web Components based frameworks you avoid this large runtime cost as the browser natively understands Web Components, but without sacrificing developer experience. This enables frameworks to still ship features such as performant async rendering but without the code associated with just running the components. For example, let&#39;s use <a href="https://bundlephobia.com/">BundlePhobia ❘ cost of adding a npm package</a> to evaluate the cost of React, Angular and lit-element:</p><p><strong><em>React:</em></strong></p><ul><li>minified: 121.1 kB</li><li>minified + GZip: 39.4 kB</li><li>Load time on a 3G connection (one of the most common network connections): 0.79s</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*OL6sRwxqirZ38UaE8LWRWQ.png" /></figure><p><strong><em>Angular:</em></strong></p><ul><li>Minified: 289.9 kB</li><li>Minified + GZip: 88.7 kB</li><li>Load time on a 3G connection (one of the most common network connections): 1.77s</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*wq4qBl1RDOsYz8CAANqXjQ.png" /></figure><p>and then lit-element, a Web Components based solution:</p><ul><li>Minified: 23.2 kB</li><li>Minified + GZip: 7.4 kB</li><li>Load time on a 3G connection (one of the most common network connections): 148ms</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*KF4SeH5lcXPnZ77h6y_Ibw.png" /></figure><p>Lets now compare a Web Component built with lit-element to the same component built with React:</p><p><strong><em>Lit-element:</em></strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Fheadless-shape-k7k2e%3Fautoresize%3D1%26fontsize%3D14%26module%3D%252Fsrc%252Flit-element.js%26theme%3Dlight%26view%3Deditor&amp;display_name=CodeSandbox&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Fheadless-shape-k7k2e%3Fautoresize%3D1%26fontsize%3D14%26module%3D%252Fsrc%252Flit-element.js%26theme%3Dlight%26view%3Deditor&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Fk7k2e%2Fscreenshot.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/e2310afdb6186631552aab76dc2770c3/href">https://medium.com/media/e2310afdb6186631552aab76dc2770c3/href</a></iframe><p><strong><em>React:</em></strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Fheadless-shape-k7k2e%3Fautoresize%3D1%26fontsize%3D14%26module%3D%252Fsrc%252Freact-element.jsx%26theme%3Dlight%26view%3Deditor&amp;display_name=CodeSandbox&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Fheadless-shape-k7k2e%3Fautoresize%3D1%26fontsize%3D14%26module%3D%252Fsrc%252Freact-element.jsx%26theme%3Dlight%26view%3Deditor&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Fk7k2e%2Fscreenshot.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/4e9c4364921c9560da79cd418b85f027/href">https://medium.com/media/4e9c4364921c9560da79cd418b85f027/href</a></iframe><p>Based on this, you can see that the developer experience is extremely similar but with a much smaller bundle for the Web Component!</p><h4>- Maintainability / Stability</h4><p>Web Components, by their nature of being Web Standards, are inherently going to be more stable than any custom code. For example, the Geolocation API is a web standard and because of this, once it was implemented in a browser it has consistently worked since and we can count on it continuing to work far into the future because of the webs guarantee on not breaking existing websites. There are of course drawbacks with this approach, such as it taking longer for Web Standards to be implemented compared to the React team implementing a new feature in React. However, this is a tradeoff that we feel is fair in return for a good guarantee on long term stability.</p><h3>Styling with Web Components</h3><p>Continuing with our Web Standards first approach, modern CSS now has built in APIs / features in browsers that give us all the features we normally use a CSS pre-processor such as <a href="https://sass-lang.com/">SASS</a> for:</p><p>- <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties">Variables</a>: CSS now has CSS variables! CSS variables work great with Web Components and work extremely similar to variables in SASS.</p><p>- <a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM">Style Encapsulation</a>: Shadow DOM is part of the Web Components spec and helps fix the classic CSS cascade issue. Shadow DOM enables you to encapsulate your styles “inside” of your component, ensuring that CSS elsewhere in your app does not accidentally override CSS in your component. However, using both CSS Variables and the Shadow Parts API we can enable specific pieces of our components to be style-able from outside of the component. This is helpful when you want a component to have certain styles customizable but still have default styles too.</p><h3>Build Tools</h3><p>Luckily, by basing the rest of our tech stack on Web Standards it also makes setting up our build tools easy!</p><h4>Bundler</h4><p>For our bundling we use Rollup which is described on the <a href="https://www.rollupjs.org/">Rollup Website</a> as:</p><blockquote>Rollup is a module bundler for JavaScript which compiles small pieces of code into something larger and more complex, such as a library or application. It uses the new standardized format for code modules included in the ES6 revision of JavaScript, instead of previous idiosyncratic solutions such as CommonJS and AMD. ES modules let you freely and seamlessly combine the most useful individual functions from your favorite libraries.</blockquote><p>As you can guess, lit-element also uses standard built-in ES modules and because of this it works seamlessly with Rollup! Rollup also runs other tasks that are important for our builds:</p><ul><li><a href="https://www.npmjs.com/package/rollup-plugin-terser">Minification of our code</a></li><li><a href="https://github.com/rollup/plugins/tree/master/packages/strip">Removing console logs</a></li><li>We use the<a href="https://www.npmjs.com/package/@rollup/plugin-node-resolve"> node-resolve plugin</a> to ensure we can easily use modules from NPM that may not be distributed as an ES module.</li><li><a href="https://developers.google.com/web/tools/workbox/">Workbox</a> (covered below)</li></ul><h4>Workbox (Service Worker)</h4><p>We use <a href="https://developers.google.com/web/tools/workbox/">Workbox</a>, which is a tool that makes working with <a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">Service Workers </a>easy! Workbox enables you to build fully customized offline experiences for your app while also simplifying many of the complicated parts of Service Workers, such as pre-caching. We also use the Workbox Rollup plugin which makes it super easy to do pre-caching of our assets which not only is a huge part of the offline experience, but also ensures that our PWAs load even faster after the user has loaded the app at least once! Better performance AND an offline experience with only a few lines of code is always awesome!</p><h3>Project Fugu</h3><p>Native APIs! This is an area where PWAs (and Web Apps in general) have lacked in the past and because of this we saw the rise of awesome tools such as <a href="https://cordova.apache.org/">Cordova</a>, <a href="https://ionicframework.com/native">Ionic Native</a>, <a href="https://www.electronjs.org/">Electron</a> and more! However, with the rise of <a href="https://web.dev/fugu-status/">Project Fugu</a> web standard PWAs, with no native toolkit of any kind installed and using plain JavaScript APIs, can do almost all the same things a Native app can! For example, in the latest stable Edge and Chrome PWAs can:</p><ul><li><a href="https://web.dev/web-share/">Share and receiving shared content</a>: Using the Web Share API your PWA can tie into the native share UI of the users Operating System. Using the Share Target API your PWA can receive content shared from another app. For example, I can share an image straight from the native Photos app on Windows to a PWA.</li><li><a href="https://web.dev/file-system-access/">File System Access API</a>: If you have built a hybrid Web App you are familiar with how hard it is to integrate with the file system, but no more! The File System Access API gives you all the functionality native apps have! With a permission grant from the user, you can then read or save changes directly to files and folders on the user’s device!</li><li><a href="https://web.dev/periodic-background-sync/">Periodic Sync API</a>: This allows PWAs to sync data in the background, just like a native app. This ensures that your users always have the latest data on their device.</li></ul><p>And this is just a tiny bit of what&#39;s possible! For the full list check the Project Fugu status page! <a href="https://web.dev/fugu-status/">New capabilities status (web.dev)</a></p><h3>Get started building a PWA with this tech stack!</h3><p>If your goals are similar to ours and you want to give this tech stack a try you should check out the <a href="https://github.com/pwa-builder/pwa-starter">PWABuilder pwa-starter</a> . This starter includes everything we discussed above and has everything set to what we think are good defaults. Also, if you are looking for a tutorial feel free to check out <a href="https://youtu.be/QQtukwF6BOc">this video</a> for a walk through on using the starter.</p><p>Alright, that is how we are building PWAs fully with web components! Remember to check out the starter above if this tech stack interests you and please feel free to add any feedback as an issue on the repo. And, once your PWA is ready to go don’t forget to come back to <a href="https://www.pwabuilder.com/">PWABuilder</a> to get your PWA in the app stores! The <a href="https://www.pwabuilder.com/">PWABuilder</a> team is going to be rebuilding PWABuilder with this tech stack for 2021, and we are very excited to show you the results when we are done! The web and the amazing community around it have us excited to see where PWAs go this year!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=33f986bf8e4c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/building-pwas-with-web-components-33f986bf8e4c">Building PWAs with Web Components!</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Bringing Chromium Edge PWAs (Progressive Web Apps) to the Microsoft Store]]></title>
            <link>https://medium.com/pwabuilder/bringing-chromium-edge-pwas-progressive-web-apps-to-the-microsoft-store-c0bd07914ed9?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/c0bd07914ed9</guid>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[pwabuilder]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[microsoft]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Tue, 20 Oct 2020 17:55:35 GMT</pubDate>
            <atom:updated>2020-11-06T00:56:43.097Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fGQtWGOmFW4YieRwTrWMeQ.png" /></figure><p>The Microsoft Store was the <a href="https://blogs.windows.com/msedgedev/2018/02/06/welcoming-progressive-web-apps-edge-windows-10/#Vsxe9rFMkrMQbXiJ.97">first app store</a> to support Progressive Web Apps. PWAs have since become one of the leading ways to distribute apps to users on Windows. However, a lot has changed on the web platform since that original blog post, with modern technologies and APIs such as Web Assembly, Web Bluetooth, Web USB, Web Share, Web Shortcuts, and more enabling developers to ship increasingly advanced apps on the web. Also, Microsoft Edge itself has changed since that original blog post, including the announcement of the new Edge, <a href="https://blogs.windows.com/windowsexperience/2018/12/06/microsoft-edge-making-the-web-better-through-more-open-source-collaboration/">which uses the the open source Chromium engine</a>. We know that developers are excited to use the full power of the new Edge with their PWAs in the Microsoft Store and because of this, today we are extremely excited to announce the first Preview of the new <a href="https://pwabuilder.com/">PWABuilder </a>Windows platform! This significant update enables you to easily start packaging your Progressive Web Apps, using the new Chromium based Edge, for the Microsoft Store!</p><h3>The benefits of moving to the new Edge</h3><p>PWAs work great on Windows! As with EdgeHTML PWAs in the store, the new Chromium Edge based PWAs also feel completely native to Windows!</p><p>Chromium Edge PWAs run in a Windows of their own, just like any other application on Windows. They also show up in your Start menu (complete with Icons for expanded tiles), in your taskbar(where they are also pinnable just like any other app on Windows) in your Apps &amp; Features settings etc. The user can open your PWA without Edge having to be open and interact with it as they normally would with apps on Windows.</p><h4>Web Standard APIs</h4><p>Thanks to contributions from the Edge team and the broader Chromium community, PWAs on Windows can now utilize the latest Web APIs to enable a truly native feeling app. While we previously supported advanced functionality through the UWP APIs, we are now fully embracing Web Standards APIs and ensuring those APIs work great on Windows. Through initiatives such as <a href="https://web.dev/fugu-status/">Project Fugu</a>, we have been able to bring all the common functionality developers used UWP APIs for before to standard Web APIs:</p><p>· <a href="https://docs.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/webappmanifests#use-shortcuts-to-provide-quick-access-to-features">Shortcuts (previously called Jumplists)</a></p><p>· <a href="https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/URLProtocolHandler/explainer.md">Protocol handling</a></p><p>· <a href="https://github.com/WICG/pwa-url-handler/blob/master/explainer.md">URI handling</a></p><p>· <a href="https://github.com/WICG/file-handling/blob/master/explainer.md">File Type Associations</a></p><p>· <a href="https://docs.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/webappmanifests#identify-your-app-as-a-share-target">Share Target</a></p><p>· <a href="https://developers.google.com/web/updates/2015/07/interact-with-ble-devices-on-the-web">Web Bluetooth</a></p><p>· <a href="https://components.pwabuilder.com/demo/web_share">Web Share</a></p><p>· <a href="https://web.dev/file-system-access/">File System Access API</a></p><p>· <a href="https://web.dev/badging-api/">App Badging</a></p><p>· And many more!</p><p>The new Edge also has support for all your favorite web APIs such as Web Components, WebGL 2.0, the Clipboard API and more!</p><p>This is only a brief look at the capabilities available in the New Edge but as you can see, by just using standard web APIs your PWA is able to light up on Windows and provide the user with a familiar user experience.</p><h4>Compatibility</h4><p>No one likes writing code that is only supported on one browser or platform. Even worse, what if a browser does not support an API that is key to your app experience? While the UWP APIs we previously encouraged developers to use only worked on Windows, these new web standards-based APIs will also run great in the Edge browser, other Chromium based browsers, Android and even ChromeOS!</p><h4>Always up-to-date</h4><p>We also know that developers appreciate stable but fast update cycles, and we know that it is key for Edge to stay up to date so that you always have a secure and performant browser experience. Because PWAs in the Microsoft Store will now be using the new Edge, they will be updated with the Edge browser! This ensures that your PWA is always powered by an up-to-date version of Edge. We should also point out that this is a key advantage for PWAs over Electron or Webview based apps, as there is nothing the developer needs to do for their PWA to be running on a an up-to-date version of Edge.</p><p>This, along with the fact that your PWA in the store is also always up to date whenever you publish to the web, means that shipping an update to your app just means publishing an updated version to your web server as you would with any website! There is no change or update to the Microsoft Store package necessary, meaning users should always be on the latest version of your app.</p><h4>Shared State!</h4><p>Finally, state (such as Cookies, Local Storage, IndexedDB and more) are shared between the Edge browser on the user’s Windows device and your PWA from the Microsoft Store. So, if a user has already logged in to your PWA in your browser, that will extend to your PWA installed from the Microsoft Store.</p><h4>Devtools make building great PWAs easier!</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*r93qa3-U_mI6jQwyHcptXQ.png" /></figure><p>The PWABuilder team have always been big fans of the Chromium Devtools and we are extremely excited for you to be able to use the new Edge devtools to debug your Microsoft Store PWAs. You get the full Chromium Devtools, including its integrated PWA tooling!</p><p>Along with Devtools, we also wanted to give a shout out to edge://inspect! Edge://inspect enables you to easily test your PWA running in Edge on remote devices from your Windows 10 PC. For example, I can use edge://inspect to debug my PWA while it is running on my Surface Duo!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HODeli52Cmpj7Q0WvIXsXw.png" /></figure><h4>Key Differences from the EdgeHTML package</h4><p>With the move to this new package, there are some features that worked in the EdgeHTML package that this new Chromium Edge based package is currently missing. These features are:<br>• No support for Live Tiles<br>• No splash screen<br>• Missing Analytics in the Partner Center</p><p>This does not mean that these features may never come, or that these features will definitely come, just that they are missing during the preview. We will keep the community updated as we continute to iterate on the preview.</p><h4>Things to be aware of during the preview</h4><ul><li>If your PWA is already in the Microsoft Store using the EdgeHTML package and a user is logged in, the user will need to re-authenticate in the new Edge package.<br>• A user needs to have Microsoft Edge installed. If Microsoft Edge is not installed the user will be prompted to install Edge first before installing the app. As we continue our roll-out of Edge, we expect less and less users to hit this.</li></ul><p>Now let’s dive into how you can package your PWA with the Preview release of the new Edge package and PWABuilder!</p><h3>Package your PWA with the Preview release of the new Edge PWA platform!</h3><blockquote>Note: Prefer a video tutorial? <a href="https://www.youtube.com/watch?v=ig78lT6SlNI&amp;feature=youtu.be">https://www.youtube.com/watch?v=ig78lT6SlNI&amp;feature=youtu.be</a></blockquote><p>Alright, lets walk through how you can use <a href="https://pwabuilder.com/">PWABuilder</a> to try the Preview release of this new Edge PWA package for the Microsoft Store! As always, our goal with PWABuilder is to make things as easy as possible, and with enormous amounts of help from the Edge team, we have designed what we hope is straightforward way to package your PWA for the Microsoft Store (and other stores such as Google Play at the same time!).</p><p>First, go to <a href="https://pwabuilder.com/">https://pwabuilder.com</a> and put in the URL to your PWA. We are going to use <a href="https://webboard.app/">https://webboard.app</a>, a PWA I have built, as an example.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6xRpb2AlWUUor0GdvIowbQ.png" /></figure><p>Hit start when you are ready and PWABuilder will start analyzing your PWA to make sure it is store ready!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xFWdxjCM1RFi0ZxsinZFUg.png" /></figure><p>If your PWA is ready you should see the Build My PWA button. Let’s click on that to see our packaging options!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C0mQl1Qfn7nMgUxN1katNQ.png" /></figure><p>Now that we are here, lets click the download button on the Windows card and we should get the Windows packaging modal.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*YSDaS8StWlUuQnWJQHKjYw.png" /></figure><p>At this point, you can tap the “Download Test Package” button to quickly test your PWA on your own Windows machine, or tap the “Open Store Options” button to make sure your package is ready to submit to the Microsoft Store.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L6ME4iMh5qAoweBYmZxZ1A.png" /></figure><p>You are now very close to being ready to submit to the Microsoft Store! All you need to do is <a href="https://github.com/pwa-builder/pwabuilder-windows-chromium-docs/blob/master/find-publisher.md">fill out the info</a> in the modal shown above, tap Done and finally tap the “Download Store Ready package” button. You now have your PWA packaged for submission to the Microsoft Store! If you need help submitting this package to the Microsoft Store, we have documentation <a href="https://github.com/pwa-builder/pwabuilder-windows-chromium-docs/blob/master/next-steps.md#2-submit-your-app-packages-to-the-microsoft-store">here</a> to walk you through the process.</p><blockquote>BONUS: Want to ship your PWA to the Surface Duo too? You can use the Android Platform shown above to package your PWA for the Google Play store, enabling users to install your PWA onto their Surface Duo! This also includes full support for the <a href="https://blogs.windows.com/msedgedev/2020/09/14/introducing-dual-screen-foldable-web-apis/">Dual Screen APIs</a>, enabling your PWA to leverage the full capability of both screens on the Duo!</blockquote><p>To test this new package, the PWABuilder team has also published 3 of our own PWAs to the Microsoft Store (and the Google Play Store!) that you can try on your own device!</p><p>· <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fp%2Fchavah%2F9nhkjb6lpptv%3Factivetab%3Dpivot%3Aoverviewtab&amp;data=04%7C01%7CJustin.Willis%40microsoft.com%7C557bd174e7384d71832b08d87063cabf%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637382921328661114%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=%2BOI2Ahck9HLrAJ%2FcoavlDtdF0OsKXohWGe4PYySVJ90%3D&amp;reserved=0">Chavah Messianic Radio</a> made by <a href="https://twitter.com/JudahGabriel?s=20">Judah Gabriel</a> also available in the <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.messianicradio%26hl%3Den%26gl%3DUS&amp;data=04%7C01%7CJustin.Willis%40microsoft.com%7C557bd174e7384d71832b08d87063cabf%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637382921328671113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=KclpJTfsMP1iIRtryH18RAquc%2F995Kv67aHAIoj4p6E%3D&amp;reserved=0">Play Store</a></p><p>· <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fp%2Fapples-crusher%2F9pl4cf3hx9dg%3Factivetab%3Dpivot%3Aoverviewtab&amp;data=04%7C01%7CJustin.Willis%40microsoft.com%7C557bd174e7384d71832b08d87063cabf%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637382921328691096%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=MoUtZZt3KkBprsHFkFj1Rla9gQxa9eJmLuCzP5z5vI8%3D&amp;reserved=0">Apple Crusher</a> made by <a href="https://twitter.com/davrous?s=20">David Rousset</a> also available in the <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.myapp.Apples_Crusher%26hl%3Den%26gl%3DUS&amp;data=04%7C01%7CJustin.Willis%40microsoft.com%7C557bd174e7384d71832b08d87063cabf%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637382921328691096%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=clCM%2FnVG5QhnQqNDMVBW9rNSQL7lKvWEPhk9KrfuIAQ%3D&amp;reserved=0">Play Store</a></p><p>· <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fp%2Fsimpleedit%2F9nqw566n4866%3Factivetab%3Dpivot%3Aoverviewtab&amp;data=04%7C01%7CJustin.Willis%40microsoft.com%7C557bd174e7384d71832b08d87063cabf%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637382921328671113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=6gah%2BxWw1dAy%2BtZMBedJ%2BIYzZbcXFooCgAnAG0p%2Bcco%3D&amp;reserved=0">SimpleEdit</a> made by<a href="https://twitter.com/Justinwillis96"> Justin Willis</a> also available in the <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dnet.azurestaticapps.thankful_tree_07da4921e.twa%26hl%3Den%26gl%3DUS&amp;data=04%7C01%7CJustin.Willis%40microsoft.com%7C557bd174e7384d71832b08d87063cabf%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637382921328681107%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=OjEUm3IDEQP%2B8ANJQ0OZaVt%2BsHKLm9GfPKYXqOpbNtQ%3D&amp;reserved=0">Play Store</a></p><p>These apps all run on both Windows and Android with the same codebase between the Windows and Android versions, and SimpleEdit also has special support the Surface Duo! With this, PWAs now enable you to ship one app, from one codebase, that runs on both Windows and Android including Surface Duo!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RT3VtjNmeZIjMBcSL2KlGQ.png" /><figcaption>SimpleEdit running on Windows</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eZU4Lv6k2TLd3Y6EqVyk9Q.png" /><figcaption>SimpleEdit running on the Surface Duo</figcaption></figure><p>Both the Microsoft Edge and PWABuilder teams are extremely excited to share this Preview of new Edge PWAs in the Microsoft Store with developers today. We are eager to see developers leverage the full capabilities of the new Edge in their PWAs and ship awesome experiences to the Microsoft Store! As you try the preview, please feel free to let us know <a href="https://github.com/pwa-builder/PWABuilder">here</a> if you run into any issues or have any questions. Thanks again!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c0bd07914ed9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/bringing-chromium-edge-pwas-progressive-web-apps-to-the-microsoft-store-c0bd07914ed9">Bringing Chromium Edge PWAs (Progressive Web Apps) to the Microsoft Store</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a drawing PWA with PWABuilder!]]></title>
            <link>https://medium.com/pwabuilder/building-a-drawing-pwa-with-pwabuilder-3f4cccdfee9e?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/3f4cccdfee9e</guid>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[pwabuilder]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Thu, 30 Jul 2020 19:15:10 GMT</pubDate>
            <atom:updated>2020-07-30T19:15:10.909Z</atom:updated>
            <content:encoded><![CDATA[<p>Looking to build a Progressive Web App but not sure where to start? Or maybe you have already started on your PWA but your users have told you it still “feels like a website”. These are two common scenarios that developers commonly find themselves in, but where do you go from there? <a href="https://twitter.com/pwabuilder?s=20">PWABuilder</a> of course! In today’s post I wanted to walk you through building a PWA from scratch with PWABuilder and talk about how PWABuilder can help you improve the app-like experience of your PWA. Let’s jump in!</p><h3>What are we going to build?</h3><p>Today we are going to build a drawing app! This PWA will feature low latency drawing, work completely offline, have a great Install from the browser experience, and be available both in the browser and the Google Play Store! We will also be using some modern web APIs from <a href="https://docs.google.com/spreadsheets/d/1de0ZYDOcafNXXwMcg4EZhT0346QM-QFvZfoD8ZffHeA/edit#gid=557099940">Project Fugu</a> where it makes sense to ensure that our PWA feels native to the user.</p><h3>The PWABuilder pwa-starter</h3><p>One of the biggest challenges when getting started building anything on the web is choosing your “tech stack”, or what technologies you are going to use to build your app. In the web development world we have a wide range of choices when deciding how to build your PWA, which is great, but can also make it very hard to ensure that you are getting started with the best possible base to build off of. To make this choice easier, <a href="https://pwabuilder.com/">https://pwabuilder.com</a> gives you a starter that gives you the tech stack that the PWABuilder team recommends for building great PWAs. That tech stack includes the following:</p><ul><li><a href="https://github.com/Polymer/lit-element">lit-element</a>: We chose lit-element as the web framework of choice for this starter as it meets our goals of simplicity and a great developer experience while also exceeding our goals for performance. The developer experience is remarkably like React but also brings all the benefits of using web components, including incredibly small bundle size and fast rendering. PWAs built with lit-element tend to also provide a fast, smooth experience for your users that is easy on memory usage and battery life.</li><li><a href="https://rollupjs.org/">rollup.js</a>: We chose rollup as the bundler for this starter. We are big fans of rollup because of their focus on making it easy to work with standard es-modules and web standards in general. For example, to lazy load some code with rollup you just use await import(‘my-module’) ,which is web standard syntax for <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Dynamic_Imports">dynamic imports</a> and rollup automatically knows how to bundle this correctly!</li><li><a href="https://www.typescriptlang.org/index.html">TypeScript</a>: To help make sure that your PWA is easy to maintain over time we chose to use TypeScript as the default. TypeScript also improves the developer experience of lit-element even further by enabling<a href="https://github.com/Polymer/lit-element#overview"> decorators</a>!</li><li><a href="https://developers.google.com/web/tools/workbox/">Workbox</a>: We make heavy use of Workbox for our available service workers on <a href="https://medium.com/pwabuilder/making-service-workers-easy-13516ae21123">PWABuilder</a> and that extends to this starter! The starter comes set up out of the box to use Workbox’s pre-caching service worker. This enables your PWA to work offline, load much faster and requires no extra effort from the developer.</li></ul><p>To get a copy of the starter, you can go to <a href="https://pwabuilder.com/">https://pwabuilder.com</a> and hit the Get Started button as shown below.</p><figure><img alt="A screenshot of the PWABuilder home page that shows where the button to get a copy of the starter is." src="https://cdn-images-1.medium.com/max/940/1*4GyVnx7rmib46OuOCXz3aw.png" /></figure><p>This will give you the option to either grab the starter from Github or download a zipped copy. Once you have the starter, make sure you have <a href="https://github.com/pwa-builder/pwa-starter#prequisites">Node and npm installed</a> and then just run `npm install` and `npm run dev` to get started developing! This will start up TypeScript and a live-reload enabled dev server so that your changes automatically show up in the browser, ensuring a quick developer experience.</p><h3>Building the App</h3><h4>Getting Started</h4><p>Now that we have our dev environment set up, we can start building the app! First, lets get a little more familiar with the codebase. If you look in <a href="https://github.com/pwa-builder/pwa-starter/tree/master/src/script">src/script</a> you will see a `pages` and a `components` folder. The pages folder holds each page in our app and our components folder holds components that we are using across multiple places in the app. Our “root page” in this case is the <a href="https://github.com/pwa-builder/pwa-starter/blob/master/src/script/pages/app-index.ts">app-index.ts file</a>. This page acts as the entry point for the app and includes our <a href="https://vaadin.github.io/vaadin-router/vaadin-router/demo/#vaadin-router-getting-started-demos">router</a> configuration, which handles all the navigation in our app. For this app we will need just our home page, so we can leave the default router configuration. Before we leave this file I want to touch on the code-splitting that is built into the starter. In each route object you will see an action function. This action function uses dynamic imports, which are built into the browser, to only import the code for each page when that page is navigated too, ensuring that your app stays fast as it grows in size and complexity.</p><p>Before we move on to the next step, the pwa-starter actually already covers 2 of our requirements we set for this app: Working completely offline and having an app store like install experience. For the offline experience, the pwa-starter uses the <a href="https://gitlab.com/bennyp/rollup-plugin-workbox#README">Rollup Workbox plugin</a> and the <a href="https://github.com/pwa-builder/pwa-update#pwa-update">PWABuilder pwa-update component</a> which handles making sure your apps assets are cached correctly for offline usage of the app. For the app store like install experience from the browser the starter makes use of the <a href="https://components.pwabuilder.com/component/install_pwa">PWABuilder pwa-install component</a>.</p><figure><img alt="A screenshot of the pwa-install component" src="https://cdn-images-1.medium.com/max/629/1*j8WR8edEudyF-JJ4QBv2-Q.png" /></figure><h4>Fast, low-latency Inking</h4><p>With those two requirements out of the way, lets move on to the main functionality of our app; a low-latency, highly performant, full-featured drawing experience! Thanks to PWABuilder, we are going to achieve this with just a few lines of code. For this, lets go back to <a href="https://components.pwabuilder.com/">https://components.pwabuilder.com/</a> and grab the <a href="https://components.pwabuilder.com/component/inking">pwa-inking component</a>. If we tap the “Install Component” on this page and then tap the “with script tag” button in the dropdown the script tag to add this component to our app will be copied to our clipboard.</p><figure><img alt="A screenshot of the dropdown on the install component button for the inking component." src="https://cdn-images-1.medium.com/max/703/1*fHhm63SyILYTVjeO47q-LQ.png" /></figure><p>We can now paste that script tag into our <a href="https://github.com/pwa-builder/pwa-starter/blob/master/index.html">index.html file</a> . Once we have that script tag, we can now use the component.</p><p><em>Note: For more info on installing the pwa-inking component, </em><a href="https://github.com/pwa-builder/pwa-inking#install"><em>check this out</em></a><em>.</em></p><p>As the <a href="https://github.com/pwa-builder/pwa-inking#canvas-with-default-toolbar">docs</a> show, we now just need to add these three lines of code:</p><figure><img alt="Some HTML for the inking component" src="https://cdn-images-1.medium.com/max/958/1*qJ6pKIbNxNLuQM_gRYoBAA.png" /></figure><p>to our <a href="https://github.com/pwa-builder/pwa-starter/blob/master/src/script/pages/app-home.ts">home page</a> and boom, we now have highly performant drawing experience right in our app! With these couple of lines of code, we now have three of our five requirements for this app done!</p><h4>Project Fugu</h4><p>Lets now tackle our fourth requirement, making use of some of the APIs from <a href="https://docs.google.com/spreadsheets/d/1de0ZYDOcafNXXwMcg4EZhT0346QM-QFvZfoD8ZffHeA/edit#gid=557099940">Project Fugu</a> to enhance the user experience of our app. One API from Project Fugu that makes sense for this app is the <a href="https://components.pwabuilder.com/demo/wake_lock">Wake Lock API</a> . This API solves a common user experience issue with web apps such as ours, the fact that after some time the users device may go to sleep and shut off the screen, not exactly something we want for a drawing app like ours. Historically, a key user experience feature like this was not possible on the web, but with the awesome work going on in Project Fugu we can now achieve this functionality. Let’s add this method to our <a href="https://github.com/pwa-builder/pwa-starter/blob/master/src/script/pages/app-home.ts">home page</a>:</p><figure><img alt="Some JavaScript that requests a wake lock" src="https://cdn-images-1.medium.com/max/1024/1*2hBXPB5GRU3_af2x91OyLw.png" /></figure><p>We also need to add the following <a href="https://lit-element.polymer-project.org/guide/properties#declare-with-decorators">property</a>:</p><figure><img alt="Some JavaScript that sets a property for the wake lock controller" src="https://cdn-images-1.medium.com/max/700/1*xGruBOHgmUHTvlQj2Gn7lQ.png" /></figure><p>to our home page. You can read more about properties in lit-element <a href="https://lit-element.polymer-project.org/guide/properties#declare-with-decorators">here</a>. We now just need to call the `setupWakeLock` method in the <a href="https://lit-element.polymer-project.org/guide/lifecycle#firstupdated">firstUpdated lifecycle method</a> and we are good to go. The wake lock will be released by the browser when the user closes the app. And just like that, our fourth requirement for our app is done!</p><h3>Deploying your PWA and publishing to the App Stores!</h3><p>We are now at the point where we are ready to deploy our PWA! For the deployment, we will be making use of <a href="https://azure.microsoft.com/en-us/services/app-service/static/">Azure Static Web App hosting</a> to deploy our PWA. The PWABuilder pwa-starter includes everything you need out of the box to deploy, so all we need to do is make sure our PWA is in Github and then follow the instructions <a href="https://azure.microsoft.com/en-us/services/app-service/static/">here</a>. Because we are using Azure Static Web App hosting, this also sets us up to very easily use <a href="https://docs.microsoft.com/en-us/azure/static-web-apps/add-api">Azure Functions to build a backend API</a> for our app if we want in the future. At this point we should have our URL, which is all we need for the next step of packaging our app for the Google Play Store!</p><h4>Google Play Store</h4><p>Normally, this would be the hardest part of building a PWA. Historically, PWAs have not been able to publish to the Google Play Store and instead strictly relied on the browser for distribution. Recently this changed with the introduction of <a href="https://developers.google.com/web/android/trusted-web-activity">Trusted Web Activities</a> on Android. Trusted Web Activities give us the opportunity to publish our high quality PWA to the Google Play Store. Because we used the PWABuilder pwa-starter, our app already handles working offline, has a fully filled out Web Manifest and is ready to be published. To learn how to package your PWA with PWABuilder, check out <a href="https://medium.com/pwabuilder/microsoft-and-google-team-up-to-make-pwas-better-in-the-play-store-b59710e487?source=friends_link&amp;sk=a633482f2510eba814b1949219c74d6d">our latest post on this topic</a>, its just a few button clicks!</p><h4>Microsoft Store</h4><p>Currently you can also use PWABuilder to package your PWA for the Microsoft Store! All you need to do is choose the Windows platform Instead of the Android platform:</p><figure><img alt="A screenshot that shows where the Windows platform is" src="https://cdn-images-1.medium.com/max/1024/1*8J_dVkSyB8fZGmtjp0-z0Q.png" /></figure><p>One important thing to note here is that currently, your package for the Microsoft Store will be using Legacy Edge. We realize this is far from ideal and we want to ensure that PWAs in the Microsoft Store work just as well as they do directly in the new Chromium based Edge. Because of this, we are now hard at work on allowing Chromium based Edge PWAs in the Microsoft Store!</p><figure><img alt="A screenshot of the tweet for the work we are doing on Chromium Based Edge PWAs in the Microsoft Store" src="https://cdn-images-1.medium.com/max/1024/1*FDXqw35rGMEMgohH1nWitw.png" /><figcaption><a href="https://twitter.com/pwabuilder/status/1288543429350301699?s=20">https://twitter.com/pwabuilder/status/1288543429350301699?s=20</a></figcaption></figure><p>And just like that, we have now built a fast Progressive Web App that delivers a great user experience AND even shipped that PWA to the Google Play and Microsoft Store! For another idea to further enhance your PWA, check out our <a href="https://medium.com/pwabuilder/making-screenshots-easy-on-pwabuilder-5cc25343cfa6?source=friends_link&amp;sk=b0a3411611466d9007617d7b9c625f73">latest post</a> on using PWABuilder to add screenshots to your Web Manifest. Also, we recently released a <a href="https://medium.com/pwabuilder/pwa-inking-enable-2d-inking-for-the-web-1bd41916b4bc?source=friends_link&amp;sk=a17712de131403ab584f98dab016184e">post that deep dives into the inking experience</a> we used today</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3f4cccdfee9e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/building-a-drawing-pwa-with-pwabuilder-3f4cccdfee9e">Building a drawing PWA with PWABuilder!</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The PWABuilder components and demos showcase]]></title>
            <link>https://medium.com/pwabuilder/the-pwabuilder-components-and-demos-showcase-2fb48c122950?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/2fb48c122950</guid>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[pwabuilder]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Wed, 01 Jul 2020 19:00:38 GMT</pubDate>
            <atom:updated>2020-07-01T19:00:38.433Z</atom:updated>
            <content:encoded><![CDATA[<p>As you may have seen, we recently did a HUGE release for PWABuilder. One of the things we released this time is a brand-new Components and Demos showcase, let us dive into the details!</p><figure><img alt="A screenshot of the Components and Demos showcase" src="https://cdn-images-1.medium.com/max/1024/1*m4uy71oQi6oyasWJAkpmkw.png" /></figure><h3>Cool! What is it exactly?</h3><p>The Components and Demos showcase is a “one-stop shop” for all of the PWABuilder components you may want to add to your PWA, such as the <a href="https://components.pwabuilder.com/component/install_pwa">pwa-install component</a>, the <a href="https://components.pwabuilder.com/component/pwa_auth">pwa-auth component</a> and the <a href="https://components.pwabuilder.com/component/inking">pwa-inking component</a>! You can grab the CDN link or npm command to install the component right from the “Install Component” button on each components page, making it quite easy to add these components to your PWA. For example, want an app-store like install experience for your PWA straight from the browser? All you must do is go <a href="https://components.pwabuilder.com/component/install_pwa">here</a> and you can quickly grab the component.</p><figure><img alt="A screenshot of the Install Component button" src="https://cdn-images-1.medium.com/max/297/1*dIoV2KPVJVTXnppmOFKAcQ.png" /></figure><p>Also, we are huge fans of all the new and existing APIs on the web and we wanted a place to show demos using these new APIs, which is the new Demos section in the Showcase! The team and our friends over at <a href="https://twitter.com/kennethrohde?s=20">Intel</a> have added demos for APIs that the PWABuilder team finds cool and useful, such as the <a href="https://components.pwabuilder.com/demo/web_shortcuts">Web Shortcuts API</a>, <a href="https://components.pwabuilder.com/demo/pip">Picture-In-Picture API</a>, the <a href="https://components.pwabuilder.com/demo/background_fetch">Background Fetch API</a>, <a href="https://components.pwabuilder.com/demo/nfc">Web NFC</a> and more!</p><h3>Can I submit my own demo?</h3><p>Of course! The PWABuilder project is very community driven, so we would love to have your demos on our showcase, all we ask is that your demo shows something new or exciting on the web and is open source! If you would like to submit a demo all you will need is a Github Account and then you can follow the <a href="https://github.com/pwa-builder/pwa-features/wiki/Submitting-a-new-demo!">instructions here</a>. Feel free to look at our <a href="https://github.com/pwa-builder/pwa-features/blob/master/data/demos.json">current demos</a> to get an idea of the metadata you will need. We have tried to make the submission process as easy as possible, but if you run into any issues or have ideas on how it could be improved please feel free to open an issue with us on the <a href="https://github.com/pwa-builder/pwa-features">repo</a>.</p><h3>How was it built? Web Components?</h3><p>Now that we have looked at what the Components and Demos showcase is and talked about how you can submit your own demo, let’s talk a little about how we built the showcase.</p><p>As with most of our new stuff on the PWABuilder team, we built the showcase using the <a href="https://github.com/pwa-builder/pwa-starter">PWABuilder pwa-starter</a>. The pwa-starter uses TypeScript, lit-element, and Rollup to enable you to deliver a modern, lightweight PWAs that load instantly, no matter what kind of device or network connection the user has. Because of the combination of TypeScript with lit-element, the pwa-starter provides developers with a familiar development experience. The pwa-starter also includes the pwa-install and pwa-update components to make sure your PWA has that app-like feel right out of the box.</p><p>What kind of performance can you expect when building a PWA with the starter?</p><figure><img alt="A screenshot showing the performance of the starter. The score is a 99 on lighthouse." src="https://cdn-images-1.medium.com/max/926/1*yOQJVub_knWUtNuKdWtkYg.png" /></figure><p>If you would like to build your own PWA with the PWABuilder pwa-starter just go to <a href="https://pwabuilder.com/">PWABuilder</a> and tap the Get Started button!</p><figure><img alt="A screenshot of the experience for getting the pwa-starter" src="https://cdn-images-1.medium.com/max/553/1*kv1FRpnsA_vOv0LOUNMImQ.png" /></figure><p>Thanks for checking out the new Components and Demos showcase from the PWABuilder team! We can&#39;t wait to see your demos and we hope that our component help make your PWA even better. Finally, if you do not have a PWA yet make sure to visit <a href="https://www.pwabuilder.com/">PWABuilder</a> to get started on your journey!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2fb48c122950" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/the-pwabuilder-components-and-demos-showcase-2fb48c122950">The PWABuilder components and demos showcase</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Helping move the web forward, a huge update for PWABuilder!]]></title>
            <link>https://medium.com/pwabuilder/helping-move-the-web-forward-a-huge-update-for-pwabuilder-fa6f5789a08d?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/fa6f5789a08d</guid>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[microsoft-edge]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Thu, 25 Jun 2020 19:09:18 GMT</pubDate>
            <atom:updated>2020-06-26T02:08:30.983Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Hi there!" src="https://cdn-images-1.medium.com/max/1024/1*G01agdQfmv9-9XilUBWKDQ.png" /></figure><p>With initiatives like Project Fugu pushing the capabilities developers need to build full featured, native feeling apps to the web platform, and browsers being faster than ever, it is an amazing time to be building for the Web. Today we are excited to release a bunch of brand-new features and bug fixes for <a href="https://pwabuilder.com/">PWABuilder</a> so that developers can take their PWAs to the next level! Also, the PWABuilder team has recently expanded, so we will also introduce our new team members and talk a little about how the project has expanded! Finally, make sure you stick around to the end for a look at some BIG updates we have planned for July.</p><h3>Update on the team</h3><p>Over the last year we have seen tremendous growth in the use of PWABuilder and as the PWABuilder project grows we have, of course, expanded the team!</p><p>Let me introduce you to the whole team:<br>• <a href="https://twitter.com/davrous?s=20"><strong>David Rousset</strong></a>: Our team lead<br>• <strong>Killian McCoy</strong>: Core developer building web components<br>• <strong>Amrutha Srinivasan</strong>: Core developer building backend services and working on the main site<br>• <strong>Rumsha Siddiqui</strong>: Core developer working on our platforms<br>• <strong>Jaylyn Barbee</strong>: Intern working on a special PWA related project 😉<br>•<a href="https://twitter.com/JudahGabriel?s=20"> <strong>Judah Himango</strong></a>: Lead Developer<br>• <strong>Teshe Gebremariam</strong>: Core developer working on our backend services and the main site<br>• <strong>Leo Lee</strong>: Core developer working on our platforms<br>• <a href="https://twitter.com/Justinwillis96"><strong>Justin Willis</strong></a>: Core developer working on the main site and building web components</p><p>We are all excited to help developers build great Progressive Web Apps and have some great ideas coming up!</p><p>Also, we recently started a new <a href="https://www.youtube.com/channel/UC5zAIqDcnI3lbb5nScwvn8w/featured">YouTube Channel</a> where we plan to host a ton of content over the next few months. We already have a <a href="https://youtu.be/NdKjJwfdcUY">tutorial up on using the PWABuilder pwa-auth component</a> and a <a href="https://youtu.be/QQtukwF6BOc">tutorial on building a PWA using the PWABuilder pwa-starter</a> up on the channel, make sure you subscribe to get a “heads up” when our latest videos come out! Also, if you are on Twitter make sure you follow the <a href="https://twitter.com/pwabuilder?s=20">official PWABuilder account</a> for all the latest news in the PWABuilder world! Now, on to all the goodness the new update!</p><h3>The pwa-inking component</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*x0HR9f9YC6JOm0zd3VZeBg.gif" /></figure><p>We have heard from developers that creating a fast, low latency inking experience on the web can be a bit of a challenge, but with new web APIs in Edge (and other Chromium based browsers such as Chrome, Samsung Internet and more) such as the <a href="https://developers.google.com/web/updates/2019/05/desynchronized">low-latency canvas API</a> the web is now more than capable for providing a great inking experience. To make this easy for developers we are excited to release the 0.9 version of the <a href="https://github.com/pwa-builder/pwa-inking">PWABuilder pwa-inking</a> web component! The pwa-inking component, by taking advantage of innovative web APIs such as low latency API mentioned above and pointer events, provides a ready to go, performant inking experience with only a few lines of HTML. It fully supports all input types including Surface Pen’s and the Apple Pencil. Also, for the Surface Pen the component can detect when the user is using the eraser or the pen side and switches modes seamlessly, it&#39;s crazy what you can do on the web nowadays! Finally, the pwa-inking component also includes components that provide pre-built common inking tools such as emulating Pencil output, a manual eraser mode, the ability to copy canvas content to the clipboard and the ability to save the canvas as an image!</p><p><em>There is currently a known issue with the pwa-inking component, more info can be found here </em><a href="https://github.com/pwa-builder/pwa-inking/issues/31"><em>https://github.com/pwa-builder/pwa-inking/issues/31</em></a></p><h3>Web Shortcuts</h3><figure><img alt="Shortcuts working from the jumplist in Windows 10" src="https://cdn-images-1.medium.com/max/544/1*JwfI3l_xJsAypisIJAfLxg.png" /></figure><p>With<a href="https://docs.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/webappmanifests#use-shortcuts-to-provide-quick-access-to-features"> Shortcuts</a> support recently coming to Edge, Chrome and Chrome on Android, your users can now jump into actions in your PWA by right clicking on your PWAs icon in the taskbar on Windows or long pressing your icon on Android, just like native apps on those operating systems! To help you deliver this functionality to your users we updated our Android Trusted Web Activity platform to also support shortcuts along with updating PWABuilder’s manifest builder to support reading shortcuts. As with all our Android work, this support would not have been possible without <a href="https://github.com/GoogleChromeLabs/bubblewrap/">Bubblewrap</a>, the Google project we use to generate Android packages. For further reading, check out <a href="https://web.dev/app-shortcuts/#trusted-web-activity-support">Shortcuts: Trusted Web Activity (TWA) Support</a>. Finally, we have more updates coming here to help make this API even easier to use, so keep an eye out!</p><p><em>There are currently limitations with shortcuts on Android, read more here </em><a href="https://github.com/pwa-builder/CloudAPK/issues/25"><em>https://github.com/pwa-builder/CloudAPK/issues/25</em></a></p><h3>Screenshots</h3><figure><img alt="An image of the screenshot generator on PWABuilder" src="https://cdn-images-1.medium.com/max/1024/1*Y3ABGFk8CR1_hhFZyCz2PA.png" /></figure><p>While <a href="https://developer.mozilla.org/en-US/docs/Web/Manifest">the Web App Manifest</a> has supported screenshots for a while, we noticed many developers were not using this feature. This makes sense, as historically no browser or store has used this feature of the manifest, but because we can use this to enable features such as <a href="https://github.com/pwa-builder/pwa-install">an app store like install experience</a> for PWAs we wanted to start evangelizing this feature to our community. As we try to do with all things related to PWABuilder, we wanted to make it easy for developers to start using this feature, so we integrated a new screenshots generation service directly into our manifest builder on <a href="https://pwabuilder.com/">https://pwabuilder.com</a>. This service automatically generates both desktop and mobile screenshots of your PWA for you, all you need to do is pass any additional URLs to pages of your PWA you want screenshots of. It will then add them to your manifest and can be downloaded.</p><blockquote>Note that there are two known limitations with the screenshots service currently that you may run into <a href="https://github.com/pwa-builder/pwa-screenshots/issues/2">https://github.com/pwa-builder/pwa-screenshots/issues/2</a></blockquote><h3>Components and Demos showcase</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*m4uy71oQi6oyasWJAkpmkw.png" /></figure><p>We are working to make PWABuilder your “one-stop shop” for when you are building a PWA and to support this goal we are excited to release the new PWABuilder components and demos showcase! This PWA is THE place to try out and get all the web components the PWABuilder team maintains, including our <a href="https://components.pwabuilder.com/component/install_pwa">pwa-install component</a> and <a href="https://components.pwabuilder.com/component/pwa_auth">pwa-auth component</a>. You can also find and install awesome components from the <a href="https://docs.microsoft.com/en-us/graph/toolkit/overview">Microsoft Graph Toolkit</a> project, including the <a href="https://components.pwabuilder.com/component/graph_tasks">tasks component</a> which makes it super easy to pull and display all of a user&#39;s tasks from the Microsoft Graph.</p><figure><img alt="Screenshot of the detail page for the install component!" src="https://cdn-images-1.medium.com/max/1024/1*o2Khq70l1usTQEdNywgRcA.png" /></figure><p>Also, along with our web components the web platform itself is growing more every day. We are extremely excited about things like Project Fugu that are helping bring new APIs to the web platform that enable you to build even better PWAs. To showcase our favorite APIs from Project Fugu (and the web in general), we also have the <a href="https://components.pwabuilder.com/?cat=demos">demos section</a> of the showcase where we have a list of demos that we think show off the awesomeness of the web! We want this section to be an inspiration to web developers to make use of these APIs to build PWAs that are deeply integrated with the platform and provide common user experience patterns to your users that they expect traditionally only from native apps.</p><p>We also know that a lot of our community are excited about new and exciting APIs on the web and may have demos of your own. Because of that, we are also going to be accepting YOUR demos for inclusion in the showcase! Visit <a href="https://github.com/pwa-builder/pwa-features/wiki/Submitting-a-new-demo!">this page in our wiki</a> to learn how to submit your demo, we are excited to see!</p><h3>Updated pwa-starter</h3><p>In case you missed it, we recently released the <a href="https://medium.com/pwabuilder/building-a-progressive-web-app-with-pwabuilder-96bba63658b3?source=friends_link&amp;sk=49836e7d8f3e35ba84af237fe4454b9e">PWABuilder pwa-starter</a>, which helps you get started building a great, fast, PWA from scratch, and tries to make it easy of course! We recently updated the starter to simplify production builds (no more separate index files for dev and prod), simplify our build process (thanks to some awesome build plugins from the <a href="https://open-wc.org/">open-wc project!</a>), ensure your app loads even faster, which I wasn’t sure was even possible given how fast a PWA built with the starter already load, and ensure that it works seamlessly with the recently announced <a href="https://azure.microsoft.com/en-us/services/app-service/static/">Azure Static Web Apps hosting service</a> for the best hosting experience.</p><p>You’ve made it to the end! We have heard many times from the community, and we agree with you all, that our current Windows PWA platform is not adequate. Because of this, over the next few weeks we will be working with Edge to bring the ability to publish Chromium Edge based PWAs to the Microsoft Store! PWABuilder will be providing the built packages for you that you can then submit to the Microsoft Store. With this update your PWA on Windows will now be running in the new, Chromium based Microsoft Edge even when installed from the Microsoft Store!</p><p>Whew, that was a lot to go through, we are more excited than ever for the PWABuilder community to try our all our new features! The team has also put in a ton of bug fixes into this release to ensure that you have a quality experience. Thanks for all the bug reports, ideas etc on<a href="https://github.com/pwa-builder/PWABuilder"> our Github</a>. It’s a fantastic way for us to interact with the community, a fantastic way for you to interact with the team and an awesome way for you to help shape the future of PWABuilder! Without the community PWABuilder would not be at where it is today, let us know what you think of this release!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fa6f5789a08d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/helping-move-the-web-forward-a-huge-update-for-pwabuilder-fa6f5789a08d">Helping move the web forward, a huge update for PWABuilder!</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Progressive Web App with PWABuilder!]]></title>
            <link>https://medium.com/pwabuilder/building-a-progressive-web-app-with-pwabuilder-96bba63658b3?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/96bba63658b3</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[pwabuilder]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Tue, 21 Apr 2020 17:48:59 GMT</pubDate>
            <atom:updated>2020-04-21T17:48:59.593Z</atom:updated>
            <content:encoded><![CDATA[<p>One of the biggest challenges to building a great PWA is choosing a tech stack that allows you to hit all your goals for user experience while also maintaining a great developer experience. There are many web frameworks, build tools and more available today, and this massive amount of options sometimes makes it even harder to find that right tech stack. The catch here too is that if you don&#39;t make the right decision up front, it can lead to many a headache down the road; substandard performance, “spaghetti code”, overcomplexity and more. To help guide developers through this decision-making process we are excited to release the <a href="https://github.com/pwa-builder/pwa-starter">PWABuilder pwa-starter</a>! This starter includes everything you need to get started building a production ready PWA with an awesome user experience AND a simple / easy developer experience and is what the PWABuilder team recommends as the best way to get started building a PWA! Let&#39;s dive into the details, start a new PWA and, if you stick around to the end, we will package our PWA for the Microsoft and Google Play store!</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FQQtukwF6BOc%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DQQtukwF6BOc&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FQQtukwF6BOc%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/959b36b69341dbe7c165a371a8ac6818/href">https://medium.com/media/959b36b69341dbe7c165a371a8ac6818/href</a></iframe><blockquote>Sidenote: Check out the new PWABuilder YouTube account <a href="https://www.youtube.com/channel/UC5zAIqDcnI3lbb5nScwvn8w">here</a>, the above is our first video and we are excited to bring you much more content over the next few weeks!</blockquote><h3>What is it and what do I get?</h3><p>The PWABuilder pwa-starter is a git repo available through <a href="https://pwabuilder.com/">https://pwabuilder.com</a> and as a <a href="https://github.com/pwa-builder/pwa-starter">template repo</a> on Github. To meet our goals of simplicity, performance, developer experience and user experience we chose the following tools to put together in this starter:</p><ul><li><a href="https://github.com/Polymer/lit-element">lit-element</a>: We chose lit-element as the web framework of choice for this starter as it meets our goals of simplicity and a great developer experience while also exceeding our goals for performance. The developer experience is remarkably like React but also brings all the benefits of using web components, including incredibly small bundle size and fast rendering. PWAs built with lit-element tend to also provide a fast, smooth experience for your users that is easy on memory usage and battery life.</li><li><a href="https://rollupjs.org/">rollup.js</a>: We chose rollup as the bundler for this starter. We are big fans of rollup because of their focus on making it easy to work with standard es-modules and web standards in general. For example, to lazy load some code with rollup you just use await import(&#39;my-module&#39;) ,which is web standard syntax for <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Dynamic_Imports">dynamic imports</a> and rollup automatically knows how to bundle this correctly!</li><li><a href="https://www.typescriptlang.org/index.html">TypeScript</a>: To help make sure that your PWA is easy to maintain over time we chose to use TypeScript as the default. TypeScript also improves the developer experience of lit-element even further by enabling<a href="https://github.com/Polymer/lit-element#overview"> decorators</a>!</li><li><a href="https://developers.google.com/web/tools/workbox/">Workbox</a>: We make heavy use of Workbox for our available service workers on <a href="https://medium.com/pwabuilder/making-service-workers-easy-13516ae21123">PWABuilder</a> and that extends to this starter! The starter comes set up out of the box to use Workbox’s pre-caching service worker. This enables your PWA to work offline, load much faster and requires no extra effort from the developer.</li></ul><p>With these tools the starter also scores very well on <a href="https://developers.google.com/web/tools/lighthouse/">Lighthouse</a>, giving you an awesome base to build upon with plenty of headroom for performance and all the best practices included!</p><p><em>The below test is running Lighthouse on </em><a href="https://www.webpagetest.org/"><em>WebPageTest</em></a><em> on a Moto G4 with a slow 3G connection.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fIYIURkSFD3aGcGVK-xFBA.png" /><figcaption>Full Lighthouse score for the PWA starter</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zJrPuDW9cAL4ub0GHmWQlA.png" /><figcaption>Full performance score for the PWA starter from Lighthouse</figcaption></figure><p>Finally, the starter also comes with our latest PWABuilder web components, <a href="https://medium.com/pwabuilder/installing-progressive-web-apps-b7274ebffe80">pwa-install</a> and <a href="https://github.com/pwa-builder/pwa-update">pwa-update</a>! The pwa-install component, with two lines of code, brings an app store like install experience to your PWA!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*VICY4VURIgj5UCBx.gif" /><figcaption>GIF of the pwa-install experience!</figcaption></figure><p>The pwa-update component works with <a href="https://developers.google.com/web/tools/workbox/">Workbox</a> to provide an awesome update experience for your PWA</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/0*PIhbZgfdmtGYMfvd.png" /><figcaption>The pwa-update update toast 🍞</figcaption></figure><p>These components are included out of the box in the starter and take no extra developer effort.</p><p>Finally, if you are looking for an authentication solution, the <a href="https://medium.com/pwabuilder/pwa-auth-a-new-sign-in-component-for-the-modern-web-e8c0257273f0">pwa-auth</a> component from the PWABuilder team also works great in this starter.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/410/1*cuWoMMDBumKWfyxNhug-hw.png" /><figcaption>The pwa-auth component</figcaption></figure><h3>How do I get started?</h3><p>The PWABuilder pwa-starter can be acquired from <a href="https://pwabuilder.com/">https://pwabuilder.com</a> and is also available as a template repo on <a href="https://github.com/pwa-builder/pwa-starter">GitHub.</a> The <a href="https://github.com/pwa-builder/pwa-starter#getting-started">README</a> goes through everything you will need installed on your computer (just Node.js and NPM).</p><p>Once you have gotten the starter then all you need to do is run npm install and npm run dev . When you run the dev command it will open the starter in your default browser. As you make changes to your code the starter will also auto-reload, enabling a very quick developer experience. You are now ready to start building your PWA!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UmLsTj85geGn1Uuraha2nw.png" /><figcaption>The starter running in Microsoft Edge</figcaption></figure><h3>Taking things further!</h3><p>Once you have developed your PWA using the starter you can now go back to <a href="https://pwabuilder.com/">PWABuilder</a> and package your PWA for the Microsoft and Google Play store!</p><p><em>We recommend </em><a href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website-how-to?tabs=azure-portal"><em>Azure static site hosting</em></a><em> or </em><a href="https://www.netlify.com/"><em>Netlify</em></a><em> for deploying your PWA. You will need to deploy your PWA before moving on to the next step.</em></p><p>All you must do is put in the URL to your new PWA, tap Start and then Build my PWA.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MYW6XdLwkeV-9uZRUoaWAw.png" /><figcaption>The PWABuilder packaging page</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-BJ7lZ2TpUS4aj3nkIWwkw.png" /><figcaption>The Android platform modal</figcaption></figure><p>You can now choose the Windows or Android cards to package your PWA for the Microsoft and Google Play store. As you can see, we also support the Samsung Galaxy store and MacOS!</p><p>We hope you enjoy building PWAs with the new PWABuilder pwa-starter! This is one of our first big steps towards helping developers build PWAs from scratch and we are extremely excited to hear what you all think about it! Let us know what you think or if you run into any bugs on the <a href="https://github.com/pwa-builder/pwa-starter">GitHub </a>repo. We are super excited to see what the community builds!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=96bba63658b3" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/building-a-progressive-web-app-with-pwabuilder-96bba63658b3">Building a Progressive Web App with PWABuilder!</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Making Service Workers easy!]]></title>
            <link>https://medium.com/pwabuilder/making-service-workers-easy-13516ae21123?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/13516ae21123</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[web-app-development]]></category>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Thu, 19 Mar 2020 17:57:26 GMT</pubDate>
            <atom:updated>2020-03-19T18:50:41.763Z</atom:updated>
            <content:encoded><![CDATA[<p>Service workers are an essential part of Progressive Web Apps and enable some amazing experiences on the web, but historically they have been complicated and hard to work with. There are plenty of edge cases that you need to think of when putting together a service worker and when your service worker goes wrong, they tend to go really wrong 😁. Luckily, as the web has progressed solutions such as <a href="https://developers.google.com/web/tools/workbox/">Workbox</a> have come out that handle the edge cases and make it much easier to build a great service worker for your PWA. Today<a href="https://twitter.com/pwabuilder?s=20"> the PWABuilder team</a> is happy to announce that we have updated all of our service workers to use Workbox AND we are releasing a new web component, <a href="https://github.com/pwa-builder/pwa-update">&lt;pwa-update /&gt;</a> that handles service worker registration, service worker updates and more! This means that our service workers are now much easier to use, way more powerful and customizable than before, along with being fully production ready. Let’s dive into the details!</p><h3>What is Workbox?</h3><p>Before we dive into the details of this update, lets first talk about what Workbox is!</p><p><a href="https://developers.google.com/web/tools/workbox/">Workbox</a> is a JavaScript library that wraps the Service Worker APIs and makes them super easy to build. For example, let’s say we want to cache all the assets in our PWA so that they load when your PWA is opened offline. While this sounds simple at first once you dive in you start to realize its not. For example, do we always want to get the assets from our cache? What if we want to try the network first and fall back to cache? How does this even work? As you can see, this gets complicated quick, but this is where Workbox comes to the rescue! With Workbox, this is what the code looks like to cache our ‘assets’ folder and keep that cache updated:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/608/1*envMAj_FqbwgBguSbbiQeA.png" /></figure><p>While this is just one example, Workbox comes with many different caching strategies, and different ways of handling paths and even modules that help you take advantage of more advanced service worker API such as <a href="https://developers.google.com/web/tools/workbox/modules/workbox-background-sync">background sync.</a> Check out <a href="https://developers.google.com/web/tools/workboxfor">https://developers.google.com/web/tools/workbox </a>for more info!</p><h3>Our new Service Workers!</h3><p>Let’s now dive into our new Workbox based service workers! Once you have entered your URL into <a href="https://pwabuilder.com/">https://pwabuilder.com</a> you can then proceed to our new service workers by tapping “Choose a Service Worker”. As you can see, this works the same as it always has, but the service worker code now uses Workbox!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*In22oZj9cEra3rz9jrU5XQ.png" /></figure><p>Another change you might notice is that we now have added two new Service Workers; one that takes advantage of background sync and another one for serving cached video and audio! These scenarios have been complicated to set up with our Service Workers in the past, but now all you need to do is just copy/paste some code!</p><h3>The pwa-update component!</h3><p>Another factor that has made Service Workers hard to use properly in the past was that there was no default way to notify the user of available updates and offline functionality. Luckily, these are exactly the scenarios that the <a href="https://github.com/pwa-builder/pwa-update">&lt;pwa-update /&gt;</a> web component was made to handle!</p><p>As you might notice from the above screenshots, our registration code snippits for the service workers now import our web component and add it to your app. This is all you need to register your service worker and handle the scenarios I mentioned above! When your service worker has successfully installed the offline toast will be shown, and when an update is available the update toast will show.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*OtXNwT58OnC4v9VwChdx4Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/409/1*lFvkbksu68_kGRUNaR8nyA.png" /><figcaption>Toasts 🍞</figcaption></figure><p>Finally, we know that many modern frameworks and libraries provide their own Service Workers or might already use Workbox underneath the hood. Because of this, we made sure that &lt;pwa-update /&gt; can work with any service worker! All you have to do is make sure you update the `swpath` <a href="https://github.com/pwa-builder/pwa-update#api">https://github.com/pwa-builder/pwa-update#api</a> to point at your Service Worker and add this bit of code to your Service Worker.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/719/1*6MUcCPAq08SFapGp6O8Rww.png" /></figure><p>We hope you enjoy our new Service Workers and the &lt;pwa-update /&gt; web component. We have been excited to collaborate with the Workbox team on this update and are excited for you to try it! Also, as always, if you have any feedback or run into any issues always feel free to open a ticket with us on our <a href="https://github.com/pwa-builder/pwabuilder-serviceworkers">Github Repo</a> . Thanks!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=13516ae21123" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/making-service-workers-easy-13516ae21123">Making Service Workers easy!</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[New PWABuilder release!]]></title>
            <link>https://medium.com/pwabuilder/new-pwabuilder-release-b2932f4722a5?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/b2932f4722a5</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <category><![CDATA[microsoft-edge]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Wed, 29 Jan 2020 21:10:40 GMT</pubDate>
            <atom:updated>2020-01-29T21:44:47.403Z</atom:updated>
            <content:encoded><![CDATA[<p>Towards the end of last year we expanded the PWABuilder team and decided on some new directions for <a href="https://pwabuilder.com/">PWABuilder</a> which <a href="https://twitter.com/davrous?s=20">David Rousset</a> talked about in our last post, <a href="https://medium.com/pwabuilder/pwa-builder-new-team-new-directions-d4420fdce37b">PWA Builder new team &amp; new directions</a>. Today I am excited to announce our first new release of 2020! This is a big release for PWABuilder and fixes a lot of the pain points the community had, along with some awesome new features and other improvements, lets dive in!</p><h3>PWABuilder works everywhere</h3><p>One of the biggest things the community requested was for <a href="https://pwabuilder.com/">PWABuilder</a> to work well on mobile / smaller tablet devices. The PWABuilder project is a large codebase with some challenges that made the design not as responsive as we wanted. In this release we went through and solved these challenges and now we are happy to say that <a href="https://pwabuilder.com/">PWABuilder</a> now works great no matter what size device you are on!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/361/1*EhAmJlgbVn0Vt6VXT6mLxw.png" /></figure><h3>Packaging your PWA for Android</h3><p>While PWAs have traditionally been focused on distribution through the web (and this is a good thing!), users are still used to getting their apps from an app store. Because of this it is important that your PWA is also able to be shipped to an app store, in this case the Google Play Store. Google has enabled this with the introduction of Trusted Web Activities, which enables you to “wrap” your PWA for the Play Store. The only problem here is the complexity involved in packaging your PWA into a Trusted Web Activity(TWA) <a href="https://developers.google.com/web/updates/2019/02/using-twa">https://developers.google.com/web/updates/2019/02/using-twa</a>.</p><p>Because of this we decided to take a look and see what we could do to make things easy and luckily found that a team at Google was also focused on the same goal with <a href="https://github.com/GoogleChromeLabs/llama-pack">llama-pack</a>! Llama-pack is an awesome tool that handles generating, signing and building your PWA into a TWA, exactly what we were looking for. <a href="https://twitter.com/JudahGabriel?s=20">Judah</a> worked with the llama-pack team to enable us to integrate the tool into our backend and with this release developers can now generate, build AND sign a TWA all without leaving the PWABuilder site. All you have to do is:</p><p>Enter the URL to your PWA at <a href="https://pwabuilder.com/">https://pwabuilder.com</a> and hit the start button</p><p>Tap the `Build My PWA` button and then choose the Android platform.</p><p>Tap the download button and PWABuilder will run llama-pack behind the scenes on your PWA and give you a zip folder with everything you need to deploy your PWA to the Google Play store! No Android Studio required, the APK and Cert are in the zip 🎉🎉.</p><blockquote>Note: If you are using this to update an existing APK you have already deployed to the Google Play Store you may need to re-sign the APK with your existing key. You can do this in the Google Play console or use the <a href="https://developer.android.com/studio/command-line/apksigner">apksigner tool</a> from Google. Also, we will be adding the ability to submit your own key to sign the APK with in the future, so keep an eye out!</blockquote><h3>Getting that “app-like” user experience</h3><p>An important part of the Progressive Web App experience is the “app” part. The app like functionality and feel that PWAs strive for is a massive differentiation between “just a website” and a PWA, but is not always easy to achieve.</p><p>To make this easy for developers, PWABuilder’s feature store offers a one stop shop for all the web components you need to take your PWA over the finish line:</p><figure><img alt="A screenshot of the feature store in PWABuilder" src="https://cdn-images-1.medium.com/max/624/1*75UWifwD8KUHlVEfGvlBVw.png" /></figure><p>Want users to easily be able to install your PWA straight from the browser? <a href="https://pwabuilder.com/feature/Install%20your%20PWA">We have a component for that</a>. Want users to easily be able to login with their Microsoft account? <a href="https://pwabuilder.com/feature/Login%20Graph%20Component">We have a component for that</a>. And all you have to do is copy and paste some code!</p><p>Finally, we are huge fans of the web components that the <a href="https://docs.microsoft.com/en-us/graph/toolkit/overview">Microsoft Graph Toolkit</a> team is building and wanted to give developers using PWABuilder an easy way to use those components. We now have a special Microsoft Graph category in our store that makes using Microsoft Graph components like the `mgt-login` component <a href="https://pwabuilder.com/feature/Login%20Graph%20Component">as easy as copy and pasting a tiny amount of code</a>.</p><figure><img alt="A screenshot of the Microsoft Graph category" src="https://cdn-images-1.medium.com/max/624/1*-Tf7ZmtvpPE-Ws4ZSXaXYA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*Ab_6V18OWjX7aTKCylEbWw.png" /></figure><p><a href="https://github.com/pwa-builder/PWABuilder/issues">Let us know</a> how you like the new Android TWA platform and <a href="https://pwabuilder.com/features">Feature stor</a>e, I personally love how easy it is to setup Microsoft Account authentication using the <a href="https://pwabuilder.com/feature/Login%20Graph%20Component">Microsoft Graph Login component</a>, and it works great when packaged as a TWA too! We are very excited to see all the energy in the PWABuilder community over the last few months and we have even more improvements coming soon to the project. Keep an eye on our new <a href="https://twitter.com/pwabuilder?s=20">Twitter account</a> for announcements, thanks!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b2932f4722a5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/new-pwabuilder-release-b2932f4722a5">New PWABuilder release!</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Installing Progressive Web Apps]]></title>
            <link>https://medium.com/pwabuilder/installing-progressive-web-apps-b7274ebffe80?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/b7274ebffe80</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[app-development]]></category>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[edge]]></category>
            <category><![CDATA[progressive-web-app]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Tue, 05 Nov 2019 19:34:22 GMT</pubDate>
            <atom:updated>2019-11-11T18:51:00.832Z</atom:updated>
            <content:encoded><![CDATA[<p>Historically the PWABuilder team has been focused on helping developers with the basics of creating a Progressive Web App. When the PWABuilder project started, tooling for PWAs was still very early and most web frameworks did not give you a PWA by default. Luckily, today that story is very different and all the major web frameworks (React, Vue, Angular etc) now give you a PWA out of the box. What this also means thought is that its time to change our focus for PWABuilder from purely helping developers get started with PWAs to our new goal, helping developers build great PWAs that provide an awesome user experience! We want to help developers fill in the gaps that separate PWAs from native app experiences, and today we are announcing our first project with this new goal in mind!</p><p>The one thing that has always separated the web from native is that a native app can be installed by the user, leading to higher engagement with users, while web apps were stuck in the browser. PWAs opened the possibility for web apps to be installed by the user, but we have always been reliant on what the browser provides as an install experience which we have found lacking.</p><p>Today, the PWABuilder team is releasing a new <a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components">Web Component</a> called <a href="https://github.com/pwa-builder/pwa-install">pwa-install</a>! The pwa-install component takes the standard PWA browser install experience further by using web APIs available in modern browsers to deliver a more app store like install experience for users! Lets dive a little deeper into installing PWAs to understand the challenges this component aims to solve, and then ill show how the component works!</p><blockquote><a href="https://glitch.com/edit/#!/pwainstall"><em>live demo</em></a></blockquote><h3><strong>Installing PWAs</strong></h3><p>Before we dive into how this component works, I want to cover the existing in-browser install experience.</p><p><strong>Mobile</strong></p><p>On the mobile side of things, Chrome, Chromium based browsers like Microsoft Edge and Samsung Internet, and Firefox for Android all currently support a basic browser install experience. Let’s look at what this mobile install experience looks like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0-pmwBrJCCXDHKxiVE1kwg.png" /></figure><p>As you can see from the above screenshot, when Edge detects that I am using a PWA it will pop up an install banner from the bottom of the screen. If you click that banner Edge will then install the PWA to your device. This is much better than we have ever had on the web and does get the job done, but it is not ideal.</p><p>First, this banner does not give the user any more info about the app they are questioned to add to their homescreen. Users are accustomed to seeing descriptions, screenshots, key features and more about an app when they are installing it, which leads to my last point.</p><p>Users, especially on mobile, have traditionally gotten all their apps from an app store like Google Play. Because of this, users have come to expect things like an app store experience when they are installing apps, and the current install banner for PWAs does not fill this gap.</p><p><strong>Desktop</strong></p><p>On desktop we face the same challenges, but I wanted to touch on some UI differences in the desktop version of the install banner we saw on mobile:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zK-1mGfQEmJ1PIaMKx8IDg.png" /></figure><p>On desktop the install banner takes the shape of an install button in the URL bar of the browser. When the user clicks this, they are greeted with a small dropdown that shows the icon of the PWA along with install and cancel buttons.</p><p>To review, the main challenge associated today with the install experience for PWAs is a lack of info for the user which then leads to confusion. We’ve even shown this current experience to dev teams and the first comment was <em>wait, what just happened</em>. Luckily though, modern browsers give us some APIs that allow us to tie into this install experience in a basic way, which means we can build a better install experience ourselves!</p><h3><strong>@pwabuilder/pwainstall 👏👏</strong></h3><p>The PWABuilder team has been hard at work over the past few weeks and we are excited to announce the <strong>&lt;pwa-install /&gt;</strong> component! Inspired by our friends over at the <a href="https://docs.microsoft.com/en-us/graph/toolkit/overview">Microsoft Graph Toolkit</a> this is a web component built with <a href="https://lit-element.polymer-project.org/">lit-element</a>. Because this is a web component that means it will work with all your favorite frameworks right out of the box while also being tiny enough that it does not impact your loading performance, the best of both worlds!</p><p>The pwa-install component tries to solve the challenges in the install experience we talked about above while also serving as an example of what the browser supplied install experience could look like. This component reads your <a href="https://developers.google.com/web/fundamentals/web-app-manifest/">web manifest</a> and uses that info to display an app store like install screen to the user when they hit an install button:</p><p>Oh and did I mention it only takes 2 lines of HTML to use it?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DcdnhtmAwJJ9LLJsqe6FDQ.png" /><figcaption>Code for using the pwa-install component</figcaption></figure><blockquote>The pwa-install component can also be install from NPM with npm install @pwabuilder/pwainstall</blockquote><p>These 2 lines of html take care of loading the component, showing an install button when appropriate and finally, displaying the install screen:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*ih1okIEY4QKdtejCn24wEw.gif" /><figcaption>GIF of the component working on Desktop</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xZ4g1d5UHTwNSs02klfJ4Q.png" /><figcaption>The pwa-install component running on a mobile device</figcaption></figure><p>As mentioned above, this component reads your web manifest to know what info to display about your app. We currently use the description, screenshots, theme_color, short_name, name and icons entries to provide all of the info you see in the above screenshot, but these are not required for the component to work which allows you to update your manifest over time with these missing entries.</p><p>Before moving on I also wanted to touch on best practices for using this component. To ensure the best user experience for your app, we recommend only displaying this component in a way that is not too distracting for the user. In my PWAs, I have found that the best way to do this is to show the install button is in a header or footer, and possibly only after the user has interacted with the app. This shows the install button for the user, but ensures that the experience of the app is not blocked by the install and that the user is not being spammed with install requests for something they have barely used. As developers of PWAs, we have to remember that not everyone who comes to our PWA in the browser is going to install it the first time, therefore installing should not be a core part of your experience.</p><p>Finally, if you are looking for a quick way to generate a quality web manifest, you can use <a href="https://pwabuilder.com/">PWABuilder</a> or the <a href="https://marketplace.visualstudio.com/items?itemName=PWABuilder.pwabuilder-extension">PWABuilder VSCode extension</a>. PWABuilder will load your PWA and guide you in creating an awesome web manifest.</p><h3><strong>Open Source</strong></h3><p>As with most things we do on the PWABuilder team, this component is completely open source and the source code is available on <a href="https://github.com/pwa-builder/pwa-install">GitHub</a>. If you have ideas on how to make this component better or are just looking for an inclusive open source community to be a member of, we would love for you to help us build out this component! We currently have a few issues open that would be ideal for a community member to take <a href="https://github.com/pwa-builder/pwa-install/issues/1">https://github.com/pwa-builder/pwa-install/issues/1</a> and would love to have more ideas!</p><p>We are excited to release the &lt;pwa-install /&gt; component today! Let us know what you think and keep an eye on the <a href="https://github.com/pwa-builder/PWABuilder">PWABuilder projec</a>t for more awesome stuff coming out over the next few months!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b7274ebffe80" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pwabuilder/installing-progressive-web-apps-b7274ebffe80">Installing Progressive Web Apps</a> was originally published in <a href="https://medium.com/pwabuilder">PWABuilder</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building Webboard, an adventure in Progressive Web Apps]]></title>
            <link>https://medium.com/@justinwillis/building-webboard-an-adventure-in-progressive-web-apps-2d3ff69cd23?source=rss-9a76f55a98d7------2</link>
            <guid isPermaLink="false">https://medium.com/p/2d3ff69cd23</guid>
            <category><![CDATA[progressive-web-app]]></category>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[web-apps]]></category>
            <dc:creator><![CDATA[Justin Willis]]></dc:creator>
            <pubDate>Tue, 08 Oct 2019 23:25:36 GMT</pubDate>
            <atom:updated>2019-10-08T23:25:36.587Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bTP_8aDycCM44ZEglIgG_g.jpeg" /></figure><p>Today I wanted to share a little bit about a side project that I have been working on called <a href="https://webboard-app.web.app/">Webboard</a>! <a href="https://webboard-app.web.app/">Webboard</a> is a whiteboarding Progressive Web App meant to be fast, cross platform and with a focus on ease of use. I started building this app as an excuse to dive deep into the Canvas APIs but realized halfway through that this is a good way to experience the full realm of shipping a “production ready” PWA. Today, I would love to share some of that experience with you in the hopes that it helps you with building your next PWA!</p><h4><strong>Step one, choose a tech stack</strong></h4><p>The first thing I do when building any app, including PWAs, is decide which tech stack I would like to use. This step is crucial as it can have a big impact down the road in areas like performance and developer experience.</p><p>When I am choosing my tech stack I like to keep a few things in mind, namely:</p><ul><li>What are the performance characteristics of my frontend framework? For example, how large is the bundle size of a starter app in this framework, does it support easy lazy loading etc.</li><li>What is the developer experience for this framework like? For example, I prefer templating using JSX or <a href="https://lit-html.polymer-project.org/guide/writing-templates">lit-html style templates</a> (and overall prefer a react style dev experience) but others might prefer the Angular style way of doing templates directly in HTML. This really just comes down to personal preference, but can also have impacts on performance.</li><li>How well “supported” is this framework? When I think of support I dont mean just how active that frameworks developers are on Github, but also what technologies that framework uses and how standard they are to the web. Frameworks built using web standards such as web components are normally much more likely to not break because of future browser changes compared to APIs that are entirely custom to a framework. The browser has to be much more conservative with breaking changes, so web standards will be more stable API wise.</li></ul><p>With these things in mind I normally find that one of the newer Web Components based frameworks such as <a href="https://stenciljs.com/">Stencil</a> and <a href="https://lit-element.polymer-project.org/">lit-element</a> fit my requirements really nicely. For Webboard I ended up choosing Stencil, but lit-element would have worked very nicely as well!</p><h3><strong>Key Features</strong></h3><h4><strong>Low latency drawing</strong></h4><p>One of the largest challenges when building an inking experience is latency. Humans are used to seeing a line appear as soon as they drag their pencil/pen across paper, but an inking experience with high latency means that there is a delay between the time a user applies their pen or finger to the screen and that a line actually appears. This degrades the inking experience for the user and therefore traditionally has made it hard to build high quality inking experiences on the web, but this is no longer the situation!</p><p><a href="https://developers.google.com/web/updates/2019/05/desynchronized">Canvas now supports a </a><a href="https://developers.google.com/web/updates/2019/05/desynchronized">desynchronized option</a> that tells the browser to cut out as much of the normal rendering chain as possible so as to get pixels rendered fast. This greatly reduces any latency that would normally come from the compositing process and therefore improves the inking experience for the user.</p><h4>Deeper integration with the OS</h4><p>The most exciting thing for me about PWAs is the opportunity they provide for your web app to deeply integrate with the operating system and provide a richer experience for the user. For Webboard this deeper integration was achieved with a few key features.</p><p>The first thing I focused on was the install experience. Traditionally native apps have been published in app stores that provided an app listing to advertise/ introduce your app to users but this is something that is currently lacking from the <a href="https://developers.google.com/web/fundamentals/app-install-banners">PWA install experience</a>. Because of this I decided to build out my own install experience using the <a href="https://developers.google.com/web/fundamentals/app-install-banners#listen_for_beforeinstallprompt">beforeInstallPrompt event</a> that provided an app listing type experience:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/850/1*CsTwXidjRDYlU0sDJfgpdA.jpeg" /><figcaption>Install experience in Webboard</figcaption></figure><p>I am also investigating packaging this install experience as a standalone web component that anyone could use in their app!</p><p>The next thing was taking advantage of some more advanced Service Worker APIs to provide a better offline / slow network experience for users. When building a PWA we have to keep in mind that we are building an app experience, not purely a website experience and there are certain things users expect when they are using an app. One of these things is the knowledge that losing a network connection is not going to break the experience for them. To make sure Webboard works well in this scenario I made use of the <a href="https://developers.google.com/web/updates/2015/12/background-sync">background sync API</a> to ensure that boards can be saved to the cloud even if they are created while offline. This also ensures that no work is lost if the connection is lost while making a board.</p><p>Finally, one user experience advantage that native apps have traditionally had over web apps is the ability to tie into the native file system on the device, but that is now changing with the new <a href="https://developers.google.com/web/updates/2019/08/native-file-system">Native File System API</a>! The Native File System API enabled me to build a very smooth experience for saving / writing to boards locally without as many prompts as normally required when using files the traditional way on the web, along with greatly simplifying the code.</p><p>Note: the file system feature will only be enabled if webboard detects that the API is supported in the browser its running in. Currently this means Chromium based browsers that have a flag turned on, but this will expand once the API has reached the stable point.</p><h3>Trying Webboard</h3><p>Webboard is a PWA which means you can use the app by just visiting this url <a href="https://webboard-app.web.app/">https://webboard-app.web.app/</a> ! Webboard can be used on any device with a web browser and works on Windows, Android, Linux, Chrome OS, iOS and macOS. Also, if you are on Android and prefer to get your apps from the Google Play store I have <a href="https://play.google.com/store/apps/details?id=org.webboard.app">released Webboard</a> as a <a href="https://developers.google.com/web/updates/2019/08/twas-quickstart">Trusted Web Activity </a>.</p><blockquote>Note: If you have not checked out TWA’s yet I definitely recommend checking them out as they provide a very low friction way to get your PWA in the Google Play Store. <a href="https://www.pwabuilder.com/">PWABuilder</a> makes it really easy to package your PWA as a trusted web activity by clicking the TWA option when downloading the Android package.</blockquote><p>Webboard is also completely open source and is available on <a href="https://github.com/jgw96/web-whiteboard">Github</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2d3ff69cd23" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>