A web framework that feels like Go

Build web apps.
Stay in flow.

GoLazy brings controllers, views, services, routes, and embedded assets together with conventions you can learn in an afternoon.

posts_controller.go

// MIT licensed sample code.
// app/controllers/posts/posts_controller.go
type PostsController struct {
  controllers.BaseController
  posts *postservice.Service
}

func (c *PostsController) Index(
  _ http.ResponseWriter,
  _ *http.Request,
) error {
  c.Set("title", "Posts")
  c.Set("posts", c.posts.List())
  return nil
}

MIT licensed. Convention on the outside. Plain Go underneath.

01 / Why GoLazy

Small framework.
Big momentum.

GoLazy aims for the development speed of a convention-first web framework without asking your application to stop feeling like Go. Start from one file, keep the standard library close, and split the app only when the shape earns it.

01

Convention earns speed.

Controllers, actions, views, and helpers have predictable names. The obvious path is paved, but the code remains ordinary Go.

02

Scale the structure when needed.

Use the full app layout for bigger systems, or keep a small app in one file. Go packages let you grow without ceremony.

03

Readable to people and agents.

Stable conventions give human teammates and coding agents clear places to inspect, change, and extend the application.

02 / Everything in its place

A full-stack shape
without the full-stack weight.

app/controllers

Controllers handle requests.

Actions set view data, coordinate services, and render a response through a shared application controller.

app/views

Templates stay close to intent.

Each controller owns a view directory. Rendered content flows through layouts for a consistent shell.

services

Services keep work focused.

Reusable application behavior lives outside HTTP concerns and is initialized once in the application context.

golazy.dev

The framework stays extractable.

Routing, controller primitives, rendering, and fallbacks live in small packages published as the standalone GoLazy framework.

03 / From route to response

The request path
reads like a sentence.

  1. RouteMatch the request
  2. ContextResolve dependencies
  3. ControllerRun the action
  4. ViewRender the response

04 / Get started

Hello, GoLazy.

Install the CLI, generate a new app, and start shaping your own project structure from the sample template.

$ curl -fsSL https://golazy.dev/install.sh | sh
$ lazy new github.com/user/my_first_lazy_app

Make the simple path
the productive path.

GoLazy is being built in the open as a practical experiment in convention-first Go development.

Build the one-file app