[Skip to content](#_top)

[![OpenNav AI](/_astro/full-open-logo.CGezuffk.svg) OpenNav AI](https://opennav.ai/)

Search CtrlK

Cancel

[Docs](https://docs.opennav.ai/index.md)

[Quick Start](https://docs.opennav.ai/getting-started/index.md)

[SDK](https://docs.opennav.ai/sdk/index.md)

[OpenNav AI on X](https://x.com/OpenNavAI)

[Joshua Bellew on X](https://x.com/manofyear93)

[Email Joshua Bellew](mailto:joshua@opennav.ai)

- Start Here

  - [Overview](https://docs.opennav.ai/index.md)
  - [How It Works](https://docs.opennav.ai/how-it-works/index.md)
  - [Getting Started](https://docs.opennav.ai/getting-started/index.md)

- Use OpenNav

  - [CLI](https://docs.opennav.ai/cli/index.md)
  - [SDK](https://docs.opennav.ai/sdk/index.md)

- Frameworks

  - [Astro](https://docs.opennav.ai/frameworks/astro/index.md)
  - [Next.js](https://docs.opennav.ai/frameworks/next/index.md)
  - [Server-side frameworks Soon](https://docs.opennav.ai/frameworks/server-side/index.md)

- Platforms

  - [Cloudflare](https://docs.opennav.ai/platforms/cloudflare/index.md)

- Reference

  - [Generated Files](https://docs.opennav.ai/reference/generated-files/index.md)
  - [Content Extraction](https://docs.opennav.ai/reference/content-extraction/index.md)
  - [Access Guidance](https://docs.opennav.ai/reference/access-guidance/index.md)

- External

  - [AcceptMarkdown](https://acceptmarkdown.com/)
  - [Cloudflare Agent Readiness](https://blog.cloudflare.com/agent-readiness/)
  - [Is It Agent Ready?](https://isitagentready.com/)

[OpenNav AI on X](https://x.com/OpenNavAI)

[Joshua Bellew on X](https://x.com/manofyear93)

[Email Joshua Bellew](mailto:joshua@opennav.ai)

On this page

- [Overview](#_top)
- [Planned Support](#planned-support)
- [Content Negotiation](#content-negotiation)
- [Astro Launch Shape](#astro-launch-shape)
- [Next.js Launch Shape](#nextjs-launch-shape)
- [Use Static Today](#use-static-today)

## On this page

- [Overview](#_top)
- [Planned Support](#planned-support)
- [Content Negotiation](#content-negotiation)
- [Astro Launch Shape](#astro-launch-shape)
- [Next.js Launch Shape](#nextjs-launch-shape)
- [Use Static Today](#use-static-today)

# Server-Side Frameworks

Server-side Astro and Next.js support is the next open-source track. This is the future of agent-ready websites: the same route can serve HTML to people and Markdown to agents through content negotiation.

Static integrations are the launch path today. Server-side integrations will bring that same OpenNav standard to runtime routes that cannot be exported as a finished folder of HTML files.

## Planned Support

[Section titled “Planned Support”](#planned-support)

| Framework | Status | Planned behavior |
| --- | --- | --- |
| Astro server output | Fast-follow | Markdown content negotiation for runtime routes. |
| Next.js server output | Fast-follow | Markdown content negotiation for server-rendered routes. |
| Site-wide middleware | Fast-follow | One default Markdown response policy for the whole app. |
| Per-endpoint middleware | Fast-follow | Route-level control for pages that need custom behavior. |

## Content Negotiation

[Section titled “Content Negotiation”](#content-negotiation)

The server-side integrations will let agents request a Markdown representation of a runtime page while people continue to receive normal HTML. This is designed for docs, product pages, and app routes that cannot be fully exported as static HTML during the build.

Responses will include `Vary: Accept` so caches keep browser HTML and agent-readable Markdown separate.

## Astro Launch Shape

[Section titled “Astro Launch Shape”](#astro-launch-shape)

The Astro integration will be able to inject server middleware for selected runtime routes.

```txt
import { defineConfig } from "astro/config";import { OpenNavAstroServer } from "@opennav-ai/opennav/astro";
export default defineConfig({  output: "server",  integrations: [    OpenNavAstroServer({      siteName: "Example Docs",      markdown: {        mode: "content-negotiation",        routes: ["/docs/**", "/blog/**"],      },    }),  ],});
```

## Next.js Launch Shape

[Section titled “Next.js Launch Shape”](#nextjs-launch-shape)

The Next.js integration will be able to run through a server `proxy.ts`, so matching stays explicit and agent-readable Markdown can be returned before the route renders.

```txt
import { OpenNavNextServer } from "@opennav-ai/opennav/next/server";import type { NextRequest } from "next/server";
const opennav = OpenNavNextServer({  siteName: "Example Docs",  markdown: {    mode: "content-negotiation",    routes: ["/docs/:path*", "/blog/:path*"],  },});
export function proxy(request: NextRequest) {  return opennav.handle(request);}
export const config = {  matcher: ["/docs/:path*", "/blog/:path*"],};
```

## Use Static Today

[Section titled “Use Static Today”](#use-static-today)

Use the current [Astro guide](https://docs.opennav.ai/frameworks/astro/index.md) for static Astro builds and the current [Next.js guide](https://docs.opennav.ai/frameworks/next/index.md) for Next.js static exports.

[PreviousNext.js](https://docs.opennav.ai/frameworks/next/index.md)

[NextCloudflare](https://docs.opennav.ai/platforms/cloudflare/index.md)

---

Site index: [llms.txt](https://docs.opennav.ai/llms.txt)

<!-- opennav compatible="true" version="1.0" profile="static-agent-ready" build-fingerprint="sha256:ef7e48fe34cc" manifest="/.well-known/opennav.json" -->
