Changelog
Release history and version updates for eslint-plugin-mongodb-security
Live from GitHub
This changelog is fetched directly from CHANGELOG.md on GitHub and cached for 2 hours.
[8.3.0] - 2026-02-08
8.3.2
Patch Changes
- #364
86baa02Thanks @ofri-peretz! - Add the ecosystem and oxlint marks to the README logo row. Each plugin now leads with Interlace -> its ecosystem (node, nestjs, express, react, mongodb, postgresql, mysql, sqlite, prisma, drizzle, knex, typeorm, sequelize, lambda, vercel, jwt) -> oxlint -> ESLint; the generic quality plugins carry the row without an ecosystem mark. README-only change - no rule behaviour is affected. The patch bump is what carries the new README onto npm, which only refreshes a package README on publish.
8.3.1
Patch Changes
-
#338
dc25c81Thanks @ofri-peretz! - Re-publish every package so npm carries the optimised artifactNo source changed. This is a no-op patch whose entire purpose is to ship the artifact the current build already produces.
Manifests.
scriptsanddevDependenciesare now stripped from every publishedpackage.json. Neither can do anything in a consumer’s node_modules — npm never runs one and never installs the other — but they shipped in all 27 manifests, cluttered the npm page, and were read by SCA tools scanning installed manifests. No package declares a lifecycle hook, so nothing observable changes. Every published package is bumped so this applies uniformly rather than to a subset.Tarballs. 20 packages were last published before the build pipeline changed and still ship
AGENTS.md,CHANGELOG.md, JSDoc in the emitted.js, and the full generated.d.tstree:package published rebuilt saving eslint-plugin-react-features547 kB 320 kB −227 kB eslint-plugin-secure-coding653 kB 477 kB −176 kB eslint-plugin-conventions241 kB 116 kB −125 kB eslint-plugin-browser-security380 kB 291 kB −89 kB eslint-plugin-maintainability178 kB 116 kB −62 kB eslint-plugin-react-a11y232 kB 173 kB −59 kB eslint-plugin-reliability148 kB 90 kB −58 kB eslint-plugin-vercel-ai-security187 kB 130 kB −57 kB eslint-plugin-operability90 kB 43 kB −47 kB eslint-plugin-jwt140 kB 95 kB −45 kB eslint-plugin-modularity98 kB 58 kB −40 kB eslint-plugin-nestjs-security122 kB 86 kB −36 kB eslint-plugin-sqlite-security54 kB 20 kB −34 kB eslint-plugin-sequelize-security54 kB 21 kB −34 kB eslint-plugin-prisma-security52 kB 19 kB −33 kB eslint-plugin-mysql-security52 kB 19 kB −33 kB eslint-plugin-typeorm-security52 kB 19 kB −33 kB eslint-plugin-drizzle-security52 kB 19 kB −33 kB eslint-plugin-knex-security51 kB 19 kB −32 kB eslint-plugin-modernization45 kB 38 kB −7 kB Those 20 go from 3428 kB to 2169 kB — −36.7%. The remaining 7 were released after the pipeline change and only gain the manifest strip.
A new check in
scripts/check-published-artifacts.tsfails the build ifscriptsordevDependenciesever reappear in a published manifest, so the strip cannot silently regress.The dependency ranges did not need updating: every plugin pins
@interlace/eslint-devkitwith a caret that 1.6.0 satisfies, verified by a clean install of an unchanged plugin resolving devkit 1.6.0 with zero dependencies and notypescriptin the tree. -
Updated dependencies [
dc25c81]:- @interlace/eslint-devkit@1.6.1
8.3.0
Minor Changes
-
#328
0231140Thanks @ofri-peretz! - Eliminate the false-positive storm on real MongoDB/Mongoose codebases.A dry run against mikemajesty/nestjs-microservice-boilerplate-api (393★, NestJS 11 + Mongoose, 253 files) produced 145 findings under
recommended, 138 of which were false positives. Method names alone were doing all the work:findis alsoArray.prototype.find,connectis also a Redis client and a TypeORM query runner, andfindOne/updateOneare the vocabulary of every generic repository wrapper ever written.Rule Before After no-select-sensitive-fields80 0 no-unbounded-find41 8 no-bypass-middleware11 6 require-auth-mechanism7 0 require-tls-connection2 0 total 145 18 The remaining 18 are all real Mongoose model calls in one repository file.
New shared
utils/receiver.tsanswers, once per file, whether a call's receiver is plausibly MongoDB — a PascalCase model identifier, amodel/collection/dbname, adb.collection(...)chain, or a value bound to amongodb/mongooseimport. Connection rules are stricter still:client/connectionearn no benefit of the doubt, since they are just as likely Redis or Postgres.no-select-sensitive-fieldsadditionally requires evidence that a sensitive field exists before claiming one is exposed — either the query names it (.select('password'),{ projection: { password: 1 } }) or a sensitive field name is visible in the file. The newrequireVisibleSensitiveFieldoption (defaulttrue) restores the old behaviour for codebases whose schemas live outside the files that query them.allowInTestsnow recognisestest/,tests/,__tests__/,__mocks__/,e2e/andfixtures/directories, not only a*.test.tssuffix — a testcontainers helper is not a production connection.Every fix ships a regression fixture taken from the real scan alongside a true-positive test, so no rule goes inert.
Patch Changes
8.2.8
Patch Changes
-
#294
659f6dcThanks @ofri-peretz! - Rewritedescriptionandkeywordson every published package for npm search discovery. npm ranks on name, description, and keywords, and the registry only picks up these fields at publish — so this is metadata-only and takes effect for each package on its next release.Descriptions now lead with the search phrase. Every one starts
ESLint plugin for <the thing you'd search>instead of a brand-first or category-first framing, and names the concrete vulnerabilities the plugin actually detects. Three were corrected while doing so:eslint-plugin-import-nextclaimed "100x faster no-cycle detection". No 100x measurement exists:CLAIMS.mdrecords 3.1x end-to-end (8x in pure rule execution) on a 5,483-file React codebase, and the highest number in any benchmark result is 54.9x on the synthetic corpus. The description now states the real-codebase figure.eslint-plugin-secure-codingclaimed SQL injection, XSS and CSRF coverage — none of which are its rules. It now names what it does detect: LDAP, XPath, XXE, GraphQL and template injection, unsafe deserialization, ReDoS, missing authentication, and PII in logs.eslint-plugin-secure-coding("89 rules") andeslint-plugin-react-a11y("37 rules") hard-coded rule counts that had drifted from reality. Counts are generated intointerlace-numbers.json; hand-typed copies are removed rather than corrected.
Keywords now match the vocabulary of the plugins that rank.
eslint-plugin-security,eslint-plugin-jsx-a11y,eslint-plugin-nandeslint-plugin-importall carry theeslint/eslintplugin/eslint-plugintrio — six of our packages were missingeslintplugin, and every one now carries all three plusstatic-analysis,lintingandcode-quality. Security plugins addsast,appsecandvulnerability;node-securityandsecure-codingalso carrynodesecurity, the exact keywordeslint-plugin-securityranks on. Each plugin gained the CWE identifiers and attack names for what it detects (cwe-78command injection,cwe-22path traversal,cwe-89SQL injection,cwe-79XSS,cwe-347JWT algorithm confusion,cwe-352CSRF,cwe-943NoSQL injection), andnode-securitygained the crypto vocabulary it had been missing entirely despite absorbing the crypto rule set (crypto,cryptography,weak-hash,md5,sha1,timing-attack).No rule behavior, exports, or configuration changes.
-
Updated dependencies [
e1cdf83,659f6dc]:- @interlace/eslint-devkit@1.4.3
8.2.7
Patch Changes
- #274
acdd2adThanks @ofri-peretz! - Widen optional peer ranges to accept mongoose ^9 and mongodb driver ^7. The rules lint call patterns statically and never import either library, and the interface-compatibility suite passes against mongoose 9.7 / mongodb 7.5 — the old caps just brokenpm installin current-major repos.
8.2.6
Patch Changes
-
#269
7028fe2Thanks @ofri-peretz! - docs: dual-logo README header (Interlace mark + ESLint mark side by side) and closing Interlace footer — refreshes the README rendered on npmjs.com. No runtime changes. -
Updated dependencies [
7028fe2]:- @interlace/eslint-devkit@1.4.2
8.2.5
Patch Changes
- #252
d67e395Thanks @ofri-peretz! - Fix Codecov badge showing "unknown" — switch from flag to component URL format
8.2.4
Patch Changes
-
#143
213cde1Thanks @ofri-peretz! - fix(no-missing-null-checks): eliminate 53 false positives via three new narrowing patternsRules that were recognized as null guards are now correctly identified as safe:
- Truthy if guard —
if (obj) { obj.prop }— direct truthy check proves non-null. Also covers chains:if (response)protectsresponse.data.items. - Short-circuit AND —
obj && obj.prop— right side of&&only runs when left is truthy. - Ternary consequent —
obj ? obj.prop : fallback— truthy test guards the consequent.
Also: bumped
beforeAlltimeout to 30 seconds in 7 compatibility test files (__compatibility__/*.spec.ts). Native-addon packages routinely exceed the previous 10-second default on a cold ESM load. - Truthy if guard —
-
Updated dependencies [
736a5fe]:- @interlace/eslint-devkit@1.4.1
Added
- no-hardcoded-connection-string: Detect hardcoded
mongodb://andmongodb+srv://URIs in string and template literals (CWE-798, CVSS 7.5) - no-hardcoded-credentials: Flag
user,username,pass,password,authproperties with literal string values (CWE-798, CVSS 7.5) - no-debug-mode-production: Detect
mongoose.set('debug', true)calls exposing query details (CWE-489, CVSS 3.1) - no-unsafe-where: Detect
$whereoperator in object literals and.where('$where')method calls — RCE vector (CWE-943, CVSS 9.0) - no-operator-injection: Flag dangerous MongoDB operators (
$ne,$gt,$lt, etc.) when values reference user input (CWE-943, CVSS 9.1) - no-unbounded-find: Require
.limit()onfind()/findOne()queries to prevent resource exhaustion (CWE-400, CVSS 4.3) - require-tls-connection: Require
tls: trueorssl: trueinconnect()/createConnection()options (CWE-295, CVSS 7.4) - no-bypass-middleware: Flag Mongoose methods that bypass pre/post middleware hooks (
updateOne,deleteMany,insertMany,bulkWrite, etc.) (CWE-284, CVSS 5.3) - Comprehensive test suites for all 8 rules (163 total tests)
- Test coverage improved from 72.61% to 91.30% lines
[8.2.3] - 2026-02-08
Bug Fixes
- align codecov component IDs with full package names (2831b968)
Documentation
- fix changelog header format across all packages (c3a15082)
❤️ Thank You
- Ofri Peretz
[8.2.2] - 2026-02-06
Bug Fixes
- align codecov component names and update docs components (0a59a86c)
❤️ Thank You
- Ofri Peretz
[8.2.1] - 2026-02-02
This was a version bump only for eslint-plugin-mongodb-security to align it with other projects, there were no code changes.
Changelog
All notable changes to eslint-plugin-mongodb-security will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0] - 2026-01-09
Added
- Initial release with 16 security rules
- NoSQL Injection Prevention (4 rules)
no-unsafe-query- Prevents string concatenation in MongoDB queriesno-operator-injection- Prevents $ne, $gt, $lt injection attacksno-unsafe-where- Prevents $where operator RCE (CVE-2025-23061, CVE-2024-53900)no-unsafe-regex-query- Prevents ReDoS via $regex
- Credentials & Connection Security (4 rules)
no-hardcoded-connection-string- Prevents credentials in connection URIsno-hardcoded-credentials- Prevents hardcoded auth optionsrequire-tls-connection- Requires TLS for production connectionsrequire-auth-mechanism- Requires explicit SCRAM-SHA-256
- Mongoose ODM Security (5 rules)
require-schema-validation- Requires Mongoose schema validatorsno-select-sensitive-fields- Prevents returning password/token fieldsno-bypass-middleware- Prevents bypassing pre/post hooksno-unsafe-populate- Prevents user-controlled populate()require-lean-queries- Suggests .lean() for read-only queries
- Best Practices (3 rules)
no-unbounded-find- Requires limit() on find queriesrequire-projection- Requires field projectionno-debug-mode-production- Prevents debug mode in production
- Full support for
mongodb,mongoose,mongodb-client-encryption,@typegoose/typegoose - AI-optimized error messages with CWE and OWASP references
- Three configuration presets:
recommended,strict,mongoose - OWASP Top 10 2021 mapping (A01-A07 coverage)
View on GitHub →
Building secure JavaScript with Interlace? Star the repo to get new rules and CWE coverage as we ship them — or follow the AI-code-security benchmarks behind them.