Skip to main content

Building for Web and Desktop

1. Enabling Web Support

To enable web support in a Flutter project, you need to run the following command:

Example: Enable Web Support

flutter config --enable-web

After running this command, you must also run flutter pub get in your project directory to update dependencies for web support.

Command Description Notes
flutter config --enable-web Enables web support for the Flutter SDK This command needs to be run once per machine
flutter pub get Updates dependencies to include web support Must be run in the project directory after enabling web

2. Understanding Web Project Structure

Directory/File Description Notes
lib/main.dart Main entry point for the Flutter app Same as mobile apps, but compiled to web
web/index.html Web entry point HTML file Template for the web app's initial HTML structure
web/favicon.ico Web app favicon Used by browsers to display the app icon
web/flutter_bootstrap.js Bootstrap script for Flutter Web Initializes the Flutter web app and loads assets
pubspec.yaml Project configuration file Includes web-specific configurations under flutter:

Example: pubspec.yaml web configuration

flutter:
  assets:
    - assets/images/
  uses-material-design: true
  web:
    favicon: assets/icons/icon-192.png
    title: My Flutter Web App
Note: The web/ directory is created automatically when you run flutter create . in a Flutter project. It contains all the web-specific files needed to build and run your app on the web.

3. Building Web App

Command Description Notes
flutter build web Builds a web application Generates files in build/web
flutter build web --release Builds a release version of the web app Optimizes for performance and size
flutter build web --web-renderer canvaskit Uses CanvasKit renderer for better performance Requires additional setup and larger bundle size
flutter build web --web-renderer html Uses HTML renderer (default) Better compatibility, smaller bundle size

Example: Building Web App

flutter build web --release
Note: The web build process requires the web platform to be added to your project. Run flutter create . with the --platforms=web flag to enable web support.

Web Build Configuration

  • Build Output: Generates files in build/web
  • Renderer Options: html (default) or canvaskit
  • Release Mode: Use --release for optimized builds
  • Deployment: Serve build/web directory via any web server

4. Using Web Renderers

Flutter supports multiple web renderers to optimize performance and compatibility. The choice of renderer can significantly impact how your app behaves in a web browser.

Renderer Description Features Notes
CanvasKit Uses Skia via WebAssembly for rendering.
  • High performance
  • Full Flutter feature support
Default for most web apps. Requires additional setup.
HTML Uses the browser's native HTML rendering engine.
  • Lightweight
  • Limited Flutter features
Better for simple apps or when performance is not critical.

Example: Setting the Web Renderer

flutter:
  web:
    renderer: html
Note: CanvasKit is the default renderer for Flutter web apps as of version 3.19. To use it, you must include the flutter_web_plugins package and configure your build process accordingly.
Warning: The HTML renderer does not support all Flutter widgets and features. Some complex animations or custom painting may not render correctly.

5. Enabling Desktop Support

Flutter supports desktop platforms (Windows, macOS, Linux) through the flutter_desktop feature. Desktop support is currently in beta and requires enabling the desktop embedding.

Platform Status Notes
Windows BETA Supported with full feature set
macOS BETA Supported with full feature set
Linux BETA Supported with full feature set

Example: Enabling Desktop Support

flutter:
  uses-material-design: true
  desktop:
    linux:
      package-name: myapp
      executable-name: myapp
    macos:
      bundle-id: com.example.myapp
    windows:
      package-name: myapp
Note: Desktop support requires Flutter 3.0 or later.
Warning: Desktop builds are not yet fully stable and may have missing features or bugs.

6. Building Windows App

Step Description Command
1 Ensure Flutter is installed and configured for Windows flutter config --enable-windows
2 Create or navigate to your Flutter project cd my_flutter_app
3 Run the build command for Windows flutter build windows
4 Locate the built executable build\windows\runner\Release\my_flutter_app.exe

Example: Building Windows App

flutter config --enable-windows
cd my_flutter_app
flutter build windows
Note: The Windows build requires Visual Studio 2019 or later with C++ support.
Warning: Ensure that the Windows SDK is installed and up to date.

7. Building macOS App

Step Description Command
1 Ensure Flutter is installed and configured for macOS development flutter doctor
2 Set the target platform to macOS flutter config --enable-macos
3 Run the app in debug mode on macOS flutter run -d macos
4 Build the app for release flutter build macos

Example: macOS Build Configuration

flutter:
  uses-material-design: true
  assets:
    - assets/images/
Note: The macOS build requires Xcode and the latest stable version of Flutter.
Warning: Ensure that your pubspec.yaml includes all necessary assets and dependencies for macOS.
Feature Status Notes
macOS Support NEW Available since Flutter 3.0
App Store Deployment DEPRECATED Use flutter build macos --release for distribution

8. Building Linux App

Command Description Notes
flutter build linux Builds a Linux desktop application Requires Flutter 3.0+ and Linux desktop support enabled
flutter build linux --release Builds a release version of the Linux app Optimizes for performance and size
flutter build linux --debug Builds a debug version of the Linux app Includes debugging symbols and tools

Example: Building a Linux App

flutter build linux --release
Note: Ensure that the Linux desktop support is enabled in your Flutter SDK by running flutter config --enable-linux.
Warning: The Linux desktop support is still in beta and may not be fully stable.

Linux App Build Process

  • Flutter uses the flutter build linux command to compile apps for Linux
  • Supports both debug and release builds
  • Requires the flutter config --enable-linux to be run once
  • Generated binaries are located in build/linux/x64/release/bundle

Linux vs Other Platforms

  • Flutter supports building for Linux desktop, similar to Windows and macOS
  • Linux builds use the flutter build linux command
  • Release builds are optimized for performance and size

9. Handling Platform-Specific APIs

Example: Using MethodChannel for Web/Desktop

import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';

final MethodChannel channel = MethodChannel('com.example.platform');

Future<dynamic> callPlatformAPI() async {
  if (defaultTargetPlatform == TargetPlatform.web ||
      defaultTargetPlatform == TargetPlatform.linux ||
      defaultTargetPlatform == TargetPlatform.windows ||
      defaultTargetPlatform == TargetPlatform.macOS) {
    try {
      final result = await channel.invokeMethod('someMethod');
      return result;
    } on PlatformException catch (e) {
      // Handle platform-specific errors
      print('Platform error: ${e.message}');
    }
  } else {
    // Fallback or alternative for mobile
    return 'default_value';
  }
}
Platform API Access Method Notes
Web MethodChannel with JS interop Uses window object for native JS APIs
Windows/MacOS/Linux MethodChannel with native plugins Requires platform-specific plugin setup
Note: On web, MethodChannel uses JavaScript interop via dart:js. Ensure your JS code is properly exposed to the Flutter app.
Warning: Native plugins for desktop platforms require additional setup and may not be available for all APIs.

Platform-Specific API Handling Summary

  • Web: Use MethodChannel with JS interop
  • Desktop: Use MethodChannel with native plugins
  • Mobile: Use MethodChannel directly

10. Packaging Desktop Applications

Platform Package Format Command Notes
Windows exe flutter build windows Creates a self-contained executable
macOS app flutter build macos Generates a .app bundle
Linux deb flutter build linux Builds a .deb package for Debian/Ubuntu

Example: Building for Windows

flutter build windows
Note: Ensure the Windows SDK is installed for building on Windows.
Warning: The built executable may require additional runtime dependencies on some systems.

Was this article helpful?