OpenWebF

Bring JavaScript and Web Dev to Flutter

Learn WebF | Developer Guide | Add WebF to Flutter

What is WebF?

WebF is a W3C/WHATWG-compliant web runtime for Flutter that implements HTML, CSS, and the DOM, running JavaScript in a browser-like environment. It's not a browserโ€”it's an application runtime optimized for building native apps using web technologies.

Unlike traditional WebViews, WebF features:

  • A custom Flutter-based rendering engine rather than relying on system browsers
  • Direct JavaScript-to-native communication without traditional bridge limitations
  • Ability to embed Flutter widgets as HTML elements within the app UI
  • An application-first design with a persistent JavaScript context

Why WebF?

Build Fast. Ship Fast. Run Fast.

WebF seamlessly glues Web, Flutter, and Native platforms together, enabling you to:

  • ๐Ÿš€ Build Fast: Develop with React, Vue, Svelte, Solid + TailwindCSS, build with Vite or Webpack, and leverage the entire npm ecosystem - it all just works in WebF
  • ๐Ÿ“ฆ Ship Fast: Deploy once across all Flutter-supported platforms (iOS, Android, Windows, macOS, Linux) from a single codebase
  • โšก Run Fast: Experience native-like performance with sub-100ms cold starts and 60fps animations that outpaces traditional WebView solutions

Key Features

Web Standards Compliance

  • ๐Ÿ”ท Modern JavaScript (ES6+) - QuickJS runtime with async/await, Promises, modules, optional chaining, and template literals
  • ๐Ÿ”ท Essential DOM APIs - Element creation/manipulation, event listeners (capture/bubble), query selectors, classList, custom elements, MutationObserver
  • ๐Ÿ”ท Comprehensive CSS Support - Flexbox layouts, positioned layouts (absolute/relative/fixed/sticky), flow layouts, colors, gradients, transforms (2D/3D), transitions, animations, CSS variables, media queries, pseudo-classes
  • ๐Ÿ”ท Web APIs - fetch, XMLHttpRequest, WebSockets, localStorage, sessionStorage, Canvas 2D, SVG, URL parsing, timers

Framework & Tooling Compatibility

  • โš›๏ธ Frameworks: React, Vue, Svelte, Preact, Solid, Qwik - your existing components and hooks work without modification
  • ๐Ÿ› ๏ธ Build Tools: Vite (recommended), Webpack, esbuild, Rollup, Parcel - HMR, tree-shaking, code splitting all supported
  • ๐ŸŽจ Styling: Tailwind CSS v3, Sass/SCSS, PostCSS, CSS Modules, Styled Components, Emotion
  • ๐Ÿ“ฆ npm Ecosystem: Access to thousands of npm packages and the entire JavaScript ecosystem

Flutter Integration

  • ๐Ÿ”— Hybrid UI - Embed Flutter widgets as HTML custom elements with native performance and platform-appropriate appearance
  • ๐ŸŽฏ Advanced Gestures - Handle complex touch interactions with native precision via FlutterGestureDetector
  • ๐Ÿ“ฑ Native Plugins - Access Flutter plugins (Share, Deep linking, and more) as npm packages
  • ๐Ÿ—๏ธ Cupertino Components - iOS-style native components without CSS emulation

Developer Experience

  • ๐Ÿ” Chrome DevTools - Console, DOM inspection, and network monitoring
  • ๐Ÿ“Š In-App DevTools - FPS, frame timing, and memory monitoring
  • ๐Ÿ”ฅ Hot Module Replacement - Full HMR support that preserves state across updates
  • โšก Async Rendering - Batched DOM updates that are 20x cheaper than browser implementations

Deployment & Performance

  • ๐Ÿš€ Over-the-Air Updates - Deploy instantly via CDN without app store reviews (compliant with Apple App Store and Google Play Store policies)
  • โšก Fast Startup - Production cold start < 100ms, development 200-300ms
  • ๐ŸŽฎ Smooth Animations - 60fps/120fps CSS transform animations with hardware acceleration
  • ๐Ÿ’พ Optimized Memory - Typical 10-30MB JavaScript heap with shared rendering context
  • ๐Ÿ”’ Security - Application sandbox, keychain/keystore encrypted storage with biometric protection, HTTPS enforcement

How It Works

Architecture Overview

WebF combines two complementary layers to deliver a complete web runtime:

1. Web Standards Layer

  • QuickJS JavaScript Runtime - Lightweight engine supporting ES6+ with a single, persistent context per instance
  • W3C/WHATWG DOM Implementation - Essential DOM APIs with event handling (capture/bubble phases)
  • CSSOM Implementation - CSS parsing and rule calculation following web standards

2. Custom Rendering Engine

  • Flutter-Based Layout Engine - Supports Flexbox (recommended), positioned layouts, and flow layouts
  • Hardware-Accelerated Rendering - Direct integration with Flutter's rendering pipeline
  • No System Dependencies - Independent of system WebViews or browser engines

Rendering Pipeline

  1. JavaScript Execution โ†’ Modifies the DOM
  2. CSS Calculation โ†’ Rules are calculated and applied
  3. Layout โ†’ Element positions and sizes determined
  4. Paint โ†’ Visual representation created
  5. Composite โ†’ Flutter widgets composite the final output

