gofastr

module
v0.96.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 7, 2026 License: MIT

README

GoFastr

GoFastr

CI Release Go version Go Reference CodeRabbit Pull Request Reviews

The full-stack Go framework that doesn't get in the way of you or your agents.

Docs, component gallery, and live demos →  ·  Quickstart  ·  A GoFastr app in production

GoFastr is a pre-v1 full-stack Go framework. The API can still change between releases, under the upgrade policy: each breaking change ships with a changelog entry and a gofastr upgrade note. Declare your domain in Go and get server-rendered screens, REST endpoints, MCP tools, an OpenAPI spec, SQL migrations, and a typed query builder. The output is plain Go you can read, edit, and own: no reflection discovers your entities, no generated code you can't open. Auth, background jobs, search, and storage are opt-in packages, and you can drop to net/http or database/sql at any point.

It is built for both the agentic web and AI-assisted development. The app you ship joins the agentic web: the agents your users bring call your data over MCP, with the same login and permissions your users have. While you build, gofastr dev hands your coding agent, Claude Code or Codex, the app's routes, config, and logs over MCP, to help build and debug it.

Start with the quickstart. Or scaffold a whole app in one command: screens, API, and auth from gofastr init <name>, or gofastr generate from a one-file declaration (app spec tutorial).

A shoutout to CodeRabbit: it reviews every PR in this repo and keeps catching what everyone else missed, like six Major findings on #198 while the checks list showed pass. Every finding is triaged on the PR before merge.

Quickstart

Requires Go 1.27.3+. Install the CLI:

go install github.com/DonaldMurillo/gofastr/cmd/gofastr@latest

Three complete programs, smallest to fullest, the same three the site's homepage shows (examples/site): plain core/, one framework entity, and the full app shape. CI extracts all three from this README, compiles them, boots them, and curls them (cmd/gofastr/readme_quickstart_test.go).

Core only

core/ is stdlib-first building blocks: router, typed handlers, render, a SQL query builder, schema, migrate, mcp. Each is usable without the framework. The basic app is one screen and one API route:

package main

import (
	"context"
	"net/http"

	"github.com/DonaldMurillo/gofastr/core/handler"
	"github.com/DonaldMurillo/gofastr/core/render"
	"github.com/DonaldMurillo/gofastr/core/router"
)

type Pong struct {
	Status string `json:"status"`
}

func main() {
	r := router.New()

	// A server-rendered page.
	r.Get("/", render.HTMLHandler(func(req *http.Request) render.HTML {
		return render.Tag("h1", nil, render.Text("Hello from core."))
	}))

	// A typed JSON route: the adapter binds input and serializes output.
	r.Get("/api/ping", handler.HandlerAdapter(func(ctx context.Context, _ struct{}) (Pong, error) {
		return Pong{Status: "ok"}, nil
	}))

	http.ListenAndServe(":8080", r)
}
Framework

One framework entity is a complete server: a migrated table, REST CRUD, an OpenAPI spec, and MCP tools. Add only what you need from there.

package main

import (
	"database/sql"
	"log"

	"github.com/DonaldMurillo/gofastr/core/schema"
	"github.com/DonaldMurillo/gofastr/framework"
	_ "github.com/DonaldMurillo/gofastr/sqlite/stdlib"
)

func main() {
	db, _ := sql.Open("sqlite3", "app.db")
	app := framework.NewApp(framework.WithDB(db), framework.WithMCP()) // WithMCP serves the tools at /mcp

	// CRUD is auto-on when a DB is set (CRUD *bool: nil = auto).
	app.Entity("posts", framework.EntityConfig{
		Exposure: &framework.ExposureConfig{
			Public: true, // anonymous read AND write; omit it and CRUD requires a session (secure by default)
			MCP:    true, // emit posts_list/get/create/update/delete MCP tools
		},
		Fields: []schema.Field{{Name: "title", Type: schema.String, Required: true}},
	})

	log.Fatal(app.Start(":8080")) // GET/POST /posts, /openapi.json, MCP: all live
}

That's the whole program. No config files, no codegen step, no registration boilerplate. Add entities-as-JSON, batteries, the UI runtime, or the generator when you need them. For how a flat app grows into internal/<domain>/ as boundaries appear, see project structure.

Donald's Way

The full app shape: server-rendered screens with SEO, an owner-scoped entity API, MCP for agents, and login + sessions, in one binary. A screen is Go too: Render returns HTML, and a small JS runtime hydrates it in place, with no React or Vue on the client:

package main

import (
	"context"
	"database/sql"
	"log"

	"github.com/DonaldMurillo/gofastr/battery/auth"
	"github.com/DonaldMurillo/gofastr/core-ui/app"
	"github.com/DonaldMurillo/gofastr/core-ui/html"
	"github.com/DonaldMurillo/gofastr/core/render"
	"github.com/DonaldMurillo/gofastr/core/schema"
	"github.com/DonaldMurillo/gofastr/framework"
	"github.com/DonaldMurillo/gofastr/framework/uihost"
	_ "github.com/DonaldMurillo/gofastr/sqlite/stdlib"
)

// A screen is plain Go: Render returns server-rendered HTML.
type HomeScreen struct{}

func (s *HomeScreen) ScreenTitle(ctx context.Context) string { return "Notes" }
func (s *HomeScreen) Render() render.HTML {
	return html.Heading(html.HeadingConfig{Level: 1}, render.Text("My notes"))
}

func main() {
	db, _ := sql.Open("sqlite3", "notes.db")

	// Server-rendered screens. Each also serves an auto llm.md.
	ui := app.NewApp("Notes")
	ui.Register("/", &HomeScreen{}, nil)

	// SEO for those pages.
	host := uihost.New(ui,
		uihost.WithDescription("A tiny notes app."),
		uihost.WithOpenGraph(uihost.OG{Title: "Notes", Type: "website"}),
		uihost.WithSitemap(uihost.SitemapConfig{BaseURL: "https://notes.example"}),
	)

	// MCP for agents.
	fwApp := framework.NewUIHostApp(host,
		framework.WithDB(db),
		framework.WithAPIPrefix("/api"),
		framework.WithMCP(),
	)

	// Scope.OwnerField scopes rows per user: anonymous → 401, cross-user → 404.
	fwApp.Entity("notes", framework.EntityConfig{
		Scope:    &framework.ScopeConfig{OwnerField: "user_id"},
		Exposure: &framework.ExposureConfig{MCP: true},
		Fields:   []schema.Field{{Name: "title", Type: schema.String, Required: true}},
	})

	// Login + sessions.
	authMgr := auth.New(auth.AuthConfig{
		DevMode:      true, // dev only: mints a per-process JWT secret; set JWTSecret in prod
		UserStore:    auth.NewEntityUserStore(db, "auth_users"),
		SessionStore: auth.NewEntitySessionStore(db, "auth_sessions"),
	})
	authMgr.Use(auth.NewCorePlugin())
	if err := authMgr.Init(fwApp); err != nil {
		log.Fatal(err)
	}
	fwApp.Use(auth.SessionMiddleware(authMgr))

	log.Fatal(fwApp.Start(":8080"))
}

GET / is the rendered screen. Anonymous GET /api/notes answers 401: OwnerField scopes rows per user, and auto-CRUD requires a session unless the entity is Public. /auth/register and /auth/login come from the auth battery, and the MCP tools at /mcp respect the same owner scope as the REST API.

Run it from a clone

To work on the framework itself, or run the examples:

git clone https://github.com/DonaldMurillo/gofastr.git
cd gofastr
go test ./...                        # SQLite; the Postgres halves skip without TEST_POSTGRES_DSN
go run ./cmd/gofastr --help          # CLI overview
go run ./examples/blog               # minimal blog with auto-CRUD on SQLite

Postgres setup and the race pass are under Contributing. Linked Git worktrees of the same app each get their own port and database path, so two coding agents can run side by side (isolation).

Updating GoFastr

The module dependency and the installed CLI are versioned independently; keep them on the same release. gofastr upgrade reads your go.mod, lists every migration note between your version and the target (breaking changes are marked in the release notes), and points at the affected lines in your code (--apply runs the steps). Manual steps and the full guide: upgrading, or gofastr docs upgrading.

With a released CLI, gofastr init pins a new app to the CLI's release and writes its minimum Go version (1.27.3) into go.mod, plus a toolchain line when the release prefers a newer one. See the CLI reference for project name rules.

The code you don't write

The framework emits routes, validation, migrations, pagination, uploads, the spec, and agent tools from one declaration (app.Entity in Go, or an entities: entry in an app spec). Declarations are optional: core/ routes and hand-written screens run without them. A declaration grows the same way it starts, with fields, enums, relations, soft delete, and a state machine on the status:

app.Entity("posts", framework.EntityConfig{
    Scope: &framework.ScopeConfig{SoftDelete: true},
    Fields: []schema.Field{
        {Name: "title", Type: schema.String, Required: true},
        {Name: "body", Type: schema.Text},
        {Name: "status", Type: schema.Enum,
            Values: []string{"draft", "published"}, Default: "draft"},
        {Name: "author_id", Type: schema.Relation, To: "users"},
    },
    States: &framework.StatesConfig{
        Field:   "status",
        Initial: []string{"draft"},
        Transitions: []framework.Transition{
            {Key: "publish", From: []string{"draft"}, To: "published"},
        },
    },
    Exposure: &framework.ExposureConfig{MCP: true},
})
Output Auto-generated
HTTP GET / POST /posts, GET / PUT / PATCH / DELETE /posts/{id}
Batch endpoints POST / PATCH / DELETE /posts/_batch: atomic; one tx for all items
SSE stream GET /posts/_events: entity.created/updated/deleted, scoped per tenant
Filtering ?status=published&views_gte=10&sort=-created_at&page=2, or by bracket word: ?views[gte]=10 (filters)
Eager loading ?include=author.profile,comments: flat or nested, validated against the registry
Cursor paging ?cursor=&limit=50: keyset paging (cursor-pagination)
Multipart upload multipart/form-data on Image/File fields → streamed through WithFileStorage
Validation Required, unique, enum, min/max, regex pattern, multi-tenant scope
Migrations Versioned runner with drift + dirty-state guards; declarative incremental generation (migrations)
FK constraints BelongsTo relations emit FOREIGN KEY clauses; AutoMigrate topo-sorts tables
Transactions Create/Update/Delete + hooks share one tx; TxFromContext(ctx) exposes it
OpenAPI 3 /openapi.json plus an API reference page at /api/docs/
MCP posts_list, posts_get, posts_create, posts_update, posts_delete, posts_publish
State moves POST /posts/{id}/transitions/publish: the status changes only through a move, on every write path; one call per move in each client (states)
Soft delete deleted_at column + automatic filter
Multi-tenant tenant_id column + automatic scope from request context
Hooks BeforeCreate, AfterUpdate, etc. for custom behaviour
Custom routes EntityConfig.Endpoints with optional MCP exposure
Client SDKs gofastr generate sdk: a Go module with typed Local/Remote repositories + JS/TS clients, with a live docs site (sdk)
Customer CLI gofastr generate cli: a branded terminal client for your customers, scoped API-token auth

Try all of it against a running server: examples/api-tour is the curl tour, covering eager loading, cursor paging, atomic batch, SSE, uploads, and sparse updates. Hooks run inside the write's transaction (hooks-and-transactions).

Experimental desktop apps use the OS WebView with CGO_ENABLED=0. On Linux, gofastr desktop build --format=tar.gz creates a bundle; the separate desktop install --bundle=<extracted-directory> and desktop uninstall --id=<app.id> commands manage a per-user installation without changing saved default handlers or removing app data. See the desktop reference.

GoFastr serves the web, and Start stays the way to run an app. A presentation that is not a web page, such as native screens or a terminal UI from a separate library, can run the same App with app.Run(ctx, framework.ServicesHost()). That runs the boot phases Start runs (migrations, seeds, plugins, OnStart hooks) and opens no listener; the presentation calls the App's services in-process, under the same owner scoping. GoFastr renders none of that UI. See Application hosts.

The design bets

  • Two layers. A small core/ of stdlib-first primitives sits under an opinionated framework/. Use the framework for the common path; drop to core and write plain net/http when it's in your way. (The one external touchpoint is core/middleware/tracing.go, which pulls in OpenTelemetry; the rest of core/ is stdlib-only.)
  • Server-rendered UI, hydrated in place. Screens are Go: Render returns HTML and the server sends the full page. A small JS runtime attaches to it. In-page changes like sort, paginate, or add-a-row call the server and swap one region, and cross-page navigation swaps content client-side with a route cache, so there are no hard refreshes. No React or Vue on the client, and no router code for you to write.
  • The interactive layer keeps no server state. Sessions are signed tokens, so any replica serves any request. Updates pull first: client signals, then RPC, then polling. SSE push is reserved for presence and collaboration (reactivity.md).
  • Security scopes live in the declaration, fail-closed. owner_field makes auto-CRUD per-user (anonymous → 401, cross-user → 404), access: gates operations behind RBAC permissions (403), multi_tenant scopes by tenant, and gofastr validate flags PII-shaped fields (email, phone, address, …) exposed without any of them. The MCP tools respect the same scopes as the REST routes.
  • You own the output. The generated code is normal Go you read, debug, commit, edit, and compose from your own main. Registration is ordinary Go in the generated files; no reflection discovers your entities, and no platform sits between your binary and your server.
  • Batteries are separate packages. Auth, cache, email, queue, search, storage sit behind narrow interfaces; swap any one without forking.
  • The framework checks whether you're still using it well. gofastr verify runs the 85 rules of the contract catalog (routing, permissions, security, rendering, accessibility) and measures semantic coverage: not "did this line run" but "did a request ever reach this route, did this permission ever get evaluated". Error-severity findings fail the run (--strict makes warnings fail too), with per-line waivers and a baseline mode for existing codebases. See contracts.
  • The app generator scaffolds the whole app when you want a head start. One gofastr.yml generates the screens and the API in one pass; then it's plain Go you own and edit, and the running app never needs the app spec again (app spec tutorial).

The repo in 60 seconds

