Convert any website into a native application for iOS, Android, macOS, Windows, and Linux with a simple web-based interface.
- Overview
- Features
- Supported Platforms
- Prerequisites
- Installation
- Usage
- Project Structure
- API Reference
- Demo Video
- Screenshots
- TODO
- Contributing
- License
- Authors
SWAB (Spyxpo Web to App Builder) is a Flask-based tool that transforms websites into native applications using Flutter's WebView capabilities. It provides a modern web interface for configuring app settings and building platform-specific executables without writing any code.
Note: This is a preview build for testing purposes. A major update is coming soon.
demo.mp4
- Multi-Platform Support - Build apps for Android, iOS, macOS, Windows, and Linux from a single configuration
- Web-Based Interface - Intuitive UI with real-time device preview
- Customizable WebView - Fine-grained control over WebView behavior and features
- Live Preview - Preview your website in different device frames before building
- Progress Tracking - Real-time build progress updates
- Android Signing - Support for custom keystore files for Android release builds
- No Coding Required - Convert any website to an app without writing code
- Add iOS code signing support
- Implement user authentication for build management
- Deploy a hosted version of SWAB
- Add support for push notifications (Firebase/APNs)
- Custom splash screen with configurable duration and animation
- App icon generator from uploaded image (auto-resize for all platforms)
- Custom loading indicator styles (spinner, progress bar, skeleton)
- Offline mode with custom offline page
- Deep linking / URL scheme support
- Custom user agent string configuration
- Inject custom CSS/JavaScript into WebView
- Dark mode support with auto-detection
- SSL certificate pinning for enhanced security
- Biometric authentication (Face ID / Touch ID / Fingerprint)
- App password/PIN lock feature
- Secure storage for sensitive data
- Native share functionality
- File download manager with progress tracking
- Camera and gallery access from web
- QR code / barcode scanner integration
- Native contact picker access
- Clipboard integration
- Local notifications support
- Background sync capabilities
- App shortcuts (Android) / Quick Actions (iOS)
- Optimize build times with caching
- Multi-app batch building
- Build history and version management
- Direct upload to App Store Connect / Google Play Console
- Generate privacy policy and terms of service pages
- App size optimization options
- ProGuard/R8 configuration for Android
- Add more WebView configuration options
- Native navigation drawer / bottom navigation
- Custom status bar and navigation bar colors
- Orientation lock options (portrait/landscape/both)
- Safe area handling for notched devices
- Haptic feedback options
- Native alert/confirm dialogs
- Firebase Analytics integration
- Crash reporting (Crashlytics/Sentry)
- In-app update prompts
- Remote configuration support
- Usage analytics dashboard
- Improve error handling and logging
- API documentation with Swagger/OpenAPI
- CLI tool for headless builds
- Webhooks for build completion notifications
- Docker support for consistent build environment
- Build configuration templates/presets
| Platform | Output Format |
|---|---|
| Android | APK |
| Android | AAB (App Bundle) |
| iOS | .app (requires Xcode for signing) |
| macOS | .app (bundled as ZIP) |
| Windows | Executable (bundled as ZIP) |
| Linux | Binary (bundled as ZIP) |
Before using SWAB, ensure you have the following installed:
- Python 3.8+
- Flutter SDK (with platform-specific toolchains configured)
- Platform-Specific Requirements:
- Android: Android SDK, Android Studio
- iOS/macOS: Xcode (macOS only)
- Windows: Visual Studio with C++ workload
- Linux: Clang, CMake, GTK development libraries
1.Clone the repository:
git clone https://github.com/user/swab.git
cd swab2.Create and activate a virtual environment:
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate3.Install dependencies:
pip install -r requirements.txt4.Verify Flutter is properly configured:
flutter doctorRun the Flask application:
python app.pyThe web interface will be available at http://localhost:5000.
- Open the web interface in your browser
- Fill in the app details:
- App Name - Display name for your application
- Description - Brief description of the app
- Version - Semantic version number (e.g., 1.0.0)
- Build Number - Integer build number for updates
- Package Name - Unique identifier (e.g., com.example.myapp)
- Enter the website URL to convert
- Configure WebView options as needed
- Select the target platform from the dropdown
- Click Build and wait for completion
- Download the generated app package
| Option | Description | Default |
|---|---|---|
| Allow Zoom | Enable pinch-to-zoom functionality | Enabled |
| Enable JavaScript | Run JavaScript in the WebView | Enabled |
| Enable DOM Storage | Allow localStorage and sessionStorage | Enabled |
| Enable Geolocation | Allow location access requests | Enabled |
| Pull to Refresh | Enable pull-down refresh gesture | Enabled |
| Show Navigation Bar | Display back/forward navigation controls | Enabled |
| Enable File Access | Allow access to local files | Enabled |
| Enable Cache | Cache web content for offline access | Enabled |
| Media Autoplay | Automatically play media content | Disabled |
swab/
├── app.py # Flask application and build logic
├── requirements.txt # Python dependencies
├── templates/
│ ├── ui/ # Web interface templates
│ └── webview_app/ # Flutter WebView template
├── static/
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript files
│ └── images/ # Static images
├── builds/ # Generated build outputs
└── uploads/ # Uploaded keystore filesPOST /api/buildRequest Body:
{
"app_name": "My App",
"app_description": "App description",
"app_version": "1.0.0",
"build_number": 1,
"package_name": "com.example.myapp",
"web_url": "https://example.com",
"platforms": ["android"],
"allow_zoom": true,
"enable_javascript": true
}Response:
{
"build_id": "uuid-string"
}GET /api/build/<build_id>/statusResponse:
{
"status": "building",
"progress": 45,
"message": "Building for android..."
}GET /api/build/<build_id>/download/<platform>Returns the built application file as a download.
POST /api/upload/keystoreUpload an Android keystore file for release signing.
Contributions are welcome! You can contribute to this project by forking it and making a pull request.
After forking:
git clone https://github.com/<your-username>/swab.git
cd swab
git checkout -b <your-branch-name>
# after adding your changes
git add .
git commit -m "your commit message"
git push origin <your-branch-name>This project is licensed under the MIT License. See the LICENSE file for details.