Key Optimization: WebF tracks "dirty" nodes to recalculate only affected subtrees (similar to React's reconciliation), and batches DOM updates to process them in the next frame, preventing layout thrashing.

Performance Benefits

  • Native-Like Speed - No WebView overhead, runs directly on Flutter's rendering pipeline
  • Fast Startup - Sub-100ms cold starts with lightweight runtime
  • Optimized Memory - Efficient resource usage with shared rendering context
  • Smooth Animations - 60fps/120fps performance across all platforms
  • Dedicated Thread - JavaScript runs in a dedicated thread without blocking UI

Getting Started

For Web Developers

Get started quickly using WebF Go - a preview app that lets you test WebF applications on real devices without building a custom Flutter app.

Prerequisites

  • Node.js (latest LTS recommended)

Quick Start

1. Download WebF Go

  • Desktop: Download from https://openwebf.com/en/go (macOS, Windows, or Linux)
  • Mobile: Download from App Store (iOS) or Google Play (Android)

2. Create Your Project

npm create vite@latest

Select your preferred framework (React, Vue, Svelte, etc.) when prompted.

3. Start Development Server

cd <your-project-name>
npm install
npm run dev

4. Load in WebF Go

  • Copy the Network URL from your terminal (typically http://localhost:5173)
  • Paste it into the WebF Go app's input field
  • Tap "Go"

Your application will render in the native WebF environment with hot-reload support for instant code changes!

For Flutter Developers

Add WebF to your existing Flutter app to enable web content rendering.

Installation

  1. Add WebF dependency to your pubspec.yaml:

    dependencies:
      webf: ^0.23.10  # Check pub.flutter-io.cn for latest version
    
  2. Run flutter pub get

Basic Setup

import 'package:webf/webf.dart';

void main() {
  // Initialize WebF controller manager
  WebFControllerManager.instance.initialize(
    WebFControllerManagerConfig(
      maxAliveInstances: 5,
      maxAttachedInstances: 3,
    ),
  );

  // Add a controller with prerendering
  WebFControllerManager.instance.addWithPrerendering(
    name: 'home',
    createController: () => WebFController(),
    bundle: WebFBundle.fromUrl('https://example.com/'),
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: WebF.fromControllerName(
          controllerName: 'home',
          loadingWidget: CircularProgressIndicator(),
        ),
      ),
    );
  }
}

Loading Content

WebF supports multiple content sources:

  • Remote URLs: WebFBundle.fromUrl('https://example.com/')
  • Local assets: WebFBundle.fromUrl('assets:///assets/web/index.html')
  • Development servers: WebFBundle.fromUrl('http://localhost:3000/')
  • Inline HTML: WebFBundle.fromContent('<!DOCTYPE html>...')

Documentation

๐Ÿ“š Complete Documentation - Learn WebF architecture, developer guides, and Flutter integration

Use Cases

WebF is ideal for:

  • โœ… Content-Heavy Applications - Apps with dynamic, frequently-updated content
  • โœ… Rapid Prototyping - Leverage web development speed for fast iteration
  • โœ… Cross-Platform Apps - Single codebase for iOS, Android, and desktop
  • โœ… Hybrid Native-Web UIs - Mix Flutter widgets with web content seamlessly
  • โœ… Over-the-Air Updates - Deploy features and fixes without app store review delays

Sponsors

Browser testing via

License

WebF is dual-licensed to provide flexibility for different use cases:

Open Source License (GPL-3.0)

WebF is licensed under the GNU General Public License version 3 (GPL-3.0) with the OpenWebF Enterprise Exception.

What this means:

  • โœ… Free for open-source projects - Use WebF freely in open-source applications under GPL-3.0 terms
  • โœ… Source code available - Full access to the source code on GitHub
  • โœ… Community contributions welcome - Join the community and contribute to the project
  • โœ… Package developers exemption - Published open-source packages (npm/Flutter packages) that depend on WebF can use any license
  • โš ๏ธ GPL requirements apply to applications - Applications using WebF must comply with GPL-3.0 terms (open source your application code)

Enterprise License

For commercial applications that cannot comply with GPL-3.0 requirements, we offer the OpenWebF Enterprise License:

  • โœ… Commercial use - Use WebF in closed-source commercial applications
  • โœ… No GPL restrictions - Freedom from GPL copyleft requirements
  • โœ… Enterprise support - Priority technical support and assistance
  • โœ… Additional features - Access to enterprise-only features and early releases

Enterprise Installation:

dependencies:
  webf: ^0.23.10  # Enterprise version available on pub.flutter-io.cn

Choosing the Right License

Use Case Recommended License Notes
Open-source applications GPL-3.0 (Open Source) Your app must be GPL-3.0 compatible
Published npm/Flutter packages Apache-2.0 or MIT Your package can use permissive licenses
Internal/non-distributed apps GPL-3.0 (Open Source) No distribution = no GPL obligations
Commercial closed-source apps Enterprise License Required for proprietary applications
Apps distributed via app stores Enterprise License Required unless app is open source
Educational/research projects GPL-3.0 (Open Source) Free for academic use

Contact

For licensing questions or to obtain an Enterprise License:

See the LICENSE file for the full GPL-3.0 license text and OpenWebF Enterprise Exception.

Community & Support