<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Framework7</title>
    <description>The latest articles on DEV Community by Framework7 (@framework7).</description>
    <link>https://dev.to/framework7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F557%2Fb56ae377-e49c-43fc-83af-c720412459a7.png</url>
      <title>DEV Community: Framework7</title>
      <link>https://dev.to/framework7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/framework7"/>
    <language>en</language>
    <item>
      <title>Meet Aurora - New Framework7 Desktop Theme</title>
      <dc:creator>Vladimir Kharlampidi</dc:creator>
      <pubDate>Wed, 20 Mar 2019 13:31:09 +0000</pubDate>
      <link>https://dev.to/framework7/meet-aurora-new-framework7-desktop-theme-4j68</link>
      <guid>https://dev.to/framework7/meet-aurora-new-framework7-desktop-theme-4j68</guid>
      <description>&lt;p&gt;With modern web technologies we can build any kind of apps: native mobile apps (with Cordova or WebView), web apps, progressive web apps, native desktop apps (with Electron). And Framework7 with its unreachable set of ready to use components and UI is a great choice for all of them.&lt;/p&gt;

&lt;p&gt;But when it comes to native desktop apps and desktop-related features, it could be hard to choose what fits better - iOS or MD theme, and this is the area where Framework7 could lack a little bit, becoming not so obvious choice for desktop apps.&lt;/p&gt;

&lt;p&gt;And now, there is a solution for desktop apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aurora
&lt;/h2&gt;

&lt;p&gt;So here comes the &lt;strong&gt;Aurora&lt;/strong&gt;  -  &lt;strong&gt;all new desktop theme which is now a part of the Framework7 and available from Framework7 4.2.0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We have &lt;strong&gt;redesigned and tweaked each and every component in Aurora theme&lt;/strong&gt; to look, feel and behave better in desktop apps.&lt;/p&gt;

&lt;p&gt;Main idea of Aurora theme is to provide styles more closer to what we have in desktop apps, so using this theme should require a much less efforts to customize it.&lt;/p&gt;

&lt;p&gt;We decided to go with some none-relevant name rather than call it Desktop to avoid confusing with “desktop” as device/platform in API and styles.&lt;/p&gt;

&lt;p&gt;Here is a sneak peak of what you can quickly build with Aurora:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ADMoam_HJbGuo8MW4rmQZmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ADMoam_HJbGuo8MW4rmQZmg.png"&gt;&lt;/a&gt;macOs Mail app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Ay3b00qz9LDZteHiVjfcN4Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Ay3b00qz9LDZteHiVjfcN4Q.png"&gt;&lt;/a&gt;Whatsapp desktop app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AY8455YMhD0OJZdVoO6Qn-Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AY8455YMhD0OJZdVoO6Qn-Q.png"&gt;&lt;/a&gt;Desktop Slack app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AohU9Lqh3vmftbvYycGEQaA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AohU9Lqh3vmftbvYycGEQaA.png"&gt;&lt;/a&gt;Google Chrome&lt;/p&gt;

&lt;p&gt;All these Aurora demo layouts available in &lt;a href="https://github.com/framework7io/framework7-recipes" rel="noopener noreferrer"&gt;Framework7 Recipes&lt;/a&gt; repository where you can see them live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable Aurora
&lt;/h2&gt;

&lt;p&gt;To enable Aurora theme we just need to specify &lt;code&gt;theme: 'aurora'&lt;/code&gt; in app parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Framework7&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aurora&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case if we have &lt;code&gt;theme: 'auto'&lt;/code&gt; Aurora will be enabled automatically only if app runs under &lt;a href="https://electronjs.org" rel="noopener noreferrer"&gt;Electron&lt;/a&gt; environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Changes
&lt;/h2&gt;

&lt;p&gt;There is no any breaking changes, but there is a bunch of new aurora-related parameters and properties added to components.&lt;/p&gt;

&lt;p&gt;All app’s and components’ theme-related parameters that were prefixed with theme name, like &lt;code&gt;app.touch.iosTouchRipple&lt;/code&gt;, &lt;code&gt;view.iosSwipeBack&lt;/code&gt;, &lt;code&gt;navbar.mdCenterTitle&lt;/code&gt;, now available with &lt;code&gt;aurora&lt;/code&gt; prefix, e.g. &lt;code&gt;auroraTouchRipple&lt;/code&gt;, &lt;code&gt;auroraSwipeBack&lt;/code&gt;, &lt;code&gt;auroraCenterTitle&lt;/code&gt;, etc.&lt;/p&gt;

&lt;p&gt;All buttons and same kind modifier classes and component props are also available with &lt;code&gt;aurora&lt;/code&gt; suffix, e.g. &lt;code&gt;button-round-aurora&lt;/code&gt; makes button round only in Aurora theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  Theme Conditional Rendering
&lt;/h2&gt;

