brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
fiberFiber Go web framework inspired by Express. Covers routing, middleware, context, WebSocket, and prefork. Use for Express-like Go development. USE WHEN: user mentions "fiber", "gofiber", "express-like go", "fasthttp go", asks about "fiber middleware", "fiber context", "fiber prefork", "fiber websocket", "go express", "fast go framework" DO NOT USE FOR: Gin…
Independent GitHub snapshot · Automated classification · Original documentation governs
name: fiber description: | Fiber Go web framework inspired by Express. Covers routing, middleware, context, WebSocket, and prefork. Use for Express-like Go development.
USE WHEN: user mentions "fiber", "gofiber", "express-like go", "fasthttp go", asks about "fiber middleware", "fiber context", "fiber prefork", "fiber websocket", "go express", "fast go framework"
gin instead, Echo projects - use echo instead,
Chi projects - use chi instead, standard net/http compatibility required
allowed-tools: Read, Grep, Glob, Write, EditFull Reference: See advanced.md for validation with go-playground/validator, WebSocket setup, custom error handling, prefork mode, and graceful shutdown.
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:fiberfor comprehensive documentation.
package main
import "github.com/gofiber/fiber/v2"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
app.Listen(":8080")
}
app := fiber.New(fiber.Config{
Prefork: true, // Multiple processes
StrictRouting: true, // /foo != /foo/
CaseSensitive: true, // /Foo != /foo
BodyLimit: 4 * 1024 * 1024, // 4MB
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
})
app.Get("/users", listUsers)
app.Get("/users/:id", getUser)
app.Post("/users", createUser)
app.Put("/users/:id", updateUser)
app.Delete("/users/:id", deleteUser)
// Path parameters
app.Get("/users/:id", func(c *fiber.Ctx) error {
id := c.Params("id")
return c.JSON(fiber.Map{"id": id})
})
// Optional parameter
app.Get("/users/:name?", func(c *fiber.Ctx) error {
name := c.Params("name", "anonymous")
return c.JSON(fiber.Map{"name": name})
})
// Route groups
api := app.Group("/api")
v1 := api.Group("/v1")
v1.Get("/users", listUsersV1)
app.Post("/users", func(c *fiber.Ctx) error {
// Path params
id := c.Params("id")
idInt, _ := c.ParamsInt("id")
// Query params
page := c.Query("page", "1")
pageInt := c.QueryInt("page", 1)
// Headers
auth := c.Get("Authorization")
// Cookies
session := c.Cookies("session_id")
return c.SendStatus(fiber.StatusOK)
})
type CreateUserRequest struct {
Name string `json:"name"`
Email string `json:"email"`
}
app.Post("/users", func(c *fiber.Ctx) error {
var req CreateUserRequest
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"error": err.Error(),
})
}
return c.Status(fiber.StatusCreated).JSON(req)
})
import (
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/recover"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/limiter"
)
app.Use(recover.New())
app.Use(logger.New())
app.Use(cors.New(cors.Config{
AllowOrigins: "https://example.com",
AllowMethods: "GET,POST,PUT,DELETE",
}))
app.Use(limiter.New(limiter.Config{
Max: 100,
Expiration: 1 * time.Minute,
}))
app.Get("/health", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"status": "healthy"})
})
app.Get("/ready", func(c *fiber.Ctx) error {
if err := db.Ping(); err != nil {
return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{
"status": "not ready",
})
}
return c.JSON(fiber.Map{"status": "ready"})
})
| Anti-Pattern | Why It's Bad | Solution |
|---|---|---|
Not calling c.Next() in middleware | Breaks middleware chain | Always call c.Next() unless stopping |
Using c.Body() multiple times | Body is consumed | Store body in variable first |
| Missing error handling | Silent failures | Check BodyParser() return value |
| Not setting Prefork carefully | May cause issues with state | Only use Prefork without shared state |
| No rate limiting | DDoS vulnerability | Use limiter middleware |
| Problem | Diagnosis | Fix |
|---|---|---|
| Route not found | Wrong method or path | Check exact route registration |
| Body parsing fails | Wrong content-type | Ensure Content-Type header is correct |
| CORS errors | Not configured | Use cors.New() middleware |
| Middleware not executing | Wrong order | Place before route handlers |
| Prefork issues | Shared state problems | Avoid shared mutable state with Prefork |