Waku is a minimal React framework built around React Server Components. It renders components exclusively on the server for data fetching and server-side logic, then hydrates client components in the browser for interactivity. The framework supports hybrid rendering, mixing static prerendering at build time with dynamic per-request rendering within a single application, and allows independently loading slice components that can be static or dynamic.
The framework distinguishes itself through its file-based routing system that defines pages, layouts, and API endpoints by placing files in a directory structure, with support for dynamic segments, catch-all patterns, and route groups. Waku enables server actions that execute async functions marked with a directive directly from client components and forms, with automatic FormData handling. It also provides composable interceptors that wrap every render and API handler with custom logic for cross-cutting concerns like context setup and logging, and supports composing pages from independently rendered reusable slice components that load statically or dynamically.
Waku includes capabilities for defining server-side HTTP endpoints that return JSON responses, managing document metadata by hoisting title, meta, and link tags from any component into the document head, and customizing the root HTML element. The framework supports environment variable access with private variables in server components and public variables in client components, integrates with state management libraries, and allows global stylesheet imports. It provides error boundary handling that catches errors from server or client components and replays server errors in the browser, and supports Content Security Policy configuration with nonce generation.
The project offers project scaffolding from a template with file-system routing and server/client component support already configured, and provides deployment options including platform-specific adapters for Vercel, Netlify, Cloudflare Workers, Deno Deploy, AWS Lambda, and Node.js, as well as static export and Docker packaging.