tailscale/tailscale · error
not found
Error message
not found
What it means
The eventbus debug HTTP server only serves embedded assets whose name ends in .css, .min.js.gz, or .js. Any other requested asset name falls through the Content-Type switch and gets a 404 before the embed FS is even consulted. The input at fault is the asset name passed to serveStatic.
Source
Thrown at util/eventbus/debughttp.go:71
})
//go:generate go run fetch-htmx.go
//go:embed assets/*.css assets/*.min.js.gz
var static embed.FS
func serveStatic(name string) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch {
case strings.HasSuffix(name, ".css"):
w.Header().Set("Content-Type", "text/css")
case strings.HasSuffix(name, ".min.js.gz"):
w.Header().Set("Content-Type", "text/javascript")
w.Header().Set("Content-Encoding", "gzip")
case strings.HasSuffix(name, ".js"):
w.Header().Set("Content-Type", "text/javascript")
default:
http.Error(w, "not found", http.StatusNotFound)
return
}
f, err := static.Open(filepath.Join("assets", name))
if err != nil {
http.Error(w, fmt.Sprintf("opening asset: %v", err), http.StatusInternalServerError)
return
}
defer f.Close()
if _, err := io.Copy(w, f); err != nil {
http.Error(w, fmt.Sprintf("serving asset: %v", err), http.StatusInternalServerError)
return
}
})
}
func render(w http.ResponseWriter, name string, data any) {
err := templates().ExecuteTemplate(w, name+".html", data)View on GitHub (pinned to 6e0912f979)
Solutions
- Request an existing debug asset path.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at util/eventbus/debughttp.go:71 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tailscale/tailscale@6e0912f979 (2026-08-18).
Data as JSON: /api/errors/0039eb382a5db50e.
Report an issue: GitHub.