Skip to content

Satori Comparison

Ogre is designed as a Go-native alternative to Satori, Vercel’s HTML/CSS to SVG converter written in TypeScript.

FeatureOgreSatori
LanguageGoTypeScript
Output formatsSVG, PNG, JPEGSVG only
Dependenciesstdlib + golang.org/xyoga-wasm + others
DeploymentSingle static binaryNode.js runtime
Tailwind supportBuilt-in (v3)Via plugin
PNG outputBuilt-inRequires resvg
Layout engineCustom flexbox (W3C)Yoga (via WASM)
HTTP serverBuilt-in with cachingBYO
Font embeddingSVG pathsSVG paths
EmojiTwemoji CDNTwemoji CDN
<div> defaultdisplay: flexdisplay: flex
Pixel accuracy95%+ vs SatoriReference
  • You are building a Go backend and want OG image generation without Node.js
  • You need PNG/JPEG output without a separate rasterization step
  • You want a single binary deployment
  • You want built-in Tailwind support without a build step
  • You want a production-ready HTTP server included
  • You are already running a Node.js or Next.js stack
  • You need the exact rendering behavior of the reference implementation
  • You are using @vercel/og in Next.js

Ogre accepts the same HTML/CSS subset as Satori. Templates written for Satori should work in Ogre with no changes. The 95%+ pixel accuracy metric is verified across 25 test fixtures that cover layout, typography, gradients, borders, shadows, and positioning.

The main behavioral difference is in edge cases around flex layout calculations. Satori uses Yoga (a C++ layout engine compiled to WASM), while Ogre uses a from-scratch Go implementation of the W3C flexbox spec. In the 5% of cases where output differs, it is typically sub-pixel positioning differences.