{"id":4055,"date":"2022-02-02T15:27:18","date_gmt":"2022-02-02T15:27:18","guid":{"rendered":"https:\/\/ionicframework.com\/blog\/?p=4055"},"modified":"2022-02-02T15:49:22","modified_gmt":"2022-02-02T15:49:22","slug":"an-angular-dev-tries-svelte","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte","title":{"rendered":"An Angular Dev Tries Svelte"},"content":{"rendered":"<p>If you ask anyone who knows me, they would say my favorite framework for building apps is Angular. While I do like React and Vue as well, Angular to me has always felt like home. I feel the most productive when working in Angular and the most confident in the code I write. But it&#8217;s always good to explore other technologies and expand your knowledge. With that in mind, I wanted to try and learn <a href=\"http:\/\/svelte.dev\">SvelteJS<\/a> as I build a new app using <a href=\"https:\/\/capacitorjs.com\">Capacitor<\/a>. So, what does an Angular dev think of Svelte?<\/p>\n<p><!--more--><\/p>\n<h2>Getting Started Process<\/h2>\n<p>When getting started with Angular, you&#8217;re encouraged to make use of the Angular CLI in starting new projects. The Angular CLI is an all-in-one toolkit for starting apps, building apps, and adding new features as you develop your apps. This toolkit provides a solid cornerstone for any developer. Svelte (as far as I know) doesn&#8217;t provide this. Instead, they provide a simple starter template with a Rollup config. Based on their site, if you want to get started, you can simply use the <code>sveltjs\/template<\/code> and clone the project via <code>degit<\/code>:<\/p>\n<pre><code class=\"language-shell\">npx degit sveltejs\/template my-svelte-project\ncd my-svelte-project\nnpm install\nnpm run dev\n<\/code><\/pre>\n<p>By running this code, you get a bare-bones project with a single &#8220;hello world&#8221; component.<\/p>\n<p>This isn&#8217;t necessarily a 1:1 comparison, as the scope of Svelte is very different compared to something like Angular. While Angular is clearly an app framework, Svelte is more closely aligned to a UI toolkit, something like React. While you can build an app with Svelte, you are pulling together different libraries, packages, and more to get something similar to Angular. Contently, the Svelte team has put together <a href=\"https:\/\/kit.svelte.dev\">SvelteKit<\/a>, a framework for building apps powered by Svelte. SvelteKit, while interesting, is not what I&#8217;m going to focus on for my app, so I won&#8217;t be covering it here.<\/p>\n<p>Regardless of the differences between Angular\/Svelte, comparing the two shows some significant differences. With Svelte, once you get the template cloned and set up, you are free to customize the tools as much as you&#8217;d like. Want to swap out a Rollup plugin with something different? Want to customize the output and bundling process? Svelte will give you the full Rollup config, and you are expected to know how to configure that.<\/p>\n<p>Angular on the other hand abstracts that away, so you aren&#8217;t really dealing with the underlying tools directly. Angular does this to provide an optimal experience for all users. If you wanted to swap out a tool that gets used in the build chain, it&#8217;s not something that can be done without diving into the Angular build process.<\/p>\n<p>Both of these approaches have their value, but it is nice to know that I could mess around with the build process pretty easily.<\/p>\n<h2>Syntax and Semantics<\/h2>\n<p>With Angular, there is a simple syntax for working with events and props for components:<\/p>\n<ul>\n<li><code>[prop]<\/code>: props can have dynamic bindings by surrounding the prop name with square brackets.<\/li>\n<li><code>(event)<\/code>: event bindings can be made by wrapping the event name with parentheses<\/li>\n<\/ul>\n<p>Svelte has a similar syntax for this as well<\/p>\n<ul>\n<li><code>prop={val}<\/code>: props can have dynamic values by wrapping the value with curly braces.<\/li>\n<li><code>on:eventname={func}<\/code>: event bindings can be made by using the <code>on:<\/code> prefix followed by the event name.<\/li>\n<\/ul>\n<p>This made it very easy for me to understand how things date gets passed around.<\/p>\n<p>What was a change was working with dynamic markup or content. For example, if you want to dynamically render some content in Angular, the syntax uses this <code>*ngIf<\/code> syntax.<\/p>\n<pre><code class=\"language-html\">&lt;div *ngIf=&quot;condition&quot;&gt;\n  I will only render if &quot;condition&quot; evaluates to true.\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>In Svelte, the syntax is a bit different<\/p>\n<pre><code class=\"language-html\">{#if condition}\n&lt;div&gt;I will only render if &quot;condition&quot; evaluates to true.&lt;\/div&gt;\n{\/if}\n<\/code><\/pre>\n<p>This &#8220;block&#8221; syntax, while different, is pretty easy to pick up once you work with it a few times.<\/p>\n<p>The big takeaway here is that the syntax between Angular and Svelte is different, they have the same semantics. Meaning that there is one way to do property bindings, one way to event binding. So if you&#8217;re looking to get into Svelte from Angular, once you know the syntax, you&#8217;ll feel right at home.<\/p>\n<h2>Component Structure<\/h2>\n<p>Wrapping up this comparison, let&#8217;s look at how components are structured. For Angular developers, we pretty used to seeing something like this:<\/p>\n<pre><code class=\"language-ts\">@Component({\n  selector: &#039;app-root&#039;,\n  templateUrl: &#039;app.component.html&#039;,\n  styleUrls: [&#039;app.component.scss&#039;],\n})\nexport class AppComponent {\n  constructor() {}\n}\n<\/code><\/pre>\n<p>For Angular, a component is basically just a class. Where it gets interesting is the <code>@Component<\/code> decorator that tells the Angular compiler to take the template and styles pass, create a component, and use the class as the logic. Svelte has similar concepts, but uses a different syntax based on tags.<\/p>\n<p>For our <code>AppComponent<\/code>, in Svelte, we&#8217;d write this as:<\/p>\n<pre><code class=\"language-html\">&lt;!-- App.svelte --&gt;\n&lt;script&gt;\n  let name = &#039;World&#039;;\n&lt;\/script&gt;\n\n&lt;div&gt;Hello {name}!&lt;\/div&gt;\n\n&lt;style&gt;\n  div {\n    text-align: center;\n    padding: 1em;\n    max-width: 240px;\n    margin: 0 auto;\n  }\n&lt;\/style&gt;\n<\/code><\/pre>\n<p>This approach is pretty similar to how Vue components are built, and this single file component pattern is super popular in other frameworks. Instead of having multiple files for the template, the styles, and the JavaScript, we just have a single file that holds all the pieces we need. I&#8217;m still on the fence with single file components, but I can see why people like them. It&#8217;s super nice to be able to stay in one place when you need to build out a component and not have to jump around to multiple files.<\/p>\n<p>Want to use a component inside another component? With Angular, we have this selector key in the <code>@Component<\/code> decorator, which we use in our templates. For Svelte, though, we can just import the component and use the file name as the tag name.<\/p>\n<pre><code class=\"language-html\">&lt;!-- App.svelte --&gt;\n&lt;script&gt;\n  import Item from &#039;.\/Item.svelte&#039;;\n  let name = &quot;World&quot;;\n&lt;\/script&gt;\n\n&lt;Item user={name}\/&gt;\n<\/code><\/pre>\n<p>I really like this as it makes composing things super quick. Instead of having to discover the component tags, I just import the file and use its name as the tag!<\/p>\n<h2>Diving Deeper<\/h2>\n<p>While we haven&#8217;t gone over all the differences between Angular and Svelte, it&#8217;s pretty clear that Svelte has a lot of unique features that can make it compelling for certain projects. I&#8217;ll be following up on this as I build out my new app, so be on the lookout for more in this series. Until next time, happy coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you ask anyone who knows me, they would say my favorite framework for building apps is Angular. While I do like React and Vue as well, Angular to me has always felt like home. I feel the most productive when working in Angular and the most confident in the code I write. But it&#8217;s [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":4057,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"0","publish_post_category":"23","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"541615","discourse_permalink":"https:\/\/forum.ionicframework.com\/t\/an-angular-dev-tries-svelte\/220030","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[123],"tags":[60,239],"class_list":["post-4055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-perspectives","tag-angular","tag-svelte"],"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>An Angular Dev Tries Svelte - Ionic Blog<\/title>\n<meta name=\"description\" content=\"Have you mainly used one framework for a long time? It may be time to check out Svelte. Let&#039;s look at how Svelte compares against Angular.\" \/>\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\/an-angular-dev-tries-svelte\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An Angular Dev Tries Svelte\" \/>\n<meta property=\"og:description\" content=\"Have you mainly used one framework for a long time? It may be time to check out Svelte. Let&#039;s look at how Svelte compares against Angular.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-02T15:27:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-02T15:49:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.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=\"Mike Hartington\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mhartington\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mike Hartington\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte\"},\"author\":{\"name\":\"Mike Hartington\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\"},\"headline\":\"An Angular Dev Tries Svelte\",\"datePublished\":\"2022-02-02T15:27:18+00:00\",\"dateModified\":\"2022-02-02T15:49:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte\"},\"wordCount\":986,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png\",\"keywords\":[\"Angular\",\"Svelte\"],\"articleSection\":[\"Perspectives\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte\",\"url\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte\",\"name\":\"An Angular Dev Tries Svelte - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png\",\"datePublished\":\"2022-02-02T15:27:18+00:00\",\"dateModified\":\"2022-02-02T15:49:22+00:00\",\"description\":\"Have you mainly used one framework for a long time? It may be time to check out Svelte. Let's look at how Svelte compares against Angular.\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png\",\"width\":1600,\"height\":880,\"caption\":\"how does svelte compare to angular\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"An Angular Dev Tries Svelte\"}]},{\"@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\/c8c92b04d526adb925ea514c619a267b\",\"name\":\"Mike Hartington\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"caption\":\"Mike Hartington\"},\"description\":\"Director of Developer Relations\",\"sameAs\":[\"https:\/\/twitter.com\/mhartington\",\"https:\/\/x.com\/mhartington\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/mike\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"An Angular Dev Tries Svelte - Ionic Blog","description":"Have you mainly used one framework for a long time? It may be time to check out Svelte. Let's look at how Svelte compares against Angular.","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\/an-angular-dev-tries-svelte","og_locale":"en_US","og_type":"article","og_title":"An Angular Dev Tries Svelte","og_description":"Have you mainly used one framework for a long time? It may be time to check out Svelte. Let's look at how Svelte compares against Angular.","og_url":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte","og_site_name":"Ionic Blog","article_published_time":"2022-02-02T15:27:18+00:00","article_modified_time":"2022-02-02T15:49:22+00:00","og_image":[{"width":1600,"height":880,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png","type":"image\/png"}],"author":"Mike Hartington","twitter_card":"summary_large_image","twitter_creator":"@mhartington","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Mike Hartington","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte"},"author":{"name":"Mike Hartington","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b"},"headline":"An Angular Dev Tries Svelte","datePublished":"2022-02-02T15:27:18+00:00","dateModified":"2022-02-02T15:49:22+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte"},"wordCount":986,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png","keywords":["Angular","Svelte"],"articleSection":["Perspectives"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte","url":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte","name":"An Angular Dev Tries Svelte - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png","datePublished":"2022-02-02T15:27:18+00:00","dateModified":"2022-02-02T15:49:22+00:00","description":"Have you mainly used one framework for a long time? It may be time to check out Svelte. Let's look at how Svelte compares against Angular.","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png","width":1600,"height":880,"caption":"how does svelte compare to angular"},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/an-angular-dev-tries-svelte#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"An Angular Dev Tries Svelte"}]},{"@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\/c8c92b04d526adb925ea514c619a267b","name":"Mike Hartington","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","caption":"Mike Hartington"},"description":"Director of Developer Relations","sameAs":["https:\/\/twitter.com\/mhartington","https:\/\/x.com\/mhartington"],"url":"https:\/\/ionic.io\/blog\/author\/mike"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2022\/02\/svelte-angular-feature-image.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4055","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\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=4055"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/4055\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/4057"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=4055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=4055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=4055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}