http.HandlerFuncs and models are plain structs. There is no ORM and no reflection magic, and your business logic is never locked in. You own main.go, and every scaffolded file lands in your repo as code you are free to edit.
The GRIP Stack
Copper is opinionated about one thing: the stack. It’s built and optimized for GRIP:- Golang for your server, services, and data layer
- React for your pages
- Inertia to connect the two with server-side routing
- Postgres for your data
copper create gives you all four pieces, wired together and ready to build on. Of course, every piece is swappable. You may build JSON APIs with no frontend at all, render classic Go templates, or use SQLite or MySQL instead of Postgres.
Why Copper?
A Complete Toolkit
Routing, dependency injection, configuration, logging, structured errors, SQL migrations, and a Vite-powered React frontend with hot module replacement are all included, so you can start building features instead of assembling libraries.No API Layer to Maintain
With Inertia, your Go routers render React pages directly and pass props the same way you would pass template data. You get a modern React frontend without writing an API client, a REST layer, or a client-side router.Idiomatic Go
You write regular handlers, structs, and interfaces, and Copper wires them together with google/wire. Dependency injection happens at compile time, so there is no runtime container to configure or debug.A Single Binary
Frontend assets, templates, and migrations are all compiled into one executable, so deploying is copying one file.A Taste of Copper
A page in a Copper application is a Go handler and a React component. The handler loads data and renders the component with props:pkg/rockets/router.go
web/src/pages/fleet.tsx