Zum Hauptinhalt springen
Cross-Platform Development Teil 2: Flutter und GPUI
#Cross-Platform #Flutter #GPUI #Rust #Desktop Apps

Cross-Platform Development Teil 2: Flutter und GPUI


Von eigenen Rendering-Engines bis GPU-nativem Rendering – die Performance-Revolution im Desktop-App-Bau

SerieCross-Platform Development
Teil 2 von 2
12 Minuten Lesezeit

Im ersten Teil dieser Serie habe ich Electron und Tauri verglichen – beide nutzen Web-Technologien, aber mit unterschiedlichen Ansätzen. Electron bringt Chromium mit (schwer), Tauri nutzt den OS-WebView (leicht).

In diesem zweiten Teil schaue ich mir Flutter und GPUI an – zwei Frameworks, die komplett andere Wege gehen:

  • Flutter rendert mit eigener Engine (Skia) – kein Browser nötig
  • GPUI geht noch weiter: GPU-natives Rendering direkt über Metal/Vulkan/DirectX

Beide Ansätze versprechen native Performance – aber mit unterschiedlichen Trade-offs. Dieser Artikel zeigt, wann diese Frameworks Sinn machen und wie sie sich im direkten Vergleich zu Electron und Tauri schlagen.

Flutter: Ein komplett anderer Ansatz

Eigene UI-Engine statt Browser

Flutter kommt aus einer anderen Welt: Google entwickelte es ursprünglich für Mobile Apps (Android + iOS) – Desktop-Support kam später.

Der zentrale Unterschied:

Electron/TauriFlutter
Nutzt Browser (HTML/CSS)Eigene UI-Engine
DOM-RenderingCanvas/Skia-Rendering
Web-TechnologienDart-Sprache
WebView-PerformanceNative-ähnliche Performance

Wie funktioniert Flutter?

  • Skia: 2D-Grafik-Engine (auch in Chrome verwendet)
  • Flutter rendert jedes Pixel selbst
  • Kein Browser, kein WebView, kein DOM
  • UI wird direkt auf Canvas/GPU gezeichnet

Das bedeutet:

  • Volle Kontrolle über jeden Frame
  • Konsistentes Aussehen auf allen Plattformen
  • Sehr gute Performance (60 FPS sind Standard)

Vorteile: Konsistenz und Performance

1. Konsistente UI auf allen Plattformen

Bei Electron/Tauri:

  • UI sieht unterschiedlich aus (je nach Browser)
  • CSS kann auf Windows anders aussehen als auf macOS

Bei Flutter:

  • UI sieht exakt gleich aus
  • Pixel-perfekt identisch auf allen Plattformen
  • Design-Vorgaben (z.B. Figma) können 1 umgesetzt werden

2. Sehr gute Performance

Flutter ist für 60 FPS+ optimiert:

  • Rendering direkt auf GPU
  • Kein DOM-Overhead
  • Hot Reload während Entwicklung
  • Smooth Animationen sind einfach

Typische Flutter-App:

  • 30-50 MB RAM im Idle
  • 10-30 MB Bundle-Size
  • Start in unter 1 Sekunde

3. Große Community, viele Pakete

Flutter hat ein riesiges Ökosystem:

  • 40.000+ Pakete auf pub.dev
  • Starke Mobile-Community (größer als Desktop)
  • Viele UI-Komponenten verfügbar
  • Gute Dokumentation

4. Reactive UI-Modell

Flutter nutzt ein reaktives Pattern:

  • Ähnlich wie React (aber nicht identisch)
  • State-Management mit Provider, Riverpod, Bloc
  • Deklarative UI-Definition
class Counter extends StatefulWidget {
  @override
  _CounterState createState() => _CounterState();
}

class _CounterState extends State<Counter> {
  int count = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('Count: $count'),
        ElevatedButton(
          onPressed: () => setState(() => count++),
          child: Text('Increment'),
        ),
      ],
    );
  }
}