&lt;p&gt;In Framework7 Vue and React, and in Framework7 Router Components we use &lt;code&gt;this.$theme.ios&lt;/code&gt; and &lt;code&gt;this.$theme.md&lt;/code&gt; to differentiate theme-based output. Now, if you develop with Aurora theme, you also need to consider &lt;code&gt;this.$theme.aurora&lt;/code&gt; property that will be true for this theme.&lt;/p&gt;

&lt;p&gt;In Framework7 Core html templates we used &lt;code&gt;if-ios&lt;/code&gt;/&lt;code&gt;ios-only&lt;/code&gt; and &lt;code&gt;if-md&lt;/code&gt;/&lt;code&gt;md-only&lt;/code&gt; classes on elements that were automatically removed (or hidden) if other theme in use. With Aurora release this set of classes expands to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;if-ios&lt;/code&gt; - element will be rendered only for iOS theme&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;if-not-ios&lt;/code&gt; - element will be removed/hidden for theme other than iOS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;if-md&lt;/code&gt; - element will be rendered only for MD theme&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;if-not-md&lt;/code&gt; - element will be removed/hidden for theme other than MD&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;if-aurora&lt;/code&gt; - element will be rendered only for Aurora theme&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;if-not-aurora&lt;/code&gt; - element will be removed/hidden for theme other than Aurora&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, in previous versions when we had only two themes, we used the following code to hide Navbar’s back button text for MD theme:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-inner sliding"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"left"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"link back"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;i&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"icon icon-back"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"if-ios"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Back&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    ...
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But now this code will also hide back button text in Aurora theme. So if we develop for Aurora theme too, we need to change it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-inner sliding"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"left"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"link back"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;i&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"icon icon-back"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"if-not-md"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Back&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    ...
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Picker With Mousewheel
&lt;/h2&gt;

&lt;p&gt;Just having only a desktop look is not enough. You know Framework7's attention to details is outstanding. So many components tweaked to also behave better on desktop.&lt;/p&gt;

&lt;p&gt;Picker was basically one of the touch-only and absolutely not mouse-friendly component. Now it is possible to scroll Picker values with mousewheel, which is now enabled by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F700%2F1%2AyYl9t-SYJIqGEJt9ae1GwA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F700%2F1%2AyYl9t-SYJIqGEJt9ae1GwA.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pull To Refresh With Mousewheel
&lt;/h2&gt;

&lt;p&gt;One more no-go for desktops feature and component can work now with mousewheel. To enable it we just need to add &lt;code&gt;data-ptr-mousewheel="true"&lt;/code&gt; attribute to PTR content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F700%2F1%2A7VkhaL-h_a-Yx36iV5FYng.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F700%2F1%2A7VkhaL-h_a-Yx36iV5FYng.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hovers
&lt;/h2&gt;

&lt;p&gt;And of course hovers. Buttons, List Buttons and List Links have hover effect in Aurora theme:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F700%2F1%2A9GwAL084jU2yvjG5rniDZg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F700%2F1%2A9GwAL084jU2yvjG5rniDZg.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  New Appbar Component
&lt;/h2&gt;

&lt;p&gt;Aurora comes with new Appbar component which is designed to be used in desktop apps with Aurora theme. It is the main app bar, which looks mostly the same as Navbar/Toolbar, with actions on top of the whole app.&lt;/p&gt;

&lt;p&gt;For example, in macOs Mail demo app layout you can see two Appbars on top of the app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ADMoam_HJbGuo8MW4rmQZmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ADMoam_HJbGuo8MW4rmQZmg.png"&gt;&lt;/a&gt;macOs Mail app with two Appbars on top&lt;/p&gt;

&lt;h2&gt;
  
  
  Inline Searchbar
&lt;/h2&gt;

&lt;p&gt;This is a new Searchbar modification that comes in 4.2.0 update. It has a bit simplified layout and, as title says, it made to be easier integrated into other components and custom layouts. Like, for example, into the Appbar in macOs Mail app demo layout above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F916%2F1%2AdYuKkiNEJrtiFoeWI8gjig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F916%2F1%2AdYuKkiNEJrtiFoeWI8gjig.png"&gt;&lt;/a&gt;Inline Searchbar in Appbar&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Framework7 was originally developed as a mobile-only framework. First version of Framework7 was released exactly 5 years ago 🎉 and during this period of time it became unreachable in terms of UI quality. And Aurora, is our 5 years celebration of Framework7, Aurora - is our huge next step - step towards desktop apps to make Framework7 even more cross-platform friendly! All of this wouldn’t happen without you - app developers!&lt;/p&gt;

&lt;p&gt;You can already try Aurora theme right now by updating your Framework7 version to 4.2.0.&lt;/p&gt;

