Comparison

OGKit vs @vercel/og

@vercel/og is a solid choice if you are already deep in the Next.js and Vercel ecosystem. OGKit is the alternative when you want Open Graph images from a plain HTTPS URL — no JSX, no Edge Runtime dependency, no bundle size budget to manage.

Both produce 1200×630 PNG social preview cards. The difference is where rendering lives and how much infrastructure coupling you accept.

Quick comparison

QuestionOGKitAlternative
Rendering approachHosted API — one HTTPS URL, any backend.Edge Function or Node.js route inside your Next.js app using @vercel/og.
Framework requirementNone — works with any stack that can emit a URL.Designed around Next.js `ImageResponse` patterns (App Router is the common home).
Bundle size limitNone — templates run on OGKit’s side.Roughly 500KB budget for the function bundle (JSX, fonts, assets) on typical Edge setups.
Platform dependencyNone — embed the URL from any host, CI job, or script.Tied to wherever you deploy that Next.js route (often Vercel for the full Edge story).
Template changesSwap the template slug and query params — no redeploy.Edit JSX components and redeploy your app.
Pricing modelFree watermarked tier; Pro from $19/mo and Scale from $99/mo (crypto, monthly quota).No separate @vercel/og line item — usage shows up on Vercel meters (e.g. function invocations, data transfer) depending on your plan.
Crypto paymentYes — Cryptomus checkout without a card.No — billed through Vercel / card rails.

What @vercel/og does well

@vercel/og uses Satori and Resvg under the hood, which gives you JSX-to-PNG control. If you need pixel-level layout freedom and your stack already runs on Vercel, the integration is tight. Responses can be cached on a CDN in the usual Next.js way, and the library tracks the platform you deploy on.

  • Your project is a Next.js App Router application deployed on Vercel.
  • You want full JSX control over every pixel of the image layout.
  • You are comfortable managing font files, image assets, and bundle size within the Edge bundle budget.
  • You do not need to generate OG images from outside your Next.js deployment boundary.

Where @vercel/og creates friction

The core trade-off is coupling. @vercel/og runs as part of your application’s image route — usually Edge or Node depending on how you configure it.

  • Platform coupling. If you move hosting, you rewrite or relocate that route — the template is not a standalone HTTPS product. OGKit stays a stable third-party URL.
  • Bundle budget. Custom brand fonts and assets compete for the same function size limit; heavy designs hit it fast.
  • JSX workflow. Every template change is a code change and redeploy. OGKit swaps behavior by changing the path and query string.
  • Metering. There is no OG-specific SKU — cost appears as platform usage (invocations, egress, etc.) that can be harder to forecast at scale.
  • Runtime fit. Teams on older Pages Router or mixed runtimes may need extra wiring compared to copy-paste App Router examples.

Choose OGKit if

  • You want OG images from any backend — Node, Python, Go, Ruby, PHP, or a shell script publishing static HTML.
  • You are not on Vercel, or you want image generation independent of where the app is hosted.
  • You prefer predictable monthly quota (free tier, then Pro / Scale) instead of compounding platform meters alone.
  • Your team wants to swap templates via URL parameters, not JSX edits and redeploys.
  • You want to pay with crypto instead of card-only SaaS checkout.

Choose the alternative if

  • Your project is a Next.js App Router app on Vercel and you are happy keeping OG generation inside the repo.
  • You need full JSX layout control for every route.
  • You already run @vercel/og with fonts, tests, and caching dialed in.
  • Sensitive data for the card must never leave your own runtime.

Example

import type { Metadata } from "next";

const url = new URL("https://www.webmorp.art/api/og/article");
url.searchParams.set("key", process.env.OGKIT_KEY!);
url.searchParams.set("title", "Getting started");
url.searchParams.set("subtitle", "OGKit API reference");

// Works on Vercel, Railway, Fly, a VPS, or static CI — same URL
export const metadata: Metadata = {
  openGraph: { images: [url.toString()] },
  twitter: { images: [url.toString()] },
};

Frequently asked questions

Is OGKit a replacement for @vercel/og?

OGKit replaces @vercel/og for teams that want a hosted image API instead of owning an `ImageResponse` route. If you need full JSX layout control inside a Next-only project, @vercel/og remains the right primitive. If you want a URL-based API from any stack, OGKit is the replacement.

Does OGKit work inside a Next.js project on Vercel?

Yes. OGKit is a plain HTTPS API. Call it from `generateMetadata`, a Route Handler, or a Server Component — on Vercel or anywhere else. There is no Edge Runtime requirement on your side.

What happens to my OG images if I migrate off Vercel?

With @vercel/og, you move or re-host the route that renders the image. With OGKit, the public API URL stays the same — only your app’s deployment changes.

How does OGKit pricing compare to @vercel/og?

@vercel/og has no separate license; cost shows up as your hosting usage. OGKit offers a free watermarked tier and paid Pro ($19/month) and Scale ($99/month) plans with monthly image quota and crypto checkout — a direct product line item.

Can I use custom fonts with OGKit?

Templates use curated typography. On paid plans you can select from Google Fonts via the `font` query parameter where the template supports it (see the API reference). Arbitrary font file uploads are not supported — use the contact form if you have a special requirement.

Does OGKit support frameworks other than Next.js?

Yes. Any framework or static site that can put a URL in `og:image` works: Remix, Astro, SvelteKit, Nuxt, Rails, Laravel, Express, FastAPI, etc.

The same OGKit URL works whether your app runs on Vercel, Railway, Fly.io, a bare VPS, or a CI job emitting HTML.

Related pages

OGKit turns one HTTPS URL into a 1200×630 Open Graph image. Read the API reference, the Open Graph SEO guide, try the Playground, or sign in to create API keys.