> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corsair.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Web-standard (Fetch)

> Mount Corsair on any framework that speaks the Web Fetch API — SvelteKit, Remix, Astro, Nuxt, Cloudflare Workers, Bun, Deno.

Every Corsair adapter wraps one primitive: `managementHandler(corsair)` returns a handler with the signature `(request: Request) => Promise<Response>`. Any framework whose routes speak the Fetch API calls it directly — no adapter needed.

## Configure Corsair

```ts corsair.ts theme={null}
import { createCorsair } from 'corsair';
import { github } from '@corsair-dev/github';

export const corsair = createCorsair({
    plugins: [github({ authType: 'managed' })],
    database: db,
    kek: process.env.CORSAIR_KEK!,
    hub: {
        projectApiKey: process.env.CORSAIR_DEV_API_KEY!,
        signingSecret: process.env.CORSAIR_DEV_SIGNING_SECRET!,
    },
});
```

## Mount the handler

<Tabs>
  <Tab title="SvelteKit">
    ```ts src/routes/api/corsair/[...path]/+server.ts theme={null}
    import { managementHandler } from 'corsair';
    import { corsair } from '$lib/server/corsair';

    const handler = managementHandler(corsair, { basePath: '/api/corsair' });
    export const GET = ({ request }) => handler(request);
    export const POST = ({ request }) => handler(request);
    ```
  </Tab>

  <Tab title="Remix">
    ```ts app/routes/api.corsair.$.ts theme={null}
    import { managementHandler } from 'corsair';
    import { corsair } from '~/server/corsair';

    const handler = managementHandler(corsair, { basePath: '/api/corsair' });
    export const loader = ({ request }) => handler(request);
    export const action = ({ request }) => handler(request);
    ```
  </Tab>

  <Tab title="Astro">
    ```ts src/pages/api/corsair/[...path].ts theme={null}
    import { managementHandler } from 'corsair';
    import { corsair } from '../../../server/corsair';

    const handler = managementHandler(corsair, { basePath: '/api/corsair' });
    export const GET = ({ request }) => handler(request);
    export const POST = ({ request }) => handler(request);
    export const prerender = false;
    ```
  </Tab>

  <Tab title="Nuxt">
    ```ts server/routes/api/corsair/[...path].ts theme={null}
    import { fromWebHandler } from 'h3';
    import { managementHandler } from 'corsair';
    import { corsair } from '~/server/corsair';

    // h3's fromWebHandler adapts the (Request) => Response handler to Nitro.
    export default fromWebHandler(
        managementHandler(corsair, { basePath: '/api/corsair' }),
    );
    ```
  </Tab>

  <Tab title="Workers / Bun / Deno">
    ```ts theme={null}
    import { managementHandler } from 'corsair';
    import { corsair } from './corsair';

    const handler = managementHandler(corsair, { basePath: '/api/corsair' });
    export default { fetch: (request: Request) => handler(request) };
    ```
  </Tab>
</Tabs>

## Run and go green

On the first request to `/api/corsair`, your app self-registers its delivery URL with Hub. See [Delivery URLs](/hub/delivery-urls).

<Note>Backend not in JavaScript? Corsair's SDK is TypeScript-only. Integrate over the [Hub REST API](/hub/rest-api) instead.</Note>
