Code

PWAs ohne Browser – eine Fingerübung im Vibe-Coding

PWA steht für Progressive Web App und bezeichnet eine moderne Webanwendung, die wie eine native App aussieht und funktioniert, aber über den Webbrowser aufgerufen wird.

Zwei Seiten der Medaille

PWAs in Browsern funktionieren weitgehend, weisen aber ein paar Defizite auf, wie fehlende Tray-Icons und nicht passende Menüeinträge. Zudem haben sie eine starke Bindung an den Browser. Am anderen Ende des Spektrums stehen Electron-Apps, die durch ihre Chrome-Integration und Node.js eine Menge Platz verschwenden und intensive Betreuung erfordern.

Fingerübung im Vibe-Coding

KDE-Entwickler Ken Vermette wünschte sich etwas dazwischen, leichtgewichtig und ohne viel Wartungsaufwand. Er nahm sich ein Wochenende Zeit und versuchte sich erstmals im Vibe-Coding mit Claude Code. In seinem aktuellen Blog-Eintrag erläutert er seine Ergebnisse.

Heraus kam ein Konzept, das er Strand-Apps nennt: ein schlanker, spezialisierter PWA‑Browser, der Web-Apps wie native Programme wirken lässt. Strand steht hier nicht für weitläufige Sandstrände, sondern in der Übersetzung für Strang oder Strähne, also ein isoliertes Teilstück des Webs.

Was sind Strand-Apps?

Strand-Apps sind ein Proof-of-Concept für eine schlanke Host-Anwendung, die PWAs in isolierte, nativ-ähnliche Desktop-Apps umwandelt. Sie sind im Kern .desktop-Dateien unter ~/.local/share/strand-apps, die Name, Beschreibung, Start-URL, vertrauenswürdige Links, Standardrechte und gewünschtes Verhalten der PWA definieren. Die Host-Anwendung interpretiert diese Manifeste, startet pro App ein eigenes Webview-Fenster und stellt je nach Konfiguration Funktionen wie Tray-Icon, Toolbars und weitere Komponenten bereit.

Jede Strand‑App läuft in einem eigenen Abteil mit separaten Cookies und Caches, sodass beispielsweise verschiedene Google‑Konten parallel nutzbar sind, um etwa Gmail und YouTube mit unterschiedlichen Log-ins zu betreiben. Einstellungen sind pro App getrennt, etwa um Hardware-Beschleunigung nur für eine bestimmte Web-App abschalten zu können, statt global im Browser.

Tray-Icons und Hintergrundpersistenz funktionieren so, dass sich Dinge wie Outlook oder Gmail, die Vermette im Berufsumfeld benötigt, wie echte Desktop-Clients verhalten, inklusive ungelesen‑Zähler und MPRIS‑Steuerung bei Medienapps. Technisch basiert das Ganze auf Qt und KDE Frameworks.

Nacharbeit erforderlich

Vermette ist mit den Ergebnissen eines Wochenendes durchaus zufrieden, sieht aber auch, dass eingebaute Sicherheitsprobleme und teilweise schlechtes Layout vor Veröffentlichung gründlich auditiert und umgebaut werden müssen. Aber das rudimentäre Grundgerüst steht und ist einsatzbereit. Es fehlt unter anderem die Berechtigungslogik der Manifeste.

Vermette will mindestens ein weiteres Wochenende investieren, um das Konzept so weit zu entwickeln, dass er es auf Git veröffentlichen kann. Wer weiß, vielleicht werden Strand-Apps ja einmal in KDE Plasma aufgenommen.

Teilt den Beitrag, falls ihr mögt

3 Kommentare

  1. Also prinzipiell ist das ja eine echt gute/spannende Idee und sorgt dafür das man Web-Apps nativer nutzen kann als z.B. via Electron oder ähnlichem (und hoffentlich ist das dann auch nicht so Ressourcen hungrig).

    Aber muss auch sagen, dass ich dann mal hoffentlich in naher Zukunft ein Blick darauf werfen kann.
    Aktuell liest es sich fast schon so wie bei Windows 11 aka fast alles wird da mit dem Edge-Webview (Webview2) gerendert und bereitgestellt, aber könnte jetzt auch eine falsche Interpretation meinerseits sein.

    Ich bin gespannt aber skeptisch.
    Da ich auch schon unter Windows ein Anfall bekommen, das da alles via dem Webview gemacht wird, aka Panel(Leiste), Notification etc. und wäre schlimm(für mich), wenn das dann auch so in den Linux Desktops Einzug halten würde.

    Grüße

    0
      1. Da gebe ich dir recht und mir würden auch ein zwei Applikationen Einfallen, wo ich eine bessere und leichtere Integration mir wünschen würde z.B. der Matrix-Chat Client Element oder ähnliches.

        Daher bleibe ich weiter gespannt.

        0

Kommentar hinterlassen