Skip to content

theoden8/webspace_app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

462 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Platform Status Purpose
iOS ✅ Supported Target
Android ✅ Supported Target
macOS ✅ Supported Development
Linux ✅ Supported Development

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:

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/.

About

Your favorite web apps, now on your phone.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Contributors