Licence
SEE LICENSE IN LICENSE
Version
0.3.0
Deps
4
Size
48 kB
Vulns
0
Weekly
0
@nexus-cms/nextjs
Next.js (App Router) adapter for Nexus CMS.
1. Enable the compiler
// next.config.mjs
import { withNexus } from "@nexus-cms/nextjs/config";
export default withNexus({ reactStrictMode: true });
Import
withNexusfrom@nexus-cms/nextjs/config(not the package root) so loading your config never pulls server-only modules.
2. Fetch content + render the provider
// app/layout.tsx (or per-page)
import { fetchPageContent, getEditSession, buildMetadata } from "@nexus-cms/nextjs";
import { NexusProvider } from "@nexus-cms/nextjs/client";
import schema from "../.nexus/cms-schema.json";
const BACKEND = process.env.NEXT_PUBLIC_NEXUS_API_URL!;
export async function generateMetadata() {
const content = await fetchPageContent("/", { baseUrl: BACKEND });
return buildMetadata(schema, "/", content);
}
export default async function Layout({ children }) {
const { editMode, token } = await getEditSession();
const content = await fetchPageContent("/", { baseUrl: BACKEND, token, draft: editMode });
return (
<html><body>
<NexusProvider schema={schema} page="/" baseUrl={BACKEND} token={token}
editMode={editMode} initialContent={content}>
{children}
</NexusProvider>
</body></html>
);
}
3. Wire the handshake + force-update routes
// app/api/nexus/edit/route.ts
export { createEnterEditRoute as GET } from "@nexus-cms/nextjs";
// app/api/nexus/revalidate/route.ts
import { createRevalidateRoute } from "@nexus-cms/nextjs";
export const POST = createRevalidateRoute({ secret: process.env.NEXUS_WEBHOOK_SECRET });
Content is fetched with a cache tag per page and a ~10 minute revalidate window;
Filament's "force update" POSTs to /api/nexus/revalidate to invalidate instantly.