projectdiscovery/nuclei · warning
could not find any templates with tech tag
Error message
could not find any templates with tech tag
What it means
Raised by LoadTemplatesWithTags in the automatic-scan (tech-detect) flow. The template store was queried for templates carrying the detected technology tags (opts.Store.LoadTemplatesWithTags) and returned an empty list, meaning no loaded template is tagged with any of the target's detected technologies. It is returned before clustering/executing anything, so the automatic scan stops for that target.
Source
Thrown at pkg/protocols/common/automaticscan/util.go:45
return nil, errors.Wrap(err, "could not get templates in directory")
}
allTemplates = append(allTemplates, templates...)
}
allTemplates = sliceutil.Dedupe(allTemplates)
if len(allTemplates) == 0 {
return nil, fmt.Errorf("%w for given input", disk.ErrNoTemplatesFound)
}
return allTemplates, nil
}
// LoadTemplatesWithTags loads and returns templates with given tags
func LoadTemplatesWithTags(opts Options, templateDirs []string, tags []string, logInfo bool) ([]*templates.Template, error) {
finalTemplates, err := opts.Store.LoadTemplatesWithTags(templateDirs, tags)
if err != nil {
return nil, errors.Wrap(err, "could not load templates")
}
if len(finalTemplates) == 0 {
return nil, errors.New("could not find any templates with tech tag")
}
if !opts.ExecuterOpts.Options.DisableClustering {
// cluster and reduce requests
totalReqBeforeCluster := getRequestCount(finalTemplates) * int(opts.Target.Count())
finalTemplates, clusterCount, _ := templates.ClusterTemplates(finalTemplates, opts.ExecuterOpts)
totalReqAfterClustering := getRequestCount(finalTemplates) * int(opts.Target.Count())
if totalReqAfterClustering < totalReqBeforeCluster && logInfo {
opts.ExecuterOpts.Logger.Info().Msgf("Automatic scan tech-detect: Templates clustered: %d (Reduced %d Requests)", clusterCount, totalReqBeforeCluster-totalReqAfterClustering)
}
}
// log template loaded if VerboseVerbose flag is set
if opts.ExecuterOpts.Options.VerboseVerbose {
for _, tpl := range finalTemplates {
opts.ExecuterOpts.Logger.Print().Msgf("%s\n", templates.TemplateLogMessage(tpl.ID,
types.ToString(tpl.Info.Name),
tpl.Info.Authors.ToSlice(),View on GitHub (pinned to 265b3a3dec)
Solutions
- Include the full nuclei-templates directory so technology-tagged templates are available
- Verify the tag exists in your store: nuclei -tl lists available template tags
- Check that -tags/-etag/-ntags filters are not excluding the matching templates
- For niche techs, add a custom template carrying the technology as a tag
Defensive patterns
Strategy: validation
Validate before calling
tags := detectedTechTags(target) // from wappalyzergo/tech-detect
available := opts.Store.Tags() // or `nuclei -tl` output parsed once
for _, t := range tags {
if !available[t] { log.Warnf("no templates tagged %s; skipping", t) }
} Try / catch
templates, err := automaticscan.LoadTemplatesWithTags(opts, dirs, tags, false)
if err != nil && strings.Contains(err.Error(), "could not find any templates with tech tag") {
// degrade gracefully: continue scan without tech-specific templates
} Prevention
- Ship the full nuclei-templates repo for automatic scans
- Cache the tag list and diff detected tags against it before launching
- Treat empty result as 'skip target', not fatal scan error
When it happens
Trigger: Running an automatic scan against a host where tech-detect identifies e.g. 'packer' or a niche CMS, while the loaded template directories contain no template tagged with that technology.
Common situations: Pointing -templates at a small custom directory that lacks tech tags; running with -ntags/-etag filters that excluded the tagged templates; a very new/niche technology with no upstream template yet.
Related errors
- include directive preprocessing is disabled
- %w for given input
- headless mode (-headless) is required if -ho, -sb, -sc or -l
- both follow host redirects and follow redirects specified
- both follow redirects and disable redirects specified
AI-assisted analysis of projectdiscovery/nuclei@265b3a3dec (2026-08-15).
Data as JSON: /api/errors/d34158e885b5dc21.
Report an issue: GitHub.