{"id":361796,"date":"2026-09-07T15:58:13","date_gmt":"2026-09-07T15:58:13","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/kazcode-universal-storage\/"},"modified":"2026-09-12T15:50:50","modified_gmt":"2026-09-12T15:50:50","slug":"kazcode-universal-storage","status":"publish","type":"plugin","link":"https:\/\/sa.wordpress.org\/plugins\/kazcode-universal-storage\/","author":23557343,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.1","requires":"6.7","requires_php":"8.3","requires_plugins":null,"header_name":"KAZCODE Universal Storage","header_author":"KAZCODE","header_description":"Offload your WordPress Media Library to Amazon S3, Cloudflare R2, or S3-compatible object storage while keeping the native Media Library UX and attachment metadata in WordPress.","assets_banners_color":"3d4a67","last_updated":"2026-09-12 15:50:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/kazcode.net\/universal-storage\/","header_author_uri":"https:\/\/kazcode.net\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":165,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"kazmij","date":"2026-09-08 13:53:26","revision":3686762},"1.0.2":{"tag":"1.0.2","author":"kazmij","date":"2026-09-12 01:02:39","revision":3692234},"1.1.0":{"tag":"1.1.0","author":"kazmij","date":"2026-09-12 14:12:10","revision":3692749},"1.1.1":{"tag":"1.1.1","author":"kazmij","date":"2026-09-12 15:50:50","revision":3692887}},"upgrade_notice":{"1.1.1":"<p>Documentation and listing update only. Storage configuration, media inventory, schema, and runtime behavior are unchanged from 1.1.0.<\/p>","1.1.0":"<p>Adds resumable transfers, importer improvements, and safer restore\/cleanup behavior. Existing settings, profiles, media inventory, and attachment state are preserved.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3686778,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3686778,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3686778,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3686778,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.2","1.1.0","1.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3692749,"resolution":"1","location":"assets","locale":"","width":1280,"height":1069},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3692749,"resolution":"2","location":"assets","locale":"","width":1280,"height":1511},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3692749,"resolution":"3","location":"assets","locale":"","width":1280,"height":1523},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3692749,"resolution":"4","location":"assets","locale":"","width":1280,"height":1915},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3692749,"resolution":"5","location":"assets","locale":"","width":1280,"height":1979},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3692749,"resolution":"6","location":"assets","locale":"","width":1280,"height":933}},"screenshots":{"1":"See offload status, storage health, and recent activity.","2":"Configure Amazon S3, Cloudflare R2, or another S3-compatible endpoint and test before offload.","3":"Review offloaded items inside the normal WordPress media workflow.","4":"Process existing media in resumable batches with visible progress.","5":"Verify storage health, failed operations, and repair options before cleanup.","6":"Choose a provider, enter credentials, and confirm storage in guided setup."}},"plugin_section":[],"plugin_tags":[6918,255106,255105,19386,217],"plugin_category":[59],"plugin_contributors":[279599],"plugin_business_model":[],"class_list":["post-361796","plugin","type-plugin","status-publish","hentry","plugin_tags-amazon-s3","plugin_tags-cloudflare-r2","plugin_tags-media-offload","plugin_tags-object-storage","plugin_tags-s3","plugin_category-utilities-and-tools","plugin_contributors-kazmij","plugin_committers-kazmij"],"banners":{"banner":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/banner-772x250.png?rev=3686778","banner_2x":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/banner-1544x500.png?rev=3686778","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/icon-128x128.png?rev=3686778","icon_2x":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/icon-256x256.png?rev=3686778","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/screenshot-1.png?rev=3692749","caption":"See offload status, storage health, and recent activity."},{"src":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/screenshot-2.png?rev=3692749","caption":"Configure Amazon S3, Cloudflare R2, or another S3-compatible endpoint and test before offload."},{"src":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/screenshot-3.png?rev=3692749","caption":"Review offloaded items inside the normal WordPress media workflow."},{"src":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/screenshot-4.png?rev=3692749","caption":"Process existing media in resumable batches with visible progress."},{"src":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/screenshot-5.png?rev=3692749","caption":"Verify storage health, failed operations, and repair options before cleanup."},{"src":"https:\/\/ps.w.org\/kazcode-universal-storage\/assets\/screenshot-6.png?rev=3692749","caption":"Choose a provider, enter credentials, and confirm storage in guided setup."}],"raw_content":"<!--section=description-->\n<p>KAZCODE Universal Storage offloads your WordPress Media Library to Amazon S3, Cloudflare R2, or another S3-compatible provider without replacing the native Media Library.<\/p>\n\n<p>Upload media normally. KAZCODE can move originals and generated sizes to object storage, serve them from your bucket\/CDN, restore them, and resume supported interrupted transfers.<\/p>\n\n<p>Reliability is built into the workflow: remote files are verified before destructive cleanup, temporary provider errors are not treated as missing files, and interrupted operations remain recoverable.<\/p>\n\n<h4>What you can do with Free<\/h4>\n\n<ul>\n<li>Offload new uploads and existing Media Library files.<\/li>\n<li>Serve media from your bucket, endpoint, or CDN URL.<\/li>\n<li>Restore offloaded media to local WordPress storage.<\/li>\n<li>Use resumable multipart transfers for large files.<\/li>\n<li>Verify remote files before local cleanup.<\/li>\n<li>Review health, logs, and media status in wp-admin.<\/li>\n<li>Import\/adopt supported WP Offload Media and Advanced Media Offloader records.<\/li>\n<li>Use supported admin, WP-CLI, and REST workflows.<\/li>\n<li>Configure one primary storage profile.<\/li>\n<\/ul>\n\n<h4>Supported storage<\/h4>\n\n<p>Free supports Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 S3 API, MinIO, and custom S3-compatible endpoints. <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/storage-providers\/\">Read the storage provider docs<\/a><\/p>\n\n<h4>Import from another offload plugin<\/h4>\n\n<p>Already using WP Offload Media or Advanced Media Offloader? KAZCODE can read supported offload data without copying credentials, deleting competitor records, or changing bucket files. Verify imported media before disabling the old plugin.<\/p>\n\n<h4>Moving between storage providers<\/h4>\n\n<p>Pro is a separate add-on for multiple Storage Profiles and provider-to-provider migration, such as Amazon S3 to Cloudflare R2. Pro keeps the source authoritative until the destination is transferred, verified, and cut over. Optional source deletion is available after verification.<\/p>\n\n<p><a href=\"https:\/\/kazcode.net\/universal-storage\/#pricing\">View Pro features and pricing<\/a><\/p>\n\n<p>Safety and integrity features in Free remain part of the core plugin; they are not paywalled.<\/p>\n\n<h4>Documentation and support<\/h4>\n\n<p><a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/\">Documentation<\/a> | <a href=\"https:\/\/wordpress.org\/support\/plugin\/kazcode-universal-storage\/\">WordPress.org support<\/a> | <a href=\"https:\/\/kazcode.net\/universal-storage\/support\/\">KAZCODE support<\/a><\/p>\n\n<h3>External services<\/h3>\n\n<p>KAZCODE Universal Storage connects only to object-storage services configured by the site administrator. It does not send media, credentials, telemetry, or site data to any KAZCODE-owned service.<\/p>\n\n<p>The plugin can connect to Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2, MinIO, or another administrator-supplied S3-compatible endpoint. Connections occur only when the administrator configures\/tests storage, or uses offload, verify, restore, migrate\/adopt, or remote-delete functionality.<\/p>\n\n<p>Amazon S3 - https:\/\/aws.amazon.com\/s3\/\nAgreement: https:\/\/aws.amazon.com\/agreement\/ - Privacy: https:\/\/aws.amazon.com\/privacy\/<\/p>\n\n<p>Cloudflare R2 - https:\/\/developers.cloudflare.com\/r2\/\nTerms: https:\/\/www.cloudflare.com\/legal\/terms\/ - Privacy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/p>\n\n<p>DigitalOcean Spaces - https:\/\/www.digitalocean.com\/products\/spaces\nTerms: https:\/\/www.digitalocean.com\/legal\/terms-of-service-agreement - Privacy: https:\/\/www.digitalocean.com\/legal\/privacy-policy<\/p>\n\n<p>Wasabi Object Storage - https:\/\/wasabi.com\/product-terms\nLegal: https:\/\/wasabi.com\/legal - Privacy: https:\/\/wasabi.com\/legal\/privacy-policy<\/p>\n\n<p>Backblaze B2 - https:\/\/www.backblaze.com\/cloud-storage\nTerms: https:\/\/www.backblaze.com\/company\/policy\/terms-of-service - Privacy: https:\/\/www.backblaze.com\/company\/policy\/privacy<\/p>\n\n<p>MinIO and other S3-compatible endpoints - the plugin talks directly to the configured endpoint; terms and privacy depend on whoever operates it, not on KAZCODE. (https:\/\/min.io\/)<\/p>\n\n<!--section=installation-->\n<h4>Install from WordPress<\/h4>\n\n<ol>\n<li>In WordPress, go to <strong>Plugins &gt; Add New<\/strong>.<\/li>\n<li>Search for <strong>KAZCODE Universal Storage<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Open <strong>Universal Storage<\/strong> and follow setup, or open <strong>Universal Storage &gt; Storage<\/strong>.<\/li>\n<li>Choose your provider, enter bucket\/endpoint\/credentials, and run <strong>Test Connection<\/strong>.<\/li>\n<li>Enable automatic offload when you are ready.<\/li>\n<\/ol>\n\n<p>New uploads can now be offloaded automatically.<\/p>\n\n<h4>Existing Media Library<\/h4>\n\n<p>For an existing site, configure and test storage first, then process attachments in batches. Free moves local media into your first storage profile; Pro moves already-offloaded media between profiles\/providers. See <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/guides\/media-offload\/\">media offload<\/a> and <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/guides\/migrate-existing-media\/\">existing media<\/a>.<\/p>\n\n<h4>Already using another offload plugin?<\/h4>\n\n<p>Use the WP Offload Media or Advanced Media Offloader importer. It reads supported records, builds KAZCODE inventory, and leaves source data and credentials untouched. Verify before disabling the old plugin: <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/guides\/import-wp-offload-media\/\">WP Offload Media<\/a> or <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/guides\/import-advanced-media-offloader\/\">Advanced Media Offloader<\/a>.<\/p>\n\n<h4>Moving from one storage provider to another<\/h4>\n\n<p>Amazon S3 to Cloudflare R2 and provider-to-provider migration are Pro workflows: configure source and destination, transfer, verify, cut over, and optionally delete the old source. See <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/migration\/s3-to-r2\/\">S3 to R2<\/a> and <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/migration\/provider-to-provider\/\">provider migration<\/a>.<\/p>\n\n<h4>Before production cleanup<\/h4>\n\n<p>Before bulk local cleanup, test the connection, verify several media URLs, and use health\/verification tools.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20the%20wordpress%20media%20library%3F\"><h3>Does this replace the WordPress Media Library?<\/h3><\/dt>\n<dd><p>No. WordPress keeps attachment records, titles, alt text, and metadata. KAZCODE stores files in your object storage.<\/p><\/dd>\n<dt id=\"what%20is%20included%20in%20free%3F\"><h3>What is included in Free?<\/h3><\/dt>\n<dd><p>Free includes one storage profile, S3-compatible offload, existing media processing, URL delivery, restore, resumable transfers, verification before cleanup, diagnostics, and import\/adoption tools.<\/p><\/dd>\n<dt id=\"what%20does%20pro%20add%3F\"><h3>What does Pro add?<\/h3><\/dt>\n<dd><p>Pro adds multiple Storage Profiles, provider migration, verified cutover, optional source deletion, advanced health\/orphan tools, and network\/agency functions. <a href=\"https:\/\/kazcode.net\/universal-storage\/#pricing\">View Pro features and pricing<\/a><\/p><\/dd>\n<dt id=\"can%20i%20migrate%20from%20amazon%20s3%20to%20cloudflare%20r2%3F\"><h3>Can I migrate from Amazon S3 to Cloudflare R2?<\/h3><\/dt>\n<dd><p>Yes, with Pro. Destination storage is transferred and verified before delivery cuts over. <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/migration\/s3-to-r2\/\">Read the S3 to R2 guide<\/a><\/p><\/dd>\n<dt id=\"what%20happens%20if%20my%20storage%20provider%20is%20temporarily%20unavailable%3F\"><h3>What happens if my storage provider is temporarily unavailable?<\/h3><\/dt>\n<dd><p>Temporary errors, timeouts, authentication problems, and uncertain responses are unknown, not proof that a file is missing. Cleanup requires verification.<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20from%20wp%20offload%20media%3F\"><h3>Can I migrate from WP Offload Media?<\/h3><\/dt>\n<dd><p>Yes. It supports legacy records and the newer 3.4+ per-file model where supported. It is read-only toward the source plugin. <a href=\"https:\/\/kazcode.net\/universal-storage\/docs\/guides\/import-wp-offload-media\/\">Read the guide<\/a><\/p><\/dd>\n<dt id=\"does%20uninstalling%20delete%20files%20from%20my%20bucket%3F\"><h3>Does uninstalling delete files from my bucket?<\/h3><\/dt>\n<dd><p>No. Uninstalling does not delete remote objects, attachments, or local media files. The optional local data purge setting removes only KAZCODE's local plugin data.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Improved WordPress.org plugin description and onboarding instructions.<\/li>\n<li>Added clearer installation guidance for new and existing Media Libraries.<\/li>\n<li>Added clickable documentation, migration, support, and pricing links.<\/li>\n<li>Clarified Free vs Pro capabilities and supported migration\/import workflows.<\/li>\n<li>Improved FAQ and screenshot descriptions.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added resumable multipart transfers.<\/li>\n<li>Improved WP Offload Media and Advanced Media Offloader import\/adoption.<\/li>\n<li>Improved restore, verification, retry, profile-aware delivery, and cleanup safety.<\/li>\n<li>Added Pro multiple profiles, provider migration, verified cutover, and optional source deletion.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Improved long object-key identity and database upgrade safety.<\/li>\n<\/ul>","raw_excerpt":"Reliable WordPress media offload for S3, Cloudflare R2 and S3-compatible storage, with safe restore and resumable transfers.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361796"}],"author":[{"embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kazmij"}],"wp:attachment":[{"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361796"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361796"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361796"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361796"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361796"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}