Always feel good about your Golang servers.


Vibe is a project that is meant to be used alongside Fiber, a fast and easy web server library for Go. It has a very similar API to Express. Vibe extends Fiber’s functionality by adding controller functionality, designed to be Rails-like.


See the docs


Here’s an example of the API:

package main

import (


type AppController struct {
  Hello string

func (a *AppController) Setup(c *fiber.Ctx) {
  a.Hello = "Hello World!"

func (a *AppController) Index(c *fiber.Ctx) error {
  return c.SendString(a.Hello)

func main() {
  app := fiber.New()
  app.Route("/", vibe.CreateController(&AppController{}))

This is a basic example. You can view a (slightly) more in-depth example in the example folder As you can see, it uses an Index method to route to /. The supported builtin routes are:

  • Index: GET /
  • Show: GET /:id
  • New: GET /new
  • Create: POST /
  • Edit: GET /:id/edit
  • Update: POST /:id
  • Destroy: DELETE /:id

Defining custom routes is easy. You can create a Routes function on your controller, which returns a value of type map[string]vibe.Route. For example:

func (a *AppController) Hello(c *fiber.Ctx) error {
  return c.SendString("This will be at GET `/hello`")

func (a *AppController) Routes() map[string]vibe.Route {
  return map[string]vibe.Route{
    "Hello": {
      Path: "/hello",
      Method: "GET",

It’s that easy. You can even leave out a property such as Path or Method (but not both, so that the value is not the Zero value), and Vibe will guess it for you.


  • Setup Middleware
  • Request Handlers
  • Default Paths
  • Custom context and rendering

…and more that may come up in the future.


Vibe is licensed under the MIT license. View the LICENSE.txt for more information.


View Github