pompelmi 0.29.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,11 +34,8 @@
34
34
  <br/>
35
35
  <a href="https://www.producthunt.com/products/pompelmi"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1010722&theme=light" alt="pompelmi - Secure File Upload Scanning for Node.js | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
36
36
  <br/>
37
- <a href="https://www.detectionengineering.net/p/det-eng-weekly-issue-124-the-defcon"><img alt="Featured in Detection Engineering Weekly #124" src="https://img.shields.io/badge/featured-Detection%20Engineering%20Weekly-0A84FF?logo=substack"></a>
38
- <a href="https://nodeweekly.com/issues/594"><img alt="Featured in Node Weekly #594" src="https://img.shields.io/badge/featured-Node%20Weekly%20%23594-FF6600?logo=node.js"></a>
39
- <a href="https://bytes.dev/archives/429"><img alt="Featured in Bytes #429" src="https://img.shields.io/badge/featured-Bytes%20%23429-111111"></a>
40
- <a href="https://app.daily.dev/posts/pompelmi"><img alt="Featured on daily.dev" src="https://img.shields.io/badge/featured-daily.dev-CE3DF3?logo=dailydotdev"></a>
41
- <a href="https://dev.to/sonotommy/secure-nodejs-file-uploads-in-minutes-with-pompelmi-3jfe"><img alt="Featured on DEV.to" src="https://img.shields.io/badge/featured-DEV.to-0A0A0A?logo=devdotto"></a>
37
+ <a href="https://www.helpnetsecurity.com/2026/02/02/pompelmi-open-source-secure-file-upload-scanning-node-js/"><img alt="Featured on HelpNet Security" src="https://img.shields.io/badge/🔒_FEATURED-HelpNet%20Security-FF6B35?style=for-the-badge"></a>
38
+ <a href="https://snyk.io/test/github/pompelmi/pompelmi"><img alt="Secured by Snyk" src="https://img.shields.io/badge/🛡️_SECURED_BY-Snyk-4C4A73?style=for-the-badge&logo=snyk"></a>
42
39
  <br/>
43
40
  <a href="https://github.com/sorrycc/awesome-javascript"><img alt="Mentioned in Awesome JavaScript" src="https://awesome.re/mentioned-badge.svg"></a>
44
41
  <a href="https://github.com/dzharii/awesome-typescript"><img alt="Mentioned in Awesome TypeScript" src="https://awesome.re/mentioned-badge-flat.svg"></a>
@@ -58,13 +55,11 @@
58
55
  </p>
59
56
 
60
57
  <p align="center">
61
- Scan files before they hit disk • Keep user data private • Zero cloud dependencies
58
+ Scan files before they hit disk • <strong>Keep user data private</strong><strong>Zero cloud dependencies</strong>
62
59
  </p>
63
60
 
64
61
  ---
65
62
 
66
- ---
67
-
68
63
  <!-- Badges Section -->
69
64
  <p align="center">
70
65
  <a href="https://www.npmjs.com/package/pompelmi"><img alt="npm version" src="https://img.shields.io/npm/v/pompelmi?label=version&color=0a7ea4&logo=npm"></a>
@@ -108,7 +103,7 @@
108
103
 
109
104
  ## 🎬 Demo
110
105
 
111
- > *(Demo GIF coming soon — showing Express + pompelmi scanning a file upload)*
106
+ ![Pompelmi Demo](./assets/malware-detection-node-demo.gif)
112
107
 
113
108
  **Want to try it now?** Check out our [live examples](./examples/) or install and run locally:
114
109
 
@@ -122,8 +117,8 @@ npm i pompelmi @pompelmi/express-middleware
122
117
 
123
118
  **pompelmi** provides enterprise-grade file scanning for Node.js applications:
124
119
 
125
- - **🔒 Privacy-First Architecture** — All scanning happens in-process. No cloud calls, no data leaks. Your files never leave your infrastructure.
126
- - **⚡ Lightning Fast** — In-process scanning with zero network latency. Configurable concurrency for high-throughput scenarios.
120
+ - **🔒 Privacy-First Architecture** — All scanning happens in-process. **No cloud calls, no data leaks.** Your files never leave your infrastructure.
121
+ - **⚡ Lightning Fast** — In-process scanning with **zero network latency**. Configurable concurrency for high-throughput scenarios.
127
122
  - **🧩 Composable Scanners** — Mix heuristics + signatures; set `stopOn` and timeouts. Bring your own YARA rules.
