diff --git a/data/examples/index.json b/data/examples/index.json index 5d63eea..a1adcd2 100644 --- a/data/examples/index.json +++ b/data/examples/index.json @@ -195,6 +195,34 @@ "documentation": "" } }, + { + "name": "Notifications", + "electron": { + "gist": "", + "status": "", + "documentation": "" + }, + "pwa": { + "gist": "", + "status": "", + "documentation": "https://web.dev/push-notifications-overview/" + }, + "react-native": { + "gist": "", + "status": "", + "documentation": "" + }, + "webview2": { + "gist": "", + "status": "", + "documentation": "" + }, + "xamarin": { + "gist": "", + "status": "", + "documentation": "" + } + }, { "name": "Run on OS login", "electron": { diff --git a/data/technologies/pwa.json b/data/technologies/pwa.json new file mode 100644 index 0000000..d4068b2 --- /dev/null +++ b/data/technologies/pwa.json @@ -0,0 +1,38 @@ +{ + "$schema": "../schemas/technology.json", + "name": "PWA", + "normalizedName": "pwa", + "platforms": { + "Windows": "✅", + "macOS": "✅", + "Linux": "✅", + "Android": "✅", + "iOS": "✅" + }, + "languages": { + "C++": "", + "C#": "", + "Go": "", + "Java": "", + "JavaScript": "✅", + "Rust": "" + }, + "rendering": { + "Browser engine": "✅", + "Platform controls": "", + "Direct drawing": "" + }, + "releases": [ + { + "version": "N/A", + "date": "2021-01-01T00:00:00Z" + } + ], + "codeLicense": { + "name": "BSD 3-clause", + "url": "https://source.chromium.org/chromium/chromium/src/+/main:LICENSE" + }, + "url": "https://web.dev/progressive-web-apps/", + "community": "https://www.chromium.org/developers/discussion-groups", + "documentation": "https://web.dev/learn/" +} \ No newline at end of file diff --git a/docs/examples-list.pmd b/docs/examples-list.pmd index 09784e8..39443c1 100644 --- a/docs/examples-list.pmd +++ b/docs/examples-list.pmd @@ -1,18 +1,18 @@ -| Feature | Electron | React Native | WebView2 | Xamarin | -| --- | :---: | :---: | :---: | :---: | -| Bluetooth access |✅ | | | | -| Custom title bar |🛠 | | | | -| File System access |✅ | | | | -| Gamepad access | | | | | -| Generic sensor access | | | | | -| Geolocation | | | | | -| Idle detection | | | | | -| Notifications | | | | | -| Run on OS login | | | | | -| Serial access |✅ | | | | -| URL handler | | | | | -| [URL protocol handler](/docs/examples/url-protocol-handler) |✅ ([Docs](https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app)) | | | | -| USB access | | | | | -| Video codecs | | | | | +| Feature | Electron | PWA | React Native | WebView2 | Xamarin | +| --- | :---: | :---: | :---: | :---: | :---: | +| Bluetooth access |✅ | | | | | +| Custom title bar |🛠 |❓ ([Docs](https://web.dev/window-controls-overlay/)) | | | | +| File System access |✅ |❓ ([Docs](https://web.dev/file-system-access/)) | | | | +| Gamepad access | | | | | | +| Generic sensor access | | | | | | +| Geolocation | | | | | | +| Idle detection | |❓ ([Docs](https://web.dev/idle-detection/)) | | | | +| Notifications | | | | | | +| Run on OS login | |❓ ([Docs](https://chromestatus.com/feature/5534549008187392)) | | | | +| Serial access |✅ |❓ ([Docs](https://web.dev/serial/)) | | | | +| URL handler | |❓ ([Docs](https://web.dev/pwa-url-handler/)) | | | | +| [URL protocol handler](/docs/examples/url-protocol-handler) |✅ ([Docs](https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app)) |❓ ([Docs](https://web.dev/url-protocol-handler/)) | | | | +| USB access | | | | | | +| Video codecs | |❓ ([Docs](https://web.dev/webcodecs/)) | | | | diff --git a/docs/pwa.md b/docs/pwa.md new file mode 100644 index 0000000..6e1af33 --- /dev/null +++ b/docs/pwa.md @@ -0,0 +1,83 @@ +--- +title: PWA +--- + +# PWA + + + + + +:::tip +The content of this page referes to Chromium (the engine with the most features) unless stated +otherwise. This engine is used by many browsers like Chrome and Edge, and other technologies such as +[Electron] and [WebView2]. +::: + +## Summary + +| Characteristic | | +| ------------------ | :---------------------------------------------------------------------------: | +| Website | [{{technologies.pwa.url}}]({{technologies.pwa.url}}) | +| Platforms | Desktop, mobile | +| Rendering strategy | [Browser engine] | +| Code License | [{{technologies.pwa.codeLicense.name}}]({{technologies.pwa.codeLicense.url}}) | +| Copyright | It's complicated | +| Documentation | [{{technologies.pwa.documentation}}]({{technologies.pwa.documentation}}) | +| Community | [{{technologies.pwa.community}}]({{technologies.pwa.community}}) | +| Latest version | {{technologies.pwa.releases.0.version}} | +| Release cadence | Major versions: 4 weeks
Minor/patch: As needed | +| Release support | 4-8 weeks | +| Update model | Automatically updated | +| Governance model | It's complicated | + +**Platform support:** + +{{ table technologies.pwa.platforms.{} }} + +:::warning +Even though browsers based on Chromium (like Chrome and Edge) are available on iOS, the reality is +that they use a different engine. The Apple Store policy only permits browser vendors to use the +Safari WebView. +Unfortunately, this browser engine only has a subset of the features available in Chromium and +updates at a much lower rate. + +There is more information about this in "[iOS Engine Choice In Depth]" by [Alex Russell]. +::: + +**Language support:** + +{{ table technologies.pwa.languages.{} }} + +## Release cadence, version support and update model + +Google releases a major version every 4 weeks. During this period it will receive minor updates as +needed (bug fixes and security). +Additionally there is an Extended Stable option that releases every 8 weeks. This version receives +also security updates (every 2 weeks) but not all the ones that the 4 week version has. +You can read more in [this blog post][speeding-up-release-cycle]. + +[Firefox release cycle] is also 4 weeks for major versions and Safari does not have a public release +cycle policy. + +Chromium based browsers and Firefox update automatically without user intervention while Safari +requires the user to update the Operating System on iOS or accept the update process on macOS. + +## Governance + +TBD + + + + +[Alex Russell]: https://twitter.com/slightlylate +[browser engine]: ./browser-engine.md +[electron]: ./electron.md +[Firefox release cycle]: https://wiki.mozilla.org/Release_Management/Release_Process +[iOS Engine Choice In Depth]: https://infrequently.org/2021/08/webkit-ios-deep-dive/ +[speeding-up-release-cycle]: https://blog.chromium.org/2021/03/speeding-up-release-cycle.html +[webview2]: ./webview2.md \ No newline at end of file diff --git a/scripts/process-examples-sources.js b/scripts/process-examples-sources.js index 68c6aea..a8da7bb 100644 --- a/scripts/process-examples-sources.js +++ b/scripts/process-examples-sources.js @@ -179,7 +179,7 @@ const normalizeStatus = (status) => { } if (status.includes('crbug')) { // TODO: Get the resolution of the issue via Playwright because x-xsrf-token and other stuff :( - return 'TBD'; + return '❓'; } return status; diff --git a/sidebars.js b/sidebars.js index 720d98b..fbc63d3 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1,5 +1,12 @@ module.exports = { - technologies: ['technologies', 'electron', 'webview2', 'react-native', 'xamarin'], + technologies: [ + 'technologies', + 'electron', + 'pwa', + 'react-native', + 'webview2', + 'xamarin', + ], rendering: [ 'rendering', {