Nachteile: Größe und Plattform-Feeling

1. Größere App-Größen als native Apps

  • Flutter-Runtime muss mitgeliefert werden
  • Typisch: 15-30 MB für einfache Apps
  • Bei vielen Assets/Dependencies: 50-100 MB
  • Kleiner als Electron, größer als echte native Apps

2. UI fühlt sich manchmal „untypisch” für das OS an

Flutter rendert alles selbst → UI folgt nicht automatisch OS-Konventionen.

Beispiel:

  • macOS: Nutzer erwarten native Menüs, Scrollverhalten, Fenster-Controls
  • Flutter: Kann das nachbauen, fühlt sich aber oft leicht „off” an

Lösung: Flutter bietet Cupertino (iOS-Style) und Material (Android-Style) Widgets – aber echtes macOS/Windows-Feeling ist schwer. Mehr zu meinen Erfahrungen mit Flutter und nativen Plattformen in meinem Artikel über Flutter vs. iOS.

Meine Perspektive für Desktop-Anwendungen:

In meiner Praxis nutze ich Flutter verstärkt für Desktop-Anwendungen – und die Frage nach “nativem Look-and-Feel” ist für mich zweitrangig. Was zählt, ist das Ergebnis: Funktioniert die App? Ist sie performant? Kann ich sie schnell weiterentwickeln?

Bei Business-Anwendungen und internen Tools steht Funktionalität über Plattform-Konformität. Nutzer gewöhnen sich schnell an ein konsistentes UI-Design – egal ob es “typisch macOS” oder “typisch Windows” ist. Der Vorteil: Ich entwickle einmal und habe eine App, die auf allen Plattformen identisch funktioniert und aussieht. Kein plattformspezifisches Debugging, keine unterschiedlichen Verhaltensweisen.

Für Produktiv-Tools, die Ergebnisse liefern müssen, ist das ein klarer Gewinn.

3. Desktop noch nicht so ausgereift wie Mobile

Flutter Desktop ist seit 2021 stable – aber:

  • Viele Packages sind nur für Mobile optimiert
  • Desktop-spezifische Features (z.B. Menübars, System Tray) brauchen Plugins
  • Community ist primär Mobile-fokussiert

4. Dart-Sprache

Dart ist nicht mainstream:

  • Weniger Entwickler kennen es (im Vergleich zu JavaScript)
  • Lernkurve für Web-Teams höher als bei Tauri
  • Nicht so viele Jobs wie JavaScript/TypeScript

Wo Flutter heute am stärksten eingesetzt wird

Mobile-First mit Desktop als Bonus:

Viele Unternehmen nutzen Flutter so:

  1. Primär für iOS + Android (ein Codebase statt zwei)
  2. Desktop-Version als Add-on mit wenig Extra-Aufwand

Beispiele:

  • Google Ads (Mobile + Desktop)
  • Alibaba (E-Commerce-Apps)
  • BMW (Connected Car App)
  • eBay Motors (Teilweise)

Wo Flutter glänzt:

  • Consumer-Apps mit viel UI (E-Commerce, Social, Media)
  • Design-heavy Apps (Custom UI, Branding)
  • Cross-Platform Mobile + Desktop aus einem Codebase

Wo Flutter schwächelt:

  • Productivity-Tools (fühlen sich oft nicht „native” an)
  • OS-Integration (Menüs, System Tray, Keyboard Shortcuts)
  • Web-Frontend-Reuse (kannst du nicht – Dart statt JavaScript)

Stark für UI-lastige Apps, weniger für Desktop-First

Flutter ist eine exzellente Wahl für:

✅ Mobile-First-Projekte, die auch Desktop wollen

✅ Apps mit starkem UI/UX-Fokus

✅ Teams, die volle Kontrolle über Rendering wollen

Weniger geeignet für:

❌ Desktop-First-Apps mit typischen OS-Interaktionen

