5 points par GN⁺ 2025-07-31 | 3 commentaires | Partager sur WhatsApp
  • Un framework web simple et puissant pour l’écosystème Ruby, basé sur une faible abstraction et un niveau de cérémonial réduit (low-ceremony), qui propose une architecture centrée sur les pages, les formulaires et les actions unitaires sans notion de contrôleur ni de ressource REST.
  • Rendu HTML côté serveur, écriture directe de JS/CSS, intégration OpenTelemetry, outils Ruby modernes tels que Sequel et OptionParser inclus, avec une installation et un développement possibles en quelques minutes
  • Structure basée sur les classes, une gestion des sessions, des formulaires et des paramètres basée sur de vrais types, et une réduction de l’usage des méthodes dynamiques et des hash pour viser un code clair et une documentation automatique
  • Exploitation active de la plateforme web moderne : validation serveur/client intégrée, BrutJS (Web Components), bundling et hash du CSS avec esbuild, renforcement des bases en matière de sécurité et de conception de base de données
  • Réduction de YAML, configuration basée sur Ruby/Hash avec un nommage explicite et une séparation claire des rôles, objectif : profiter de Ruby et des technologies navigateur sans imposer d’abstractions ni de patterns inutiles

Principales caractéristiques du framework Brut

Une structure entièrement nouvelle — sans contrôleur, centrée sur les pages

  • Au lieu de contrôleurs, de ressources REST et d’actions de route, l’architecture repose sur des pages, formulaires et gestionnaires d’action unique basés sur des classes
  • L’HTML est généré directement côté serveur, JS/CSS peuvent être écrits librement
  • Exemple : une page d’affichage de l’heure est définie directement avec TimePage < AppPage

Exploitation active de la plateforme web moderne

  • UX de formulaire avec validation intégrée serveur/ client
  • BrutJS (bibliothèque de composants web) pour une extension progressive de l’HTML
  • Traitement concis du CSS avec esbuild pour le bundle et le hash, sans PostCSS ni SASS

Productivité de développement et fonctionnalités de base intégrées

  • Instrumentation basée sur OpenTelemetry, accès aux données via Sequel, automatisation en ligne de commande basée sur OptionParser
  • Politiques de sécurité par défaut, valeurs par défaut/clé étrangère/indice des colonnes DB, gestion du temps toujours timezone-aware, localisation simplifiée
  • Tests RSpec, génération de données avec Faker/FactoryBot, génération HTML avec Phlex

Exclusion de YAML, structure de configuration claire

  • I18n basé sur un Hash Ruby, configuration dynamique gérée via dotenv (presque pas de YAML)
  • Seule exception : utilisation de YAML via docker-compose

Aucune abstraction ni pattern inutile imposé

  • Nommage et structure explicites (ex. : WidgetsPage s’ouvre sur /widgets)
  • Couche de données (DB::Widget) et couche domaine (Widget) totalement séparables
  • Pas de concept de contrôleur, logique métier implémentable à votre manière
  • Pas d’imposition de patterns fonctionnels complexes, de monades, de Proc, etc.

Expérience développeur et flexibilité

  • Intégration de base des outils modernes de l’écosystème Ruby tels que RSpec
  • Utilisation active de bibliothèques majeures : Phlex (HTML), Faker/FactoryBot, Sequel, OpenTelemetry
  • En se détachant des boilerplates, réglages et arbitrages répétitifs, focus sur le “plaisir” de Ruby et des technologies navigateur

Pourquoi Brut ?

  • Au lieu des cycles de configuration répétitifs des frameworks existants comme Rails, des débats sans fin sur la conception/la structure et de la flexibilité inutile, priorité est donnée au plaisir du code lui-même
  • En tant que framework d’applications web Ruby pour construire, développer et déployer rapidement, l’objectif est de se concentrer sur la productivité et la clarté

Démarrage et roadmap

  • Image Docker officielle Brut, création et exécution d’app en mode commande rapides
  • Exemples d’applications réelles, dont ADRs.cloud
  • Sortie attendue de la version 1.0 et mises à jour continues de la roadmap officielle

3 commentaires

 
jhk0530 2025-07-31

https://naildrivin5.com/blog/2025/…

