17 pontos por GN⁺ 2025-10-10 | 1 comentários | Compartilhar no WhatsApp
  • Lavandula é um framework web leve baseado na linguagem C, projetado para o desenvolvimento de aplicações web modernas
  • Oferece um ambiente de desenvolvimento intuitivo e rápido, com foco em produtividade e desempenho sem recursos desnecessários
  • Inclui a maioria dos recursos essenciais, como sistema de controladores/roteamento, pipeline de middleware, framework de testes e bibliotecas SQLite/JSON
  • No futuro, está prevista a expansão com recursos como ORM, cookies de sessão, serving de arquivos estáticos e integração com vários bancos de dados
  • Maximiza a conveniência para desenvolvedores com criação rápida de projetos via CLI, testes unitários embutidos e suporte a variáveis de ambiente e logging

Lavandula: visão geral de um framework web leve e de alto desempenho em C

  • Lavandula é um framework web leve em linguagem C projetado para permitir a criação de aplicações web modernas de forma rápida e simples
  • Seus principais objetivos são simplicidade, alta velocidade e alta produtividade, focando no que é realmente necessário em vez de recursos complexos e reduzindo o excesso típico de frameworks pesados

Principais características e utilidade

  • Foi desenvolvido com base em C, incluindo apenas o mínimo de dependências
  • Oferece sistema de controladores e roteamento, permitindo configurar endpoints HTTP com facilidade
  • Suporta métodos HTTP como GET e POST e inclui pipeline de middleware local/global
  • Há suporte para criação e execução rápida de projetos por meio da ferramenta CLI (lavu)
  • Inclui framework de testes unitários embutido, tratamento de variáveis de ambiente, logging, integração com SQLite e biblioteca JSON

Recursos já concluídos

  • Sistema de controladores/roteamento
  • Suporte a endpoints por método HTTP (GET, POST etc.)
  • Pipeline de middleware (local/global)
  • Dependências mínimas (baseado em código C puro)
  • Scaffolding simples de projetos via CLI
  • Framework de testes unitários embutido
  • Suporte a variáveis de ambiente, sistema de logging
  • Integração com SQLite/biblioteca JSON embutida

Recursos em desenvolvimento

  • Parsing de body JSON em HTTP
  • Cookies de sessão
  • Configuração de política de CORS
  • Lavender ORM
  • ELA (Embedded Lavandula) HTML template engine

Planos futuros (roadmap)

  • Rate limiting
  • Serving de arquivos estáticos
  • Integração com PostgreSQL e MySQL
  • Candidato a framework de injeção de dependência
  • Automação da lista de endpoints/rotas registráveis
  • Geração automática de modelos JSON e funções CRUD (usando o comando 'lavu model')
  • Tratamento de parâmetros de URL e roteamento dinâmico

Visão geral de como criar e executar um projeto

  • Comando CLI: lavu new my-project cria automaticamente a pasta do projeto e a estrutura básica
  • Arquivos gerados automaticamente:
    • arquivo de configuração (lavandula.yml)
    • fontes principal/controlador/rotas
    • makefile
    • código de teste etc.
  • Execução rápida: após entrar na pasta, é possível iniciar imediatamente o servidor local com lavu run, na porta padrão http://localhost:3000/

Licença e outras informações

  • Licença: MIT License
  • Seguindo o espírito open source, qualquer pessoa pode melhorar ou participar do projeto
  • Foi escrito com base em C (97,3%), com inclusão parcial de Makefile/Shell script

Resumo das vantagens que o Lavandula oferece

  • Como um framework web completo extremamente raro no ecossistema da linguagem C, ele é excelente para ambientes com recursos limitados ou para implementar servidores ultrarrápidos
  • É especializado em maior velocidade e menor overhead em comparação com frameworks populares
  • Com CLI, ferramentas embutidas e estrutura minimalista, oferece curva de aprendizado curta e alta produtividade

