fabrik
Full-stack, idiomatic Go,
without the boilerplate.
Fabrik is a full-stack framework that generates the wiring you'd normally hand-write - routing, dependency injection, a runnable server - as idiomatic Go. Framework speed, without the magic.
How Fabrik works
Annotate your Go code with a few //fabrik:* directives. fabrik wire
scans them and generates main.gen.go: all the wiring your app needs,
as idiomatic Go code, reviewable, without the implicit magic.
package web
//fabrik:provider
func NewGreeter() *Greeter {
return &Greeter{Prefix: "Hello"}
}
type Handlers struct {
Greeter *Greeter
}
//fabrik:http GET /
func (h *Handlers) Index(
w http.ResponseWriter,
r *http.Request,
) {
name := r.URL.Query().Get("name")
if name == "" {
name = "world"
}
w.Write([]byte(h.Greeter.Greet(name)))
}
// Code generated by fabrik. DO NOT EDIT.
package main
func run() error {
// Providers
webGreeter := web.NewGreeter()
webHandlers := &web.Handlers{
Greeter: webGreeter,
}
// Routes
mux := http.NewServeMux()
mux.HandleFunc("GET /", webHandlers.Index)
addr := ":8080"
if p := os.Getenv("PORT"); p != "" {
addr = ":" + p
}
return http.ListenAndServe(addr, mux)
}
Get started in a minute
-
Install the CLI
go install github.com/gofabrik/fabrik/fabrik@latest -
Scaffold and run
fabrik new hello cd hello fabrik run -
Say hello
curl 'localhost:8080/?name=fabrik' # Hello, fabrik!