{"_id":"ship-parity","_rev":"4-3987a3da012b8580540965081ed0c339","name":"ship-parity","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"ship-parity","version":"0.1.0","keywords":["production-readiness","deployment","nextjs","vite","vercel","netlify","developer-tools","cli"],"author":{"name":"Debaditya Hait"},"license":"MIT","_id":"ship-parity@0.1.0","maintainers":[{"name":"dhait","email":"debaditya2005hait@gmail.com"}],"homepage":"https://github.com/DebadityaHait/ship-parity#readme","bugs":{"url":"https://github.com/DebadityaHait/ship-parity/issues"},"bin":{"ship-parity":"dist/cli.js"},"dist":{"shasum":"e5f0d61b6ed38d35b80f1a64142b9fe3cee889ae","tarball":"https://registry.npmjs.org/ship-parity/-/ship-parity-0.1.0.tgz","fileCount":57,"integrity":"sha512-JX/03fLY6GiLFSSvCSusTIwrqYpwpMgvstmhcDHPXejX0YiKmHdz6VOpyfZ/6p5E1hxZybWms3+aHcKVD+FPKQ==","signatures":[{"sig":"MEQCIBZYEdCiIqbHkybmOPLtQurTHyvS5UE4BZoZdDX05KYSAiBBX0is4ob9xPB9ECxb9lFjQXBc6URuv3xKKwx5PyOgVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39320},"type":"module","engines":{"node":">=20"},"gitHead":"72775df92a3c1319d97262c59c160eca2fcfb5c6","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"npm run build:test && node --test dist/test/*.test.js","build":"tsc -p tsconfig.json && node -e \"require('node:fs').rmSync('dist/test',{recursive:true,force:true})\"","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","test:cli":"npm run build && node dist/cli.js --help && node dist/cli.js --json","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.json"},"_npmUser":{"name":"dhait","email":"debaditya2005hait@gmail.com"},"repository":{"url":"git+https://github.com/DebadityaHait/ship-parity.git","type":"git"},"_npmVersion":"12.0.1","description":"Catch the 'works in preview, breaks in production' mistakes vibe-coded apps ship with.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ship-parity_0.1.0_1787158465475_0.810908954905216","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"ship-parity","version":"0.1.1","keywords":["production-readiness","deployment","nextjs","vite","vercel","netlify","developer-tools","cli"],"author":{"name":"Debaditya Hait"},"license":"MIT","_id":"ship-parity@0.1.1","maintainers":[{"name":"dhait","email":"debaditya2005hait@gmail.com"}],"homepage":"https://github.com/DebadityaHait/ship-parity#readme","bugs":{"url":"https://github.com/DebadityaHait/ship-parity/issues"},"bin":{"ship-parity":"dist/cli.js"},"dist":{"shasum":"0f532d11d59792700b217d148bb3d823bb0e903d","tarball":"https://registry.npmjs.org/ship-parity/-/ship-parity-0.1.1.tgz","fileCount":73,"integrity":"sha512-Bi8Kn2EEBS7tum59RJimWZEZGNigMY1tjrL2jOjlMJ7j9rMUn6HNZwKo9g4w+zgvpZmJtTVZNtD1E+sri4041Q==","signatures":[{"sig":"MEUCIFcBYiztl+y5l3VgnIQvB0j9SdJjP2OhBbZ6zt8+C8PJAiEA2WktDk5dBEOrdIAFP4NrEFrmSvVMmSflOIEFc3eSqoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68349},"type":"module","engines":{"node":">=20"},"gitHead":"c0804a5f93c4e3eb3baba3f62b86f9d0c4e8dabb","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"npm run build:test && node --test dist/test/*.test.js","build":"tsc -p tsconfig.json && node -e \"require('node:fs').rmSync('dist/test',{recursive:true,force:true})\"","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","test:cli":"npm run build && node dist/cli.js --help && node dist/cli.js --json","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.json"},"_npmUser":{"name":"dhait","email":"debaditya2005hait@gmail.com"},"repository":{"url":"git+https://github.com/DebadityaHait/ship-parity.git","type":"git"},"_npmVersion":"12.0.1","description":"Catch the 'works in preview, breaks in production' mistakes vibe-coded apps ship with.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ship-parity_0.1.1_1787159401062_0.8573926169026871","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"ship-parity","version":"0.1.2","keywords":["production-readiness","deployment","nextjs","vite","vercel","netlify","developer-tools","cli"],"author":{"name":"Debaditya Hait"},"license":"MIT","_id":"ship-parity@0.1.2","maintainers":[{"name":"dhait","email":"debaditya2005hait@gmail.com"}],"homepage":"https://github.com/DebadityaHait/ship-parity#readme","bugs":{"url":"https://github.com/DebadityaHait/ship-parity/issues"},"bin":{"ship-parity":"dist/cli.js"},"dist":{"shasum":"4cab9fc6aa817530bc9176a2972412d541b7064e","tarball":"https://registry.npmjs.org/ship-parity/-/ship-parity-0.1.2.tgz","fileCount":73,"integrity":"sha512-j7CLlqp17ivoda6eSngi3mGh+rBC77LWsUbg4B3/4MhrRR7CjWYL3056qoD2+QhjXooxV91abnLtfy2q6AimJA==","signatures":[{"sig":"MEYCIQCostrxsgB4smA8pS6X0MM+uq/bwX6g4xV3ynuXvONpLQIhAOrohPg0xH0EnvwffcovtMfIXEgTflmkduoU8urzezQm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68420},"type":"module","engines":{"node":">=20"},"gitHead":"01d7c410174c286e7f0e41770eb791b5ad9a8a43","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"npm run build:test && node --test dist/test/*.test.js","build":"tsc -p tsconfig.json && node -e \"require('node:fs').rmSync('dist/test',{recursive:true,force:true})\"","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","test:cli":"npm run build && node dist/cli.js --help && node dist/cli.js --json","typecheck":"tsc -p tsconfig.json --noEmit","build:test":"tsc -p tsconfig.json"},"_npmUser":{"name":"dhait","email":"debaditya2005hait@gmail.com"},"repository":{"url":"git+https://github.com/DebadityaHait/ship-parity.git","type":"git"},"_npmVersion":"12.0.1","description":"Catch the 'works in preview, breaks in production' mistakes vibe-coded apps ship with.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/ship-parity_0.1.2_1787159518385_0.7021162161859775","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"ship-parity","version":"0.2.0","description":"Catch the 'works in preview, breaks in production' mistakes vibe-coded apps ship with.","author":{"name":"Debaditya Hait"},"keywords":["production-readiness","deployment","nextjs","vite","vercel","netlify","developer-tools","cli"],"type":"module","bin":{"ship-parity":"dist/cli.js"},"engines":{"node":">=20"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DebadityaHait/ship-parity.git"},"bugs":{"url":"https://github.com/DebadityaHait/ship-parity/issues"},"homepage":"https://github.com/DebadityaHait/ship-parity#readme","publishConfig":{"access":"public","provenance":true},"scripts":{"build":"tsc -p tsconfig.json && node -e \"require('node:fs').rmSync('dist/test',{recursive:true,force:true})\"","build:test":"tsc -p tsconfig.json","lint":"tsc -p tsconfig.json --noEmit","typecheck":"tsc -p tsconfig.json --noEmit","test":"npm run build:test && node --test dist/test/*.test.js","test:cli":"npm run build && node dist/cli.js --help && node dist/cli.js --json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\""},"devDependencies":{"@types/node":"^22.10.0","typescript":"^5.7.2"},"gitHead":"7af6b7c56f371d77b391484028a23a42f7c7d0b8","_id":"ship-parity@0.2.0","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-yoj/29SynK/M0ApI71XxCPqec+OnPWeP1L34Qs1mXdurKZhftsbPe/b2Yy39YQP2+FSaSSwGtmbX+XehNvGnGw==","shasum":"5f01f2dea1cae4d4c071e80347a1f2c68f75d741","tarball":"https://registry.npmjs.org/ship-parity/-/ship-parity-0.2.0.tgz","fileCount":81,"unpackedSize":79759,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD85+ZbtwDQ+8bF4ALbHYBjL69+IdIfXsImsxr8Xq1zBAIhANCXsLSeiWeO1NuLnG3jV+i9cCcL3Ny6QnDmzq4sDwZw"}]},"_npmUser":{"name":"dhait","email":"debaditya2005hait@gmail.com"},"directories":{},"maintainers":[{"name":"dhait","email":"debaditya2005hait@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ship-parity_0.2.0_1787166759418_0.7892321284961397"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-19T16:54:25.326Z","modified":"2026-08-19T19:12:39.757Z","0.1.0":"2026-08-19T16:54:25.641Z","0.1.1":"2026-08-19T17:10:01.206Z","0.1.2":"2026-08-19T17:11:58.571Z","0.2.0":"2026-08-19T19:12:39.552Z"},"bugs":{"url":"https://github.com/DebadityaHait/ship-parity/issues"},"author":{"name":"Debaditya Hait"},"license":"MIT","homepage":"https://github.com/DebadityaHait/ship-parity#readme","keywords":["production-readiness","deployment","nextjs","vite","vercel","netlify","developer-tools","cli"],"repository":{"type":"git","url":"git+https://github.com/DebadityaHait/ship-parity.git"},"description":"Catch the 'works in preview, breaks in production' mistakes vibe-coded apps ship with.","maintainers":[{"name":"dhait","email":"debaditya2005hait@gmail.com"}],"readme":"# Ship Parity\n\n[![npm version](https://img.shields.io/npm/v/ship-parity?logo=npm)](https://www.npmjs.com/package/ship-parity)\n[![CI](https://github.com/DebadityaHait/ship-parity/actions/workflows/ci.yml/badge.svg)](https://github.com/DebadityaHait/ship-parity/actions/workflows/ci.yml)\n[![Node.js](https://img.shields.io/node/v/ship-parity)](https://nodejs.org/)\n[![License](https://img.shields.io/npm/l/ship-parity)](./LICENSE)\n\nDeployment-readiness checks for projects that work locally or in preview but fail after release. Ship Parity detects framework/provider/package-manager drift, secret exposure patterns, runtime mismatch, missing environment names, private origins, debug leftovers, and contract violations without uploading the repository.\n\n## Position in the ecosystem\n\n[shipready](https://github.com/formalness/shipready) is a broad AI-coded repository pre-flight scanner that also generates agent files. [@decocms/parity](https://www.npmjs.com/package/%40decocms/parity) compares two deployed URLs with browser, functional, SEO, network, and visual checks. Ship Parity is the local pre-deployment contract layer: it validates what the project declares and what the source tree references before a build or deployment is attempted.\n\n## Install\n\n```bash\nnpm install --save-dev ship-parity\nnpx ship-parity --help\n```\n\nNode.js 20 or newer is required.\n\n## Run checks\n\n```bash\n# Local, offline, read-only report\nnpx ship-parity check .\n\n# Machine-readable reports\nnpx ship-parity --json > ship-parity.json\nnpx ship-parity --markdown > ship-parity.md\nnpx ship-parity --sarif > ship-parity.sarif\n\n# Make warnings block CI\nnpx ship-parity --strict\n```\n\nExample output:\n\n```text\nShip Parity - deployment readiness\n  Framework: vite\n  Package manager: pnpm\n  Provider: vercel\n  Integrations: supabase\n  Findings: 1 errors, 1 warnings\n\n  ERROR SHP001  Secret-looking environment name uses a public client prefix: VITE_SERVICE_ROLE_KEY\n  WARNING SHP008  Debug statement remains in production-bound source.\n```\n\n## What it checks\n\n| Area | Current coverage |\n| --- | --- |\n| Framework | Next.js, Vite, Svelte, Astro, Remix, Nuxt |\n| Hosting | Vercel, Netlify, Cloudflare, Railway, Render |\n| Integrations | Supabase, Firebase, Clerk, Auth.js |\n| Configuration | npm/pnpm/Yarn/Bun locks, Node declarations, `ship-parity.yml` |\n| Exposure | public-prefix secrets, tracked `.env`, private/local origins |\n| Hygiene | debug statements, logs, dumps, temporary and coverage artifacts |\n| Reports | terminal, schema-versioned JSON, Markdown, SARIF |\n\nFinding IDs include `SHP001` public secret name, `SHP002` missing contract environment name, `SHP003` tracked environment file, `SHP004` private origin, `SHP006` runtime drift, `SHP007` generated artifact, and `SHP008` debugger/console debug statement.\n\n## Deployment contract\n\nGenerate a reviewable contract from the detected project:\n\n```bash\nnpx ship-parity init\n```\n\nEdit `ship-parity.yml` to record names and expectations—not secret values:\n\n```yaml\nexpectedOrigin: \"https://app.example.com\"\nnodeVersion: \">=20\"\nbuildCommand: \"pnpm build\"\noutputDirectory: \"dist\"\nhealthPath: \"/health\"\nrequiredEnv:\n  - DATABASE_URL\n  - VITE_PUBLIC_NAME\npublicEnvPrefixes:\n  - VITE_\n```\n\n`init` refuses to overwrite an existing contract unless `--force` is supplied. `--build` runs the project’s build script only with explicit `--build --yes` confirmation; normal checks never execute project code.\n\n## Privacy and limits\n\n- offline and read-only by default;\n- `.env` values, source values, and secret-shaped strings are never retained in reports;\n- observations include source paths and line numbers so findings are actionable;\n- static checks cannot prove cloud runtime behavior or replace a real staging smoke test.\n\n## Development\n\n```bash\nnpm install\nnpm run lint\nnpm test\nnpm run test:cli\nnpm pack --dry-run\n```\n\nIssues and pull requests are welcome in the [GitHub repository](https://github.com/DebadityaHait/ship-parity).\n\n## License\n\nMIT © Debaditya Hait\n","readmeFilename":"README.md"}