Boilerplate SaaS Go + Vue : pourquoi un seul binaire, pourquoi en Europe
Un SaaS commence toujours par les mêmes six semaines : comptes, équipes, paiement, emails, back-office, sécurité. Tout le monde les réécrit, personne n'en vend. Un boilerplate SaaS, c'est ce socle livré fini pour que vous commenciez au produit. Le marché en compte des dizaines, presque tous en Next.js et presque tous bâtis sur des services loués : une plateforme d'hébergement, une base « serverless », un fournisseur d'authentification, une file de jobs, un service d'email. Cet article explique pourquoi nous avons pris le chemin inverse avec GoVueKit — un binaire Go, un serveur, rien au milieu — et ce que ce choix vous coûte et vous rapporte, en particulier depuis l'Europe.
Ce qu'un socle doit contenir, vraiment
La liste marketing dit « auth, paiements, emails ». La liste honnête est plus longue, parce que les cas rares sont ceux qui coûtent :
- Comptes : mot de passe (argon2id, pas bcrypt de 2012), vérification, réinitialisation, lien magique, OAuth et OIDC générique pour l'annuaire d'entreprise, double authentification TOTP, liste et révocation des sessions. Et aucun message qui révèle si un email existe.
- Organisations : rôles propriétaire / admin / membre décidés côté
serveur, invitations par email, et surtout l'isolation : chaque table
métier porte
organization_id, chaque requête filtre dessus, et un non-membre reçoit un 404 — jamais un 403, qui confirme l'existence de la ressource. - Paiement : abonnements et achats uniques, et un webhook qu'on peut facturer à travers : signature sur le corps brut, déduplication et écriture métier dans une seule transaction, objets relus par identifiant. Remboursements et litiges compris.
- Email : des modèles dans les deux langues, et une file durable — un redéploiement ne perd pas l'invitation partie une seconde avant.
- Back-office : MRR, ARPU, churn, modération, journal d'audit, calculés depuis votre base, pas via un aller-retour chez le prestataire.
- Sécurité de base : CSRF, cookies SameSite/Secure/HttpOnly, HSTS, CSP, limitation de débit sur chaque route sensible, client HTTP sortant durci contre le SSRF.
Chaque ligne de cette liste existe dans GoVueKit et chacune est testée, y compris le chemin non configuré (pas de clé Stripe, pas de clé OAuth) qui est celui que la plupart des déploiements font tourner. Le tour en dix minutes suit une requête à travers chaque couche.
Pourquoi un binaire
vite build produit l'application Vue 3 ; go:embed la range dans le
binaire Go ; le résultat est un fichier statique d'environ 27 Mo. Pas de
Node en production, pas de runtime à patcher, pas de reverse-proxy à
négocier avec une plateforme. Ce que ça change concrètement :
Le déploiement est une copie de fichier. Un VPS à 5 € par mois, Traefik
pour le TLS, docker compose up. Le guide Déployer
tient en une page parce qu'il n'y a rien d'autre.
Le coût à vide est nul. Une pile de services managés facture par utilisateur actif, par requête, par gigaoctet, et chaque facture a un plancher. Un binaire sur un serveur coûte le serveur. Nous avons détaillé la facture cachée dans The rented stack.
La base de données est un choix, pas une dette. PostgreSQL et SQLite sont tous deux de première classe : mêmes migrations, mêmes requêtes générées par sqlc, les deux moteurs dans l'intégration continue. SQLite en production est parfaitement sérieux pour un SaaS mono-nœud — la sauvegarde est une copie de fichier — et le passage à PostgreSQL est une variable d'environnement. Détails dans SQLite ou PostgreSQL.
Le code se lit. Environ 11 000 lignes de Go, 19 packages, un seul fichier de migration. Un développeur senior en fait le tour en un après-midi. C'est un critère de choix sous-estimé : ce que vous ne pouvez pas lire, vous ne le possédez pas, quelle que soit la licence.
Pourquoi en Europe
La question revient dans tous les questionnaires de sécurité que vos futurs clients B2B vous enverront : où sont les données, qui sont les sous-traitants ? Avec une pile louée, la réponse honnête est une liste de cinq sociétés américaines et un transfert hors UE à documenter. Avec un binaire sur un serveur à Paris, Francfort ou Amsterdam, la réponse tient en une ligne, et le registre RGPD aussi.
Ce que l'auto-hébergement règle : la résidence des données, la liste des sous-traitants (votre hébergeur, Stripe si vous facturez, votre fournisseur d'email — et c'est tout), l'export et l'effacement d'un compte (livrés dans le kit), les journaux que vous gardez chez vous.
Ce qu'il ne règle pas, et il faut le dire : la politique de confidentialité reste à écrire pour votre produit, l'analyse d'impact si vous traitez des données sensibles, et la discipline de sauvegarde. Nous avons rédigé la liste complète, sans enjoliver, dans Garder un SaaS dans l'UE.
Ce que ça coûte
Un binaire Go avec une SPA Vue, c'est deux chaînes d'outils : Go d'un côté,
Vite et TypeScript de l'autre. Pour une équipe qui écrit déjà du Go, c'est
le coût d'un npm ci. Pour une équipe 100 % JavaScript, un starter Nuxt
sera plus naturel — nous l'écrivons noir sur blanc dans notre comparatif
des kits Vue.
Et GoVueKit est payant : 199 € une fois, licence perpétuelle, mises à jour de la version majeure à vie, projets illimités y compris pour vos clients. Le code est livré dans un dépôt privé ; les décisions d'architecture, la carte des capacités pour les agents de code et la documentation sont publiques avant de payer, sur github.com/kOlapsis/govuekit.
Essayer avant de lire la suite
La démo, c'est votre machine. Un fichier, une commande, et le produit démarre avec tout ce dont il a besoin : PostgreSQL, un fournisseur OIDC (Dex), un stockage S3 (MinIO), un double de l'API Stripe et une boîte mail qui attrape chaque email :
curl -fsSLO https://govuekit.dev/labs/docker-compose.yml
docker compose up -d
Connectez-vous via le SSO, créez une organisation, invitez un coéquipier,
lisez son invitation dans la boîte, ouvrez le back-office. Puis
docker compose down -v, et il n'en reste rien. C'est la seule évaluation
qui compte : lire le code de ce que vous allez acheter, en le faisant
tourner.