Integrations¶
easeo ships adapters for the most common frameworks. They are thin: each one
calls build_seo_payload and hands the result to the framework's native
metadata mechanism, so the behavior is identical everywhere.
JavaScript / TypeScript¶
| Framework | Package | Entry point | Best for |
|---|---|---|---|
| Next.js | @easeo/next |
easeoMetadata() |
App Router pages and route handlers |
| Astro | @easeo/astro |
build integration, contract emission | Static and SSR content sites |
| Vite | @easeo/vite |
transformIndexHtml plugin |
SPAs and multi-page builds |
| Nuxt | @easeo/nuxt |
useEaseoSeo() composable |
Nuxt 3 pages and layouts |
| SvelteKit | @easeo/sveltekit |
buildEaseoPayload() and <EaseoHead /> |
SvelteKit routes |
| React | @easeo/react |
<EaseoHead /> component |
Client-rendered and SSR React apps |
All JavaScript integrations support both default and named imports:
import easeoMetadata from "@easeo/next"; // default
import { easeoMetadata } from "@easeo/next"; // named
Python¶
| Framework | Import | Entry point |
|---|---|---|
| FastAPI | from easeo.adapters.fastapi import EaseoSEO |
for_entity() |
| Django | from easeo.adapters.django import seo_head |
settings plus template tags |
| Flask | from easeo.adapters.flask import Easeo |
context processor and for_entity() |
| Zensical | easeo.contrib.zensical |
markdown extension |
Python adapters are lazy and installed as extras:
How adapters work¶
Every adapter does the same three things:
- Accept a site-wide
SEOConfigonce. - Turn a framework-specific object and route into an
SEOEntity. - Return the payload, a dict, or rendered head HTML, depending on the framework's idiom.
Because the build runs in the shared Rust core, a Next.js page and a FastAPI endpoint with the same inputs produce byte-identical metadata.
Choosing an approach¶
- If your framework has a native metadata API, use the adapter that targets it. Next.js is the clearest example.
- If it does not, render
payload.render_html()into your template, or build the payload yourself with the core API. - For static sites, generate payloads at build time and commit the contract.
Prerequisites¶
- JavaScript integrations: Node 20 or newer (see Installation).
- Python adapters: Python 3.10 or newer. The framework itself is pulled in by the matching extra.
Next steps¶
- Installation
- Examples: a simple and a complex example for every integration.
- Framework Recipes: short copy-paste patterns.