Quick Start

Install GoLazy

Install the lazy CLI, create a GoLazy app, and run it locally.

By Guillermo Alvarez - Published - Updated

Install the CLI

Install the lazy command with the GoLazy installer:

curl -fsSL https://golazy.dev/install.sh | sh

The installer checks for Go, installs mise when it is missing, installs the latest lazy command with Go, and prints a lazy new command using your GitHub username when it can detect one.

Confirm the command is on your PATH:

lazy --version

lazy --version is also used by lazy new to select the matching sample_app tag.

Inside an existing GoLazy app, app-bound lazy commands follow the golazy.dev version required by that app's go.mod. If your global lazy binary is newer or older, it runs or installs the matching CLI version from your user cache before continuing.

Create a full app

Generate an application from the sample app template:

lazy new github.com/user/my_first_lazy_app
cd my_first_lazy_app

The generated module is a normal Go module. Its executable lives under cmd/app, while application behavior lives under app and init.

Run the app

Start the development loop:

lazy

The command finds the app command, generates JavaScript assets when js.toml is present, builds a temporary binary, starts it on an internal loopback address, and proxies the public address. By default the public address is :3000.

Set a different address when needed:

ADDR=127.0.0.1:4000 lazy

What to inspect first

The first request goes through the same files every generated app uses:

cmd/app/main.go
init/app.go
init/context.go
init/routes.go
app/controllers/home/
app/views/home/index.html.tpl

For the standard route table, init/routes.go starts small:

func Draw(router *lazyroutes.Scope) {
    router.Get("/", home.New, (*home.HomeController).Index)
    router.Resources(postcontroller.New)
}

Verify the generated app

Run the app checks from the module root:

lazy tailwind
lazy js
go test ./...

The asset commands refresh generated public files before Go tests or builds embed them.

Continue with Single-File App when you want the smallest possible shape, or Full App when you want to understand the generated layout.