Routers are simple Go structs that implement the chttp.Router interface. Routers can be used to define and group together HTTP routes.
type Router interface {
Routes() []Route
By default, Copper provides pkg/app/router.go. Create more routers as your project grows to organize and group routes.
Add a router to a package using the Copper CLI -
$ copper scaffold:router <package>

Create Routes

In a package with an existing Router, you can add a route to it using the Copper CLI -
copper scaffold:route \
-handler=HandleRocketLaunch \
-path=/rockets/{id}/launch \
-method=Post \

Sample Router

package rockets
import (..)
type NewRouterParams struct {
RW *chttp.ReaderWriter
Logger clogger.Logger
func NewRouter(p NewRouterParams) *Router {
return &Router{
rw: p.RW,
logger: p.Logger,
// Router struct implements the `chttp.Router` interface. It holds all the
// dependencies needed for its handlers.
type Router struct {
rw *chttp.ReaderWriter
logger clogger.Logger
// Routes returns a list of chttp.Route managed by this Router.
func (ro *Router) Routes() []chttp.Route {
return []chttp.Route{
Path: "/rockets/{id}/launch",
Methods: []string{http.MethodPost},
Handler: ro.HandleRocketLaunch,
// HandleRocketLaunch is invoked when a POST request is made to the
// "/rockets/{id}/launch" endpoint
func (ro *Router) HandleRocketLaunch(w http.ResponseWriter, r *http.Request) {
// Handle request here..
Copy link