Brut - Un nuevo framework web para Ruby
(naildrivin5.com)- Para el ecosistema de Ruby, es un framework web simple y potente basado en baja abstracción y bajo low-ceremony, que ofrece una estructura centrada en páginas, formularios y acciones únicas, sin el concepto de controlador ni recursos REST.
- Incluye nativamente renderizado de HTML en servidor, escritura directa de JS/CSS, integración con OpenTelemetry y herramientas modernas de Ruby como Sequel y OptionParser, y permite instalar y desarrollar en pocos minutos.
- Con una estructura basada en clases, gestión explícita de sesiones, formularios y parámetros por tipo, y mínimo uso de métodos dinámicos/hash, busca una código claro y documentación automática.
- Aprovechamiento del stack web moderno: validación integrada entre servidor y cliente, BrutJS (Web Components), hash y empaquetado de CSS con esbuild, y fortalecimiento de políticas de seguridad y bases sólidas de diseño de base de datos.
- El objetivo es poder usar Ruby y tecnologías de navegador de forma divertida, con configuración Ruby/Hash con mínimo YAML y una nomenclatura y separación de responsabilidades claras, sin imponer abstracciones o patrones innecesarios.
Características principales del framework Brut
Estructura totalmente nueva: centrada en páginas sin controladores
- En lugar de controladores, recursos REST y acciones de ruta, se organiza con páginas, formularios y manejadores de acción única basados en clases.
- El HTML se genera directamente en el servidor y JS/CSS se puede escribir libremente.
- Ejemplo: la página de hora se define directamente como
TimePage < AppPage.
Aprovechamiento activo de la plataforma web moderna
- Experiencia de formularios con validación integrada en servidor y cliente.
- Soporte de mejora progresiva de HTML con BrutJS (librería de Web Components).
- Empaquetado y hash de CSS con esbuild, de forma limpia, sin PostCSS ni SASS.
Productividad de desarrollo y fundamentos incluidos
- Instrumentación basada en OpenTelemetry, acceso a datos con Sequel y automatización de CLI con OptionParser.
- Políticas de seguridad por defecto, valores por defecto e índices de columnas/foráneas de DB, horario siempre
timezone-aware, y localización fácil (Localization). - Pruebas con RSpec, generación de datos con Faker/FactoryBot y generación de HTML con Phlex.
Exclusión de YAML y estructura de configuración clara
- I18n basado en Ruby Hash, configuración dinámica gestionada con dotenv (se usa YAML casi nada).
- YAML se usa solo de forma excepcional en docker-compose.
Sin imponer abstracciones o patrones innecesarios
- Nombres y estructura claras (por ejemplo:
WidgetsPagese accede desde/widgets). - Separación completa entre capa de datos (DB::Widget) y capa de dominio (Widget).
- Sin concepto de controlador, implementación de la lógica de negocio a tu manera.
- Sin forzar patrones funcionales complejos, mónadas, Proc, etc.
Experiencia de desarrollo y flexibilidad
- RSpec y otras herramientas modernas del ecosistema Ruby vienen integradas por defecto.
- Uso intensivo de librerías clave como Phlex (HTML), Faker/FactoryBot, Sequel y OpenTelemetry.
- Foco en la “diversión” de Ruby y de las tecnologías de navegador, en lugar del boilerplate repetitivo de configuración y decisiones.
¿Por qué Brut?
- En vez de la configuración repetitiva de frameworks existentes como Rails, debates constantes sobre diseño y estructura, y flexibilidad innecesaria, busca el placer del propio código.
- Como framework de aplicaciones web Ruby para construir, desarrollar y desplegar rápido, se enfoca en productividad y claridad.
Inicio y hoja de ruta futura
- Imágenes oficiales de Docker de Brut, soporte para crear y ejecutar apps rápidamente mediante comandos.
- Aplicaciones de ejemplo de uso real como ADRs.cloud.
- Se esperan actualizaciones continuas de la versión 1.0 y del roadmap oficial.
3 comentarios
https://naildrivin5.com/blog/2025/…
Parece que hay que corregirlo con este enlace
Parece que el enlace está mal puesto.
Opiniones en Hacker News
Me gusta el enfoque centrado en forms y pages; yo también uso algo así en mi app. Toda la interacción está guiada por Forms y Links, y cualquier mejora hecha con JavaScript básicamente termina haciendo clic en un form que ya existía de antes, incluso si estaba oculto. Siempre puedo inspeccionar el HTML directamente y ver con claridad qué ruta (
route) está manejando realmente la interacción. Creo que los controllers se usan en exceso; en la práctica bastan forms y models (backend), y views (Pages). Mucha de la validación y de los procedimientos repetidos que suelen ir en el controller también podrían resolverse de forma más elegante desde el frameworkMe gustó la explicación de que no hace falta entender a la fuerza conceptos complejos como monads, algebraic data types, currying, o manejar todo con Proc. Si quieres usar un functor en la lógica de negocio, puedes hacerlo sin problema. Esa flexibilidad me gusta y me da la impresión de que sería bueno para un proyecto paralelo con pocos colegas experimentados
Este framework parece un excelente punto medio entre la simplicidad de Sinatra y lo completo de Rails. Yo he usado Sinatra para apps sencillas y Rails cuando hacía falta, pero para apps que no son tan complejas Rails a veces terminaba sintiéndose pesado. Me entusiasma probar algo nuevo
Otra opción a considerar es Roda. Me funcionó muy bien en proyectos pequeños y escalaba bastante bien. Gracias a su sistema de plugins era fácil ampliar funcionalidades, y el routing tree también era sencillo de manejar
Para mí, hanami había sido el mejor punto medio, pero de ahora en adelante voy a seguir muy de cerca cómo evoluciona bruts
Me gusta muchísimo el libro de David, Sustainable Rails, y siempre es el que recomiendo cuando alguien me pide una referencia sobre Rails. El enfoque de este framework me parece muy interesante. Si uno de estos frameworks alternativos pequeños integrara Sorbet a la perfección para usarlo en cosas como form validation, sería realmente fascinante. Claro, podría ir un poco en contra del enfoque de gradual typing, pero aun así sería un experimento muy interesante
David no solo es un desarrollador muy talentoso, también da charlas excelentes. Recomiendo esta charla en video, que además conecta con los temas del libro: https://www.youtube.com/watch?v=CRboMkFdZfg
Sorbet está bien, pero para imponer estructura y hacer validación de datos (data validation), en lo personal prefiero el ecosistema dry-rb
Entiendo que este framework usa una licencia poco común, pero me pregunto si eso significa que no se puede ver el código fuente
Se puede revisar el código en GitHub: https://github.com/thirdtank/brut
Coincido en que la licencia se siente un poco rara
Este proyecto me recordó al viejo framework Camping, aunque con la diferencia de que aquí no hay un constructor dinámico de clases padre
El sitio oficial de Brut (https://brutrb.com/overview.html) también tenía contenido interesante
Intenté iniciar sesión en el sitio de ejemplo, pero justo después de la autenticación con GitHub me encontré con un error
Todavía no uso Ruby, pero el proyecto me interesó y le di Star; quizá termine siendo el motivo por el que finalmente lo pruebe de verdad
En particular me gustó la elección de Phlex. Personalmente me da curiosidad si este framework también encajaría bien con la librería Datastar js y con el uso de SSE (eventos enviados por el servidor) que hace esa librería. Gracias