&lt;p&gt;This release contains a lot more new micro features, fixes and improvements. Check the &lt;a href="https://github.com/framework7io/framework7/blob/master/CHANGELOG.md" rel="noopener noreferrer"&gt;full changelog&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;As next steps it is recommended to check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://framework7.io/docs/" rel="noopener noreferrer"&gt;Framework7 Aurora-updated docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forum.framework7.io" rel="noopener noreferrer"&gt;Framework7 Forum&lt;/a&gt; - the best place to get F7 support&lt;/li&gt;
&lt;li&gt;New &lt;a href="https://github.com/framework7io/framework7-recipes" rel="noopener noreferrer"&gt;Framework7 Recipes&lt;/a&gt; repository with new Aurora demo layouts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  P.S.
&lt;/h2&gt;

&lt;p&gt;If you love Framework7, you can support project by donating or pledging on Patreon: &lt;a href="https://www.patreon.com/vladimirkharlampidi" rel="noopener noreferrer"&gt;https://www.patreon.com/vladimirkharlampidi&lt;/a&gt; or by purchasing a nice branded t-shirt at &lt;a href="https://teespring.com/stores/framework7" rel="noopener noreferrer"&gt;Framework7 Shop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>framework7</category>
      <category>javascript</category>
      <category>cordova</category>
      <category>electron</category>
    </item>
    <item>
      <title>The Best Framework7 Yet. What Is New In v4</title>
      <dc:creator>Vladimir Kharlampidi</dc:creator>
      <pubDate>Wed, 16 Jan 2019 15:13:11 +0000</pubDate>
      <link>https://dev.to/framework7/the-best-framework7-yet-what-is-new-in-v4-hbg</link>
      <guid>https://dev.to/framework7/the-best-framework7-yet-what-is-new-in-v4-hbg</guid>
      <description>&lt;p&gt;Time for big release, the &lt;strong&gt;largest Framework7 update&lt;/strong&gt; in terms of new features is coming soon.&lt;/p&gt;

&lt;p&gt;Let’s look at new features and breaking changes coming in version 4 and what to expect with migrating your existing app from v2/v3 to v4.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Framework7 Files Structure
&lt;/h3&gt;

&lt;p&gt;Core framework has new file structure. In previous version (v3) we had the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| components/
 | /accordion/
 | /actions/
 | /calendar/
 | ...
| lazy-components/
 | accordion.css
 | accordion.js
 | actions.css
 | actions.js
 | calendar.css
 | calendar.js
 | ...
| js/
 | framework7-lazy.js
 | framework7-lazy.min.js
 | framework7.js
 | framework7.min.js
| css/
 | framework7-lazy.css
 | framework7-lazy.min.css
 | framework7-lazy.rtl.css
 | framework7-lazy.rtl.min.css
 | framework7.css
 | framework7.min.css
 | framework7.rtl.css
 | framework7.rtl.min.css
 | framework7.ios.css
 | framework7.md.css
 | ...
| framework7.esm.bundle.js
| framework7.esm.js
| framework7.less
| framework7.less
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In new version file structure is more consistent and a bit different:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| components/
 | /accordion/
 | accordion.css
 | accordion.js
 | /actions/
 | actions.css
 | actions.js
 | /calendar/
 | calendar.css
 | calendar.js
 | ...
| js/
 | framework7.bundle.js
 | framework7.bundle.min.js
 | framework7.js
 | framework7.min.js
| css/
 | framework7.bundle.css
 | framework7.bundle.min.css
 | framework7.bundle.rtl.css
 | framework7.bundle.rtl.min.css
 | framework7.css
 | framework7.min.css
 | framework7.rtl.css
 | framework7.rtl.min.css
| framework7.esm.bundle.js
| framework7.esm.js
| framework7.bundle.less
| framework7.less
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Before: Files with -lazy suffix in name contain minimal (core) Framework7 version with minimal required set of components. Files without -lazy suffix contain full bundle Framework7 version with all components.&lt;/p&gt;

&lt;p&gt;In v4: Minimal core version now comes without any suffix and it is just &lt;code&gt;framework7.js&lt;/code&gt; and &lt;code&gt;framework7.css&lt;/code&gt; (what was with -lazy before). Full bundle version now has &lt;code&gt;bundle&lt;/code&gt; in file name.&lt;/p&gt;

&lt;p&gt;Browser lazy components that were in &lt;code&gt;lazy-components/&lt;/code&gt; folder moved to the root of &lt;code&gt;components&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Theme-specific styles like &lt;code&gt;framework7.ios.css&lt;/code&gt; removed and not available anymore because it is not really necessary now (explanation in next section).&lt;/p&gt;

&lt;h3&gt;
  
  
  CSS Variables (Custom Properties)
&lt;/h3&gt;

