NPM Release Checklist
This checklist ensures a smooth and error-free npm release process for VibeTunnel.Pre-Release Checklist
1. Code Quality
- Run all tests:
pnpm test
- Run linting:
pnpm run lint
- Run type checking:
pnpm run typecheck
- Run format check:
pnpm run format:check
- Fix any issues found:
pnpm run check:fix
2. Dependency Updates
- Update all dependencies to latest versions
- Run
pnpm update --interactive --latest
- Test thoroughly after updates
- Check for security vulnerabilities:
pnpm audit
3. Version Updates (CRITICAL - Must be synchronized!)
- Update version in
web/package.json
- Update version in
web/package.npm.json
(must match!) - Update version in
mac/VibeTunnel/version.xcconfig
(MARKETING_VERSION) - Update version in
ios/VibeTunnel/version.xcconfig
(if applicable) - Ensure all versions match exactly
4. Changelog
- Update CHANGELOG.md with new features, fixes, and breaking changes
- Include migration guide for breaking changes
- Credit contributors
Build Process
5. Clean Build
- Clean previous builds:
rm -rf dist-npm/ vibetunnel-*.tgz
- Run build:
pnpm run build:npm
- Verify build output shows all platforms built successfully
- Check for ”✅ authenticate-pam listed as optional dependency” in output
6. Package Verification (CRITICAL)
- Verify tarball exists:
ls -la vibetunnel-*.tgz
- Extract package.json:
tar -xf vibetunnel-*.tgz package/package.json
- Verify authenticate-pam is OPTIONAL:
- Clean up:
rm -rf package/
- Check package size is reasonable (~8-15 MB)
7. Package Contents Verification
- List package contents:
tar -tzf vibetunnel-*.tgz | head -50
- Verify critical files are included:
-
package/lib/vibetunnel-cli
-
package/lib/cli.js
-
package/bin/vibetunnel
-
package/bin/vt
-
package/scripts/postinstall.js
-
package/scripts/install-vt-command.js
-
package/node-pty/
directory -
package/prebuilds/
directory with .tar.gz files -
package/public/
directory
-
Testing
8. Local Installation Test
- Test installation:
npm install -g ./vibetunnel-*.tgz
- Verify version:
vibetunnel --version
- Start server:
vibetunnel
- Access web UI: http://localhost:4020
- Test vt command:
vt echo "test"
- Uninstall:
npm uninstall -g vibetunnel
9. Docker Test (Linux Compatibility)
- Create test Dockerfile:
- Build:
docker build -t vt-test .
- Run:
docker run --rm vt-test
- Test without PAM headers (should succeed)
- Test with PAM: Add
RUN apt-get update && apt-get install -y libpam0g-dev
before install
10. Cross-Platform Testing
- Test on macOS (if available)
- Test on Linux x64
- Test on Linux ARM64 (if available)
- Verify prebuilds are used (no compilation during install)
Publishing
11. Pre-Publish Checks
- Ensure you’re logged in to npm:
npm whoami
- Check current tags:
npm dist-tag ls vibetunnel
- Verify no uncommitted changes:
git status
- Create git tag:
git tag v1.0.0-beta.X
12. Publish (CRITICAL - Use tarball filename!)
- Publish beta:
npm publish vibetunnel-*.tgz --tag beta
- Verify on npm: https://www.npmjs.com/package/vibetunnel
- Test installation from npm:
npm install -g vibetunnel@beta
13. Post-Publish Verification
- Check package page shows correct version
- Verify optional dependencies are displayed correctly
- Test installation on clean system
- Monitor npm downloads and issues
14. Promotion to Latest (if stable)
- Wait for user feedback (at least 24 hours)
- If stable, promote:
npm dist-tag add vibetunnel@VERSION latest
- Update documentation to reference new version
Post-Release
15. Documentation Updates
- Update README.md with new version info
- Update installation instructions if needed
- Update web/docs/npm.md release history
- Create GitHub release with changelog
16. Communication
- Announce release on relevant channels
- Notify users of breaking changes
- Thank contributors
Emergency Procedures
If Wrong package.json Was Used
- DO NOT PANIC
- Check if authenticate-pam is a regular dependency (bad) or optional (good)
- If bad, deprecate immediately:
- Increment version and republish following this checklist
If Build Failed to Include Files
- Check build logs for errors
- Verify all copy operations in build-npm.js succeeded
- Ensure no .gitignore or .npmignore is excluding files
- Rebuild with verbose logging if needed
Common Issues to Avoid
- NEVER use
npm publish
without tarball filename - it may rebuild with wrong config - ALWAYS verify authenticate-pam is optional before publishing
- ALWAYS sync versions across all config files
- NEVER skip the Docker test - it catches Linux issues
- ALWAYS use beta tag first - easier to fix issues before promoting to latest
Version Numbering
- Beta releases:
1.0.0-beta.X
where X increments - Patch releases:
1.0.0-beta.X.Y
where Y is patch number - Stable releases:
1.0.0
(no beta suffix)
Quick Commands Reference
Release Frequency
- Beta releases: As needed for testing new features
- Stable releases: After thorough testing and user feedback
- Security patches: ASAP after discovery