The development server and hot-reload runner for the Andurel project.
- Hot Reload - Automatically rebuilds and restarts your Go application when source files change
- Template Support - Watches
.templfiles and triggers browser reloads when templates change (with TEMPL_DEV_MODE enabled) - Tailwind CSS - Optional Tailwind CSS watcher that rebuilds and reloads on style changes
- Reverse Proxy - Proxies requests to your app server and injects the hot-reload script into HTML responses
- WebSocket-based - Uses WebSockets for instant browser refresh notifications
Download the latest binary from the releases page or install with Go:
go install github.com/mbvlabs/shadowfax/cmd/shadowfax@latestRun shadowfax in your Andurel project directory:
shadowfaxThis will:
- Start a proxy server on port 3000 (configurable via
PROXY_PORT) - Build and run your app on port 8080 (configurable via
PORT) - Watch for file changes and automatically rebuild/reload
Open your browser to http://localhost:3000 to see your app with hot-reload enabled.
Shadowfax is configured via environment variables (supports .env files):
| Variable | Default | Description |
|---|---|---|
PROXY_PORT |
3000 |
Port for the proxy server (use this in your browser) |
PORT |
8080 |
Port for the app server (internal) |
SHADOWFAX_VERBOSE |
false |
Enable verbose debug logging |
Tailwind watching is automatically enabled if your andurel.lock file specifies Tailwind as the CSS framework:
{
"scaffoldConfig": {
"cssFramework": "tailwind"
}
}- Go Watcher - Monitors
.gofiles (excluding_templ.go) and triggers a rebuild when changes are detected - Templ Watcher - Runs
templ generate --watchto handle template changes - Tailwind Watcher - Runs the Tailwind CLI in watch mode (if enabled)
- App Server - Builds and runs
cmd/app/main.go, restarting on rebuilds - Proxy Server - Intercepts HTML responses and injects a WebSocket client script
- Broadcaster - Notifies all connected browsers to reload when changes are ready
cmd/shadowfax/ # Entry point
internal/
config/ # Configuration and lock file parsing
proxy/ # Reverse proxy with script injection
reload/ # Broadcaster, health checks, WebSocket handler
server/ # App server lifecycle management
watcher/ # File watchers (Go, templ, Tailwind)
Contributions are welcome! But please open an issue beforehand.
Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run quality checks:
go vet ./...andgolangci-lint run - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Shadowfax is based on these execellent open-source projects:
- Air - Live reload for Go apps
- Templier - A Go Templ web frontend development environment that automatically rebuilds the server and reloads the tab.
MIT
