{"id":3081,"date":"2020-02-11T18:37:58","date_gmt":"2020-02-11T18:37:58","guid":{"rendered":"https:\/\/ionicframework.com\/blog\/?p=3081"},"modified":"2020-10-15T22:14:28","modified_gmt":"2020-10-15T22:14:28","slug":"announcing-ionic-5","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/announcing-ionic-5","title":{"rendered":"Announcing Ionic 5!"},"content":{"rendered":"<p style=\"font-size:25px; line-height: 150%;\">Today, I&#8217;m thrilled to announce Ionic Framework 5 (Magnesium)! \ud83c\udf89<\/p>\n<p style=\"font-size:25px; line-height: 150%;\">This release includes iOS 13 design updates, a brand new API for creating your own <a href=\"https:\/\/ionicframework.com\/blog\/introducing-ionic-animations\/\" target=\"_blank\" rel=\"noopener\">custom animations<\/a>, revamped <a href=\"https:\/\/ionicframework.com\/blog\/announcing-ionicons-5\/\" target=\"_blank\" rel=\"noopener\">Ionicons<\/a>, updated Ionic colors, new starter designs, improvements to component customization, and more!<\/p>\n<p style=\"font-size:25px; line-height: 150%;\">All of these changes are made in the core of Ionic Framework, which also applies to our Angular, React, and Vue (beta) integrations. Yes, if you haven\u2019t heard yet, we launched our <a href=\"https:\/\/ionicframework.com\/blog\/announcing-ionic-react\/\" target=\"_blank\" rel=\"noopener\">official React<\/a> support this past October!<\/p>\n<p><em>Attend our upcoming live walkthrough of Ionic 5, hosted by the Ionic team. <strong><a href=\"http:\/\/bit.ly\/3bXIXsK\" rel=\"noopener\" target=\"_blank\">Register here<\/a><\/strong> <\/em><\/p>\n<h2>Easy Upgrade \u26f5\ufe0f<\/h2>\n<p>You may be concerned about the upgrade process due to the fact that this is a major version release, but <em>fret not!<\/em> When we migrated to follow the <a href=\"https:\/\/ionicframework.com\/docs\/intro\/versioning\" target=\"_blank\" rel=\"noopener\">semantic versioning<\/a> convention, we committed ourselves to publish a major release when any known incompatible API changes were introduced. So in this case, the major version just indicates that our public API has been updated. And because <a href=\"https:\/\/ionicframework.com\/blog\/introducing-ionic-4-ionic-for-everyone\/\" target=\"_blank\" rel=\"noopener\">we now use Web Components<\/a>, API changes are handled separately between our UI components and the JavaScript framework.<\/p>\n<p>Long story short: for those on v4, <strong>this upgrade should be easy.<\/strong> Now, let\u2019s dive in and see what\u2019s new!<\/p>\n<p><!--more--><\/p>\n<h2>iOS Design \ud83c\udf4e<\/h2>\n<p>The largest change in this release is a massive design upgrade across our UI components. Apple recently released iOS 13, which updated the design of many components and thus warranted some updates to our own. Let&#8217;s check out some of the changes we made to match native iOS!<\/p>\n<h3>Segment<\/h3>\n<p>The iOS Segment design changed drastically from the previous iOS version. Prior to iOS 13, borders and a filled background were used to differentiate between checked and unchecked buttons. With the latest design update, a single indicator is now used to slide between the buttons, checking the one it ends on. This update includes a gesture that can be used to drag the indicator. Below is a comparison between Ionic 4 and Ionic 5.<\/p>\n<div class=\"split\">\n<figure><figcaption>Segment in Ionic 4: Dark Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/segment-4.mov\" type=\"video\/mp4\"><\/video><br \/>\n<\/figure>\n<figure><figcaption>Segment in Ionic 5: Dark Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/segment-5.mov\"><\/video><br \/>\n<\/figure>\n<\/div>\n<p>Due to the nature of this update, there were some <a href=\"https:\/\/github.com\/ionic-team\/ionic\/blob\/master\/BREAKING.md#segment\" rel=\"noopener\" target=\"_blank\">breaking changes<\/a> introduced. Other than any updates related to the breaking changes, no changes need to be made to use the new Segment design. See the <a href=\"https:\/\/ionicframework.com\/docs\/api\/segment#usage\" target=\"_blank\" rel=\"noopener\">Segment documentation<\/a> for usage information.<\/p>\n<h3>Header<\/h3>\n<p>iOS introduced the idea of a collapsible header and different sized titles in previous versions. In order to support this, we\u2019ve introduced some properties that can easily be added to the header &amp; title components to get shrinking large titles, small titles, and collapsible buttons.<\/p>\n<h3>Large Title<\/h3>\n<p>The large title in iOS collapses into a standard-sized title when the content scrolls beyond a certain point. It can also be used without any collapsing if desired.<\/p>\n<div class=\"split\">\n<figure><figcaption>Large Title: Light Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/large-title-light.mov\" type=\"video\/mp4\"><\/video><br \/>\n<\/figure>\n<figure><figcaption>Large Title: Dark Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/large-title-dark.mov\"><\/video><br \/>\n<\/figure>\n<\/div>\n<p>In order to achieve this, the header needs to be added twice: a header with a standard title above the content, and a collapsible header with a large title inside of the content. In addition to being able to collapse the header, Buttons and a Searchbar inside of the collapsible header can also collapse. See the documentation on <a href=\"https:\/\/ionicframework.com\/docs\/api\/title#collapsible-large-titles\" target=\"_blank\" rel=\"noopener\">Collapsible Large Titles<\/a> for usage information.<\/p>\n<h3>Small Title<\/h3>\n<p>The small title, also known as a header note, is generally used inside of a toolbar above another toolbar that contains a standard-sized title. In native apps, it is most often used in combination with <a href=\"https:\/\/ionicframework.com\/docs\/api\/modal#swipeable-modals\" target=\"_blank\" rel=\"noopener\">Swipe to Close Modals<\/a>. See the videos in the section below for a visual representation of the small title.<\/p>\n<p>See the <a href=\"https:\/\/ionicframework.com\/docs\/api\/title#usage\" target=\"_blank\" rel=\"noopener\">Title documentation<\/a> for usage information.<\/p>\n<h3>Swipe to Close Modal<\/h3>\n<p>The Swipe to Close Modal is something often seen in iOS now. Instead of displaying a modal that covers the entire screen and requires the user to tap a button to close it, it will display a modal that is inset with the page behind it pushed back. This update also includes a gesture to drag the modal down to close it.<\/p>\n<div class=\"split\">\n<figure><figcaption>Swipeable Modal: Light Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/modal-light.mov\" type=\"video\/mp4\"><\/video><br \/>\n<\/figure>\n<figure><figcaption>Swipeable Modal: Dark Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/modal-dark.mov\"><\/video><br \/>\n<\/figure>\n<\/div>\n<p>In order to enable a swipe to close modal, <code>swipeToClose<\/code> and <code>presentingElement<\/code> need to be passed upon modal creation. See the documentation on <a href=\"https:\/\/ionicframework.com\/docs\/api\/modal#swipeable-modals\" target=\"_blank\" rel=\"noopener\">Swipeable Modals<\/a> for more information.<\/p>\n<h3>Menu Overlay Type<\/h3>\n<p>In prior versions of iOS, the side menu used a <code>&quot;reveal&quot;<\/code> type menu which pushed the main content over to reveal the menu. The new iOS design features a menu that will overlay the content with an updated animation.<\/p>\n<div class=\"split\">\n<figure><figcaption>Overlay Menu: Light Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/menu-light.mov\" type=\"video\/mp4\"><\/video><br \/>\n<\/figure>\n<figure><figcaption>Overlay Menu: Dark Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/menu-dark.mov\"><\/video><br \/>\n<\/figure>\n<\/div>\n<p>No changes need to be made to take advantage of this new menu design. However, if you prefer the old way the menu type can be set back to <code>&quot;reveal&quot;<\/code>.<\/p>\n<h3>Refresher<\/h3>\n<p>The Refresher pulling icon in iOS has been updated in native applications to be above a header with a large title. In addition to that, as you pull down on the content the spinner tick marks will gradually be displayed until the content is pulled down enough to where all ticks are seen and then it will begin to rotate. While updating the iOS refresher, we were able to use the same logic to completely redesign the Material Design refresher as well.<\/p>\n<div class=\"split\">\n<figure><figcaption>Refresher: Light Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/refresher-light.mov\" type=\"video\/mp4\"><\/video><br \/>\n<\/figure>\n<figure><figcaption>Refresher: Dark Mode<\/figcaption><video controls autoplay muted loop><source src=\"https:\/\/s3.amazonaws.com\/ionicframework.com\/videos\/refresher-dark.mov\"><\/video><br \/>\n<\/figure>\n<\/div>\n<p>Other than moving the placement of the refresher, no changes are needed to use the new pull to refresh. See the <a href=\"https:\/\/ionicframework.com\/docs\/api\/refresher#usage\" target=\"_blank\" rel=\"noopener\">Refresher documentation<\/a> for usage information.<\/p>\n<h3>List Header<\/h3>\n<p>The lists in iOS have had many design changes. Most notably the List Header now takes on a more large and bold design. In previous versions, the List Header was uppercase and small and didn\u2019t have the option for a bottom border. With the addition of the <code>lines<\/code> property on a List Header, it is now possible to add a border while matching the latest design.<\/p>\n<div class=\"split\">\n<figure><figcaption>Ionic List Header: Light Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/list-header-light.png\" alt=\"list header light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 828px; --smush-placeholder-aspect-ratio: 828\/1792;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/list-header-light.png\" alt=\"list header light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<figure><figcaption>Ionic List Header: Dark Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/list-header-dark.png\" alt=\"list header light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 828px; --smush-placeholder-aspect-ratio: 828\/1792;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/list-header-dark.png\" alt=\"list header light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<\/div>\n<p>Due to structural changes to support adding lines, it is recommended all text content inside of a List Header be wrapped in an <code>&lt;ion-label&gt;<\/code>. Additional information on this can be found in <a href=\"https:\/\/github.com\/ionic-team\/ionic\/blob\/master\/BREAKING.md#list-header\" rel=\"noopener\" target=\"_blank\">breaking changes<\/a>.<\/p>\n<p>Other than adding the label and lines if desired, no changes need to be made to enable the new design. See the <a href=\"https:\/\/ionicframework.com\/docs\/api\/list-header#usage\" rel=\"noopener\" target=\"_blank\">List Header documentation<\/a> for usage information. If the old design is desired, use custom CSS to achieve the previous look.<\/p>\n<h2>Ionic Animations \ud83d\udd7a<\/h2>\n<p>Ionic 5 introduces our brand new open source animations utility, Ionic Animations, that provides the tools developers need to build highly performant animations regardless of the framework they are using. Read more <a href=\"https:\/\/ionicframework.com\/blog\/introducing-ionic-animations\" target=\"_blank\" rel=\"noopener\">on the Ionic Animations blog<\/a>.<\/p>\n<h2>Ionicons \u2764\ufe0f<\/h2>\n<p>Ionic 5 ships with the latest version of our free and open source icon library, <a href=\"https:\/\/ionicons.com\/\" target=\"_blank\" rel=\"noopener\">Ionicons 5<\/a>, which includes an all-new icon set!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"600\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/ionicons-5.gif\" alt=\"ionicons 5 variations gif\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/600;margin-left:-40px;\" class=\"feature aligncenter size-full wp-image-3140 lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"600\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/ionicons-5.gif\" alt=\"ionicons 5 variations gif\" style=\"margin-left:-40px;\" class=\"feature aligncenter size-full wp-image-3140\" \/><\/noscript><\/p>\n<p>There will immediately be some differences noticed with this upgrade:<\/p>\n<ul>\n<li>One set of icons for both modes <\/li>\n<li>Icons come in three new variants: outline, fill (default), and sharp<\/li>\n<li>Icons will no longer switch between two different icons based on the mode<\/li>\n<li>The ability to set them per mode will still work, but the icon for each needs to be set using the <code>ios<\/code> and <code>md<\/code> properties<\/li>\n<li>There are still a handful of icons within Ionic that will automatically switch, such as the icon used in menu button, back button and the detail icon on items<\/li>\n<li>The icon font has been removed from Ionicons, but it does still contain an svg sprite if loading all icons on the same page is needed<\/li>\n<\/ul>\n<p>For a list of all of the icons that were removed or renamed, see the <a href=\"https:\/\/github.com\/ionic-team\/ionicons\/blob\/master\/CHANGELOG.md\" rel=\"noopener\" target=\"_blank\">Ionicons changelog<\/a> document. To search through all of the newly added icons, check out the <a href=\"https:\/\/ionicons.com\/\" target=\"_blank\" rel=\"noopener\">Ionicons site<\/a>. Read more on our <a href=\"https:\/\/ionicframework.com\/blog\/announcing-ionicons-5\/\" target=\"_blank\" rel=\"noopener\">Ionicons 5 Announcement blog<\/a>.<\/p>\n<h2>Ionic Colors \ud83c\udf08<\/h2>\n<p>Ionic has been updated with all new colors by default! If your app was not created using one of our starters and you don\u2019t override these colors, you\u2019ll automatically get the new colors in your app. If your app was created using an Angular or React starter, the colors are defined in the <code>theme\/variables.scss<\/code> file and will need to be updated manually.<\/p>\n<p>In addition to the new default colors, we\u2019ve also provided a set of recommended colors to use with dark mode. Head over to the <a href=\"https:\/\/ionicframework.com\/docs\/theming\/dark-mode\" target=\"_blank\" rel=\"noopener\">Dark Mode documentation<\/a> for a guide detailing how to support dark mode based on user preference, including our recommended theme with <a href=\"https:\/\/ionicframework.com\/docs\/theming\/dark-mode#ionic-dark-theme\" target=\"_blank\" rel=\"noopener\">code to copy &amp; paste<\/a>!<\/p>\n<div class=\"split\">\n<figure><figcaption>Ionic 5 Colors: Light Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/ionic-colors-light.png\" alt=\"list header light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 828px; --smush-placeholder-aspect-ratio: 828\/1792;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/ionic-colors-light.png\" alt=\"list header light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<figure><figcaption>Ionic 5 Colors: Dark Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/ionic-colors-dark.png\" alt=\"list header light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 828px; --smush-placeholder-aspect-ratio: 828\/1792;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/01\/ionic-colors-dark.png\" alt=\"list header light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<\/div>\n<h2>Redesigned Starters \ud83d\udd8c<\/h2>\n<p>With all of the changes to the design of our components, we felt it was time to update the design of our existing starters and add a new one! Take a look at the new designs and the new list starter below.<\/p>\n<div class=\"split\">\n<figure><figcaption>Blank Starter: Light Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/blank-light.png\" alt=\"blank starter light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/blank-light.png\" alt=\"blank starter light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<figure><figcaption>Blank Starter: Dark Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/blank-dark.png\" alt=\"blank starter dark mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/blank-dark.png\" alt=\"blank starter dark mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<\/div>\n<div class=\"split\">\n<figure><figcaption>Menu Starter: Light Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/menu-light.png\" alt=\"menu starter light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/menu-light.png\" alt=\"menu starter light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<figure><figcaption>Menu Starter: Dark Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/menu-dark.png\" alt=\"menu starter dark mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/menu-dark.png\" alt=\"menu starter dark mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<\/div>\n<div class=\"split\">\n<figure><figcaption>Tabs Starter: Light Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/tabs-light.png\" alt=\"tabs starter light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/tabs-light.png\" alt=\"tabs starter light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<figure><figcaption>Tabs Starter: Dark Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/tabs-dark.png\" alt=\"tabs starter dark mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/tabs-dark.png\" alt=\"tabs starter dark mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<\/div>\n<div class=\"split\">\n<figure><figcaption>List Starter: Light Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/list-light.png\" alt=\"list starter light mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/list-light.png\" alt=\"list starter light mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<figure><figcaption>List Starter: Dark Mode<\/figcaption><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/list-dark.png\" alt=\"list starter dark mode\" class=\"screenshot lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/1334;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/list-dark.png\" alt=\"list starter dark mode\" class=\"screenshot\"\/><\/noscript><br \/>\n<\/figure>\n<\/div>\n<h2>Easier Customization \ud83d\udc85<\/h2>\n<p>We&#8217;ve heard you loud and clear that components are not easy to customize. One reason for this was a lack of available CSS Variables or way to style inner elements. The other reason was due to components being scoped and their Ionic styles taking priority over custom styles. In order to make it easier to style, we&#8217;ve added more CSS variables, converted some scoped components to <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Web_Components\/Using_shadow_DOM\" rel=\"noopener\" target=\"_blank\">Shadow DOM<\/a>, and began adding support for <a href=\"https:\/\/www.w3.org\/TR\/css-shadow-parts-1\/\" rel=\"noopener\" target=\"_blank\">Shadow Parts<\/a>.<\/p>\n<p>The following components were converted to <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/Web_Components\/Using_shadow_DOM\" rel=\"noopener\" target=\"_blank\">Shadow DOM<\/a>:<\/p>\n<ul>\n<li>Back Button<\/li>\n<li>Card<\/li>\n<li>Segment<\/li>\n<li>Split Pane<\/li>\n<\/ul>\n<p>Why shadow DOM? One of our biggest reasons for using Shadow DOM is its ability to completely encapsulate styles and prevent them from bleeding into other components. This means we\u2019re able to style specific elements inside of our components without affecting other components that use that element.<\/p>\n<p>In addition to that, Shadow DOM allows us to use <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/Using_CSS_custom_properties\" rel=\"noopener\" target=\"_blank\">CSS custom properties (variables)<\/a> within the component for easier theming. In previous versions of Ionic Framework, Sass variables were used to customize and theme an app. This requirement not only caused longer build times, but in order to have multiple themes within the same app it required generating multiple CSS files with different Sass variables. CSS variables can be updated at runtime, so an app can change the entire theme based on a CSS class or a <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/@media\/prefers-color-scheme\" rel=\"noopener\" target=\"_blank\">prefers-color-scheme<\/a> media query.<\/p>\n<p>While scoped components allow the use of CSS variables, the selectors that are added to the component make user overrides more difficult, requiring a user to either write an overly complex selector or make use of <code>!important<\/code> in the CSS styles in order to override the Ionic components. Additionally, if users were to target an inner element of an Ionic component and we were to change the structure or class, this would break the styling of that element.<\/p>\n<p>With the growing support for <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/::part\" rel=\"noopener\" target=\"_blank\">Shadow Parts<\/a> in browsers, users will be able to target specific elements inside of our components to override their styles directly.<\/p>\n<p>Learn more about <a href=\"https:\/\/ionicframework.com\/docs\/theming\/themes\" target=\"_blank\" rel=\"noopener\">customizing Ionic themes<\/a>, <a href=\"https:\/\/ionicframework.com\/docs\/theming\/dark-mode\" target=\"_blank\" rel=\"noopener\">enabling dark mode<\/a>, and <a href=\"https:\/\/ionicframework.com\/docs\/theming\/css-variables\" target=\"_blank\" rel=\"noopener\">CSS variables<\/a> in our docs!<\/p>\n<h2>Angular Ivy \ud83c\udd70\ufe0f<\/h2>\n<p>For Ionic Angular developers, Ionic 5 will bring full support for Ivy, Angular&#8217;s new renderer. Ivy enables apps to only require pieces of the renderer that they actually need, instead of the whole thing. This means that our final output will be smaller, which is better for load performance. Read more about Angular Ivy on <a href=\"https:\/\/ionicframework.com\/blog\/angular-9-0-0-and-ivy-improvements\/\" target=\"_blank\" rel=\"noopener\">our blog post<\/a>.<\/p>\n<h2>Breaking Changes \ud83d\udea8<\/h2>\n<p>In the past, a major release of Ionic sometimes caused many breaking changes to the end-user due to internal changes to update the framework it was built on. Our last major release, Ionic 4, was created to avoid this by building Ionic Framework with web components. This has allowed us to only make breaking changes where necessary to improve the framework. A list of all of the breaking changes for this release can be found in our <a href=\"https:\/\/github.com\/ionic-team\/ionic\/blob\/master\/BREAKING.md\" rel=\"noopener\" target=\"_blank\">breaking changes document<\/a> in the <code>ionic<\/code> repository.<\/p>\n<h2>Updating \u2705<\/h2>\n<p>We recommend updating to the latest Ionic 4 release (<code>4.11.10<\/code>) to see any deprecation warnings specific to your app in the <a href=\"https:\/\/developers.google.com\/web\/tools\/chrome-devtools\/console\" rel=\"noopener\" target=\"_blank\">developer console<\/a>. After fixing any warnings, it\u2019s as simple as running the following commands:<\/p>\n<pre><code class=\"language-bash\"># for an angular app\nnpm i @ionic\/angular@latest --save\n\n# for a react app\nnpm i @ionic\/react@latest --save\nnpm i @ionic\/react-router@latest --save\nnpm i ionicons@latest --save\n\n# for a stencil \/ vanilla JS app\nnpm i @ionic\/core@latest --save\n<\/code><\/pre>\n<p>Then, head on over to the <a href=\"https:\/\/github.com\/ionic-team\/ionic\/blob\/master\/BREAKING.md\" rel=\"noopener\" target=\"_blank\">breaking changes document<\/a> to see if there were any other changes that need to be made in your app.<\/p>\n<h2>Thank you \ud83d\ude47\u200d\u2640\ufe0f<\/h2>\n<p>As always, we wanted to extend our sincere thanks to the Ionic community. We would not have been able to pull this off without your support. So many of the issues, pull requests, and comments left by community members have been essential to us getting this release out, and for that we&#8217;re extremely grateful. We hope you\u2019re as excited as we are about this release! Tell us your thoughts below. \u2b07\ufe0f<\/p>\n<ul>\n<li><a href=\"https:\/\/ionicframework.com\/docs\/release-notes#5.0.0\" target=\"_blank\" rel=\"noopener\">Release Notes<\/a><\/li>\n<li><a href=\"https:\/\/ionicframework.com\/docs\/building\/migration\" target=\"_blank\" rel=\"noopener\">Migration Guide<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ionic-team\/ionic\/blob\/master\/BREAKING.md\" rel=\"noopener\" target=\"_blank\">Breaking Changes<\/a><\/li>\n<li><a href=\"https:\/\/ionicframework.com\/docs\" target=\"_blank\" rel=\"noopener\">Framework Documentation<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ionic-team\/ionic\/issues\" rel=\"noopener\" target=\"_blank\">GitHub Issues<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Today, I&#8217;m thrilled to announce Ionic Framework 5 (Magnesium)! \ud83c\udf89 This release includes iOS 13 design updates, a brand new API for creating your own custom animations, revamped Ionicons, updated Ionic colors, new starter designs, improvements to component customization, and more! All of these changes are made in the core of Ionic Framework, which also [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":3163,"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":[1,120],"tags":[],"class_list":["post-3081","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-announcements"],"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>Announcing Ionic 5! - 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\/announcing-ionic-5\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Announcing Ionic 5!\" \/>\n<meta property=\"og:description\" content=\"Today, I&#8217;m thrilled to announce Ionic Framework 5 (Magnesium)! \ud83c\udf89 This release includes iOS 13 design updates, a brand new API for creating your own custom animations, revamped Ionicons, updated Ionic colors, new starter designs, improvements to component customization, and more! All of these changes are made in the core of Ionic Framework, which also [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/announcing-ionic-5\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-11T18:37:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-15T22:14:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1-1024x563.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"563\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Brandy Smith\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brandy Smith\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5\"},\"author\":{\"name\":\"Brandy Smith\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/fcd7940afdce3781b3381ec7c1b16c26\"},\"headline\":\"Announcing Ionic 5!\",\"datePublished\":\"2020-02-11T18:37:58+00:00\",\"dateModified\":\"2020-10-15T22:14:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5\"},\"wordCount\":2087,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png\",\"articleSection\":[\"All\",\"Announcements\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/announcing-ionic-5#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5\",\"url\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5\",\"name\":\"Announcing Ionic 5! - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png\",\"datePublished\":\"2020-02-11T18:37:58+00:00\",\"dateModified\":\"2020-10-15T22:14:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/announcing-ionic-5\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png\",\"width\":2400,\"height\":1320},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/announcing-ionic-5#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Announcing Ionic 5!\"}]},{\"@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\/fcd7940afdce3781b3381ec7c1b16c26\",\"name\":\"Brandy Smith\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png\",\"caption\":\"Brandy Smith\"},\"url\":\"https:\/\/ionic.io\/blog\/author\/brandy\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Announcing Ionic 5! - 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\/announcing-ionic-5","og_locale":"en_US","og_type":"article","og_title":"Announcing Ionic 5!","og_description":"Today, I&#8217;m thrilled to announce Ionic Framework 5 (Magnesium)! \ud83c\udf89 This release includes iOS 13 design updates, a brand new API for creating your own custom animations, revamped Ionicons, updated Ionic colors, new starter designs, improvements to component customization, and more! All of these changes are made in the core of Ionic Framework, which also [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/announcing-ionic-5","og_site_name":"Ionic Blog","article_published_time":"2020-02-11T18:37:58+00:00","article_modified_time":"2020-10-15T22:14:28+00:00","og_image":[{"width":1024,"height":563,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1-1024x563.png","type":"image\/png"}],"author":"Brandy Smith","twitter_card":"summary_large_image","twitter_creator":"@ionicframework","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Brandy Smith","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5"},"author":{"name":"Brandy Smith","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/fcd7940afdce3781b3381ec7c1b16c26"},"headline":"Announcing Ionic 5!","datePublished":"2020-02-11T18:37:58+00:00","dateModified":"2020-10-15T22:14:28+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5"},"wordCount":2087,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png","articleSection":["All","Announcements"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/announcing-ionic-5#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5","url":"https:\/\/ionic.io\/blog\/announcing-ionic-5","name":"Announcing Ionic 5! - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png","datePublished":"2020-02-11T18:37:58+00:00","dateModified":"2020-10-15T22:14:28+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/announcing-ionic-5"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png","width":2400,"height":1320},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/announcing-ionic-5#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Announcing Ionic 5!"}]},{"@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\/fcd7940afdce3781b3381ec7c1b16c26","name":"Brandy Smith","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/11\/headshot-zoomed-150x150.png","caption":"Brandy Smith"},"url":"https:\/\/ionic.io\/blog\/author\/brandy"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/02\/ionic5-feature-image-1.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3081","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\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=3081"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3081\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/3163"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=3081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=3081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=3081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}