❌ Teams, die bestehenden Web-Code wiederverwenden wollen

❌ Projekte, die sehr native macOS/Windows-Feeling brauchen

Meine Erfahrung mit Flutter:

Von allen Cross-Platform-Frameworks habe ich mit Flutter die meiste Praxiserfahrung. Ich habe bereits mehrere Anwendungen damit realisiert und bin sehr zufrieden mit der Performance und der plattformübergreifenden Entwicklung. Die Entwickler-Experience ist gut, Hot Reload macht die Entwicklung produktiv, und die Konsistenz über alle Plattformen hinweg ist ein echter Vorteil. Für UI-lastige Projekte mit Mobile-Fokus ist Flutter aus meiner Sicht aktuell unschlagbar.

GPUI: Der neue Herausforderer aus der Rust-Welt

Hintergrund: Zed-Editor-Team

GPUI ist das UI-Framework hinter Zed, einem modernen Code-Editor, der als “schnellster Editor der Welt” antritt.

Das Problem, das Zed lösen wollte:

  • VSCode (Electron): Zu langsam, zu viel RAM
  • Native macOS-Apps (z.B. Xcode): Nicht cross-platform
  • Existierende Rust-UI-Frameworks: Zu unreif oder zu limitiert

Die Lösung: GPUI bauen

Das Zed-Team entwickelte ihr eigenes Framework – und machte es Open Source.

Die Kernidee:

  • Rendering direkt über GPU (via wgpu)
  • Kein Browser, kein WebView
  • React-ähnliches UI-Modell – aber in Rust
  • Performance wie native Apps – aber cross-platform

Architektur: Hybrid aus Immediate- und Retained-Mode

GPUI nutzt wgpu, eine Rust-Bibliothek für GPU-Zugriff:

  • wgpu abstrahiert moderne Graphics APIs (Vulkan/Metal/DirectX)
  • GPUI rendert UI-Elemente direkt auf die GPU
  • Hybrid-Ansatz: Kombiniert Immediate-Mode (flexibel) und Retained-Mode (performant)
  • Kein Browser-Overhead, keine WebView

Plattform-Status:

  • macOS: Produktionsreif (Metal)
  • Linux: Im Aufbau (Vulkan)
  • Windows: Im Aufbau (DirectX)

Der Fokus liegt aktuell klar auf macOS, andere Plattformen folgen.

Was bedeutet das praktisch?

Electron/TauriFlutterGPUI
Browser rendertSkia rendertDirekt GPU
DOM-BaumWidget-TreeElement-Tree
CSS-StylingDart-WidgetsRust-Components

Vorteil gegenüber anderen Rust-UI-Frameworks (z.B. egui):

  • Deutlich mehr Flexibilität
  • Besser für große, komplexe Anwendungen
  • Aber: Steilere Lernkurve

Vorteile: Extrem schlank und schnell

1. Minimale Bundle-Size

  • 8-15 MB (Electron = 200 MB, Tauri = 10 MB)
  • Nur Rust-Binary, kein Browser, keine Runtime

2. Sehr niedriger RAM-Verbrauch

Zed Editor vs. VSCode (gleiche Projekte):

  • Zed (GPUI): 50-100 MB RAM
  • VSCode (Electron): 300-800 MB RAM

3. Native Performance

  • Startup: Unter 500ms
  • Rendering: 120 FPS auf High-Refresh-Displays
  • Responsiv auch bei komplexen Layouts

4. React-ähnliches UI-Modell

Deklarativ und komponentenbasiert – aber in Rust:

fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
    div()
        .flex()
        .flex_col()
        .child(
            h1().text("Hello GPUI")
        )
        .child(
            button()
                .on_click(|_, cx| {
                    println!("Button clicked");
                })
                .child("Click me")
        )
}

Ähnlich wie React, aber mit Type-Safety und direktem GPU-Rendering (kein Virtual DOM).

5. Component-Ökosystem (shadcn/ui-ähnlich)

