Production-readiness scan · 2026-10-22

sindresorhus/is-plain-obj

62/100

Workable, with significant gaps to close.

PARTIAL Dependencies were read from manifests only; transitive packages were not checked.

Fix first

medium

No lockfile committed

Dependency versions are declared as ranges, so two installs can resolve to different code and transitive dependencies could not be checked at all. Commit the lockfile your package manager produces.

medium

No start command is declared anywhere

The repository has a server entrypoint but no start script, Procfile, Docker CMD or platform config saying how to run it. Buildpacks guess, and guess differently from each other, so the first deploy either starts the wrong process or none at all.

index.js

medium

CI uses npm install without a committed lockfile

.github/workflows/main.yml runs npm install and no package-lock.json is present, so builds are non-reproducible and dependency drift can affect every CI run.

Nine dimensions

DevOps
55
GitHub Actions CI tests on push and PR across Node 18/22, but it uses npm install without a committed lockfile and lacks release or provenance automation.
Security
60
Full secret scan found nothing, OSV reports no advisories, and SECURITY.md exists, but no committed lockfile and unpinned dev ranges weaken supply-chain hygiene.
Cost & infra
78
No server, database or deployment footprint and MIT licensing keep infrastructure cost exposure minimal, though unpinned tooling ranges add minor maintenance cost.
QA & testing
30
CI runs XO, AVA and TSD on Node 18/22 for every PR, yet no coverage report is generated and test files are not enumerated.
Performance
65
A dedicated benchmark.js is present, but no committed benchmark results, profiling data, or automated performance regression check are visible.
Architecture
74
Single ES-module entrypoint with explicit type surface, sideEffects:false, files allowlist, and Node engine constraint keep the package boundary clean and predictable.
Code quality
68
Parsed source passes XO with zero warnings and the implementation is a tiny pure function, but only 29% of repository files were analyzed.
Observability
62
The boolean predicate has a documented contract and no runtime service to instrument, so absence of diagnostics is low risk but limits failure triage for callers.
Maintainability
70
MIT license, clear exports and types, focused README, and sideEffects:false aid maintenance, however dependency ranges are unpinned and 71% of files were unanalyzed.

Top findings (AI)

medium

CI uses npm install without a committed lockfile

.github/workflows/main.yml runs npm install and no package-lock.json is present, so builds are non-reproducible and dependency drift can affect every CI run.

medium

No automated dependency or code scanning configured

Only .github/security.md is present; no Dependabot, Renovate, CodeQL, Snyk or equivalent scanner is visible to detect vulnerable or malicious dependencies.

medium

No release, publish or provenance automation

No publish workflow, signed release, or npm provenance configuration is visible, leaving the published artifact dependent on manual steps and unsigned.

medium

Audit coverage is incomplete

Only 4 of 14 files (~29% of lines) were parsed for this assessment; the remaining 10 files, including tests and config, were not analyzed.

Report sections

Open a section for the evidence that drove the score. If you open one first, start with Code.

What this scan inspected

Every section above links to the evidence behind it. Nothing on this page is asserted without a source.

Scan your own repo

Free scan. No signup.

Run free scan