KAZCODE Universal Storage logo KAZCODE Universal Storage

Changelog

Release history

1.1.2 - per-profile credential configuration

This release fixes additional Storage Profile setup for Pro multi-provider workflows. Customers can configure profile-specific provider credentials through wp-admin while keeping existing site-wide credential behavior available.

Fixed

  • Additional Storage Profiles can now use their own Access Key ID and Secret Access Key.
  • Profile Test Connection now uses the selected profile's effective credentials.
  • Saved secret values are preserved on edit without being redisplayed in plaintext.
  • Existing site-wide credential mode and legacy profile credential references continue to work.

KAZCODE Universal Storage Pro remains a separate add-on; the current Pro release remains compatible with Free/Core 1.1.2.

1.1.0 - resumable transfers and safe provider migration

KAZCODE Universal Storage 1.1.0 expands the product from reliable media offload into safe storage migration. Free gains the current reliability foundation, resumable large-file handling, and importer improvements. Pro adds multiple profiles and verified provider-to-provider migration.

Free

  • Resumable multipart transfer support for large media.
  • Object-key identity hardening for long storage paths.
  • Improved retry behavior when storage providers return temporary or unknown errors.
  • WP Offload Media importer support for legacy and 3.4+ per-file models.
  • Advanced Media Offloader adoption/import hardening.

Pro

  • Multiple storage profiles with independent credentials.
  • Resumable provider-to-provider and bucket-to-bucket migration.
  • Verified destination cutover: source remains authoritative until destination verification succeeds.
  • Optional safe source deletion after verified cutover.
  • Advanced health/orphan tooling for operator workflows.

Upgrade notes

  • Free upgrades the database schema to version 3.
  • Existing 1.0.2 object inventory and storage-profile affinity are preserved.
  • Pro 1.1.x requires Free/Core 1.1.0 or newer.

1.0.1 - reliability and compatibility hotfix

This release strengthens the data-safety contract around offloaded media: KAZCODE now keeps local files unless the correct remote object is proven, treats temporary provider failures as unknown instead of missing, and prevents stale background workers from overwriting newer media state with stale results.

Data integrity

  • Local media cleanup now requires size-verified remote objects, not only a successful existence check.
  • Timeouts, throttling, authentication failures, and provider outages are classified as unknown/provider errors rather than confirmed missing objects.
  • Changed local bytes are uploaded even when the remote key and byte length are unchanged.
  • Partial restores keep remaining recovery metadata and object inventory intact.
  • Partial provider batch-delete failures remain visible and retryable.

Multi-profile and shared media

  • Existing media is restored, verified, signed, materialized, and deleted through the Storage Profile where it was actually stored.
  • Changing the default upload profile no longer changes where older media is read from or operated on.
  • The Amazon S3 preset now ignores stale custom endpoint/path-style values, so a previous MinIO or custom S3 endpoint cannot break AWS S3 connection tests.
  • Remote delete now fails closed when an object may be shared by another attachment or ownership is ambiguous.
  • Cross-profile migration keeps verify-before-switch behavior and preserves the source when destination verification is uncertain.

WordPress compatibility

  • Remote-only media now works more reliably through WordPress REST and editor flows that inspect original image metadata.
  • Image Editor, regenerate, and local materialization paths use the bound Storage Profile instead of the current default profile.
  • WordPress 7.1 media metadata generation guards remain in place so cleanup cannot run while image sizes are still being generated.
  • Admin tutorials can now be disabled globally across plugin screens while still allowing manual replay.
  • Storage Profile delete controls now stay visible and explain why deletion is blocked when a profile is protected.

Concurrency and packaging

  • State-mutating attachment operations now use fenced leases with owner tokens and monotonic generations.
  • Expired workers cannot release a newer worker's lock or overwrite newer attachment state.
  • The release build improves Composer, AWS SDK, Guzzle, PSR, and Symfony isolation for coexistence with other plugins and Composer-based WordPress installs.

Upgrade notes

  • No database schema change is introduced in 1.0.1.
  • Existing settings, Storage Profiles, object inventory, license state, and offloaded media continue to work after updating.
  • The full physical-object reference model, crash-resumable multipart uploads, competitor importers, and deeper integration work remain deferred to later feature releases.

1.0.0 — first public release

Added

  • Amazon S3, Cloudflare R2, and S3-compatible storage (DigitalOcean Spaces, Wasabi, Backblaze B2, MinIO, or a custom endpoint)
  • Native WordPress Media Library integration — status column, row/bulk actions, unchanged Grid/List/modal/Featured Image/Gutenberg experience
  • Object-level media inventory, including every generated image size
  • Safe handling of partial uploads — a failed size is never falsely marked offloaded
  • Retry of failed or missing media objects, and restore back to WordPress on demand
  • Storage health checks and verification, with an AWS setup assistant (checklist + a ready-to-use least-privilege IAM policy)
  • Storage Profiles — connection, credentials, and delivery URL configuration
  • A first-run setup wizard and an in-admin overview of what KAZCODE Universal Storage Pro adds
  • PHP-Scoper–isolated AWS SDK, so it won't collide with other plugins bundling their own copy

Pro

KAZCODE Universal Storage Pro is a separate add-on. It adds multiple storage profiles with independent credentials, cross-provider/cross-bucket migration with verify-before-switch safety, a dry-run orphan scan, advanced storage health, and multisite network defaults. Deactivating Pro never deletes data or breaks media already being served.

Compatibility

  • Requires WordPress 6.7+ and PHP 8.3+
  • Verified against WordPress 7.1, PHP 8.3 / 8.4 / 8.5
  • Verified against Amazon S3, Cloudflare R2 (including a live S3 → R2 migration), and MinIO