v0.3.0
The first release packaged for general use. An installable zip is attached below — it unpacks to a single r2-stateless-media-offload/ directory, ready for wp-content/plugins/ or the Plugins → Add New → Upload screen.
What's new
- Uploads no longer touch R2 during image processing. Thumbnail generation runs uninterrupted; one batched upload ships the original and every size afterwards. Dramatically friendlier to small containers and shared-CPU hosts.
- A URL never precedes its object. Media URLs only switch to the CDN once every file is confirmed present in R2 — a fresh upload can never render a CDN URL that 404s (or poison an edge cache with that 404).
- Interrupted uploads self-heal. WordPress's REST post-process resume is fully supported via a shutdown backstop; metadata-less programmatic inserts offload too.
- Evidence-based Stateless cleanup. Local copies are removed at request end only when the attachment finished fully synced; regeneration sources (image and PDF originals) stay on disk until completion is proven. Multisite blog-aware.
Docs
- New README section: Design & compatibility — why hook-based beats a stream wrapper for ecosystem compatibility, and the ordering guarantees the plugin makes.
- CONFIGURATION · MIGRATION · ARCHITECTURE
All changes reviewed across multiple rounds of automated review (CodeRabbit, Cursor Bugbot, Codex, Blocks) with every finding fixed or explicitly dispositioned.
🤖 Generated with Claude Code