Air — Overview#
Identity#
- Module path: github.com/air-verse/air
- Go version: 1.25
- License: GPL-3.0
- Repository: https://github.com/air-verse/air
Purpose#
Air is a live-reload command-line utility for Go application development. It watches source files for changes, automatically rebuilds the binary, and restarts the process — eliminating the manual stop/rebuild/restart cycle during development. It targets Go developers building web applications or any long-running process who want a tighter feedback loop while coding.
Significance#
Air is the de facto standard live-reload tool in the Go ecosystem, widely referenced in tutorials, framework quickstarts (especially Gin, Fiber, Echo), and Docker-based Go development setups. Originally created as cosmtrek/air and later moved to the air-verse organization, it has accumulated broad adoption. It fills a gap that most Go web frameworks leave open — unlike Node.js (nodemon) or Python ecosystems, Go has no built-in live reload, and Air became the community’s answer. Its Docker image and Homebrew package reflect its mainstream status.
Key metrics#
- Go files: 26
- Top-level directories:
runner/,docs/,hack/,hooks/,smoke_test/ - Direct dependencies: 9 (
mergo,brotli,fatih/color,fsnotify,gohugoio/hugo,godotenv,go-toml,testify,golang.org/x/sys) - First commit / age: Shallow clone; project has been active since at least 2018 (original cosmtrek/air)
Notable characteristics#
- Single-package core: All business logic lives in the
runner/package — engine, config, watcher, proxy, logger, and flag parsing are co-located, keeping the codebase small and navigable (26 Go files total). - Embedded proxy: Air optionally runs an HTTP proxy (in
runner/proxy.goandrunner/proxy_stream.go) that injects a WebSocket-based live-reload script into served pages — a significant feature beyond simple process restart. - TOML-first configuration with CLI override: Config is driven by
.air.tomlviago-toml, but any config field can be overridden from the CLI using dotted key notation (e.g.,--build.cmd), implemented through reflection-based flag generation inrunner/flag.go. fsnotifyfor cross-platform watching: Uses thefsnotifylibrary for OS-native file system event watching (inotify on Linux, FSEvents on macOS, ReadDirectoryChanges on Windows), with platform-specific utility files (util_linux.go,util_unix.go,util_windows.go).- Unusual heavy dependency on Hugo: The
gohugoio/hugopackage is listed as a direct dependency — likely for its asset pipeline/minification support in the proxy’s static asset handling (brotli compression is also included), making the dependency footprint much heavier than the small codebase would suggest.