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.jsCloudflare 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 deployConfigure 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 --prebuiltCustom 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;
}