Quickstart

Receive your first event with the Go SDK in under five minutes.

package main

import (
	"context"
	"fmt"
	"os"
	"os/signal"

	nevo "github.com/nevo-sh/nevo-go"
)

func main() {
	ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
	defer stop()

	client := nevo.New(nevo.Config{Token: os.Getenv("NEVO_API_KEY")})

	_ = client.OnEvent(func(ctx context.Context, event *nevo.Event) error {
		fmt.Println(event.Type, event.ID, event.Channel.Label)
		if e := event.Email(); e != nil {
			fmt.Println("from:", e.From, "|", e.Subject)
		}
		return nil
	})

	if err := client.Run(ctx); err != nil && err != context.Canceled {
		fmt.Fprintln(os.Stderr, "nevo:", err)
		os.Exit(1)
	}
}

Environment

export NEVO_API_KEY=nvo_live_...
go run handler.go

Handler rules

  • OnEvent registers a single handler. Call it once; branch on event.Type inside.
  • Returning nil = event handled. Returning a non-nil error or exceeding HandlerTimeout (default 30s) is logged at warn; the stream keeps running. The event is not re-delivered to the SDK — replay from the dashboard if you need to.

Reconnects

Automatic. Transient network failures reconnect silently with exponential jittered backoff, capped at ReconnectMaxBackoff (default 30s). Run only returns on context cancellation or a terminal AuthError.

Next

  • Events — the Event struct in full.
  • Replies — send responses.
  • Errors — error types and retry semantics.