
Company News
Free Business Plan Upgrades for Open Source Maintainers
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.
Statically predict the common 'passes locally, fails in CI' failures before you push: version drift, stale lockfiles, missing env, OS-only shell steps, and npm 12's default-blocked install scripts/git deps/remote deps.
Catch the "passes locally, fails in CI" bugs before you push — statically, in about 50ms, with no Docker.
You edit, commit, push, wait 8 minutes, and CI fails on something your machine never sees: a Node version your workflow pins differently, a lockfile that's out of sync with npm ci, a secret the workflow injects that your shell doesn't have, a sed -i that only works on Linux. ci-parity reads your workflow files and your repo's config and predicts those failure classes locally.
$ npx ci-parity
ci-parity scanned 1 workflow file(s) in .
[fail-in-ci] Node major version disagrees across your config files
- .nvmrc: 18 (Node 18.x)
- package.json engines.node: >=20 (Node 20.x)
- ci.yml setup-node node-version: 22 (Node 22.x)
fix: Pick one source of truth. Put the version in .nvmrc and point the
workflow at it with node-version-file, then match engines.node.
[fail-in-ci] 1 dependency is in package.json but not in package-lock.json
- out of sync: left-pad
- workflow install: npm ci
fix: Run `npm install` to regenerate package-lock.json, then commit it.
[parity-risk] 1 env var your workflow injects is absent locally
- DEPLOY_KEY <- secrets.DEPLOY_KEY (ci.yml); not in your shell or .env
2 likely-to-fail-in-CI, 2 parity risk(s). Push will likely fail CI.
Exit code is 1 when something will likely fail CI, so it drops straight into a pre-push hook.
run: scripts. It does not compare your workflow to your local environment. ci-parity is exactly that comparison.ci-parity doesn't run anything — it predicts the mismatches statically. Use both: ci-parity for the fast pre-push gate, act when you need to actually execute a job.All static. No network, no Docker, no running your build.
.nvmrc, .tool-versions, package.json engines.node, actions/setup-node in your workflows, and your locally-installed node. Single-source setups (node-version-file: .nvmrc) are treated as healthy and never flagged.packageManager: "pnpm@9" (Corepack) field with no pnpm-lock.yaml committed resolves installs differently in CI than locally.package.json that aren't in package-lock.json — the exact drift that makes npm ci / frozen installs exit non-zero in CI while npm install passes on your machine.secrets.* / vars.* that aren't in your shell or a local .env. When a test reads one, local and CI can take different code paths.run: steps using GNU-only forms (sed -i without a suffix, readlink -f, grep -P, date -d, stat -c) that behave differently on a macOS/Windows dev machine than the Linux runner.allow-scripts, allow-git, and allow-remote to deny. It flags dependencies with lifecycle install scripts (read straight from package-lock.json's hasInstallScript field, no install needed), git-protocol deps, and remote tarball-URL deps that will silently stop working the moment CI upgrades npm — unless you've already opted in via .npmrc.npx ci-parity # one-off, no install
npm i -D ci-parity # add to a project
Run the same check as a CI job — catches the same failures on a teammate's PR who skipped the hook:
- uses: fernforge/ci-parity@v0.2.0
with:
path: . # optional, default "."
strict: false # optional, fail on warnings too
With simple-git-hooks:
{
"simple-git-hooks": { "pre-push": "npx ci-parity" }
}
Or husky — drop npx ci-parity into .husky/pre-push. A non-zero exit blocks the push.
ci-parity [path] scan a repo (default: current directory)
--json machine-readable output
--strict exit 1 on parity risks (warnings) too, not just likely failures
--warn-only always exit 0 (report without blocking)
-h, --help
-v, --version
Exit codes: 0 clean (or --warn-only), 1 a finding that will likely fail CI (or any finding under --strict), 2 internal error.
GitHub Actions + npm/pnpm/yarn today. It reasons about .github/workflows/*.yml and standard Node config files; other CI providers aren't covered yet. It predicts a specific, common set of failure classes — it's not a substitute for running your tests.
MIT. Built autonomously by an AI agent.
FAQs
Statically predict the common 'passes locally, fails in CI' failures before you push: version drift, stale lockfiles, missing env, OS-only shell steps, and npm 12's default-blocked install scripts/git deps/remote deps.
The npm package ci-parity receives a total of 12 weekly downloads. As such, ci-parity popularity was classified as not popular.
We found that ci-parity demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.