Pular para o conteúdo

Getting started

Introdução

O Vukem traz a produtividade do Laravel e do AdonisJS para o Go idiomático, sobre net/http e a biblioteca padrão.

Última atualização:

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/http puro. Qualquer http.Handler funciona.
  • 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.

routes.go
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.

ÁreaStatus
Configuração, ciclo de vida da aplicação, router, *web.Ctx, middlewares, erros problem+jsonDisponível
Validação com z, sessões, CSRF, views com html/template, helpers para htmx 4Disponível
SQLite e PostgreSQL, ORM genérico, relacionamentos, migrations, factories e seedersDisponível
Kit para REST: vukem new --api, install:api, paginação e convenções de query, rate limiting, CORSDisponível
Autenticação (guards de sessão e de token, install:auth), login social, autorizaçãoDisponível
E-mail (SMTP, Resend), cache, armazenamento, eventos, logs no TelegramDisponível
Blocos de segurança: cliente protegido contra SSRF, URLs assinadas, assinaturas de webhook, eventos de segurançaDisponível
vukemtest e a CLI vukemDisponível
Handlers tipados, OpenAPI 3.1, tipos TypeScript/Zod e a referência de API Scalar, chaves de idempotênciaDisponível
Filas (sync, memória, banco de dados, Redis), agendamento de tarefas, Redis, MongoDBDisponível
Starters: HTMX com Vite + Tailwind CSS v4, templ, Inertia (React, Vue, Svelte), APIDisponí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 tipadosDisponível
Painel administrativo, painel de desenvolvimento, JWT, autenticação em dois fatores, cobrança com StripeDisponível

Próximos passos#