The NucleiEngine is the core component of the Nuclei SDK that orchestrates vulnerability scanning.
Types
NucleiEngine
Main engine instance for running Nuclei scans.
type NucleiEngine struct {
// Contains filtered or unexported fields
}
ThreadSafeNucleiEngine
Thread-safe variant for concurrent scanning.
type ThreadSafeNucleiEngine struct {
// Contains filtered or unexported fields
}
Constructors
NewNucleiEngine
Creates a new Nuclei engine instance.
func NewNucleiEngine(options ...NucleiSDKOptions) (*NucleiEngine, error)
Variable number of configuration options
Returns a new NucleiEngine instance or an error
Example:
ne, err := nuclei.NewNucleiEngine(
nuclei.WithTemplateFilters(nuclei.TemplateFilters{Severity: "critical"}),
)
if err != nil {
panic(err)
}
defer ne.Close()
This function uses context.Background() internally. Use NewNucleiEngineCtx for custom context.
NewNucleiEngineCtx
Creates a new Nuclei engine instance with a custom context.
func NewNucleiEngineCtx(ctx context.Context, options ...NucleiSDKOptions) (*NucleiEngine, error)
Context for controlling engine lifecycle
Variable number of configuration options
Returns a new NucleiEngine instance or an error
Example:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
defer cancel()
ne, err := nuclei.NewNucleiEngineCtx(ctx,
nuclei.WithTemplateFilters(nuclei.TemplateFilters{Tags: []string{"oast"}}),
)
NewThreadSafeNucleiEngine
Creates a thread-safe Nuclei engine for concurrent scanning.
func NewThreadSafeNucleiEngine(options ...NucleiSDKOptions) (*ThreadSafeNucleiEngine, error)
Variable number of configuration options
return
*ThreadSafeNucleiEngine, error
Returns a new ThreadSafeNucleiEngine instance or an error
Example:
ne, err := nuclei.NewThreadSafeNucleiEngine()
if err != nil {
panic(err)
}
defer ne.Close()
Deprecated: Use NewThreadSafeNucleiEngineCtx instead.
NewThreadSafeNucleiEngineCtx
Creates a thread-safe Nuclei engine with a custom context.
func NewThreadSafeNucleiEngineCtx(ctx context.Context, options ...NucleiSDKOptions) (*ThreadSafeNucleiEngine, error)
Context for controlling engine lifecycle
Variable number of configuration options
return
*ThreadSafeNucleiEngine, error
Returns a new ThreadSafeNucleiEngine instance or an error
Example:
ctx := context.Background()
ne, err := nuclei.NewThreadSafeNucleiEngineCtx(ctx)
Core methods
LoadTargets
Loads target URLs, domains, or IPs into the engine.
func (e *NucleiEngine) LoadTargets(targets []string, probeNonHttp bool)
List of target URLs, domains, or IP addresses
Whether to probe non-HTTP/HTTPS targets to detect web services
Example:
// Load without probing
ne.LoadTargets([]string{"scanme.sh", "example.com"}, false)
// Load with HTTP probing
ne.LoadTargets([]string{"192.168.1.1", "example.com"}, true)
LoadTargetsFromReader
Loads targets from an io.Reader (e.g., file).
func (e *NucleiEngine) LoadTargetsFromReader(reader io.Reader, probeNonHttp bool)
Reader containing targets (one per line)
Whether to probe non-HTTP/HTTPS targets
Example:
file, _ := os.Open("targets.txt")
defer file.Close()
ne.LoadTargetsFromReader(file, false)
LoadTargetsWithHttpData
Loads targets with HTTP request data from various file formats.
func (e *NucleiEngine) LoadTargetsWithHttpData(filePath string, filemode string) error
Path to the file containing HTTP data
File format: “burp”, “openapi”, “swagger”, or “proxify”
Returns error if file cannot be loaded
Example:
err := ne.LoadTargetsWithHttpData("burp-export.xml", "burp")
err := ne.LoadTargetsWithHttpData("api.yaml", "openapi")
This method is mutually exclusive with LoadTargets and LoadTargetsFromReader.
ExecuteWithCallback
Executes templates against loaded targets with an optional callback.
func (e *NucleiEngine) ExecuteWithCallback(callback ...func(event *output.ResultEvent)) error
callback
...func(event *output.ResultEvent)
Optional callback functions invoked for each result
Returns error if execution fails
Example:
// No callback - outputs JSON to stdout
err := ne.ExecuteWithCallback(nil)
// With callback
err := ne.ExecuteWithCallback(func(event *output.ResultEvent) {
fmt.Printf("[%s] %s\n", event.TemplateID, event.Host)
})
// Multiple callbacks
err := ne.ExecuteWithCallback(callback1, callback2)
Deprecated: Use ExecuteCallbackWithCtx for better context control.
ExecuteCallbackWithCtx
Executes templates with context support and callbacks.
func (e *NucleiEngine) ExecuteCallbackWithCtx(ctx context.Context, callback ...func(event *output.ResultEvent)) error
Context for controlling execution lifecycle
callback
...func(event *output.ResultEvent)
Optional callback functions invoked for each result
Returns error if execution fails or context is cancelled
Example:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
defer cancel()
err := ne.ExecuteCallbackWithCtx(ctx, func(event *output.ResultEvent) {
fmt.Printf("Found: %s\n", event.TemplateID)
})
Close
Closes the engine and releases all resources.
func (e *NucleiEngine) Close()
Example:
ne, _ := nuclei.NewNucleiEngine()
defer ne.Close() // Always defer Close
Always call Close() to prevent resource leaks.
Template methods
LoadAllTemplates
Loads all templates based on configured filters.
func (e *NucleiEngine) LoadAllTemplates() error
Returns error if templates cannot be loaded
Example:
err := ne.LoadAllTemplates()
if err != nil {
panic(err)
}
Templates are automatically loaded on execution if not manually loaded.
GetTemplates
Returns all loaded templates.
func (e *NucleiEngine) GetTemplates() []*templates.Template
Slice of loaded template objects
Example:
templates := ne.GetTemplates()
fmt.Printf("Loaded %d templates\n", len(templates))
GetWorkflows
Returns all loaded workflows.
func (e *NucleiEngine) GetWorkflows() []*templates.Template
Slice of loaded workflow objects
Example:
workflows := ne.GetWorkflows()
fmt.Printf("Loaded %d workflows\n", len(workflows))
ParseTemplate
Parses a template from raw YAML data.
func (e *NucleiEngine) ParseTemplate(data []byte) (*templates.Template, error)
return
*templates.Template, error
Parsed template or error
Example:
templateData := []byte(`
id: custom-template
info:
name: Custom Template
severity: high
http:
- method: GET
path:
- "{{BaseURL}}"
`)
tmpl, err := ne.ParseTemplate(templateData)
if err != nil {
panic(err)
}
fmt.Printf("Template verified: %v\n", tmpl.Verified)
SignTemplate
Signs a template using the provided signer.
func (e *NucleiEngine) SignTemplate(tmplSigner *signer.TemplateSigner, data []byte) ([]byte, error)
tmplSigner
*signer.TemplateSigner
required
Template signer instance
Raw template data to sign
Signed template data or error
Example:
import "github.com/projectdiscovery/nuclei/v3/pkg/templates/signer"
tmplSigner := &signer.TemplateSigner{}
signedData, err := ne.SignTemplate(tmplSigner, templateData)
Accessor methods
GetExecuterOptions
Returns the executor options used by the engine.
func (e *NucleiEngine) GetExecuterOptions() *protocols.ExecutorOptions
return
*protocols.ExecutorOptions
Executor options instance
Example:
execOpts := ne.GetExecuterOptions()
fmt.Printf("Rate limit: %d\n", execOpts.RateLimiter.GetLimit())
Options
Returns the Nuclei type options.
func (e *NucleiEngine) Options() *types.Options
Example:
opts := ne.Options()
fmt.Printf("Template threads: %d\n", opts.TemplateThreads)
Engine
Returns the core execution engine.
func (e *NucleiEngine) Engine() *core.Engine
Example:
engine := ne.Engine()
workPool := engine.GetWorkPool()
Store
Returns the template store.
func (e *NucleiEngine) Store() *loader.Store
GetParser
Returns the template parser with cache.
func (e *NucleiEngine) GetParser() *templates.Parser
Cluster methods
GetClusterTemplateIDs
Returns template IDs for a given cluster ID.
func (e *NucleiEngine) GetClusterTemplateIDs(clusterID string) []string
Template IDs in the cluster, or nil if cluster doesn’t exist
Example:
templateIDs := ne.GetClusterTemplateIDs("http-get")
fmt.Printf("Templates in cluster: %v\n", templateIDs)
GetAllClusterMappings
Returns all cluster mappings.
func (e *NucleiEngine) GetAllClusterMappings() map[string][]string
Map of cluster IDs to template IDs, or nil if engine hasn’t executed
Example:
mappings := ne.GetAllClusterMappings()
for clusterID, templateIDs := range mappings {
fmt.Printf("Cluster %s: %v\n", clusterID, templateIDs)
}
ThreadSafeNucleiEngine methods
GlobalLoadAllTemplates
Loads all templates (thread-safe version).
func (e *ThreadSafeNucleiEngine) GlobalLoadAllTemplates() error
Returns error if templates cannot be loaded
GlobalResultCallback
Sets a global callback for all scan results.
func (e *ThreadSafeNucleiEngine) GlobalResultCallback(callback func(event *output.ResultEvent))
callback
func(event *output.ResultEvent)
required
Callback function invoked for each result
Example:
ne.GlobalResultCallback(func(event *output.ResultEvent) {
fmt.Printf("[%s] %s\n", event.TemplateID, event.Host)
})
ExecuteNucleiWithOpts
Executes scan with per-scan options (thread-safe).
func (e *ThreadSafeNucleiEngine) ExecuteNucleiWithOpts(targets []string, opts ...NucleiSDKOptions) error
Options specific to this scan
Returns error if execution fails
Example:
err := ne.ExecuteNucleiWithOpts(
[]string{"scanme.sh"},
nuclei.WithTemplateFilters(nuclei.TemplateFilters{ProtocolTypes: "dns"}),
nuclei.WithHeaders([]string{"X-Custom: value"}),
)
Deprecated: Use ExecuteNucleiWithOptsCtx for better context control.
ExecuteNucleiWithOptsCtx
Executes scan with context and per-scan options (thread-safe).
func (e *ThreadSafeNucleiEngine) ExecuteNucleiWithOptsCtx(ctx context.Context, targets []string, opts ...NucleiSDKOptions) error
Context for controlling execution
Options specific to this scan
Returns error if execution fails or context is cancelled
Example:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
defer cancel()
err := ne.ExecuteNucleiWithOptsCtx(
ctx,
[]string{"scanme.sh"},
nuclei.WithTemplateFilters(nuclei.TemplateFilters{ProtocolTypes: "dns"}),
)
Close (ThreadSafeNucleiEngine)
Closes the thread-safe engine and releases resources.
func (e *ThreadSafeNucleiEngine) Close()
Error types
ErrNotImplemented
var ErrNotImplemented = errkit.New("Not implemented")
Returned when a feature is not implemented.
ErrNoTemplatesAvailable
var ErrNoTemplatesAvailable = errkit.New("No templates available")
Returned when no templates match the configured filters.
ErrNoTargetsAvailable
var ErrNoTargetsAvailable = errkit.New("No targets available")
Returned when no targets are loaded for scanning.
ErrOptionsNotSupported
var ErrOptionsNotSupported = errkit.New("Option not supported in thread safe mode")
Returned when using unsupported options with ThreadSafeNucleiEngine.
Next steps
Template filters
Learn about template filtering options
Callbacks
Understand callback functions