Transform any website into a native mobile app with Flutter
WebWrap is a lightweight, highly configurable Flutter app that wraps any website into a native mobile experience. Perfect for quickly deploying web apps to iOS and Android app stores.
✅ Single YAML Configuration - Configure everything from one file ✅ Native Feel - Gesture navigation, system integration, adaptive theming ✅ Dark Mode Support - Automatic, light, or dark theme modes ✅ Offline Ready - Works offline with WebView caching ✅ Native URL Handling - Opens tel:, mailto:, maps:, and social links in native apps ✅ Customizable Splash Screen - Brand your app with custom logo and colors ✅ iOS-Style Swipe Navigation - Swipe from left edge to go back ✅ Store Ready - Meets Apple and Google Play requirements
git clone https://github.com/loSpaccaBit/webwrapper-flutter.git
cd webwrap
flutter pub getEdit assets/config.yaml:
app:
name: "My App"
website_url: "https://yourwebsite.com"
description: "Your app description"
theme:
dark_mode: "system" # "system", "light", or "dark"
light:
primary_color: "#2196F3"
background_color: "#FFFFFF"
dark:
primary_color: "#1976D2"
background_color: "#121212"Place your logo at assets/splash/logo.png (150x150px recommended)
flutter runapp:
name: "App Name" # App title
website_url: "https://..." # Website to wrap
description: "Description" # App descriptionWebWrap supports three theme modes:
system- Follows device settings (default)light- Always light themedark- Always dark theme
theme:
dark_mode: "system"
light:
primary_color: "#2196F3"
status_bar_color: "#1976D2"
status_bar_brightness: "dark"
background_color: "#FFFFFF"
dark:
primary_color: "#1976D2"
status_bar_color: "#000000"
status_bar_brightness: "light"
background_color: "#121212"splash_screen:
image: "assets/splash/logo.png"
background_color: "#FFFFFF"
duration_seconds: 2webview:
enable_javascript: true
enable_dom_storage: true
enable_zoom: false
clear_cache_on_start: false
allow_media_playback: true
allow_inline_media_playback: true
user_agent: null # null = defaultURLs with these prefixes will open in native apps:
native_url_handlers:
- "tel:" # Phone calls
- "mailto:" # Email
- "sms:" # SMS messages
- "maps:" # Maps
- "whatsapp:" # WhatsApp
- "tg:" # Telegramoffline:
enabled: true
light:
background_color: "#F5F5F5"
text_color: "#333333"
dark:
background_color: "#121212"
text_color: "#FFFFFF"Swipe from the left edge to navigate back - works just like iOS Safari. A subtle indicator appears during the gesture.
The app works offline by leveraging WebView's native caching:
- Automatically caches visited pages
- Shows toast notifications when going offline/online
- WebView remains visible even without connection
Automatically adapts to system theme or uses fixed light/dark mode. All UI elements (status bar, background, indicators) respect the current theme.
WebWrap includes features required for App Store and Play Store approval:
- Offline functionality (required by Apple)
- Native gesture navigation
- Proper error handling
- System integration (status bar, safe areas)
flutter build ios --releaseThen open ios/Runner.xcworkspace in Xcode to:
- Configure signing
- Set bundle identifier
- Upload to App Store Connect
flutter build appbundle --releaseUpload build/app/outputs/bundle/release/app-release.aab to Google Play Console.
webwrap/
├── assets/
│ ├── config.yaml # Main configuration
│ └── splash/
│ └── logo.png # Splash screen logo
├── lib/
│ ├── config/ # Configuration models
│ ├── screens/ # UI screens
│ ├── services/ # Business logic
│ └── main.dart # App entry point
└── pubspec.yaml # Dependencies
- Flutter 3.9.2+
- Dart 3.0+
- iOS 12.0+ / Android 5.0+
webview_flutter- WebView implementationconnectivity_plus- Network status monitoringurl_launcher- Native URL handlingshared_preferences- Local storageyaml- Configuration parsing
MIT License - See LICENSE file for details
For issues and feature requests, please open an issue on GitHub.
Made with Flutter 💙

