Title: PreviewFlow
Author: Dhaval Vachhani
Published: <strong>August 14, 2026</strong>
Last modified: August 14, 2026

---

Search plugins

![](https://ps.w.org/previewflow/assets/banner-772x250.png?rev=3647170)

![](https://ps.w.org/previewflow/assets/icon-256x256.png?rev=3647170)

# PreviewFlow

 By [Dhaval Vachhani](https://profiles.wordpress.org/dvpatel/)

[Download](https://downloads.wordpress.org/plugin/previewflow.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/previewflow/#description)
 * [Reviews](https://wordpress.org/plugins/previewflow/#reviews)
 *  [Installation](https://wordpress.org/plugins/previewflow/#installation)
 * [Development](https://wordpress.org/plugins/previewflow/#developers)

 [Support](https://wordpress.org/support/plugin/previewflow/)

## Description

**Stop publishing early just to show a client.** PreviewFlow turns any draft, pending,
scheduled or private content into a private, shareable link you can send like a 
document link — and take back the moment you want to.

No client accounts. No staging server. No temporary logins to clean up afterwards.
You stay in control of who sees unfinished work, for how long, and on what terms.

#### The problem it solves

Reviewing unpublished content in WordPress has always been awkward. The built-in
preview only works for someone already logged in, so agencies and freelancers end
up doing one of four bad things: publishing a page early and hoping nobody notices,
standing up a staging site for a single review, emailing screenshots that go stale
immediately, or creating a throwaway user account that lingers for years as a security
liability.

PreviewFlow replaces all four with one secure link.

#### How it works

 1. Write your post, page or product and save it as a draft.
 2. Open the **Client Preview** panel in the editor and create a link.
 3. Choose how long it should last, and add a password if you want one.
 4. Send the link. Your client opens it and sees the finished page.
 5. Revoke it in one click when the review is done.

#### Secure by design

Every preview link is a 43-character random token — roughly 256 bits of entropy,
drawn from the platform’s cryptographic random source. It is not a guessable post
ID or a predictable slug.

 * **Expiry** — one hour, six hours, 24 hours, three days, seven days, 30 days, 
   a custom date and time, or never.
 * **Instant revoke** — kill a link and the very next request is refused.
 * **Optional password** — hashed with WordPress’ own password hashing, with attempt
   rate limiting to stop brute forcing.
 * **Never indexed** — `noindex` is sent in both the page markup and the HTTP response
   headers, so a preview cannot leak into search results.
 * **Never cached** — preview responses are excluded from page caches, so a cached
   copy can never outlive a link you revoked.
 * **No login required** — and no account is ever created for a reviewer.

#### What your client sees

A real page, rendered by your real theme — not a screenshot and not a stripped back
approximation. On top of it PreviewFlow adds:

 * A **draft watermark** so nobody mistakes work in progress for a live page. Choose
   a corner badge, a full width bar or a diagonal overlay, and set the text, colour,
   position and opacity.
 * A **device switcher** so the reviewer can check desktop, tablet and mobile. The
   page loads at the real device width, so your responsive breakpoints fire properly
   instead of being scaled down.
 * A small **preview toolbar** showing what they are looking at and how long the
   link lasts.

When a link runs out, they get a friendly message you write yourself, not a confusing
404.

#### Built for people who ship websites

 * **Freelancers** — share a design before it goes live, get sign-off faster.
 * **Agencies** — one link per client, each with its own expiry and password. Revoke
   them all when the project ends.
 * **Marketing teams** — circulate a campaign page internally before launch.
 * **Store owners** — show a new product or landing page to a supplier or a partner
   before it hits the shop.
 * **Developers** — hand a stakeholder a working page without giving them wp-admin.

#### Works with what you already use

PreviewFlow does not render pages itself — it lets the page render normally and 
adds an access layer on top. That means it works with:

 * **Any post type**, including custom post types and WooCommerce products
 * **Any theme**, classic or block
 * **Any builder** — the block editor, Elementor, Bricks, Divi, Beaver Builder, 
   Oxygen, Breakdance, Kadence, GenerateBlocks, Spectra and others
 * **Any caching setup** — WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super 
   Cache, NitroPack, Cache Enabler, WP Fastest Cache, Autoptimize and CDN edge caches
   are all told not to store preview responses

#### Know what happened

 * A **dashboard** listing every link with its status, expiry, creator and view 
   count, filterable by active, expired or revoked, with bulk revoke and delete.
 * An **activity screen** with a 14-day chart and the full view history, filterable
   by time window, device and link.
 * **Per link view counts** and unique visitor numbers, so you know whether the 
   client actually opened it before you chase them.

#### Privacy first

View tracking is optional and can be switched off entirely. When it is on, PreviewFlow**
never stores a raw IP address**. Visitors are identified by a one-way hash of their
IP and browser, salted with your site’s own keys, which cannot be reversed and is
not portable to another site. History is pruned automatically on a schedule you 
choose, and there is a one-click button to delete all of it for a privacy request.

Nothing is sent anywhere. There is no external service, no phone-home, no account
to create, and no third-party requests — the plugin bundles its own fonts and assets.

#### Tools for agencies

 * **Export and import settings** as JSON, so a new client site can be configured
   in seconds instead of clicked through.
 * **Reset to defaults** without touching your links.
 * **Clear view history** in one click.
 * A **status panel** that checks permalinks, WP-Cron, HTTPS and any detected caching
   plugin, and warns you when something would undermine previews.

#### Everything in the free plugin

There is no trial, no feature nagging and no artificial limit. Unlimited preview
links, unlimited expiry options, unlimited passwords, and no upsell banners in your
dashboard. Everything described above is in this plugin.

## Screenshots

[⌊The Client Preview panel in the editor — create a link, set an expiry, add a password.⌉⌊
The Client Preview panel in the editor — create a link, set an expiry, add a password
.⌉[

The Client Preview panel in the editor — create a link, set an expiry, add a password.

[⌊The preview links dashboard with status, expiry and view counts.⌉⌊The preview 
links dashboard with status, expiry and view counts.⌉[

The preview links dashboard with status, expiry and view counts.

[⌊The activity screen with the daily views chart and full history.⌉⌊The activity
screen with the daily views chart and full history.⌉[

The activity screen with the daily views chart and full history.

[⌊Settings (General) — manage your global default settings for preview links.⌉⌊Settings(
General) — manage your global default settings for preview links.⌉[

Settings (General) — manage your global default settings for preview links.

[⌊Settings (Security) — configure password defaults and rate limiting.⌉⌊Settings(
Security) — configure password defaults and rate limiting.⌉[

Settings (Security) — configure password defaults and rate limiting.

[⌊Settings (Appearance) — customise your draft watermark with a live preview.⌉⌊Settings(
Appearance) — customise your draft watermark with a live preview.⌉[

Settings (Appearance) — customise your draft watermark with a live preview.

[⌊Settings (Advanced) — check environment status and advanced options.⌉⌊Settings(
Advanced) — check environment status and advanced options.⌉[

Settings (Advanced) — check environment status and advanced options.

[⌊Settings (Tools) — export, import, reset, and clear view history.⌉⌊Settings (Tools)—
export, import, reset, and clear view history.⌉[

Settings (Tools) — export, import, reset, and clear view history.

[⌊A preview as the client sees it, with the draft watermark and device switcher.⌉⌊
A preview as the client sees it, with the draft watermark and device switcher.⌉[

A preview as the client sees it, with the draft watermark and device switcher.

[⌊Mobile preview at a real device width.⌉⌊Mobile preview at a real device width.⌉[

Mobile preview at a real device width.

## Installation

#### From your dashboard

 1. Go to **Plugins  Add New**.
 2. Search for **PreviewFlow**.
 3. Click **Install Now**, then **Activate**.

#### Manually

 1. Upload the `previewflow` folder to `/wp-content/plugins/`.
 2. Activate the plugin through the **Plugins** screen.

#### First steps

 1. Open any post or page.
 2. Find the **Client Preview** panel in the editor sidebar.
 3. Click **Create preview link**, choose an expiry, and copy the link.

Optional: visit **PreviewFlow  Settings** to choose which post types get the panel,
set a default expiry, and customise the watermark.

## FAQ

### Does my client need a WordPress account?

No. The link itself is the credential. Anyone holding it can view the content until
it expires or you revoke it. No account is created, and nothing is left behind to
clean up.

### Can someone guess a preview link?

Practically, no. Each token is 43 random base62 characters — around 256 bits of 
entropy — generated from the platform’s cryptographic random source. It is not derived
from the post ID, the title or the date.

### What happens when a link expires?

The visitor sees a message you can write yourself, rather than a 404. The response
uses HTTP `410 Gone`, which is the accurate status for something that existed and
was deliberately withdrawn.

### If I revoke a link, is it really dead?

Yes, immediately. The next request is refused. Because PreviewFlow also stops preview
pages ever being written to a page cache, there is no cached copy left behind to
keep serving after you revoke.

### Will a preview show up in Google?

No. PreviewFlow sends `noindex, nofollow, noarchive, nosnippet` in both the page
markup and the `X-Robots-Tag` response header.

### Does it work with page builders?

Yes. A preview is a normal front-end request for the post, so your theme, your builder
and your block plugins render it exactly as they render anything else. Elementor,
Bricks, Divi, Beaver Builder, Oxygen, Breakdance, Kadence, GenerateBlocks, Spectra
and the block editor all work.

### Does it work with WooCommerce?

Product previews do — enable the `product` post type in settings and you can share
an unpublished product like any other content. Previewing the shop, cart and checkout
pages is not included in this version.

### Does it work with caching plugins?

Yes. PreviewFlow tells the cache not to store preview responses in the first place,
using the standard opt-out that WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super
Cache, NitroPack, Cache Enabler, WP Fastest Cache and others all honour. It also
sends `Cache-Control: private, no-store` so CDNs and shared caches do not hold a
copy.

### Can I create more than one link for the same page?

Yes, as many as you like. Give each one a label such as the client’s name, its own
expiry and its own password. Revoke one without affecting the others, and see the
view count for each separately.

### Can I password protect a preview?

Yes, per link. Passwords are hashed with WordPress’ own password hashing, and wrong
guesses are rate limited per visitor — ten attempts by default, then a fifteen minute
cool-down. You can require a password on every new link in settings.

### What is the difference between this and the built-in WordPress preview?

The built-in preview only works for a logged-in user with permission to edit the
post. PreviewFlow creates a link that works for anyone you send it to, with an expiry,
an optional password and a revoke button.

### Why not just use a password protected page?

A published password-protected page is still published: it can appear in feeds, 
sitemaps, search results and archives. A PreviewFlow link leaves the content unpublished
and adds no public footprint at all.

### Can I change the preview URL?

Yes. The prefix is configurable in settings, so links can read `/preview/…`, `/review/…`
or anything else you like. Changing it invalidates links you have already shared,
and the settings screen says so.

### Does it work without pretty permalinks?

Yes. If your site uses plain permalinks, links fall back to a query string form.
They are just as secure, only less tidy — the status panel will point this out.

### Can I preview scheduled or private posts?

Yes. Drafts, pending review, scheduled and private content all work.

### Will it show the latest version of my draft?

Always. Preview pages bypass every cache layer, so what your client sees is what
you last saved.

### Does it track my visitors?

Only if you leave view tracking on, and never with a raw IP address. Visitors are
identified by a one-way salted hash of their IP and browser that cannot be reversed.
You choose how long history is kept, and can delete all of it at any time. Switch
the whole feature off in settings if you prefer.

### Does the plugin call home or load anything external?

No. There is no external service, no analytics, no licence check and no third-party
requests. Fonts and assets are bundled with the plugin.

### Who can create and manage preview links?

Anyone who can edit the piece of content. Editors and administrators see every link
on the dashboard; authors and contributors see the ones they created.

### Can I move my settings to another site?

Yes. **PreviewFlow  Settings  Tools** exports your configuration as JSON and imports
it on another site. Preview links themselves are not exported.

### What happens to my data if I uninstall?

Nothing is deleted unless you ask for it. Tick **Delete all PreviewFlow data** in
the Advanced settings before removing the plugin if you want the links, view history
and settings removed too.

### Is it translation ready?

Yes. Every string is translatable through the `previewflow` text domain.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“PreviewFlow” is open source software. The following people have contributed to 
this plugin.

Contributors

 *   [ Dhaval Vachhani ](https://profiles.wordpress.org/dvpatel/)
 *   [ Nakul Chandra ](https://profiles.wordpress.org/nakulchandra/)
 *   [ Dallas Web Agency US ](https://profiles.wordpress.org/dallaswebagencyus/)

[Translate “PreviewFlow” into your language.](https://translate.wordpress.org/projects/wp-plugins/previewflow)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/previewflow/), check
out the [SVN repository](https://plugins.svn.wordpress.org/previewflow/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/previewflow/) by
[RSS](https://plugins.trac.wordpress.org/log/previewflow/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * Initial release.
 * Secure preview links using 256-bit random tokens.
 * Expiry presets from one hour to 30 days, a custom date, or never.
 * One-click revoke that takes effect immediately.
 * Multiple links per piece of content, each with its own label, expiry and password.
 * Optional password protection with per-visitor attempt rate limiting.
 * Desktop, tablet and mobile preview at real device widths.
 * Customisable draft watermark: badge, bar or diagonal.
 * Automatic `noindex` in both markup and response headers.
 * Cache bypass for WP Rocket, LiteSpeed, W3 Total Cache, WP Super Cache, NitroPack,
   Cache Enabler, WP Fastest Cache and Autoptimize.
 * Friendly, customisable expired-link page instead of a 404.
 * Dashboard with filtering, search, bulk revoke and bulk delete.
 * Activity screen with a 14-day chart and filterable view history.
 * Settings tools: export, import, reset and clear history.
 * Environment status checks for permalinks, WP-Cron, HTTPS and caching.

## Meta

 *  Version **1.0.0**
 *  Last updated **16 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.0.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [Client](https://wordpress.org/plugins/tags/client/)[draft](https://wordpress.org/plugins/tags/draft/)
   [preview](https://wordpress.org/plugins/tags/preview/)[private](https://wordpress.org/plugins/tags/private/)
   [share](https://wordpress.org/plugins/tags/share/)
 *  [Advanced View](https://wordpress.org/plugins/previewflow/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/previewflow/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/previewflow/reviews/)

## Contributors

 *   [ Dhaval Vachhani ](https://profiles.wordpress.org/dvpatel/)
 *   [ Nakul Chandra ](https://profiles.wordpress.org/nakulchandra/)
 *   [ Dallas Web Agency US ](https://profiles.wordpress.org/dallaswebagencyus/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/previewflow/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://buymeacoffee.com/dvpatel)