&lt;p&gt;This is the most significant and most complex part of new update. All CSS styles were reworked to use &lt;a href="https://developer.mozilla.org/docs/Web/CSS/Using_CSS_variables"&gt;CSS Variables (Custom Properties)&lt;/a&gt;. So why it was needed? Here is some awesome advantages of moving to CSS variables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It allowed us to reduce size of whole Framework7 bundle by 60%! Unminified CSS bundle reduced from ~1MB (in v3) to 400Kb (in v4)!&lt;/li&gt;
&lt;li&gt;We were able to reduce amount of JS code as well. Some new features like Large Navbars became available due to CSS variables without significant extra amount of JavaScript.&lt;/li&gt;
&lt;li&gt;A lot of theme-specific differences we had before now unified, that will make app branding a way more simpler.&lt;/li&gt;
&lt;li&gt;It is extremely easy to add new and modify existing colors, theme colors and color modifiers.&lt;/li&gt;
&lt;li&gt;For some components it is now possible to mix theme styling. For example, if you use iOS theme and want button to appear in style of MD theme, we can just add md class to this button and it will look like in MD theme.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Custom styling became much more easier with CSS variables. The stunning part here is that we don’t need to know the exact HTML markup of the component we want to style if CSS variables available for this component. For example, if we need to change font-size of List Item’s title, we can just add to CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="py"&gt;--f7-list-item-title-font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If we need to change Navbar’s height:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="py"&gt;--f7-navbar-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And in this case all Navbar-size dependent styles (rules that depend on this CSS variable) will be updated automatically (e.g. page-content paddings, transformations, etc.).&lt;/p&gt;

&lt;p&gt;CSS variables just make developer life easier.&lt;/p&gt;

&lt;p&gt;But there are some drawbacks of moving to CSS variables. And the most noticeable, is their support in browsers. Like we may see from &lt;a href="https://caniuse.com/#feat=css-variables"&gt;this table&lt;/a&gt; it is supported on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edge 16+&lt;/li&gt;
&lt;li&gt;iOS Safari 10+&lt;/li&gt;
&lt;li&gt;Chrome — means Android 5+&lt;/li&gt;
&lt;li&gt;FireFox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it means? It means that Framework7 v4 will not work on browsers older than mentioned above. And here we come to Framework7 v4+ ideology.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported Browsers &amp;amp; Devices
&lt;/h3&gt;

&lt;p&gt;Due to CSS variables and some other legacy features removed in v4, it will be the framework for modern devices. No IE and Android &amp;lt;5 support at all! Supporting such old browsers just holds us back in terms of new features development and framework evolution, so no more old browsers.&lt;/p&gt;

&lt;p&gt;Framework7 v3 will be maintained for a while (bug fixes) for the apps needed old devices support.&lt;/p&gt;

&lt;h3&gt;
  
  
  Color Themes
&lt;/h3&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eTyMD4Aq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1058797052493213698/pu/img/2-D9dI16_1VPsTZe.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--M8eKV2uh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1085186007534718976/iNBQDVa1_normal.jpg" alt="Framework7 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Framework7
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @framework7io
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      How about ... generating custom color themes right in Kitchen Sink. Coming in &lt;a href="https://twitter.com/framework7io"&gt;@framework7io&lt;/a&gt; v4 🔥 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      19:04 PM - 03 Nov 2018
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1058797173817643010" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1058797173817643010" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      3
      &lt;a href="https://twitter.com/intent/like?tweet_id=1058797173817643010" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      19
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Working with color themes in v4 is like a breath of fresh air. Now if you need to change default color theme, you just need to specify few CSS variables instead of modifying/overwriting all default color references in whole CSS file. We need 4 CSS variables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--f7-theme-color&lt;/code&gt; — HEX value of theme color.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--f7-theme-color-shade&lt;/code&gt; — 8% darken theme color. Required, for example, for pressed buttons state.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--f7-theme-color-tint&lt;/code&gt; — 8% lighten theme color. Required, for example, for pressed buttons state.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--f7-theme-color-rgb&lt;/code&gt; — RGB value of theme color. Required for semitransparent elements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, if our brand color is &lt;code&gt;#f00&lt;/code&gt; (red) we just need to add following variables to our CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="py"&gt;--f7-theme-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f00&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="py"&gt;--f7-theme-color-shade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#d60000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="py"&gt;--f7-theme-color-tint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ff2929&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="py"&gt;--f7-theme-color-rgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That is all we need to create custom color theme!💥&lt;/p&gt;

&lt;p&gt;There is also new &lt;code&gt;colorThemeCSSProperties&lt;/code&gt; util that can generate required CSS variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* Generate CSS variables for red theme color */&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colorThemeCSSProperties&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It will return the following object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;--f7-theme-color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#f00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;--f7-theme-color-rgb&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;255, 0, 0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;--f7-theme-color-shade&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#d60000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;--f7-theme-color-tint&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#ff2929&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Unified Navigation Bars
&lt;/h3&gt;

&lt;p&gt;There is also unification in navigation bars (Navbars, Toolbars, Subnavbar, etc.) appearance. In v3 their color scheme is different for iOS and MD themes. This brings complications and a bunch of extra styles when we need to bring custom branding.&lt;/p&gt;

