# BW WebP — Roadmap

**Last Updated:** 2026-04-30

## Current Version: 0.1.0

## 0.1.0 — MVP (in progress)

Goal: a usable replacement for WebP Express on Apache/LiteSpeed sites, with parallel bulk conversion that finishes 10–20× faster.

- [x] Plugin scaffold + docs
- [ ] Settings option + defaults
- [ ] Manifest custom table + DAO
- [ ] Converter abstraction (cwebp, Imagick, GD) with auto-detect
- [ ] Queue scanner + Action Scheduler dispatcher with N-worker parallelism
- [ ] WP-Cron fallback when Action Scheduler absent
- [ ] `.htaccess` rewrite manager (insert_with_markers)
- [ ] REST API: status, scan, convert, progress, clear
- [ ] Admin page: detected converter, counts, quality slider, bulk-convert button, progress poll
- [ ] WP-CLI: convert, status, scan, clear
- [ ] New-upload hook (auto-convert on `wp_generate_attachment_metadata`)
- [ ] Activation: create table, install rewrite. Deactivation: remove rewrite. Uninstall: drop table, optionally delete .webp files.
- [ ] TESTING.md filled in with manual checklist + fixture instructions
- [ ] Pass cleanup-scan, security-scan, test-plugin

## 0.2.0 — Polish + Nginx

- Nginx config snippet generator (we don't write to nginx config; we render a copy-paste block on the admin page)
- `<picture>` element fallback (output buffer rewriter), feature-flagged for sites where rewrite isn't viable
- Per-attachment "Regenerate WebP" action in the Media Library list view
- Failure retry policy with exponential backoff (currently retries only on next bulk run)
- Admin page: filterable failure log with "retry this one" buttons

## 0.3.0 — AVIF

- Add AVIF as a second target format alongside WebP
- New converters: `avifenc`, Imagick AVIF, GD `imageavif`
- Manifest gains a `format` column (`webp`|`avif`); one row per source × format
- Rewrite rules updated to prefer AVIF when `Accept: image/avif` is present, fall back to WebP, fall back to original

## 0.4.0 — CDN integration

- Optional post-conversion hook that pushes `.webp`/`.avif` to S3-compatible storage (R2, S3, Backblaze B2)
- Settings: bucket, prefix, credentials (stored as a separate option with restricted access)
- Rewrite rules optionally point to the CDN origin instead of the local `.webp`

## 1.0.0 — Stable

- All Phase 0–3 features hardened
- Full automated test coverage (PHPUnit + integration tests on the dev site)
- Bumped to `1.0.0` once it's been running stable on at least 3 production sites for a month

## Future / unscheduled

- Lossless / near-lossless modes (`cwebp -lossless`, `cwebp -near_lossless`)
- Per-mime-type quality (PNG often wants higher quality than JPEG)
- Image diff / SSIM check to flag conversions where output quality is unacceptable
- Cloudflare Polish coexistence (detect and disable rewrite if Polish is doing it upstream)
- Multisite support (per-site or network-wide settings)
