Skip to content

Add Unbounded widget proxy UI with 3D globe visualization#8492

Open
myleshorton wants to merge 9 commits intomainfrom
adam/unbounded-widget-proxy
Open

Add Unbounded widget proxy UI with 3D globe visualization#8492
myleshorton wants to merge 9 commits intomainfrom
adam/unbounded-widget-proxy

Conversation

@myleshorton
Copy link
Contributor

Summary

  • Go: FFI + mobile bindings for setUnboundedEnabled/isUnboundedEnabled, event subscription forwarding connection state changes to Flutter
  • Flutter: Unbounded screen with interactive three-globe WebView, share bandwidth toggle, Riverpod event pipeline from Go → Flutter → WebView JS
  • Globe shows animated arcs as censored users connect, with geo-IP lookup for peer location
  • Navigation from Settings → Unbounded screen

Depends on:

🤖 Generated with Claude Code

myleshorton and others added 7 commits February 23, 2026 12:10
Full feature implementation for the unbounded/broflake widget proxy:

Go: FFI and mobile bindings for setUnboundedEnabled/isUnboundedEnabled,
event subscription to forward connection state changes to Flutter.

Flutter: Unbounded screen with interactive three-globe WebView showing
animated arcs as censored users connect, share bandwidth toggle with
optimistic update, Riverpod event pipeline from Go through to WebView JS,
and geo-IP lookup for peer location visualization.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add info banner, status cards with live/total connection counts,
  auto-enable checkbox, and welcome dialog to Unbounded screen
- Add unbounded stats provider to track active and total connections
- Add new AppSetting fields: autoEnableUnbounded, unboundedWelcomeSeen,
  hideUnbounded with corresponding setters
- Create Unbounded Settings sub-page with auto-enable and hide toggles
- Add UnboundedSettingsScreen route and link from Settings page
- Conditionally hide Unbounded tile when hideUnbounded is enabled
- Remove stray root-level flags.dart and system_tray_notifier.dart

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@myleshorton myleshorton marked this pull request as ready for review February 24, 2026 20:37
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds “Unbounded” (widget proxy) support end-to-end: new Go core APIs/events, Flutter settings + UI screen, and a WebView-based 3D globe visualization driven by connection events.

Changes:

  • Introduces Go Core + FFI/mobile bindings for enabling/disabling Unbounded and emitting unbounded-connection events.
  • Adds Flutter Unbounded screens (main + settings) and Riverpod event pipeline/stats plumbing.
  • Updates routing, persistence (ObjectBox AppSetting fields), and assets/localization scaffolding.

Reviewed changes

Copilot reviewed 23 out of 25 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
pubspec.yaml Registers assets/unbounded/ for new Unbounded assets.
pubspec.lock Updates locked transitive versions/hashes.
lib/lantern/lantern_service.dart Routes Unbounded enable/isEnabled calls to FFI vs platform services.
lib/lantern/lantern_platform_service.dart Adds method-channel calls for Unbounded enable/isEnabled.
lib/lantern/lantern_generated_bindings.dart Adds FFI symbols for setUnboundedEnabled/isUnboundedEnabled.
lib/lantern/lantern_ffi_service.dart Implements Unbounded enable/isEnabled via FFI.
lib/lantern/lantern_core_service.dart Extends core service interface with Unbounded APIs.
lib/features/unbounded/unbounded_settings.dart New Unbounded settings screen (auto-enable/hide toggles).
lib/features/unbounded/unbounded.dart New Unbounded main screen + WebView globe + stats UI.
lib/features/setting/setting.dart Adds navigation tiles for Unbounded screen and Unbounded settings; hide toggle support.
lib/features/home/provider/app_setting_notifier.dart Adds AppSetting mutations for Unbounded flags and enabling call-through.
lib/features/home/provider/app_event_notifier.g.dart Riverpod generator output for new Unbounded stats listener provider.
lib/features/home/provider/app_event_notifier.dart Adds Unbounded connection event parsing + stream provider + stats plumbing.
lib/core/services/db/objectbox.g.dart Updates ObjectBox model code for new AppSetting fields.
lib/core/services/db/objectbox-model.json Updates ObjectBox schema metadata for new AppSetting fields.
lib/core/router/router.gr.dart Adds generated routes for Unbounded screens.
lib/core/router/router.dart Registers /unbounded and /unbounded-settings routes.
lib/core/models/entity/app_setting_entity.dart Persists new Unbounded-related boolean flags.
lantern-core/mobile/mobile.go Adds gomobile exports for enabling/querying Unbounded.
lantern-core/ffi/ffi.go Adds exported C FFI functions for enabling/querying Unbounded.
lantern-core/core.go Adds Unbounded interface, enable/isEnabled, and forwards connection events to Flutter.
go.sum Updates Go dependency sums (adds broflake, quic-go fork, etc.).
go.mod Adds/updates Go deps and replaces (quic-go fork, go-nats replace, radiance update).
assets/unbounded/globe.html Adds standalone globe HTML asset (Three.js/three-globe).
assets/locales/en.po Adds new locale keys related to Unbounded.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

* added platfrom methods and refactor to improve maintainability

* added localization and fixed UI issues

* connect more dots

* more localizetion

* UI fixes

* fix setting ui issue

* Replace webview with widget
@jigar-f
Copy link
Contributor

jigar-f commented Feb 27, 2026

This PR should not be merged until the utils below the PRs are merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants