Nuxt OG Image supports three rendering engines, each with different trade-offs.
| Feature | Satori | Takumi | Chromium |
|---|---|---|---|
| Speed | Fast | Fastest (2-10x) | Slow |
| Edge Runtime | ✅ | ✅ | ❌ |
| CSS Support | Partial | Limited | Full |
| Gradients | ✅ | ❌ | ✅ |
| Opacity | ✅ | ❌ | ✅ |
| Complex Flexbox | ✅ | Partial | ✅ |
| Shadows | Partial | ❌ | ✅ |
| Emoji | ✅ 6 families | ✅ COLR fonts | ✅ |
| Fonts | Google Fonts, local | WOFF2, variable | Any |
| Dependencies | Built-in | @takumi-rs/core | playwright |
| Best For | Default, most templates | High-throughput, simple templates | Complex designs, prerender only |
| Environment | Satori | Takumi | Chromium |
|---|---|---|---|
| Node.js | ✅ | ✅ @takumi-rs/core | ✅ playwright |
| Prerender / CI | ✅ | ✅ | ✅ Auto-installs |
| AWS Lambda | ✅ | ✅ | ❌ Binary too large |
| Vercel | ✅ | ✅ | ❌ |
| Vercel Edge | ✅ WASM | ✅ WASM | ❌ |
| Netlify | ✅ | ✅ | ❌ |
| Netlify Edge | ✅ WASM | ✅ WASM | ❌ |
| Cloudflare Workers | ✅ WASM | ✅ WASM | ❌ |
| Cloudflare Pages | ✅ WASM | ✅ WASM | ❌ |
| StackBlitz | ✅ WASM | ✅ WASM | ❌ |
Each renderer can use different bindings depending on the environment:
AWS Lambda, Netlify, Vercel (Serverless)
Vercel Edge, Netlify Edge, Cloudflare Pages
Cloudflare Workers
You can override the default compatibility settings:
export default defineNuxtConfig({
ogImage: {
compatibility: {
// disable chromium for prerendering (skips install in CI)
prerender: {
chromium: false
},
// force WASM binding at runtime
runtime: {
resvg: 'wasm'
}
}
}
})
Satori is the default renderer and works for most use cases. It has good CSS support and works on all platforms including edge runtimes.
export default defineNuxtConfig({
ogImage: {
defaults: {
renderer: 'satori' // default, not required
}
}
})
Choose Takumi when you need maximum performance with simple templates that use solid colors.
export default defineNuxtConfig({
ogImage: {
defaults: {
renderer: 'takumi'
}
}
})
Choose Chromium when you need full CSS support and are prerendering all images at build time.
export default defineNuxtConfig({
ogImage: {
defaults: {
renderer: 'chromium'
}
}
})
If you're prerendering all OG images at build time, enable Zero Runtime mode to remove all renderer code from your production bundle (81% smaller Nitro output).
export default defineNuxtConfig({
ogImage: {
zeroRuntime: true
}
})
This works with any renderer and is ideal when your OG images don't change dynamically.