You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Zyro Browser is a premium, high-performance mobile web browser for Android built with Flutter, featuring a futuristic Cyber-Bento design language. It combines a high-fidelity Flutter client with a dedicated Node.js/FFmpeg media microservice β offering native ad blocking, local internet usage analytics, smart video download, background audio playback, home screen web app installation, page QR sharing, per-site permission management, full-page screenshot capture with PDF export, and a sandboxed extension ecosystem.
β¨ Zyro is not a WebView wrapper with a thin UI shell. It is a complete, vertically integrated browser stack β from the Android foreground service layer through the Flutter extension engine to the Node.js stream extraction pipeline.
π Why Zyro Browser?
Capability
Description
π¨ Cyber-Bento Design
Glassmorphic, futuristic UI with Outfit typography and a deep indigo/teal/cyan palette
π‘οΈ Native Ad Blocking
Multi-layer request interceptor with 35+ rules blocking ads, trackers, beacons, and popunders
π Ad Block Analytics
Persistent per-domain blocked-request counters with daily reset and lifetime totals
π Usage Analytics
Local-only estimated internet usage by domain with today, monthly, and all-time views
π΅ Background Playback
Uninterrupted audio/video via Android MediaSession foreground service with lock-screen controls
π¬ Smart Video Detection
JavaScript-based detection across YouTube, Vimeo, Facebook, Instagram, Twitter/X, Dailymotion
Zyro follows a feature-first, provider-driven architecture:
main.dart β MultiProvider β ZyroApp β SplashScreen β BrowserMainScreen
β
βββ ThemeController theme mode persistence
βββ TabManager tabs + groups + session
βββ BrowserDataManager history, bookmarks, downloads
βββ ExtensionManager extension registry + lifecycle
βββ DownloadController download state + polling
βββ DevToolsController dev tools state
βββ AdBlockStatsService ad block analytics
βββ ScreenshotProController screenshot enable/expand state
βββ WebAppInstallerController installed apps + shortcut sync
βββ WebsitePermissionsController per-site permission rules
βββ UsageTrackingService local usage estimates by domain
State Management: Flutter Provider / ChangeNotifier throughout.
Persistence:SharedPreferences for all state (tabs, extensions, theme, permissions, ad block stats, screenshot settings, web apps, usage analytics).
Navigation: Named navigatorKey with globalScaffoldKey for cross-context snackbar delivery.
Font: Outfit (Google Fonts) via GoogleFonts.outfit().
Icons:lucide_icons for consistent iconography.
π‘ Platform Channels
All FlutterβAndroid communication is via MethodChannel in MainActivity.kt:
WebView shouldInterceptRequest(url)
βββ AdBlockService.interceptRequest(url)
βββ [blocked] β do not count usage
βββ [allowed] β UsageTrackingService.observeRequest(url, sourceUrl)
βββ DomainUsageNormalizer.normalize(url)
β βββ www.youtube.com / m.youtube.com β youtube.com
βββ Content-Length if available, otherwise safe byte estimate
βββ De-duplicate same URL estimate within the current minute
βββ UsageEntry.record()
β βββ totalBytes
β βββ monthlyBytes
β βββ todayBytes
β βββ requestCount
β βββ lastVisitedAt
βββ UsageStorageService β SharedPreferences
Settings β Usage
βββ Total data this month
βββ Total data today
βββ Today / This Month / All Time filters
βββ Top domains sorted by usage
βββ Clear usage data confirmation
Usage values are estimates when response sizes are not exposed by the WebView request callback. Downloads and media requests observed inside the WebView are attributed to their source/request domain; internal app routes, local files, extension assets, screenshots, QR generation, and app UI assets are skipped.
Privacy note: Usage Analytics are stored locally on your device and are used only to show your browsing data usage inside Zyro.
git clone https://github.com/Ashish6298/zyro.git
cd zyro
2οΈβ£ Run the Backend Microservice
cd zyro-backend
npm install
npm run dev
# Zyro Downloader Backend running on port 3000
FFmpeg must be on PATH. Verify with ffmpeg -version.
3οΈβ£ Run the Flutter Frontend
cd zyro-frontend
flutter pub get
flutter run
Backend URL: On a physical device, update DownloadApiService base URL from localhost to your development machine's LAN IP address.
Build Release APK
cd zyro-frontend
flutter build apk --release
# Output: build/app/outputs/flutter-apk/app-release.apk
β‘ Browser Engine Optimizations
π Navigation Engine
Smart URL routing (search vs. URL)
Popup interception β new tab
Back/forward navigation per tab
Undo closed tab (5-second window)
Desktop/mobile user-agent toggle
π― User Experience
Glassmorphic responsive components
Per-tab scroll position persistence
Tab group color labels
BouncingScrollPhysics in lists
Outfit typography + Lucide icons
π Performance & Stability
Cached provider refs in WebViewWrapper
handleTabClosed() on WebView dispose
Session saved for non-incognito only
Async SharedPreferences writes
Download poller auto-cancels on finish
π Browser Security & Privacy
Feature
Implementation
Incognito mode
Global toggle β separate ThemeMode, session not persisted
Ad/tracker blocking
35+ regex rules at WebView request interception level
Per-site permissions
Granular allow/ask/block per domain per resource type
Usage analytics
Stored locally on device via SharedPreferences; never sent to a server
Download URL sanitization
Strip UTM/tracking params before yt-dlp extraction
Playlist download rejection
Reject YouTube playlist URLs without v= parameter
Video height validation
FFmpeg-verified output resolution after merge
Shortcut URL validation
Only http:// and https:// accepted for web app shortcuts
π Technology Stack
Layer
Package / Technology
Role
Flutter
flutter_inappwebview ^6.1.5
WebView engine
Flutter
provider ^6.1.2
State management
Flutter
google_fonts ^6.2.1
Typography (Outfit)
Flutter
lucide_icons ^0.257.0
Icon set
Flutter
shared_preferences ^2.5.5
Local persistence
Flutter
path_provider ^2.1.2
File system paths
Flutter
permission_handler ^11.4.0
Android permissions
Flutter
image ^4.8.0
PNG decode/encode/stitch
Flutter
pdf ^3.11.3
PDF document generation
Flutter
qr_flutter 4.1.0
Address-bar current-page QR rendering
Flutter
http ^1.2.1
HTTP client (manifest/icon fetch)
Flutter
url_launcher ^6.2.5
External URL launch
Flutter
share_plus ^7.2.2
Native share sheet
Flutter
youtube_explode_dart ^2.2.2
YouTube utilities
Flutter
uuid ^4.3.3
UUID generation
Flutter
video_player ^2.9.2
In-app video playback
Android Kotlin
MediaSession
Lock-screen media controls
Android Kotlin
ShortcutManager
Home screen shortcut pinning
Android Kotlin
DownloadManager
System download integration
Android Kotlin
PowerManager.WakeLock
CPU awake during background play
Node.js
express ^4.19.2
REST API server
Node.js
youtube-dl-exec ^3.0.2
yt-dlp wrapper
Node.js
fluent-ffmpeg ^2.1.3
FFmpeg merge + MP3 conversion
Node.js
uuid ^9.0.1
Task ID generation
Node.js
cors ^2.8.5
CORS for Flutter client
πΊοΈ Future Roadmap
Items below are not currently implemented.
Floating Videos / PiP β directory scaffolded, no implementation yet
Dark Reader extension β registered in registry, script not yet active
KeyGen extension β registered in registry, not yet active
iOS support β Flutter project scaffolded; native channels are Android-only
Reading list & Favorites persistence (currently in-memory only)
Bookmarks import / export
Extension SDK for third-party extensions
Backend rate limiting and authentication
β οΈ Known Limitations
iOS: Native channel implementations (BackgroundPlayerService, ShortcutManager, DownloadManager) are Android-specific. The app will not function correctly on iOS.
Floating Videos (PiP):floating_videos directory is scaffolded but contains no implementation files.
Reading List & Favorites: In-memory only β resets on app restart.
Backend Reachability: Physical devices must point DownloadApiService to the LAN IP instead of localhost.
yt-dlp Maintenance: Depends on yt-dlp to parse platforms. Frequent YouTube changes may temporarily break extraction.
FFmpeg PATH:fluent-ffmpeg requires FFmpeg on the system PATH; fails silently if absent.
π€ Contributing
Fork the repository
Create a feature branch: git checkout -b feature/your-feature-name
Commit your changes
Push and open a Pull Request against main
Please follow the existing feature-first directory structure and document any new platform channel methods in this README.
π License
This project is licensed under the MIT License.
π¨βπ» Developer
Ashish Goswami
"Passionate about building modern applications, browser technologies, and user-focused digital products."
Website Vault
Website Vault is a local-first organization feature that gives every website/domain its own vault for important saved material. Users can keep website-related pages, links, screenshots, PDFs, downloads, notes, receipts, invoices, tracking pages, order pages, and other useful references grouped by domain instead of manually searching across downloads, history, bookmarks, and screenshots.
Key Capabilities
Capability
Description
Quick Actions entry
Website Vault is available from the existing Quick Actions page with the same Cyber-Bento visual language
Domain dashboard
Lists websites/domains with saved item counts, latest activity, storage usage, favicons, and category chips
Domain details
Shows saved vault items grouped by Screenshots, PDFs, Links, Downloads, Notes, Receipts/Invoices, and Pages
Search and filtering
Search by domain, title, URL, tags, note text, and saved item name; filter items by type inside a domain
Save current page
Save the active page/link directly into the current website vault
Screenshot Pro integration
Saved screenshots and PDFs can be associated with the source website vault
Download integration
Downloaded files can be linked to the source website when the source URL is available
Manual entries
Add notes and useful links directly from the Website Vault screen
Item actions
Open, Share, Rename, Delete, and Copy Link where applicable
Safe deletion
Deleting a vault item removes only the vault entry unless the user explicitly confirms local file deletion
Data Model
Website Vault uses WebsiteVaultItem, WebsiteVaultDomainSummary, and WebsiteVaultType models under lib/features/website_vault/models/.
Metadata is persisted locally through the app's existing local persistence approach, and vault files are organized under a clear domain-based folder structure such as:
Zyro/Vault/<domain>/
Privacy
Website Vault is stored locally on your device. Vault metadata and saved files are not uploaded to a server.
π Built with Flutter, Node.js & FFmpeg Β β’Β Crafted by Ashish Goswami