Directory What it is Depend on it when…
core/ Stdlib-only primitives: router, query, schema, render, mcp, openapi, migrate. Each usable on its own. you want plain Go building blocks, no framework.
framework/ The opinionated entity layer (App, EntityConfig, CRUD, hooks, migrations). A thin facade re-exporting its focused runtime subpackages. you want one declaration → SQL + REST + OpenAPI + MCP.
core-ui/ Server-driven UI runtime: html primitives, patterns, widget islands, signals, localdb (IndexedDB databases declared in Go, records kept in the visitor's browser), the vanilla-JS runtime. Independently usable. you're rendering HTML from Go.
framework/ui/icons 291 vendored Feather and Lucide SVG icons with Go constants, compatibility aliases, and 19 categories, rendered by ui.Icon. The catalog has sticky search and category filters. Icon reference; sources and licenses. you need icons for navigation, links, or status.
battery/ Opt-in infrastructure: admin, auth, cache, email, semantic, log, notify, print, queue, relay, rtc, search, setup, storage, webhook, desktop (experimental: the app in the OS WebView, pure Go), and service (experimental: the app binary as a per-user OS service with a browser UI on loopback). Each behind a small interface. you need a real subsystem; import only the ones you use.
cmd/gofastr The CLI: init, generate, pack (lossy app→app spec snapshot), migrate, build, dev, verify, docs, and more. you're scaffolding, generating, or checking code.
kiln Experimental agent build-mode runtime (mutate an in-memory IR over HTTP). you're driving the app from an agent.
examples/ Runnable reference apps: the meridian app spec flagship (a SaaS billing console + marketing site), the ecommerce app generator, plus blog, api-tour, spa, and the docs site. you want to see it wired end-to-end.

You import framework and the batteries you opt into, not each of its subpackages. The subpackage split is an internal seam (see framework/ARCHITECTURE.md); the public API is framework.X plus the batteries you reach for.

Built with GoFastr

In production:

  • Barcode & QR Code Maker: a live tool, no signup required, to generate and read barcodes and QR codes (QR, EAN-13, UPC-A, Code 128, Data Matrix, and more) as PNG, SVG, or PDF, with CSV/Excel batch export to a ZIP, a REST API, and an MCP server. Built and running on GoFastr.

The framework also runs on itself: examples/site is the docs site and component gallery, examples/meridian is a generated SaaS console + marketing site edited by hand ever since, and examples/ecommerce is still owned by the generator and regenerated on every test run. All three import the same framework, core-ui, and batteries a user app does, and each carries an end-to-end suite. External production adopters are the part still ahead of us; see Project status.

Documentation

Every doc is embedded into the gofastr binary: gofastr docs browses them offline, the docs site serves them rendered with live component demos, and the framework_docs_* MCP tools (framework.WithMCPTools(mcptools.Register) from framework/docs/mcptools) expose them to agents connected to a running app. The docs index is the browsable entry point. Start with:

Project status

GoFastr is pre-1.0 and explicitly not stable. Pin a version (go get …@v0.x.y); a v1.0.0 tag will mark the stability promise.

  • The core/ primitives are usable and tested in isolation.
  • The framework/ entity layer handles SQLite + Postgres CRUD apps today.
  • core-ui/ changes fastest. Its exported APIs follow the same upgrade policy as the rest of the tree: a breaking change ships whole in a minor release, with a gofastr upgrade note. Expect more of those here than anywhere else before v1.
  • The CLI binary bundles a pure-Go SQLite driver (modernc.org/sqlite, registered as sqlite3 by gofastr/sqlite/stdlib), so it builds with CGO_ENABLED=0. To run migrations against Postgres, build a custom binary that imports your driver of choice.

Why this exists

This is a personal project first, a way to practice building something large alongside AI. A few things I wanted to dig into:

  • Solidify my web-tech foundations by rebuilding the stack from the socket up, so the fundamentals stop feeling like magic.
  • Attack UI generation from a different angle. My background is in Node; I wanted to see what server-rendered, server-driven UI looks like with the heavy client framework off the table and the markup generated in a compiled language instead.
  • Work in a compiled language, where a compiler catches the mistakes Node surfaces at runtime, in production.
  • Skip the convention-vs-configuration false choice. Your own framework can have opinionated defaults and a hatch down to plain stdlib code in the same app.
  • Build something large, fun, and open source with AI. Most of this repo was written alongside coding agents; the workflow itself is part of the experiment.

Contributing

This repo is a personal research tree at the moment. Issues and PRs are welcome but expect strong opinions about scope: the goal is a framework an AI agent can drive end-to-end, not a kitchen-sink CMS.

Before pushing, the .githooks/pre-push gate re-runs the deterministic CI test sweep (when a commit skipped it), module-integrity checks, and govulncheck. The race pass is separate. Run make test-race for that. Enable hooks once with:

git config core.hooksPath .githooks
Testing against Postgres

The framework's tests fan over both SQLite and Postgres. With Docker running, every dialect-aware test runs on both engines automatically:

make test            # SQLite only, fast
make test-pg         # both dialects against the docker-compose Postgres
make test-pg-env     # both dialects, points at TEST_POSTGRES_DSN
make test-race       # race detector across the whole repo

Each Postgres test gets its own schema for isolation; the container is shared across the whole go test invocation so cold-start is amortised.

License

MIT: free to use, modify, and distribute, including commercially, provided the copyright notice and license text are preserved.

Directories

Path Synopsis
assets
brand
Package brand supplies the approved GoFastr logo and app icon.
Package brand supplies the approved GoFastr logo and app icon.
battery
admin
Package admin is the back office for GoFastr apps: a dashboard, the entity screens, and the operations pages (jobs, audit log, roles, user roles, process modules), drawn in one shell through the app's UI host.
Package admin is the back office for GoFastr apps: a dashboard, the entity screens, and the operations pages (jobs, audit log, roles, user roles, process modules), drawn in one shell through the app's UI host.
auth
Package auth is GoFastr's authentication subsystem.
Package auth is GoFastr's authentication subsystem.
auth/authui
Package authui draws battery/auth's own screens with the design system: the magic-link confirmation and the same-site hop a cross-site OAuth link callback or verification link lands on.
Package authui draws battery/auth's own screens with the design system: the magic-link confirmation and the same-site hop a cross-site OAuth link callback or verification link lands on.
cache
Package cache is part of the GoFastr framework.
Package cache is part of the GoFastr framework.
desktop
Package desktop runs a GoFastr app as a local-first desktop application inside the operating system's own WebView, with a typed JavaScript bridge to native capabilities (window, dialogs, clipboard, notifications, files) that plugins extend in plain Go.
Package desktop runs a GoFastr app as a local-first desktop application inside the operating system's own WebView, with a typed JavaScript bridge to native capabilities (window, dialogs, clipboard, notifications, files) that plugins extend in plain Go.
desktop/appstate
Package appstate is the desktop battery's durable key/value store: one JSON file, 0600, debounced writes, a flush on quit, and a change hook.
Package appstate is the desktop battery's durable key/value store: one JSON file, 0600, debounced writes, a flush on quit, and a change hook.
desktop/desktoptest
Package desktoptest is the no-native-code Shell double the desktop battery's own tests and app-level tests run against.
Package desktoptest is the no-native-code Shell double the desktop battery's own tests and app-level tests run against.
desktop/internal/fakecgo
Package fakecgo provides the runtime-support symbols the Go runtime demands once runtime.iscgo is true, without cgo: a Darwin and Linux port of runtime/cgo's C glue (gcc_unix.c, gcc_libinit_unix.c, pthread_unix.c, gcc_setenv.c, and gcc_arm64.S or gcc_amd64.S) to Go assembly plus cgo_import_dynamic libc references, one assembly file per architecture.
Package fakecgo provides the runtime-support symbols the Go runtime demands once runtime.iscgo is true, without cgo: a Darwin and Linux port of runtime/cgo's C glue (gcc_unix.c, gcc_libinit_unix.c, pthread_unix.c, gcc_setenv.c, and gcc_arm64.S or gcc_amd64.S) to Go assembly plus cgo_import_dynamic libc references, one assembly file per architecture.
desktop/internal/ffi
Package ffi holds the runtime linknames and the callback trampoline table that let a CGO_ENABLED=0 binary call C and receive C callbacks on darwin/arm64, darwin/amd64, linux/arm64, and linux/amd64.
Package ffi holds the runtime linknames and the callback trampoline table that let a CGO_ENABLED=0 binary call C and receive C callbacks on darwin/arm64, darwin/amd64, linux/arm64, and linux/amd64.
desktop/internal/gtk
Package gtk is the Linux half of the desktop host's native layer: dlopen/dlsym of the GTK 3 and WebKitGTK 4.1 shared libraries and the resolved C entry-point table the shell calls through internal/ffi.
Package gtk is the Linux half of the desktop host's native layer: dlopen/dlsym of the GTK 3 and WebKitGTK 4.1 shared libraries and the resolved C entry-point table the shell calls through internal/ffi.
desktop/internal/objc
Package objc is the pure-Go Objective-C runtime bridge for the darwin desktop host: dlopen of AppKit, WebKit, and libobjc, objc_msgSend through the internal/ffi call trampoline, class registration with Go IMPs, block literals, and the dispatch main-queue hop.
Package objc is the pure-Go Objective-C runtime bridge for the darwin desktop host: dlopen of AppKit, WebKit, and libobjc, objc_msgSend through the internal/ffi call trampoline, class registration with Go IMPs, block literals, and the dispatch main-queue hop.
desktop/internal/update
Package update is the auto-updater's engine: the signed feed format, semver comparison, capped downloads, pure-Go zip extraction, and the OS-specific apply step behind one interface.
Package update is the auto-updater's engine: the signed feed format, semver comparison, capped downloads, pure-Go zip extraction, and the OS-specific apply step behind one interface.
desktop/linux
Package linux provides the GTK 3 / WebKitGTK 4.1 desktop shell on Linux amd64 and arm64.
Package linux provides the GTK 3 / WebKitGTK 4.1 desktop shell on Linux amd64 and arm64.
desktop/macos
Package macos is the darwin arm of the desktop host: the Shell over AppKit and WKWebView (window, menus, tray, dialogs, pasteboard, notifications, deep links), built on the pure-Go Objective-C bridge in battery/desktop/internal/objc with no cgo anywhere.
Package macos is the darwin arm of the desktop host: the Shell over AppKit and WKWebView (window, menus, tray, dialogs, pasteboard, notifications, deep links), built on the pure-Go Objective-C bridge in battery/desktop/internal/objc with no cgo anywhere.
desktop/native
Package native picks the desktop host's platform package by GOOS: the one line a host needs to run on the OS's own WebView without naming a platform itself.
Package native picks the desktop host's platform package by GOOS: the one line a host needs to run on the OS's own WebView without naming a platform itself.
desktop/ui
Package ui is the desktop theme and its components, shipped as design-system extensions from the battery instead of edits to framework/ui or core-ui.
Package ui is the desktop theme and its components, shipped as design-system extensions from the battery instead of edits to framework/ui or core-ui.
desktop/windows
Package windows implements the Windows/amd64 desktop host with a Win32 message loop and WebView2.
Package windows implements the Windows/amd64 desktop host with a Win32 message loop and WebView2.
email
Package email sends transactional email over SMTP and renders it from templates.
Package email sends transactional email over SMTP and renders it from templates.
log
Package log is the GoFastr server-log plugin.
Package log is the GoFastr server-log plugin.
notify
Package notify is a small unified-notifications primitive for GoFastr apps.
Package notify is a small unified-notifications primitive for GoFastr apps.
print
Package print is a GoFastr battery for printable documents.
Package print is a GoFastr battery for printable documents.
queue
Package queue is part of the GoFastr framework.
Package queue is part of the GoFastr framework.
relay
Package relay serves third-party services (analytics vendors, chat widgets, error trackers) first-party: a declarative, hardened same-origin reverse proxy mounted under one path on the host app.
Package relay serves third-party services (analytics vendors, chat widgets, error trackers) first-party: a declarative, hardened same-origin reverse proxy mounted under one path on the host app.
rtc
Package rtc is a WebRTC signaling server: rooms of peers over one core/stream.StateChannel WebSocket per room, addressed relay of offer/answer/ICE frames, ICE server configuration with per-peer time-limited TURN credentials, and cross-replica relay over core/fanout.
Package rtc is a WebRTC signaling server: rooms of peers over one core/stream.StateChannel WebSocket per room, addressed relay of offer/answer/ICE frames, ICE server configuration with per-peer time-limited TURN credentials, and cross-replica relay over core/fanout.
search
Package search provides pluggable search backends for GoFastr.
Package search provides pluggable search backends for GoFastr.
semantic
Package semantic provides a local semantic-search battery for GoFastr.
Package semantic provides a local semantic-search battery for GoFastr.
service
Package service installs a GoFastr app binary as a per-user OS service and serves its UI to the signed-in user's browser on loopback.
Package service installs a GoFastr app binary as a per-user OS service and serves its UI to the signed-in user's browser on loopback.
setup
Package setup provides a first-run setup flow for self-hosted GoFastr apps.
Package setup provides a first-run setup flow for self-hosted GoFastr apps.
sitesearch
Package sitesearch is full-text search over an app's rendered pages.
Package sitesearch is full-text search over an app's rendered pages.
storage
Package storage provides file/object storage backends for the upload battery.
Package storage provides file/object storage backends for the upload battery.
webhook
Package webhook is the outbound-webhook battery for GoFastr.
Package webhook is the outbound-webhook battery for GoFastr.
benchmarks
apps/crud command
crud is the typical entity-CRUD shape: one entity backed by SQLite, auto-migrate, full CRUD routes.
crud is the typical entity-CRUD shape: one entity backed by SQLite, auto-migrate, full CRUD routes.
apps/full command
full is a realistic shape with every supported framework surface wired on at once: three related entities with relations, audit log, cron, MCP, the UI host with one screen, file storage, search backend, access control, multi-tenancy, custom endpoints, plugins, and the OpenAPI + Swagger UI surface.
full is a realistic shape with every supported framework surface wired on at once: three related entities with relations, audit log, cron, MCP, the UI host with one screen, file storage, search backend, access control, multi-tenancy, custom endpoints, plugins, and the OpenAPI + Swagger UI surface.
apps/minimal command
minimal is the smallest meaningful GoFastr binary: NewApp + one plaintext route.
minimal is the smallest meaningful GoFastr binary: NewApp + one plaintext route.
cmd
affected command
affected prints the Go packages whose test outcome could change given what differs between the working tree and a base ref, the way `nx affected` scopes a JavaScript monorepo.
affected prints the Go packages whose test outcome could change given what differs between the working tree and a base ref, the way `nx affected` scopes a JavaScript monorepo.
bench-resources command
bench-resources measures binary size, peak RAM during `go build`, and runtime RAM (idle + under load) for the bench apps under benchmarks/apps/ plus cmd/gofastr and cmd/kiln.
bench-resources measures binary size, peak RAM during `go build`, and runtime RAM (idle + under load) for the bench apps under benchmarks/apps/ plus cmd/gofastr and cmd/kiln.
check-csp command
check-csp is a build-time linter that fails when production Go source emits inline <script> blocks.
check-csp is a build-time linter that fails when production Go source emits inline <script> blocks.
check-embed command
Command check-embed is the build-time gate for server actions on embeddable surfaces.
Command check-embed is the build-time gate for server actions on embeddable surfaces.
check-embed/embedcheck
Package embedcheck is the build-time gate for server actions on embeddable surfaces.
Package embedcheck is the build-time gate for server actions on embeddable surfaces.
gofastr command
Command gofastr is the GoFastr CLI.
Command gofastr is the GoFastr CLI.
gofastr/internal/agentscmd
Package agentscmd implements `gofastr agents`: the AI-agent instruction files a project ships, including the embedded host skill.
Package agentscmd implements `gofastr agents`: the AI-agent instruction files a project ships, including the embedded host skill.
gofastr/internal/appgen
Package appgen renders Go source from a project's declarations: the app spec app, the derived generators (typed entities, client, CLI, SDK, endpoints, styles), and the canonical package copies.
Package appgen renders Go source from a project's declarations: the app spec app, the derived generators (typed entities, client, CLI, SDK, endpoints, styles), and the canonical package copies.
gofastr/internal/appspec
Package appspec is the app spec model: the gofastr.yml types, their decoder, naming helpers, and the checks a spec must pass before anything renders from it.
Package appspec is the app spec model: the gofastr.yml types, their decoder, naming helpers, and the checks a spec must pass before anything renders from it.
gofastr/internal/auditcmd
Package auditcmd implements `gofastr audit`: the accessibility, lint and PII audits over a project.
Package auditcmd implements `gofastr audit`: the accessibility, lint and PII audits over a project.
gofastr/internal/buildcmd
Package buildcmd implements `gofastr build`: codegen, vet, the accessibility, sandbox and embed gates, then go build.
Package buildcmd implements `gofastr build`: codegen, vet, the accessibility, sandbox and embed gates, then go build.
gofastr/internal/cli
Package cli is the CLI's shared process plumbing: version info, the exit indirection tests swap, terminal color and status-line helpers, and the help-flag check every subcommand uses.
Package cli is the CLI's shared process plumbing: version info, the exit indirection tests swap, terminal color and status-line helpers, and the help-flag check every subcommand uses.
gofastr/internal/clitest
Package clitest holds test helpers the cmd/gofastr packages share.
Package clitest holds test helpers the cmd/gofastr packages share.
gofastr/internal/desktopcmd
Package desktopcmd implements `gofastr desktop`: running, bundling, signing and publishing an app as a desktop application.
Package desktopcmd implements `gofastr desktop`: running, bundling, signing and publishing an app as a desktop application.
gofastr/internal/devcmd
Package devcmd implements `gofastr dev`: the rebuild-on-change dev server with livereload.
Package devcmd implements `gofastr dev`: the rebuild-on-change dev server with livereload.
gofastr/internal/docscmd
Package docscmd implements `gofastr docs`: browsing and serving the embedded framework docs.
Package docscmd implements `gofastr docs`: browsing and serving the embedded framework docs.
gofastr/internal/exportcmd
Package exportcmd implements `gofastr export`: running the app and writing its pages out as static files.
Package exportcmd implements `gofastr export`: running the app and writing its pages out as static files.
gofastr/internal/gates
Package gates holds the source checks `gofastr build` and `gofastr audit` both run: the accessibility gate and the sandbox gate.
Package gates holds the source checks `gofastr build` and `gofastr audit` both run: the accessibility gate and the sandbox gate.
gofastr/internal/generatecmd
Package generatecmd implements `gofastr generate`: the generator dispatch, its flags, and watch mode.
Package generatecmd implements `gofastr generate`: the generator dispatch, its flags, and watch mode.
gofastr/internal/harnesscmd
Package harnesscmd implements `gofastr harness`: the agent harness CLI, its credentials, HTTP and MCP surfaces.
Package harnesscmd implements `gofastr harness`: the agent harness CLI, its credentials, HTTP and MCP surfaces.
gofastr/internal/initcmd
Package initcmd implements `gofastr init`: scaffolding a new project.
Package initcmd implements `gofastr init`: scaffolding a new project.
gofastr/internal/loopback
Package loopback decides which hosts and origins a local-only CLI server (theme edit, harness HTTP) accepts: the bind address's loopback names, failing closed on anything else.
Package loopback decides which hosts and origins a local-only CLI server (theme edit, harness HTTP) accepts: the bind address's loopback names, failing closed on anything else.
gofastr/internal/migratecmd
Package migratecmd implements `gofastr migrate`: applying, inspecting and repairing database migrations, and generating new ones.
Package migratecmd implements `gofastr migrate`: applying, inspecting and repairing database migrations, and generating new ones.
gofastr/internal/newcmd
Package newcmd implements `gofastr new`: scaffolding a handler or a route into an existing project.
Package newcmd implements `gofastr new`: scaffolding a handler or a route into an existing project.
gofastr/internal/packcmd
Package packcmd implements `gofastr pack`: recovering a best-effort app spec from a generated app's source.
Package packcmd implements `gofastr pack`: recovering a best-effort app spec from a generated app's source.
gofastr/internal/project
Package project reads the project the CLI runs in: the enclosing go.mod and its gofastr requirement, build targets, and the CLI's own version and build info.
Package project reads the project the CLI runs in: the enclosing go.mod and its gofastr requirement, build targets, and the CLI's own version and build info.
gofastr/internal/projectfs
Package projectfs reads and writes files inside a user's project without following a symlink out of it.
Package projectfs reads and writes files inside a user's project without following a symlink out of it.
gofastr/internal/semanticcmd
Package semanticcmd implements `gofastr semantic`: semantic search over the project at the working directory.
Package semanticcmd implements `gofastr semantic`: semantic search over the project at the working directory.
gofastr/internal/testcmd
Package testcmd implements `gofastr test`: go test over the project with colorized, counted output.
Package testcmd implements `gofastr test`: go test over the project with colorized, counted output.
gofastr/internal/themecmd
Package themecmd implements `gofastr theme`: scaffolding a theme and the live theme editor with its write-back.
Package themecmd implements `gofastr theme`: scaffolding a theme and the live theme editor with its write-back.
gofastr/internal/unmountcmd
Package unmountcmd implements `gofastr unmount` and `gofastr remount`: copying a framework package into the project and putting it back.
Package unmountcmd implements `gofastr unmount` and `gofastr remount`: copying a framework package into the project and putting it back.
gofastr/internal/upgradecmd
Package upgradecmd implements `gofastr upgrade`: the release notes between two versions and the edits they call for.
Package upgradecmd implements `gofastr upgrade`: the release notes between two versions and the edits they call for.
gofastr/internal/validatecmd
Package validatecmd implements `gofastr validate`: checking an app spec without generating.
Package validatecmd implements `gofastr validate`: checking an app spec without generating.
gofastr/internal/verifycmd
Package verifycmd implements `gofastr verify`: the contracts pipeline, go vet with the repo vettool, and the vettool handoff.
Package verifycmd implements `gofastr verify`: the contracts pipeline, go vet with the repo vettool, and the vettool handoff.
gofastr/packages
Package packages carries the canonical chrome packages into the gofastr binary.
Package packages carries the canonical chrome packages into the gofastr binary.
gofastr/packages/docpage
Package docpage is the app's help/docs page: the article nav on the left, the article in the middle, the table of contents on the right, and a previous/next pager under the article.
Package docpage is the app's help/docs page: the article nav on the left, the article in the middle, the table of contents on the right, and a previous/next pager under the article.
gofastr/packages/sitefooter
Package sitefooter is the app's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in sitefooter.style.css (an owned style; `gofastr gen styles` writes the class methods in sitefooter_style.gen.go), and every dimension a theme token.
Package sitefooter is the app's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in sitefooter.style.css (an owned style; `gofastr gen styles` writes the class methods in sitefooter_style.gen.go), and every dimension a theme token.
gofastr/packages/siteheader
Package siteheader is the app's top bar, built the way an app builds any piece of chrome the framework does not ship:
Package siteheader is the app's top bar, built the way an app builds any piece of chrome the framework does not ship:
kiln command
kiln is the Kiln runtime CLI.
kiln is the Kiln runtime CLI.
mutate command
Command mutate breaks the conditional guards in a package one at a time and reports which ones no test notices.
Command mutate breaks the conditional guards in a package one at a time and reports which ones no test notices.
mutate/guardmut
Package guardmut finds the conditional guards in a Go source file and rewrites them so they can never fire, or always fire.
Package guardmut finds the conditional guards in a Go source file and rewrites them so they can never fire, or always fire.
repolint command
vettool command
vettool runs GoFastr's analyzer suite (internal/analyzers/suite) for `go vet -vettool` over this repo.
vettool runs GoFastr's analyzer suite (internal/analyzers/suite) for `go vet -vettool` over this repo.
Package codegen provides YAML-driven code generation primitives for GoFastr.
Package codegen provides YAML-driven code generation primitives for GoFastr.
core
a2a
Package a2a implements the server side of the Agent2Agent protocol v1.0 task exchange over its JSON-RPC binding: SendMessage, SendStreamingMessage, GetTask, ListTasks, CancelTask, SubscribeToTask, the four push-notification-config operations, and GetExtendedAgentCard.
Package a2a implements the server side of the Agent2Agent protocol v1.0 task exchange over its JSON-RPC binding: SendMessage, SendStreamingMessage, GetTask, ListTasks, CancelTask, SubscribeToTask, the four push-notification-config operations, and GetExtendedAgentCard.
acp
Package acp implements the server (agent) side of the Agent Client Protocol v1 (agentclientprotocol.com): a session-based, stdio JSON-RPC 2.0 protocol that lets editors and agent harnesses drive an agent.
Package acp implements the server (agent) side of the Agent Client Protocol v1 (agentclientprotocol.com): a session-based, stdio JSON-RPC 2.0 protocol that lets editors and agent harnesses drive an agent.
backoff
Package backoff holds the retry-delay policies shared by the outbox relay, the queue and webhook batteries, and the log webhook sink.
Package backoff holds the retry-delay policies shared by the outbox relay, the queue and webhook batteries, and the log webhook sink.
config
Package config provides a first-class configuration loader that binds environment variables, config files, and secret sources into typed Go structs with validation.
Package config provides a first-class configuration loader that binds environment variables, config files, and secret sources into typed Go structs with validation.
datexport
Package datexport is a process-wide registry of data-bearing tables that live OUTSIDE the framework entity registry, the physical tables a battery (auth sessions, the job queue, …) or an app creates with raw DDL.
Package datexport is a process-wide registry of data-bearing tables that live OUTSIDE the framework entity registry, the physical tables a battery (auth sessions, the job queue, …) or an app creates with raw DDL.
dotenv
Package dotenv parses .env files into a map and (optionally) applies them to the process environment.
Package dotenv parses .env files into a map and (optionally) applies them to the process environment.
fanout
Package fanout carries real-time messages between replicas.
Package fanout carries real-time messages between replicas.
featureflag
Package featureflag is a minimal feature-flag primitive for GoFastr apps.
Package featureflag is a minimal feature-flag primitive for GoFastr apps.
fuzzy
Package fuzzy holds small string-similarity helpers shared across the codebase.
Package fuzzy holds small string-similarity helpers shared across the codebase.
handler
Package handler is part of the GoFastr framework.
Package handler is part of the GoFastr framework.
i18n
Package i18n is a small internationalization primitive for GoFastr apps: locale negotiation from `Accept-Language`, JSON-backed message catalogs with `{{placeholder}}` interpolation, and CLDR plural categories (zero / one / two / few / many / other) for every language, through golang.org/x/text.
Package i18n is a small internationalization primitive for GoFastr apps: locale negotiation from `Accept-Language`, JSON-backed message catalogs with `{{placeholder}}` interpolation, and CLDR plural categories (zero / one / two / few / many / other) for every language, through golang.org/x/text.
i18n/internal/cldrgen command
Command cldrgen writes core/i18n's CLDR table (cldr_tables.gen.go) from the Unicode CLDR JSON release named by cldrVersion: for every locale CLDR rates "modern", its date and time patterns, month, weekday, era and day-period names, the flexible day periods a "B" pattern reads, GMT formats, list patterns, number symbols and patterns, and its cardinal plural rules; plus the plural rules of the languages CLDR has rules for but no modern locale.
Command cldrgen writes core/i18n's CLDR table (cldr_tables.gen.go) from the Unicode CLDR JSON release named by cldrVersion: for every locale CLDR rates "modern", its date and time patterns, month, weekday, era and day-period names, the flexible day periods a "B" pattern reads, GMT formats, list patterns, number symbols and patterns, and its cardinal plural rules; plus the plural rules of the languages CLDR has rules for but no modern locale.
jcs
Package jcs implements RFC 8785 (JSON Canonicalization Scheme) using only the Go standard library.
Package jcs implements RFC 8785 (JSON Canonicalization Scheme) using only the Go standard library.
markdown
Package markdown is a small, dependency-free Markdown renderer.
Package markdown is a small, dependency-free Markdown renderer.
mcp
check-csp:ignore-file
check-csp:ignore-file
middleware
Package middleware is part of the GoFastr framework.
Package middleware is part of the GoFastr framework.
migrate
Package migrate is a versioned SQL migration runner with optional per-group migration streams.
Package migrate is a versioned SQL migration runner with optional per-group migration streams.
moduleproto
Package moduleproto implements the wire protocol between the GoFastr host process and an out-of-process third-party module, as specified by issue #37 (design §4).
Package moduleproto implements the wire protocol between the GoFastr host process and an out-of-process third-party module, as specified by issue #37 (design §4).
netguard
Package netguard holds the one definition of "this address is internal" that every outbound-fetch surface checks against.
Package netguard holds the one definition of "this address is internal" that every outbound-fetch surface checks against.
openapi
Package openapi is part of the GoFastr framework.
Package openapi is part of the GoFastr framework.
query
Package query is part of the GoFastr framework.
Package query is part of the GoFastr framework.
render
Package render is part of the GoFastr framework.
Package render is part of the GoFastr framework.
router
Package router is part of the GoFastr framework.
Package router is part of the GoFastr framework.
schema
Package schema is part of the GoFastr framework.
Package schema is part of the GoFastr framework.
settings
Package settings reads gofastr.settings.yml, the one committed file that holds a project's gofastr configuration.
Package settings reads gofastr.settings.yml, the one committed file that holds a project's gofastr configuration.
static
Package static is part of the GoFastr framework.
Package static is part of the GoFastr framework.
stream
Package stream is part of the GoFastr framework.
Package stream is part of the GoFastr framework.
textsafe
Package textsafe holds the one predicate for the characters that forge, reorder, or hide text: the C1 control block and the zero-width / bidi "invisible" set.
Package textsafe holds the one predicate for the characters that forge, reorder, or hide text: the C1 control block and the zero-width / bidi "invisible" set.
tracing
Package tracing records OpenTelemetry client spans for the calls an app makes outward: SQL statements through a wrapped database/sql driver, and HTTP requests through a wrapped RoundTripper.
Package tracing records OpenTelemetry client spans for the calls an app makes outward: SQL statements through a wrapped database/sql driver, and HTTP requests through a wrapped RoundTripper.
unmounted
Package unmounted is the running app's record of the framework packages it carries as unmounted copies.
Package unmounted is the running app's record of the framework packages it carries as unmounted copies.
upload
Package upload is part of the GoFastr framework.
Package upload is part of the GoFastr framework.
webbotauth
Package webbotauth verifies inbound Web Bot Auth requests: RFC 9421 HTTP Message Signatures under the profile of draft-meunier-webbotauth-httpsig-protocol-02 (18 August 2026), the IETF Web Bot Auth working-group draft.
Package webbotauth verifies inbound Web Bot Auth requests: RFC 9421 HTTP Message Signatures under the profile of draft-meunier-webbotauth-httpsig-protocol-02 (18 August 2026), the IETF Web Bot Auth working-group draft.
core-ui
app
Package app is the URL → rendered page pipeline for GoFastr UI.
Package app is the URL → rendered page pipeline for GoFastr UI.
app/decide
Package decide provides the constructors for app.Decision values returned from Policy.Decide implementations.
Package decide provides the constructors for app.Decision values returned from Policy.Decide implementations.
check
Package check provides an AST-based linter for .ui.go files.
Package check provides an AST-based linter for .ui.go files.
component
Package component defines the component model for GoFastr's core-ui framework.
Package component defines the component model for GoFastr's core-ui framework.
compute
Package compute registers content-addressed Web Worker and WebAssembly assets for GoFastr applications.
Package compute registers content-addressed Web Worker and WebAssembly assets for GoFastr applications.
di
html
Package html provides semantic, ADA-compliant HTML element primitives for the GoFastr core-ui framework.
Package html provides semantic, ADA-compliant HTML element primitives for the GoFastr core-ui framework.
interactive
Package interactive provides declarative interactivity primitives for GoFastr components.
Package interactive provides declarative interactivity primitives for GoFastr components.
island
Package island is the runtime-side manager for server-driven SSE updates.
Package island is the runtime-side manager for server-driven SSE updates.
localdb
Package localdb declares browser-side IndexedDB databases in Go.
Package localdb declares browser-side IndexedDB databases in Go.
node
Package node is the JSON-clean UI element tree, the serializable description of a screen that renders to HTML via core-ui/noderender.
Package node is the JSON-clean UI element tree, the serializable description of a screen that renders to HTML via core-ui/noderender.
ownstyle
Package ownstyle compiles, checks and registers owned stylesheets: the .style.css files a layout, screen, component or app owns (design doc: "Owned styles", v0.86.0).
Package ownstyle compiles, checks and registers owned stylesheets: the .style.css files a layout, screen, component or app owns (design doc: "Owned styles", v0.86.0).
registry
Package registry is the process-global catalog of components whose CSS is shipped as real stylesheets and loaded on demand by the runtime.
Package registry is the process-global catalog of components whose CSS is shipped as real stylesheets and loaded on demand by the runtime.
runtime
Package runtime provides the GoFastr client-side JavaScript runtime as an embedded resource.
Package runtime provides the GoFastr client-side JavaScript runtime as an embedded resource.
runtime/internal/treegate
Package treegate holds the core-ui/runtime gates that read the repo tree: attribute parity against core-ui/ARCHITECTURE.md, and every registered behaviour's source and size budget.
Package treegate holds the core-ui/runtime gates that read the repo tree: attribute parity against core-ui/ARCHITECTURE.md, and every registered behaviour's source and size budget.
runtime/minify
Package minify implements a token-aware JavaScript minifier used to shrink the embedded runtime sources before they're served.
Package minify implements a token-aware JavaScript minifier used to shrink the embedded runtime sources before they're served.
seo
Package seo provides typed Schema.org structs that marshal to the JSON-LD shape Google and other crawlers consume for rich results (FAQ snippets, product cards, breadcrumb trails, article cards).
Package seo provides typed Schema.org structs that marshal to the JSON-LD shape Google and other crawlers consume for rich results (FAQ snippets, product cards, breadcrumb trails, article cards).
store
Package store is a typed, server-declared shared-state primitive for the GoFastr UI.
Package store is a typed, server-declared shared-state primitive for the GoFastr UI.
style
Package style provides the typed design system and CSS builders for the GoFastr core-ui framework.
Package style provides the typed design system and CSS builders for the GoFastr core-ui framework.
uinodev1
Package uinodev1 implements the closed ui.node.v1 wire type and validator for process-isolated third-party modules (design §9, issue #37).
Package uinodev1 implements the closed ui.node.v1 wire type and validator for process-isolated third-party modules (design §9, issue #37).
urlprefix
Package urlprefix puts a path prefix in front of the root-relative URLs a response carries.
Package urlprefix puts a path prefix in front of the root-relative URLs a response carries.
urlsafe
Package urlsafe holds the one URL-scheme allow-list every surface that renders a caller-supplied URL runs through.
Package urlsafe holds the one URL-scheme allow-list every surface that renders a caller-supplied URL runs through.
widget
Package widget provides the framework's overlay-UI primitive.
Package widget provides the framework's overlay-UI primitive.
widget/preset
Package preset bundles the most common widget surfaces as opinionated builders on top of widget.Definition.
Package preset bundles the most common widget surfaces as opinionated builders on top of widget.Definition.
widget/theme
Package theme provides the framework's default page theme, the visual identity for any app built via core-ui (or its consumers like kiln).
Package theme provides the framework's default page theme, the visual identity for any app built via core-ui (or its consumers like kiln).
evals
dev-loop/cmd/devloop-eval command
Command devloop-eval runs the dev-loop eval: does a coding agent in a fresh GoFastr scaffold develop under `gofastr dev`? See evals/dev-loop/README.md.
Command devloop-eval runs the dev-loop eval: does a coding agent in a fresh GoFastr scaffold develop under `gofastr dev`? See evals/dev-loop/README.md.
dev-loop/internal/devloop
Package devloop measures whether a coding agent, dropped into a fresh GoFastr scaffold with an edit-and-check task, develops under `gofastr dev` (rebuild on save, browser reload) or falls back to `go run .` / a hand-launched binary and restarts after every edit.
Package devloop measures whether a coding agent, dropped into a fresh GoFastr scaffold with an edit-and-check task, develops under `gofastr dev` (rebuild on save, browser reload) or falls back to `go run .` / a hand-launched binary and restarts after every edit.
internal/childenv
Package childenv decides what environment an agent-driven child process may see.
Package childenv decides what environment an agent-driven child process may see.
upgrade-fixtures/fixtures/_shape-zoo.after/kitx
Package kitx renames kit types for the app.
Package kitx renames kit types for the app.
upgrade-fixtures/fixtures/_shape-zoo.after/store
Package store implements middleware.IdempotencyStore without importing core/middleware: the response type arrives through the kitx alias.
Package store implements middleware.IdempotencyStore without importing core/middleware: the response type arrives through the kitx alias.
upgrade-fixtures/fixtures/_shape-zoo.after/tools/banner
Package banner lives in a nested module the root ./...
Package banner lives in a nested module the root ./...
examples
acme-site command
Package main is Acme Tracker's public face: the product's marketing site and help center, built from the layout primitive exactly the way docs/DESIGN-layout-outlets.md's "Ready-made layouts" section draws the site and docs shapes — real pages, real copy, no lab fixtures.
Package main is Acme Tracker's public face: the product's marketing site and help center, built from the layout primitive exactly the way docs/DESIGN-layout-outlets.md's "Ready-made layouts" section draws the site and docs shapes — real pages, real copy, no lab fixtures.
acme-site/helpdocs
Package helpdocs is acme-site's help center page: the article nav on the left, the article in the middle, the table of contents on the right, and a previous/next pager under the article.
Package helpdocs is acme-site's help center page: the article nav on the left, the article in the middle, the table of contents on the right, and a previous/next pager under the article.
acme-site/sitefooter
Package sitefooter is acme-site's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in sitefooter.style.css (an owned style; `gofastr gen styles` writes the class methods in sitefooter_style.gen.go), and every dimension a theme token.
Package sitefooter is acme-site's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in sitefooter.style.css (an owned style; `gofastr gen styles` writes the class methods in sitefooter_style.gen.go), and every dimension a theme token.
acme-site/siteheader
Package siteheader is acme-site's top bar, built the way an app builds any piece of chrome the framework does not ship:
Package siteheader is acme-site's top bar, built the way an app builds any piece of chrome the framework does not ship:
api-tour command
Package main is a tour of the v2 API surface added to the framework:
Package main is a tour of the v2 API surface added to the framework:
backoffice command
Command backoffice is a minimal example of battery/admin rendered through a UI host: a few entities, a (demo-grade) login, and admin.New(...) drawing the whole back office with defaults.
Command backoffice is a minimal example of battery/admin rendered through a UI host: a few entities, a (demo-grade) login, and admin.New(...) drawing the whole back office with defaults.
blog command
desktop-focus command
Command desktop-focus is the desktop battery's feature-complete dogfood app: a local-first pomodoro timer that exercises the whole battery/desktop surface (unified-chrome main window over the sidebar material, floating widget, settings window, tray countdown, notifications, deep links, cross-window messages, a plugin capability, the updater) and runs unchanged over plain HTTP behind --serve / --addr / $PORT.
Command desktop-focus is the desktop battery's feature-complete dogfood app: a local-first pomodoro timer that exercises the whole battery/desktop surface (unified-chrome main window over the sidebar material, floating widget, settings window, tray countdown, notifications, deep links, cross-window messages, a plugin capability, the updater) and runs unchanged over plain HTTP behind --serve / --addr / $PORT.
desktop-notes command
Command desktop-notes is the desktop battery's dogfood app: a local-first notes app that runs unchanged inside the OS WebView (desktop.New + Run) or over plain HTTP behind --serve / $PORT.
Command desktop-notes is the desktop battery's dogfood app: a local-first notes app that runs unchanged inside the OS WebView (desktop.New + Run) or over plain HTTP behind --serve / $PORT.
ecommerce
Package ecommerce is GoFastr's declaration-driven flagship example: a complete storefront: five related entities, screens, navigation, custom endpoints, seed data, and a theme, declared once in gofastr.yml and emitted as runnable Go by the CLI:
Package ecommerce is GoFastr's declaration-driven flagship example: a complete storefront: five related entities, screens, navigation, custom endpoints, seed data, and a theme, declared once in gofastr.yml and emitted as runnable Go by the CLI:
ecommerce/app command
embed-demo command
Package main demonstrates embeddable surfaces: a GoFastr app handing out a piece of itself to a website it does not control.
Package main demonstrates embeddable surfaces: a GoFastr app handing out a piece of itself to a website it does not control.
gofastr-runs command
Command gofastr-runs lists every gofastr app running on this machine, from the local run records each App writes when its port opens (framework/localrun), and serves that list to agents over MCP.
Command gofastr-runs lists every gofastr app running on this machine, from the local run records each App writes when its port opens (framework/localrun), and serves that list to agents over MCP.
hn command
Package main is a Hacker News reader in the HNPWA shape: the same app many frameworks have built, so their first loads can be compared on the same pages.
Package main is a Hacker News reader in the HNPWA shape: the same app many frameworks have built, so their first loads can be compared on the same pages.
hn/hnheader
Package hnheader is the reader's top bar: the name and the section links on one strip in the theme's primary colour.
Package hnheader is the reader's top bar: the name and the section links on one strip in the theme's primary colour.
layoutlab command
Package main is layoutlab, the demo app for the tree-layout outlets prototype.
Package main is layoutlab, the demo app for the tree-layout outlets prototype.
meridian command
Package main is Meridian, the GoFastr flagship demo, and the design-system completeness canary (CLAUDE.md hard rule 9).
Package main is Meridian, the GoFastr flagship demo, and the design-system completeness canary (CLAUDE.md hard rule 9).
meridian/cmd/meridian command
meridian is a terminal client for your app's HTTP API, generated by `gofastr generate cli` from the current entity set.
meridian is a terminal client for your app's HTTP API, generated by `gofastr generate cli` from the current entity set.
meridian/sitefooter
Package sitefooter is Meridian's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in meridian-sitefooter.style.css (an owned style; `gofastr gen styles` writes the class methods in meridian-sitefooter_style.gen.go), and every dimension a theme token.
Package sitefooter is Meridian's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in meridian-sitefooter.style.css (an owned style; `gofastr gen styles` writes the class methods in meridian-sitefooter_style.gen.go), and every dimension a theme token.
meridian/siteheader
Package siteheader is Meridian's top bar, built the way an app builds any piece of chrome the framework does not ship:
Package siteheader is Meridian's top bar, built the way an app builds any piece of chrome the framework does not ship:
processmodule-demo command
Package main is the processmodule-demo: a minimal but real third-party module that speaks the moduleproto protocol over stdio.
Package main is the processmodule-demo: a minimal but real third-party module that speaks the moduleproto protocol over stdio.
processmodule-demo/host command
Command host is the processmodule-demo's host app.
Command host is the processmodule-demo's host app.
processmodule-demo/surface
Package surface holds the parts of the processmodule-demo's surface that the module and its host both need byte-for-byte: the MCP tool the module lists, whose digest the host pins in the descriptor.
Package surface holds the parts of the processmodule-demo's surface that the module and its host both need byte-for-byte: the MCP tool the module lists, whose digest the host pins in the descriptor.
rtc-call command
Package main is the dogfood example for battery/rtc: anonymous users, rooms by name, camera and microphone peer to peer, chat over a negotiated data channel.
Package main is the dogfood example for battery/rtc: anonymous users, rooms by name, camera and microphone peer to peer, chat over a negotiated data channel.
rtc-call/siteheader
Package siteheader is rtc-call's top bar, built the way an app builds any piece of chrome the framework does not ship:
Package siteheader is rtc-call's top bar, built the way an app builds any piece of chrome the framework does not ship:
semantic-demo command
Package main is a minimal demonstration of the battery/semantic package.
Package main is a minimal demonstration of the battery/semantic package.
site command
site/docpage
Package docpage is the GoFastr site's article shell: the section nav on the left, the article in the middle, with breadcrumbs above the body and a previous/next pager under it, and an optional rail on the right.
Package docpage is the GoFastr site's article shell: the section nav on the left, the article in the middle, with breadcrumbs above the body and a previous/next pager under it, and an optional rail on the right.
site/sitefooter
Package sitefooter is the GoFastr site's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in docsite-footer.style.css (an owned style; `gofastr gen styles` writes the class methods in docsite-footer_style.gen.go), and every dimension a theme token — the wider spacing step (64px) this page's rhythm needs is docsite-footer.tokens.css's --spacing-section, and the grid sits at the site's wide cap (--size-wide-width, 1240px), the same measure the header and page sections align to.
Package sitefooter is the GoFastr site's colophon, built the way siteheader builds the top bar: plain html elements composed here, the look in docsite-footer.style.css (an owned style; `gofastr gen styles` writes the class methods in docsite-footer_style.gen.go), and every dimension a theme token — the wider spacing step (64px) this page's rhythm needs is docsite-footer.tokens.css's --spacing-section, and the grid sits at the site's wide cap (--size-wide-width, 1240px), the same measure the header and page sections align to.
site/siteheader
Package siteheader is the GoFastr site's top bar, built the way an app builds any piece of chrome the framework does not ship:
Package siteheader is the GoFastr site's top bar, built the way an app builds any piece of chrome the framework does not ship:
spa command
static-site command
team-builder command
Package main is the dogfood example for core-ui/localdb and framework/localentity: a Pokémon team builder whose team lives in the visitor's browser.
Package main is the dogfood example for core-ui/localdb and framework/localentity: a Pokémon team builder whose team lives in the visitor's browser.
tracker command
Package main is Acme Tracker, the layout showcase as a real app: a small issue tracker built only from the framework's components and typed theme, where every tree-layout feature appears as ordinary product behaviour — no outlined boxes, no marker strings.
Package main is Acme Tracker, the layout showcase as a real app: a small issue tracker built only from the framework's components and typed theme, where every tree-layout feature appears as ordinary product behaviour — no outlined boxes, no marker strings.
tracker/appbar
Package appbar is the tracker's application bar, built the way an app builds any piece of chrome the framework does not ship:
Package appbar is the tracker's application bar, built the way an app builds any piece of chrome the framework does not ship:
webmcp-remote-assist command
Package main is the reference example for authenticated WebMCP plus WebRTC remote support: one Go binary, one origin, two roles.
Package main is the reference example for authenticated WebMCP plus WebRTC remote support: one Go binary, one origin, two roles.
webmcp-remote-assist/siteheader
Package siteheader is remote assist's top bar, built the way an app builds any piece of chrome the framework does not ship:
Package siteheader is remote assist's top bar, built the way an app builds any piece of chrome the framework does not ship:
Package framework is the public surface of the GoFastr framework.
Package framework is the public surface of the GoFastr framework.
agentsinv
Package agentsinv is a process-wide registry of agent-onboarding snippets contributed by batteries and the framework root.
Package agentsinv is a process-wide registry of agent-onboarding snippets contributed by batteries and the framework root.
axecov
Package axecov is the axe-coverage manifest shared between the axe test harness and strict mode.
Package axecov is the axe-coverage manifest shared between the axe test harness and strict mode.
contracts
Package contracts is GoFastr's semantic analysis layer: the rules that say whether a codebase is a *good GoFastr application*, not merely a compiling one.
Package contracts is GoFastr's semantic analysis layer: the rules that say whether a codebase is a *good GoFastr application*, not merely a compiling one.
contracts/analyzers
Package analyzers holds every detector behind `gofastr verify`.
Package analyzers holds every detector behind `gofastr verify`.
contracts/internal/codetext
Package codetext separates comments from code in Go and JavaScript source for the contracts text rules.
Package codetext separates comments from code in Go and JavaScript source for the contracts text rules.
contracts/internal/docgate
Package docgate holds the check that README.md and CHANGELOG.md state the contract catalog's rule count.
Package docgate holds the check that README.md and CHANGELOG.md state the contract catalog's rule count.
db
Package db holds shared low-level database abstractions used across the GoFastr framework subpackages.
Package db holds shared low-level database abstractions used across the GoFastr framework subpackages.
dev
Package dev provides dev-mode-only helpers (livereload, debug surfaces).
Package dev provides dev-mode-only helpers (livereload, debug surfaces).
docs
Package docs ships the framework's user-facing markdown docs as an embedded filesystem.
Package docs ships the framework's user-facing markdown docs as an embedded filesystem.
docs/mcptools
Package mcptools serves the framework's embedded documentation over MCP: framework_docs_list, framework_docs_get and framework_docs_search, so an agent connected to a running app can answer "how do I use hooks" without leaving the session.
Package mcptools serves the framework's embedded documentation over MCP: framework_docs_list, framework_docs_get and framework_docs_search, so an agent connected to a running app can answer "how do I use hooks" without leaving the session.
dsl
embed
Package embed lets a GoFastr app hand out pieces of itself.
Package embed lets a GoFastr app hand out pieces of itself.
entityui
Package entityui draws an entity's list and record screens from its schema, its Display config and its States, for generated apps and the admin alike.
Package entityui draws an entity's list and record screens from its schema, its Display config and its States, for generated apps and the admin alike.
experimental/apiversions
Package apiversions provides first-class API versioning built on top of route groups.
Package apiversions provides first-class API versioning built on top of route groups.
experimental/harness
Package harness is part of the GoFastr harness.
Package harness is part of the GoFastr harness.
experimental/harness/client/tui
Package tui is part of the GoFastr harness.
Package tui is part of the GoFastr harness.
experimental/harness/client/web
Package web is part of the GoFastr harness.
Package web is part of the GoFastr harness.
experimental/harness/context
Package context is part of the GoFastr harness.
Package context is part of the GoFastr harness.
experimental/harness/control
Package control is part of the GoFastr harness.
Package control is part of the GoFastr harness.
experimental/harness/control/auth
Package auth implements the capability-token model: claim set, internal JWT-like encoding (no third-party dep), revocation list, and the issuance flow with TTY/notification confirmation.
Package auth implements the capability-token model: claim set, internal JWT-like encoding (no third-party dep), revocation list, and the issuance flow with TTY/notification confirmation.
experimental/harness/control/inproc
Package inproc is part of the GoFastr harness.
Package inproc is part of the GoFastr harness.
experimental/harness/control/mcpserver
Package mcpserver will expose the harness engine as an MCP server.
Package mcpserver will expose the harness engine as an MCP server.
experimental/harness/control/multiplex
Package multiplex is part of the GoFastr harness.
Package multiplex is part of the GoFastr harness.
experimental/harness/control/resources
Package resources is part of the GoFastr harness.
Package resources is part of the GoFastr harness.
experimental/harness/control/rest
Package rest is part of the GoFastr harness.
Package rest is part of the GoFastr harness.
experimental/harness/control/ws
Package ws implements the WebSocket transport for the control plane.
Package ws implements the WebSocket transport for the control plane.
experimental/harness/engine
Package engine is part of the GoFastr harness.
Package engine is part of the GoFastr harness.
experimental/harness/hook
Package hook is part of the GoFastr harness.
Package hook is part of the GoFastr harness.
experimental/harness/ids
Package ids is part of the GoFastr harness.
Package ids is part of the GoFastr harness.
experimental/harness/internal/clock
Package clock provides a swap-able clock for tests.
Package clock provides a swap-able clock for tests.
experimental/harness/internal/jsonredact
Package jsonredact runs a text redactor over the string values of a JSON document.
Package jsonredact runs a text redactor over the string values of a JSON document.
experimental/harness/internal/ulid
Package ulid is part of the GoFastr harness.
Package ulid is part of the GoFastr harness.
experimental/harness/logging
Package logging is part of the GoFastr harness.
Package logging is part of the GoFastr harness.
experimental/harness/mcpclient
Package mcpclient implements the MCP client (consumer side) the harness uses to talk to external MCP servers.
Package mcpclient implements the MCP client (consumer side) the harness uses to talk to external MCP servers.
experimental/harness/memory
Package memory is part of the GoFastr harness.
Package memory is part of the GoFastr harness.
experimental/harness/profile
Package profile is part of the GoFastr harness.
Package profile is part of the GoFastr harness.
experimental/harness/provider
Package provider is part of the GoFastr harness.
Package provider is part of the GoFastr harness.
experimental/harness/provider/credstore
Package credstore implements credential storage.
Package credstore implements credential storage.
experimental/harness/provider/helper
Package helper is part of the GoFastr harness.
Package helper is part of the GoFastr harness.
experimental/harness/provider/internal/openai
Package openai is an internal OpenAI-compatible adapter used by the OpenRouter and ZAI providers (both speak the same wire shape).
Package openai is an internal OpenAI-compatible adapter used by the OpenRouter and ZAI providers (both speak the same wire shape).
experimental/harness/provider/openrouter
Package openrouter is part of the GoFastr harness.
Package openrouter is part of the GoFastr harness.
experimental/harness/provider/providertest
Package providertest contains shared checks for provider adapters.
Package providertest contains shared checks for provider adapters.
experimental/harness/provider/zai
Package zai is part of the GoFastr harness.
Package zai is part of the GoFastr harness.
experimental/harness/secrets
Package secrets locates and loads the repo-local .harness-secrets/env file.
Package secrets locates and loads the repo-local .harness-secrets/env file.
experimental/harness/session
Package session is part of the GoFastr harness.
Package session is part of the GoFastr harness.
experimental/harness/session/sqlite
Package sqlite is part of the GoFastr harness.
Package sqlite is part of the GoFastr harness.
experimental/harness/skill
Package skill is part of the GoFastr harness.
Package skill is part of the GoFastr harness.
experimental/harness/skill/skillmd
Package skillmd is part of the GoFastr harness.
Package skillmd is part of the GoFastr harness.
experimental/harness/slash
Package slash is part of the GoFastr harness.
Package slash is part of the GoFastr harness.
experimental/harness/tool
Package tool is part of the GoFastr harness.
Package tool is part of the GoFastr harness.
experimental/harness/tool/builtins
Package builtins is part of the GoFastr harness.
Package builtins is part of the GoFastr harness.
experimental/harness/tool/permission
Package permission is part of the GoFastr harness.
Package permission is part of the GoFastr harness.
experimental/harness/tracing
Package tracing is part of the GoFastr harness.
Package tracing is part of the GoFastr harness.
experimental/webmcp
Package webmcp exposes an app's server-declared tools to in-browser AI agents through the WebMCP proposal (navigator.modelContext).
Package webmcp exposes an app's server-declared tools to in-browser AI agents through the WebMCP proposal (navigator.modelContext).
factory
Package factory provides Rails-style fixture / factory helpers for GoFastr tests and dev-time seeders.
Package factory provides Rails-style fixture / factory helpers for GoFastr tests and dev-time seeders.
fanout
Package fanout provides a Postgres-backed implementation of core/fanout.Fanout using LISTEN/NOTIFY.
Package fanout provides a Postgres-backed implementation of core/fanout.Fanout using LISTEN/NOTIFY.
gallery
Package gallery ships the importable component catalog that powers the /components showcase on the docs site (examples/site) and any other tool that needs to render every design-system component against an arbitrary theme, most notably the theme-configuration tool that will live inside the gofastr CLI binary (cmd/gofastr), which cannot import examples/.
Package gallery ships the importable component catalog that powers the /components showcase on the docs site (examples/site) and any other tool that needs to render every design-system component against an arbitrary theme, most notably the theme-configuration tool that will live inside the gofastr CLI binary (cmd/gofastr), which cannot import examples/.
headless
Package headless is the structure and accessibility half of a design system: the tags, the roles, the labelling relationships, the state attributes and the hooks a runtime binds to.
Package headless is the structure and accessibility half of a design system: the tags, the roles, the labelling relationships, the state attributes and the hooks a runtime binds to.
i18nui
Package i18nui holds the phrases framework UI surfaces show: the pagination, table, form, dialog and widget words, the entity screens' chrome and the admin's.
Package i18nui holds the phrases framework UI surfaces show: the pagination, table, form, dialog and widget words, the entity screens' chrome and the admin's.
image
Package image is a chainable image pipeline: decode → transform → encode, pure Go with only the standard library and golang.org/x/image as dependencies.
Package image is a chainable image pipeline: decode → transform → encode, pure Go with only the standard library and golang.org/x/image as dependencies.
image/internal/vp8l
Package vp8l implements a pure-Go VP8L (WebP lossless) encoder.
Package vp8l implements a pure-Go VP8L (WebP lossless) encoder.
imagefield
Package imagefield connects the image pipeline to the upload path: it turns a framework/image.VariantSet into the file.ImageDeriver that ProcessFileField and the CRUD upload handler call, so declaring a schema.Image field is what makes uploads produce renditions and a BlurHash, no per-entity upload handler.
Package imagefield connects the image pipeline to the upload path: it turns a framework/image.VariantSet into the file.ImageDeriver that ProcessFileField and the CRUD upload handler call, so declaring a schema.Image field is what makes uploads produce renditions and a BlurHash, no per-entity upload handler.
internal/casing
Package casing holds snake_case <-> camelCase helpers used internally by the GoFastr framework.
Package casing holds snake_case <-> camelCase helpers used internally by the GoFastr framework.
internal/exif
Package exif holds the leaf EXIF readers shared by the framework's image-adjacent packages.
Package exif holds the leaf EXIF readers shared by the framework's image-adjacent packages.
internal/jpegcost
Package jpegcost estimates what image/jpeg will allocate for a JPEG from its header bytes alone, before any pixel is decoded.
Package jpegcost estimates what image/jpeg will allocate for a JPEG from its header bytes alone, before any pixel is decoded.
internal/jpegtest
Package jpegtest builds hostile JPEG fixtures for the tests of the framework's image-adjacent packages (framework/image and framework/file).
Package jpegtest builds hostile JPEG fixtures for the tests of the framework's image-adjacent packages (framework/image and framework/file).
internal/testdb
Package testdb provides shared per-test database helpers used by the framework's internal tests AND by framework_test (external) tests that can't access package-private helpers.
Package testdb provides shared per-test database helpers used by the framework's internal tests AND by framework_test (external) tests that can't access package-private helpers.
isolation
Package isolation resolves worktree-specific local runtime resources.
Package isolation resolves worktree-specific local runtime resources.
lifecycle
Package lifecycle provides a documented, cooperative graceful-shutdown contract for GoFastr applications.
Package lifecycle provides a documented, cooperative graceful-shutdown contract for GoFastr applications.
localapp
Package localapp is the local state of an app that runs for one OS user on one device, with no server of its own to sign people in: a desktop window (battery/desktop), a phone app serving itself in process (gofastr-mobile), a signed-in service on the user's machine.
Package localapp is the local state of an app that runs for one OS user on one device, with no server of its own to sign people in: a desktop window (battery/desktop), a phone app serving itself in process (gofastr-mobile), a signed-in service on the user's machine.
localentity
Package localentity declares records that live in the visitor's browser and renders the forms and lists that edit them, with no server table and no JavaScript in the app.
Package localentity declares records that live in the visitor's browser and renders the forms and lists that edit them, with no server table and no JavaScript in the app.
localrun
Package localrun is the machine-local registry of running gofastr apps.
Package localrun is the machine-local registry of running gofastr apps.
outbox
Package outbox implements a transactional outbox for reliable event delivery to declared durable consumers.
Package outbox implements a transactional outbox for reliable event delivery to declared durable consumers.
owner
Package owner provides a single seam for "who owns this row" lookups during CRUD operations.
Package owner provides a single seam for "who owns this row" lookups during CRUD operations.
pluginhost
Package pluginhost is the reusable, plugin-agnostic host glue for GoFastr heavy-JS plugins that run inside an opaque-origin sandboxed iframe.
Package pluginhost is the reusable, plugin-agnostic host glue for GoFastr heavy-JS plugins that run inside an opaque-origin sandboxed iframe.
processmoduletest
Package processmoduletest holds the process-module supervisor and gate e2e suites that used to live in the framework root test package.
Package processmoduletest holds the process-module supervisor and gate e2e suites that used to live in the framework root test package.
ratelimit
Package ratelimit is the framework's general-purpose HTTP rate limiter.
Package ratelimit is the framework's general-purpose HTTP rate limiter.
routegroup
Package routegroup provides the App-level route group abstraction.
Package routegroup provides the App-level route group abstraction.
sdk
Package sdk is the shared contract between `gofastr generate sdk` (which emits client SDKs and packs the downloadable artifacts) and the serving side (framework/sdkdocs, which hosts them).
Package sdk is the shared contract between `gofastr generate sdk` (which emits client SDKs and packs the downloadable artifacts) and the serving side (framework/sdkdocs, which hosts them).
sdkdocs
Package sdkdocs serves a public SDK documentation site for a GoFastr app: install guides, a live per-entity API reference, auth and error guides, plus download routes for the pregenerated SDK artifacts that `gofastr generate sdk` emits (see framework/sdk for the shared contract).
Package sdkdocs serves a public SDK documentation site for a GoFastr app: install guides, a live per-entity API reference, auth and error guides, plus download routes for the pregenerated SDK artifacts that `gofastr generate sdk` emits (see framework/sdk for the shared contract).
sdkdocs/internal/docpage
Package docpage is the SDK reference's docs page: the section menu rail, the article column, and an optional contents rail, collapsing to one column on phones.
Package docpage is the SDK reference's docs page: the section menu rail, the article column, and an optional contents rail, collapsing to one column on phones.
semcov
Package semcov is the semantic-coverage manifest: a record of what a test run actually exercised, as opposed to which lines it happened to execute.
Package semcov is the semantic-coverage manifest: a record of what a test run actually exercised, as opposed to which lines it happened to execute.
static
Package static implements static-site generation for a framework.App with a UIHost mounted on it.
Package static implements static-site generation for a framework.App with a UIHost mounted on it.
testkit
Package testkit provides PUBLIC test helpers for host apps that use the GoFastr framework.
Package testkit provides PUBLIC test helpers for host apps that use the GoFastr framework.
testkit/axetest
Package axetest is the axe-core accessibility-testing harness for GoFastr apps, host applications and the framework's own chromedp suites alike.
Package axetest is the axe-core accessibility-testing harness for GoFastr apps, host applications and the framework's own chromedp suites alike.
testkit/cssweight
Package cssweight measures the CSS a GoFastr page makes the browser fetch or parse: every <style> element in the document and every <link rel="stylesheet"> it names, fetched once each.
Package cssweight measures the CSS a GoFastr page makes the browser fetch or parse: every <style> element in the document and every <link rel="stylesheet"> it names, fetched once each.
testkit/nojstest
Package nojstest checks that a GoFastr page still works with JavaScript turned off: the server's HTML alone carries the content, the navigation and the forms, and the runtime only enhances them.
Package nojstest checks that a GoFastr page still works with JavaScript turned off: the server's HTML alone carries the content, the navigation and the forms, and the runtime only enhances them.
ui
Package ui is the framework's opinionated component layer on top of core-ui.
Package ui is the framework's opinionated component layer on top of core-ui.
ui/icons
Package icons exposes vendored Feather and Lucide outline icons.
Package icons exposes vendored Feather and Lucide outline icons.
ui/icons/internal/generate command
Command generate validates the source SVGs and writes the Go icon catalog.
Command generate validates the source SVGs and writes the Go icon catalog.
ui/internal/treegate
Package treegate holds the framework/ui gates that read outside the package: the removed-alias token scan over every tree that ships the design system or uses it, and the component inventory checks against doc.go and framework/docs/content/ui-new-components.md.
Package treegate holds the framework/ui gates that read outside the package: the removed-alias token scan over every tree that ships the design system or uses it, and the component inventory checks against doc.go and framework/docs/content/ui-new-components.md.
ui/theme
Package theme is the canonical home for the framework's visual design system.
Package theme is the canonical home for the framework's visual design system.
uie2e
Package uie2e holds the chromedp browser e2e suite that used to live in the framework root test package.
Package uie2e holds the chromedp browser e2e suite that used to live in the framework root test package.
uihost
Package uihost wires a core-ui application onto a framework.App's router.
Package uihost wires a core-ui application onto a framework.App's router.
uihost/internal/sessiontoken
Package sessiontoken mints and verifies the stateless HMAC-signed tokens that replace the uihost's in-memory session map.
Package sessiontoken mints and verifies the stateless HMAC-signed tokens that replace the uihost's in-memory session map.
uihost/uinoderender
Package uinoderender maps a validated ui.node.v1 tree (github.com/DonaldMurillo/gofastr/core-ui/uinodev1.Tree) to host-owned HTML by composing the framework's design-system primitives: github.com/DonaldMurillo/gofastr/framework/ui and github.com/DonaldMurillo/gofastr/core-ui/html.
Package uinoderender maps a validated ui.node.v1 tree (github.com/DonaldMurillo/gofastr/core-ui/uinodev1.Tree) to host-owned HTML by composing the framework's design-system primitives: github.com/DonaldMurillo/gofastr/framework/ui and github.com/DonaldMurillo/gofastr/core-ui/html.
internal
actionscan
Package actionscan answers one question for both embed gates: does a component's ClientJS call G.serverAction?
Package actionscan answers one question for both embed gates: does a component's ClientJS call G.serverAction?
analyzers/allow
Package allow is the one marked-exception mechanism for the repo analyzers: a diagnostic whose line (or the line right below a stand-alone marker line) carries
Package allow is the one marked-exception mechanism for the repo analyzers: a diagnostic whose line (or the line right below a stand-alone marker line) carries
analyzers/asciifold
Package asciifold catches registry lookups that fold Unicode case.
Package asciifold catches registry lookups that fold Unicode case.
analyzers/authpresence
Package authpresence catches an Authorization header's presence used as a scheme test, and a cookie-name fallback list that reads the unprefixed name before its __Host- / __Secure- twin.
Package authpresence catches an Authorization header's presence used as a scheme test, and a cookie-name fallback list that reads the unprefixed name before its __Host- / __Secure- twin.
analyzers/bareduration
Package bareduration catches a bare integer handed to a time.Duration: `Every(5)` is five nanoseconds, not five seconds.
Package bareduration catches a bare integer handed to a time.Duration: `Every(5)` is five nanoseconds, not five seconds.
analyzers/callbackunderlock
Package callbackunderlock catches calls through func-typed values while a sync mutex is held.
Package callbackunderlock catches calls through func-typed values while a sync mutex is held.
analyzers/compositekey
The join is recognized through the indirections a real bug wears: a local or struct field bound from it, a one-result helper whose body reduces to returning it (statements that only rebind the helper's parameters in front of the return do not hide it), and the one-arg string-preserving normalizers around it at the sink (strings.ToLower/ToUpper/TrimSpace — the usual key normalizers).
The join is recognized through the indirections a real bug wears: a local or struct field bound from it, a one-result helper whose body reduces to returning it (statements that only rebind the helper's parameters in front of the return do not hide it), and the one-arg string-preserving normalizers around it at the sink (strings.ToLower/ToUpper/TrimSpace — the usual key normalizers).
analyzers/controlbytes
Package controlbytes catches request-derived strings reaching a log, span-attribute, or header sink without a control-byte scrub.
Package controlbytes catches request-derived strings reaching a log, span-attribute, or header sink without a control-byte scrub.
analyzers/credfetch
Package credfetch catches an http.Client with no CheckRedirect used for a credential-bearing fetch.
Package credfetch catches an http.Client with no CheckRedirect used for a credential-bearing fetch.
analyzers/deferreset
Package deferreset catches state set before a call that can panic and reset after it outside a defer: a panic skips the reset, and the state stays set for every later caller.
Package deferreset catches state set before a call that can panic and reset after it outside a defer: a panic skips the reset, and the state stays set for every later caller.
analyzers/discardeddecode
Package discardeddecode catches a request-shaped parse whose error is thrown away: `_ = json.NewDecoder(r.Body).Decode(&body)`, `_ = json.Unmarshal(b, &v)`, `_ = r.ParseForm()`, and the bare statement spelling that drops the result on the floor.
Package discardeddecode catches a request-shaped parse whose error is thrown away: `_ = json.NewDecoder(r.Body).Decode(&body)`, `_ = json.Unmarshal(b, &v)`, `_ = r.ParseForm()`, and the bare statement spelling that drops the result on the floor.
analyzers/discardederr
Package discardederr catches a multi-value assignment that drops an error on the floor while keeping the values around it: `ch, cancel, _ := m.subscribeImpl(id)`.
Package discardederr catches a multi-value assignment that drops an error on the floor while keeping the values around it: `ch, cancel, _ := m.subscribeImpl(id)`.
analyzers/discardmutator
Package discardmutator catches security-state mutations whose result is discarded right where the handler acknowledges success.
Package discardmutator catches security-state mutations whose result is discarded right where the handler acknowledges success.
analyzers/divlimit
Package divlimit catches integer division and remainder by a caller-supplied pagination-sized value that the function never guards against 0 or 1.
Package divlimit catches integer division and remainder by a caller-supplied pagination-sized value that the function never guards against 0 or 1.
analyzers/doublewrite
Package doublewrite catches a deferred response write that also runs after the function already answered on another path.
Package doublewrite catches a deferred response write that also runs after the function already answered on another path.
analyzers/embedskip
Package embedskip catches a struct field walk that maps fields to keys by their tags and never looks at an embedded struct.
Package embedskip catches a struct field walk that maps fields to keys by their tags and never looks at an embedded struct.
analyzers/emitident
Package emitident catches names formatted into emitted code without an identifier gate.
Package emitident catches names formatted into emitted code without an identifier gate.
analyzers/errleak
Package errleak catches an internal error string being handed to the client on a 5xx response — or, since the 2026-09-07 round, into a JSON-RPC internal-error response.
Package errleak catches an internal error string being handed to the client on a 5xx response — or, since the 2026-09-07 round, into a JSON-RPC internal-error response.
analyzers/fanoutreq
Package fanoutreq catches one backend call per element of a collection whose length the request chooses.
Package fanoutreq catches one backend call per element of a collection whose length the request chooses.
analyzers/fieldtypeswitch
Package fieldtypeswitch makes adding a schema field type a checklist instead of a silent hazard.
Package fieldtypeswitch makes adding a schema field type a checklist instead of a silent hazard.
analyzers/fixedtmp
Package fixedtmp catches a path under the shared temp root whose name is CONSTANT or pid-predictable reaching a create/mkdir/exec or build sink: os.Mkdir / os.MkdirAll / os.Create / os.WriteFile / os.OpenFile(write flags) on it, an exec.Command / exec.CommandContext argument (`go build -o <path>` writes through whatever is at the path; argv[0] runs it), or an exec.Cmd Dir assignment (the child's cwd).
Package fixedtmp catches a path under the shared temp root whose name is CONSTANT or pid-predictable reaching a create/mkdir/exec or build sink: os.Mkdir / os.MkdirAll / os.Create / os.WriteFile / os.OpenFile(write flags) on it, an exec.Command / exec.CommandContext argument (`go build -o <path>` writes through whatever is at the path; argv[0] runs it), or an exec.Cmd Dir assignment (the child's cwd).
analyzers/floatnum
Package floatnum catches JSON decoded into a target that holds an interface value (any, map[string]any, []any, or a struct field of one) without UseNumber.
Package floatnum catches JSON decoded into a target that holds an interface value (any, map[string]any, []any, or a struct field of one) without UseNumber.
analyzers/fmtformat
Package fmtformat catches URL-encoder output (url.Values.Encode, url.QueryEscape, url.PathEscape) becoming part of a fmt format string.
Package fmtformat catches URL-encoder output (url.Values.Encode, url.QueryEscape, url.PathEscape) becoming part of a fmt format string.
analyzers/growmap
Package growmap catches a per-caller map on a long-lived struct that a request grows and nothing bounds: no size cap and no time-driven sweep.
Package growmap catches a per-caller map on a long-lived struct that a request grows and nothing bounds: no size cap and no time-driven sweep.
analyzers/hookedread
Package hookedread keeps the entity screens on the hooked read.
Package hookedread keeps the entity screens on the hooked read.
analyzers/hygiene
Package hygiene holds the small checks whose whole point is that they currently find nothing.
Package hygiene holds the small checks whose whole point is that they currently find nothing.
analyzers/internal/astx
Package astx holds the small go/analysis helpers that kept being copied verbatim between the repo analyzers under internal/analyzers.
Package astx holds the small go/analysis helpers that kept being copied verbatim between the repo analyzers under internal/analyzers.
analyzers/internal/dominance
Package dominance provides the statement-dominance walk shared by the analyzers under internal/analyzers: which statements and conditions of a function body are guaranteed to execute before a given node.
Package dominance provides the statement-dominance walk shared by the analyzers under internal/analyzers: which statements and conditions of a function body are guaranteed to execute before a given node.
analyzers/internal/pathflow
Package pathflow holds the path-dataflow machinery the root-shaped analyzers (rootwrite, rootread) share: local-binding resolution, the root/base/dir-named root tests, the lexical Join/concat containment shapes — including the one-hop same-package helper that RETURNS a root-joined path — and the EvalSymlinks-on-the-chain judgement that separates the fix posture from a resolution on an unrelated path, plus the verified symlink guards (SymlinkGuards, GuardsPath): a function counts as a guard by what its body does, never by its name, and a guard call gates only the path it was handed.
Package pathflow holds the path-dataflow machinery the root-shaped analyzers (rootwrite, rootread) share: local-binding resolution, the root/base/dir-named root tests, the lexical Join/concat containment shapes — including the one-hop same-package helper that RETURNS a root-joined path — and the EvalSymlinks-on-the-chain judgement that separates the fix posture from a resolution on an unrelated path, plus the verified symlink guards (SymlinkGuards, GuardsPath): a function counts as a guard by what its body does, never by its name, and a guard call gates only the path it was handed.
analyzers/internal/readsrc
Package readsrc finds the reader a whole-body read consumes.
Package readsrc finds the reader a whole-body read consumes.
analyzers/internal/rwcall
Package rwcall answers one question for the response-lifecycle analyzers (recoverwrite, doublewrite): does this call write an HTTP response, and to which writer? It decides nothing about when a write is wrong; the analyzers pick that.
Package rwcall answers one question for the response-lifecycle analyzers (recoverwrite, doublewrite): does this call write an HTTP response, and to which writer? It decides nothing about when a write is wrong; the analyzers pick that.
analyzers/intwrap
Package intwrap catches the two integer-wrap postures that slip past range checks: unsigned→signed conversion without a bound, and unary negation of MinInt inside an abs.
Package intwrap catches the two integer-wrap postures that slip past range checks: unsigned→signed conversion without a bound, and unary negation of MinInt inside an abs.
analyzers/iounderlock
Package iounderlock catches database and network I/O made while a sync mutex is held.
Package iounderlock catches database and network I/O made while a sync mutex is held.
analyzers/keytrim
Package keytrim catches strings.TrimSpace rewriting an identity value that is then used as a key.
Package keytrim catches strings.TrimSpace rewriting an identity value that is then used as a key.
analyzers/laxcoerce
Package laxcoerce catches a wrong type masquerading as absence: a comma-ok type assertion on a map[string]any entry whose failure path returns zero values with a nil error — or continues, or breaks/gotos out of the loop with the nil error intact (2026-11-03 round) — as though the key had never been sent.
Package laxcoerce catches a wrong type masquerading as absence: a comma-ok type assertion on a map[string]any entry whose failure path returns zero values with a nil error — or continues, or breaks/gotos out of the loop with the nil error intact (2026-11-03 round) — as though the key had never been sent.
analyzers/laxenvelope
Package laxenvelope catches a transport that decodes the SAME envelope type lax at one site while the same package — or, since the 2026-09-07 round, ANY package — decodes that type strictly at another.
Package laxenvelope catches a transport that decodes the SAME envelope type lax at one site while the same package — or, since the 2026-09-07 round, ANY package — decodes that type strictly at another.
analyzers/layoutfunc
Package layoutfunc flags route-state reads that are lexically inside a layout build (an app.LayoutFunc body) and outside a RouteArea closure (docs/DESIGN-layout-outlets.md, "The lint").
Package layoutfunc flags route-state reads that are lexically inside a layout build (an app.LayoutFunc body) and outside a RouteArea closure (docs/DESIGN-layout-outlets.md, "The lint").
analyzers/listheader
Package listheader catches a list-valued HTTP header read with Header.Get and then split or token-compared.
Package listheader catches a list-valued HTTP header read with Header.Get and then split or token-compared.
analyzers/mapwriter
Package mapwriter catches nondeterministic SSR output at its source: ranging over a Go map while writing into an output builder emits attributes/markup in a different order every render.
Package mapwriter catches nondeterministic SSR output at its source: ranging over a Go map while writing into an output builder emits attributes/markup in a different order every render.
analyzers/multipartparse
Package multipartparse catches a handler that accepts a multipart/form-data body and then parses it with ParseForm alone.
Package multipartparse catches a handler that accepts a multipart/form-data body and then parses it with ParseForm alone.
analyzers/names
Package names is the dependency-free list of repo analyzer names: the vocabulary of the //gofastr:allow(<name>) marker.
Package names is the dependency-free list of repo analyzer names: the vocabulary of the //gofastr:allow(<name>) marker.
analyzers/negdur
Package negdur catches time.Duration zero-tests that silently fold a NEGATIVE lifetime onto the "zero means default" or "nonzero means expiry" arm.
Package negdur catches time.Duration zero-tests that silently fold a NEGATIVE lifetime onto the "zero means default" or "nonzero means expiry" arm.
analyzers/nonfinite
Package nonfinite catches a strconv.ParseFloat result stored or returned without a NaN/Inf gate.
Package nonfinite catches a strconv.ParseFloat result stored or returned without a NaN/Inf gate.
analyzers/nostore
Package nostore catches a per-caller 2xx response written with no Cache-Control on its path.
Package nostore catches a per-caller 2xx response written with no Cache-Control on its path.
analyzers/nowaitdelay
Package nowaitdelay catches an exec.CommandContext child with captured stdout started with no WaitDelay bound.
Package nowaitdelay catches an exec.CommandContext child with captured stdout started with no WaitDelay bound.
analyzers/nullarray
Package nullarray catches a nil slice reaching a JSON field the wire schema requires to be an array, where it encodes as null.
Package nullarray catches a nil slice reaching a JSON field the wire schema requires to be an array, where it encodes as null.
analyzers/optzero
Package optzero catches a numeric option that lets 0 (or a negative) replace a nonzero default nobody downstream re-checks.
Package optzero catches a numeric option that lets 0 (or a negative) replace a nonzero default nobody downstream re-checks.
analyzers/poisonedconn
Package poisonedconn catches a session reset on a pinned *sql.Conn whose failure sends the connection back to the pool still holding the session state it was meant to clear.
Package poisonedconn catches a session reset on a pinned *sql.Conn whose failure sends the connection back to the pool still holding the session state it was meant to clear.
analyzers/quoteident
Package quoteident keeps SQL identifier quoting to one spelling: query.QuoteFolded.
Package quoteident keeps SQL identifier quoting to one spelling: query.QuoteFolded.
analyzers/ratelimitkey
Package ratelimitkey catches a per-IP rate limit keyed on a client's full address.
Package ratelimitkey catches a per-IP rate limit keyed on a client's full address.
analyzers/rawtext
Package rawtext keeps every message the framework answers a request with inside the i18n catalog.
Package rawtext keeps every message the framework answers a request with inside the i18n catalog.
analyzers/recovercallback
Package recovercallback catches registry callbacks invoked with no recover in scope on a dispatch path that has no net.
Package recovercallback catches registry callbacks invoked with no recover in scope on a dispatch path that has no net.
analyzers/recoverlog
Package recoverlog catches a recover() value reaching a log sink without a scrub.
Package recoverlog catches a recover() value reaching a log sink without a scrub.
analyzers/recoverwrite
Package recoverwrite catches a deferred recover that answers a panic by writing a response without first asking whether the response had already started.
Package recoverwrite catches a deferred recover that answers a panic by writing a response without first asking whether the response had already started.
analyzers/reflectset
Package reflectset catches reflect.Value mutation of a struct field that never passed through CanSet: Set, SetString, SetInt, and the rest of the Set* family panic on values obtained from an unexported field, and the panic fires at injection time, not at declaration time, so a single lowercased tagged field takes down every request.
Package reflectset catches reflect.Value mutation of a struct field that never passed through CanSet: Set, SetString, SetInt, and the rest of the Set* family panic on values obtained from an unexported field, and the panic fires at injection time, not at declaration time, so a single lowercased tagged field takes down every request.
analyzers/reqparamlimit
Package reqparamlimit catches unclamped request-sourced integers flowing into limit/cap-shaped call parameters.
Package reqparamlimit catches unclamped request-sourced integers flowing into limit/cap-shaped call parameters.
analyzers/resolvedial
Package resolvedial catches an SSRF guard that resolves a host name, checks the answer, and then lets the transport resolve the same name again to dial it.
Package resolvedial catches an SSRF guard that resolves a host name, checks the answer, and then lets the transport resolve the same name again to dial it.
analyzers/rootread
Package rootread catches reads whose containment under a root is resolved lexically only — the read twin of rootwrite.
Package rootread catches reads whose containment under a root is resolved lexically only — the read twin of rootwrite.
analyzers/rootwrite
Package rootwrite catches writes whose containment under a root is resolved lexically only: os.WriteFile / os.Create / os.CreateTemp / os.OpenFile(write flag) / os.Mkdir / os.MkdirAll / os.Remove on a path built under a root — filepath.Join, or a flat `root + "/" + x` concatenation — where the root is a caller-supplied parameter or field — with no filepath.EvalSymlinks on that path's chain — plus the archive twin: zip.Writer entry names assembled from a parameter with no path.Clean on the entry-name chain.
Package rootwrite catches writes whose containment under a root is resolved lexically only: os.WriteFile / os.Create / os.CreateTemp / os.OpenFile(write flag) / os.Mkdir / os.MkdirAll / os.Remove on a path built under a root — filepath.Join, or a flat `root + "/" + x` concatenation — where the root is a caller-supplied parameter or field — with no filepath.EvalSymlinks on that path's chain — plus the archive twin: zip.Writer entry names assembled from a parameter with no path.Clean on the entry-name chain.
analyzers/rsakeysize
Package rsakeysize catches an RSA public key built from a decoded modulus that nothing bounds from above.
Package rsakeysize catches an RSA public key built from a decoded modulus that nothing bounds from above.
analyzers/sanitizefix
Package sanitizefix catches a scrub that removes a multi-character match in one pass: the removal splices the match's neighbours together, and they can spell the very thing it removed.
Package sanitizefix catches a scrub that removes a multi-character match in one pass: the removal splices the match's neighbours together, and they can spell the very thing it removed.
analyzers/secretcompare
Package secretcompare catches a client-supplied credential compared with == or != instead of a constant-time primitive.
Package secretcompare catches a client-supplied credential compared with == or != instead of a constant-time primitive.
analyzers/settlectx
Package settlectx catches an outcome write (ack, nack, settle, record, mark) made on the same cancellable context the unit of work it records just ran under.
Package settlectx catches an outcome write (ack, nack, settle, record, mark) made on the same cancellable context the unit of work it records just ran under.
analyzers/siblingresult
Package siblingresult catches a call site that blanks a result its function marks must-use: the flag one path dropped is the flag the other paths exist to honour.
Package siblingresult catches a call site that blanks a result its function marks must-use: the flag one path dropped is the flag the other paths exist to honour.
analyzers/silentskip
Package silentskip catches a loop that backs off and retries past an error without a word: `if err != nil { wait(); continue }` whose block never reads err.
Package silentskip catches a loop that backs off and retries past an error without a word: `if err != nil { wait(); continue }` whose block never reads err.
analyzers/statusrange
Package statusrange catches a response status that reaches WriteHeader (or http.Error's code argument) without a range check.
Package statusrange catches a response status that reaches WriteHeader (or http.Error's code argument) without a range check.
analyzers/suite
Package suite is the set of go/analysis analyzers GoFastr runs under `go vet -vettool`.
Package suite is the set of go/analysis analyzers GoFastr runs under `go vet -vettool`.
analyzers/testgap
Package testgap reports validator enumeration arms that no fixture in the package ever exercises.
Package testgap reports validator enumeration arms that no fixture in the package ever exercises.
analyzers/textbind
Package textbind catches request text bound into a SQL text parameter with no check that Postgres can store it.
Package textbind catches request text bound into a SQL text parameter with no check that Postgres can store it.
analyzers/tightenshared
Package tightenshared catches owner-only tightening of a directory the caller named, applied whether or not this code created it.
Package tightenshared catches owner-only tightening of a directory the caller named, applied whether or not this code created it.
analyzers/timestampid
Package timestampid catches an identifier minted from wall-clock time: a time.Now().Unix()/.UnixMilli()/.UnixNano() value formatted into a string (fmt.Sprintf, strconv.FormatInt/FormatUint/Itoa, or + concatenation) and bound to a name ending in id, token, session, a credential-qualified key (apiKey, signingKey), nonce, secret, or capability.
Package timestampid catches an identifier minted from wall-clock time: a time.Now().Unix()/.UnixMilli()/.UnixNano() value formatted into a string (fmt.Sprintf, strconv.FormatInt/FormatUint/Itoa, or + concatenation) and bound to a name ending in id, token, session, a credential-qualified key (apiKey, signingKey), nonce, secret, or capability.
analyzers/unboundedbody
Package unboundedbody catches an inbound HTTP request body that is read or decoded without a size cap, so a single request can spend the server's memory.
Package unboundedbody catches an inbound HTTP request body that is read or decoded without a size cap, so a single request can spend the server's memory.
analyzers/unboundedresp
Package unboundedresp catches the unbounded read of an HTTP RESPONSE body: io.ReadAll(resp.Body), or a json/xml/yaml Decoder seated on it, with no io.LimitReader or http.MaxBytesReader anywhere on that body's chain in the function — or one hop away in a same-package helper the body is passed to.
Package unboundedresp catches the unbounded read of an HTTP RESPONSE body: io.ReadAll(resp.Body), or a json/xml/yaml Decoder seated on it, with no io.LimitReader or http.MaxBytesReader anywhere on that body's chain in the function — or one hop away in a same-package helper the body is passed to.
analyzers/unseated
Package unseated catches a long-lived stream surface that admits a connection without any seat acquisition reachable on its open path.
Package unseated catches a long-lived stream surface that admits a connection without any seat acquisition reachable on its open path.
analyzers/worldreadable
Package worldreadable catches files and directories written for state or secrets with group/other permission bits: os.WriteFile / os.Create / os.OpenFile(write flags) / os.Mkdir / os.MkdirAll whose mode is a CONSTANT literal carrying group or other bits (0644, 0755, 0666, 0777; os.Create is umask-default 0666), while this repo's own discipline for that artifact class is owner-only (0600/0700 plus fileperm.Restrict, pinned by battery/log, upload storage, the session sqlite store and DEK, freeze's world.json, and the credstore).
Package worldreadable catches files and directories written for state or secrets with group/other permission bits: os.WriteFile / os.Create / os.OpenFile(write flags) / os.Mkdir / os.MkdirAll whose mode is a CONSTANT literal carrying group or other bits (0644, 0755, 0666, 0777; os.Create is umask-default 0666), while this repo's own discipline for that artifact class is owner-only (0600/0700 plus fileperm.Restrict, pinned by battery/log, upload storage, the session sqlite store and DEK, freeze's world.json, and the credstore).
analyzers/wrapwriter
Package wrapwriter catches http.ResponseWriter wrappers that hide the connection from http.ResponseController, and middleware that changes response headers after the handler has already sent them.
Package wrapwriter catches http.ResponseWriter wrappers that hide the connection from http.ResponseController, and middleware that changes response headers after the handler has already sent them.
asciicase
Package asciicase folds case A–Z only: the folding Postgres applies to an unquoted identifier, CSS to a keyword or unit, and the repo to a name, table, file extension or key it compares case-insensitively.
Package asciicase folds case A–Z only: the folding Postgres applies to an unquoted identifier, CSS to a keyword or unit, and the repo to a name, table, file extension or key it compares case-insensitively.
astbase
Package astbase holds the one go/ast helper that two trees with different dependency budgets both need: framework/contracts, which must build without golang.org/x/tools, and internal/analyzers' astx, which sits on golang.org/x/tools/go/analysis.
Package astbase holds the one go/ast helper that two trees with different dependency budgets both need: framework/contracts, which must build without golang.org/x/tools, and internal/analyzers' astx, which sits on golang.org/x/tools/go/analysis.
atomicfile
Package atomicfile supports replacement of complete files on disk.
Package atomicfile supports replacement of complete files on disk.
attrscan
Package attrscan finds data-cui-* attribute values in rendered HTML with a byte scan instead of a regexp.
Package attrscan finds data-cui-* attribute values in rendered HTML with a byte scan instead of a regexp.
bom
Package bom drops the UTF-8 byte order mark from the start of a text file the developer wrote.
Package bom drops the UTF-8 byte order mark from the start of a text file the developer wrote.
browserpath
Package browserpath resolves the Chrome/Chromium/Edge executable that chromedp should launch.
Package browserpath resolves the Chrome/Chromium/Edge executable that chromedp should launch.
buildoutput
Package buildoutput identifies generated framework output directories.
Package buildoutput identifies generated framework output directories.
chromedptest
Package chromedptest boots the headless Chrome used by the repo's chromedp-driven tests.
Package chromedptest boots the headless Chrome used by the repo's chromedp-driven tests.
clientip
Package clientip reads the client address out of X-Forwarded-For the one way that survives an appending proxy: from the right.
Package clientip reads the client address out of X-Forwarded-For the one way that survives an appending proxy: from the right.
deepcopy
Package deepcopy rebuilds every map and slice reachable from a value, so a holder of the copy cannot write into the original's containers.
Package deepcopy rebuilds every map and slice reachable from a value, so a holder of the copy cannot write into the original's containers.
dsnredact
Package dsnredact strips credentials from database DSNs so the remainder can be logged or committed (host/db name are configuration, not secrets).
Package dsnredact strips credentials from database DSNs so the remainder can be logged or committed (host/db name are configuration, not secrets).
filelock
Package filelock takes an exclusive OS lock on an open file, blocking (Lock) or not (TryLock): flock on Unix, LockFileEx on Windows.
Package filelock takes an exclusive OS lock on an open file, blocking (Lock) or not (TryLock): flock on Unix, LockFileEx on Windows.
fileperm/filepermtest
Package filepermtest checks file permissions using the host's permission model.
Package filepermtest checks file permissions using the host's permission model.
gatepath
Package gatepath decides whether a request path sits under one of the path prefixes a loopback host's session gate lets through (battery/service and battery/desktop Config.OpenPrefixes).
Package gatepath decides whether a request path sits under one of the path prefixes a loopback host's session gate lets through (battery/service and battery/desktop Config.OpenPrefixes).
hookenv
Package hookenv holds the shell the git hooks source to set up their environment (strip-git-path.sh), so its tests sit beside it and a change to it selects them.
Package hookenv holds the shell the git hooks source to set up their environment (strip-git-path.sh), so its tests sit beside it and a change to it selects them.
inflect
Package inflect holds the repo's one English singularizer for entity display names, shared by the app generator and the admin battery.
Package inflect holds the repo's one English singularizer for entity display names, shared by the app generator and the admin battery.
jsonexact
Package jsonexact decodes JSON into a Go value without rounding the numbers an interface value holds.
Package jsonexact decodes JSON into a Go value without rounding the numbers an interface value holds.
pgtest
Package pgtest provides a shared real-Postgres test harness usable from any package in the module (core/migrate, cmd/gofastr, …) without importing framework/internal/testdb, which is import-restricted to the framework tree.
Package pgtest provides a shared real-Postgres test harness usable from any package in the module (core/migrate, cmd/gofastr, …) without importing framework/internal/testdb, which is import-restricted to the framework tree.
procalive
Package procalive answers whether a process id names a running process, for code that keeps a pid in a file and has to tell a live owner from a stale record: battery/service waiting for its daemon to exit, framework/localrun pruning records a crashed run left behind.
Package procalive answers whether a process id names a running process, for code that keeps a pid in a file and has to tell a live owner from a stale record: battery/service waiting for its daemon to exit, framework/localrun pruning records a crashed run left behind.
renderdiag
Package renderdiag connects recovered component panics to request-local test reporters.
Package renderdiag connects recovered component panics to request-local test reporters.
retired
Package retired reports retired class names and kit data-* attributes in rendered HTML.
Package retired reports retired class names and kit data-* attributes in rendered HTML.
retired/internal/tablegen command
Command tablegen writes internal/retired's retired-name table (retired_table.gen.go) from internal/upgrade's migration registry: every class (strings.classes, css.classes) and attribute (strings.attrs) a breaking note names, kept by names.Keep — the kit's namespaces only, first note wins.
Command tablegen writes internal/retired's retired-name table (retired_table.gen.go) from internal/upgrade's migration registry: every class (strings.classes, css.classes) and attribute (strings.attrs) a breaking note names, kept by names.Keep — the kit's namespaces only, first note wins.
retired/names
Package names holds the retired-name data model and the rule for which names the runtime check keeps.
Package names holds the retired-name data model and the rule for which names the runtime check keeps.
rootfs
Package rootfs provides kernel-contained reads without idle directory handles.
Package rootfs provides kernel-contained reads without idle directory handles.
scratchdir
Package scratchdir owns where the app spec gate tests generate their scratch packages, and checks the naming contract that keeps those packages invisible to `go list ./...` and `go build ./...` while they exist.
Package scratchdir owns where the app spec gate tests generate their scratch packages, and checks the naming contract that keeps those packages invisible to `go list ./...` and `go build ./...` while they exist.
semver
Package semver holds the release-version rules the gofastr CLI and the migration registry share: which spellings are a release version, and how two of them order.
Package semver holds the release-version rules the gofastr CLI and the migration registry share: which spellings are a release version, and how two of them order.
sqlredact
Package sqlredact turns a SQL statement into its shape: every string and number literal replaced by ?, comments dropped, whitespace collapsed, control bytes escaped.
Package sqlredact turns a SQL statement into its shape: every string and number literal replaced by ?, comments dropped, whitespace collapsed, control bytes escaped.
testinputs
Package testinputs puts a subprocess's source files into the calling test's Go test cache key.
Package testinputs puts a subprocess's source files into the calling test's Go test cache key.
teststorage
Package teststorage owns temporary local storage handles for test fixtures.
Package teststorage owns temporary local storage handles for test fixtures.
upgrade
Package upgrade holds the migration registry `gofastr upgrade` reads: one entry per release that carries migration-relevant changes, each note with the guidance an app needs and a Find describing exactly which code the change affects.
Package upgrade holds the migration registry `gofastr upgrade` reads: one entry per release that carries migration-relevant changes, each note with the guidance an app needs and a Find describing exactly which code the change affects.
upgrade/examplescan
Package examplescan holds the check that the repo's migrated examples tree stays silent under the v0.86.0 and v0.87.0 release notes.
Package examplescan holds the check that the repo's migrated examples tree stays silent under the v0.86.0 and v0.87.0 release notes.
upgrade/releasetest
Package releasetest drives the shipped release notes (internal/upgrade/releases/*.yml) through the real scan engine: each note's affected spelling is a hit, its migrated spelling is not, and its Go-API matchers resolve against a stub kit at the real import paths.
Package releasetest drives the shipped release notes (internal/upgrade/releases/*.yml) through the real scan engine: each note's affected spelling is a hit, its migrated spelling is not, and its Go-API matchers resolve against a stub kit at the real import paths.
upgrade/releasetest/mid
Package mid drives the shipped v0.56.0–v0.85.0 release notes through the real scan engine.
Package mid drives the shipped v0.56.0–v0.85.0 release notes through the real scan engine.
upgrade/releasetest/old
Package old drives the shipped v0.3.0–v0.55.0 release notes through the real scan engine.
Package old drives the shipped v0.3.0–v0.55.0 release notes through the real scan engine.
upgrade/scan
Package scan runs the migration registry's typed matchers against an app: Go through the type checker, strings as constant values with context, CSS through the CSS tokenizer, gofastr.yml through the YAML parser, go.mod through its go directive, and a per-line regex only as the declared last resort.
Package scan runs the migration registry's typed matchers against an app: Go through the type checker, strings as constant values with context, CSS through the CSS tokenizer, gofastr.yml through the YAML parser, go.mod through its go directive, and a per-line regex only as the declared last resort.
upgrade/scantest
Package scantest builds throwaway apps for tests that drive the upgrade scanner (internal/upgrade/scan) over registry notes.
Package scantest builds throwaway apps for tests that drive the upgrade scanner (internal/upgrade/scan) over registry notes.
winversion
Package winversion writes and reads the VERSIONINFO resource a Windows desktop build carries.
Package winversion writes and reads the VERSIONINFO resource a Windows desktop build carries.
kiln
acp
Package acp adapts Kiln's tool surface to the Agent Client Protocol via core/acp.
Package acp adapts Kiln's tool surface to the Agent Client Protocol via core/acp.
agent
Package agent is Kiln's transport-agnostic LLM driver.
Package agent is Kiln's transport-agnostic LLM driver.
agent/mcp
Package mcp wraps Kiln's tool surface as a Model Context Protocol server.
Package mcp wraps Kiln's tool surface as a Model Context Protocol server.
chat
Package chat installs the in-app Kiln chat panel.
Package chat installs the in-app Kiln chat panel.
db
Package db owns the per-session ephemeral SQLite lifecycle for Kiln.
Package db owns the per-session ephemeral SQLite lifecycle for Kiln.
effect
Package effect runs declarative actions described by world.Action.
Package effect runs declarative actions described by world.Action.
expr
Package expr is Kiln's tiny expression evaluator.
Package expr is Kiln's tiny expression evaluator.
freeze
Package freeze emits canonical source artifacts from a Kiln world so the in-memory build-mode app can graduate to a regular GoFastr project.
Package freeze emits canonical source artifacts from a Kiln world so the in-memory build-mode app can graduate to a regular GoFastr project.
internal/kid
Package kid mints kiln's unpredictable identifiers.
Package kid mints kiln's unpredictable identifiers.
internal/toolargs
Package toolargs is the one decode for a kiln tool call's arguments, shared by every transport: the chat panel's HTTP endpoint and agent.Dispatch (the native loop, MCP and ACP adapters).
Package toolargs is the one decode for a kiln tool call's arguments, shared by every transport: the chat panel's HTTP endpoint and agent.Dispatch (the native loop, MCP and ACP adapters).
journal
Package journal is the append-only event log that backs every Kiln session.
Package journal is the append-only event log that backs every Kiln session.
live
Package live is the runtime that ties the Kiln components together during a session: it owns the current Session (world + chat + plans), the Journal that persists every edit, the framework.App that serves the live preview, and the SSE broadcaster that notifies the panel.
Package live is the runtime that ties the Kiln components together during a session: it owns the current Session (world + chat + plans), the Journal that persists every edit, the framework.App that serves the live preview, and the SSE broadcaster that notifies the panel.
noderender
Package noderender re-exports the first-party node renderer that now lives in core-ui/noderender.
Package noderender re-exports the first-party node renderer that now lives in core-ui/noderender.
protocol
Package protocol is Kiln's canonical agent tool surface.
Package protocol is Kiln's canonical agent tool surface.
render
Package render bridges the Kiln world IR to a runnable framework.App.
Package render bridges the Kiln world IR to a runnable framework.App.
world
Package world is the JSON-clean intermediate representation of a GoFastr application being built live by an agent inside Kiln.
Package world is the JSON-clean intermediate representation of a GoFastr application being built live by an agent inside Kiln.
sqlite
stdlib
Package stdlib registers modernc.org/sqlite — a pure-Go SQLite — under the conventional "sqlite3" database/sql driver name used by generated apps.
Package stdlib registers modernc.org/sqlite — a pure-Go SQLite — under the conventional "sqlite3" database/sql driver name used by generated apps.
Package stability classifies every package in the module into a support tier and enforces, via [TestEveryPackageIsClassified], that no package ships without an explicit classification.
Package stability classifies every package in the module into a support tier and enforces, via [TestEveryPackageIsClassified], that no package ships without an explicit classification.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL