Repository: projectdiscovery/nuclei

Issue:
Improve error handling for expression compilation failures in expressions.go
**Description:**
Currently, in [pkg/protocols/common/expressions/expressions.go](https://github.com/projectdiscovery/nuclei/blob/4e2af6bf674006f4a4c27dae87dc125f8a5a0fbb/pkg/protocols/common/expressions/expressions.go#L59), errors encountered during expression compilation or evaluation are silently ignored by using `continue`. This makes it difficult to debug issues or diagnose malformed expressions, as errors are not reported or logged.

**Suggested Improvements:**
- Log or collect errors that occur during compilation or evaluation of expressions.
- Optionally, provide feedback to users regarding which expressions failed and why.
- This will help users and developers diagnose issues related to invalid or unsupported expressions in templates.

**Example Code Reference:**
```go
compiled, err := govaluate.NewEvaluableExpressionWithFunctions(expression, dsl.HelperFunctions)
if err != nil {
    continue // Errors are ignored here
}
result, err := compiled.Evaluate(base)
if err != nil {
    continue // Errors are ignored here
}
```

**Benefits:**
- Easier debugging and template development.
- Improved user experience through actionable error messages.



Discussion:

Solution patch:
diff --git a/.claude/settings.local.json b/.claude/settings.local.json
deleted file mode 100644
index bcd49f4c..00000000
--- a/.claude/settings.local.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
-  "permissions": {
-    "allow": [
-      "Bash(find:*)",
-      "Bash(mkdir:*)",
-      "Bash(cp:*)",
-      "Bash(ls:*)",
-      "Bash(make:*)",
-      "Bash(go:*)",
-      "Bash(golangci-lint:*)",
-      "Bash(git merge:*)",
-      "Bash(git add:*)",
-      "Bash(git commit:*)",
-      "Bash(git push:*)",
-      "Bash(git pull:*)",
-      "Bash(git fetch:*)",
-      "Bash(git checkout:*)",
-      "WebFetch(*)",
-      "Write(*)",
-      "WebSearch(*)",
-      "MultiEdit(*)",
-      "Edit(*)",
-      "Bash(gh:*)",
-      "Bash(grep:*)",
-      "Bash(tree:*)",
-      "Bash(./nuclei:*)",
-      "WebFetch(domain:github.com)"
-    ],
-    "deny": [
-      "Bash(make run:*)",
-      "Bash(./bin/nuclei:*)"
-    ],
-    "defaultMode": "acceptEdits"
-  }
-}
\ No newline at end of file
diff --git a/.github/workflows/govulncheck.yaml b/.github/workflows/govulncheck.yaml
index 9796b709..11898380 100644
--- a/.github/workflows/govulncheck.yaml
+++ b/.github/workflows/govulncheck.yaml
@@ -20,7 +20,7 @@ jobs:
       - uses: projectdiscovery/actions/setup/go@v1
       - run: go install golang.org/x/vuln/cmd/govulncheck@latest
       - run: govulncheck -scan package -format sarif ./... > $OUTPUT
-      - uses: github/codeql-action/upload-sarif@v3
+      - uses: github/codeql-action/upload-sarif@v4
         with:
           sarif_file: "${{ env.OUTPUT }}"
           category: "govulncheck"
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index cc7f7b98..d616e8b7 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -120,11 +120,11 @@ jobs:
       security-events: write
     steps:
       - uses: actions/checkout@v5
-      - uses: github/codeql-action/init@v3
+      - uses: github/codeql-action/init@v4
         with:
           languages: 'go'
-      - uses: github/codeql-action/autobuild@v3
-      - uses: github/codeql-action/analyze@v3
+      - uses: github/codeql-action/autobuild@v4
+      - uses: github/codeql-action/analyze@v4
 
   release:
     name: "Release test"
diff --git a/.gitignore b/.gitignore
index 8e4f9d93..25c2c06c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,7 @@
 .gitignore
 .idea
 .vscode