128
123
  - **📦 Deep ZIP Inspection** — Traversal/bomb guards, polyglot & macro hints, nested archive scanning with configurable depth limits.
129
124
  - **🔌 Framework Adapters** — Drop-in middleware for Express, Koa, Fastify, Next.js, Nuxt/Nitro, and **NestJS** with first-class TypeScript support.
@@ -135,28 +130,75 @@ npm i pompelmi @pompelmi/express-middleware
135
130
 
136
131
  ---
137
132
 
133
+ ## ⚡ Quick Start
134
+
135
+ Get secure file upload scanning running in **under 5 minutes**.
136
+
137
+ ### Express Integration
138
+
139
+ ```ts
140
+ import express from 'express';
141
+ import multer from 'multer';
142
+ import { createUploadGuard } from '@pompelmi/express-middleware';
143
+ import { CommonHeuristicsScanner, createZipBombGuard, composeScanners } from 'pompelmi';
144
+
145
+ const app = express();
146
+ const upload = multer({ storage: multer.memoryStorage() });
147
+
148
+ // Configure your security policy
149
+ const scanner = composeScanners(
150
+ [
151
+ ['zipGuard', createZipBombGuard({ maxEntries: 512, maxCompressionRatio: 12 })],
152
+ ['heuristics', CommonHeuristicsScanner],
153
+ ],
154
+ { parallel: false, stopOn: 'suspicious', timeoutMsPerScanner: 1500 }
155
+ );
156
+
157
+ app.post('/upload',
158
+ upload.single('file'),
159
+ createUploadGuard({
160
+ includeExtensions: ['pdf', 'zip', 'png', 'jpg'],
161
+ allowedMimeTypes: ['application/pdf', 'application/zip', 'image/png', 'image/jpeg'],
162
+ maxFileSizeBytes: 20 * 1024 * 1024, // 20MB
163
+ scanner,
164
+ failClosed: true
165
+ }),
166
+ (req, res) => {
167
+ // File is safe - proceed with your logic
168
+ res.json({ success: true, message: 'File uploaded successfully' });
169
+ }
170
+ );
171
+
172
+ app.listen(3000, () => console.log('🚀 Server running on http://localhost:3000'));
173
+ ```
174
+
175
+ **Test it:**
176
+ ```bash
177
+ curl -X POST http://localhost:3000/upload -F "file=@test.pdf"
178
+ ```
179
+
180
+ ✅ **Done!** Your app now blocks malicious uploads before they hit disk.
181
+
182
+ 👉 **[Explore full documentation →](https://pompelmi.github.io/pompelmi/)** | **[See more examples →](./examples/)**
183
+
184
+ ---
185
+
138
186
  ## Table of Contents
139
187
 
140
- - [Overview](#overview)
141
- - [Highlights](#highlights)
188
+ - [Features](#features)
189
+ - [Quick Start](#quick-start)
142
190
  - [Why pompelmi](#why-pompelmi)
143
- - [How it compares](#how-it-compares)
144
- - [What Developers Say](#what-developers-say)
145
- - [What Makes pompelmi Special](#what-makes-pompelmi-special)
146
191
  - [Use Cases](#use-cases)
147
192
  - [Installation](#installation)
148
- - [Quick Start](#quick-start)
149
- - [Minimal Node usage](#minimal-node-usage)
150
- - [Express](#express)
151
- - [Koa](#koa)
152
- - [Next.js (App Router)](#nextjs-app-router)
193
+ - [Getting Started](#getting-started)
194
+ - [Code Examples](#code-examples)
153
195
  - [Adapters](#adapters)
154
196
  - [GitHub Action](#github-action)
155
197
  - [Configuration](#configuration)
156
198
  - [YARA Getting Started](#yara-getting-started)
157
199
  - [Security Notes](#security-notes)
158
-
159
- - [Testing & Development](#testing--development)
200
+ - [Production Checklist](#production-checklist)
201
+ - [Community & Recognition](#community--recognition)
160
202
  - [FAQ](#faq)
161
203
  - [Contributing](#contributing)
162
204
  - [License](#license)
@@ -182,55 +224,11 @@ pompelmi documentation is available in multiple languages to help developers wor
182
224
 
183
225
  ---
184
226
 
185
- ## 🚀 Overview
186
-
187
- **pompelmi** scans untrusted file uploads **before** they hit disk. A tiny, TypeScript-first toolkit for Node.js with composable scanners, deep ZIP inspection, and optional signature engines.
188
-
189
- ### 🎯 Key Features
190
-
191
- **🔒 Private by design** — no outbound calls; bytes never leave your process
192
-
193
- **🧩 Composable scanners** — mix heuristics + signatures; set `stopOn` and timeouts
194
-
195
- **📦 ZIP hardening** — traversal/bomb guards, polyglot & macro hints
196
-
197
- **🔌 Drop-in adapters** — Express, Koa, Fastify, Next.js, Nuxt/Nitro, **NestJS**
198
-
199
- **🌊 Stream-based scanning** — memory-efficient processing with configurable buffer limits
200
-
201
- **⚙️ CLI for CI/CD** — standalone command-line tool for scanning files and directories
202
-
203
- **🔍 Polyglot detection** — advanced magic bytes analysis and embedded script detection
204
-
205
- **📘 Typed & tiny** — modern TS, minimal surface, tree-shakeable
206
-
207
- **⚡ Zero dependencies** — core library has minimal deps, fast installation
208
-
209
- ## ✨ Highlights
210
-
211
- **🛡️ Block risky uploads early** — classify uploads as _clean_, _suspicious_, or _malicious_ and stop them at the edge.
212
-
213
- **✅ Real guards** — extension allow‑list, server‑side MIME sniff (magic bytes), per‑file size caps, and **deep ZIP** traversal with anti‑bomb limits.
214
-
215
- **🔍 Built‑in scanners** — drop‑in **CommonHeuristicsScanner** (PDF risky actions, Office macros, PE header) and **Zip‑bomb Guard**; add your own or YARA via a tiny `{ scan(bytes) }` contract.
216
-
217
- **🔬 Polyglot & embedded script detection** — advanced magic bytes analysis detects mixed-format files and embedded scripts with **30+ file signatures**.
218
-
219
- **🌊 Memory-efficient streaming** — scan large files without loading them entirely into memory with automatic stream routing.
220
-
221
- **⚙️ Compose scanning** — run multiple scanners in parallel or sequentially with timeouts and short‑circuiting via `composeScanners()`.
222
-
223
- **🏗️ Framework integrations** — native modules for **NestJS**, Express, Koa, Next.js, Nuxt/Nitro, and Fastify with first-class TypeScript support.
224
-
225
- **🔧 Production-ready CLI** — standalone tool for CI/CD pipelines with watch mode, multiple output formats (JSON, table, minimal).
226
-
227
- **☁️ Zero cloud** — scans run in‑process. Keep bytes private. Perfect for GDPR/HIPAA compliance.
228
-
229
- **👨‍💻 DX first** — TypeScript types, ESM/CJS builds, tiny API, adapters for popular web frameworks.
227
+ ## 🧠 Why pompelmi?
230
228
 
231
- > **SEO Keywords:** file upload security, malware detection, virus scanner, Node.js security, Express middleware, YARA integration, ZIP bomb protection, file validation, upload sanitization, threat detection, security scanner, antivirus Node.js, file scanning library, TypeScript security, Next.js security, Nuxt security, Nitro security, Koa middleware, server-side validation, file integrity check, malware prevention, secure file upload
229
+ pompelmi delivers **Privacy-First** malware detection with **Zero Cloud Dependencies** keeping your data secure and your latency zero.
232
230
 
233
- ## 🧠 Why pompelmi?
231
+ ### Why Choose Pompelmi?
234
232
 
235
233
  - **On‑device, private scanning** – no outbound calls, no data sharing.
236
234
  - **Blocks early** – runs _before_ you write to disk or persist anything.
@@ -244,45 +242,25 @@ pompelmi documentation is available in multiple languages to help developers wor
244
242
  - Apps that need predictable, low‑latency decisions inline.
245
243
  - Developers who want simple, typed building blocks instead of a daemon.
246
244
 
247
- ## 🔍 How it compares
248
-
249
- | Capability | pompelmi | ClamAV / node‑clam | Cloud AV APIs |
250
- | --- | --- | --- | --- |
251
- | Runs fully in‑process | ✅ | ❌ (separate daemon) | ❌ (network calls) |
252
- | Bytes stay private | ✅ | ✅ | ❌ |
253
- | Deep ZIP limits & MIME sniff | ✅ | ✅ (archive scan) | ❓ varies |
254
- | YARA integration | ✅ optional | ❌* | ❓ varies |
255
- | Framework adapters | ✅ Express/Koa/Next.js | ❌ | ❌ |
256
- | Works in CI on artifacts | ✅ | ✅ | ❓ varies |
257
- | Licensing | MIT | GPL (engine) | Proprietary |
258
-
259
- \* You can run YARA alongside ClamAV, but it’s not built‑in.
260
-
261
- ---
262
- ## 💬 What Developers Say
263
-
264
- > "pompelmi made it incredibly easy to add malware scanning to our Express API. The TypeScript support is fantastic!"
265
- > — Developer using pompelmi in production
266
-
267
- > "Finally, a file scanning solution that doesn't require sending our users' data to third parties. Perfect for GDPR compliance."
268
- > — Security Engineer at a healthcare startup
269
-
270
- > "The YARA integration is seamless. We went from prototype to production in less than a week."
271
- > — DevSecOps Engineer
272
-
273
- _Want to share your experience? [Open a discussion](https://github.com/pompelmi/pompelmi/discussions)!_
274
-
275
- ---
245
+ ### Comparison Table
276
246
 
277
- ## 🌟 What Makes pompelmi Special?
247
+ | Feature | **Pompelmi** | ClamAV | Cloud APIs (VirusTotal, etc.) |
248
+ |---------|-------------|---------|-------------------------------|
249
+ | **Setup Time** | ⚡ Seconds (`npm install`) | ⏱️ Complex (daemon setup) | ⏱️ API keys + integration |
250
+ | **Privacy** | ✅ **In-process** (data never leaves) | ✅ Local (separate daemon) | ❌ **External** (data sent to cloud) |
251
+ | **Latency** | ⚡ **Zero** (no network calls) | 🔄 IPC overhead | 🌐 **High** (network roundtrip) |
252
+ | **Cost** | 💰 **Free** (MIT license) | 💰 Free (GPL) | 💸 **Pay-per-scan** |
253
+ | **Framework Integration** | ✅ Express, Koa, Next.js, NestJS | ❌ Manual integration | ❌ Manual integration |
254
+ | **TypeScript Support** | ✅ First-class | ❌ Community types | ❓ Varies |
255
+ | **YARA Integration** | ✅ Built-in | ⚙️ Manual setup | ❓ Limited |
278
256
 
279
257
  ### 🎯 Developer Experience
280
258
 
281
- Built with developers in mind from day one. Simple API, comprehensive TypeScript types, and excellent documentation mean you can integrate secure file scanning in minutes, not days. Hot module replacement support and detailed error messages make debugging a breeze.
259
+ Built with developers in mind from day one. Simple API, comprehensive TypeScript types, and excellent documentation mean you can integrate secure file scanning in minutes, not days.
282
260
 
283
261
  ### 🚀 Performance First
284
262
 
285
- Optimized for high-throughput scenarios with configurable concurrency, streaming support, and minimal memory overhead. Process thousands of files without breaking a sweat. Scans run in-process with no IPC overhead.
263
+ Optimized for high-throughput scenarios with configurable concurrency, streaming support, and minimal memory overhead. Scans run in-process with no IPC overhead.
286
264
 
287
265
  ### 🔐 Security Without Compromise
288
266
 
@@ -320,8 +298,6 @@ Validate user-generated content uploads (images, videos, documents) before proce
320
298
 
321
299
  ---
322
300
 
323
- ---
324
-
325
301
  ## 📦 Installation
326
302
 
327
303
  **pompelmi** is a privacy-first Node.js library for local file scanning.
@@ -719,18 +695,7 @@ Use the adapter that matches your web framework. All adapters share the same pol
719
695
 
720
696
  See the [📘 Code Examples](#-code-examples) section above for integration examples.
721
697
 
722
- ---
723
-
724
- | Framework | Package | Status |
725
- | --- | --- | --- |
726
- | Express | `@pompelmi/express-middleware` | ✅ alpha |
727
- | Koa | `@pompelmi/koa-middleware` | ✅ alpha |
728
- | Next.js (App Router) | `@pompelmi/next-upload` | ✅ alpha |
729
- | Fastify | `@pompelmi/fastify-plugin` | 🚧 alpha |
730
- | NestJS | nestjs | 📋 planned |
731
- | Remix | remix | 📋 planned |
732
- | hapi | hapi plugin | 📋 planned |
733
- | SvelteKit | sveltekit | 📋 planned |
698
+ 👉 **[View adapter documentation →](https://pompelmi.github.io/pompelmi/)** | **[Browse all examples →](./examples/)**
734
699
 
735
700
  ---
736
701
 
@@ -1057,39 +1022,105 @@ You should see an HTTP **422 Unprocessable Entity** (blocked by policy). Clean f
1057
1022
 
1058
1023
  ---
1059
1024
 
1060
- ## Releases & security
1025
+ ## Releases & Security
1061
1026
 
1062
1027
  - **Changelog / releases:** see [GitHub Releases](https://github.com/pompelmi/pompelmi/releases).
1063
1028
  - **Security disclosures:** please use [GitHub Security Advisories](https://github.com/pompelmi/pompelmi/security/advisories). We’ll coordinate a fix before public disclosure.
1064
1029
  - **Production users:** open a [Discussion](https://github.com/pompelmi/pompelmi/discussions) to share requirements or request adapters.
1065
1030
 
1066
- ## ⭐ Star history
1031
+ ---
1067
1032
 
1068
- [![Star History Chart](https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date)](https://star-history.com/#pompelmi/pompelmi&Date)
1033
+ ## 🏆 Community & Recognition
1069
1034
 
1070
- ---
1035
+ pompelmi has been featured in **leading security and developer publications** and is trusted by teams worldwide for secure file upload handling.
1071
1036
 
1072
- ---
1037
+ ### 🌟 Featured In High-Authority Publications
1073
1038
 
1074
- ## 🏆 Community & Recognition
1039
+ <table>
1040
+ <tr>
1041
+ <td align="center" width="200">
1042
+ <a href="https://www.helpnetsecurity.com/2026/02/02/pompelmi-open-source-secure-file-upload-scanning-node-js/">
1043
+ <img src="https://img.shields.io/badge/🔒-HelpNet%20Security-FF6B35?style=for-the-badge" alt="HelpNet Security"/>
1044
+ </a>
1045
+ <br/>
1046
+ <strong>HelpNet Security</strong>
1047
+ <br/>
1048
+ <em>Leading Cybersecurity News</em>
1049
+ </td>
1050
+ <td align="center" width="200">
1051
+ <a href="https://snyk.io/test/github/pompelmi/pompelmi">
1052
+ <img src="https://img.shields.io/badge/🛡️-Snyk-4C4A73?style=for-the-badge&logo=snyk" alt="Snyk"/>
1053
+ </a>
1054
+ <br/>
1055
+ <strong>Snyk</strong>
1056
+ <br/>
1057
+ <em>Security Verified</em>
1058
+ </td>
1059
+ <td align="center" width="200">
1060
+ <a href="https://www.detectionengineering.net/p/det-eng-weekly-issue-124-the-defcon">
1061
+ <img src="https://img.shields.io/badge/📡-Detection%20Engineering-0A84FF?style=for-the-badge&logo=substack" alt="Detection Engineering"/>
1062
+ </a>
1063
+ <br/>
1064
+ <strong>Detection Engineering Weekly</strong>
1065
+ <br/>
1066
+ <em>Issue #124</em>
1067
+ </td>
1068
+ </tr>
1069
+ <tr>
1070
+ <td align="center" width="200">
1071
+ <a href="https://nodeweekly.com/issues/594">
1072
+ <img src="https://img.shields.io/badge/⚡-Node%20Weekly-FF6600?style=for-the-badge&logo=node.js" alt="Node Weekly"/>
1073
+ </a>
1074
+ <br/>
1075
+ <strong>Node Weekly</strong>
1076
+ <br/>
1077
+ <em>Issue #594</em>
1078
+ </td>
1079
+ <td align="center" width="200">
1080
+ <a href="https://bytes.dev/archives/429">
1081
+ <img src="https://img.shields.io/badge/📬-Bytes-111111?style=for-the-badge" alt="Bytes"/>
1082
+ </a>
1083
+ <br/>
1084
+ <strong>Bytes Newsletter</strong>
1085
+ <br/>
1086
+ <em>Issue #429</em>
1087
+ </td>
1088
+ <td align="center" width="200">
1089
+ <a href="https://app.daily.dev/posts/pompelmi">
1090
+ <img src="https://img.shields.io/badge/📰-daily.dev-CE3DF3?style=for-the-badge&logo=dailydotdev" alt="daily.dev"/>
1091
+ </a>
1092
+ <br/>
1093
+ <strong>daily.dev</strong>
1094
+ <br/>
1095
+ <em>Featured Article</em>
1096
+ </td>
1097
+ </tr>
1098
+ </table>
1075
1099
 
1076
- pompelmi has been featured in leading developer publications and is trusted by teams worldwide for secure file upload handling.
1100
+ ### 🎖️ Mentioned In Awesome Lists
1077
1101
 
1078
1102
  <p align="center">
1079
- <img src="https://img.shields.io/badge/Featured%20in-Detection%20Engineering%20Weekly-0A84FF?style=for-the-badge&logo=substack" alt="Detection Engineering">
1080
- <img src="https://img.shields.io/badge/Featured%20in-Node%20Weekly-FF6600?style=for-the-badge&logo=node.js" alt="Node Weekly">
1081
- <img src="https://img.shields.io/badge/Featured%20in-Bytes-111111?style=for-the-badge" alt="Bytes">
1103
+ <a href="https://github.com/sorrycc/awesome-javascript"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome JavaScript"/></a>
1104
+ <a href="https://github.com/dzharii/awesome-typescript"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome TypeScript"/></a>
1105
+ <a href="https://github.com/sbilly/awesome-security"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome Security"/></a>
1106
+ <a href="https://github.com/sindresorhus/awesome-nodejs"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome Node.js"/></a>
1082
1107
  </p>
1083
1108
 
1084
1109
  <!-- MENTIONS:START -->
1110
+ <!-- MENTIONS:END -->
1085
1111
 
1086
- ## 🌟 Featured In
1112
+ ### 💬 What Developers Say
1087
1113
 
1088
- *Last updated: January 24, 2026*
1114
+ > "pompelmi made it incredibly easy to add malware scanning to our Express API. The TypeScript support is fantastic!"
1115
+ > — Developer using pompelmi in production
1089
1116
 
1090
- *No mentions found yet. Run `npm run mentions:find` to discover mentions.*
1117
+ > "Finally, a file scanning solution that doesn't require sending our users' data to third parties. Perfect for GDPR compliance."
1118
+ > — Security Engineer at a healthcare startup
1091
1119
 
1092
- <!-- MENTIONS:END -->
1120
+ > "The YARA integration is seamless. We went from prototype to production in less than a week."
1121
+ > — DevSecOps Engineer
1122
+
1123
+ _Want to share your experience? [Open a discussion](https://github.com/pompelmi/pompelmi/discussions)!_
1093
1124
 
1094
1125
  ### 🤝 Community & Support
1095
1126
 
@@ -1113,16 +1144,6 @@ pompelmi has been featured in leading developer publications and is trusted by t
1113
1144
 
1114
1145
  ---
1115
1146
 
1116
- ## 📊 Star History
1117
-
1118
- <p align="center">
1119
- <a href="https://star-history.com/#pompelmi/pompelmi&Date">
1120
- <img src="https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date" alt="Star History Chart" />
1121
- </a>
1122
- </p>
1123
-
1124
- ---
1125
-
1126
1147
  ## 🎖️ Contributors
1127
1148
 
1128
1149
  Thanks to all the amazing contributors who have helped make pompelmi better!
@@ -1139,6 +1160,16 @@ Thanks to all the amazing contributors who have helped make pompelmi better!
1139
1160
 
1140
1161
  ---
1141
1162
 
1163
+ ## ⭐ Star History
1164
+
1165
+ <p align="center">
1166
+ <a href="https://star-history.com/#pompelmi/pompelmi&Date">
1167
+ <img src="https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date" alt="Star History Chart" width="600" />
1168
+ </a>
1169
+ </p>
1170
+
1171
+ ---
1172
+
1142
1173
  ## 💬 FAQ
1143
1174
 
1144
1175
  **Do I need YARA?**
@@ -1192,25 +1223,9 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
1192
1223
  - [Examples](./examples/) — Real-world integration examples
1193
1224
  - [Security Guide](./SECURITY.md) — Security best practices and disclosure policy
1194
1225
 
1195
- ### 🎥 Tutorials & Articles
1196
-
1197
- - **File Upload Security in Node.js** — Best practices guide (coming soon)
1198
- - **Integrating YARA with pompelmi** — Advanced detection setup (coming soon)
1199
- - **Zero-Trust File Uploads** — Architecture patterns (coming soon)
1200
-
1201
1226
  ### 🛠️ Tools & Integrations
1202
1227
 
1203
1228
  - [GitHub Action](https://github.com/pompelmi/pompelmi/tree/main/.github/actions/pompelmi-scan) — CI/CD scanning
1204
- - [Docker Images](https://hub.docker.com/r/pompelmi/pompelmi) — Containerized scanning (coming soon)
1205
- - [Cloud Functions](https://github.com/pompelmi/cloud-functions) — Serverless examples (coming soon)
1206
-
1207
- ---
1208
-
1209
- ## 📊 Project Stats
1210
-
1211
- <p align="center">
1212
- <img src="https://repobeats.axiom.co/api/embed/YOUR_EMBED_ID.svg" alt="Repobeats analytics" />
1213
- </p>
1214
1229
 
1215
1230
  ---
1216
1231
 
@@ -1224,19 +1239,6 @@ pompelmi stands on the shoulders of giants. Special thanks to:
1224
1239
 
1225
1240
  ---
1226
1241
 
1227
- ## 📞 Support
1228
-
1229
- Need help? We're here for you!
1230
-
1231
- - 📖 [Documentation](https://pompelmi.github.io/pompelmi/)
1232
- - 💬 [GitHub Discussions](https://github.com/pompelmi/pompelmi/discussions)
1233
- - 🐛 [Issue Tracker](https://github.com/pompelmi/pompelmi/issues)
1234
- - 🔒 [Security](https://github.com/pompelmi/pompelmi/security) (for vulnerabilities)
1235
-
1236
- For commercial support and consulting, contact the maintainers.
1237
-
1238
- ---
1239
-
1240
1242
  <p align="right"><a href="#pompelmi">↑ Back to top</a></p>
1241
1243
 
1242
1244
  ## 📜 License
package/dist/pompelmi.cjs CHANGED
@@ -65,7 +65,7 @@ function createPresetScanner(preset, opts = {}) {
65
65
  });
66
66
  scanners.push(binjaScanner);
67
67
  }).catch(() => {
68
- // Binary Ninja engine not available
68
+ // Binary Ninja engine not available - silently skip
69
69
  });
70
70
  }
71
71
  catch {
@@ -85,7 +85,7 @@ function createPresetScanner(preset, opts = {}) {
85
85
  });
86
86
  scanners.push(ghidraScanner);
87
87
  }).catch(() => {
88
- // Ghidra engine not available
88
+ // Ghidra engine not available - silently skip
89
89
  });
90
90
  }
91
91
  catch {