MYGO : des apps desktop en Go, web et natif dans un seul binaire
⏱️ Temps de lecture estimé : 4 minutes
https://github.com/egoist/mygo/tree/main
📌 MYGO est un framework Go pour créer des applications de bureau. Chaque fenêtre affiche soit une page web dans le webview du système, soit une interface native dessinée par l’app elle-même, et une même application peut mélanger les deux. Le tout est livré en un seul binaire Go de quelques mégaoctets.
On peut juger un outil à la facilité de son premier lancement. Pour une app à frontend web, la suite tient en trois lignes : bunx mygo-cli init my-app, cd my-app, bun run dev. Pour une interface native, Bun n’est même pas nécessaire, Go suffit : go run github.com/egoist/mygo/cmd/mygo@latest init -template native my-app. Go 1.27 ou plus récent est le seul prérequis côté langage.
Côté web, MyGo n’embarque pas de navigateur. Il ouvre la page dans celui que le système a déjà : WKWebView sur macOS, WebKitGTK sous Linux, WebView2 sous Windows. Vous construissez le frontend avec n’importe quelle stack web, et il appelle votre Go à travers un client TypeScript généré depuis votre code Go. Les structs deviennent des types, les méthodes deviennent des fonctions avec leur documentation. Dans l’exemple du README, Greeter.greet("Ada") renvoie « Hello, Ada » sans une ligne de code d’interfaçage écrite à la main.
De l’autre côté, le paquet ui permet d’écrire l’interface entièrement en Go, dessinée sur le GPU par MyGo lui-même : ni HTML, ni JavaScript, ni webview à démarrer. Le layout passe en flexbox et grid, avec widgets, édition de texte prenant en charge les méthodes d’entrée, listes virtualisées, icônes SVG, animations et support des lecteurs d’écran. Les vues se testent sans ouvrir de fenêtre, ce qui est plus confortable que de lancer une app complète pour vérifier un état. Le plugin glass ajoute l’effet Liquid Glass sur toutes les plateformes.
Les chiffres publiés sur le site : binaire autour de 7 MB, environ 44 MB de mémoire en UI native, 62 MB avec la webview, et 0 % de CPU au repos. Le tout en pur Go, sans cgo, ce qui permet de builder pour toutes les plateformes depuis n’importe laquelle. La page benchmarks mesure chaque push sur les runners macOS, Linux et Windows de GitHub Actions, en médiane de six exécutions — une démarche rarement appliquée aux apps de bureau.
Les deux types de fenêtres partagent les mêmes API de bureau : fenêtres, menus, tray, dialogues, notifications, raccourcis globaux, deep links, associations de fichiers. Côté distribution, rien à assembler soi-même : bundles et images disque, installateurs Windows, paquets Debian, script d’installation Linux, signature de code, notarisation, et mises à jour signées avec delta et fenêtre de mise à jour dans l’esprit de Sparkle. Licence MIT, version 0.3.6, environ 1 200 étoiles sur GitHub.
- 🪟 Fenêtres web et natives mélangées dans une même app
- 🧾 Client TypeScript généré depuis vos struct Go
- 🧠 ~44 MB en UI native, ~62 MB avec webview
- 🎛️ Listes virtualisées, lecteurs d’écran, Liquid Glass
- 📦 Installeurs, signature et mises à jour à delta inclus
Ce que je trouve le plus juste, c’est le refus de choisir un camp. Plutôt que de plaider pour le web ou pour le natif, MyGo laisse la décision au niveau de la fenêtre : un inspector en natif, une page riche en webview, dans le même binaire et avec les mêmes API. Une réserve s’impose toutefois : l’UI native repose sur une pile de rendu maison — rasterisation, mise en page du texte, SVG —, donc la maturité de ce chantier se jugera sur les versions à venir. En l’état, avec des benchmarks publics et une distribution déjà complète, la proposition est solide.
Sources






