← All releases

wp-content/plugins/tessellate/tessellate.php

Tessellate

Serve images from object storage without letting the media library lose track of them.

== Description ==

Offloading uploads usually breaks something subtle: a plugin that calls get_attached_file() and gets a path that no longer exists. Tessellate keeps local stubs of the metadata and resolves paths through the standard filters, so code that never heard of object storage keeps working.

Uploads go to any S3-compatible endpoint. Deletion is opt-in per bucket, because the most expensive mistake in this category is a plugin that helpfully removed 400GB from cold storage.

The rewrite happens at output, not in the database. Turn the plugin off and every URL in your content still points somewhere valid.

== Screenshots ==

Numbered the way they ship in /assets/. Click any one to see it full width.

== Installation ==

  • Create a bucket and an access key limited to it.
  • Install the plugin and enter the endpoint, bucket and credentials under Settings → Media.
  • Run wp tessellate migrate --dry-run, read the output, then run it for real.

Credentials can be defined as constants in wp-config.php instead, which keeps them out of the database.

== Frequently asked questions ==

Does it rewrite URLs in my content?

No. Rewriting happens on output through the standard filters, so the database keeps the original URLs and the plugin stays removable.

What if the bucket is unreachable?

Uploads fail loudly rather than falling back to local storage silently, which would leave you with files in two places and no record of which.

== Changelog ==

= 4.1.1 =

  • Fixed: a missing trailing slash in a custom endpoint produced valid-looking URLs that 404ed.

= 4.1.0 =

  • Support for endpoints requiring path-style addressing, which several self-hosted providers do.

= 4.0.0 =

  • Deletion is now opt-in per bucket. Previously it followed the media library, which was too eager.
  • Dropped the bundled AWS SDK in favour of signed requests over the HTTP API.