5 puntos por GN⁺ 2025-07-31 | 3 comentarios | Compartir por WhatsApp
  • 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: WidgetsPage se 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

 
jhk0530 2025-07-31

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

Parece que hay que corregirlo con este enlace

 
colus001 2025-07-31

Parece que el enlace está mal puesto.

 
GN⁺ 2025-07-31
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 framework

    • Me da curiosidad por qué simular el evento de clic en el formulario; quisiera entender qué diferencia hay frente a llamar submit() directamente
  • Me 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

  • 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

    • Soy el autor; por ahora tengo bloqueado el inicio de sesión en el sitio de ejemplo para evitar abusos. Decidí publicarlo de repente hoy y todavía no estaba listo para permitir que cualquiera iniciara sesión. Puedes ejecutarlo localmente o navegar por las páginas y hacer clic en los enlaces en https://brutrb.com/adrs.html
  • 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