Distan
Author in WordPress, deliver static HTML — built for handing over files, not a CMS. No database, and no deploy credentials, in the deliverable.
Solid choice
Distan is a solid plugin choice in 2026, with a few things worth checking first. Was last updated 3 weeks ago, and scores 64/100 on our health check.
- Actively developed — last update 3 weeks ago
- Tested with the latest WordPress (7.1)
- Small user base (<10 active installs)
- Very few reviews so far
How does it stack up?
Side-by-side on installs, updates, ratings & supportDaily downloads
Download spikes usually follow a new release — each site that auto-updates counts as a download.
Rankings
Where Distan stands todayWordPress.org search rankings
Live position in the plugin search, top 100| Keyword | Position |
|---|---|
| deploy | >100 |
| headless | >100 |
| jamstack | #10 |
| static export | >100 |
| static site generator | >100 |
About Distan
From the official readme · v1.8.0Description
Distan turns WordPress into a build environment for static HTML deliverables. You author in WordPress, then export clean, self-contained HTML that runs anywhere. No WordPress, no PHP, and no database are required on the production server.
Most static-export plugins mirror a live WordPress site and keep it running behind the scenes. Distan is built for the opposite case: the HTML files themselves are the deliverable, and WordPress stays on the developer’s side and is never published. When an update is needed, you edit in WordPress, regenerate, and hand over the difference. (We think of it as “headloss”: the head — the static HTML — goes to production, while the body — WordPress — stays in the workshop.)
This suits people who deliver files, not a CMS — for example a recruitment site placed under a subdirectory of an existing corporate site, where adding another WordPress install is not an option.
How Distan is different
- It does not deploy for you, and holds no credentials. Distan writes files and stops there. Deployment is wired through hooks (
distan_after_generate,distan_dispatch), so you connect your own rsync, git push, FTP, or CI. Nothing to trust with your server keys. - It enumerates, it does not crawl. Distan generates the pages WordPress already knows about, rather than spidering links. The result is predictable and light — no queue, no database tables, no build daemon.
- It stays small. No bundled framework, no vendor tree, no schema migrations. Easy to read, easy to audit, and nothing left behind when you remove it.
What it does
- Generates every published page, the posts archive with pagination, category archives with pagination, and a 404 page.
- Rewrites internal links as document-relative paths, so the output can be opened directly and placed in any directory.
- Flattens WordPress paths: theme files move to
assets/, uploads move tomedia/. Thewp-contentdirectory disappears from the deliverable. - Cleans the HTML: removes the generator tag, REST API links, oEmbed, emoji scripts, speculative loading rules, and the development
noindex. - Keeps cache-busting query strings on assets, so file names stay stable and can be overwritten over FTP.
- Optional
sitemap.xmland a minimalrobots.txt, built from the pages actually generated, using the production URL. - Optional Markdown export (
content.md) that combines every page’s main content into one file — handy for feeding a site into AI tools (Gemini Notebook / NotebookLM, and similar). - Exports a single page as a starting template for an outside coder: that page plus only the assets it references (following stylesheet
url()and@import), laid out at their real paths, with a README of ground rules. In-page markers can drop the block-library CSS (distan:no-block-styles) or drop scripts and styles under a path prefix (distan:drop-assets). - Surfaces URLs that WordPress core’s sitemap lists but enumeration missed — a plugin’s thank-you page, a virtual route — and lets you include or ignore each. The choice is remembered across runs, so there is no filter to hand-write.
- Reports a diff after each run — which files were added, changed, or need removing from production — and can hand you a ZIP of just the changed files, with a list of what to delete.
- Audits internal links and reports any whose target was not generated, and compares against WordPress core’s sitemap to surface pages that enumeration may have missed.
- Optionally bundle extra files or directories that nothing links to (
distan_extra_assets) — for assets referenced only from inside a script, such as a JSON file fetched by JavaScript. - Downloads the result as a ZIP.
Requirements
The only hard requirement is loopback HTTP (the site being able to request itself). No direct SQL, no exec(), no external binaries, no external APIs. It runs on Local, MAMP, XAMPP, DDEV, Docker, or shared hosting, and works offline.
Not for every case
Distan is not suitable when the client updates the site themselves, or when forms, search, comments, or membership are required. If you need built-in deployment to many destinations, scheduled or change-based publishing, or managed static hosting, a larger tool such as Simply Static or Staatic will fit better.
Installation
- Upload the plugin to
wp-content/plugins/, or install the ZIP from Plugins → Add New → Upload. - Activate it.
- Open the Distan menu, check the environment, set the public URL, and generate.
The output is written to wp-content/uploads/distan/dist/.
Frequently asked questions
Does the production server need WordPress?
No. The output is static HTML. That is the point: there is no application to attack or maintain on the production server.
How do I deploy the result?
Distan does not deploy for you and never stores server credentials. It fires distan_after_generate when a run finishes, and an optional distan_dispatch action when you press the deploy button after reviewing the output. Hook either one to your own rsync, git push, FTP, or CI step. You can also just download the ZIP.
Do template functions work?
Yes. Generation sends a normal HTTP request per page, so get_header(), get_template_part(), template hierarchy, conditional tags, and custom fields all behave exactly as they do on the live site.
What does not work?
Anything that needs server-side processing: search forms, comment submission, contact forms, and membership. Values that depend on the current time (a copyright year printed with date('Y'), relative dates) are frozen at generation time.
A script fetches a file (e.g. JSON) that is not being copied. Why?
Distan collects assets by reading the generated HTML and CSS, so a path built inside a script — fetch('../assets/json/data.json') — is invisible to it and the file is left out. List the file or directory with the distan_extra_assets filter to bundle it anyway; its path is flattened the same way as other theme assets, so the relative fetch keeps working.
Can I export the content for AI tools?
Yes. Enable the Markdown export and Distan writes content.md, combining every page’s main content into one file with production URLs — ready to hand to an AI notebook or a retrieval index. An optional content.local.md keeps development URLs. You can also narrow what goes into it by post type and publish date, and hand-pick individual fixed pages, so the transcript can be limited to (for example) just your articles while the static site is still delivered in full.
Can I open the generated files directly?
Yes, with a classic theme. Block themes load their JavaScript as ES modules, which browsers refuse to load over file://. HTML, CSS, images, and links work either way; use a local server for a complete preview.
Does it work with block (Full Site Editing) themes?
Yes. Classic and block themes are both supported, including the block navigation’s interactivity, importmap paths, and module files.
A page changes its content based on a URL query parameter (?filter=chair). Can Distan handle it?
Yes, with an explicit opt-in. Name the query keys that change the page with the distan_variant_keys filter, then register the specific URLs you want to ship with the distan_sources filter — usually built in a loop from the same terms or posts the page’s pulldown or checkboxes are built from. Each value becomes its own static file. Because a plain static host addresses files by path only, the query is folded into the path: the published URL becomes /products/filter-chair/ rather than /products/?filter=chair. Distan does not discover these automatically — pulldown and multi-checkbox URLs are…
Changelog
1.8.0
- Added: the Markdown export (content.md) can now be narrowed by post type and by publish date, and specific fixed pages can be force-included, so a site can be delivered whole while only, say, its articles within a date window are transcribed for an AI. With no filter set the export still covers every page as before (posts, custom types, fixed pages, the front page and archives). When you do filter, post types are chosen with checkboxes and the publish-date range is inclusive on both ends (either bound may be left open); while filtering, pages and archives drop out unless a page is added individually from the live title search, which force-includes it. The static HTML output (dist/) is unchanged by any of this.
- Added: an optional “remove HTML comments” setting. When enabled, plain HTML comments left by plugins and themes are stripped from the delivered pages at write time. Comment-like text inside script, style, textarea and pre elements is shielded, and IE conditional comments are kept because they can wrap real markup. Off by default; the static output is unchanged unless you turn it on.
- Changed: the admin screen’s own styles and scripts are now cache-busted by file modification time, so an updated build always loads its current assets instead of a stale cached copy.
1.7.0
- Improved: the distan:no-block-styles / distan:drop-assets markers now also take effect in a normal “static HTML” run, not only in the template export. On a marked page, the declared link and script tags and inline block styles are removed from that page’s output; shared asset files are left in place so other pages that use them keep working.
- Improved: the Markdown export (content.md) now preserves much more structure, so it reads better when fed to an AI. Tables become Markdown tables, code becomes fenced or inline code, images keep their alt text, and block quotes, bold/italic, ordered-list numbering, and horizontal rules are carried across. Each page section also records its source URL and meta description, and its title falls back to the first heading when a theme emits no title tag.
1.6.4
- Updated: the plugin screenshots — the full admin screen and the in-app help.
1.6.3
- Added: a “設定” link on the plugin’s row on the Plugins screen, so you can reach the Distan screen from there.
- Improved: the template export page selector can now be filtered live by title. Type in the box above the list and the candidates narrow as you go — useful when a site has many pages.
1.6.2
- Fixed: the copy buttons for the template markers did nothing on a plain-http development host (for example http://site.local). The clipboard API is only available in a secure context, so a fallback is now used there.
1.6.1
- Improved: the admin screen now follows the WordPress admin colour scheme instead of a custom palette. The accent tracks the colour scheme each user picks, and status badges are shown in neutral greys with red reserved for real problems such as broken links.
- Improved: the section sub-navigation no longer sticks to the top of the screen, so it never covers a heading while scrolling. Dates are all shown in the site’s timezone. The uncovered-URL list scrolls once it grows long, and the settings save bar keeps a little breathing room.
- Clarified: the descriptions for “WordPress の痕跡を除く” and the template export now spell out that the former only removes invisible metadata (block CSS and plugin JS are left to the per-page markers), so the two are not confused.
- Fixed: block styles the template export could leave behind. The distan:no-block-styles marker now also removes the inline block styles WordPress emits (wp-block-*-inline-css, the style/global-styles placeholders, and the wp-img-auto-sizes helper), not just the stylesheet link and global-styles block.
- Updated: bundled Alpine.js to 3.17.1.
For developers
Is this your plugin? Show off the numbers.
Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.
Best Distan alternatives
All deploy plugins →FAQ
Distan: quick answers
Straight answers, pulled from live WordPress.org data.
Live data from WordPress.org · checked Oct 2, 2026
Is Distan free?
Yes. Distan is free to download and use from the official WordPress.org plugin directory.
Is Distan safe to use in 2026?
Distan is a solid plugin choice in 2026, with a few things worth checking first. Was last updated 3 weeks ago, and scores 64/100 on our health check.
How many websites use Distan?
Distan is active on <10 WordPress websites and has been downloaded 1,056 times since it launched in July 2026. It was downloaded 362 times in the last 30 days.
Does Distan work with WordPress 7.1?
Yes. The developer has tested Distan up to WordPress 7.1.2, the latest release. It requires WordPress 6.0 or newer.
What PHP version does Distan need?
Distan requires PHP 8.0 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.
When was Distan last updated?
The latest version, 1.8.0, was released on September 11, 2026 (3 weeks ago).
Who makes Distan?
Distan is developed and maintained by youheiokubo.
What are the best alternatives to Distan?
The most popular alternatives to Distan are Publish to Netlify (100+ installs), Deploy Webhook Button (100+ installs) and Deploy & Sync Content (40+ installs).
Powered by PageForge
Want thousands of pages that rank like these? Build them in an afternoon.
This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.
- CSV, Google Sheets & API data sources
- AI content, schema & internal links per page
- Works with Elementor, Gutenberg, Yoast & Rank Math
- Free on WordPress.org — no credit card

