- Framework d’applications desktop basé sur TypeScript utilisant Bun pour le processus principal et Zig pour les bindings natifs
- Compatible avec macOS, Windows et Ubuntu, avec génération automatique des installateurs, des mises à jour automatiques et des artefacts de patch différentiel
- Fournit un ensemble complet de fonctionnalités desktop : contrôle des fenêtres, menus, raccourcis, presse-papiers, boîtes de dialogue, stockage de session, etc., ainsi qu’une webview stable basée sur OOPIF
- Son architecture interne exploite le FFI de Bun et son modèle de mémoire partagée pour rester efficace même dans un environnement multi-processus
- Développé pendant deux ans par un créateur confronté aux limites d’Electron et de Tauri, après avoir appris Zig, C, C++, et Objective-C
- L’objectif est un workflow unifié permettant d’écrire du code en 5 minutes et de déployer en 10 minutes
Vue d’ensemble et objectifs du projet Electrobun
- Architecture où Bun exécute le processus principal et bundle la webview TypeScript, tandis que Zig sert à écrire les bindings natifs
- Le processus principal et la webview sont tous deux écrits en TypeScript, avec une isolation entre processus et une communication RPC rapide et typée
- Taille d’un bundle d’application auto-extractible d’environ 12 Mo (avec la webview système, principalement due à la taille du runtime Bun)
- Les mises à jour différentielles basées sur bsdiff peuvent réduire la taille des patchs jusqu’à 14 Ko minimum
- L’objectif est de fournir un workflow unifié unique permettant de commencer à coder en 5 minutes et de terminer le déploiement en 10 minutes
- Il est possible de démarrer un projet à partir d’un template avec la commande
npx electrobun init
Contexte de création
- Le créateur développe des applications desktop depuis l’époque de Visual Basic 6, avec comme point de départ son expérience de diffusion de plusieurs produits de startup à des milliers d’utilisateurs à l’ère d’Adobe AIR
- Bien qu’il ait passé plus de 20 ans comme ingénieur des débuts de startup à construire et faire évoluer des produits à l’échelle licorne, l’environnement de développement desktop a au contraire régressé
- En développant co(lab), un navigateur web hybride + éditeur de code + terminal PTY, il s’est heurté à trop de contraintes et a décidé de créer son propre framework
- La première version a été réalisée avec Electron, mais la signature de code, la notarisation, la distribution et les mises à jour donnaient davantage l’impression de se battre contre le framework que de développer l’application
- Il voulait une livraison continue (continuous shipping) comme sur le web, mais la toolchain existante rendait cela inutilement difficile
- Il a aussi essayé Tauri, mais a estimé que Rust ne convenait pas à tous les développeurs ; comme Bun était alors encore à quelques mois de sa version 1.0, il a lancé son propre développement
De macOS au cross-platform
- Au départ, seules des applications macOS pouvaient être compilées, mais la prise en charge de macOS, Windows et Ubuntu est désormais de premier ordre pour la compilation comme pour le déploiement
- Les installateurs, artefacts de mise à jour automatique et patchs différentiels sont tous générés automatiquement
- Il suffit de connecter un hébergement statique (R2, S3, GitHub Releases) pour terminer le déploiement
- Les mises à jour différentielles sont assurées par zig-bsdiff, porté de C vers Zig et optimisé avec SIMD et zstd
- Avec la stabilisation du FFI de Bun, la majeure partie de la couche FFI Zig écrite auparavant a été remplacée par Bun
- L’architecture a évolué de manière positive : Bun utilise la mémoire partagée lors de la création des workers, ce qui maintient l’efficacité en multi-processus
Fonctionnalités disponibles
- Le framework offre désormais un ensemble complet de fonctionnalités : contrôle des fenêtres cross-platform, menus, raccourcis clavier (accelerators), raccourcis globaux, presse-papiers, boîtes de dialogue, partitions de webview, stockage de session, recherche dans la page (find-in-page), ainsi que les outils de bundling et de mise à jour
- L’implémentation de OOPIF (Out-of-Process Iframe) fonctionne désormais réellement
- La balise
<webview> d’Electron a été dépréciée dans Chromium, sans véritable alternative à ce jour
<electrobun-webview> est un véritable « super iframe » où le positionnement DOM, l’isolation des processus et la gestion des couches fonctionnent correctement
- Le fonctionnement est cross-platform, sans scintillement du curseur et sans patch du moteur de navigateur
État de la prise en charge des plateformes
- macOS 14+ : pris en charge officiellement
- Windows 11+ : pris en charge officiellement
- Ubuntu 22.04+ : pris en charge officiellement
- Autres distributions Linux (gtk3, webkit2gtk-4.1) : prise en charge par la communauté
Feuille de route
- La réécriture complète de co(lab) sur Electrobun est terminée, et le développement de co(lab) va désormais s’accélérer sérieusement sur la base de la stabilisation de la v1
- L’objectif central est d’avoir un framework suffisamment stable pour construire des produits ambitieux sur le long terme, sans être perturbé par le platform churn
- La communauté Discord continue de grandir, et les utilisateurs ayant contribué via les bêta-tests, les signalements de problèmes et les retours ont participé à façonner le framework
- Electrobun est le premier grand produit lancé par Blackboard
Aucun commentaire pour le moment.