RedwoodSDK logo

A simple framework for humans

Server-first React with zero magic. Built to stay understandable.

Redwood Inc. logo Documentation Join the community on Discord License
--- ## What is this? RedwoodSDK is a server-first React framework. It starts as a Vite plugin that enables React Server Components and Server Functions, then layers on a type-safe, standards-compliant router that takes you from request to response—end to end. (For Cloudflare (workerd) only) It includes: - Vite-first setup (no ceremony) - React Server Components + Server Functions - Type-safe server router (web standards, not framework magic) - Middleware & per router middleware for request/response control - Realtime-ready primitives for modern apps --- ## 📦 Quickstart Start a new project: ```bash npx create-rwsdk my-project-name ``` Install dependencies: ```bash cd my-project-name pnpm install ``` Run the dev server: ```bash pnpm dev ``` ```bash VITE v6.2.0 ready in 500 ms ➜ Local: http://localhost:5173/ ➜ Network: use --host to expose ➜ press h + enter to show help ``` That's it, your RedwoodSDK is up and running! ### Add more routes? As long as you return a valid Response, RedwoodSDK is happy! ```js // worker.tsx import { defineApp } from "rwsdk/worker"; import { route, render } from "rwsdk/router"; import MyReactPage from "@app/pages/MyReactPage"; export default defineApp([ render(Document, [ route("/", () => new Response("Hello, World!")), route("/ping", function () { return

Pong!

; }), route("/react", MyReactPage) route("/docs", async () => { return new Response(null, { status: 301, headers: { "Location": "https://docs.rwsdk.com", }, }); }), route("/sitemap.xml", async () => { return new Response(sitemap, { status: 200, headers: { "Content-Type": "application/xml", }, }); }), route("/robots.txt", async () => { const robotsTxt = `User-agent: * Allow: / Disallow: /search Sitemap: https://rwsdk.com/sitemap.xml`; return new Response(robotsTxt, { status: 200, headers: { "Content-Type": "text/plain", }, }); }), ]), ]); ``` Start building immediately → [Quick start guide](https://docs.rwsdk.com/getting-started/quick-start/) --- ## 🚀 React Server Components RedwoodSDK is true Javascript full-stack: ```js // users.ts (server function) "use server"; import { db } from "@/db"; export async function getUsers() { const users = await db.users.findAll(); return users; } // UserList.tsx (React server component) import { getUsers } from "./users"; export default async function UsersPage() { const users = await getUsers(); return (
); } ``` Setup a database now → [React Server Components](https://docs.rwsdk.com/core/react-server-components/) --- ## ⭐️ Like it? Star it! If this project saves you time or sparks ideas, please [⭐ star the repo](https://github.com/redwoodjs/sdk) — it really helps us grow the community. --- ## 🛠 Contributing This is a monorepo. To contribute or explore packages: - Join our community on [Discord](https://discord.gg/redwoodjs) - Check out the [Contributing Guide](./CONTRIBUTING.md) for how to get started. **Policy docs:** - [Contributing](./CONTRIBUTING.md) - [Support & Versioning](./SUPPORT.md) - [Security Policy](./SECURITY.md)