Je pense qu’il faut corriger avec ce lien.

 
colus001 2025-07-31

On dirait que le lien est incorrect.

 
GN⁺ 2025-07-31
Commentaires sur Hacker News
  • J’aime l’approche centrée sur les forms et les pages ; j’utilise moi-même ce genre d’approche dans mon app, toutes les interactions sont pilotées par des Forms et des Links, et toutes les améliorations faites en JavaScript reviennent en pratique à cliquer sur un formulaire déjà existant, y compris caché ; on peut toujours inspecter directement le HTML pour voir clairement quelle route gère réellement l’interaction ; je trouve que les controllers sont surutilisés ; en réalité, les forms, les models (backend) et les views (Pages) suffisent largement ; beaucoup de validations et de procédures répétées dans les controllers pourraient aussi être gérées de façon plus élégante par le framework

    • Je me demande pourquoi simuler cela avec un événement de clic ; quelle est la différence avec le fait d’appeler directement submit() ?
  • J’aime l’idée qu’il n’est pas nécessaire de comprendre à tout prix des concepts complexes comme les monads, les algebraic data types, le currying, ou le fait de tout traiter avec des Proc ; si l’on veut utiliser des functors dans la logique métier, on reste libre de le faire ; j’apprécie cette flexibilité, au point d’avoir envie de l’essayer sur un projet annexe avec quelques collègues expérimentés

  • Ce framework semble être un excellent juste milieu entre la simplicité de Sinatra et la richesse de Rails ; j’ai utilisé Sinatra pour les apps simples et Rails quand c’était nécessaire, mais pour les apps peu complexes, Rails me paraissait parfois trop lourd ; j’ai hâte d’essayer quelque chose de nouveau

    • Roda est aussi une option à considérer ; c’était idéal pour les petits projets et cela passait bien à l’échelle ; le système de plugins facilitait l’ajout de fonctionnalités, et le routing tree était également agréable à utiliser

    • Pour moi, hanami était le meilleur juste milieu, mais je vais suivre de près l’évolution de bruts à l’avenir

  • J’aime beaucoup le livre de David, Sustainable Rails, et c’est celui que je recommande toujours quand on me demande une référence sur Rails ; l’approche de ce framework est impressionnante ; si l’un de ces petits frameworks alternatifs adoptait Sorbet de manière complète pour l’utiliser notamment dans la form validation, ce serait vraiment intéressant ; bien sûr, cela pourrait aller à l’encontre de l’approche de gradual typing, mais même comme expérimentation, ce serait amusant

    • David est non seulement un développeur très talentueux, mais aussi un excellent orateur ; je recommande également cette conférence vidéo, en lien avec le thème du livre : https://www.youtube.com/watch?v=CRboMkFdZfg

    • Sorbet est bien, mais pour imposer de la structure et faire de la validation de données (data validation), je préfère personnellement l’écosystème dry-rb

  • Je vois que ce framework utilise une licence inhabituelle, mais est-ce que cela signifie qu’on ne peut pas consulter le code source ?

  • Ce projet m’a rappelé l’ancien framework Camping, sauf qu’ici il n’y a pas de constructeur de classe parente dynamique

  • Le site officiel de Brut (https://brutrb.com/overview.html) contenait lui aussi beaucoup de choses intéressantes

  • J’ai essayé de me connecter sur le site de démonstration, mais j’ai obtenu une erreur juste après l’authentification GitHub

    • L’auteur ici ; pour l’instant, la connexion est désactivée sur le site de démonstration afin d’éviter les abus ; j’ai décidé de le rendre public aujourd’hui à l’improviste, et tout n’est pas encore prêt pour permettre à n’importe qui de se connecter ; vous pouvez l’exécuter en local, ou parcourir les pages et cliquer sur les liens sur https://brutrb.com/adrs.html
  • Je n’utilise pas encore Ruby, mais ce projet a éveillé mon intérêt et je lui ai mis une étoile, il pourrait bien me donner envie d’essayer Ruby pour de vrai

  • J’ai particulièrement apprécié le choix de Phlex ; je me demande aussi si ce framework irait bien avec la bibliothèque JS Datastar ainsi qu’avec l’usage des SSE (événements envoyés par le serveur) de cette bibliothèque ; merci