Framework7 logo

Framework7

A full-featured framework for building iOS and Android apps with HTML, CSS, and React.

npm install framework7
18.5K10.6K/weekv9.0.114.05 MBMIT226 issues
Last updated: 2025-11-27
Star history chart for framework7io/framework7

TL;DR

A battle-tested mobile framework that mimics native iOS and Material Design interfaces with pixel-perfect precision using standard web technologies.

Designed for building Progressive Web Apps (PWAs) and hybrid mobile applications (via Capacitor or Cordova) that feel native without the React Native learning curve.

Why Framework7?

Framework7 solves a specific problem: making web applications look and behave exactly like native mobile apps. Unlike generic UI libraries that provide responsive components, Framework7 implements the subtle interactions—like page transitions, swipe-to-back gestures, and overscroll behavior—that users expect on mobile devices. It is a "battery-included" framework, providing not just buttons and inputs, but a complete mobile navigation system and state management solution tailored for touch interfaces.

  • Auto-Matching Themes: Automatically detects the user's device and applies the correct theme (iOS or Material Design) to ensure the app feels at home on the platform.
  • Native Navigation Logic: Includes a powerful router that manages history, transitions, and modal stacking exactly how a native mobile OS handles navigation controllers.
  • Gesture Support: Built-in support for complex touch interactions, such as swipe-to-delete list items and pull-to-refresh, without needing third-party libraries.
  • Capacitor/Cordova Ready: specifically architected to sit inside a WebView wrapper, handling safe areas (notches) and status bars automatically.
  • Vue/Svelte/React Support: While we focus on React here, its core logic is framework-agnostic, meaning the underlying engine is robust and widely tested across communities.

Code Snippet

Framework7 applications require a specific root structure (App, View) to handle the routing and navigation history.

import React from 'react';
import { 
  App, 
  View, 
  Page, 
  Navbar, 
  Block, 
  List, 
  ListItem 
} from 'framework7-react';

const HomePage = () => (
  <Page name="home">
    {/* Navbar automatically adapts layout for iOS/Android */}
    <Navbar title="My App" large />
    
    <Block strong>
      <p>This app feels native but runs in the browser.</p>
    </Block>

    <List>
      <ListItem title="Product 1" link="/product/1/" />
      <ListItem title="Product 2" link="/product/2/" />
      <ListItem 
        title="Swipe Me" 
        swipeout // Enables native-like swipe actions
      >
        <div slot="swipeout-actions-right">
          <div onClick={() => alert('Deleted!')}>Delete</div>
        </div>
      </ListItem>
    </List>
  </Page>
);

export default function MyApp() {
  // Framework7 parameters
  const f7params = {
    name: 'My App',
    theme: 'auto', // Detects iOS vs Material
  };

  return (
    <App {...f7params}>
      {/* Main View handles the navigation stack */}
      <View main url="/" />
    </App>
  );
}

In this example, theme="auto" does the heavy lifting. If opened on an iPhone, the Navbar will be translucent with a centered title. On Android, it will be solid with a left-aligned title.

Pros and Cons

No library is perfect; understanding the trade-offs is key to selecting the right tool.

Pros

  • Rapid Prototyping: You can build a high-fidelity mobile prototype that looks "real" in a fraction of the time it takes to build a React Native app.
  • PWA Excellence: Unmatched for building Progressive Web Apps that need to convince users they are native apps when installed on the home screen.
  • CSS Styling: Since it's just DOM elements, you use standard CSS/LESS/SCSS. No need to learn a specialized styling abstraction like StyleSheet.create.

Cons

  • Desktop Experience: The components are strictly designed for mobile paradigms. Using Framework7 for a standard desktop website often feels awkward (oversized touch targets, sliding transitions).
  • WebView Limitations: Unlike React Native, it runs in the DOM. Heavy animations or complex computations can suffer from jank on lower-end devices compared to native rendering.
  • Router Complexity: Framework7 uses its own router, which can be confusing if you are used to react-router. It's powerful but has its own learning curve.

Comparison with Other Mobile Solutions

The table below outlines the positioning differences between Framework7 and other popular mobile-first libraries:

LibraryDesign PhilosophyBest ForPain Points
Framework7Native Simulation
Pixel-perfect replication of iOS/Android UI patterns in the DOM.
PWAs & Hybrid Apps
Teams with strong web skills wanting a native feel without native code.
Desktop Usage
Not suitable for responsive desktop websites; mobile-first only.
Ionic (React)Universal Web
One codebase for Web, iOS, and Android with adaptive styling.
Cross-Platform
Apps that need to run decently on desktop web and mobile stores.
Generic Feel
Sometimes feels slightly less "native" in motion than Framework7's aggressive mimicking.
React NativeTruly Native
Renders actual platform UI views, not HTML.
Performance
High-performance apps requiring native device capabilities.
Development Speed
Slower iteration cycle; requires native build tools (Xcode/Android Studio).

Verdict: When to Adopt

Choose Framework7 if your primary goal is to ship a PWA or a hybrid app (via Capacitor) that is indistinguishable from a native app to the average user, and your team prefers working with standard HTML/CSS. It is the best choice for "web-native" applications where the "feel" of the navigation and transitions is critical. Avoid it if you are building a responsive website that targets desktop users primarily, or if you need the raw performance access of React Native.