Release history
Pompelmi releases
Open-source file upload security for Node.js. Scan files before storage to detect malware, MIME spoofing, and risky archives.
All releases
45 shown
- Official Docker image `pompelmi/scanner` with built‑in ClamAV, clamd and HTTP scan API
- Security Scorecard API (A‑F grading) and CLI command for upload configuration assessment
- VS Code extension scaffold enabling "Scan with pompelmi" context action
Full changelog
What's New
Official Docker Image
pompelmi/scanner is now available on Docker Hub.
A self-contained image with ClamAV, clamd, and an HTTP scan API
built in — no configuration required.
docker pull pompelmi/scanner
docker run -p 8080:8080 pompelmi/scanner
# Scan a file via HTTP
curl -F "file=@./document.pdf" http://localhost:8080/scan
# {"verdict":"clean","file":"document.pdf","viruses":[]}
# Health check
curl http://localhost:8080/health
# {"status":"ok","clamd":"running"}
Security Scorecard
Grade your upload security configuration from A to F:
const { generateScorecard } = require('pompelmi')
const scorecard = await generateScorecard({
scanEnabled: true,
mimeTypeAllowlist: ['image/jpeg', 'image/png', 'application/pdf'],
fileSizeLimit: 10 * 1024 * 1024,
diskWriteBeforeScan: false,
scanErrorBehavior: 'reject',
clamdUnavailableBehavior: 'reject'
})
console.log(scorecard.grade) // 'A'
console.log(scorecard.score) // 95
console.log(scorecard.findings) // array of passed/failed checks
From the CLI:
npx pompelmi scorecard --config ./pompelmi.config.js
VS Code Extension
A VS Code extension scaffold is now available at packages/vscode/.
Right-click any file in the IDE and select "Scan with pompelmi".
Marketplace publishing coming in a future release.
Quarantine Mode
Automatically move infected files to a quarantine directory:
watch('/uploads', {
host: 'localhost',
port: 3310,
quarantine: '/quarantine'
}, {
onMalicious: 'quarantine'
})
npx pompelmi watch ./uploads --quarantine ./quarantine
Each quarantined file gets a sidecar JSON with original path,
virus name, timestamp, and SHA256 hash.
Changes
docker/— Dockerfile, entrypoint.sh, HTTP scan API server.github/workflows/docker.yml— automated Docker Hub publishingsrc/Scorecard.js— A-F grading for upload security configsrc/Watcher.js— quarantine mode supportpackages/vscode/— VS Code extension scaffoldbin/pompelmi.js— scorecard command and --quarantine flagdocs/docker-image.html— Docker Hub image guidedocs/scorecard.html— scorecard API and CLI referencedocs/vscode.html— VS Code extension guidedocs/*.html— navbar updated across all pagesREADME.md— Docker Hub badge, new features
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.17.0...v1.18.0
- Dual CommonJS and ES Modules entry points via `package.json` exports
- Native Deno support with example usage
- Cloudflare Workers package `@pompelmi/cloudflare` for edge scanning
Full changelog
What's New
Native ESM Support
pompelmi now supports both CommonJS and ES Modules natively.
No more createRequire workarounds.
// ESM (new)
import { scan, scanBuffer, Verdict } from 'pompelmi'
// CommonJS (unchanged)
const { scan, scanBuffer, Verdict } = require('pompelmi')
Deno Support
pompelmi now works natively in Deno:
import { scan, Verdict } from 'npm:pompelmi'
const result = await scan('./file.pdf', {
host: 'localhost',
port: 3310
})
Cloudflare Workers Package
@pompelmi/cloudflare is now available on npm.
Scan file uploads at the edge via a remote clamd instance.
npm install @pompelmi/cloudflare
import { scanBuffer } from '@pompelmi/cloudflare'
export default {
async fetch(request, env) {
const formData = await request.formData()
const file = formData.get('file')
const buffer = await file.arrayBuffer()
const result = await scanBuffer(buffer, {
host: env.CLAMAV_HOST,
port: parseInt(env.CLAMAV_PORT)
})
if (result !== 'clean') {
return new Response('File rejected', { status: 422 })
}
return new Response('OK')
}
}
Landing Page Improvements
pompelmi.app now shows:
- Runtime compatibility logos: Node.js • Bun • Deno • Cloudflare Workers
- Framework logos grid: Express • Fastify • NestJS • Next.js • Hono • Remix • SvelteKit
- Live GitHub stars and npm downloads badges
GitHub Sponsors
A Sponsor button is now visible on the GitHub repo via .github/FUNDING.yml.
Runtime Support
| Runtime | Status |
|---------|--------|
| Node.js | ✅ |
| Bun | ✅ |
| Deno | ✅ |
| Cloudflare Workers | ✅ via @pompelmi/cloudflare |
Framework Integrations
| Package | Framework |
|---------|-----------|
| @pompelmi/nestjs | NestJS |
| @pompelmi/fastify | Fastify |
| @pompelmi/nextjs | Next.js |
| @pompelmi/hono | Hono |
| @pompelmi/remix | Remix |
| @pompelmi/sveltekit | SvelteKit |
| @pompelmi/cloudflare | Cloudflare Workers |
| @pompelmi/testing | Jest / Vitest / Node |
Changes
src/index.mjs— native ESM entry pointpackage.json— dual CJS/ESM exports fielddeno.json— Deno configurationpackages/cloudflare/— Cloudflare Workers package.github/FUNDING.yml— GitHub Sponsors buttondocs/deno.html— Deno usage guidedocs/cloudflare.html— Cloudflare Workers guidedocs/*.html— navbar updatedindex.html— landing page runtime and framework logos
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.16.0...v1.17.0
- Node.js runtime updated to version 24 in CI workflows
- Remix plugin `@pompelmi/remix` with action wrapper
- SvelteKit plugin `@pompelmi/sveltekit` with server handler and hook
- In‑memory scan statistics tracker via `createStats()`
Full changelog
What's New
Remix Plugin
@pompelmi/remix is now available on npm.
npm install @pompelmi/remix pompelmi
import { withPompelmi } from '@pompelmi/remix'
export const action = withPompelmi(async ({ request }) => {
const formData = await request.formData()
return json({ ok: true })
}, { host: 'localhost', port: 3310 })
SvelteKit Plugin
@pompelmi/sveltekit is now available on npm.
npm install @pompelmi/sveltekit pompelmi
import { withPompelmi } from '@pompelmi/sveltekit'
export const POST = withPompelmi(async ({ request }) => {
return new Response(JSON.stringify({ ok: true }))
}, { host: 'localhost', port: 3310 })
Scan Statistics
Track scan activity in-memory with createStats():
const { createStats } = require('pompelmi')
const stats = createStats()
const result = await stats.track(() => scan(filePath, options))
stats.get()
// {
// totalScanned: 1247,
// totalClean: 1245,
// totalInfected: 2,
// totalErrors: 0,
// avgScanTimeMs: 45,
// lastScanAt: '2026-05-07T...',
// uptime: 3600000
// }
app.get('/pompelmi/stats', (req, res) => res.json(stats.get()))
Navbar Fix
All docs/ HTML pages now have a consistent navbar linking to every
page in the documentation site. Previously several pages were missing
links to newer sections.
Framework Integrations
| Package | Framework |
|---------|-----------|
| @pompelmi/nestjs | NestJS |
| @pompelmi/fastify | Fastify |
| @pompelmi/nextjs | Next.js |
| @pompelmi/hono | Hono |
| @pompelmi/remix | Remix |
| @pompelmi/sveltekit | SvelteKit |
| @pompelmi/testing | Jest / Vitest / Node |
Changes
packages/remix/— Remix action wrapperpackages/sveltekit/— SvelteKit server handler and hooksrc/Stats.js— in-memory scan statistics trackerdocs/remix.html,docs/sveltekit.html,docs/stats.html— new docs pagesdocs/*.html— canonical navbar across all pagesREADME.md— updated framework integrations table.github/workflows/ci.yml— updated to Node.js 24 actions
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.15.0...v1.16.0
- Hono middleware plugin @pompelmi/hono supports Node.js, Bun, and Cloudflare Workers
- Official Bun runtime support with native API usage for faster file reads
Full changelog
What's New
Hono Plugin
@pompelmi/hono is now available on npm. Works on Node.js, Bun,
and Cloudflare Workers.
npm install @pompelmi/hono pompelmi
import { pompelmiMiddleware } from '@pompelmi/hono'
import { Hono } from 'hono'
const app = new Hono()
app.use('/upload/*', pompelmiMiddleware({
host: 'localhost',
port: 3310,
field: 'file',
onInfected: (c) => c.json({ error: 'Malware detected' }, 422)
}))
Bun Support
pompelmi now officially supports the Bun runtime. The core library
detects Bun at runtime and uses native Bun APIs where available for
faster file reads. Bun is now included in the CI test matrix.
bun install pompelmi
bun run your-app.js
Interactive Demo
A browser-based demo is now available at
pompelmi.app/demo — try the pompelmi
terminal UI and see all three verdicts without installing anything.
Testing Utilities
@pompelmi/testing provides mock utilities for unit testing
applications that use pompelmi.
npm install --save-dev @pompelmi/testing
const { mockClean, mockInfected, mockScanError } = require('@pompelmi/testing')
// In your tests
it('rejects infected files', async () => {
const scanner = mockInfected('Win.Malware.Test')
const result = await scanner.scanBuffer(buffer)
expect(result).toBe(Verdict.Malicious)
})
Works with Jest, Vitest, and the Node.js built-in test runner.
Comparison Page
Side-by-side comparison of pompelmi against other Node.js ClamAV
integrations at docs/comparison.html.
Framework Integrations
| Package | Framework |
|---------|-----------|
| @pompelmi/nestjs | NestJS |
| @pompelmi/fastify | Fastify |
| @pompelmi/nextjs | Next.js |
| @pompelmi/hono | Hono |
| @pompelmi/testing | Jest / Vitest / Node |
Changes
packages/hono/— Hono middleware pluginpackages/testing/— mock utilities for unit testingsrc/ClamdScanner.js,BufferScanner.js,StreamScanner.js— Bun runtime detection.github/workflows/ci.yml— Bun added to test matrixdocs/demo.html— interactive browser demodocs/comparison.html— comparison with alternativesdocs/*.html— navbar updated across all pagesREADME.md— Bun support, demo link, updated integrations table
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.14.0...v1.15.0
- HTML security dashboard via `generateDashboard(scanResults, options)`
- SVG share card via `generateShareCard(scanResults, options)`
- CLI flags `--report` and `--share-card` with customizable output filenames
Full changelog
Added
- HTML security dashboard —
generateDashboard(scanResults, options)generates a self-contained HTML report with summary stats, colour-coded status banner, file table with verdict badges, infected files section, scan metadata, dark mode viaprefers-color-scheme, and print-friendly CSS. No external dependencies. - SVG share card —
generateShareCard(scanResults, options)generates a 560 × 200 px SVG card showing the scan summary. Suitable for embedding in READMEs or sharing on social media. Green theme for clean scans, red for infected. - CLI
--reportflag —pompelmi scan ./uploads --reportsavespompelmi-report.htmlafter scanning. Use--output <path>to customise the filename. - CLI
--share-cardflag —pompelmi scan ./uploads --share-cardsavespompelmi-scan-card.svgafter scanning. Use--output <path>to customise the filename. @pompelmi/nextjs— new package providingwithPompelmi(handler, options)(App Router / Next.js 13+) andwithPompelmiHandler(handler, options)(Pages Router). Scans the raw request body before the handler runs; returns HTTP 400 on malicious files. Full TypeScript declarations included.- GitHub App configuration —
.github/app.ymldescribes the pompelmi GitHub App that organizations can install for zero-config virus scanning on every pull request. Posts native check runs with pass/fail status and inline diff annotations for infected files. docs/dashboard.html— new documentation page coveringgenerateDashboard,generateShareCard, CLI flags, options reference, and usage examples.docs/github-app.html— new documentation page explaining the GitHub App, the Action vs App comparison table, installation steps, permissions, check run flow, and self-hosting instructions.- Navbar updated across all
docs/HTML pages to include Dashboard and GitHub App links. docs/cli.htmlupdated — added--report,--share-card, and--outputto the options table and added dedicated#reportand#share-cardsections.- README.md updated — added HTML dashboard, SVG share card, and GitHub App to the Features list; added GitHub App callout under the GitHub Action section.
Changed
src/index.js— exportsgenerateDashboardandgenerateShareCardalongside existing API.types/index.d.ts— full TypeScript declarations forgenerateDashboard,DashboardOptions,generateShareCard,ShareCardOptions, andScanRow.
- @pompelmi/nestjs module with forRoot/forRootAsync, PompelmiService (scan APIs), PompelmiGuard and PompelmiInterceptor
- @pompelmi/fastify plugin adding fastify.pompelmi API, preHandler hook, custom onMalicious callbacks
- Framework Integrations section in README.md with usage snippets
Full changelog
Added
- @pompelmi/nestjs — NestJS module with
PompelmiModule.forRoot()/.forRootAsync(), injectablePompelmiService(scan / scanBuffer / isMalware),PompelmiGuard(blocks malicious uploads viaCanActivate), andPompelmiInterceptor(throwsBadRequestExceptionon infection). Full TypeScript declarations included. - @pompelmi/fastify — Fastify plugin that decorates the instance with
fastify.pompelmi(scan / scanBuffer / scanStream / preHandler). ThepreHandler()helper returns a route-level hook that scans uploaded files before the route handler runs. Supports customonMaliciouscallbacks and full TypeScript declarations. - Framework Integrations section in
README.md— table of official packages with usage snippets for NestJS and Fastify.
- Real‑time folder watching with `pompelmi watch`
- JSON output mode (`--json`) for scripting
- Auto‑delete infected files via `--delete` flag
Full changelog
What's New
Standalone CLI
Scan files directly from the terminal — no code required:
# Scan a file
npx pompelmi scan ./uploads/file.pdf
# Scan a directory recursively
npx pompelmi scan ./uploads --recursive
# Output as JSON for scripting
npx pompelmi scan ./uploads --json
# Watch a folder in real time
npx pompelmi watch ./uploads
Features:
- Renders the pompelmi grapefruit logo in the terminal via
terminal-image - Live progress bar for directory scans
- Box-drawing UI with color-coded results (green/red/yellow)
--jsonmode for shell script integration--deleteflag to auto-remove infected files--quietmode for CI pipelines- Works with TCP, UNIX socket, and local clamscan
Exit codes: 0 clean · 1 infected · 2 scan error · 3 clamd unreachable
Install globally:
npm install -g pompelmi
pompelmi scan ./uploads
Or use without installing:
npx pompelmi scan ./uploads
CLI Documentation
New dedicated page: docs/cli.html
- Full commands and options reference
- JSON output format
- Exit codes table
- 8 real-world examples
- Shell script integration
Navbar updated across all docs
All docs/ pages now have a consistent navbar including the new CLI link.
Changes
bin/pompelmi.js— full CLI implementationpackage.json—binfield added,terminal-imagedependencydocs/cli.html— new CLI documentation pagedocs/*.html— navbar updated across all pagesREADME.md— Quick Start section, CLI in Features and docs tableCHANGELOG.md— v1.12.0 entry
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.11.0...v1.12.0
- Webhook notifications with HMAC‑SHA256 signing and default `onlyOnMalicious: true`
- EventEmitter‑based scanner (`createScanner`) emitting per‑file events for streaming pipelines
- Automated GitHub Release notes generated from CHANGELOG.md
Full changelog
Added
- Webhook notifications —
notify(webhookUrl, scanResult, options)sends a POST request when a virus is detected. Payload includesfile,verdict,viruses,timestamp, andhostname. Supports HMAC-SHA256 request signing viaX-Pompelmi-Signatureheader when asecretis provided. Ships withonlyOnMalicious: truedefault so noise-free by default. Uses Node.js built-inhttps/http— zero extra dependencies. - EventEmitter scanner —
createScanner(options)returns anEventEmitter-based scanner withscan(filePath)andscanDirectory(dirPath)methods. Emits'clean','malicious','scanError', and'error'events per file — ideal for streaming pipelines and upload processing loops. - Automated GitHub Release notes — release workflow now extracts the matching changelog section from
CHANGELOG.mdand uses it as the release body, with a one-line summary in the release title (vX.Y.Z — <summary>). No more static template. .mailmap— maps any historicalclaude/Claudeauthorship entries to the project author so they are excluded from GitHub's contributor list.
Changed
src/index.js— exportsnotifyandcreateScanneralongside existing API.types/index.d.ts— full TypeScript declarations fornotify,NotifyOptions,WebhookPayload,ScanResultInput,createScanner, andScanEmitter(including typed event overloads).
- Direct AWS S3 object streaming to clamd without disk I/O
- Persistent connection pool for high‑throughput clamd usage
- Directory watch mode that auto‑scans new/modified files
Full changelog
What's New
AWS S3 Integration
Scan S3 objects directly without downloading to disk:
const { scanS3 } = require('pompelmi')
const result = await scanS3({
bucket: 'my-bucket',
key: 'uploads/file.pdf',
region: 'us-east-1'
})
Streams the object directly from S3 to clamd via the INSTREAM protocol — zero disk I/O.
Connection Pooling
Maintain persistent connections to clamd for high-throughput applications:
const { createPool } = require('pompelmi')
const pool = createPool({ host: 'localhost', port: 3310, size: 5 })
const result = await pool.scan('file.pdf')
await pool.destroy()
👀 Watch Mode
Monitor a directory and auto-scan every new or modified file:
const { watch } = require('pompelmi')
watch('/uploads', { socket: '/var/run/clamav/clamd.sock' }, {
onClean: (file) => console.log('Clean:', file),
onMalicious: (file) => fs.unlinkSync(file),
onError: (err) => console.error(err)
})
Automatic Retry
Reconnect automatically if clamd is temporarily unreachable:
const result = await scan('file.pdf', {
host: 'localhost',
port: 3310,
retries: 3,
retryDelay: 1000
})
Changes
src/S3Scanner.js— S3 streaming integration via @aws-sdk/client-s3src/ClamdPool.js— queue-based persistent connection poolsrc/Watcher.js— fs.watch wrapper with debounce and auto-scansrc/ClamdScanner.js,BufferScanner.js,StreamScanner.js— retry logicsrc/index.js— exports scanS3, createPool, watchtypes/index.d.ts— updated type declarationsdocs/s3.md— new S3 integration guidedocs/api.md— updated with all new functionsREADME.md— updated Features list and API table
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.9.0...v1.10.0
- Full TypeScript type definitions included in the package (no @types/pompelmi needed).
- GitHub Action automatically posts a comment on PRs when infected files are found.
- Added example starters for Express, Next.js, and NestJS frameworks.
Full changelog
What's New
TypeScript Types Built-in
Full type declarations included in the package — no @types/pompelmi needed.
import { scan, scanBuffer, scanStream, scanDirectory, middleware, Verdict, ScanOptions, ScanResult } from 'pompelmi';
const result: ScanResult = await scan('/path/to/file.pdf');
Automatic PR Comment on Virus Detection
The GitHub Action now posts a comment directly on the PR when infected files are found — no need to dig through logs.
- uses: pompelmi/[email protected]
with:
path: .
fail-on-virus: true
comment-on-pr: true # default
Examples Folder
Three ready-to-run framework starters added:
| Directory | Description |
|-----------|-------------|
| examples/express/ | Full Express app with multer + pompelmi middleware |
| examples/nextjs/ | Next.js API route scanning raw upload bytes |
| examples/nestjs/ | NestJS guard wrapping pompelmi for route-level protection |
Changes
types/index.d.ts— full TypeScript declarationspackage.json—"types"field addedaction/scanner.js— PR comment on virus detectionaction.yml— newcomment-on-prinputexamples/— Express, Next.js, NestJS startersREADME.md— TypeScript badge, examples section, coming soon
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.8.0...v1.9.0
- Express/Fastify middleware that automatically scans uploaded files via multer and returns 403 on virus detection
- GitHub Action now produces `report.json` (machine‑readable) and `report.html` (human‑readable) as downloadable artifacts named `pompelmi-scan-report`
- Pompelmi badge markdown added for repositories to indicate scanning protection
Full changelog
What's New
Express/Fastify Middleware
Protect file uploads in one line:
const { middleware } = require('pompelmi')
app.use(middleware({ uploadField: 'file' }))
- Automatically scans files uploaded via multer
- Returns
403if a virus is detected, callsnext()if clean - Works with Express and Fastify
Scan Report Artifact
The GitHub Action now generates a downloadable scan report after every run:
report.json— machine-readable resultsreport.html— human-readable table with file, status, verdict- Uploaded automatically as a GitHub Actions artifact named
pompelmi-scan-report
pompelmi Badge
Add the badge to your repo to show it's protected:
[]
See BADGE.md for copy-paste instructions.
Changes
src/middleware.js— new Express/Fastify middlewaresrc/index.js— exports middlewareaction/scanner.js— report.json + report.html artifact uploadREADME.md— badge + middleware sectionBADGE.md— copy-paste badge instructionsdocs/github-action.md— badge and report sections updated
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.7.0...v1.8.0
Minor fixes and improvements.
Full changelog
What's new
See CHANGELOG.md
for the full list of changes in this release.
- UNIX socket connection option (`socket`) for `scan`, `scanBuffer`, and `scanStream` methods
- Updated README with new configuration entry, API signatures, and Docker guidance
Full changelog
What's New
UNIX Socket Support (#184)
You can now connect to clamd via a UNIX socket path, in addition to the existing TCP host:port mode. This is especially useful for local setups and Docker environments where clamd listens on a socket instead of a TCP port.
// UNIX socket (new in v1.6.0)
const result = await scan('file.txt', { socket: '/var/run/clamav/clamd.sock' });
// TCP (unchanged)
const result = await scan('file.txt', { host: 'localhost', port: 3310 });
Previously, calling scan without a reachable TCP socket would hang indefinitely. Passing socket now routes the connection correctly across all three scan methods: scan, scanBuffer, and scanStream.
Changes
src/ClamdScanner.js— UNIX socket connection vianet.createConnection({ path })src/BufferScanner.js— UNIX socket support forscanBufferViaClamdsrc/StreamScanner.js— UNIX socket support forscanStreamViaClamdsrc/ClamAVScanner.js— routing logic updated to recognize thesocketoptionREADME.md— newsocketentry in the Configuration table, updated API signatures and Docker section
Tests
7 new tests added — all 76 tests pass.
Full Changelog
https://github.com/pompelmi/pompelmi/compare/v1.5.0...v1.6.0
Minor fixes and improvements.
Full changelog
What's new
See CHANGELOG.md
for the full list of changes in this release.
- scanStream() method to scan Node.js Readable streams without disk I/O
- TCP mode support via INSTREAM protocol for direct clamd piping
- Local mode with automatic temporary file creation and cleanup
Full changelog
What's new
scanStream(stream, [options]) — scan any Node.js Readable stream directly without writing to disk.
Useful for S3 getObject streams, HTTP downloads, or any piped source.
In TCP mode, the stream is piped to clamd via INSTREAM protocol — zero disk I/O.
In local mode, a temp file is created, scanned, and deleted automatically.
const { scanStream, Verdict } = require('pompelmi');
const stream = s3.getObject({ Bucket, Key }).createReadStream();
const result = await scanStream(stream);
if (result === Verdict.Malicious) throw new Error('Malware detected.');
Full changelog: https://github.com/pompelmi/pompelmi/blob/main/CHANGELOG.md
- Add scanBuffer() to scan in-memory buffers without disk I/O
- Automatic temp file creation and cleanup in local mode
Full changelog
What's new
scanBuffer(buffer, [options]) — scan an in-memory Buffer directly without writing to disk.
Useful when using multer memoryStorage or any pipeline where the file never touches the filesystem.
In TCP mode, the buffer is streamed to clamd via INSTREAM protocol — zero disk I/O.
In local mode, a temp file is created, scanned, and deleted automatically.
const { scanBuffer, Verdict } = require('pompelmi');
const result = await scanBuffer(req.file.buffer);
if (result === Verdict.Malicious) throw new Error('Malware detected.');
Full changelog: https://github.com/pompelmi/pompelmi/blob/main/CHANGELOG.md
- Import Verdict from package and update scan() equality checks to use Verdict symbols (e.g., result === Verdict.Clean instead of 'Clean')
- scan() function no longer returns strings; now returns Symbol-based Verdict objects
Full changelog
What's Changed
- Dependency Refactoring: Replaced the unmaintained
cross-spawndependency with a nativechild_processwrapper, keeping the dependency chain clean and secure. - Architectural Refactoring: Replaced fragile string-based scan results with a robust
Symbol-basedVerdictobject to ensure type safety and prevent typos.
⚠️ Migration Note (Important)
The scan() function now returns a Symbol instead of a raw string. Users must import Verdict from the package and update their equality checks:
Change result === 'Clean' ➡️ result === Verdict.Clean
Closes #183
- All 0.x releases are strictly deprecated and no longer maintained; users must migrate to 1.0.0 immediately
- Production-ready API finalization
- Core stability and performance optimizations
- Semantic Versioning (SemVer) commitment
Full changelog
Overview
This marks the first official stable release of Pompelmi. The core architecture has been finalized for production environments.
⚠️ Deprecation Notice
All prior 0.x versions are now strictly deprecated. Legacy 0.x releases are no longer maintained, should be considered unstable, and must not be used in production. All users are strongly advised to migrate to 1.0.0 immediately.
Key Additions
- Finalized production-ready API and feature set.
- Enhanced core stability and performance optimizations.
- Formalized versioning strictly adhering to Semantic Versioning (SemVer).
For a granular breakdown of all changes, please review the commit history.
This maintenance release refreshes development dependencies and CI tooling, keeps Pompelmi aligned with the current ecosystem, and improves long-term reliability. No intentional user-facing API changes are included unless explicitly noted below. **Full Changelog**: https://github
This maintenance release refreshes development dependencies and CI tooling, keeps Pompelmi aligned with the current ecosystem, and improves long-term reliability. No intentional user-facing API changes are included unless explicitly noted below. **Full Changelog**: https://github
This maintenance release refreshes development dependencies and CI tooling, keeps Pompelmi aligned with the current ecosystem, and improves long-term reliability. No intentional user-facing API changes are included unless explicitly noted below. **Full Changelog**: https://github
This maintenance release refreshes development dependencies and CI tooling, keeps Pompelmi aligned with the current ecosystem, and improves long-term reliability. No intentional user-facing API changes are included unless explicitly noted below. **Full Changelog**: https://github
Dependabot updated GitHub Actions and several language library versions, improving CI security and reliability while reducing manual upgrade effort.
Maintenance release improving test coverage and development reliability without user-facing API changes.
Maintenance release updating dependencies across multiple ecosystems to keep Pompelmi aligned with current development tools.
Maintenance release upgrading CI/CD tooling and GitHub Actions workflows while improving repository quality.
- findings property removed from ScanReport in favor of typed matches array
- NamedScanner and ComposeScannerOptions types exported
- Match.severity extended with 'info' and 'malicious' values