1 comentários

 
GN⁺ 2025-10-10
Opiniões no Hacker News
  • Senti que este é um dos códigos em C mais limpos, modernos e bonitos que vi recentemente. Não é um kernel, claro, mas comparado a grandes projetos cheios de condicionais #ifdef e muitos underscores, acho que é um ótimo exemplo para aprender o senso estético de C. Em especial, foi a primeira vez que vi testes escritos em C dessa forma. Belo trabalho. Aprendi C como minha primeira linguagem de programação quando estava no ensino fundamental e médio, e, ao instalar software livre no PC que havia em casa, descobri que a maioria dos programas era feita em C. Quando tive meu primeiro contato formal com ciência da computação na universidade, estudei estruturas de dados e algoritmos em C++, mas já entendia ponteiros e consegui me adaptar com facilidade. Se você evitar vários elementos complexos, dá para perceber que C é uma linguagem muito limpa e simples. Claro, o charme de C também está em poder acessar essa complexidade diretamente, mas acho importante manter um bom equilíbrio.
    • Ouço com frequência que entender ponteiros é difícil, mas não sei bem se é realmente tão complicado assim. Lembro que, quando aprendi, peguei a ideia geral em uns 15 minutos. Claro que levaria mais tempo para ganhar fluência, mas não entendo bem por que ponteiros são tratados como algo de dificuldade quase mítica. Também achei este projeto muito legal. Só espero que um projeto assim não vá parar no portfólio de alguém para depois ser arquivado e esquecido logo em seguida.
    • O elogio ao código significa muito para mim. Sempre me esforço bastante para escrevê-lo dessa forma, então sou muito grato por ouvir isso.
  • Espero que ninguém critique este projeto de forma excessivamente séria nem faça análises sem sentido do tipo “potencial para substituir PHP”. Acho que este projeto é um excelente exemplo de um desafio interessante feito em C. Se forem adicionados templates HTML, parece que ele pode evoluir para um framework mais completo.
    • Muito obrigado pelas palavras gentis. Os templates HTML estão na lista de prioridades e pretendo implementá-los mais tarde, por diversão.
    • Estou aprendendo C por hobby e achei este projeto realmente muito legal.
  • O código é muito fácil de ler e está bem organizado. Ainda assim, quase não há verificação de erros, então em muitos pontos os valores de retorno de snprintf, malloc etc. não são checados. Também existe um loop não utilizado. A parte de paralelismo ainda não parece ser suportada, então isso não é um problema imediato, mas, pela natureza de um servidor web, introduzir threading no futuro seria vantajoso. Ao considerar a implementação, recomendo usar uma biblioteca como libuv.
    • Obrigado pelo cuidado no feedback. Eu já estava planejando adicionar paralelismo depois, então foi bom você ter mencionado isso.
  • Já usei com diversão um framework parecido chamado Jetzig, e também gostei bastante deste projeto. Também gosto da combinação BSD C CGI com Postgres e, embora eu trabalhe principalmente com Python, é muito divertido experimentar diretamente linguagens de baixo nível e conceitos de memória. Há quem aponte questões de viabilidade prática, mas, à medida que dispositivos embarcados se tornarem mais comuns, acho que o valor desse tipo de framework de baixo nível tende a crescer. Também estou fazendo experimentos com o pico calc e, se eu criasse um “app mobile” para ele, escreveria o código do framework em C. Belo trabalho.
  • Na minha opinião, este projeto é muito legal. A configuração é fácil de ler e, se for possível aproveitar a performance de C, já é um ganho. Especialmente com IA como Claude, dá para gerar com facilidade partes de um framework e, quando necessário, adicionar apenas o que for preciso, montando por conta própria um framework web leve e independente de plataforma. Imagino que o desempenho também seja bem bom.
    • Checklist de pesadelo de manutenção:
      • Frameworks web já são difíceis de manter por causa de padrões que vivem mudando
      • Se o código foi escrito por IA, talvez ninguém entenda com clareza como ele funciona
      • Foi escrito em C
        Pessoalmente, gosto da simplicidade de C puro, mas a combinação de código de rede em C escrito por IA me assusta um pouco.
  • Acho muito arriscado escrever um parser HTTP do zero em C. Isso pode gerar vulnerabilidades enormes, então, ao criar um framework web pensando em uso real, é mais seguro partir de bibliotecas testadas como libmicrohttpd, libevent_http, fastcgi etc.
    • Concordo muito com esse tipo de alerta. Nesse caso, fico me perguntando como exatamente seria possível construir um servidor HTTP seguro em C. Parece mesmo um tema excelente para um livro. Seria interessante se cada capítulo abordasse vulnerabilidades e o caminho estrutural para chegar a uma biblioteca HTTP madura.
    • Na prática, este projeto provavelmente nunca será usado em produção, mas, se essa ideia passar pela sua cabeça, é melhor desistir.
  • Feedback não solicitado: acho que o macro appRoute obscurece o tipo e a assinatura e introduz indireção desnecessária. Parece melhor removê-lo. E o tipo AppContext na verdade mistura funções de App + requisição HTTP + DB etc., então algo como RequestContext ou ControllerContext talvez fosse mais adequado. Fora isso, como os outros, fiquei impressionado com a limpeza do código. Foi um esforço realmente muito bacana.
  • Isso mostra como é possível fazer muita coisa com o uso de macros. Na prática, frameworks web modernos também usam ativamente ferramentas complexas, como metaprogramação de cada linguagem. Elogio muito o fato de você ter feito isso por conta própria. É algo difícil, mas com certeza também divertido. Também há quem pergunte “por que fazer isso?”, mas não acho que seja preciso ter um motivo especial. É simplesmente porque se gosta do próprio ato de desenvolver.
    • Muito obrigado, concordo plenamente.
  • Espero que fabricantes de hardware adotem este projeto e que a qualidade de suas páginas web de administração melhore um pouco.
  • Fiquei surpreso com a quantidade de reações negativas, apesar de ser um projeto de boa ideia e escrito com cuidado. A habilidade que o Ashton acumulou desta vez é um patrimônio valioso que não vai desaparecer no futuro.
    • Sou realmente muito grato por você avaliar dessa forma.