The Go pack builds a static Linux binary from yourDocumentation Index
Fetch the complete documentation index at: https://docs.withnubo.com/llms.txt
Use this file to discover all available pages before exploring further.
go.mod and serves it on a scratch base image. No runtime dependencies, fast cold starts, small images.
When it runs
Raypacks picks the Go pack when both are true:- There’s a
go.modat the repo root. - There’s a
main.goeither at the root or undercmd/<name>/main.go.
main.go anywhere) fall through detection. They’re not deployable as a Frame.
Entrypoint resolution
Raypacks figures out what to build, in this order:[build].entrypointinnubo.toml--entrypointpassed at build time- Auto-detection:
./main.goat the root, then the firstcmd/<name>/main.go(alphabetical)
cmd/*/main.go and don’t pin a choice, the alphabetically first one wins. Pin the right one with nubo.toml:
nubo.toml
What the build does
CGO_ENABLED=0GOOS=linuxGOARCH=amd64
/app/server in the final image with mode 0755.
Runtime
| Field | Value |
|---|---|
| Base image | scratch |
| Entrypoint | /app/server |
| Working dir | /app |
| Port | from Frame settings, default 8080 |
| Env | PORT is set to your port |
:$PORT and 0.0.0.0. The default net/http listener http.ListenAndServe(":8080", nil) works as long as the Frame’s configured port matches 8080.
Go version
The builder image pins Go1.25. That’s currently fixed; we don’t yet read go 1.x directives from your go.mod.
Limits today
linux/amd64only. No ARM yet.- No
vendor/mode. Rungo mod tidyand checkgo.mod/go.suminto the repo. - No
go.workworkspaces. - No build tags or
-ldflagscustomization.
Common errors
go.mod detected but no main.go found at root or under cmd/*: your repo is a library, or main.go lives somewhere Raypacks doesn’t look. Add a nubo.toml entry pointing at the right directory.
go build fails with “package . is not a main package”: you set an entrypoint to a directory that has Go code but no package main in it. Point at the directory that actually contains the main() function.
Examples
A single-binary repo withmain.go at the root: no config needed.
A monorepo with cmd/api/main.go and cmd/worker/main.go: one Frame per binary, each with its own nubo.toml (or use the dashboard’s entrypoint override).