Documentation
Learn how to use PhoenixPrerender in your Phoenix application
This page and all /docs/* pages are prerendered using scoped route discovery.
Getting Started
Install the library, mark routes, generate pages, and add the serving plug. Up and running in 5 minutes.
Configuration Reference
All configuration options, per-route metadata, URL styles, ISR settings, and CSRF swap explained.
Scoped Prerendering
All documentation pages are prerendered using a scoped route block. Dead views inside
prerender do
automatically get
prerender: true
injected. LiveView routes pass through unchanged and require explicit metadata.
# Scoped prerendered routes (dead views)
scope "/docs", DemoWeb do
pipe_through :browser
prerender do
get "/", DocsController, :index
get "/getting-started", DocsController, :getting_started
get "/terms", DocsController, :terms
end
end
# LiveView routes with per-route metadata
scope "/", DemoWeb do
pipe_through :browser
prerender do
live "/changelog", ChangelogLive, :index,
metadata: %{prerender: :bots_only}
live "/status", StatusLive, :index,
metadata: %{prerender: :always, isr: true}
end
end
Route discovery uses
Phoenix.Router.routes/1
and matches any truthy value for the
:prerender
metadata key. Scope prefixes are automatically applied to the canonical path.
Manifest-Driven Serving
After generation, each page's
prerender_mode
and isr
flag are written to manifest.json.
At serve time, the plug reads these values to decide per-route behavior:
- prerender_mode: "true" — serve to all clients
- prerender_mode: "bots_only" — serve only to crawlers
- prerender_mode: "always" — serve to all with fresh CSRF token
- isr: true — trigger background regeneration when stale