&lt;p&gt;In v3 they look like on the following picture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cxRd-Sq1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AW-hDTsenwdQGmuYeoNVHgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cxRd-Sq1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AW-hDTsenwdQGmuYeoNVHgg.png" alt=""&gt;&lt;/a&gt;Navigation Bars in v3&lt;/p&gt;

&lt;p&gt;In v4 we unified color scheme for navigation bars in iOS and MD themes to the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NNJ_b79i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AVCLIAVqfriplTRdrvLkcEg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NNJ_b79i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AVCLIAVqfriplTRdrvLkcEg.png" alt=""&gt;&lt;/a&gt;Navigation Bars in v4&lt;/p&gt;

&lt;p&gt;With such scheme it is much easier to bring your custom branding for navigation bars.&lt;/p&gt;

&lt;p&gt;Also Navbar with centered title (and with its dynamically calculated position) is also available in MD theme now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jt3CsfRU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ag3JJnLGSacaplWRn5OiUAg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jt3CsfRU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ag3JJnLGSacaplWRn5OiUAg.png" alt=""&gt;&lt;/a&gt;Centered Navbar Title in iOS &amp;amp; MD Themes&lt;/p&gt;

&lt;h3&gt;
  
  
  Unified Toolbars Position
&lt;/h3&gt;

&lt;p&gt;Before v4 we had the following restrictions for Toolbar position:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in iOS theme, Toolbar is always on the bottom&lt;/li&gt;
&lt;li&gt;in MD theme, Toolbar by default is on the top, and can be positioned on bottom with extra &lt;code&gt;toolbar-bottom-md&lt;/code&gt; class.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now such restriction is gone and in both themes Toolbar / Tabbar can be positioned on top or on bottom. But now it is always required to add position-specific class to each Toolbar/Tabbar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;toolbar-top&lt;/code&gt; to place Toolbar on top of view/page&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;toolbar-bottom&lt;/code&gt; to place Toolbar on bottom of view/page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again, it also should help to keep your custom styles/branding in consistence across iOS and MD themes.&lt;/p&gt;

&lt;p&gt;So even on iOS, Toolbar can be easily positioned on top:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gDN-SX3P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/617/1%2AMzHcZcfrGKS2t20cepdBJw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gDN-SX3P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/617/1%2AMzHcZcfrGKS2t20cepdBJw.png" alt=""&gt;&lt;/a&gt;Top Tabbar in v4 iOS theme&lt;/p&gt;

&lt;h3&gt;
  
  
  Unified &amp;amp; Reworked Buttons
&lt;/h3&gt;

&lt;p&gt;With the arrival of CSS variables, Buttons now also support all modifiers for both iOS and MD themes. For example, “raised” button now supported by iOS theme and “outline” button supported by MD theme.&lt;/p&gt;

&lt;p&gt;Also “button-big” has been renamed to “button-large”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tokTLUsD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ADt6Z8e8lmh46b7JfEg4O5A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tokTLUsD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ADt6Z8e8lmh46b7JfEg4O5A.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Unified Messages Colors
&lt;/h3&gt;

&lt;p&gt;Messages component now has similar color scheme for both iOS &amp;amp; MD themes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hv_gCBr7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ACYY394W75z7paHVt8syCqQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hv_gCBr7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ACYY394W75z7paHVt8syCqQ.png" alt=""&gt;&lt;/a&gt;Messages color scheme in v4&lt;/p&gt;

&lt;h3&gt;
  
  
  Navbar Goes Large
&lt;/h3&gt;

&lt;p&gt;This is one of the most requested features in Framework7. And now it is available in v4 for both iOS and MD themes.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0y2ePwcP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1065242482714263552/pu/img/Q-qpULu3Cg1Ndx0R.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--M8eKV2uh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1085186007534718976/iNBQDVa1_normal.jpg" alt="Framework7 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Framework7
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @framework7io
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      You have asked for it, you will get it! Meet all new large navbars with proper transitions coming in &lt;a href="https://twitter.com/framework7io"&gt;@framework7io&lt;/a&gt; v4 🎊 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      13:56 PM - 21 Nov 2018
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1065242615531139073" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1065242615531139073" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      11
      &lt;a href="https://twitter.com/intent/like?tweet_id=1065242615531139073" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      51
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;HTML markup for large navbar is pretty simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-inner"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"left"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Usual title --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;My App&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- New large title (text can be different) --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"title-large"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"title-large-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;My App&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;For Framework7 Vue/React components it is even more simpler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;f7-navbar&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"My App"&lt;/span&gt; &lt;span class="na"&gt;large&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;Navbar&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"My App"&lt;/span&gt; &lt;span class="na"&gt;large&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Expandable Cards
&lt;/h3&gt;

