O Vukem é um framework web para APIs REST e aplicações full-stack: rotas, validação, um ORM com migrations, autenticação, recursos JSON com erros no formato problem+json, views com HTMX em primeiro lugar ou Inertia com React, Vue ou Svelte, GraphQL, gRPC e canais em tempo real, tudo controlado por uma única CLI.
Por que o Vukem#
- Biblioteca padrão em primeiro lugar. Handlers e middlewares são
net/httppuro. Qualquerhttp.Handlerfunciona. - Sem mágica. Sem variáveis globais, sem registro via
init(), sem injeção de dependência baseada em reflection. Os geradores escrevem código que é seu. - Tipado de ponta a ponta. Structs de configuração tipadas, rotas nomeadas verificadas na inicialização e schemas no estilo Zod (
z) que convertem toda entrada em tipos Go. - Tudo incluído, mas opcional. SQLite já vem pronto; PostgreSQL, MySQL, Redis, MongoDB, S3 e WebSockets são módulos de driver separados, então você só baixa o que usa.
- APIs como cidadãs de primeira classe. Problem details da RFC 9457, grupos de rotas só com JSON, CORS e limite de tamanho do corpo já vêm embutidos.
- Seguro por padrão. Cabeçalhos de segurança com nonces de CSP, CORS que nega tudo por padrão, arquivos estáticos protegidos contra path traversal e verificações na inicialização que falham de forma segura, tudo mapeado para o OWASP Top 10:2025.
Um gostinho#
Um handler é uma função que recebe um *web.Ctx e retorna um error. Os erros retornados vão para um handler central, que gera a resposta certa para cada cliente.
func Routes(r *router.Router, posts *controllers.PostController) {
r.Get("/", func(c *web.Ctx) error {
return c.String(http.StatusOK, "Hello from Vukem")
}).Name("home")
r.Group("/admin", func(g *router.Group) {
g.Resource("posts", posts) // posts.index, posts.store, posts.show…
}).Name("admin.")
}
func (p *PostController) Show(c *web.Ctx) error {
id, err := c.ParamInt("post") // id não numérico → 404
if err != nil {
return err
}
post, ok := p.store.Find(id)
if !ok {
return errs.ErrNotFound // página HTML ou problem+json, conforme a negociação de conteúdo
}
return c.JSON(http.StatusOK, post)
}O que já funciona#
As fases Prototype (v0.1) e ALPHA (v0.2–v0.13) estão concluídas, e todos os recursos da BETA já foram entregues (v0.14–v0.20); a BETA está em estabilização antes da v1.0.0.
| Área | Status |
|---|---|
Configuração, ciclo de vida da aplicação, router, *web.Ctx, middlewares, erros problem+json | Disponível |
Validação com z, sessões, CSRF, views com html/template, helpers para htmx 4 | Disponível |
| SQLite e PostgreSQL, ORM genérico, relacionamentos, migrations, factories e seeders | Disponível |
Kit para REST: vukem new --api, install:api, paginação e convenções de query, rate limiting, CORS | Disponível |
Autenticação (guards de sessão e de token, install:auth), login social, autorização | Disponível |
| E-mail (SMTP, Resend), cache, armazenamento, eventos, logs no Telegram | Disponível |
| Blocos de segurança: cliente protegido contra SSRF, URLs assinadas, assinaturas de webhook, eventos de segurança | Disponível |
vukemtest e a CLI vukem | Disponível |
| Handlers tipados, OpenAPI 3.1, tipos TypeScript/Zod e a referência de API Scalar, chaves de idempotência | Disponível |
| Filas (sync, memória, banco de dados, Redis), agendamento de tarefas, Redis, MongoDB | Disponível |
| Starters: HTMX com Vite + Tailwind CSS v4, templ, Inertia (React, Vue, Svelte), API | Disponível |
| Localização, server-sent events, criptografia, MySQL/MariaDB, S3, upload de arquivos (streaming, tus, direto para o bucket) | Disponível |
| GraphQL, WebSockets e broadcasting, gRPC (connect-go), clientes de API tipados | Disponível |
| Painel administrativo, painel de desenvolvimento, JWT, autenticação em dois fatores, cobrança com Stripe | Disponível |