Skip to content

For gophers and agents

The composable
stack for
building with Go

Build and ship Go apps. equips your coding agents with project guidance, skills, and local context.

go install github.com/goforj/goforj/cmd/forj@latest

Code you own Local-first drivers One app binary

The code

Build more.
Wire less

Serve photos through a small controller and your Go service.

Create the controller

forj make:controller photos
Write a controller
internal/photos/controller.go
go
// Show delegates lookup to the injected service.
func (c *Controller) Show(ctx web.Context) error {
	photo, err := c.service.Find(ctx.Context(), ctx.Param("id"))
	if err != nil {
		return err
	}
	return ctx.JSON(http.StatusOK, photo)
}

Local → production

Swap drivers. Keep your Go

Choose local backends for development, then configure the drivers your deployment needs.

Configuration selects a compiled-in driver at startup. How drivers work →

.env
# Default local drivers
STORAGE_PHOTOS_DRIVER=local
DB_DRIVER=sqlite
CACHE_DRIVER=memory
QUEUE_DRIVER=workerpool
EVENTS_DRIVER=inproc
MAIL_DRIVER=log

Starter kits

Your next product.
Already taking shape

Start with sign-in, account settings, and a dashboard. Choose Vue, React, or Go-rendered HTML with templ + htmx. Make the frontend your own.

Your development loop

One command.
Everything running.

forj dev builds your App, runs migrations, and starts its runtimes. Keep editing. It rebuilds as your code changes.

01Choose your stackforj new
02Start buildingforj dev
Atlas Project guidance and tools for your coding agent
forj dev
┏ Preparing App
┃ + Build
┃ + Migrations · 5
┗ + Prepared
1 App 2 Lighthouse 3 Swagger
┏ App startup · Build App · Run App
┃ 03:18:58.651 Jobs         Queue worker started → default · 30 workers
┃ 03:18:58.651 Scheduler    Scheduler started
┃ 03:18:58.652 HTTP         HTTP server started → :3000 · 27 routes
┗ + Ready · App :3000 · 3 resources · 618ms

Lighthouse

Your app,
in plain sight

Browse requests, jobs, schedules, logs, and connected resources. Open an inspect record to see what happened during an execution.

Lighthouse request inspect showing a successful HTTP request with seven timeline events, including cache calls, a SQLite query, and the HTTP response

Run it your way

One CLI.
Every app

Start together. Scale independently.

Run HTTP, workers, schedules, and your own custom runtimes together, or give each its own process.

Add an app with forj make:app admin. Share your Go code, with separate wiring and a binary for each app.

app ONE PROCESSforj app
ONE PROCESS
PROCESSHTTPforj api
PROCESSWorkersforj worker
PROCESSSchedulesforj scheduler
PROCESSYour runtimeWired by youYour command
Same Go service code
Run built-in and custom runtimes together in one process.
Your server belongs here, too.Wire in a game server, FTP server, or another long-running Go service.
ONE GO PROJECTShared code.
Independent Apps.
internal/Your shared Go packages
appOwn wiring. Own binary.
RUN SOURCEforj app
forj build./bin/app
adminOwn wiring. Own binary.
RUN SOURCEforj admin app
forj admin build./bin/admin
Use forj to run current source. Build once, then deploy the binary without the CLI.

Tested against real backends

First-party libraries are exercised against real services, testcontainers, and emulators.

3,400+test functions in first-party libraries
950+integration test runs against real backends
48drivers across six infrastructure libraries
18libraries you can use independently
Explore the benchmarks →How these numbers are counted →

Your next application

From an idea.
To your first feature

Choose your stack, run your app, and start building what matters to you.

$ go install github.com/goforj/goforj/cmd/forj@latest
$ forj new

Unreleased documentation@latest installs the latest tagged release.