kataras/iris · error
%s: %w
Error message
%s: %w
What it means
The Jet engine's Load walks its asset filesystem and reads each template with the asset helper; on read failure it wraps the underlying error with the template path (fmt.Errorf("%s: %w", path, err)) before attempting ParseTemplate. It mirrors error 131 but for the Jet template engine.
Source
Thrown at view/jet.go:255
if info == nil || info.IsDir() {
return nil
}
if s.extension != "" {
if !strings.HasSuffix(path, s.extension) {
return nil
}
}
if s.rootDir == rootDirName {
path = strings.TrimPrefix(path, rootDirName)
path = strings.TrimPrefix(path, "/")
}
buf, err := asset(s.fs, path)
if err != nil {
return fmt.Errorf("%s: %w", path, err)
}
return s.ParseTemplate(path, string(buf))
})
}
// ParseTemplate accepts a name and contnets to parse and cache a template.
// This parser does not support funcs per template. Use the `AddFunc` instead.
func (s *JetEngine) ParseTemplate(name string, contents string) error {
s.initSet()
_, err := s.Set.Parse(name, contents)
return err
}
func (s *JetEngine) initSet() {
s.mu.Lock()
if s.Set == nil {View on GitHub (pinned to 7bedaf55a0)
Solutions
- Read the wrapped inner error to identify the missing/unreadable file and restore or fix its path.
- Ensure the embedded FS covers the Jet template root (//go:embed views and matching directory name).
- Make the loader's rootDirName match the actual top-level folder in the fs so trimmed paths resolve.
- Trigger Load() during boot to fail fast instead of at first render.
Example fix
// before //go:embed templates/*.html var fs embed.FS engine := jet.New(fs, ".jet") // after //go:embed templates var fs embed.FS engine := jet.New(fs, ".jet")
Defensive patterns
Strategy: validation
Validate before calling
if _, err := fs.ReadFile(jetFS, "views/index.jet"); err != {
log.Fatalf("jet templates not embedded/readable: %v", err)
} Try / catch
if err := jetEngine.Load(); err != nil {
log.Fatalf("jet engine load failed (path in message): %v", err)
} Prevention
- Embed the whole jet template root directory, not individual files.
- Keep rootDirName passed to the loader identical to the embedded top-level folder.
- Call Load() at startup so read failures surface before traffic arrives.
- After renaming/moving .jet files, re-run go build to refresh the embedded FS.
When it happens
Trigger: JetEngine.Load iterating registered paths where reading path from s.fs fails — missing embedded directory, wrong rootDirName trimming, or an OS-fs file deleted/renamed after registration.
Common situations: Jet templates stored under a folder not included in go:embed; loader root folder name differs from the embedded top-level directory so trimmed paths point to nonexistent entries; renaming .jet files without re-embedding.
Related errors
AI-assisted analysis of kataras/iris@7bedaf55a0 (2026-08-30).
Data as JSON: /api/errors/3ab32014ddc7aed7.
Report an issue: GitHub.