Quick Start
Changelog
Release changes covered by the latest GoLazy guides.
Latest release changes
GoLazy v0.1.16 adds cache primitives, deferred template values, route-link
template helpers, OpenTelemetry-backed request telemetry, and a richer lazydev
development panel. Existing v0.1.15 applications do not need source rewrites;
run lazy upgrade --target v0.1.16 to update the golazy.dev module
requirement and follow-up checks.
Framework
lazyapp.Config.Dependenciesnow receives a framework-owned*lazydeps.Scope. Applications initialize services throughlazydeps.Service, update the app context through the scope, and let GoLazy record the dependency graph for later lifecycle work. Read Application Startup and Dependencies And Services.lazyapp.Config.SEOnow receives the dependency-initialized app context and is normally wired asSEO: SEOwith the function defined ininit/seo.go. Read SEO And Sitemaps.- Sitemap generation is now opt-in. GoLazy does not serve an empty
/sitemap.xmlby default, androbots.txtonly advertises a generated sitemap afterlazyapp.Config.Sitemapis configured. golazy.dev/lazyconfigfills application config structs from environment variables withGetenv[T]andMustGetenv[T], default field naming,var,default,requiredandrequiretags, trimmed string/numeric/bool values, pointer scalar fields,[]stringsplitting, case-insensitive bool parsing, slice entry loading, and optionalValidate() errorsupport.- SEO helpers support image alt text, Open Graph image dimensions, secure
social image URLs,
article:published_time, and complete-title preservation. Read SEO And Sitemaps. golazy.dev/lazytui/progressprovides named task progress, captured output, warnings, mise command helpers, and UI takeovers for interactive terminal steps.golazy.dev/lazyerrorsprovides application-owned errors that format likefmt.Errorf, prefix messages with the caller, preserve single and multiple%wwrapping, and expose recorded[]lazyerrors.Framebacktraces.golazy.dev/lazytelemetryprovides OpenTelemetry-compatible environment config, request-id middleware, context-awaresloglogging, OpenTelemetry-backed spans, log-to-span events, OpenTelemetry meter measurements, and in-memory request metrics.lazyapp.Newinstalls telemetry automatically when meaningfulOTEL_*environment variables are present, mounts Prometheus text metrics on the control plane whenOTEL_METRICS_EXPORTER=prometheusandCONTROL_PLANE_ADDRis set, and includeslazycachestats in that scrape output. Production builds do not expose control-plane metrics on the public app listener whenCONTROL_PLANE_ADDRis unset.OTEL_SDK_DISABLED=truedisables telemetry. Lazydev builds can also record per-request Go runtime traces, span JSON, and request-local log JSONL under.tmp/traceswhen OTEL exporters are present. Read Telemetry.- The latest telemetry guide now documents the Kubernetes production shape:
ingress-nginx OpenTelemetry is enabled per Ingress but collector and sampler
settings live on the nginx controller ConfigMap; Prometheus Operator scraping
should use
PodMonitorresources for the GoLazy control-plane/metricsendpoint. lazyappnow layers application views over framework default views fromlazycontroller, so controller errors render a built-in mobile friendlyapp/errorpage unless the app providesapp/views/app/error.html.tpl. Raw error details pluslazyerrorsand panic backtraces are exposed to that view only in development/detail mode. The built-in view shortens frame paths relative to the workspace, current directory, module cache, or module path where possible, andlazydevcan open a clicked frame in$EDITOR, using VS Code's-g file:lineform or a discovered terminal for terminal editors. New apps can rely on that framework view and addapp/views/app/error.html.tplonly when they want a custom error page.lazycontroller.Basenow providesSetLaterandSetWhenNeededfor request-local deferred view data. They store aValuerunder the template key and let templates call{{.name.Value}}while the controller can still use the returned value directly. Read Template Data And Helpers.- Templates can use
link_towithpath_for,attr,data, andunless_currentto render route links without handwritten anchor tags. Read Template Data And Helpers. golazy.dev/lazycacheprovides the cache contract, typedGet/Sethelpers, standardized stats, andOn/Offswitching.lazyappinstalls a default in-memory backend, exposesApp.Cache, and registers controller, partial, and Turbo frame body caching helpers. The development panel exposes cache stats, keys, and On/Off actions through the lazydev control plane. Read Caching.
CLI and generated apps
lazy newnow trusts the generated app'smise.toml, runsmise install, validates with the currentgoonPATH, then initializes a fresh Git repository and commits the generated checkout with a command-local GoLazy identity.lazy newcheckshttps://golazy.dev/lazy.versionbefore remote template generation, supports--skip-update-check, and accepts--version <version>for a specific sample app tag.- Generated apps pin their mise-managed
age,sops, andusagehelper versions instead of usinglatest, so freshmise installruns do not need a release-list lookup to decide the version. LAZY_MULTIVERSION=offdisables app-version CLI handoff for local testing, replacing the previous global--skip-version-checkflag.- Go subprocesses in
lazy new,lazy,lazy routes,lazy upgrade, and the app build step oflazy native builduse the currentgoonPATH.lazy jsandlazy tailwindstill run app-managed package-manager tools throughmise exec. - The default
lazydevelopment command runsgo mod tidybefore building the app only when Go workspace mode is inactive. IfGOWORKorgo env GOWORKpoints at an active workspace,lazyskips the tidy step. - The default
lazydevelopment command now uses compact progress output for proxy startup, generated-asset work, Go builds, and application starts while leaving the running app's own output attached to the terminal. - The default
lazydevelopment command now serves a GoLazy development panel at/_golazy/, keeps it available across build and runtime failures, and starts the target app's development control plane on a separate internal address for route inspection, view-cache reloads, and cache inspection. - The development panel now uses a DevTools-style tabbed shell, carries the
current App Logs and Actions behavior into that shell, and embeds itself as a
fixed bottom iframe on proxied app pages instead of only showing a floating
activator button. A UI-only unpacked Chrome DevTools extension prototype lives
in
chrome-extensionwhile the shared panel API contracts are designed. - The default
lazydevelopment command now assignsX-Request-IDandtraceparentbefore proxying app requests and starts the child app with OTEL trace and log exporters enabled for lazydev request artifacts. lazynow passes local view and public roots tolazydevbuilds with build-time variables. Development assets are served from disk by logical path without permanent hashes or cache headers.- View-only changes in
lazydevelopment now reload the running app's view cache throughPOST /viewson the app's development control plane instead of rebuilding and restarting the app. Public-only changes reload the browser without rebuilding because development assets are read from disk. lazy upgradeincludes thev0.1.14tov0.1.15dependency initializer and SEO initializer migrations, and recognizesv0.1.16as the next module-only upgrade target. It also uses compact progress output while still letting conflict diffs and prompts take over the terminal deliberately. Read the Upgrade Guide.lazy upgradeappliesgo.moddependency manifests withgo getinstead of rewriting module files directly, and it updatesmise.tomltools through a tool manifest that comments obsolete entries rather than deleting them.lazy upgradefile manifests now hash sample-app additions, replacements, and removals. Unchanged template-owned files are updated or removed directly, new files are created directly, and customized files ask for a dated backup, deletion, keep, or abort choice depending on the operation.lazy --versionnow reportsv0.1.16, solazy newselects the matching sample application template once the coordinated release is published.
Website and guides
- The public installer installs
golazy.dev/lazy, writes the binary to a predictable local bin directory whenGOBINis not set, tries the official shell-specificmiseinstaller forbash,zsh, orfish, falls back to the plain bootstrap, and points new apps atlazy. Its same-shell recovery path now keepslazyon the normalPATHso direct Go subprocesses still findgo. - The homepage and package pages emit richer social-card metadata using the new SEO helpers.
- The latest guides document the in-development
v0.1.16changes whilev0.1.15stays frozen as the previous release snapshot.
Read the Upgrade Guide before moving an existing application forward.