&lt;p&gt;This was a real challenge to implement but here we goes. Meet all new expandable cards (aka AppStore cards) coming in v4:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xVvoc3tl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1067059338324467714/pu/img/8Smn2fvf3MmUfZ0G.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--M8eKV2uh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1085186007534718976/iNBQDVa1_normal.jpg" alt="Framework7 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Framework7
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @framework7io
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      How about this? Meet all new expandable cards (aka AppStore cards) coming in &lt;a href="https://twitter.com/framework7io"&gt;@framework7io&lt;/a&gt; v4 🔥🔥🔥 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      14:16 PM - 26 Nov 2018
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1067059506549534720" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1067059506549534720" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      23
      &lt;a href="https://twitter.com/intent/like?tweet_id=1067059506549534720" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      100
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;And their API is pretty simple. Just extra &lt;code&gt;card-expandable&lt;/code&gt; class on card element. But sometimes, to look correctly and feel native, expandable card content may require additional tweaks. But in general it is just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- expandable card --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card card-expandable"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    ... any HTML content here ...
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Large Block Titles
&lt;/h3&gt;

&lt;p&gt;Block titles extended to be in medium and large sizes to improve out-of-the-box typography:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mwpjxthq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aml-BlONPgMnQrAUn1n7RJw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mwpjxthq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aml-BlONPgMnQrAUn1n7RJw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is just extra &lt;code&gt;block-title-large&lt;/code&gt; or &lt;code&gt;block-title-medium&lt;/code&gt; class on any block title to make it large or medium size.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pull To Refresh From Bottom
&lt;/h3&gt;

&lt;p&gt;In addition to usual pull to refresh, v4 also supports pull to refresh from bottom:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yG5bSGlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2AX9tZc_mGlSRtEYrc_2xSTg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yG5bSGlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2AX9tZc_mGlSRtEYrc_2xSTg.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Menu — New UI Component
&lt;/h3&gt;

&lt;p&gt;The idea and request for this component came from our Patrons 🙌&lt;/p&gt;

&lt;p&gt;Menu component not so often seen in mobile apps. But it is proven to be extremely helpful when you need controls on top of the map, images, some text/code editor, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OBZ86mKj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2AaOme48IHHAhjyYdtvV3wsw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OBZ86mKj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2AaOme48IHHAhjyYdtvV3wsw.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Skeleton — New UI Component
&lt;/h3&gt;

&lt;p&gt;Perhaps you have already heard of such concept: UI Skeletons, Skeleton Screens, Skeleton Elements, or even Ghost Elements?&lt;/p&gt;

&lt;p&gt;Skeleton elements are basically “gray box” representations of UI that will be available soon. They are designed to improve perceived performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QDzp5knq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2A-SEuT4csTk0RYSSFafhVww.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QDzp5knq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2A-SEuT4csTk0RYSSFafhVww.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Framework7 comes with two Skeleton patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;skeleton-block&lt;/code&gt;. It is just a usual block element with gray background color, that can be in any required size&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;skeleton-text&lt;/code&gt;. It is more interesting thing. Framework7 comes with special built-in Skeleton font, that renders every character as small gray rectangle. When we apply &lt;code&gt;skeleton-text&lt;/code&gt; class to any element, it converts text to gray blocks/lines. Advantage over &lt;code&gt;skeleton-block&lt;/code&gt; is that such “skeleton text” can be fully responsive and it is size will reflect actual text size.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skeleton elements also support three animation effects: Fade, Blink and Pulse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Range Slider Goes Vertical
&lt;/h3&gt;

&lt;p&gt;Range Slider in v4 is also a bit reworked and improved. Now it supports scale, and vertical directions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7TtXYjFp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQi3A6wBRJ64ibLnk6g6QJg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7TtXYjFp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQi3A6wBRJ64ibLnk6g6QJg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Icons Font
&lt;/h3&gt;

&lt;p&gt;Here is one more improvement related to Framework7 core icons, e.g. “back” icon, Searchbar “search” icon, and others. Before v4 they were implemented as inline (data-url) SVG images in main CSS bundle. It is pretty convenient, but brings difficulties when we need to change color of such icons — we need to redefine it with another inline SVG image with required color.&lt;/p&gt;

&lt;p&gt;In v4 all core icons are reworked to built-in core icons font with ligatures. It allowed to save extra KB’s of size and no more difficulties to change their color. Now to change such icon color we can use CSS’s &lt;code&gt;color&lt;/code&gt; rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  Service Workers — New Module
&lt;/h3&gt;

&lt;p&gt;This new module is a large step towards Progressive Web Apps development with Framework7. Right now it only allows to simplify the process of service workers registration but will have a lot more functionality soon.&lt;/p&gt;

&lt;p&gt;For example to register service worker, we can just specify it in app parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Framework7&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="na"&gt;serviceWorker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path/to/service-worker.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Or with API after app initialization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;serviceWorker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path/to/service-worker.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;registration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Service worker registered&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;With this module it will be super easy to work with service workers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Request Promisified
&lt;/h3&gt;

&lt;p&gt;Built-in Request library to work with XHR requests can work as Promises now.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app.request.promise(...)&lt;/code&gt; — same as &lt;code&gt;app.request()&lt;/code&gt; but returns Promise that will be resolved with response data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app.request.promise.get(...)&lt;/code&gt; — same as &lt;code&gt;app.request.get(...)&lt;/code&gt; but returns Promise that will be resolved with response data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app.request.promise.post(...)&lt;/code&gt; — same as &lt;code&gt;app.request.post(...)&lt;/code&gt; but returns Promise that will be resolved with response data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app.request.promise.json(...)&lt;/code&gt; — same as &lt;code&gt;app.request.json(...)&lt;/code&gt; but returns Promise that will be resolved with response data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app.request.promise.postJSON(...)&lt;/code&gt; — same as &lt;code&gt;app.request.postJSON(...)&lt;/code&gt; but returns Promise that will be resolved with response data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the usage is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./something.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Handle response&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Error happened&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Or with async/await:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./something.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Handle content&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Fastclicks Disabled
&lt;/h3&gt;

&lt;p&gt;Fast clicks is a built-in library that removes 300ms delay from links and form elements in mobile browser while you click them. It was implemented and enabled since very first Framework7 release and this is one of the features that makes app developed with Framework7 feel native.&lt;/p&gt;

&lt;p&gt;But much time has passed since then. And modern browsers are smart enough to eliminate that click delay when certain conditions met like correct &lt;code&gt;&amp;lt;meta name="viewport"\&amp;gt;&lt;/code&gt; meta tag. So in v4 it is now disabled by default to avoid unnecessary issues, especially with 3rd party libraries. And it must be enabled if you target older devices, like iOS &amp;lt; 10.&lt;/p&gt;

&lt;h3&gt;
  
  
  Touch Ripple in iOS Theme
&lt;/h3&gt;

&lt;p&gt;Why not? Touch ripple effect that was MD-theme exclusive now can be enabled for iOS theme too with &lt;code&gt;app.touch.iosTouchRipple = true&lt;/code&gt; parameter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q1jjPjV6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2Ax2je18FD8fOAqcnK0U9s7Q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q1jjPjV6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/390/1%2Ax2je18FD8fOAqcnK0U9s7Q.gif" alt=""&gt;&lt;/a&gt;Touch Ripple effect in v4 iOS theme&lt;/p&gt;

&lt;h3&gt;
  
  
  Events Bus
&lt;/h3&gt;

&lt;p&gt;As you may aware Framework7 has pretty flexible events system/model. Each instance of Framework7's class (like main &lt;code&gt;Framework7()&lt;/code&gt; class or any class-based component like &lt;code&gt;app.calendar.create()&lt;/code&gt;) has methods to emit and handle events (&lt;code&gt;emit&lt;/code&gt;, &lt;code&gt;on&lt;/code&gt;, &lt;code&gt;once&lt;/code&gt;, &lt;code&gt;off&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Such model is also very useful to create custom events for communication between app components.&lt;/p&gt;

&lt;p&gt;So in v4 there is a new helper class that is designed to be used like event bus only and not to flood main app instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myEvents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Framework7&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// handle event&lt;/span&gt;
&lt;span class="nx"&gt;myEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some-event&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// do something when 'some-event' fired&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// emit event&lt;/span&gt;
&lt;span class="nx"&gt;myEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;some-event&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// another event bus&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;notificationEvents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Framework7&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;notificationEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;notificationReceived&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;notification&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// do something&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// somewhere in the app&lt;/span&gt;
&lt;span class="nx"&gt;notificationEvents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;notificationReceived&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John Doe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Framework7 Icons V2
&lt;/h3&gt;

&lt;p&gt;You may aware that we recently released &lt;a href="https://dev.to/framework7/framework7-icons-v2-g9p-temp-slug-6361637"&gt;Framework7 Icons v2&lt;/a&gt; — free, amazing and huge set of hand-crafted iOS icons specially designed for Framework7.&lt;/p&gt;

&lt;p&gt;And in &lt;a href="https://dev.to/framework7/framework7-icons-v2-g9p-temp-slug-6361637"&gt;this blog post&lt;/a&gt; we wrote that they have different design sizes, so their usage in Framework7 v1–v3 may required additional tweaks.&lt;/p&gt;

&lt;p&gt;Framework7 v4 is designed to be used with new F7 icons so they will perfectly fit here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Framework7 React &amp;amp; Vue Changes
&lt;/h3&gt;

&lt;p&gt;Of course all new features written above like large navbars, toolbar positions, unified buttons, expandable cards will be available here with new props on related components. And there are new Vue/React components for new UI components like Menu and Skeleton.&lt;/p&gt;

&lt;p&gt;But there is also breaking changes here. &lt;code&gt;f7-label&lt;/code&gt; / &lt;code&gt;Label&lt;/code&gt; component has been removed. It was used together with &lt;code&gt;f7-input&lt;/code&gt; / &lt;code&gt;Input&lt;/code&gt; component to create inputs in List View. Now instead of that components, we need use new &lt;code&gt;f7-list-input&lt;/code&gt; / &lt;code&gt;ListInput&lt;/code&gt; that was recently introduced in latest versions of Framework7 v3.&lt;/p&gt;

