README.md

June 18, 2026 ยท View on GitHub

WebSpace Feature Graphic

Release Downloads Build and Test Sponsor theoden8

Get it on F-Droid Download on the App Store ย ย  Get it on Google Play

Overview

WebSpace is a mobile app that brings all your favorite websites and web apps together in one organized, streamlined interface.

Screenshots

All Sites Sites Drawer Work Webspace Workspace Sites

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

Development

Prerequisites

  • FVM (Flutter Version Manager)
  • Xcode (for iOS/macOS)
  • Android SDK (for Android)

Setup

git clone https://github.com/theoden8/webspace_app
cd webspace_app

# Install Flutter version via FVM
fvm install

# Get dependencies
fvm flutter pub get

Building the adblock engine

The 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 buildRustAdblock task runs before mergeJniLibFolders. Requires cargo on PATH and ANDROID_NDK_HOME (or NDK installed under the SDK). Skip with -PskipRustAdblock=true.
  • Linux โ€” CMake webspace_adblock_so target 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 | macos

Without 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 Support

PlatformStatusPurpose
iOSโœ… SupportedTarget
Androidโœ… SupportedTarget
macOSโœ… SupportedDevelopment
Linuxโœ… SupportedDevelopment

License

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.

Third-party components

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:

ComponentLicenseLinkage
flutter_inappwebview (fork)Apache-2.0Dart/native plugin
WPE WebKit (Linux only)LGPL-2.1Dynamically linked system library (LGPL permits this from non-LGPL code)
adblock-rust + rust/webspace_adblock wrapperMPL-2.0Optional native .so (file-level copyleft; source is in-repo and public)
uBlock Origin web-accessible resources ($redirect bodies)MPL-2.0Embedded into the MPL-2.0 .so at build time
lib/third_party/favicon, cdnjs helpersMITVendored source
Other pub.dev packages (flutter_map, flutter_zxing/zxing-cpp, encrypt, โ€ฆ)BSD-3 / MIT / Apache-2.0Standard 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 sourceLicenseHow it is used
ClearURLs RulesLGPL-3.0Tracking-param rules fetched at runtime
Hagezi DNS blocklistsGPL-3.0Domain lists fetched at runtime
EasyList / EasyPrivacy / FanboyGPL-3.0 or CC BY-SA 3.0 (used under CC BY-SA 3.0)Filter lists fetched at runtime
OpenStreetMap tiles/dataODbL / CC BY-SA 2.0Map 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/.