WebSpace is a mobile app that brings all your favorite websites and web apps together in one organized, streamlined interface.
Features
- 📱 Organize sites into multiple webspaces
- 🔒 Per-site cookie isolation with secure storage
- 🌍 Per-site language preferences (30+ languages)
- 💾 Import/export settings for backup
- 🔄 Proxy support with authentication (Android, iOS 17+, macOS 14+, Linux)
- 🧹 Tracking parameter removal via ClearURLs rules (LGPL-3.0)
- 🛡️ DNS-level domain blocking via Hagezi blocklists (GPL-3.0, 5 severity levels)
- 🚫 Ad & tracker filtering (adblock-rust) with EasyList-style filter lists
- 📦 LocalCDN - cache CDN resources locally to prevent tracking (Android)
- 📌 Home screen shortcuts for quick site access
- 📜 Per-site user scripts (custom JavaScript injection)
- 🎨 Light/dark mode with accent colors
- FVM (Flutter Version Manager)
- Xcode (for iOS/macOS)
- Android SDK (for Android)
git clone https://github.com/theoden8/webspace_app
cd webspace_app
# Install Flutter version via FVM
fvm install
# Get dependencies
fvm flutter pub getThe content blocker's adblock-rust crate (rust/webspace_adblock) auto-builds and bundles as part of each platform build, so a normal fvm flutter build needs nothing extra:
- Android — Gradle
buildRustAdblocktask runs beforemergeJniLibFolders. Requirescargoon PATH andANDROID_NDK_HOME(or NDK installed under the SDK). Skip with-PskipRustAdblock=true. - Linux — CMake
webspace_adblock_sotarget runs before linking the runner. - iOS / macOS — Xcode "Build adblock-rust" Run Script Phase added by the Pods post_install hook.
To rebuild the crate alone (e.g. iterating on rust/webspace_adblock/) without a full Flutter build:
./scripts/build_rust.sh linux # or: android <abi> | android-all | ios | macosWithout cargo on PATH the Flutter build still succeeds — the Rust step prints a "skipping" notice and content blocking no-ops at runtime (there is no Dart fallback; Windows ships without the library).
| Platform | Status | Purpose |
|---|---|---|
| iOS | ✅ Supported | Target |
| Android | ✅ Supported | Target |
| macOS | ✅ Supported | Development |
| Linux | ✅ Supported | Development |
WebSpace's own source code is licensed under the MIT License - Copyright (c) 2023 Kirill Rodriguez.
Assets: Icons and images in the assets/ directory are licensed under CC BY-NC-SA 4.0 - Copyright (c) Polina Levchenko. See assets/LICENSE for details.
The MIT license covers WebSpace's original code. Third-party material falls into two distinct categories, neither of which conflicts with MIT:
1. Linked/compiled dependencies (part of the shipped binary) are all under permissive, MIT-compatible licenses:
| Component | License | Linkage |
|---|---|---|
| flutter_inappwebview (fork) | Apache-2.0 | Dart/native plugin |
| WPE WebKit (Linux only) | LGPL-2.1 | Dynamically linked system library (LGPL permits this from non-LGPL code) |
adblock-rust + rust/webspace_adblock wrapper |
MPL-2.0 | Optional native .so (file-level copyleft; source is in-repo and public) |
uBlock Origin web-accessible resources ($redirect bodies) |
MPL-2.0 | Embedded into the MPL-2.0 .so at build time |
lib/third_party/favicon, cdnjs helpers |
MIT | Vendored source |
| Other pub.dev packages (flutter_map, flutter_zxing/zxing-cpp, encrypt, …) | BSD-3 / MIT / Apache-2.0 | Standard pub dependencies |
MPL-2.0 and Apache-2.0 are file-/component-level copyleft and combine cleanly into an MIT-licensed larger work; the covered files keep their own license and their source stays available (it is all in this repo or upstream). LGPL applies only to the Linux WebKit system library, which is dynamically linked.
2. Filter-list and blocklist data is not compiled or bundled into the app. The (L)GPL / CC BY-SA lists below are downloaded at runtime from upstream by the user, cached on-device, and never committed to this repo or shipped in the APK/IPA:
| Data source | License | How it is used |
|---|---|---|
| ClearURLs Rules | LGPL-3.0 | Tracking-param rules fetched at runtime |
| Hagezi DNS blocklists | GPL-3.0 | Domain lists fetched at runtime |
| EasyList / EasyPrivacy / Fanboy | GPL-3.0 or CC BY-SA 3.0 (used under CC BY-SA 3.0) | Filter lists fetched at runtime |
| OpenStreetMap tiles/data | ODbL / CC BY-SA 2.0 | Map tiles fetched at runtime |
A program reading GPL-licensed data at runtime does not become a derivative work of that data, just as a browser loading a GPL filter list, or grep processing a GPL text file, is not itself GPL. These lists are listed here and in the in-app license page (Settings → Licenses, labelled "rules data" / "domain data" / "filter data") purely for attribution. Per-source license texts are bundled under assets/licenses/.




