{"id":3198,"date":"2020-03-13T13:37:00","date_gmt":"2020-03-13T13:37:00","guid":{"rendered":"https:\/\/ionicframework.com\/blog\/?p=3198"},"modified":"2020-10-16T18:57:11","modified_gmt":"2020-10-16T18:57:11","slug":"thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again","title":{"rendered":"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again"},"content":{"rendered":"<p>Long before joining Ionic, I <a href=\"https:\/\/www.netkow.com\/categories\/phonegap\">built web-based apps<\/a> (using jQuery and Knockout.js!) and deployed them to iOS and Android using Cordova. They weren\u2019t pretty (I didn\u2019t have something <a href=\"https:\/\/ionicframework.com\/docs\/components\">like this<\/a> \ud83d\ude09 available), the code was messy, but they got the job done: I was a web developer building mobile apps using one codebase!<\/p>\n<p>Despite my enthusiasm, I quickly ran into issues that would continue to haunt me over time.<\/p>\n<ul>\n<li><strong>Limited cross-platform deployment:<\/strong> I wanted to make my apps available on iOS, Android, and the web. Cordova\u2019s focus on mobile, as well as limited browser APIs, made it challenging, if not impossible, to reach all platforms successfully.<\/li>\n<li><strong>Opaque native configuration:<\/strong> Builds would fail or features wouldn\u2019t work as expected, and I struggled to solve them since I didn\u2019t understand Cordova\u2019s native project abstractions.<\/li>\n<li><strong>Stability:<\/strong> I dreaded updating the apps because native plugins would constantly break between new mobile OS versions or conflicting plugin versions.<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p>Those were dark times. However, I\u2019ve recently been building a new Real App\u2122\ufe0f using Capacitor and well, it\u2019s made me fall in love with mobile all over again. In this post, I\u2019ll cover how Capacitor solves all of these issues, including cross-platform support, easy native configuration, long-term stability, and the built-in Cordova migration support.<\/p>\n<blockquote><p>\n  Side-note: If you\u2019re not already familiar with Capacitor, you can find a ton of info <a href=\"https:\/\/ionicframework.com\/blog\/announcing-capacitor-1-0\/\">here<\/a> and <a href=\"https:\/\/capacitorjs.com\/docs\/\">here<\/a>. TL;DR &#8211; it\u2019s a new native runtime for building cross-platform mobile, desktop, and web apps, built by the Ionic team. You can think of it as a spiritual successor to Cordova that applies many hard-earned lessons from the last 10 years of hybrid mobile development.\n<\/p><\/blockquote>\n<p>And now, let\u2019s review how Capacitor applies those lessons, resulting in a much-improved developer experience.<\/p>\n<h2>Beyond Mobile<\/h2>\n<p>Cordova\u2019s focus on mobile, coupled with limited web browser APIs, made it challenging, if not impossible, to reach all platforms with a single codebase successfully.<\/p>\n<p>Recognizing this, Capacitor embraces a web-first approach with its Core APIs, meaning they work on the web, iOS, Android, and desktop. Since they provide access to commonly needed functionality, they cover much of the core Cordova plugins while also including some new features.<\/p>\n<p>The Capacitor Camera API is a great example. With a single method call, you can take a photo with the device\u2019s camera on the web, iOS, and Android:<\/p>\n<pre><code class=\"language-typescript\">import { Plugins, CameraResultType } from &#039;@capacitor\/core&#039;;\nconst { Camera } = Plugins;\n\nasync takePicture() {\n  const image = await Camera.getPhoto({\n    quality: 90,\n    resultType: CameraResultType.Uri\n  });\n\n  imageElement.src = image.webPath;\n}\n<\/code><\/pre>\n<p>That said, what about features that aren\u2019t available on the web? In those cases, <a href=\"https:\/\/capacitorjs.com\/docs\/plugins\/web\">web plugins<\/a> can be built to act as a fallback. When in doubt, check <a href=\"https:\/\/caniuse.com\/\">Can I Use<\/a> to see what\u2019s possible.<\/p>\n<p>Additionally, I was thrilled to learn that browser APIs have evolved to become more feature-rich since I began building hybrid apps years ago. As you can see from my favorite reference site, <a href=\"https:\/\/whatwebcando.today\/\">What Web Can Do Today<\/a>, device integration is more powerful than ever. Everything from Bluetooth to offline storage to virtual\/augmented reality is available today.<\/p>\n<p>Pairing Capacitor with these new browser APIs, I could build my app quickly in the browser like before, while also ensuring true cross-platform deployment.<\/p>\n<h2>Easy Native Project Configuration<\/h2>\n<p>Cordova leverages a single configuration file that abstracts away native project details from the developer, which is great for managing all of your configurations together. However, when project builds fail or features don\u2019t work as expected, it\u2019s difficult to understand what the issue is and where it\u2019s occurring (is it Cordova tooling or native project code?) since any applied changes are a black box to web developers. As a result, it\u2019s too easy to get stuck on a problem completely unrelated to app development.<\/p>\n<p>Capacitor takes the opposite approach, fully embracing configuration via native IDEs. There are two steps to implementing a native mobile feature with Capacitor: configuring the native project and handling the feature \u201cthe Capacitor way\u201d within the app\u2019s code.<\/p>\n<h3>Native Project Management<\/h3>\n<p>I\u2019ll admit that I was initially skeptical about Capacitor\u2019s approach to native project management. Despite Cordova&#8217;s issues, I <em>liked<\/em> having a single configuration file to manage my native iOS and Android projects. Moving to Capacitor meant managing the native projects myself. Naturally, this was intimidating because I thought the whole point of the hybrid app approach was to avoid learning native app development. How much time would this take to learn? <em>Ugh<\/em>.<\/p>\n<p>After trying it though, I was pleasantly surprised. Despite being only somewhat familiar with the native IDEs (Xcode and Android Studio), it turns out that the learning curve is quite small. You can go as shallow or deep into them as needed. Most of the time you just make small manual changes to <code>AndroidManifest.xml<\/code> (Android) or <code>Info.plist<\/code> (iOS).<\/p>\n<p>When implementing complex mobile features (think: deep links, OAuth), you research the topic (example: \u201cios deep links\u201d leads you to Apple\u2019s <a href=\"https:\/\/developer.apple.com\/ios\/universal-links\/\">docs<\/a>) and follow the exact steps from the official documentation. Unlike Cordova, which abstracts these details away from you, features are implemented using the same instructions a native developer follows.<\/p>\n<h3>Implementing Features<\/h3>\n<p>Once configuration is complete, implementing the feature \u201cthe Capacitor way\u201d isn\u2019t all that challenging or \u201ccustom.\u201d Depending on the use case, this could mean using a Capacitor Core API, a community plugin, or simply regular code. The effort varies, but generally, it\u2019s straightforward.<\/p>\n<p>As a bonus, if you do learn native mobile development someday (or <a href=\"https:\/\/capacitorjs.com\/docs\/plugins\">build a Capacitor plugin<\/a>), you\u2019ll be better prepared because you understand the native ecosystem already.<\/p>\n<p>Regardless of which cross-platform solution you choose, you have to learn mobile concepts anyway. Why not learn them the right way?<\/p>\n<h2>Stability<\/h2>\n<p>While we usually look forward to new software features and improvements, I dreaded updating my Cordova apps. Native plugins would constantly break between new mobile OS versions and conflicting plugin versions would mean I could update one plugin but not the other. Without a native development background, I got stuck often, forced to post on online forums and just hope for an answer.<\/p>\n<p>While Capacitor doesn\u2019t fully resolve the above challenges, it does a great job of equipping you to handle them. After just a bit of time developing apps with Capacitor, I feel more confident implementing features directly in each native project, as well as in  Capacitor\u2019s long-term stability as well.<\/p>\n<p>Given that Capacitor gives you full control over native project management, many native features don\u2019t require a plugin anymore (like deep linking &#8211; new guide coming soon!), so app size is reduced and performance is improved. Less code to maintain (especially if it\u2019s not yours!) is a huge plus.<\/p>\n<p>Also, most app features are configured once, then never touched again. And, given Apple and Google\u2019s strong attention to backward compatibility, it could be years (if ever) before you need to make changes.<\/p>\n<p>When you do run into issues while developing an app, it\u2019s easy to search online for the answer. With no abstraction layer in place, you can search for and follow the answer as a native developer would. Personally, I feel much more confident in my ability to make changes and not get stuck.<\/p>\n<h2>Migration: Moving from Cordova to Capacitor<\/h2>\n<p>If by now you\u2019re sold on giving Capacitor a try, you\u2019ll be thrilled to learn that Capacitor has built-in Cordova migration support, designed to make the process as seamless as possible. Here\u2019s a sampling of what it offers.<\/p>\n<p>When you add a new platform (iOS, Android, etc.) to the project, a warning appears if an <a href=\"https:\/\/capacitorjs.com\/docs\/cordova\/known-incompatible-plugins\">incompatible plugin<\/a> is found. Most of the time, this is because Capacitor has an equivalent core plugin, or it simply isn\u2019t needed anymore. Here\u2019s <code>cordova-plugin-splash-screen<\/code> after running <code>ionic cap add ios<\/code> for example:<\/p>\n<blockquote><p>\n  Found 1 incompatible Cordova plugin for ios, skipped install<br \/>\n      cordova-plugin-splashscreen (5.0.2)\n<\/p><\/blockquote>\n<p>Also, if you install additional Cordova plugins at any time, then sync the project (this updates the native platforms and their dependencies), Capacitor tells you what you need to do with Cordova plugins that are supported but need additional native project configuration. Here\u2019s the <a href=\"https:\/\/ionicframework.com\/docs\/enterprise\/deeplinks\">deep links plugin<\/a> warning, for example:<\/p>\n<blockquote><p>\n  $ ionic cap sync<br \/>\n  [warn] Plugin @ionic-enterprise\/deeplinks might require you to add\n<\/p><\/blockquote>\n<pre><code class=\"language-xml\">    &lt;dict&gt;\n      &lt;key&gt;CFBundleURLSchemes&lt;\/key&gt;\n      &lt;array&gt;\n        &lt;string&gt;$URL_SCHEME&lt;\/string&gt;\n      &lt;\/array&gt;\n    &lt;\/dict&gt;\n<\/code><\/pre>\n<blockquote><p>\n  in the existing CFBundleURLTypes entry of your Info.plist to work\n<\/p><\/blockquote>\n<p>Cordova preferences are migrated over, too. When Capacitor is added to an existing Cordova project, it reads the <code>&lt;preferences&gt;<\/code> in <code>config.xml<\/code> and brings them into <code>capacitor.config.json<\/code>. You can manually add more preferences to the <code>cordova.preferences<\/code> object, too.<\/p>\n<pre><code class=\"language-json\">\/\/ capacitor.config.json\n{\n  &quot;cordova&quot;: {\n    &quot;preferences&quot;: {\n      &quot;ScrollEnabled&quot;: &quot;false&quot;,\n      &quot;android-minSdkVersion&quot;: &quot;19&quot;,\n   }\n}\n<\/code><\/pre>\n<p>This is just a sampling of how smooth the migration process is. See complete migration details <a href=\"https:\/\/capacitorjs.com\/docs\/cordova\/migrating-from-cordova-to-capacitor\">here<\/a>.<\/p>\n<hr \/>\n<p>We\u2019ve come a long way since I started building hybrid mobile apps years ago. These days, I\u2019m more productive than ever and loving mobile development again.<\/p>\n<p>What\u2019s been your experience with Capacitor been like so far? Let us know in the comments below. If you haven&#8217;t tried out Capacitor yet and you\u2019d like to give it a try, check out our <a href=\"https:\/\/ionicframework.com\/docs\/intro\/first-app\">new tutorial here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Long before joining Ionic, I built web-based apps (using jQuery and Knockout.js!) and deployed them to iOS and Android using Cordova. They weren\u2019t pretty (I didn\u2019t have something like this \ud83d\ude09 available), the code was messy, but they got the job done: I was a web developer building mobile apps using one codebase! Despite my [&hellip;]<\/p>\n","protected":false},"author":62,"featured_media":3199,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[123],"tags":[151,28,173],"class_list":["post-3198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-perspectives","tag-capacitor","tag-cordova","tag-mobile"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Thanks to Capacitor, I\u2019ve fallen in love with mobile development again - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again\" \/>\n<meta property=\"og:description\" content=\"Long before joining Ionic, I built web-based apps (using jQuery and Knockout.js!) and deployed them to iOS and Android using Cordova. They weren\u2019t pretty (I didn\u2019t have something like this \ud83d\ude09 available), the code was messy, but they got the job done: I was a web developer building mobile apps using one codebase! Despite my [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-13T13:37:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-16T18:57:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"880\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matt Netkow\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dotNetkow\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matt Netkow\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again\"},\"author\":{\"name\":\"Matt Netkow\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/93c8b2fe110f183510c6285b0de40790\"},\"headline\":\"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again\",\"datePublished\":\"2020-03-13T13:37:00+00:00\",\"dateModified\":\"2020-10-16T18:57:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again\"},\"wordCount\":1490,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png\",\"keywords\":[\"Capacitor\",\"Cordova\",\"mobile\"],\"articleSection\":[\"Perspectives\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again\",\"url\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again\",\"name\":\"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png\",\"datePublished\":\"2020-03-13T13:37:00+00:00\",\"dateModified\":\"2020-10-16T18:57:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png\",\"width\":1600,\"height\":880},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/93c8b2fe110f183510c6285b0de40790\",\"name\":\"Matt Netkow\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg\",\"caption\":\"Matt Netkow\"},\"sameAs\":[\"https:\/\/x.com\/dotNetkow\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/mattnetkow\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again - Ionic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again","og_locale":"en_US","og_type":"article","og_title":"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again","og_description":"Long before joining Ionic, I built web-based apps (using jQuery and Knockout.js!) and deployed them to iOS and Android using Cordova. They weren\u2019t pretty (I didn\u2019t have something like this \ud83d\ude09 available), the code was messy, but they got the job done: I was a web developer building mobile apps using one codebase! Despite my [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again","og_site_name":"Ionic Blog","article_published_time":"2020-03-13T13:37:00+00:00","article_modified_time":"2020-10-16T18:57:11+00:00","og_image":[{"width":1600,"height":880,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png","type":"image\/png"}],"author":"Matt Netkow","twitter_card":"summary_large_image","twitter_creator":"@dotNetkow","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Matt Netkow","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again"},"author":{"name":"Matt Netkow","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/93c8b2fe110f183510c6285b0de40790"},"headline":"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again","datePublished":"2020-03-13T13:37:00+00:00","dateModified":"2020-10-16T18:57:11+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again"},"wordCount":1490,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png","keywords":["Capacitor","Cordova","mobile"],"articleSection":["Perspectives"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again","url":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again","name":"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png","datePublished":"2020-03-13T13:37:00+00:00","dateModified":"2020-10-16T18:57:11+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png","width":1600,"height":880},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/thanks-to-capacitor-ive-fallen-in-love-with-mobile-development-again#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Thanks to Capacitor, I\u2019ve fallen in love with mobile development again"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/93c8b2fe110f183510c6285b0de40790","name":"Matt Netkow","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/07\/mattnetkow-150x150.jpg","caption":"Matt Netkow"},"sameAs":["https:\/\/x.com\/dotNetkow"],"url":"https:\/\/ionic.io\/blog\/author\/mattnetkow"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/03\/cap-img.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=3198"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/3199"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=3198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=3198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=3198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}