5 pontos por GN⁺ 2025-07-31 | 3 comentários | Compartilhar no WhatsApp
  • Um framework web simples e poderoso para o ecossistema Ruby, com base em “baixa abstração” e “baixo ceremony (low-ceremony)”, oferecendo uma estrutura centrada em página, formulário e ação única sem o conceito de controller e recurso REST
  • Renderização HTML no servidor, escrita direta de JS/CSS, integração com OpenTelemetry, e ferramentas Ruby modernas como Sequel e OptionParser embutidas, com instalação e desenvolvimento em poucos minutos
  • Estrutura baseada em classes, com gerenciamento de sessão, formulário e parâmetro orientado a tipos reais, minimizando o uso de métodos dinâmicos e hashes para alcançar código mais claro e documentação automática
  • Aproveitamento da plataforma web moderna: validação integrada entre servidor e cliente, BrutJS (Web Components), hash e bundling de CSS com esbuild, e reforço de políticas de segurança e de fundamentos de design de banco de dados
  • Configuração em YAML minimizada e baseada em Ruby/Hash, com nomenclatura e separação de responsabilidades claras, com objetivo de usar Ruby e tecnologias de navegador de forma divertida sem impor abstrações ou padrões desnecessários

Principais recursos do framework Brut

Estrutura totalmente nova – centrada em páginas, sem controllers

  • No lugar de controller, recurso REST e ações de rota, é composto por páginas baseadas em classes, formulários e handlers de ação única
  • HTML é gerado diretamente no servidor, enquanto JS/CSS podem ser escritos como você quiser
  • Exemplo: uma página de exibição de horário pode ser definida diretamente como TimePage < AppPage

Forte adoção da plataforma web moderna

  • UX de formulário com validação integrada server-side e client-side
  • Suporte a extensão progressiva de HTML com BrutJS (biblioteca de web components)
  • Processamento de bundle de CSS e hash com esbuild, de forma simples, sem PostCSS ou SASS

Produtividade de desenvolvimento e fundamentos incluídos

  • Instrumentação baseada em OpenTelemetry, acesso a dados com Sequel, automação de linha de comando com OptionParser
  • Políticas de segurança padrão, valores padrão de colunas/foreign keys do banco, timezone-aware sempre, e localização (Localization) simplificada
  • Testes com RSpec, geração de dados com Faker/FactoryBot, geração de HTML com Phlex

Exclusão de YAML, estrutura de configuração clara

  • I18n baseado em Hash de Ruby, configuração dinâmica gerenciada por dotenv (YAML usado quase nunca)
  • Exceção de uso de YAML: apenas docker-compose

Sem abstrações ou padrões desnecessários

  • Nomenclatura e estrutura claras (ex.: WidgetsPage é acessada por /widgets)
  • Camada de dados (DB::Widget) e camada de domínio (Widget) podem ser separadas completamente
  • Sem conceito de controller, lógica de negócio pode ser implementada do jeito que quiser
  • Sem imposição de padrões funcionais complexos, mônadas, Proc etc.

Experiência de desenvolvimento e flexibilidade

  • Ferramentas modernas do ecossistema Ruby, como RSpec, já incluídas por padrão
  • Uso ativo de bibliotecas principais como Phlex (HTML), Faker/FactoryBot, Sequel e OpenTelemetry
  • Em vez de repetitiva boilerplate/configuração/decisões, o foco é aproveitar a “diversão” de Ruby e das tecnologias do navegador

Por que Brut?

  • Em vez da configuração repetitiva de frameworks existentes como Rails, das discussões constantes sobre arquitetura e estrutura e de flexibilidade desnecessária, busca-se a diversão no próprio código
  • Como um framework de web app baseado em Ruby para construir e fazer deploy rapidamente, foca em produtividade e clareza

