Why CommunityGlows Uses Tauri Instead of Forking Chromium
CommunityGlows brings several social networks into one workspace. On a large screen, multiple networks can remain open side by side. Profiles separate personal, professional, and client contexts. The same product logic also needs to work in a browser extension, a Windows application, and an Android application.
From the outside, the answer can look obvious: if the product sometimes behaves like a specialized browser, why not simply build our own version of Chromium?
It is a fair question. It reveals the central tension in our architecture: CommunityGlows needs some browser-like capabilities without trying to become a general-purpose browser.
Here is why we chose a Vue foundation with Tauri and native platform web engines, what that decision helped us avoid, and what it still requires us to build.
The short answer
We wanted to keep one interface across the extension, desktop, and mobile surfaces. CommunityGlows already had a Vue web foundation. Rewriting it in Dart for Flutter would have created a second interface to maintain.
Tauri lets us retain the HTML, CSS, and JavaScript interface, then call native code where a platform requires it. The project can use Rust for desktop orchestration and Kotlin for Android-specific behavior.
Most importantly, Tauri does not ship its own browser engine. It uses the engine supplied by the operating system: WebView2 on Windows, Android System WebView on Android, and WebKit on Apple platforms. Tauri’s official documentation describes this engine split.
A Chromium fork would give us more desktop control, but it would also turn browser maintenance into a core CommunityGlows activity. That is not the product we want to build.
A web interface does not mean “a website wrapped as an app”
The visible part of CommunityGlows is built with Vue. It owns navigation, profiles, settings, contextual tasks, and the Bento cockpit where several networks can be arranged.
That shared foundation produces several surfaces:
- the Chrome and Firefox extensions;
- the desktop application;
- the Android application;
- future platforms compatible with this architecture.
Shared code stops where platforms no longer behave alike. Opening a browser tab from an extension is not the same as creating several persistent web views in a Windows application. Android adds different rules for profiles, cookies, lifecycle events, and system integrations.
Tauri acts as the bridge at that boundary. Its core process orchestrates windows and native capabilities while WebView processes render the interface. Its process model resembles that of modern browsers without distributing a complete browser with every application.
A WebView is not quite a browser
A WebView displays web content inside an application. It provides the rendering engine, JavaScript, web storage, and fundamental navigation capabilities. It does not automatically include everything surrounding a browser: an address bar, extension store, complete download management, user profiles, or the application’s update policy.
On Windows, CommunityGlows uses WebView2. Microsoft says its Evergreen mode broadly follows the update cadence of the stable Edge channel. This gives the application a maintained web engine without packaging a fixed copy of Chromium in every installer. Microsoft documents the WebView2 distribution models.
On Android, Tauri uses Android System WebView, which is based on Chromium. The exact version therefore depends on the WebView provider present on the device. This reduces the distributed footprint but requires testing differences across versions and devices.
That distinction matters: Tauri avoids maintaining the engine; it does not remove the need to build product behavior around that engine.
What we still had to build
The word “WebView” can make the rest sound automatic. It is not when several accounts need to coexist cleanly.
CommunityGlows still has to manage:
- the relationship between a profile and a network;
- local session persistence;
- opening, hiding, and restoring panels;
- the limits of cookies,
localStorage, and other web storage; - Android deep links and sharing;
- the dimensions and layering of several Bento panels;
- native capabilities unavailable to the Vue interface.
This work explains why our native layer has grown. Tauri saved us from creating a browser engine, but it could not invent our profile model or multi-network cockpit.
For a closer look at Android session separation, read our article about WebView profiles. For the limitations of password managers inside embedded web screens, see our dedicated analysis.
Why not Flutter?
Flutter is a strong choice when a team wants to build a cross-platform interface around its own rendering system. Its documentation describes a Dart-based UI toolkit with native integrations through plugins and platform views. Flutter’s official architectural overview explains the model.
CommunityGlows started from a different position. We already had a Vue interface and a JavaScript browser extension. Moving to Flutter would have meant:
- rewriting the main interface in Dart;
- maintaining the extension surfaces separately;
- still using native WebViews to display social networks;
- rebuilding the bridges required by platform-specific behavior.
Flutter would have unified a new interface, but it would not have removed the main challenge: orchestrating several third-party sites and their sessions in platform-specific web engines.
Why not Electron?
Electron ships Chromium and Node.js with the application. That approach provides a more consistent desktop environment because the distributed version controls the engine.
This would have been attractive for the desktop Bento. However, CommunityGlows also targets Android and, later, Apple platforms. Electron is not a shared mobile answer, so the phone would still need a different architecture.
Electron does not make embedded external content effortless either. Its own documentation now recommends considering WebContentsView or other architectures instead of the older <webview> element, whose stability is affected by internal Chromium changes. See Electron’s official recommendation.
The choice would therefore trade system-engine variation for a bundled Chromium runtime and a separate mobile strategy.
Why not fork Chromium?
A Chromium fork would give us the deepest control over profiles, extensions, tabs, process lifecycle, and features normally provided by a browser.
But “forking Chromium” is not simply changing a logo and adding a sidebar. Chromium is the open-source project for a complete browser, including the Blink rendering engine, V8 JavaScript engine, sandbox, processes, tests, and security updates.
Its official instructions require a specialized build toolchain, a source checkout, build generation with GN, and compilation with Ninja. Chromium’s documentation shows the scale of that maintenance surface.
Once we distribute our own Chromium, we become responsible for following upstream development, integrating fixes quickly, testing every version, and delivering updates. Chromium’s own principles explicitly place automatic updates, defense in depth, and testing at the center of browser security. These are continuous responsibilities, not a one-time setup task.
That cost can make sense for a company whose product is “a new browser.” For CommunityGlows, it would divert substantial effort away from our actual value: organizing social work, reducing context switching, and keeping profiles understandable.
The real tradeoff in our architecture
We do not claim that Tauri wins every category.
| Need | Vue + Tauri + system WebViews | Bundled or forked Chromium |
|---|---|---|
| Reuse the extension interface | Natural | Possible |
| Share the desktop/mobile approach | Yes, with native adaptations | Not directly |
| Control the exact desktop engine | Limited by the platform | Strong |
| Keep rendering consistent across systems | Harder | More predictable on desktop |
| Maintain the engine and its fixes | Delegated to system vendors | Publisher responsibility |
| Build profiles and the cockpit | CommunityGlows work | Still CommunityGlows work |
The final row is the most important. A browser engine provides powerful primitives, but it does not design the product or its trust boundaries. Even with Chromium, we would still have to define a CommunityGlows profile, how a Bento Scene is restored, and which data must remain strictly local.
Would we make the same choice today?
For a desktop-only product entirely centered on browsing, we would probably investigate a Chromium distribution or a shell that bundles Chromium more seriously. Extension support and engine consistency could justify the cost.
For CommunityGlows as it exists — extension, Windows, Android, and a shared Vue interface — we would keep the current direction. Starting over with a Chromium fork would shift energy into browser maintenance without solving our mobile requirement.
That does not mean the architecture is frozen. We will continue measuring memory use, session stability, network compatibility, and the cost of the native layer. A technical decision remains valid while it serves the product and its users, not merely because it was written in an architecture document.
What this choice means for users
People do not need to understand Rust, Kotlin, or WebView2 to use CommunityGlows. But the architecture explains several visible realities:
- signing in to a network remains local to the device;
- some behavior differs slightly between Windows and Android;
- the product can share its interface without pretending every platform is identical;
- web engine updates can improve or change compatibility independently of a CommunityGlows update.
Our goal is not to hide these limits behind the word “cross-platform.” It is to build a coherent workspace while being clear about where our guarantees end.
Next, discover how Bento turns a large screen into a multi-network cockpit, or explore the other technical articles on the blog to learn more about sessions and WebViews.
Ready to organize your networks?
Explore the Windows app and its getting-started guide.
Download for Windows