Styling über Rust-Code, ähnlich Tailwind-Klassen:

use gpui::*;

button()
    .bg(colors::blue_500)
    .text_color(colors::white)
    .px_4()
    .py_2()
    .rounded_md()
    .on_click(|_, cx| {
        // Action
    })
    .child("Submit")

6. Hybrid-Ansatz möglich

GPUI kann WebViews einbetten – praktisch für Migration von bestehenden Web-Apps oder Legacy-Code-Integration.

Potenzial und Limitierungen

Warum GPUI spannend ist:

  • Performance auf Native-Niveau, aber cross-platform
  • Bundle-Size konkurriert mit nativen Apps (8-15 MB)
  • Moderne Developer-Experience (React-ähnlich, type-safe)
  • Rust-Ökosystem wächst rasant

Aktuelle Herausforderungen:

  • Sehr jung – seit 2023 öffentlich, aktiv in Entwicklung
  • Kleine Community – deutlich kleiner als Electron/Tauri/Flutter
  • Lernkurve – Rust + GPU-Konzepte schwieriger als JavaScript/Dart
  • Ökosystem – wenige Third-Party-Komponenten (aber wachsend)
  • Plattform-Support – macOS produktionsreif, Linux/Windows folgen

Positiv:

  • Zed Editor beweist: Produktionsreif für große Projekte
  • Community wächst durch steigende Rust-Popularität
  • Performance-Vorteil ist signifikant messbar

GPUI könnte das Framework für die nächste Generation werden – wenn es kritische Masse erreicht.

Meine Einschätzung zu GPUI:

GPUI ist für mich das spannendste Framework in diesem Vergleich – und gleichzeitig das größte Fragezeichen. Ich bin begeisterter Nutzer von Zed, dem Editor, der mit GPUI gebaut wurde, und die Performance ist beeindruckend. Als großer Rust-Fan (mehr dazu in meinem Artikel über Rust) arbeite ich mich gerade in GPUI ein.

Die große Frage: Könnte GPUI für mich ein würdiger Nachfolger für Flutter werden? Das würde voraussetzen, dass das Ökosystem wächst und die Community größer wird. Aber das Potenzial ist definitiv da – GPU-natives Rendering mit der Sicherheit und Performance von Rust könnte tatsächlich die nächste Generation von Cross-Platform-Frameworks definieren. Ich bin gespannt, wie sich GPUI in den nächsten 1-2 Jahren entwickelt.

Vergleich aller vier Frameworks

Leistung & Ressourcen

Bundle-Size:

GPUI:     8-15 MB      ████░░░░░░░░░░░░░░░░
Tauri:    10-20 MB     █████░░░░░░░░░░░░░░░
Flutter:  20-40 MB     ██████████░░░░░░░░░░
Electron: 180-250 MB   ████████████████████

RAM-Verbrauch (Idle):

GPUI:     50-100 MB   ████░░░░░░░░░░░░░░░░
Flutter:  80-150 MB   ██████░░░░░░░░░░░░░░
Tauri:    100-200 MB  ████████░░░░░░░░░░░░
Electron: 300-600 MB  ████████████████░░░░

Startup-Zeit:

GPUI:     unter 0.5s  ███░░░░░░░░░░░░░░░░░░
Flutter:  unter 1s    ██████░░░░░░░░░░░░░░░
Tauri:    1-2s        ████████████░░░░░░░░░
Electron: 2-4s        ████████████████████░

Performance-Ranking:

  1. GPUI – GPU-nativ, minimal overhead
  2. Flutter – Eigene Engine, optimiert
  3. Tauri – WebView-abhängig, aber klein
  4. Electron – Chromium-overhead, langsam

UI-Paradigma

Electron/Tauri: Browser-basiert

  • HTML/CSS/JavaScript
  • DOM-Rendering
  • Bekannt für Web-Entwickler
  • Performance durch Browser limitiert

