fastify-prerender-plugin
v2.0.4
Published
Prerender SPA pages for bots
Downloads
1,173
Maintainers
Readme
fastify-prerender-plugin
Build your SPA. Get SEO for free.
Stop choosing between SPAs and SSR. This Fastify plugin automatically detects bots and serves them fully-rendered HTML—while your users get the fast SPA experience they deserve. No refactoring. No complexity. Just add one plugin.
Why?
You want to ship fast SPAs. Google wants fully-rendered HTML. Traditional SSR means maintaining two codebases or dealing with complex frameworks.
This plugin solves that. Write your SPA once, and bots automatically get server-rendered snapshots using Lightpanda—a blazingly fast, lightweight headless browser built for SSR.
✨ Zero impact on your users • ⚡ Lightning-fast setup • 🧠 Smart bot detection • 💾 Minimal memory footprint
Installation
pnpm install fastify-prerender-pluginRequirements: Node.js 22+, Fastify
Quick Start
Register the plugin with your Fastify server. That's it.
import { fastify } from 'fastify'
import { prerenderPlugin } from 'fastify-prerender-plugin'
const app = fastify()
await app.register(prerenderPlugin, {
urls: ['/'], // URLs to prerender (supports regex too!)
port: 3000
})
app.get('/', (request, reply) => {
reply.type('text/html').send(`
<html>
<body>
<div id="root"></div>
<script>
document.getElementById('root').textContent = 'Hello World'
</script>
</body>
</html>
`)
})
app.listen({ port: 3000 })Done! Bots now get fully-rendered HTML. Your users get the lightning-fast SPA.
Configuration
{
urls: ['/', /^\/about/], // URLs to prerender (strings or regex)
host: 'localhost', // Optional, defaults to 'localhost'
port: 3000 // Your Fastify server port
}How It Works
- Request comes in → Plugin checks
User-Agentwith isbot - Bot detected? → Lightpanda renders the page in milliseconds
- Fully-rendered HTML → Cached (5 min) and served to bot
- Regular user? → Standard SPA, zero overhead
Your SPA works exactly as before. Bots see the rendered version. Everyone wins.
About Lightpanda
This plugin uses Lightpanda—a lightweight headless browser built specifically for SSR. It's dramatically lighter than Chromium or Firefox, starts instantly, and installs automatically with the plugin.
Custom executable path? Set LIGHTPANDA_EXECUTABLE_PATH:
export LIGHTPANDA_EXECUTABLE_PATH=/path/to/lightpandaContributing
Issues and PRs welcome! Open an issue or submit a pull request.
License
MIT
