@softwareinfocus/next-og-image
v0.1.0
Published
Reusable Open Graph image toolkit for Next.js App Router with an optional Software InFocus preset
Readme
@softwareinfocus/next-og-image
Reusable Open Graph image helpers for Next.js App Router metadata image routes, with an optional Software InFocus preset template.
Features
next/ogimage response wrapper with standard1200x630PNG defaults- Helpers for static and dynamic
opengraph-image.tsxroutes - Typed OG payload contract (
OgImageData) - SIF preset renderer + fallback data builders
- Works with Next.js 15+ App Router route metadata image files
Install
npm install @softwareinfocus/next-og-imagePeer dependencies:
next@15react@19
Basic usage (static route)
import {
OG_IMAGE_CONTENT_TYPE_PNG,
OG_IMAGE_SIZE_1200x630,
createStaticOgImageHandler,
} from '@softwareinfocus/next-og-image'
import { createSifFallbacks, createSifOgRenderer } from '@softwareinfocus/next-og-image/presets/sif'
export const alt = 'Site social preview image'
export const size = OG_IMAGE_SIZE_1200x630
export const contentType = OG_IMAGE_CONTENT_TYPE_PNG
export const runtime = 'edge'
export const revalidate = 3600
const render = createSifOgRenderer({
brandName: 'Software InFocus',
domainLabel: 'softwareinfocus.com',
})
const fallbacks = createSifFallbacks({ brandName: 'Software InFocus' })
export default createStaticOgImageHandler({
fallbackData: fallbacks.global,
render,
})Basic usage (dynamic route)
import { createDynamicOgImageHandler } from '@softwareinfocus/next-og-image'
import { createSifFallbacks, createSifOgRenderer } from '@softwareinfocus/next-og-image/presets/sif'
const render = createSifOgRenderer()
const fallbacks = createSifFallbacks()
export default createDynamicOgImageHandler<{ slug: string }, 'blog'>({
resolveData: async ({ slug }) => {
const post = await getPostBySlug(slug)
if (!post) return null
return {
type: 'blog',
title: post.title,
subtitle: post.description,
chips: post.tags,
}
},
fallbackData: fallbacks.section.blog,
render,
})Notes
- Keep
export const runtime = 'edge'in your route file for predictablenext/ogbehavior. - Keep
export const revalidate = 3600(or your preferred cache interval) in each route. twitter-image.tsxcan re-export from./opengraph-imagein most projects.- Fonts are optional. Provide
loadFontsincreateSifOgRenderer()if you want custom typography.
Development
pnpm install
pnpm build
pnpm testLicense
MIT
