Open source. In active development.

Less wiring.
More building.

The API-first Go framework. Generate modules, validate requests, and build typed APIs with clear boundaries.

Build a REST API →Run two services →Contribute to Gonex →
Go, with a little more structure. BSD 3-Clause
small duck. big ideas.The yellow Gonex duck mascot
GET /api/hello200 OK
built around Go ↗
EXPLICIT BY DESIGNGin-powered HTTPOpenAPI 3.1Optional GORMOptional gRPC
FROM ZERO TO YOUR FIRST RESPONSE

A small start.
A real application.

Add Gonex to your own Go project. Generate a project, add modules, and build JSON APIs inside your own application.

The complete quick start
Requires Go 1.27.2. The dependency pins a reviewed development commit; no release is assumed.
1

Create your API project.

Install and create
go install github.com/amkargar/gonex/cmd/gonex@3ca54b46cb42
gonex new shop --module example.com/acme/shop
cd shop
go mod tidy
2

Write your app. Run it.

Add an HTTP module, then start the server. Follow the quick start.

Your application
go tool gonex create module users
go tool gonex run
3

Call your API.

In another terminal
curl http://127.0.0.1:8080/users
200 OK{ "message": "users" }
STRUCTURE THAT EARNS ITS PLACE

Make room for your code.

The framework handles the connections.
You keep control of the application.

01 /

A home for every module.

Compose your application explicitly. Keep business services in plain Go and adapters at the edges.

Explore modules
02 /

Your types. Your contract.

Typed request and response schemas, validation, and OpenAPI 3.1 describe the API you actually build.

Discover typed HTTP
03 /

Add what you need.

Start with HTTP. Bring in GORM, migrations or gRPC when your application calls for them.

See the architecture
CLEAR ROUTES. TYPED HANDLERS.
routes.go · route excerpt
func Register(r transport.EndpointRegistrar,
    actions Actions) error {
    h := Handler{Actions: actions}
    return transport.Routes(r,
        transport.Post("/api/users", h.Create).
            Name("createUser").
            Errors(409),
        transport.Get("/api/users/:id", h.Get).
            Name("getUser").
            Errors(404),
    )
}
Typed endpoint registration excerpt. Read the HTTP guide ↗
PLAIN GO AT THE CENTER

Boundaries.
Without barriers.

Keep your business logic independent. HTTP handlers, database models, and Protobuf messages translate at the edges.

  • Explicit registration, no runtime source scanning
  • Request and response schemas in schemas.go
  • Managed startup and graceful shutdown
Explore the architecture
THE GONEX JOURNAL

Notes from the build.

All articles
HTTPyour servicegRPC

Why explicit boundaries matter in Go

Modules, adapters, and a business core that does not depend on a transport.

Read the story
hello,
goNex.

Meet Gonex: a little structure, a lot of Go

A tour of the modular framework, its explicit boundaries, and the best place to begin.

Read the story
YOUR NEXT IDEA STARTS HERE

Go make it happen.

Explore the docs. Read the source. Build something yours.