{"id":3456,"date":"2023-01-16T10:27:32","date_gmt":"2023-01-16T09:27:32","guid":{"rendered":"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/"},"modified":"2023-01-16T10:27:32","modified_gmt":"2023-01-16T09:27:32","slug":"not-everyones-currently-building-for-the-web-but-probably-more-people-should","status":"publish","type":"post","link":"https:\/\/tomayac.com\/wordpress\/2023\/01\/16\/not-everyones-currently-building-for-the-web-but-probably-more-people-should\/","title":{"rendered":"Not everyone&#8217;s currently building for the Web, but probably more people should"},"content":{"rendered":"\n\t\t\t<p>If you want to build an app, you have several ways of doing it. You can build a\nplatform-specific app for the platforms you care about, for example, Windows,\nAndroid, and iOS. In which case you would build three apps. You can also build a\n(progressive) Web app, possibly <em>in addition to<\/em> platform-specific apps.\nAlternatively, you can choose a cross-platform framework such as\n<a href=\"https:\/\/www.electronjs.org\/\">Electron.js<\/a> or\n<a href=\"https:\/\/ionicframework.com\/\">Ionic<\/a> that promises to let you write once and run\nanywhere. Let me begin by walking you through three extraordinary examples of\napps whose makers chose to <em>also<\/em> build for the Web, apart from building\nplatform-specific apps.<\/p>\n<h2 id=\"beacon-cases-that-demonstrate-the-web-s-abilities\" tabindex=\"-1\">Beacon cases that demonstrate the Web's abilities <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#beacon-cases-that-demonstrate-the-web-s-abilities\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<h3 id=\"photoshop\" tabindex=\"-1\">Photoshop <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#photoshop\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>I always saw Photoshop as one of the last bastions of high quality apps that\nsupposedly would never make it to the Web platform. Forget that\u2014this last\nbastion has finally fallen. With <a href=\"https:\/\/web.dev\/ps-on-the-web\/\">Photoshop<\/a>,\nAdobe, together with Chromium engineering, has managed to get a beta version of\nPhotoshop running in the browser that can serve as the new beacon showcase of\nwhat is possible on the Web. In it, you can try out the commenting workflow and\ntest some early Photoshop editing features Adobe is piloting on the Web. You and\nyour collaborators can now open and view Photoshop cloud documents in the\nbrowser, provide feedback, and make basic edits. All in one place without having\nto download or launch the app.<\/p>\n<figure>\n  <img src=\"https:\/\/blog.tomayac.com\/images\/photoshop.avif\" ,=\"\" alt=\"Adobe Photoshop running in the browser.\" width=\"800\" height=\"500\" \/>\n  <figcaption>\n    Photoshop on the Web\n  <\/figcaption>\n<\/figure>\n<h3 id=\"visual-studio-code\" tabindex=\"-1\">Visual Studio Code <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#visual-studio-code\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>Similarly, Microsoft has launched\n<a href=\"https:\/\/code.visualstudio.com\/blogs\/2021\/10\/20\/vscode-dev\">Visual Studio Code on the Web<\/a>,\na fully fledged, installable Web experience of its integrated development\nenvironment (IDE) that makes developing completely in the browser possible,\nincluding the option to open and edit files on the local file system.<\/p>\n<figure>\n  <img src=\"https:\/\/blog.tomayac.com\/images\/vscode.avif\" ,=\"\" alt=\"Microsoft VS Code running in the browser.\" width=\"800\" height=\"483\" \/>\n  <figcaption>\n    VS Code on the Web\n  <\/figcaption>\n<\/figure>\n<h3 id=\"twitter\" tabindex=\"-1\">Twitter <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#twitter\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>Lastly Twitter\u2014whose progressive Web app (PWA) is\n<a href=\"https:\/\/www.thurrott.com\/cloud\/social\/150171\/twitter-lite-now-adapts-larger-screens#:~:text=probably%20the%20best%20mainstream%20progressive%20web%20app\">largely seen<\/a>\nas <em>probably the best mainstream Progressive Web App<\/em>\u2014has\n<a href=\"https:\/\/blog.twitter.com\/engineering\/en_us\/topics\/insights\/2019\/twitter-for-mac-is-coming-back#:~:text=This%20led%20to%20our%20Responsive%20Web%20codebase%20being%20the%20spearhead%20for%20all%20platforms%20via%20web%20browsers\">used<\/a>\nits responsive Web codebase for all platforms, mobile and desktop, via Web\nbrowsers. On Windows, the PWA is the experience the company is confident enough\nto make <em>the<\/em> Twitter experience that you get when you\n<a href=\"https:\/\/blog.twitter.com\/en_us\/topics\/product\/2018\/a-new-twitter-experience-on-windows\">install<\/a>\nthe app from the Microsoft Store.<\/p>\n<figure>\n  <img src=\"https:\/\/blog.tomayac.com\/images\/twitter.avif\" ,=\"\" alt=\"Microsoft Store showing the Twitter app.\" width=\"800\" height=\"568\" \/>\n  <figcaption>\n    Twitter in the Microsoft Store\n  <\/figcaption>\n<\/figure>\n<h2 id=\"linkability-and-universality-the-web-s-super-powers\" tabindex=\"-1\">Linkability and universality: the Web's super powers <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#linkability-and-universality-the-web-s-super-powers\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>All three companies, Adobe, Microsoft, and Twitter, in parallel with their Web\napps, have well-established, platform-specific Windows, macOS, Android, iOS, and\nLinux versions of their apps Photoshop, Visual Studio Code, and Twitter\nrespectively. So why did they build for the Web on top? The answer lies in its\nlinkability and universality.<\/p>\n<p>As Google's Thomas Nattestad\n<a href=\"https:\/\/web.dev\/ps-on-the-web\/#:~:text=the%20simple%20power%20of%20a%20url%20is%20that%20anyone%20can%20click%20it%20and%20instantly%20access%20it.%20all%20you%20need%20is%20a%20browser.%20there%20is%20no%20need%20to%20install%20an%20application%20or%20worry%20about%20what%20operating%20system%20you%20are%20running%20on.\">put it<\/a>:\n<em>&quot;The simple power of a URL is that anyone can click it and instantly access it.\nAll you need is a browser. There is no need to install an application or worry\nabout what operating system you are running on&quot;<\/em>.\n<a href=\"https:\/\/code.visualstudio.com\/blogs\/2021\/10\/20\/vscode-dev#:~:text=You%20can%20make%20quick%20edits%2C%20review%20PRs%2C%20and%20Continue%20on%20to%20a%20local%20clone\">According to<\/a>\nMicrosoft's <a href=\"https:\/\/twitter.com\/chrisdias\">Chris Dias<\/a>, with Visual Studio Code\nfor the Web, when working with GitHub <em>&quot;you can make quick edits, review PRs,\nand continue on to a local clone&quot;<\/em>. The sole fact that you can share a link to\nyour work unlocks collaboration patterns that users have embraced and loved\nsince the birth of apps such as Google Docs. Twitter, of course, lives and dies\nby its links. News sites regularly\n<a href=\"https:\/\/edition.cnn.com\/2021\/11\/09\/politics\/gosar-anime-video-violence-ocasio-cortez-biden\/index.html#:~:text=Ocasio-Cortez%20tweeted%20in%20response%20Monday%20saying%20a%20%22creepy%20member%22%20of%20the%20House%20had%20%22shared%20a%20fantasy%20video%20of%20him%20killing%20me.%22\">link to newsworthy tweets<\/a>,\nwhich <em>means &quot;keeping it quick&quot;<\/em>\n<a href=\"https:\/\/blog.twitter.com\/engineering\/en_us\/topics\/infrastructure\/2019\/progressively-enhancing-desktop-devices#:~:text=%C2%A0-,Keeping%20it%20quick,-With%20all%20the\">is core<\/a>\nto ensuring people can get from an article straight into the app, where they can\nread or engage with the linked tweet.<\/p>\n<p>Web applications are inherently universal. They run on whatever operating system\nis capable of running a Web browser and they do not need to be compiled for each\noperating system separately. The same code base powers the application on all\nplatforms. This does not mean that there are no compatibility issues\u2014there are\nplenty actually\u2014but there is a\n<a href=\"https:\/\/web.dev\/interop-2022\/\">solid, shared, increasing baseline<\/a> that all\napplications can build upon.<\/p>\n<h3 id=\"linkability-of-platform-specific-apps\" tabindex=\"-1\">Linkability of platform-specific apps <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#linkability-of-platform-specific-apps\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>While more ubiquitous on mobile, linking into a platform-specific app from the\nWeb on desktop is comparatively rare. On mobile (and macOS), this works via a\ntechnology called\n<a href=\"https:\/\/developer.apple.com\/ios\/universal-links\/\">Universal Links<\/a> on iOS (and\non macOS), and <a href=\"https:\/\/developer.android.com\/training\/app-links\/\">App Links<\/a> on\nAndroid. Platform-specific apps alternatively can rely on\n<a href=\"https:\/\/developer.apple.com\/documentation\/xcode\/defining-a-custom-url-scheme-for-your-app\">registered protocol schemes<\/a>\nsuch as <code>itms-apps:<\/code> for when you want to deep-link into the App Store app on\nmacOS or iOS, or register your own custom schemes for your own apps. So while\ntechnically possible, linking into platform-specific apps is a lot less flexible\nand requires more plumbing work than simply linking into a Web app.<\/p>\n<h2 id=\"the-slow-decline-of-interest-in-cross-platform-app-frameworks-and-the-rise-of-flutter\" tabindex=\"-1\">The slow decline of interest in cross-platform app frameworks and the rise of Flutter <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#the-slow-decline-of-interest-in-cross-platform-app-frameworks-and-the-rise-of-flutter\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>The Web isn't the only platform that promises <em>&quot;write once, run anywhere&quot;<\/em>.\nCross-platform frameworks <em>\u00e0 la<\/em> Electron.js do, too. With the Web becoming\npowerful enough to drive apps such as Photoshop that were thought to be\nimpossible, we can, however, observe a slow decline of interest in\ncross-platform desktop app frameworks such as\n<a href=\"https:\/\/www.electronjs.org\/\">Electron.js<\/a> and <a href=\"https:\/\/nwjs.io\/\">NW.js<\/a>, and\nmobile app frameworks such as <a href=\"https:\/\/cordova.apache.org\/\">Cordova<\/a> or\n<a href=\"https:\/\/reactnative.dev\/\">React Native<\/a>; while at the same time there is an\nundeniable increase of interest in <a href=\"https:\/\/flutter.dev\/\">Flutter<\/a>.<\/p>\n<h3 id=\"google-trends-stats\" tabindex=\"-1\">Google Trends stats <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#google-trends-stats\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>The following\n<a href=\"https:\/\/trends.google.com\/trends\/explore\/TIMESERIES\/1636457400?hl=en-US&amp;tz=-60&amp;cat=5&amp;date=today+5-y&amp;q=%2Fg%2F11bw_559wr,%2Fg%2F11f11js9bh,%2Fm%2F06znsr5,%2Fg%2F11f03_rzbg,%2Fg%2F11h03gfxy9&amp;sni=3\">Google Trends chart<\/a>\nshows the five frameworks side by side. While noting that this chart <em>does<\/em> show\ndisambiguated topic trends as detected by Google (as opposed to ambiguous\n<a href=\"https:\/\/blog.tomayac.com\/2021\/11\/08\/things-mode-and-strings-mode-in-google-trends\/\">search term trends<\/a>),\nnevertheless it is clearly <em>not<\/em> an exact science.<\/p>\n<figure>\n  <div style=\"height: 425px; width: 100%;\">\n    <iframe src=\"https:\/\/trends.google.com\/trends\/embed\/explore\/TIMESERIES?req=%7B%22comparisonItem%22%3A%5B%7B%22keyword%22%3A%22%2Fg%2F11bw_559wr%22%2C%22geo%22%3A%22%22%2C%22time%22%3A%22today%205-y%22%7D%2C%7B%22keyword%22%3A%22%2Fg%2F11f11js9bh%22%2C%22geo%22%3A%22%22%2C%22time%22%3A%22today%205-y%22%7D%2C%7B%22keyword%22%3A%22%2Fm%2F06znsr5%22%2C%22geo%22%3A%22%22%2C%22time%22%3A%22today%205-y%22%7D%2C%7B%22keyword%22%3A%22%2Fg%2F11f03_rzbg%22%2C%22geo%22%3A%22%22%2C%22time%22%3A%22today%205-y%22%7D%2C%7B%22keyword%22%3A%22%2Fg%2F11h03gfxy9%22%2C%22geo%22%3A%22%22%2C%22time%22%3A%22today%205-y%22%7D%5D%2C%22category%22%3A5%2C%22property%22%3A%22%22%7D&tz=-60&forceMobileMode=false&isPreviewMode=true&eq=q%3D%252Fg%252F11bw_559wr%2C%252Fg%252F11f11js9bh%2C%252Fm%252F06znsr5%2C%252Fg%252F11f03_rzbg%2C%252Fg%252F11h03gfxy9%26date%3Dtoday%25205-y%26cat%3D5%23TIMESERIES&hl=enUS\" title=\"Google Trends interest over time for Electron, NW.js, Apache Cordova, Flutter, and React Native.\" style=\"height: 100%; width: 100%; border: 0;\">\n    >\n    <\/iframe>\n  <\/div>\n  <figcaption>\n    Google Trends interest over time for Electron, NW.js, Apache Cordova, Flutter, and React Native.\n    [<a href=\"https:\/\/www.google.com\/url?q=https:\/\/trends.google.com\/trends\/embed\/explore\/TIMESERIES?req%3D%257B%2522comparisonItem%2522%253A%255B%257B%2522keyword%2522%253A%2522%252Fg%252F11bw_559wr%2522%252C%2522geo%2522%253A%2522%2522%252C%2522time%2522%253A%2522today%25205-y%2522%257D%252C%257B%2522keyword%2522%253A%2522%252Fg%252F11f11js9bh%2522%252C%2522geo%2522%253A%2522%2522%252C%2522time%2522%253A%2522today%25205-y%2522%257D%252C%257B%2522keyword%2522%253A%2522%252Fm%252F06znsr5%2522%252C%2522geo%2522%253A%2522%2522%252C%2522time%2522%253A%2522today%25205-y%2522%257D%252C%257B%2522keyword%2522%253A%2522%252Fg%252F11f03_rzbg%2522%252C%2522geo%2522%253A%2522%2522%252C%2522time%2522%253A%2522today%25205-y%2522%257D%252C%257B%2522keyword%2522%253A%2522%252Fg%252F11h03gfxy9%2522%252C%2522geo%2522%253A%2522%2522%252C%2522time%2522%253A%2522today%25205-y%2522%257D%255D%252C%2522category%2522%253A5%252C%2522property%2522%253A%2522%2522%257D%26tz%3D-60%26forceMobileMode%3Dfalse%26isPreviewMode%3Dtrue%26eq%3Dq%253D%25252Fg%25252F11bw_559wr%252C%25252Fg%25252F11f11js9bh%252C%25252Fm%25252F06znsr5%252C%25252Fg%25252F11f03_rzbg%252C%25252Fg%25252F11h03gfxy9%2526date%253Dtoday%2525205-y%2526cat%253D5%2523TIMESERIES%26hl%3DenUS&sa=D&source=docs&ust=1656333876287238&usg=AOvVaw1QYdCACMEsvrJP2BsAbyBT\">Source<\/a>]\n  <\/figcaption>\n<\/figure>\n<h3 id=\"statista-stats\" tabindex=\"-1\">Statista stats <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#statista-stats\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>This trend is backed by\n<a href=\"https:\/\/www.statista.com\/statistics\/869224\/worldwide-software-developer-working-hours\/\">Statista stats<\/a>,\naccording to which Flutter has passed React Native as the most popular\nframework.<\/p>\n<figure>\n  <img src=\"https:\/\/blog.tomayac.com\/images\/statista.avif\" ,=\"\" alt=\"Flutter is the most popular cross-platform mobile framework used by global developers, according to a 2021 developer survey. Based on the survey, 42 percent of software developers used Flutter. On the whole, roughly one third of mobile developers use cross-platform technologies or frameworks; the rest of mobile developers use native tools.\" width=\"800\" height=\"594\" \/>\n  <figcaption>\n    Cross-platform mobile frameworks used by software developers worldwide from 2019 to 2021.\n    [<a href=\"https:\/\/www.statista.com\/statistics\/869224\/worldwide-software-developer-working-hours\/\">Source<\/a>]\n  <\/figcaption>\n<\/figure>\n<h3 id=\"stackoverflow-stats\" tabindex=\"-1\">StackOverflow stats <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#stackoverflow-stats\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p><a href=\"https:\/\/insights.stackoverflow.com\/trends?tags=flutter%2Creact-native%2Celectron%2Cionic-framework\">StackOverflow statistics<\/a>\non tag usage also support this. The underlying assumption of people actually\nusing a technology correlating with people asking questions about that\ntechnology on StackOverflow is not beyond the realms of possibility.<\/p>\n<figure>\n  <img style=\"font-face: system-ui, sans-serif; background-color: #fff;\" src=\"https:\/\/blog.tomayac.com\/images\/stackoverflow.svg\" ,=\"\" alt=\"How technologies have trended over time based on use of their tags since 2008, when Stack Overflow was founded. Comparing the tags flutter, react-native, electron, and ionic-framework. Flutter's curve increases the steepest, with React Native being the flattening second and Ionic and Electron the flattening 'also ran'.\" width=\"800\" height=\"492\" \/>\n  <figcaption>\n    StackOverflow statistics on tag usage.\n    [<a href=\"https:\/\/insights.stackoverflow.com\/trends?tags=flutter%2Creact-native%2Celectron%2Cionic-framework\">Source<\/a>]\n  <\/figcaption>\n<\/figure>\n<h2 id=\"shouldn-t-everybody-be-building-for-the-web-then\" tabindex=\"-1\">Shouldn't everybody be building for the Web, then? <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#shouldn-t-everybody-be-building-for-the-web-then\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>Given the examples of Photoshop, VS Code, and Twitter, that show that it is\nindeed possible to build amazing applications on the Web, and given the Web's\nsuper powers of linkability and universality, two research questions come up:<\/p>\n<ul>\n<li><span id=\"research-question-1\">Research question \u2460:<\/span>\n<a href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#why-do-people-not-fully-bet-on-pwa\">Why do people not fully bet on PWA?<\/a><\/li>\n<li><span id=\"research-question-2\">Research question \u2461:<\/span>\n<a href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#why-is-flutter-so-popular\">Why is Flutter so popular?<\/a><\/li>\n<\/ul>\n<h3 id=\"why-do-people-not-fully-bet-on-pwa\" tabindex=\"-1\">Why do people not fully bet on PWA? <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#why-do-people-not-fully-bet-on-pwa\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>For <a href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#research-question-1\">research question \u2460<\/a>, the answer is complex and\nmanyfold. I want to break it down into different sub-categories.<\/p>\n<h4 id=\"missing-capabilities-aka-the-app-gap\" tabindex=\"-1\">Missing capabilities: aka the app gap <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#missing-capabilities-aka-the-app-gap\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>Web applications still lack certain functionalities that platform-specific apps\nhave. In the following paragraph, I list representative examples of such\nfunctionalities on different platforms.<\/p>\n<p>First, it is impossible, even with an installed PWA, to obey the macOS user\ninterface paradigm of having the\n<a href=\"https:\/\/developer.apple.com\/design\/human-interface-guidelines\/macos\/menus\/menu-bar-menus\/\">app menu at the top of the screen<\/a>.\nIt can easily be achieved with frameworks such as Electron.js via the\n<code><a href=\"https:\/\/www.electronjs.org\/docs\/latest\/api\/menu\">Menu<\/a><\/code> class. (On\nthe Web, the next best thing is\n<a href=\"https:\/\/web.dev\/window-controls-overlay\/\">Window Controls Overlay<\/a>; getting\nsupport for app menus is tracked as <a href=\"https:\/\/crbug.com\/1295253\">crbug\/1295253<\/a>.)\nAnother example is in-app purchases on macOS that can be handled via Electron's\n<code><a href=\"https:\/\/www.electronjs.org\/docs\/latest\/tutorial\/in-app-purchases\">inAppPurchase()<\/a><\/code>\nmethod. (On the Web, the next best thing is the\n<a href=\"https:\/\/developer.chrome.com\/docs\/android\/trusted-web-activity\/receive-payments-play-billing\/\">Digital Goods API<\/a>,\ncurrently limited to Android and ChromeOS.) Installers are a common way users\nhave learned to install applications on Windows. With Electron.js, it is\npossible to create\n<a href=\"https:\/\/www.electronjs.org\/docs\/latest\/api\/auto-updater#windows\">installers<\/a>\nand make installed applications\n<a href=\"https:\/\/www.electronjs.org\/docs\/latest\/api\/auto-updater\">update automatically<\/a>.\n(On the Web, <a href=\"https:\/\/web.dev\/web-bundles\/\">Web Bundles<\/a> are the next best\nalternative in Chrome.) This list is not exhaustive, and Electron.js is\nmentioned as a representative apps framework out of several.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>There are undeniably a number of capabilities that are missing from the Web. In\nmany cases, they are &quot;nice-to-have&quot;, but not necessarily required for a still\ngreat experience. Carefully assess if a capability can be seen as a progressive\nenhancement. For an example of this approach, check out the article\n<a href=\"https:\/\/web.dev\/progressively-enhance-your-pwa\/\">Progressively enhance your Progressive Web App<\/a>.<\/p>\n<h4 id=\"discoverability-in-stores\" tabindex=\"-1\">Discoverability in stores <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#discoverability-in-stores\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>Collectively, we have educated users to look for apps in app stores. Some stores\nsuch as the\n<a href=\"https:\/\/developer.microsoft.com\/en-us\/microsoft-store\/pwa\/\">Windows Store<\/a> and\nthe\n<a href=\"https:\/\/developer.chrome.com\/docs\/android\/trusted-web-activity\/quick-start\/\">Android Play Store<\/a>\nhave started to embrace (wrapped!) PWAs (optionally\n<a href=\"https:\/\/chromeos.dev\/en\/publish\/pwa-in-play#chrome-os-only\">limited to ChromeOS<\/a>),\nand offer graphical user interface tools like\n<a href=\"https:\/\/www.pwabuilder.com\/\">PWABuilder<\/a> (internally based on the command line\ntool <a href=\"https:\/\/github.com\/GoogleChromeLabs\/bubblewrap\">bubblewrap<\/a>) for\nsubmitting applications. Meanwhile, on other stores such as Apple's App Store,\nthe situation is different and less welcoming, and apps\n<a href=\"https:\/\/blog.pwabuilder.com\/posts\/publish-your-pwa-to-the-ios-app-store\/\">may or may not<\/a>\nmake it into the App Store, depending on the outcome of the app review.\nRecently, Oculus, a division of Meta Platforms that produces virtual reality\nheadsets, has announced that PWAs would be accepted into the\n<a href=\"https:\/\/developer.oculus.com\/pwa\/\">Oculus Store<\/a>.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>If your users are on one of the platforms whose stores accept PWAs, you can\npublish your app to the stores in question. Remember linkability as one of the\nWeb's super powers. Your app is discoverable, advertisable, and linkable from\nthe Web, too. Investing in a memorable domain name can sometimes actually be\nbetter for discoverability. Even for app stores, people still rely most on\nrecommendations from friends and family members to discover new apps according\nto\n<a href=\"https:\/\/www.thinkwithgoogle.com\/_qs\/documents\/331\/how-users-discover-use-apps-google-research.pdf\">research done by Google<\/a>.<\/p>\n<h4 id=\"monetization-of-apps-and-in-app-content\" tabindex=\"-1\">Monetization of apps and in-app content <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#monetization-of-apps-and-in-app-content\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>Apart from making apps themselves available for a fee, apps can also be\nmonetized by selling items as in-app purchases (for example, items in a game\napp), or by selling subscriptions (for example, regular courses in a fitness\napp). If the developer integrates with payment providers, all of this is\navailable to Web apps as well, but the smooth integration of stores and their\nrelated payment systems make this a lot more attractive for platform-specific\napps, albeit at a 15\u201330% commission. For apps built using\n<a href=\"https:\/\/developer.chrome.com\/docs\/android\/trusted-web-activity\/\">Trusted Web Activities<\/a>\nand delivered through the Google Play Store, developers can now use the\n<a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Payment_Request_API\">Payment Request API<\/a>\nand the new\n<a href=\"https:\/\/developer.chrome.com\/docs\/android\/trusted-web-activity\/receive-payments-play-billing\/\">Digital Goods API<\/a>\nto integrate with Google Play Billing.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>When you profit from the convenience of app store billing or in-app purchases,\nat the same time you also leave a part of your benefits on the table as a\ncommission. As a matter of fact, some apps that <em>are<\/em> published to app\nstores even ask their users to make the purchase off-store. One well-known\nexample is\n<a href=\"https:\/\/9to5mac.com\/2022\/07\/22\/netflix-external-subscription-ios\/\">Netflix with their external subscriptions<\/a>.<\/p>\n<h4 id=\"hiring-or-retraining-developers\" tabindex=\"-1\">Hiring or retraining developers <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#hiring-or-retraining-developers\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>From personal experience through talking to many of Google's partners, a lot of\n<a href=\"https:\/\/medium.com\/javascript-scene\/why-hiring-is-so-hard-in-tech-c462c3230017\">companies struggle with hiring great Web developers<\/a>.\nThe talent shortage is real, and recruiting costs are high, which is why\nstartups commonly hire in-house recruiters who often approach recruiting with a\nbreadth-first approach that has not helped the reputation of recruiters with IT\nprofessionals. Also, companies often already employ teams of Android and\/or iOS\ndevelopers that they cannot just retrain to become Web developers. Creating a\nPWA requires a high level of specialization that not all Web developers can\noffer.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>In the current economic situation, hiring <em>any<\/em> kind of developer is\ndifficult. Hiring someone with Web development skills is, in comparison to other\nplatform-specific coding skills, still easier\n<a href=\"https:\/\/insights.stackoverflow.com\/survey\/2021#most-popular-technologies-language-prof\">according to StackOverflow surveys<\/a>,\nwhich (in part) also explains the popularity of app frameworks such as React\nNative, Ionic, Flutter, and others that are based on Web technologies.<\/p>\n<h4 id=\"existing-apps-legacy-and-migrating-the-user-base\" tabindex=\"-1\">Existing apps legacy (and migrating the user base) <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#existing-apps-legacy-and-migrating-the-user-base\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>It is not unusual for companies to have made massive investments in\nplatform-specific apps, and giving up these investments, as well as a user base\nacquired over time (not to speak of the vanity install statistics), is not easy.\nApparently, starting from scratch, even when a company has an existing website,\nappears very unattractive in comparison, but sometimes it does\n<a href=\"https:\/\/www.glossy.co\/ecommerce\/gone-fishin-patagonia-bids-farewell-to-mobile-app\/\">happen<\/a>.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>Vanity is vanity, but once you have set up new, potentially more meaningful,\ntracking metrics than number of app installs such as\n<a href=\"https:\/\/web.dev\/betty-crocker\/#results\">increase of indicators of\npurchase intent<\/a>, you can start tracking those instead.<\/p>\n<h4 id=\"compatibility-with-relevant-browsers\" tabindex=\"-1\">Compatibility with relevant browsers <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#compatibility-with-relevant-browsers\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>Web compatibility is still the\n<a href=\"https:\/\/insights.developer.mozilla.org\/reports\/mdn-web-developer-needs-assessment-2020.html#needs-assessment-top-ten-needs\">main issue<\/a>\nmentioned in developer surveys like Mozilla's, but also in internal surveys that\nGoogle has run. Having to support specific browsers, avoiding or removing a\nfeature that doesn't work across browsers, or making a design look or work the\nsame across browsers are frequently brought up as challenges. Projects such as\n<a href=\"https:\/\/webcompat.com\/\">webcompat.com<\/a> collect user-submitted browser bugs and\ninvite interested developers to fix them. Mozilla operates a\n<a href=\"https:\/\/github.com\/mozilla-extensions\/webcompat-addon\">repository<\/a> with\ninterventions and patches to enable individual sites to run successfully in\nFirefox. WebKit maintains a\n<a href=\"https:\/\/trac.webkit.org\/browser\/webkit\/trunk\/Source\/WebCore\/page\/Quirks.cpp\">quirks list<\/a>\nand\n<a href=\"https:\/\/jobs.apple.com\/search?search=%22WebKit%20Web%20Compatibility%20Analyst%22&amp;sort=relevance\">hires WebKit Web Compatibility Analysts<\/a>.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>Compatibility is the top priority for Web developers and browser vendors alike.\nWith feature testing and progressive enhancement, impressive apps which behave\nwell on all browsers can be built. For an example of this approach, check out\nthe article\n<a href=\"https:\/\/web.dev\/progressively-enhance-your-pwa\/\">Progressively enhance your Progressive Web App<\/a>.<\/p>\n<h4 id=\"tools-and-framework-support\" tabindex=\"-1\">Tools and framework support <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#tools-and-framework-support\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>As well as browser compatibility, Mozilla's\n<a href=\"https:\/\/insights.developer.mozilla.org\/reports\/mdn-web-developer-needs-assessment-2020.html#needs-assessment-top-ten-needs\">2020 developer survey<\/a>\nlikewise showed that developers struggle with tools and frameworks. Supporting\nmultiple frameworks in the same code base, understanding and implementing\nsecurity measures, plus outdated or inaccurate documentation for frameworks and\nlibraries, and keeping up with the large number of new and existing tools or\nframeworks were all cited.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>The tooling and framework situation in the Web development world is infamous for\nbeing confusing and hard to keep up with. In practice, though, companies would\nuse one technology and tooling stack and stay true to it for many years. The\nworld of tech Twitter is one thing, the reality in businesses, where the\ndecades-old jQuery is still (and by a large amount) the\n<a href=\"https:\/\/almanac.httparchive.org\/en\/2021\/javascript#libraries-and-frameworks\">most\npopular framework<\/a>, is the other.<\/p>\n<h4 id=\"security-or-rather-the-theater-of-security-with-certificate-pinning\" tabindex=\"-1\">Security (or rather, the theater of security with certificate pinning) <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#security-or-rather-the-theater-of-security-with-certificate-pinning\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>In platform-specific app development, certificate pinning restricts which\ncertificates are considered valid for a particular app. Instead of allowing any\ntrusted certificate to be used, developers pin the certificate authority issuer,\npublic keys, or even end-entity certificates of their choice. Clients connecting\nto that server will treat all other certificates as invalid and refuse to make\nan HTTPS connection. The hope is that this renders &quot;person-in-the-middle&quot;\nattacks impossible, so platform-specific apps are more &quot;secure&quot; than Web apps,\nwhere traffic can easily be sniffed with browser DevTools. There are ways to\n<a href=\"https:\/\/codeshare.frida.re\/@akabe1\/frida-multiple-unpinning\/\">circumvent pinned certificates<\/a>\non all platforms, so it is mostly the theater of security at this point.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>As outlined\n<a href=\"https:\/\/codeshare.frida.re\/@akabe1\/frida-multiple-unpinning\/\">earlier<\/a>,\ncertificate pinning mostly just increases the effort an attacker has to put into\nsniffing your traffic and reverse-engineering the functioning of your app; but\nit doesn't make it impossible.<\/p>\n<h4 id=\"performance-limitations\" tabindex=\"-1\">Performance limitations <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#performance-limitations\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h4>\n<p>Web applications have seen impressive performance improvements thanks to\nadvanced technologies such as <a href=\"https:\/\/webassembly.org\/\">WebAssembly<\/a> (including\n<a href=\"https:\/\/v8.dev\/features\/simd\">SIMD<\/a>),\n<a href=\"https:\/\/gpuweb.github.io\/gpuweb\/\">WebGPU<\/a>, and general JavaScript engine\nprogress in recent years. Nonetheless, a carefully developed, platform-specific\napp will typically outperform a Web-based application (albeit the situations\nwhere this <em>actually<\/em> matters may be limited). With even high-performance\naudio-editing tools like <a href=\"https:\/\/www.soundtrap.com\/\">Soundtrap<\/a> (thanks to the\n<a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Web_Audio_API\">Web Audio API<\/a> and\n<a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/AudioWorklet\">AudioWorklet<\/a>),\ninteractive development environments like\n<a href=\"https:\/\/jupyter.org\/try\">Jupyter Notebook<\/a>, and graphics-editing tools like\n<a href=\"https:\/\/www.figma.com\/\">Figma<\/a> (thanks to WebAssembly), and of course\ngraphics-intensive games like <a href=\"http:\/\/www.quakejs.com\/\">Quake<\/a> (thanks to\n<a href=\"https:\/\/developer.mozilla.org\/de\/docs\/Web\/API\/WebGL_API\">WebGL<\/a> and\n<a href=\"https:\/\/gpuweb.github.io\/gpuweb\/\">WebGPU<\/a> in the future), the boundaries are\nbeing pushed at a rapid rate.<\/p>\n<h5>How big a challenge is this?<\/h5>\n<p>There are two types of performance problems: those where truly every frame\ncounts, as in gaming or WebXR experiences, and those where apps feel &quot;janky&quot;, or\nunreliable. For the latter, new APIs such as the\n<a href=\"https:\/\/developer.chrome.com\/docs\/web-platform\/view-transitions\/\">View Transitions API<\/a>\ncan help. For the former, WebGPU is probably the most promising API on the\nhorizon. Very rarely, but admittedly sometimes, a device may just be too slow to\nrender a given experience, which clearly happens with native apps, too, where\ndevelopers can specify\n<a href=\"https:\/\/developer.apple.com\/support\/required-device-capabilities\/\">minimum required device capabilities<\/a>.<\/p>\n<h3 id=\"why-is-flutter-so-popular\" tabindex=\"-1\">Why is Flutter so popular? <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#why-is-flutter-so-popular\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h3>\n<p>For <a href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#research-question-2\">research question \u2461<\/a>, one possible explanation is\nthat it is a\n<a href=\"https:\/\/flutter.dev\/#:~:text=Flutter%20is%20Google%27s%20UI%20toolkit%20for%20building%20beautiful%2C%20natively%20compiled%20applications%20for%20mobile%2C%20web%2C%20desktop%2C%20and%20embedded%20devices%20from%20a%20single%20codebase.\">Google-backed<\/a>\ntoolkit for <em>&quot;building beautiful, natively compiled applications for mobile,\nWeb, desktop, and embedded devices from a single codebase&quot;<\/em>. If even Google, as\nthe maker of Android, trusts Flutter enough to build some of its strategic apps\nwith it, such as\n<a href=\"https:\/\/stadia.dev\/blog\/how-flutter-helped-us-make-stadia-controller-setup-better-for-users\/\">Stadia<\/a>\n(RIP) and <a href=\"https:\/\/flutter.dev\/showcase\">Google Ads<\/a> for both Android and iOS,\nand\n<a href=\"https:\/\/developers.googleblog.com\/2019\/05\/Flutter-io19.html\">Assistant apps<\/a> on\nsmart display embedded devices, that is quite a signal to send. Also note how\nWeb and desktop are included in Flutter's output options, which means Flutter is\nno longer limited to just mobile (with submission into app stores as the\ncarrot), and the promise is that it reduces the development cost of apps by the\nnumber of targeted platforms. (Prominent target platform omissions so far are\nApple CarPlay, WearOS, WatchOS, and tvOS.)<\/p>\n<p>An argument that is frequently brought up for Flutter is\n<a href=\"https:\/\/flutter.dev\/docs\/development\/tools\/hot-reload\">hot reloading<\/a>. On the\nbackend, Flutter also\n<a href=\"https:\/\/firebase.google.com\/docs\/flutter\/setup?platform=ios\">plays well with Firebase<\/a>,\nso apps are easy to scale. Important for Web, and as Flutter was initially\ncriticized for rendering everything inaccessibly onto a <code>&lt;canvas&gt;<\/code>, the\nframework now has\n<a href=\"https:\/\/flutter.dev\/docs\/development\/tools\/web-renderers\">two different Web renderers<\/a>\nit can automatically choose from:<\/p>\n<ul>\n<li><strong>HTML renderer:<\/strong> This renderer uses a combination of HTML elements, CSS,\ncanvas elements, and SVG elements, and has a smaller download size.<\/li>\n<li><strong>CanvasKit renderer:<\/strong> This renderer is fully consistent with Flutter mobile\nand desktop, has faster performance with higher widget density, but adds about\n2\u00a0MB in download size.<\/li>\n<\/ul>\n<p>By default, Flutter selects the HTML renderer when the app is running in a\nmobile browser, and the CanvasKit renderer when the app is running in a desktop\nbrowser.<\/p>\n<p>Flutter relies on\n<a href=\"https:\/\/docs.flutter.dev\/development\/ui\/widgets\">a library of pre-made widgets<\/a>\ncalled Cupertino (for the iOS-native look) and Material (for the Android-native\nlook) that allow developers to quickly develop a good-looking application with a\nshared code base. It is worth noting that Flutter-built user interfaces are\nplatform-agnostic because Flutter\u2019s <a href=\"https:\/\/skia.org\/\">Skia<\/a> rendering engine\ndoes not require any platform-specific UI components. (A downside of this\napproach of wrapping everything the app needs instead of reusing platform\nprimitives directly is app size.)<\/p>\n<p>Apps in Flutter are developed in Dart, an object-oriented programming language\nthat supports both just-in-time (JIT) and ahead-of-time (AOT) compilation.\nFlutter compiles directly to native ARM or Intel x64 code, which has a lot of\nperformance advantages. Dart is also easy to pick up for developers coming from\nany other object-oriented programming language.<\/p>\n<p>Flutter\u2019s <a href=\"https:\/\/flutter.dev\/docs\">documentation<\/a> is generally recognized as\nbest in class and its <a href=\"https:\/\/docs.flutter.dev\/cookbook\">cookbook application<\/a>\nmakes getting started with a baseline scaffolding a simple copy and paste job.\nThe Flutter community is thriving and it's easy to find help if you are stuck.<\/p>\n<figure>\n  <img src=\"https:\/\/blog.tomayac.com\/images\/flutter.avif\" ,=\"\" alt=\"Blue cartoon bird.\" width=\"800\" height=\"450\" \/>\n  <figcaption>Dash, the mascot for the Dart language and the Flutter framework.<\/figcaption>\n<\/figure>\n<h2 id=\"conclusions\" tabindex=\"-1\">Conclusions <a class=\"direct-link\" href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/#conclusions\" aria-hidden=\"true\">\ud83d\udd17<\/a><\/h2>\n<p>It is undeniable that amazing apps can be built on the Web. Photoshop, VS Code,\nand Twitter are the stand-out examples in this article, but there are many\nothers. One of the Web's super powers is its linkability, which is hard to beat\non platforms other than the Web. There seems to be a certain tendency for\ncross-platform app frameworks to become less attractive to developers, with the\nnotable exception of Flutter, which allows for Web as one of its target\nplatforms. Reasons for <em>not<\/em> building for the Web are easy to find, but it is\nalso not hard to find counter-arguments to take these reasons apart. Some of\nthem rely on outdated or weak assumptions, for example, PWAs not being welcome\non app stores, or platform-specific apps being more secure than PWAs. Others are\nthings that are in process, like closing the app gap by adding missing Web\nplatform APIs. Some reasons apply equally to both worlds, for example, for\nhiring to be a challenge. I could go on, but in the end it all boils down to the\nconcrete circumstances your use case needs to be built for. In this article, I\nhave given a number of really strong arguments for building for the Web, while\nalso not hiding the fact that the Web is a platform that is still not perfect,\nand pointing out that other alternatives exist. And as the three stand-out\nexamples have shown, the decision is also not mutually exclusive. You can build\na powerful Web app, and have a great, platform-specific application at the same\ntime. It is up to you to decide if you want to. And as I said in the title:\n<em>&quot;Not everyone's currently building for the Web, but probably more people\nshould&quot;<\/em>. In my humble opinion.<\/p>\n\n\t\t\t<p>\n\t\t\t\t<img alt=\"Thomas Steiner\" width=\"32\" height=\"32\" src=\"https:\/\/blog.tomayac.com\/feed.php?dl=https%3A%2F%2Fblog.tomayac.com%2F2023%2F01%2F16%2Fwhy-not-everyones-building-for-the-web-yet-but-why-potentially-they-should%2F&dp=%2F2023%2F01%2F16%2Fwhy-not-everyones-building-for-the-web-yet-but-why-potentially-they-should%2F&dt=Not%20everyone's%20currently%20building%20for%20the%20Web%2C%20but%20probably%20more%20people%20should\" alt=\"\">\n\t\t\t\t<br\/>This post appeared first on <a href=\"https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/\">https:\/\/blog.tomayac.com\/2023\/01\/16\/why-not-everyones-building-for-the-web-yet-but-why-potentially-they-should\/<\/a>.\n\t\t\t<\/p>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\t\t\tIf you want to build an app, you have several ways of doing it. You can build a<br \/>\nplatform-specific app for the platforms you care about, for example, Windows,<br \/>\nAndroid, and iOS. In which case you would build three apps. You can also build a<br \/>\n(progress&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"intlwemo_wallet_address":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-3456","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/comments?post=3456"}],"version-history":[{"count":1,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3456\/revisions"}],"predecessor-version":[{"id":3458,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/posts\/3456\/revisions\/3458"}],"wp:attachment":[{"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tomayac.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}