Flutter: Eigene Engine

  • Dart + Widget-System
  • Canvas/Skia-Rendering
  • Konsistent über Plattformen
  • Volle Kontrolle, aber nicht-nativer Look

GPUI: GPU-Rendering, keine WebView

  • Rust + Element-System
  • Direkt GPU via wgpu
  • React-ähnlich, aber type-safe
  • Native Performance, moderne DX

Ökosystem & Community

Community-Größe (GitHub Stars, Packages, Jobs):

FrameworkGitHub StarsPackagesJobs
Electron110k+npm (~2M)Sehr viele
Flutter160k+40k+Viele
Tauri75k+WachsendMittel
GPUI8k+KleinWenige

Reifegrad:

  1. Electron – Sehr ausgereift, seit 2013
  2. Flutter – Ausgereift (Mobile), Desktop seit 2021 stable
  3. Tauri – Reif genug für Production, seit 2020
  4. GPUI – Jung, aber produktionsreif (Zed läuft darauf)

Lernressourcen:

  • Electron: Sehr viele (Tutorials, Kurse, Bücher)
  • Flutter: Sehr viele (vor allem Mobile)
  • Tauri: Gute Docs, wachsende Community
  • GPUI: Wenig – hauptsächlich Zed-Sourcecode + Docs

Wann welches Framework?

Electron – Für bestehende Web-Apps und schnelle Prototypen

✅ Du hast bereits ein Web-Frontend (React, Vue, etc.)

✅ Team kann Web, aber nicht Rust/Dart

✅ Performance ist nicht kritisch (interne Tools)

✅ Du brauchst schnelle Time-to-Market

❌ Bundle-Size oder RAM sind limitierend

❌ App soll auf schwacher Hardware laufen

Tauri – Für moderne Web-Teams, die Electron-Nachteile vermeiden wollen

✅ Du willst Web-Technologien nutzen (HTML/CSS/JS)

✅ Bundle-Size und Performance sind wichtig

✅ Sicherheit ist kritisch

✅ Team ist offen für Rust-Backend

❌ Du brauchst vollständige Kontrolle über Rendering

❌ App ist sehr GPU-intensiv

Flutter – Für UI-lastige Apps, besonders Mobile + Desktop

✅ Du entwickelst primär für Mobile, Desktop ist Bonus

✅ UI soll auf allen Plattformen identisch aussehen

✅ Viel Custom-UI, Animationen, Design-Focus

✅ Team kann Dart lernen oder kennt es bereits

❌ Du brauchst nativen macOS/Windows-Look-and-Feel

❌ Du willst bestehenden Web-Code wiederverwenden

GPUI – Für neue Projekte mit Fokus auf Performance und Rust-Stack

✅ Du startest ein neues Projekt (kein Legacy-Code)

✅ Performance und Ressourcen-Effizienz sind Top-Priorität

✅ Team kann Rust oder ist bereit zu lernen

✅ Du brauchst native-ähnliche Performance

❌ Du brauchst ein großes Ökosystem (viele Packages)

❌ Zeit-to-Market ist kritisch (steile Lernkurve)

Zukunftsausblick

Browser-basierte Frameworks werden bleiben – aber verlieren an Vorsprung

Electron und Tauri werden nicht verschwinden. Zu viele Apps basieren darauf, zu viele Teams kennen Web-Technologien.

Aber:

Der Performance-Gap zu nativen Apps wird weniger akzeptabel:

  • Nutzer erwarten schnelle Apps
  • Laptops sollen länger laufen
  • RAM wird nicht unbegrenzt größer

Die Entwicklung:

  • Electron: Wird langsam durch Tauri ersetzt
  • Tauri: Wird Standard für Web-basierte Desktop-Apps
  • Browser-Frameworks: Bleiben dominant, aber nicht mehr konkurrenzlos

GPU-native Frameworks wie GPUI könnten die nächste Generation anführen

GPUI zeigt, was möglich ist:

  • Native Performance
  • Minimale Resources
  • Moderne Developer Experience

Wenn GPUI (oder ähnliche Frameworks) kritische Masse erreichen:

  • Könnte neuer Standard für Desktop werden
  • Ähnlich wie React das Web-Development verändert hat
  • Performance-first statt Web-first

Andere GPU-native Frameworks im Rust-Ökosystem:

  • egui – Immediate-Mode-GUI, sehr einfach
  • Iced – Elm-inspiriert, deklarativ
  • Dioxus – React-ähnlich, auch für Web

GPUI ist aktuell am weitesten für Production-Apps.

Rust gewinnt in der Cross-Platform-Welt massiv an Einfluss

Warum Rust?

  • Performance wie C/C++
  • Sicherheit durch Compiler
  • Moderne Tooling (Cargo)
  • Wachsende Community

Rust-Frameworks dominieren die neuen Ansätze:

  • Tauri: Rust-Backend
  • GPUI: Voll Rust
  • Dioxus: Rust
  • Iced: Rust

Das bedeutet:

  • Web-Entwickler müssen sich entscheiden: Weiter Web-Technologien (Tauri) oder Rust lernen (GPUI)?
  • Teams mit Rust-Expertise haben einen Vorteil
  • Universities und Bootcamps beginnen Rust zu lehren

Entwickler haben heute mehr Auswahl als je zuvor

Vor 5 Jahren:

  • Electron oder native Apps (C++, Swift, etc.)
  • Wenig Alternativen

Heute:

  • Electron (Web-Technologien, schwer)
  • Tauri (Web-Technologien, leicht)
  • Flutter (Dart, eigene Engine)
  • GPUI (Rust, GPU-nativ)
  • Native (Swift, Kotlin, C++)

Die richtige Wahl hängt ab von:

  • Team-Skills
  • Performance-Anforderungen
  • Zielplattformen
  • Legacy-Code
  • Time-to-Market

Es gibt kein „One size fits all” mehr.

Die Entscheidung hängt stark vom Projektkontext ab

Cross-Platform ist nicht mehr eine Technologie – es ist ein Spektrum.

Die Fragen, die du stellen solltest:

  1. Haben wir bereits einen Web-Frontend? → Electron/Tauri
  2. Ist Performance kritisch? → GPUI/Flutter
  3. Brauchen wir Mobile + Desktop? → Flutter
  4. Können wir Rust lernen? → Tauri/GPUI
  5. Ist Time-to-Market wichtiger als Performance? → Electron
  6. Wollen wir für die nächsten 10 Jahre bauen? → GPUI/Flutter

Drei typische Szenarien:

Szenario 1: Startup mit Web-App, will Desktop-Version

Tauri

  • Bestehender React-Code wiederverwendbar
  • Schneller Launch
  • Kleine Bundle-Size für Updates

Szenario 2: Produktfirma baut neue Consumer-App (Mobile + Desktop)

Flutter

  • Ein Codebase für iOS, Android, Desktop
  • Custom UI/UX wichtig
  • Große Community

Szenario 3: Entwickler-Tool (Editor, Terminal, Profiler)

GPUI

  • Performance ist kritisch
  • Nutzer sind technik-affin (akzeptieren neue Technologie)
  • Rust-Ökosystem passt gut

Langfristig:

Wir werden wahrscheinlich eine Konsolidierung sehen:

  • Electron wird langsam ersetzt
  • Tauri wird Standard für Web-basierte Apps
  • GPUI oder ähnliche Frameworks werden Standard für Performance-kritische Apps
  • Flutter bleibt dominant für Mobile-first

Die nächsten 3-5 Jahre werden zeigen, welches Framework sich durchsetzt. Aktuell ist die spannendste Entwicklung: Rust-basierte Frameworks holen massiv auf.

Electron hat Desktop-Apps demokratisiert – aber die nächste Generation wird schneller, leichter und effizienter sein.