Deployment

pracht apps deploy anywhere via platform adapters. Each adapter handles request conversion, asset serving, and ISG storage for its runtime.

Node.js

The default adapter. Generates a standalone Node.js server with static file serving and ISG support.

vite.config.ts
import { pracht } from "@pracht/vite-plugin";

export default defineConfig({
  plugins: [pracht()],
  // adapter defaults to "node"
});
# Build and run
pracht build
node dist/server/server.js

Cloudflare Workers

Deploys as a Cloudflare Worker with static assets served via the ASSETS binding.

vite.config.ts
import { cloudflareAdapter } from "@pracht/adapter-cloudflare";

export default defineConfig({
  plugins: [pracht({ adapter: cloudflareAdapter() })],
});
# Build and deploy
pracht build
wrangler deploy

Configure bindings (KV, D1, R2) in wrangler.jsonc. They are available via context.env in loaders and API routes.

Vercel

Deploys as a Vercel Edge Function with static assets served from the CDN.

vite.config.ts
import { vercelAdapter } from "@pracht/adapter-vercel";

export default defineConfig({
  plugins: [pracht({ adapter: vercelAdapter() })],
});
# Build and deploy
pracht build
vercel deploy --prebuilt

Custom Context

All adapters support a createContext option that enriches the context passed to loaders, API routes, and middleware:

createNodeRequestHandler({
  app: resolvedApp,
  createContext: async ({ request }) => {
    const session = await getSession(request);
    return { session };
  },
});

// In a loader:
export async function loader({ context }: LoaderArgs) {
  const user = context.session?.user;
}