Skip to content

docs: add migration guides for prerender and rendertron - #2

Merged
lukapozega merged 5 commits into
mainfrom
docs/migration-guides
Aug 7, 2026
Merged

docs: add migration guides for prerender and rendertron#2
lukapozega merged 5 commits into
mainfrom
docs/migration-guides

Conversation

@lukapozega

Copy link
Copy Markdown
Owner

Summary

  • Adds docs/migrating-from-prerender.md and docs/migrating-from-rendertron.md
  • Links both from the README's Compatibility section and table of contents

Both upstream projects are gone (prerender/prerender 404s; Rendertron archived since 2022-10-06),
so these are aimed at the searches people are already making rather than a launch audience.

Test plan

  • Verified both projects' current status via the GitHub API before writing
  • Verified Rendertron's actual config/API shape via its README rather than from memory
  • Verified the injected x-renderready-render-* header names against source
  • prettier --check clean
  • All README anchor links resolve to existing headings

Both upstream projects are gone: prerender/prerender returns a 404, and
GoogleChrome/rendertron has been archived since 2022-10-06 with no commits
since. There is no other maintained self-hosted prerendering server, and
anyone still running either is on unmaintained software.

migrating-from-prerender.md maps the compatible surface directly: the
readiness flag and meta tags renamed but kept identical semantics, plugins
folded into config flags and hooks, and the env vars that moved.

migrating-from-rendertron.md is the more consequential change -- the URL
shape moves from path-embedded (GET /render/<url>) to query-encoded
(GET /render?url=), and Rendertron's built-in cache backends have no
renderready equivalent by design. The one genuinely good finding: Rendertron
never had a page-side readiness signal at all, just page-load plus
network-quiet -- which is exactly what renderready's fallback already does,
so no application changes are required to get equivalent behavior.

Verified before writing: prerender/prerender still 404s, Rendertron's last
push date, and Rendertron's actual config.json/API shape via its README
rather than from memory. The injected x-renderready-render-id /
x-renderready-render-at header names are checked against
src/render/htmlTransforms.ts rather than asserted.

Linked from the README's Compatibility section and table of contents.
The intro implied the old server was disappearing -- it isn't. The npm
package still resolves and installs regardless of the source repo's
status, and npm doesn't unpublish a package because its GitHub repo goes
away. Existing deployments and fresh `npm install prerender` both keep
working indefinitely.

What's actually lost is a path to a fix, not availability. Re-read
lib/server.js and lib/plugins/browserForceRestart.js rather than relying on
an earlier summary before writing the replacement, which turned up two
things I'd have gotten wrong: the old server does retry once immediately
on an unexpected browser crash (not zero retries), and only exits the whole
process if two crashes land within a second of each other; and its forced-
restart plugin does drain in-flight requests before restarting, just with
no bound if one hangs. Recycling itself is reasonable -- idle-restart
always, scheduled restart too if you use the documented entry point or
register the plugin on a custom build.
- CHROME_LOCATION and PRERENDER_READY_DELAY were never env vars in the
  old server, only JS constructor options — table and checklist now
  reflect that instead of implying a rename
- note that Rendertron's ?mobile also swapped the User-Agent, not just
  viewport size
- remove the fabricated "in-memory / S3 cache" bundled plugin — the old
  server never shipped one
@lukapozega
lukapozega merged commit a8eb2c3 into main Aug 7, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant