Getting started
Introduction
Shipcheck is a small command-line tool that answers one question: is this project actually ready to ship?
Run shipcheck in a project and it checks for the common release blockers: uncommitted changes, failing tests, a broken production build, missing environment variables, a missing README or license, an already-released version number and missing CI. Each check passes, warns, fails or is skipped, and the exit code tells scripts whether it's safe to continue.
Deploy only when ready
$ shipcheck && ./deploy.shPrinciples
- Local and offline. No account, no API key, no network access and no telemetry. Your code never leaves your machine.
- Zero setup. Test and build commands are detected for Go, Node.js, Python, Java, PHP and Rust. A config file is optional.
- Read-only. Shipcheck never edits, deletes or commits your files. The only files written are the ones your own build writes, plus
.shipcheck.ymlwhen you runshipcheck init. - Scriptable. Stable exit codes and a JSON report make it easy to use in CI and deploy scripts.
What it checks
- Git: Repository present, working tree clean, on the branch you ship from.
- Tests: Detects your test runner and runs it. Fails if any test fails.
- Production build: Runs your production build so compile errors surface before deploy.
- Environment: Required variables are set, and values are never printed.
- README: The project explains what it is and how to run it.
- License: A license file exists, and common licenses are recognised.
- Version: Finds your version, and warns if that version was already released.
- CI: Continuous integration is configured. Recommended, not required.
What it is not
Shipcheck is a pre-shipping validation tool, not a deployment tool. It doesn't deploy, monitor, lint your code or manage infrastructure. It runs the commands you already have and checks the things that are easy to forget.
Next steps
- Install Shipcheck (Go 1.22 or newer).
- Follow the quick start to run your first check.
- Tune it with .shipcheck.yml if the defaults don't fit.
Found a mistake? Edit this page on GitHub