Image Optimization that Just Works. Anywhere.
No C++ bindings. No native deps. Just install and run — in your terminal, your CI pipeline, or your AI agent's tool belt.
Stop Fighting Native Dependencies.
Zero C++ Bindings
No python, make, or g++ required. Install with a single npx command and run anywhere Node.js runs.
Single Binary / Pure WASM
~5MB WASM engine with zero native dependencies. Runs on Docker Alpine, CI runners, and serverless functions.
Predictable JSON Output
Built for pipelines and AI agents. Pass --json to get structured results perfect for scripting and automation.
Structured Output for Programmatic Use
Switch to AI Mode with --json and get machine-readable output. Every file, its compression ratio, dimensions, and status — all in a structured JSON payload that your scripts and agents can parse without screen-scraping.
CLI Output Examples: Human & AI Modes
# Activate Pro license
$ getwebp auth XXXX-XXXX-XXXX-ABCD
Verifying license...
✓ Activated! Pro plan unlocked.
# Convert a directory of images (Pro: recursive, concurrent)
$ getwebp ./images -o ./images/webp -q 85
✓ hero.jpg
✓ banner.png
✓ product-shot.jpg
Done: 3 succeeded, 0 failed
Avg saved: 34.2%
# Check current license status
$ getwebp status
Version : 1.0.1
Mode : Pro
License : xxxx-xxxx-xxxx-ABCD
Expires : 2026-12-31
Devices : 1 / 3 used# Activate Pro license
$ getwebp auth XXXX-XXXX-XXXX-ABCD
Verifying license...
✓ Activated! Pro plan unlocked.
# Convert a directory of images (Pro: recursive, concurrent)
$ getwebp ./images -o ./images/webp -q 85
✓ hero.jpg
✓ banner.png
✓ product-shot.jpg
Done: 3 succeeded, 0 failed
Avg saved: 34.2%
# Check current license status
$ getwebp status
Version : 1.0.1
Mode : Pro
License : xxxx-xxxx-xxxx-ABCD
Expires : 2026-12-31
Devices : 1 / 3 used// $ getwebp ./images -o ./images/webp -q 85 --json
{
"success": true,
"status": "success",
"total": 3,
"successCount": 3,
"failedCount": 0,
"results": [
{
"file": "images/hero.jpg",
"status": "success",
"originalSize": 204800,
"newSize": 134144,
"savedRatio": 0.345,
"saved": "34.5%"
},
{
"file": "images/banner.png",
"status": "success",
"originalSize": 512000,
"newSize": 327680,
"savedRatio": 0.36,
"saved": "36.0%"
},
{
"file": "images/product-shot.jpg",
"status": "success",
"originalSize": 163840,
"newSize": 102400,
"savedRatio": 0.375,
"saved": "37.5%"
}
]
}Drop It Into Your Workflow
name: Optimize Images
on:
push:
paths:
- 'public/images/**'
jobs:
optimize:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install getwebp CLI
run: npm install -g getwebp
- name: Convert images to WebP
run: getwebp ./public/images --json > report.json
- name: Upload report
uses: actions/upload-artifact@v4
with:
name: webp-report
path: report.jsonFree is great for ad-hoc. Pro is built for pipelines.
| Feature | Free | Pro |
|---|---|---|
| Single directory conversion | ✓ | ✓ |
| Lossless / Lossy control | ✓ | ✓ |
| Unlimited recursive (-r) | — | ✓ |
| Multi-thread concurrency | — | ✓ |
| Unlimited JSON output (--json) | — | ✓ |
| Watch mode (--watch) | — | ✓ |
Developer FAQ
Yes, fully offline after install. The WASM engine runs entirely on your machine. License validation makes a single network call on activation, but image conversion itself never touches the internet.
Yes. Because it runs on pure WASM via Node.js, it works identically on macOS (Intel + Apple Silicon), Linux (x64 + ARM64), and Windows (x64). No platform-specific binaries required.
Sharp is a fantastic library but requires compiling native libvips bindings, which fails in Alpine Docker and serverless environments. getwebp uses a pure WASM engine — no compilation, no gyp, no native deps. It also ships as a CLI first, making it trivial to use in shell scripts and CI without writing Node.js code.
ImageMagick is a system-level tool that must be installed separately (apt-get, brew), varies by OS version, and has no structured output. getwebp is a self-contained Node.js package with consistent behavior everywhere and first-class JSON output for automation.
Yes. A single Pro license can be activated on up to 3 machines simultaneously. Need more? Contact us and we'll sort it out.