&lt;p&gt;So if you have something like this (for example in Vue):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;f7-list-item&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;f7-label&amp;gt;&lt;/span&gt;Name&lt;span class="nt"&gt;&amp;lt;/f7-label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;f7-input&lt;/span&gt;
    &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
    &lt;span class="na"&gt;:value=&lt;/span&gt;&lt;span class="s"&gt;"userName"&lt;/span&gt;
    &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your name"&lt;/span&gt;
    &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;input=&lt;/span&gt;&lt;span class="s"&gt;"updateUserName"&lt;/span&gt;
  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/f7-list-item&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It needs to be changed to new single component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;f7-list-input
  label="Name"
  type="text"
  :value="userName"
  placeholder="Your name"
  @input="updateUserName"
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Framework7 CLI v2
&lt;/h3&gt;

&lt;p&gt;First version of Framework7 CLI was released a while ago and due to lack of its features and usefulness it wasn’t maintained and mentioned anywhere.&lt;/p&gt;

&lt;p&gt;But now everything changes. With Framework7 v4 release we introduce totally new Framework7 CLI which is an extremely powerful tool to start Framework7 app development. And with Framework7 v4 it will be the most recommended way for setting up new Framework7 project.&lt;/p&gt;

&lt;p&gt;Instead of maintaining different variations of official templates (&lt;em&gt;Core/Vue/React * Single View/Tabs/Split View * Web/Cordova/PWA&lt;/em&gt;) it is easier to have one tool that combines all variations.&lt;/p&gt;

&lt;p&gt;So new Framework7 CLI allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;to select template: Single View, Tabs, Split View&lt;/li&gt;
&lt;li&gt;to choose framework: F7 Core, F7 Vue, F7 React&lt;/li&gt;
&lt;li&gt;to choose target: Web app, PWA, or Cordova, or mix of them&lt;/li&gt;
&lt;li&gt;to specify custom color theme from the start&lt;/li&gt;
&lt;li&gt;to choose bundler: No bundler, Webpack or Rollup (coming later)&lt;/li&gt;
&lt;li&gt;to generate required icons and splash screen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the usage is very simple. First, we need to install F7 CLI (in beta now) and Cordova:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm i framework7-cli@beta cordova -g
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And to run the following command in the directory where you want to create app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ framework7 create
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Program will prompt for a few questions about framework and template you want to start with:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1wVsPA5X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ARQtTZ99F-Llz3xv5M-0CQA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1wVsPA5X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ARQtTZ99F-Llz3xv5M-0CQA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pk5djQul--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ADv0ow2VcaGAy0j8IDkZBOQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pk5djQul--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ADv0ow2VcaGAy0j8IDkZBOQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eRbs_-iF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Arrw40Ha3J2LOZlmnPolMrQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eRbs_-iF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Arrw40Ha3J2LOZlmnPolMrQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it also comes with UI. We can run the following command instead to launch UI to create the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ framework7 create --ui
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And the following web app will be opened:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0wbS4K4G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AE71Zw0ZZ62BcNJiyGUTCFA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0wbS4K4G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AE71Zw0ZZ62BcNJiyGUTCFA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  When?
&lt;/h3&gt;

&lt;p&gt;Final and stable 4.0.0 release is going to happen in the end of January — beginning of February, 2019 🎉&lt;/p&gt;

&lt;p&gt;But you can already try the beta version which can be considered as production ready.&lt;/p&gt;

&lt;p&gt;For already created v2/v3 app, you can upgrade by downloading beta release at &lt;a href="https://github.com/framework7io/framework7/releases"&gt;GitHub releases page&lt;/a&gt; or via NPM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm i framework7@beta&lt;/code&gt; — for core framework v4&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm i framework7-react@beta&lt;/code&gt; — for Framework7-React v4&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm i framework7-vue@beta&lt;/code&gt; — for Framework7-Vue v4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the new app it is highly recommended to start with all new Framework7 CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm i framework7-cli@beta cordova -g
$ framework7 create --ui
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  P.S.
&lt;/h3&gt;

&lt;p&gt;If you love Framework7, you can support project by donating or pledging on Patreon: &lt;a href="https://www.patreon.com/vladimirkharlampidi"&gt;https://www.patreon.com/vladimirkharlampidi&lt;/a&gt; or by purchasing a nice branded t-shirt at &lt;a href="https://teespring.com/stores/framework7"&gt;Framework7 Shop&lt;/a&gt;&lt;/p&gt;




</description>
      <category>javascript</category>
      <category>mobile</category>
      <category>framework7</category>
      <category>mobileappdevelopment</category>
    </item>
  </channel>
</rss>
