
Serendipity composes a mosaic from your photographs — not a grid with the gaps filled in, but a
partition of the space where every tile earns its size. Compose one, keep it, and it stays exactly
as you left it: layouts are saved per breakpoint, so a gallery looks deliberate on a phone as well
as a desktop.
A masonry-style gallery that fills its space
If you want a gallery that isn’t a rigid grid, this is one. Like a masonry gallery, Serendipity
mixes tiles of different sizes, and the more photographs you give it, the more they vary. Unlike
one, it doesn’t run on down the page in uneven columns: it fills the space you give it, cropping
each photograph to its tile. Choose Refresh Layout & Save in the block toolbar until you like
what it composes. It saves for the breakpoint you are editing.
It is a block, not a custom post type. There is no separate gallery screen to visit, nothing to
sync, and nothing left behind if you deactivate the plugin — the gallery lives in the post where
you put it.
Bring your own lightbox
Serendipity links each image to its full-size file and groups the gallery, which is what lightbox
plugins look for. If you already run one, it will pick these galleries up with no configuration.
If you would rather it did not, there is a setting for that too: link to the file without grouping,
link to the attachment page, or emit no link at all.
What it does
- A generative mosaic engine — compose, refresh, keep the one you like
- Saved layouts at all three breakpoints, so nothing reshuffles on a phone
- Gap, minimum height, thumbnail and full-size resolution
- Stack on mobile, for galleries that read better as a column
- Lightbox-agnostic output, or no links at all
- One hover style, Fade-Up, with captions
- Four starter block patterns
- Loads nothing on pages that have no gallery
External services
This plugin does not contact any external service. It sends nothing on page loads, nothing in
the background, and nothing on a schedule. Galleries, layouts and settings never leave your
site.
Links to GhostLabs — not a service. The plugin links to two GhostLabs sites from wp-admin and
the block editor. It never contacts either one: nothing is requested from them, and the plugin
sends them nothing.
- https://theghostlab.io — GhostLabs’ site, including Serendipity Deluxe’s product page
(/serendipity). - https://enter.theghostlab.io/account — your GhostLabs account, where Serendipity Deluxe is
downloaded after you buy it. It is linked from Settings Serendipity, under
Have a license?, and opens in a new tab.
Following either link is an ordinary visit to that site in your browser.
Terms of service: https://theghostlab.io/terms-of-service
Privacy policy: https://theghostlab.io/privacy-policy
Source code
The complete, unminified source of this plugin — including the block sources the compiled assets
are built from — is published at:
https://github.com/theghostlab/wp-ghostlabs-serendipity
The repository’s committed build/ directory is the readable build, and pnpm install reproduces it byte for byte. Released
--frozen-lockfile && GHOSTLABS_MINIFY=0 pnpm run build
versions of the plugin ship the same sources built minified, which pnpm install reproduces byte for byte.
--frozen-lockfile && pnpm run build
Screenshots

A saved composition, and the same gallery at tablet width.

Not in this plugin: Layout Studio, which Serendipity Deluxe adds — drag the seams between tiles, or nudge them with the arrow keys.

The block's settings: gap, minimum height and hover style, a layout saved for each screen size, and links that a lightbox plugin you already run can pick up.

The starter patterns in the inserter.