Início e roadmap futuro

  • Imagem Docker oficial do Brut com suporte a criação e execução rápidas por comandos
  • Exemplo de apps reais em produção como ADRs.cloud
  • Previsão de atualizações contínuas para a versão 1.0 e para o roadmap oficial

3 comentários

 
jhk0530 2025-07-31

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

Acho que é preciso corrigir para este link

 
colus001 2025-07-31

Parece que o link está apontando errado.

 
GN⁺ 2025-07-31
Comentários do Hacker News
  • Gosto da abordagem focada em forms e pages; eu mesmo uso algo assim nos meus apps. Toda interação é conduzida por Forms e Links, e qualquer melhoria feita com JavaScript no fundo acaba sendo só um clique em um form que já existe de alguma forma, até os ocultos. Dá para inspecionar o HTML diretamente e sempre saber com clareza qual rota está lidando com a interação. Acho que controllers são usados em excesso; na prática, forms e models (backend), junto com views (Pages), já bastam. Muita validação e vários procedimentos repetidos em controllers também poderiam ser tratados pelo framework de forma mais elegante

    • Fiquei curioso sobre o motivo de simular o envio do form com um evento de clique. Qual é a diferença em relação a chamar submit() diretamente?
  • Gostei da explicação de que não é necessário entender conceitos complexos como monad, algebraic data types, currying, ou tratar tudo como Proc. Se você quiser usar functor na lógica de negócio, pode escolher isso à vontade. Gosto dessa flexibilidade e tenho vontade de experimentar em um projeto paralelo com alguns poucos colegas experientes

  • Parece um excelente meio-termo entre a simplicidade do Sinatra e a riqueza do Rails. Eu costumo usar Sinatra para apps simples e Rails quando preciso, mas para apps sem muita complexidade o Rails acabava sendo pesado demais. Estou animado para testar algo novo

    • Outra opção que vale considerar é o Roda. Foi ótimo para projetos pequenos e também escalava bem. O sistema de plugins facilitava expandir funcionalidades, e a routing tree também era fácil de lidar

    • Para mim, o hanami era o melhor meio-termo, mas vou acompanhar de perto como o bruts vai evoluir

  • Gosto muito do livro Sustainable Rails, do David, e é o que sempre recomendo quando o assunto é Rails. A abordagem deste framework me impressionou. Seria muito interessante se um desses frameworks alternativos menores adotasse Sorbet de forma completa para aproveitar em coisas como form validation. Claro, isso pode ir contra a proposta de gradual typing, mas mesmo como experimento seria divertido

    • O David não é só um desenvolvedor muito talentoso, como também é excelente em palestras. Recomendo este vídeo, que conversa com o tema do livro: https://www.youtube.com/watch?v=CRboMkFdZfg

    • Sorbet é bom, mas para imposição de estrutura e validação de dados (data validation) eu pessoalmente prefiro o ecossistema dry-rb

  • Entendi que este framework usa uma licença incomum, mas isso significa por acaso que não dá para ver o código-fonte?

  • Esse projeto me lembrou o antigo framework Camping, embora sem o construtor dinâmico de classe-pai

  • O site oficial do Brut (https://brutrb.com/overview.html) também tinha muita coisa interessante

  • Tentei fazer login no site de exemplo, mas encontrei um erro logo depois da autenticação via GitHub

    • Sou o autor; no momento estou bloqueando o login no site de exemplo para evitar abuso. Decidi lançar isso publicamente de repente hoje, então ainda não estou pronto para liberar login para qualquer pessoa. Dá para rodar localmente ou navegar pelas páginas e clicar nos links em https://brutrb.com/adrs.html
  • Ainda não uso Ruby, mas o projeto me interessou e eu dei uma estrela, talvez ele acabe sendo o motivo para eu finalmente experimentar Ruby de verdade

  • Gostei especialmente da escolha do Phlex. Em particular, fiquei curioso se este framework também combinaria bem com a biblioteca js Datastar e com o uso de SSE (Server-Sent Events) dessa biblioteca. Obrigado