-
+.claude/settings.local.json
 # Binaries
 /bin/*
 /bindgen
diff --git a/README.md b/README.md
index de24dc24..72d05dc1 100644
--- a/README.md
+++ b/README.md
@@ -111,7 +111,7 @@ Browse the full Nuclei [**`documentation here`**](https://docs.projectdiscovery.
 
 ### Installation
 
-`nuclei` requires **go1.23** to install successfully. Run the following command to get the repo:
+`nuclei` requires **go >= 1.24.1** to install successfully. Run the following command to get the repo:
 
 ```sh
 go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
diff --git a/SYNTAX-REFERENCE.md b/SYNTAX-REFERENCE.md
index 24cbd04d..8c969912 100755
--- a/SYNTAX-REFERENCE.md
+++ b/SYNTAX-REFERENCE.md
@@ -3218,7 +3218,7 @@ Inputs contains inputs for the network socket
 <div class="dt">
 
 description: |
-   Port is the port to send network requests to. this acts as default port but is overriden if target/input contains
+   Port is the port to send network requests to. this acts as default port but is overridden if target/input contains
  non-http(s) ports like 80,8080,8081 etc
 
 </div>
diff --git a/go.mod b/go.mod
index 121db220..d8854f73 100644
--- a/go.mod
+++ b/go.mod
@@ -22,12 +22,12 @@ require (
 	github.com/olekukonko/tablewriter v1.0.8
 	github.com/pkg/errors v0.9.1
 	github.com/projectdiscovery/clistats v0.1.1
-	github.com/projectdiscovery/fastdialer v0.4.12
+	github.com/projectdiscovery/fastdialer v0.4.13
 	github.com/projectdiscovery/hmap v0.0.95
 	github.com/projectdiscovery/interactsh v1.2.4
 	github.com/projectdiscovery/rawhttp v0.1.90
 	github.com/projectdiscovery/retryabledns v1.0.108
-	github.com/projectdiscovery/retryablehttp-go v1.0.127
+	github.com/projectdiscovery/retryablehttp-go v1.0.128
 	github.com/projectdiscovery/yamldoc-go v1.0.6
 	github.com/remeh/sizedwaitgroup v1.0.0
 	github.com/rs/xid v1.6.0
@@ -91,16 +91,16 @@ require (
 	github.com/microsoft/go-mssqldb v1.9.2
 	github.com/ory/dockertest/v3 v3.12.0
 	github.com/praetorian-inc/fingerprintx v1.1.15
-	github.com/projectdiscovery/dsl v0.7.2
+	github.com/projectdiscovery/dsl v0.8.0
 	github.com/projectdiscovery/fasttemplate v0.0.2
 	github.com/projectdiscovery/gcache v0.0.0-20241015120333-12546c6e3f4c
 	github.com/projectdiscovery/go-smb2 v0.0.0-20240129202741-052cc450c6cb
 	github.com/projectdiscovery/goflags v0.1.74
-	github.com/projectdiscovery/gologger v1.1.57
+	github.com/projectdiscovery/gologger v1.1.58
 	github.com/projectdiscovery/gostruct v0.0.2
 	github.com/projectdiscovery/gozero v0.1.0
 	github.com/projectdiscovery/httpx v1.7.2-0.20250911192144-fc425deb041a
-	github.com/projectdiscovery/mapcidr v1.1.95
+	github.com/projectdiscovery/mapcidr v1.1.96
 	github.com/projectdiscovery/n3iwf v0.0.0-20230523120440-b8cd232ff1f5
 	github.com/projectdiscovery/networkpolicy v0.1.26
 	github.com/projectdiscovery/ratelimit v0.0.82
@@ -110,7 +110,7 @@ require (
 	github.com/projectdiscovery/uncover v1.1.0
 	github.com/projectdiscovery/useragent v0.0.102
 	github.com/projectdiscovery/utils v0.6.0
-	github.com/projectdiscovery/wappalyzergo v0.2.49
+	github.com/projectdiscovery/wappalyzergo v0.2.50
 	github.com/redis/go-redis/v9 v9.11.0
 	github.com/seh-msft/burpxml v1.0.1
 	github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466
@@ -174,6 +174,7 @@ require (
 	github.com/bodgit/plumbing v1.3.0 // indirect
 	github.com/bodgit/sevenzip v1.6.0 // indirect
 	github.com/bodgit/windows v1.0.1 // indirect
+	github.com/brianvoe/gofakeit/v7 v7.2.1 // indirect
 	github.com/buger/jsonparser v1.1.1 // indirect
 	github.com/bytedance/sonic/loader v0.3.0 // indirect
 	github.com/caddyserver/certmagic v0.19.2 // indirect
@@ -241,6 +242,8 @@ require (
 	github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect
 	github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
 	github.com/gorilla/css v1.0.1 // indirect
+	github.com/gosimple/slug v1.15.0 // indirect
+	github.com/gosimple/unidecode v1.0.1 // indirect
 	github.com/hashicorp/errwrap v1.1.0 // indirect
 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
 	github.com/hashicorp/go-multierror v1.1.1 // indirect
@@ -318,7 +321,7 @@ require (
 	github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
 	github.com/projectdiscovery/asnmap v1.1.1 // indirect
 	github.com/projectdiscovery/blackrock v0.0.1 // indirect
-	github.com/projectdiscovery/cdncheck v1.2.4 // indirect
+	github.com/projectdiscovery/cdncheck v1.2.5 // indirect
 	github.com/projectdiscovery/freeport v0.0.7 // indirect
 	github.com/projectdiscovery/ldapserver v1.0.2-0.20240219154113-dcc758ebc0cb // indirect
 	github.com/projectdiscovery/machineid v0.0.0-20240226150047-2e2c51e35983 // indirect
diff --git a/go.sum b/go.sum
index 408202c2..4a27a01a 100644
--- a/go.sum
+++ b/go.sum
@@ -468,6 +468,8 @@ github.com/bodgit/windows v1.0.1 h1:tF7K6KOluPYygXa3Z2594zxlkbKPAOvqr97etrGNIz4=
 github.com/bodgit/windows v1.0.1/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM=
 github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
 github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/brianvoe/gofakeit/v7 v7.2.1 h1:AGojgaaCdgq4Adzrd2uWdbGNDyX6MWNhHdQBraNfOHI=
+github.com/brianvoe/gofakeit/v7 v7.2.1/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA=
 github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
 github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
 github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
@@ -933,6 +935,10 @@ github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
 github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
 github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
 github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
+github.com/gosimple/slug v1.15.0 h1:wRZHsRrRcs6b0XnxMUBM6WK1U1Vg5B0R7VkIf1Xzobo=
+github.com/gosimple/slug v1.15.0/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ=
+github.com/gosimple/unidecode v1.0.1 h1:hZzFTMMqSswvf0LBJZCZgThIZrpDHFXux9KeGmn6T/o=
+github.com/gosimple/unidecode v1.0.1/go.mod h1:CP0Cr1Y1kogOtx0bJblKzsVWrqYaqfNOnHzpgWw4Awc=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
@@ -1249,14 +1255,14 @@ github.com/projectdiscovery/asnmap v1.1.1 h1:ImJiKIaACOT7HPx4Pabb5dksolzaFYsD1kI
 github.com/projectdiscovery/asnmap v1.1.1/go.mod h1:QT7jt9nQanj+Ucjr9BqGr1Q2veCCKSAVyUzLXfEcQ60=
 github.com/projectdiscovery/blackrock v0.0.1 h1:lHQqhaaEFjgf5WkuItbpeCZv2DUIE45k0VbGJyft6LQ=
 github.com/projectdiscovery/blackrock v0.0.1/go.mod h1:ANUtjDfaVrqB453bzToU+YB4cUbvBRpLvEwoWIwlTss=
-github.com/projectdiscovery/cdncheck v1.2.4 h1:j2bd6h2aFGLkgKwfMLhheoZgTIIVabL886zhClRZx/U=
-github.com/projectdiscovery/cdncheck v1.2.4/go.mod h1:NDm/+PwVnC8ishg3SY/DEe8uzeSdvRjsHtF0pSKXxSA=
+github.com/projectdiscovery/cdncheck v1.2.5 h1:LCN5qBpxmF4SXxAvdCo0zH6YRUnVmNWxzAVcpMhRbOo=
+github.com/projectdiscovery/cdncheck v1.2.5/go.mod h1:hXim20sWKECI4u7RD+kxEkEogMjGUZwYEcaiyzvE0Tg=
 github.com/projectdiscovery/clistats v0.1.1 h1:8mwbdbwTU4aT88TJvwIzTpiNeow3XnAB72JIg66c8wE=
 github.com/projectdiscovery/clistats v0.1.1/go.mod h1:4LtTC9Oy//RiuT1+76MfTg8Hqs7FQp1JIGBM3nHK6a0=
-github.com/projectdiscovery/dsl v0.7.2 h1:2yszHrd/2Jut1Fa3jG04H5Gvz0WE5vSADNindox0fIA=
-github.com/projectdiscovery/dsl v0.7.2/go.mod h1:UCkWl+NtZnPLQ6y2L/FwDcJzQm78HY5BHmJ8E7HMGSQ=
-github.com/projectdiscovery/fastdialer v0.4.12 h1:5lHnx1SK8HRF4xoxlbRMytd3r0jwvw6aObPj9xw+Q5s=
-github.com/projectdiscovery/fastdialer v0.4.12/go.mod h1:SFhDHNw7VjSoefZfJeR4vqmhKOExPSGPZud2TeeUG50=
+github.com/projectdiscovery/dsl v0.8.0 h1:T7csfhoZ4RuhTX3zw/hr/G7OkDvC/+mKgUZvjkrxxsY=
+github.com/projectdiscovery/dsl v0.8.0/go.mod h1:V+XFrOE8xaBQm3wAR6MY1xmB26+Gr6LeUAo1AzwwHic=
+github.com/projectdiscovery/fastdialer v0.4.13 h1:cxRHqGNBQffBDzBNTle0+4jfj57e+l7Q7bXqtf3lNPM=
+github.com/projectdiscovery/fastdialer v0.4.13/go.mod h1:V7g6xD3r0PXGWmiQUbUVBYeKusAXbpdePuEz1jGDeY8=
 github.com/projectdiscovery/fasttemplate v0.0.2 h1:h2cISk5xDhlJEinlBQS6RRx0vOlOirB2y3Yu4PJzpiA=
 github.com/projectdiscovery/fasttemplate v0.0.2/go.mod h1:XYWWVMxnItd+r0GbjA1GCsUopMw1/XusuQxdyAIHMCw=
 github.com/projectdiscovery/freeport v0.0.7 h1:Q6uXo/j8SaV/GlAHkEYQi8WQoPXyJWxyspx+aFmz9Qk=
@@ -1267,8 +1273,8 @@ github.com/projectdiscovery/go-smb2 v0.0.0-20240129202741-052cc450c6cb h1:rutG90
 github.com/projectdiscovery/go-smb2 v0.0.0-20240129202741-052cc450c6cb/go.mod h1:FLjF1DmZ+POoGEiIQdWuYVwS++C/GwpX8YaCsTSm1RY=
 github.com/projectdiscovery/goflags v0.1.74 h1:n85uTRj5qMosm0PFBfsvOL24I7TdWRcWq/1GynhXS7c=
 github.com/projectdiscovery/goflags v0.1.74/go.mod h1:UMc9/7dFz2oln+10tv6cy+7WZKTHf9UGhaNkF95emh4=
-github.com/projectdiscovery/gologger v1.1.57 h1:pVmhSeGeBlgX/Vgjulu2GhrCK6oLfgHBQtarmgFMftM=
-github.com/projectdiscovery/gologger v1.1.57/go.mod h1:8FJFKmo0N4ITIH3n1Jy4ze6ijr+mA3t78g+VpN8uBRU=
+github.com/projectdiscovery/gologger v1.1.58 h1:6qWSTTU5jtLz0nu+20xv6aZyovWlPMbXKadADSKKL+I=
+github.com/projectdiscovery/gologger v1.1.58/go.mod h1:8FJFKmo0N4ITIH3n1Jy4ze6ijr+mA3t78g+VpN8uBRU=
 github.com/projectdiscovery/gostruct v0.0.2 h1:s8gP8ApugGM4go1pA+sVlPDXaWqNP5BBDDSv7VEdG1M=
 github.com/projectdiscovery/gostruct v0.0.2/go.mod h1:H86peL4HKwMXcQQtEa6lmC8FuD9XFt6gkNR0B/Mu5PE=
 github.com/projectdiscovery/gozero v0.1.0 h1:QC+WPEsEVFtPmAm9FiIVT/obv9rF/pS2mnag8zXIAQI=
@@ -1283,8 +1289,8 @@ github.com/projectdiscovery/ldapserver v1.0.2-0.20240219154113-dcc758ebc0cb h1:M
 github.com/projectdiscovery/ldapserver v1.0.2-0.20240219154113-dcc758ebc0cb/go.mod h1:vmgC0DTFCfoCLp0RAfsfYTZZan0QMVs+cmTbH6blfjk=
 github.com/projectdiscovery/machineid v0.0.0-20240226150047-2e2c51e35983 h1:ZScLodGSezQVwsQDtBSMFp72WDq0nNN+KE/5DHKY5QE=
 github.com/projectdiscovery/machineid v0.0.0-20240226150047-2e2c51e35983/go.mod h1:3G3BRKui7nMuDFAZKR/M2hiOLtaOmyukT20g88qRQjI=
-github.com/projectdiscovery/mapcidr v1.1.95 h1:SHbVanfeTkqCQ6WX/iYa1q8IlfgrPAubwV6AjAOxK5A=
-github.com/projectdiscovery/mapcidr v1.1.95/go.mod h1:ykv6dnTPeU+tigZjonpO8VG6UYieZbfIOtkRft3ynr8=
+github.com/projectdiscovery/mapcidr v1.1.96 h1:MHDKi7rxrTVYsQWzLxfYcop/EPYa3ldUjB+oMbmuLBI=
+github.com/projectdiscovery/mapcidr v1.1.96/go.mod h1:be4kT3vBPxsJeeu3e50/0ZuhhfPMNjxOCCEeD4bryqE=
 github.com/projectdiscovery/n3iwf v0.0.0-20230523120440-b8cd232ff1f5 h1:L/e8z8yw1pfT6bg35NiN7yd1XKtJap5Nk6lMwQ0RNi8=
 github.com/projectdiscovery/n3iwf v0.0.0-20230523120440-b8cd232ff1f5/go.mod h1:pGW2ncnTxTxHtP9wzcIJAB+3/NMp6IiuQWd2NK7K+oc=
 github.com/projectdiscovery/networkpolicy v0.1.26 h1:RxZJoOyDM/Ru4GNHmrlsjBHqWz0TFMchK35S2W3Suw8=
@@ -1297,8 +1303,8 @@ github.com/projectdiscovery/rdap v0.9.0 h1:wPhHx5pQ2QI+WGhyNb2PjhTl0NtB39Nk7YFZ9
 github.com/projectdiscovery/rdap v0.9.0/go.mod h1:zk4yrJFQ2Hy36Aqk+DvotYQxYAeALaCJ5ORySkff36Q=
 github.com/projectdiscovery/retryabledns v1.0.108 h1:47LYRW2LY/0cDnZQfUhoOHNxe9rNc9NQ9ZfNrV/GbyM=
 github.com/projectdiscovery/retryabledns v1.0.108/go.mod h1:j7H7K6JZePh9PeNleeRUtDSrkUKMpwDhZw3Ogewzio8=
-github.com/projectdiscovery/retryablehttp-go v1.0.127 h1:CzEkkWZXb48D8Vy1SvBZF/qjbjp5ILYMHE5M+T/xdf8=
-github.com/projectdiscovery/retryablehttp-go v1.0.127/go.mod h1:9OOZjJuo+2v5RCGvk1lLqt6lctNxLPzldb0yJOMoqR8=
+github.com/projectdiscovery/retryablehttp-go v1.0.128 h1:A8j3cUAQxWDDZFLI+fw8BOEx+lgb9HPYs5JKkt+TX4g=
+github.com/projectdiscovery/retryablehttp-go v1.0.128/go.mod h1:u69sqeVz5tZAEf63s61WWSu6KawhsJJvCfJgdAvTNJM=
 github.com/projectdiscovery/sarif v0.0.1 h1:C2Tyj0SGOKbCLgHrx83vaE6YkzXEVrMXYRGLkKCr/us=
 github.com/projectdiscovery/sarif v0.0.1/go.mod h1:cEYlDu8amcPf6b9dSakcz2nNnJsoz4aR6peERwV+wuQ=
 github.com/projectdiscovery/stringsutil v0.0.2 h1:uzmw3IVLJSMW1kEg8eCStG/cGbYYZAja8BH3LqqJXMA=
@@ -1311,8 +1317,8 @@ github.com/projectdiscovery/useragent v0.0.102 h1:Xfr8a7LQhIu0zeSz5gBxGCdyuqZbhk
 github.com/projectdiscovery/useragent v0.0.102/go.mod h1:DIfLRBKZ6dLhHRnMYkxdg6Jpu0kpE3pJlMG94dsIchY=
 github.com/projectdiscovery/utils v0.6.0 h1:rH4Haei7uHgqEq6pFGe8U+iD4PoBWUDB8LhoNxPawkk=
 github.com/projectdiscovery/utils v0.6.0/go.mod h1:NT7ExqILrDukgBFPPLBKQzSKYMBfecNcab7jT1bakRE=
-github.com/projectdiscovery/wappalyzergo v0.2.49 h1:hOoAzNoJ7R9mefy4HU3JKeJDzXSTGjRCCqoJAwebG+8=
-github.com/projectdiscovery/wappalyzergo v0.2.49/go.mod h1:kPzB+L3ISGO5m8u5fukjlF5FJFJ1NLV86emOx+k3AVU=
+github.com/projectdiscovery/wappalyzergo v0.2.50 h1:vPhnTE60PTFuU1oiDZwP+Wa+EWx3Zrx925z18dHL3Ec=
+github.com/projectdiscovery/wappalyzergo v0.2.50/go.mod h1:kPzB+L3ISGO5m8u5fukjlF5FJFJ1NLV86emOx+k3AVU=
 github.com/projectdiscovery/yamldoc-go v1.0.6 h1:GCEdIRlQjDux28xTXKszM7n3jlMf152d5nqVpVoetas=
 github.com/projectdiscovery/yamldoc-go v1.0.6/go.mod h1:R5lWrNzP+7Oyn77NDVPnBsxx2/FyQZBBkIAaSaCQFxw=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
diff --git a/pkg/catalog/config/nucleiconfig.go b/pkg/catalog/config/nucleiconfig.go
index e62dd37f..b74b9ad3 100644
--- a/pkg/catalog/config/nucleiconfig.go
+++ b/pkg/catalog/config/nucleiconfig.go
@@ -350,7 +350,7 @@ func (c *Config) IsDebugArgEnabled(arg string) bool {
 
 // parseDebugArgs from string
 func (c *Config) parseDebugArgs(data string) {
-	// use space as seperator instead of commas
+	// use space as separator instead of commas
 	tmp := strings.Fields(data)
 	for _, v := range tmp {
 		key := v
diff --git a/pkg/catalog/loader/remote_loader.go b/pkg/catalog/loader/remote_loader.go
index ccd5c27f..0455846e 100644
--- a/pkg/catalog/loader/remote_loader.go
+++ b/pkg/catalog/loader/remote_loader.go
@@ -97,7 +97,7 @@ func getRemoteContent(URL string, remoteTemplateDomainList []string, contentType
 		_ = response.Body.Close()
 	}()
 	if response.StatusCode < 200 || response.StatusCode > 299 {
-		return RemoteContent{Error: fmt.Errorf("get \"%s\": unexpect status %d", URL, response.StatusCode)}
+		return RemoteContent{Error: fmt.Errorf("get \"%s\": unexpected status %d", URL, response.StatusCode)}
 	}
 
 	scanner := bufio.NewScanner(response.Body)
diff --git a/pkg/fuzz/analyzers/time/time_delay.go b/pkg/fuzz/analyzers/time/time_delay.go
index d37b83e7..e22c9999 100644
--- a/pkg/fuzz/analyzers/time/time_delay.go
+++ b/pkg/fuzz/analyzers/time/time_delay.go
@@ -61,7 +61,7 @@ func checkTimingDependency(
 
 	var requestsSent []requestsSentMetadata
 	for requestsLeft > 0 {
-		isCorrelationPossible, delayRecieved, err := sendRequestAndTestConfidence(regression, highSleepTimeSeconds, requestSender, baselineDelay)
+		isCorrelationPossible, delayReceived, err := sendRequestAndTestConfidence(regression, highSleepTimeSeconds, requestSender, baselineDelay)
 		if err != nil {
 			return false, "", err
 		}
@@ -69,29 +69,29 @@ func checkTimingDependency(
 			return false, "", nil
 		}
 		// Check the delay is greater than baseline by seconds requested
-		if delayRecieved < baselineDelay+float64(highSleepTimeSeconds)*0.8 {
+		if delayReceived < baselineDelay+float64(highSleepTimeSeconds)*0.8 {
 			return false, "", nil
 		}
 		requestsSent = append(requestsSent, requestsSentMetadata{
 			delay:         highSleepTimeSeconds,
-			delayReceived: delayRecieved,
+			delayReceived: delayReceived,
 		})
 
-		isCorrelationPossibleSecond, delayRecievedSecond, err := sendRequestAndTestConfidence(regression, int(DefaultLowSleepTimeSeconds), requestSender, baselineDelay)
+		isCorrelationPossibleSecond, delayReceivedSecond, err := sendRequestAndTestConfidence(regression, int(DefaultLowSleepTimeSeconds), requestSender, baselineDelay)
 		if err != nil {
 			return false, "", err
 		}
 		if !isCorrelationPossibleSecond {
 			return false, "", nil
 		}
-		if delayRecievedSecond < baselineDelay+float64(DefaultLowSleepTimeSeconds)*0.8 {
+		if delayReceivedSecond < baselineDelay+float64(DefaultLowSleepTimeSeconds)*0.8 {
 			return false, "", nil
 		}
 		requestsLeft = requestsLeft - 2
 
 		requestsSent = append(requestsSent, requestsSentMetadata{
 			delay:         int(DefaultLowSleepTimeSeconds),
-			delayReceived: delayRecievedSecond,
+			delayReceived: delayReceivedSecond,
 		})
 	}
 
diff --git a/pkg/fuzz/dataformat/json.go b/pkg/fuzz/dataformat/json.go
index 99dd0430..5b6a1b95 100644
--- a/pkg/fuzz/dataformat/json.go
+++ b/pkg/fuzz/dataformat/json.go
@@ -12,7 +12,7 @@ import (
 // and not arrays
 //
 // TODO: Support arrays + other JSON oddities by
-// adding more attirbutes to the map[string]interface{}
+// adding more attributes to the map[string]interface{}
 type JSON struct{}
 
 var (
diff --git a/pkg/fuzz/frequency/tracker.go b/pkg/fuzz/frequency/tracker.go
index 063912b4..c7a630e3 100644
--- a/pkg/fuzz/frequency/tracker.go
+++ b/pkg/fuzz/frequency/tracker.go
@@ -21,14 +21,14 @@ import (
 // for parameters that are less likely to give results for a rule.
 type Tracker struct {
 	frequencies             gcache.Cache
-	paramOccurenceThreshold int
+	paramOccurrenceThreshold int
 
 	isDebug bool
 }
 
 const (
 	DefaultMaxTrackCount           = 10000
-	DefaultParamOccurenceThreshold = 10
+	DefaultParamOccurrenceThreshold = 10
 )
 
 type cacheItem struct {
@@ -38,7 +38,7 @@ type cacheItem struct {
 
 // New creates a new frequency tracker with a given maximum
 // number of params to track in LRU fashion with a max error threshold
-func New(maxTrackCount, paramOccurenceThreshold int) *Tracker {
+func New(maxTrackCount, paramOccurrenceThreshold int) *Tracker {
 	gc := gcache.New(maxTrackCount).ARC().Build()
 
 	var isDebug bool
@@ -48,7 +48,7 @@ func New(maxTrackCount, paramOccurenceThreshold int) *Tracker {
 	return &Tracker{
 		isDebug:                 isDebug,
 		frequencies:             gc,
-		paramOccurenceThreshold: paramOccurenceThreshold,
+		paramOccurrenceThreshold: paramOccurrenceThreshold,
 	}
 }
 
@@ -56,10 +56,10 @@ func (t *Tracker) Close() {
 	t.frequencies.Purge()
 }
 
-// MarkParameter marks a parameter as frequently occuring once.
+// MarkParameter marks a parameter as frequently occurring once.
 //
-// The logic requires a parameter to be marked as frequently occuring
-// multiple times before it's considered as frequently occuring.
+// The logic requires a parameter to be marked as frequently occurring
+// multiple times before it's considered as frequently occurring.
 func (t *Tracker) MarkParameter(parameter, target, template string) {
 	normalizedTarget := normalizeTarget(target)
 	key := getFrequencyKey(parameter, normalizedTarget, template)
@@ -81,7 +81,7 @@ func (t *Tracker) MarkParameter(parameter, target, template string) {
 	_ = t.frequencies.Set(key, existingCacheItemValue)
 }
 
-// IsParameterFrequent checks if a parameter is frequently occuring
+// IsParameterFrequent checks if a parameter is frequently occurring
 // in the input with no much results.
 func (t *Tracker) IsParameterFrequent(parameter, target, template string) bool {
 	normalizedTarget := normalizeTarget(target)
@@ -97,7 +97,7 @@ func (t *Tracker) IsParameterFrequent(parameter, target, template string) bool {
 	}
 	existingCacheItemValue := existingCacheItem.(*cacheItem)
 
-	if existingCacheItemValue.errors.Load() >= int32(t.paramOccurenceThreshold) {
+	if existingCacheItemValue.errors.Load() >= int32(t.paramOccurrenceThreshold) {
 		existingCacheItemValue.Do(func() {
 			gologger.Verbose().Msgf("[%s] Skipped %s from parameter for %s as found uninteresting %d times", template, parameter, target, existingCacheItemValue.errors.Load())
 		})
@@ -106,7 +106,7 @@ func (t *Tracker) IsParameterFrequent(parameter, target, template string) bool {
 	return false
 }
 
-// UnmarkParameter unmarks a parameter as frequently occuring. This carries
+// UnmarkParameter unmarks a parameter as frequently occurring. This carries
 // more weight and resets the frequency counter for the parameter causing
 // it to be checked again. This is done when results are found.
 func (t *Tracker) UnmarkParameter(parameter, target, template string) {
diff --git a/pkg/fuzz/parts.go b/pkg/fuzz/parts.go
index 7d0b51af..1b0835fa 100644
--- a/pkg/fuzz/parts.go
+++ b/pkg/fuzz/parts.go
@@ -136,7 +136,7 @@ func (rule *Rule) executePartComponentOnKV(input *ExecuteRuleInput, payload Valu
 				return qerr
 			}
 
-			// after building change back to original value to avoid repeating it in furthur requests
+			// after building change back to original value to avoid repeating it in further requests
 			if origKey != "" {
 				err = ruleComponent.SetValue(origKey, types.ToString(origValue)) // change back to previous value for temp
 				if err != nil {
diff --git a/pkg/installer/versioncheck.go b/pkg/installer/versioncheck.go
index f7764c73..8595bdfc 100644
--- a/pkg/installer/versioncheck.go
+++ b/pkg/installer/versioncheck.go
@@ -83,7 +83,7 @@ func UpdateIgnoreFile() error {
 }
 
 func doVersionCheck(isSDK bool) error {
-	// we use global retryablehttp client so its not immeditely gc'd if any references are held
+	// we use global retryablehttp client so its not immediately gc'd if any references are held
 	// and according our config we have idle connections which are shown as leaked by goleak in tests
 	// i.e we close all idle connections after our use and it doesn't affect any other part of the code
 	defer retryableHttpClient.HTTPClient.CloseIdleConnections()
diff --git a/pkg/js/CONTRIBUTE.md b/pkg/js/CONTRIBUTE.md
index 3608b173..e4c62d9d 100644
--- a/pkg/js/CONTRIBUTE.md
+++ b/pkg/js/CONTRIBUTE.md
@@ -9,7 +9,7 @@ The Very First before making any type of contribution to javascript runtime in n
 
 ## Documentation/Typo Contribution
 
-Most of Javascript API Reference documentation is auto-generated with help of code-generation and [jsdocgen](./devtools/jsdocgen/README.md) and hence any type of documentation contribution are always welcome and can be done by editing [javscript jsdoc](./generated/js/) files
+Most of Javascript API Reference documentation is auto-generated with help of code-generation and [jsdocgen](./devtools/jsdocgen/README.md) and hence any type of documentation contribution are always welcome and can be done by editing [javascript jsdoc](./generated/js/) files
 
 
 ## Improving Existing Libraries(aka node_modules)
@@ -33,7 +33,7 @@ Libraries/node_modules represent adding new protocol or something similar and sh
 
 ## Adding Helper Objects/Types/Functions
 
-Helper objects/types/functions can simply be understood as javascript utils to simplify writing javscript and reduce code duplication in javascript templates. Helper functions/objects are divided into two categories
+Helper objects/types/functions can simply be understood as javascript utils to simplify writing javascript and reduce code duplication in javascript templates. Helper functions/objects are divided into two categories
 
 ### javascript based helpers
 
@@ -47,7 +47,7 @@ go based helpers are written in go and can import any go library if required. Mi
 
 ### Updating / Publishing Docs
 
-Javscript Protocol Documentation is auto-generated using [jsdoc] and is hosted at [js-proto-docs](https://projectdiscovery.github.io/js-proto-docs/). To update documentation, please follow steps mentioned at [projectdiscovery/js-proto-docs](https://github.com/projectdiscovery/js-proto-docs)
+Javascript Protocol Documentation is auto-generated using [jsdoc] and is hosted at [js-proto-docs](https://projectdiscovery.github.io/js-proto-docs/). To update documentation, please follow steps mentioned at [projectdiscovery/js-proto-docs](https://github.com/projectdiscovery/js-proto-docs)
 
 
 ### Go Code Guidelines
@@ -60,7 +60,7 @@ Javscript Protocol Documentation is auto-generated using [jsdoc] and is hosted a
 		return false, protocolstate.ErrHostDenied.Msgf(host)
 	}
 ```
-3. Keep exported package clean. Do not keep unncessary global exports which the consumer of the API doesn't need to know about. Keep only user-exposed API public.
+3. Keep exported package clean. Do not keep unnecessary global exports which the consumer of the API doesn't need to know about. Keep only user-exposed API public.
 4. Use timeouts and context cancellation when calling Network related stuff. Also make sure to close your connections or provide a mechanism to the user of the API to do so.
 5. Always try to return single types from inside javascript with an error like `(IsRDP, error)` instead of returning multiple values `(name, version string, err error)`. The second one will get converted to an array is much harder for consumers to deal with. Instead, try to return `Structures` which will be accessible natively.
 
diff --git a/pkg/js/compiler/compiler.go b/pkg/js/compiler/compiler.go
index 3e8af509..adb36fe8 100644
--- a/pkg/js/compiler/compiler.go
+++ b/pkg/js/compiler/compiler.go
@@ -16,7 +16,7 @@ import (
 )
 
 var (
-	// ErrJSExecDeadline is the error returned when alloted time for script execution exceeds
+	// ErrJSExecDeadline is the error returned when allotted time for script execution exceeds
 	ErrJSExecDeadline = errkit.New("js engine execution deadline exceeded").SetKind(errkit.ErrKindDeadline).Build()
 )
 
diff --git a/pkg/js/compiler/pool.go b/pkg/js/compiler/pool.go
index a8b98b01..d8fa9696 100644
--- a/pkg/js/compiler/pool.go
+++ b/pkg/js/compiler/pool.go
@@ -214,7 +214,7 @@ func createNewRuntime() *goja.Runtime {
 	// by default import below modules every time
 	_ = runtime.Set("console", require.Require(runtime, console.ModuleName))
 
-	// Register embedded javacript helpers
+	// Register embedded javascript helpers
 	if err := global.RegisterNativeScripts(runtime); err != nil {
 		gologger.Error().Msgf("Could not register scripts: %s\n", err)
 	}
diff --git a/pkg/js/devtools/tsgen/parser.go b/pkg/js/devtools/tsgen/parser.go
index 9f7d81ed..0bf012d9 100644
--- a/pkg/js/devtools/tsgen/parser.go
+++ b/pkg/js/devtools/tsgen/parser.go
@@ -72,7 +72,7 @@ func (p *EntityParser) Parse() error {
 	for _, file := range p.syntax {
 		// Traverse the AST and find all relevant declarations
 		ast.Inspect(file, func(n ast.Node) bool {
-			// look for funtions and methods
+			// look for functions and methods
 			// and generate entities for them
 			fn, ok := n.(*ast.FuncDecl)
 			if ok {
diff --git a/pkg/js/generated/ts/mysql.ts b/pkg/js/generated/ts/mysql.ts
index bf5c8812..4007f057 100755
--- a/pkg/js/generated/ts/mysql.ts
+++ b/pkg/js/generated/ts/mysql.ts
@@ -64,7 +64,7 @@ export class MySQLClient {
     
 
     /**
-    * returns MySQLInfo when fingerpint is successful
+    * returns MySQLInfo when fingerprint is successful
     * @example
     * ```javascript
     * const mysql = require('nuclei/mysql');
diff --git a/pkg/js/global/helpers.go b/pkg/js/global/helpers.go
index 3df194d3..a51e3a46 100644
--- a/pkg/js/global/helpers.go
+++ b/pkg/js/global/helpers.go
@@ -41,7 +41,7 @@ func registerAdditionalHelpers(runtime *goja.Runtime) {
 
 func init() {
 	// these are dummy functions we use trigger documentation generation
-	// actual definations are in exports.js
+	// actual definitions are in exports.js
 	_ = gojs.RegisterFuncWithSignature(nil, gojs.FuncOpts{
 		Name: "to_json",
 		Signatures: []string{
diff --git a/pkg/js/libs/mysql/mysql.go b/pkg/js/libs/mysql/mysql.go
index c48c73a8..5e57aa66 100644
--- a/pkg/js/libs/mysql/mysql.go
+++ b/pkg/js/libs/mysql/mysql.go
@@ -127,7 +127,7 @@ type (
 	}
 )
 
-// returns MySQLInfo when fingerpint is successful
+// returns MySQLInfo when fingerprint is successful
 // @example
 // ```javascript
 // const mysql = require('nuclei/mysql');
diff --git a/pkg/js/libs/structs/smbexploit.js b/pkg/js/libs/structs/smbexploit.js
index 80f3b13c..aac76e9e 100644
--- a/pkg/js/libs/structs/smbexploit.js
+++ b/pkg/js/libs/structs/smbexploit.js
@@ -66,7 +66,7 @@ final.append(packet.bytes());
 
 console.log("Netbios", netbios.hex(), netbios.len());
 console.log("Header", header.hex(), header.len());
-console.log("Negotation", negotiation.hex(), negotiation.len());
+console.log("Negotiation", negotiation.hex(), negotiation.len());
 console.log("Packet", final.hex(), final.len());
 
 const c = require("nuclei/libnet");
diff --git a/pkg/output/output.go b/pkg/output/output.go
index f7909320..e18d2613 100644
--- a/pkg/output/output.go
+++ b/pkg/output/output.go
@@ -439,7 +439,7 @@ func getJSONLogRequestFromError(templatePath, input, requestType string, request
 			request.Attrs = slog.GroupValue(errX.Attrs()...)
 		}
 	}
-	// check if address slog attr is avaiable in error if set use it
+	// check if address slog attr is available in error if set use it
 	if val := errkit.GetAttrValue(requestErr, "address"); val.Any() != nil {
 		request.Address = val.String()
 	}
diff --git a/pkg/protocols/code/code.go b/pkg/protocols/code/code.go
index 92d951ba..4455f558 100644
--- a/pkg/protocols/code/code.go
+++ b/pkg/protocols/code/code.go
@@ -41,7 +41,7 @@ const (
 var (
 	// pythonEnvRegexCompiled is the compiled regex for python environment variables
 	pythonEnvRegexCompiled = regexp.MustCompile(pythonEnvRegex)
-	// ErrCodeExecutionDeadline is the error returned when alloted time for script execution exceeds
+	// ErrCodeExecutionDeadline is the error returned when allotted time for script execution exceeds
 	ErrCodeExecutionDeadline = errkit.New("code execution deadline exceeded").SetKind(errkit.ErrKindDeadline).Build()
 )
 
@@ -279,7 +279,7 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, dynamicVa
 			fmt.Fprintf(sb, "\n%v\n%v\n%v\n", dashes, "Command Output:", dashes)
 			sb.WriteString(gOutput.DebugData.String())
 			sb.WriteString("\n")
-			sb.WriteString("[WRN] Command Output here is stdout+sterr, in response variables they are seperate (use -v -svd flags for more details)")
+			sb.WriteString("[WRN] Command Output here is stdout+sterr, in response variables they are separate (use -v -svd flags for more details)")
 			return sb.String()
 		})
 	}
diff --git a/pkg/protocols/common/expressions/expressions.go b/pkg/protocols/common/expressions/expressions.go
index bd04cabf..30a73339 100644
--- a/pkg/protocols/common/expressions/expressions.go
+++ b/pkg/protocols/common/expressions/expressions.go
@@ -4,6 +4,7 @@ import (
 	"strings"
 
 	"github.com/Knetic/govaluate"
+	"github.com/projectdiscovery/gologger"
 
 	"github.com/projectdiscovery/nuclei/v3/pkg/operators/common/dsl"
 	"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/marker"
@@ -56,10 +57,12 @@ func evaluate(data string, base map[string]interface{}) (string, error) {
 		// turns expressions (either helper functions+base values or base values)
 		compiled, err := govaluate.NewEvaluableExpressionWithFunctions(expression, dsl.HelperFunctions)
 		if err != nil {
+			gologger.Warning().Msgf("Failed to compile expression '%s': %v", expression, err)
 			continue
 		}
 		result, err := compiled.Evaluate(base)
 		if err != nil {
+			gologger.Warning().Msgf("Failed to evaluate expression '%s': %v", expression, err)
 			continue
 		}
 		// replace incrementally
diff --git a/pkg/protocols/common/generators/generators.go b/pkg/protocols/common/generators/generators.go
index fbb7f155..6bda3134 100644
--- a/pkg/protocols/common/generators/generators.go
+++ b/pkg/protocols/common/generators/generators.go
@@ -75,7 +75,7 @@ type aggressionLevelToPayloads struct {
 
 // parsePayloadsWithAggression parses the payloads with the aggression level
 //
-// Three agression are supported -
+// Three aggression are supported -
 //   - low
 //   - medium
 //   - high
@@ -83,7 +83,7 @@ type aggressionLevelToPayloads struct {
 // low is the default level. If medium is specified, all templates from
 // low and medium are executed. Similarly with high, including all templates
 // from low, medium, high.
-func parsePayloadsWithAggression(name string, v map[interface{}]interface{}, agression string) (map[string]interface{}, error) {
+func parsePayloadsWithAggression(name string, v map[interface{}]interface{}, aggression string) (map[string]interface{}, error) {
 	payloadsLevels := &aggressionLevelToPayloads{}
 
 	for k, v := range v {
@@ -107,7 +107,7 @@ func parsePayloadsWithAggression(name string, v map[interface{}]interface{}, agr
 	}
 
 	payloads := make(map[string]interface{})
-	switch agression {
+	switch aggression {
 	case "low":
 		payloads[name] = payloadsLevels.Low
 	case "medium":
@@ -116,7 +116,7 @@ func parsePayloadsWithAggression(name string, v map[interface{}]interface{}, agr
 		payloads[name] = append(payloadsLevels.Low, payloadsLevels.Medium...)
 		payloads[name] = append(payloads[name].([]interface{}), payloadsLevels.High...)
 	default:
-		return nil, errors.Errorf("invalid aggression level %s specified for %s", agression, name)
+		return nil, errors.Errorf("invalid aggression level %s specified for %s", aggression, name)
 	}
 	return payloads, nil
 }
diff --git a/pkg/protocols/headless/engine/page_actions.go b/pkg/protocols/headless/engine/page_actions.go
index 47548046..a3126569 100644
--- a/pkg/protocols/headless/engine/page_actions.go
+++ b/pkg/protocols/headless/engine/page_actions.go
@@ -33,8 +33,8 @@ import (
 var (
 	errinvalidArguments = errkit.New("invalid arguments provided")
 	ErrLFAccessDenied   = errkit.New("Use -allow-local-file-access flag to enable local file access")
-	// ErrActionExecDealine is the error returned when alloted time for action execution exceeds
-	ErrActionExecDealine = errkit.New("headless action execution deadline exceeded").SetKind(errkit.ErrKindDeadline).Build()
+	// ErrActionExecDeadline is the error returned when allotted time for action execution exceeds
+	ErrActionExecDeadline = errkit.New("headless action execution deadline exceeded").SetKind(errkit.ErrKindDeadline).Build()
 )
 
 const (
@@ -824,7 +824,7 @@ func (p *Page) WaitEvent(act *Action, out ActionData) (func() error, error) {
 	// Just wait the event to happen
 	waitFunc := func() (err error) {
 		// execute actual wait event
-		ctx, cancel := context.WithTimeoutCause(context.Background(), maxDuration, ErrActionExecDealine)
+		ctx, cancel := context.WithTimeoutCause(context.Background(), maxDuration, ErrActionExecDeadline)
 		defer cancel()
 
 		err = contextutil.ExecFunc(ctx, p.page.WaitEvent(waitEvent))
diff --git a/pkg/protocols/http/build_request.go b/pkg/protocols/http/build_request.go
index 980573c9..567e73ca 100644
--- a/pkg/protocols/http/build_request.go
+++ b/pkg/protocols/http/build_request.go
@@ -210,7 +210,7 @@ func (r *requestGenerator) Make(ctx context.Context, input *contextargs.Context,
 	// optionvars are vars passed from CLI or env variables
 	optionVars := generators.BuildPayloadFromOptions(r.request.options.Options)
 
-	variablesMap, interactURLs := r.options.Variables.EvaluateWithInteractsh(generators.MergeMaps(defaultReqVars, optionVars), r.options.Interactsh)
+	variablesMap, interactURLs := r.options.Variables.EvaluateWithInteractsh(generators.MergeMaps(defaultReqVars, optionVars, dynamicValues), r.options.Interactsh)
 	if len(interactURLs) > 0 {
 		r.interactshURLs = append(r.interactshURLs, interactURLs...)
 	}
diff --git a/pkg/protocols/http/request.go b/pkg/protocols/http/request.go
index 37c78eac..9698b4ad 100644
--- a/pkg/protocols/http/request.go
+++ b/pkg/protocols/http/request.go
@@ -59,9 +59,9 @@ const (
 
 var (
 	MaxBodyRead = 10 * unitutils.Mega
-	// ErrMissingVars is error occured when variables are missing
+	// ErrMissingVars is error occurred when variables are missing
 	ErrMissingVars = errkit.New("stop execution due to unresolved variables").SetKind(nucleierr.ErrTemplateLogic).Build()
-	// ErrHttpEngineRequestDeadline is error occured when request deadline set by http request engine is exceeded
+	// ErrHttpEngineRequestDeadline is error occurred when request deadline set by http request engine is exceeded
 	ErrHttpEngineRequestDeadline = errkit.New("http request engine deadline exceeded").SetKind(errkit.ErrKindDeadline).Build()
 )
 
@@ -150,7 +150,7 @@ func (request *Request) executeRaceRequest(input *contextargs.Context, previous
 
 	// look for unresponsive hosts and cancel inflight requests as well
 	spmHandler.SetOnResultCallback(func(err error) {
-		// marks thsi host as unresponsive if applicable
+		// marks this host as unresponsive if applicable
 		request.markHostError(input, err)
 		if request.isUnresponsiveAddress(input) {
 			// stop all inflight requests
@@ -203,7 +203,7 @@ func (request *Request) executeParallelHTTP(input *contextargs.Context, dynamicV
 	}
 
 	// Stop-at-first-match logic while executing requests
-	// parallely using threads
+	// parallelly using threads
 	shouldStop := (request.options.Options.StopAtFirstMatch || request.StopAtFirstMatch || request.options.StopAtFirstMatch)
 
 	ctx, cancel := context.WithCancel(context.Background())
@@ -232,7 +232,7 @@ func (request *Request) executeParallelHTTP(input *contextargs.Context, dynamicV
 
 	// look for unresponsive hosts and cancel inflight requests as well
 	spmHandler.SetOnResultCallback(func(err error) {
-		// marks thsi host as unresponsive if applicable
+		// marks this host as unresponsive if applicable
 		request.markHostError(input, err)
 		if request.isUnresponsiveAddress(input) {
 			// stop all inflight requests
@@ -390,7 +390,7 @@ func (request *Request) executeTurboHTTP(input *contextargs.Context, dynamicValu
 	maxWorkers := max(pipeOptions.MaxPendingRequests, defaultMaxWorkers)
 
 	// Stop-at-first-match logic while executing requests
-	// parallely using threads
+	// parallelly using threads
 	shouldStop := (request.options.Options.StopAtFirstMatch || request.StopAtFirstMatch || request.options.StopAtFirstMatch)
 
 	ctx, cancel := context.WithCancel(context.Background())
@@ -419,7 +419,7 @@ func (request *Request) executeTurboHTTP(input *contextargs.Context, dynamicValu
 
 	// look for unresponsive hosts and cancel inflight requests as well
 	spmHandler.SetOnResultCallback(func(err error) {
-		// marks thsi host as unresponsive if applicable
+		// marks this host as unresponsive if applicable
 		request.markHostError(input, err)
 		if request.isUnresponsiveAddress(input) {
 			// stop all inflight requests
@@ -953,7 +953,7 @@ func (request *Request) executeRequest(input *contextargs.Context, generatedRequ
 		}
 	})
 
-	// evaluate responses continiously until first redirect request in reverse order
+	// evaluate responses continuously until first redirect request in reverse order
 	for respChain.Has() {
 		// fill buffers, read response body and reuse connection
 		if err := respChain.Fill(); err != nil {
diff --git a/pkg/protocols/http/request_annotations.go b/pkg/protocols/http/request_annotations.go
index 1d01f8c9..217e21a3 100644
--- a/pkg/protocols/http/request_annotations.go
+++ b/pkg/protocols/http/request_annotations.go
@@ -31,12 +31,12 @@ var (
 	reOnceAnnotation = regexp.MustCompile(`(?m)^@once\s*$`)
 
 	// ErrTimeoutAnnotationDeadline is the error returned when a specific amount of time was exceeded for a request
-	// which was alloted using @timeout annotation this usually means that vulnerability was not found
+	// which was allotted using @timeout annotation this usually means that vulnerability was not found
 	// in rare case it could also happen due to network congestion
 	// the assigned class is TemplateLogic since this in almost every case means that server is not vulnerable
 	ErrTimeoutAnnotationDeadline = errkit.New("timeout annotation deadline exceeded").SetKind(nucleierr.ErrTemplateLogic).Build()
 	// ErrRequestTimeoutDeadline is the error returned when a specific amount of time was exceeded for a request
-	// this happens when the request execution exceeds alloted time
+	// this happens when the request execution exceeds allotted time
 	ErrRequestTimeoutDeadline = errkit.New("request timeout deadline exceeded when notimeout is set").SetKind(errkit.ErrKindDeadline).Build()
 )
 
diff --git a/pkg/protocols/network/network.go b/pkg/protocols/network/network.go
index 4a5088f6..16af0362 100644
--- a/pkg/protocols/network/network.go
+++ b/pkg/protocols/network/network.go
@@ -59,7 +59,7 @@ type Request struct {
 	//   Inputs contains inputs for the network socket
 	Inputs []*Input `yaml:"inputs,omitempty" json:"inputs,omitempty" jsonschema:"title=inputs for the network request,description=Inputs contains any input/output for the current request"`
 	// description: |
-	//   Port is the port to send network requests to. this acts as default port but is overriden if target/input contains
+	//   Port is the port to send network requests to. this acts as default port but is overridden if target/input contains
 	// non-http(s) ports like 80,8080,8081 etc
 	Port string `yaml:"port,omitempty" json:"port,omitempty" jsonschema:"title=port to send requests to,description=Port to send network requests to,oneof_type=string;integer"`
 
diff --git a/pkg/protocols/protocols.go b/pkg/protocols/protocols.go
index c3ee5c19..69a8b7be 100644
--- a/pkg/protocols/protocols.go
+++ b/pkg/protocols/protocols.go
@@ -336,7 +336,7 @@ type Request interface {
 type OutputEventCallback func(result *output.InternalWrappedEvent)
 
 func MakeDefaultResultEvent(request Request, wrapped *output.InternalWrappedEvent) []*output.ResultEvent {
-	// Note: operator result is generated if something was succesfull match/extract/dynamic-extract
+	// Note: operator result is generated if something was successful match/extract/dynamic-extract
 	// but results should not be generated if
 	// 1. no match was found and some dynamic values were extracted
 	// 2. if something was extracted (matchers exist but no match was found)
diff --git a/pkg/reporting/trackers/linear/jsonutil/jsonutil.go b/pkg/reporting/trackers/linear/jsonutil/jsonutil.go
index d3b8ca5f..1bb87eaa 100644
--- a/pkg/reporting/trackers/linear/jsonutil/jsonutil.go
+++ b/pkg/reporting/trackers/linear/jsonutil/jsonutil.go
@@ -41,7 +41,7 @@ func UnmarshalGraphQL(data []byte, v any) error {
 	}
 }
 
-// decoder is a JSON decoder that performs custom unmarshaling behavior
+// decoder is a JSON decoder that performs custom unmarshalling behavior
 // for GraphQL query data structures. It's implemented on top of a JSON tokenizer.
 type decoder struct {
 	tokenizer interface {
@@ -54,7 +54,7 @@ type decoder struct {
 	// Stacks of values where to unmarshal.
 	// The top of each stack is the reflect.Value where to unmarshal next JSON value.
 	//
-	// The reason there's more than one stack is because we might be unmarshaling
+	// The reason there's more than one stack is because we might be unmarshalling
 	// a single JSON value into multiple GraphQL fragments or embedded structs, so
 	// we keep track of them all.
 	vs [][]reflect.Value
diff --git a/pkg/scan/scan_context.go b/pkg/scan/scan_context.go
index 51b98007..70ac8770 100644
--- a/pkg/scan/scan_context.go
+++ b/pkg/scan/scan_context.go
@@ -65,7 +65,7 @@ func (s *ScanContext) GenerateResult() []*output.ResultEvent {
 	return s.results
 }
 
-// LogEvent logs events to all events and triggeres any callbacks
+// LogEvent logs events to all events and triggers any callbacks
 func (s *ScanContext) LogEvent(e *output.InternalWrappedEvent) {
 	s.m.Lock()
 	defer s.m.Unlock()
@@ -88,7 +88,7 @@ func (s *ScanContext) LogEvent(e *output.InternalWrappedEvent) {
 	s.results = append(s.results, e.Results...)
 }
 
-// LogError logs error to all events and triggeres any callbacks
+// LogError logs error to all events and triggers any callbacks
 func (s *ScanContext) LogError(err error) {
 	s.m.Lock()
 	defer s.m.Unlock()
diff --git a/pkg/templates/compile.go b/pkg/templates/compile.go
index a9730043..02aa3f23 100644
--- a/pkg/templates/compile.go
+++ b/pkg/templates/compile.go
@@ -32,7 +32,7 @@ import (
 var (
 	ErrCreateTemplateExecutor          = errors.New("cannot create template executer")
 	ErrIncompatibleWithOfflineMatching = errors.New("template can't be used for offline matching")
-	// track how many templates are verfied and by which signer
+	// track how many templates are verified and by which signer
 	SignatureStats = map[string]*atomic.Uint64{}
 )
 
diff --git a/pkg/templates/template_sign.go b/pkg/templates/template_sign.go
index 9e46769f..4cd94f9f 100644
--- a/pkg/templates/template_sign.go
+++ b/pkg/templates/template_sign.go
@@ -40,7 +40,7 @@ func UseOptionsForSigner(opts *types.Options) {
 // New Signer/Verification logic requires it to load content of file references
 // and this is done respecting sandbox restrictions to avoid any security issues
 // AllowLocalFileAccess is a function that allows local file access by disabling sandbox restrictions
-// and **MUST** be called before signing / verifying any templates for intialization
+// and **MUST** be called before signing / verifying any templates for initialization
 func TemplateSignerLFA() {
 	defaultOpts.AllowLocalFileAccess = true
 }
diff --git a/pkg/templates/templates_doc.go b/pkg/templates/templates_doc.go
index c6b2186e..44787237 100644
--- a/pkg/templates/templates_doc.go
+++ b/pkg/templates/templates_doc.go
@@ -1402,7 +1402,7 @@ func init() {
 	NETWORKRequestDoc.Fields[6].Name = "port"
 	NETWORKRequestDoc.Fields[6].Type = "string"
 	NETWORKRequestDoc.Fields[6].Note = ""
-	NETWORKRequestDoc.Fields[6].Description = "description: |\n   Port is the port to send network requests to. this acts as default port but is overriden if target/input contains\n non-http(s) ports like 80,8080,8081 etc"
+	NETWORKRequestDoc.Fields[6].Description = "description: |\n   Port is the port to send network requests to. this acts as default port but is overridden if target/input contains\n non-http(s) ports like 80,8080,8081 etc"
 	NETWORKRequestDoc.Fields[6].Comments[encoder.LineComment] = " description: |"
 	NETWORKRequestDoc.Fields[7].Name = "exclude-ports"
 	NETWORKRequestDoc.Fields[7].Type = "string"
@@ -2107,8 +2107,8 @@ func init() {
 	JAVASCRIPTRequestDoc.Fields[7].Name = "threads"
 	JAVASCRIPTRequestDoc.Fields[7].Type = "int"
 	JAVASCRIPTRequestDoc.Fields[7].Note = ""
-	JAVASCRIPTRequestDoc.Fields[7].Description = "Payload concurreny i.e threads for sending requests."
-	JAVASCRIPTRequestDoc.Fields[7].Comments[encoder.LineComment] = "Payload concurreny i.e threads for sending requests."
+	JAVASCRIPTRequestDoc.Fields[7].Description = "Payload concurrency i.e threads for sending requests."
+	JAVASCRIPTRequestDoc.Fields[7].Comments[encoder.LineComment] = "Payload concurrency i.e threads for sending requests."
 
 	JAVASCRIPTRequestDoc.Fields[7].AddExample("Send requests using 10 concurrent threads", 10)
 	JAVASCRIPTRequestDoc.Fields[8].Name = "payloads"
diff --git a/pkg/templates/workflows.go b/pkg/templates/workflows.go
index 2f1881cb..ea07f7e1 100644
--- a/pkg/templates/workflows.go
+++ b/pkg/templates/workflows.go
@@ -104,7 +104,7 @@ func parseWorkflowTemplate(workflow *workflows.WorkflowTemplate, preprocessor Pr
 				}
 				continue
 			} else if !template.Verified {
-				// unverfied code templates are not allowed in workflows
+				// unverified code templates are not allowed in workflows
 				gologger.Warning().Msgf("skipping unverified code template from workflow: %v\n", path)
 				continue
 			}
diff --git a/pkg/tmplexec/README.md b/pkg/tmplexec/README.md
index 26e80daf..10c1b5b0 100644
--- a/pkg/tmplexec/README.md
+++ b/pkg/tmplexec/README.md
@@ -1,6 +1,6 @@
 # tmplexec
 
-tmplexec also known as template executer executes template it is different from `protocols` package which only contains logic within the scope of one protocol. tmplexec is resposible for executing `Template` with defined logic. with introduction of `multi protocol` and `flow` templates (deprecated package protocols/common/executer) did not seem appropriate/helpful anymore as it is outside of protocol scope and deals with execution of template which can contain 1 requests , or multiple requests of same protocol or multiple requests of different protocols. tmplexec is responsible for executing template and handling all logic related to it.
+tmplexec also known as template executer executes template it is different from `protocols` package which only contains logic within the scope of one protocol. tmplexec is responsible for executing `Template` with defined logic. with introduction of `multi protocol` and `flow` templates (deprecated package protocols/common/executer) did not seem appropriate/helpful anymore as it is outside of protocol scope and deals with execution of template which can contain 1 requests , or multiple requests of same protocol or multiple requests of different protocols. tmplexec is responsible for executing template and handling all logic related to it.
 
 ## Engine/Backends
 
diff --git a/pkg/tmplexec/flow/README.md b/pkg/tmplexec/flow/README.md
index 0b4fc498..f208f742 100644
--- a/pkg/tmplexec/flow/README.md
+++ b/pkg/tmplexec/flow/README.md
@@ -114,7 +114,7 @@ To better understand orchestration we can try to build a template for vhost enum
 
 **for basic vhost enumeration a template should** 
 - do a PTR lookup for given ip
-- get SSL ceritificate for given ip (i.e tls-grab)
+- get SSL certificate for given ip (i.e tls-grab)
   - extract subject_cn from certificate
   - extract subject_alt_names(SAN) from certificate
   - filter out wildcard prefix from above values
@@ -316,4 +316,4 @@ This section contains a brief description of all nuclei JS bindings and their us
   And that's it , this automatically converts any slice/array to map and removes duplicates from it and returns a slice/array of unique values
 
 ------
-> Similar to DSL helper functions . we can either use built in functions available with `Javscript (ECMAScript 5.1)` or use DSL helper functions and its upto user to decide which one to uses
\ No newline at end of file
+> Similar to DSL helper functions . we can either use built in functions available with `Javascript (ECMAScript 5.1)` or use DSL helper functions and its upto user to decide which one to uses
\ No newline at end of file
diff --git a/pkg/tmplexec/multiproto/multi.go b/pkg/tmplexec/multiproto/multi.go
index ef029861..62cf79c8 100644
--- a/pkg/tmplexec/multiproto/multi.go
+++ b/pkg/tmplexec/multiproto/multi.go
@@ -66,7 +66,7 @@ func (m *MultiProtocol) ExecuteWithResults(ctx *scan.ScanContext) error {
 
 	// template context: contains values extracted using `internal` extractor from previous protocols
 	// these values are extracted from each protocol in queue and are passed to next protocol in queue
-	// instead of adding seperator field to handle such cases these values are appended to `dynamicValues` (which are meant to be used in workflows)
+	// instead of adding separator field to handle such cases these values are appended to `dynamicValues` (which are meant to be used in workflows)
 	// this makes it possible to use multi protocol templates in workflows
 	// Note: internal extractor values take precedence over dynamicValues from workflows (i.e other templates in workflow)
 
diff --git a/pkg/types/nucleierr/kinds.go b/pkg/types/nucleierr/kinds.go
index 9042beaa..1594d8f8 100644
--- a/pkg/types/nucleierr/kinds.go
+++ b/pkg/types/nucleierr/kinds.go
@@ -7,7 +7,7 @@ import (
 )
 
 var (
-	// ErrTemplateLogic are errors that occured due to missing variable or something similar in template logic
+	// ErrTemplateLogic are errors that occurred due to missing variable or something similar in template logic
 	// so this is more of a virtual error that is expected due to template logic
 	ErrTemplateLogic = errkit.NewPrimitiveErrKind("TemplateLogic", "Error expected due to template logic", isTemplateLogicKind)
 )
diff --git a/pkg/utils/json/doc.go b/pkg/utils/json/doc.go
index 6cee2e74..56367ebf 100644
--- a/pkg/utils/json/doc.go
+++ b/pkg/utils/json/doc.go
@@ -6,7 +6,7 @@
 // implementation.
 //
 // This package acts as a wrapper around the underlying JSON APIs, offering
-// standard operations such as marshaling, unmarshaling, and working with JSON
+// standard operations such as marshaling, unmarshalling, and working with JSON
 // encoders/decoders. It maintains compatibility with the standard encoding/json
 // interfaces while delivering improved performance when possible.
 //



Test patch:
diff --git a/pkg/input/formats/testdata/openapi.yaml b/pkg/input/formats/testdata/openapi.yaml
index 93a37df7..ab095f7e 100644
--- a/pkg/input/formats/testdata/openapi.yaml
+++ b/pkg/input/formats/testdata/openapi.yaml
@@ -131,7 +131,7 @@ paths:
         required: true
       responses:
         '200':
-          description: Sucessfully created user
+          description: Successfully created user
           content:
             application/json:
               schema:
@@ -170,7 +170,7 @@ paths:
         required: true
       responses:
         '200':
-          description: Sucessfully logged in user
+          description: Successfully logged in user
           content:
             application/json:
                 schema:
@@ -262,7 +262,7 @@ paths:
             example: 'name1'
       responses:
         '200':
-          description: Sucessfully deleted user
+          description: Successfully deleted user
           content:
             application/json:
               schema:
@@ -331,7 +331,7 @@ paths:
         required: true
       responses:
         '204':
-          description: Sucessfully updated user email
+          description: Successfully updated user email
           content: {}
         '400':
           description: Invalid request
@@ -389,7 +389,7 @@ paths:
         required: true
       responses:
         '204':
-          description: Sucessfully updated users password
+          description: Successfully updated users password
           content: {}
         '400':
           description: Invalid request
@@ -475,7 +475,7 @@ paths:
         required: true
       responses:
         '200':
-          description: Sucessfully added a book
+          description: Successfully added a book
           content:
             application/json:
               schema:
diff --git a/pkg/protocols/headless/engine/page_actions_test.go b/pkg/protocols/headless/engine/page_actions_test.go
index ec16b9ed..88440a2d 100644
--- a/pkg/protocols/headless/engine/page_actions_test.go
+++ b/pkg/protocols/headless/engine/page_actions_test.go
@@ -645,7 +645,7 @@ func testHeadless(t *testing.T, actions []*Action, timeout time.Duration, handle
 	t.Helper()
 
 	lfa := envutil.GetEnvOrDefault("LOCAL_FILE_ACCESS", true)
-	rna := envutil.GetEnvOrDefault("RESTRICED_LOCAL_NETWORK_ACCESS", false)
+	rna := envutil.GetEnvOrDefault("RESTRICTED_LOCAL_NETWORK_ACCESS", false)
 
 	opts := &types.Options{AllowLocalFileAccess: lfa, RestrictLocalNetworkAccess: rna}
 
@@ -736,9 +736,9 @@ func TestBlockedHeadlessURLS(t *testing.T) {
 		"fTP://example.com:21\r\n",
 		"ftp://example.com:21",
 		"chrome://settings",
-		"	chROme://version",
+		"	chRSome://version",
 		"chrome-extension://version\r",
-		"	chrOme-EXTension://settings",
+		"	chrSome-EXTension://settings",
 		"view-source:file:/etc/hosts",
 	}