Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/content/blog/nextjs-ssr-orpc-tanstack-query.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Next.js SSR with oRPC and TanStack Query: From Zero to Live Queries"
description: "A step-by-step tutorial for building a server-rendered Next.js app with oRPC and TanStack Query, including streamed and live queries that render on the server and resume in the browser."
description: "Build a server-rendered Next.js app with oRPC and TanStack Query step by step, including streamed and live queries that resume in the browser."
type: blog
date: 2026-08-19
search:
Expand Down
2 changes: 1 addition & 1 deletion apps/content/blog/stop-fetching-from-yourself.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Stop Making HTTP Requests to Yourself During SSR"
description: "Most fullstack apps fetch SSR data from their own API over HTTP. Call your API logic in-process with the Fetch API instead, and share one client between server and browser without leaking server code into the bundle."
description: "Most fullstack apps fetch SSR data from their own API over HTTP. Call your API logic in-process instead, and share one client between server and browser."
type: blog
date: 2026-08-19
search:
Expand Down
2 changes: 1 addition & 1 deletion apps/content/blog/uploads-bigger-than-your-ram.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Handling File Uploads Bigger Than Your RAM in JavaScript"
description: "Stream large file uploads to disk in any JavaScript runtime while keeping the standard File API. Lazy blobs, safe temp file cleanup, per-category body size limits, and the oRPC plugin that packages it all."
description: "Stream large file uploads to disk in any JavaScript runtime while keeping the standard File API, with lazy blobs, temp file cleanup, and body size limits."
type: blog
date: 2026-08-17
search:
Expand Down
2 changes: 1 addition & 1 deletion apps/content/blog/v1-announcement.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "oRPC v1 Announcement - Typesafe APIs Made Simple 🪄"
description: "oRPC v1 is now available - tRPC, ts-rest, next-safe-action, and more alternatives!"
description: "oRPC v1 is out: a stable, production-ready way to build typesafe APIs in TypeScript, and an alternative to tRPC, ts-rest, next-safe-action, and more!"
type: blog
date: 2025-04-16
search:
Expand Down
2 changes: 1 addition & 1 deletion apps/content/blog/you-might-not-need-a-form-library.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "You Might Not Need a Form Library"
description: "Your API schema already knows what valid input looks like. Run that same schema in the browser, parse plain HTML forms into structured data, and display field errors, all without a form validation library."
description: "Your API schema already knows what valid input looks like. Reuse it in the browser to parse plain HTML forms and show field errors, without a form library."
type: blog
date: 2026-08-22
search:
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/astro.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Astro Adapter"
description: "Use oRPC inside an Astro project by mounting a handler in an API route."
description: "Use oRPC inside an Astro project by mounting a handler in an on-demand API route through the Fetch API Adapter, and call procedures directly during SSR."
sidebar:
label: "Astro"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/browser.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Browser Adapter"
description: "Use oRPC for typesafe communication between browser scripts via the Message Port Adapter."
description: "Use oRPC for typesafe messaging between extension scripts or browser windows via the Message Port Adapter, and relay scripts that can't connect directly."
sidebar:
label: "Browser"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/electron.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Electron Adapter"
description: "Use oRPC for typesafe communication between Electron processes via the Message Port Adapter."
description: "Use oRPC for typesafe communication between Electron's main, preload, and renderer processes by passing a MessagePort through the Message Port Adapter."
sidebar:
label: "Electron"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/elysia.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Elysia Adapter"
description: "Use oRPC inside an Elysia project by mounting a handler on a wildcard route."
description: "Use oRPC inside an Elysia project on Bun by mounting a handler on a wildcard route through the Fetch API Adapter, with Elysia's body parsing turned off."
sidebar:
label: "Elysia"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/express.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Express.js Adapter"
description: "Use oRPC inside an Express.js project by mounting a handler as a middleware."
description: "Use oRPC inside an Express.js project by mounting a handler as a middleware through the Node HTTP Adapter, without conflicts from body-parsing middleware."
sidebar:
label: "Express.js"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/fetch-api.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Fetch API Adapter"
description: "Use oRPC with the Fetch API on both servers and clients, in runtimes such as Bun and Deno."
description: "Use oRPC with the Fetch API on both servers and clients, in runtimes such as Bun and Deno, and configure how event streams are sent to the client."
sidebar:
label: "Fetch API"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/h3.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "H3 Adapter"
description: "Use oRPC inside an H3 project by mounting a handler on a wildcard route."
description: "Use oRPC inside an H3 project by mounting a handler on a wildcard route. H3 is built on web standards, so oRPC integrates through the Fetch API Adapter."
sidebar:
label: "H3"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/hono.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Hono Adapter"
description: "Use oRPC inside a Hono project by mounting a handler as a middleware."
description: "Use oRPC inside a Hono project by mounting a handler as a middleware through the Fetch API Adapter, with a fix for middleware that reads the body first."
sidebar:
label: "Hono"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/next.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Next.js Adapter"
description: "Use oRPC inside a Next.js project by mounting a handler in a route handler."
description: "Use oRPC inside a Next.js project by mounting a handler in an App Router route handler or Pages Router API route, with a client that also works during SSR."
sidebar:
label: "Next.js"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/nuxt.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Nuxt Adapter"
description: "Use oRPC inside a Nuxt project by mounting a handler in a server route."
description: "Use oRPC inside a Nuxt project by mounting a handler in a server route and setting up an SSR-compatible client in a Nuxt plugin."
sidebar:
label: "Nuxt"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/react-router.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "React Router Adapter"
description: "Use oRPC inside a React Router project by mounting a handler in a resource route."
description: "Use oRPC inside a React Router or Remix project by mounting a handler in a resource route's loader and action through the Fetch API Adapter."
sidebar:
label: "React Router"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/solid-start.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "SolidStart Adapter"
description: "Use oRPC inside a SolidStart project by mounting a handler in an API route."
description: "Use oRPC inside a SolidStart project by mounting a handler in an API route, with a client that forwards request headers during SSR and works in the browser."
sidebar:
label: "SolidStart"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/svelte-kit.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "SvelteKit Adapter"
description: "Use oRPC inside a SvelteKit project by mounting a handler in an endpoint."
description: "Use oRPC inside a SvelteKit project by mounting a handler in an endpoint, then call it during SSR through SvelteKit's fetch or a server-side client."
sidebar:
label: "SvelteKit"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/tanstack-start.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "TanStack Start Adapter"
description: "Use oRPC inside a TanStack Start project by mounting a handler in a server route."
description: "Use oRPC inside a TanStack Start project by mounting a handler in a server route, with an isomorphic client for the browser and SSR via createIsomorphicFn."
sidebar:
label: "TanStack Start"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/web-workers.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Web Workers Adapter"
description: "Use oRPC for typesafe communication with Web Workers via the Message Port Adapter."
description: "Use oRPC for typesafe communication between the main thread and Web Workers via the Message Port Adapter, in browsers and runtimes such as Bun and Deno."
sidebar:
label: "Web Workers"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/worker-threads.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Worker Threads Adapter"
description: "Use oRPC for typesafe communication between Node.js Worker Threads via the Message Port Adapter."
description: "Use oRPC for typesafe communication between the Node.js main thread and Worker Threads by passing a MessagePort through the Message Port Adapter."
sidebar:
label: "Worker Threads"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/api-reference.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "API Reference"
description: "Full signatures for every function, class, and type the oRPC packages export."
description: "Full signatures for every function, class, and type the oRPC packages export, generated from the TypeScript declarations each package publishes."
sidebar:
icon: book-marked
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/contract-first.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Contract-First"
description: "Build your first contract-first API with oRPC: describe the API in a contract, implement it with full type checking, and call it from a client that only needs the contract."
description: "Build a contract-first API with oRPC: define a contract, implement it with full type checking, and call it from a client that only needs the contract."
sidebar:
icon: handshake
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/integrations/better-auth.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Better Auth Integration"
description: "Use Better Auth sessions in oRPC context and protect procedures with typed middleware."
description: "Use Better Auth sessions in oRPC context and protect procedures with typed middleware, with an option to load the session lazily once per request."
sidebar:
label: "Better Auth"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/integrations/effect.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Effect Integration"
description: "Write effectful oRPC handlers with Effect generators, call oRPC clients as effects, provide services through context, and use Effect Schema for input and output validation."
description: "Write effectful oRPC handlers with Effect generators, call oRPC clients as effects, provide services through context, and validate with Effect Schema."
sidebar:
label: "Effect"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/openapi/link-without-runtime-imports.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "OpenAPI Link Without Runtime Imports"
description: "Use build-time macros to embed a minified contract in your client bundle, so OpenAPI Link works without maintaining a separate contract or shipping server code to the client."
description: "Use build-time macros to embed a minified contract in your client bundle, so OpenAPI Link works without a separate contract or shipping server code."
---

[OpenAPI Link](/docs/openapi/link) needs a contract at runtime to know each procedure's method and path. With [RPC Link](/docs/rpc/link) a type import is enough, but with OpenAPI Link you must either maintain a [contract](/docs/contract/router) or import your [router](/docs/router), which pulls server code into the client bundle. [Safely Importing Router on the Client](/docs/contract/router#safely-importing-router-on-the-client) avoids that by exporting a minified contract to a JSON file, but you must regenerate the file every time the router changes.
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/plugins/get-method-csrf-protection.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "GET Method CSRF Protection Plugin"
description: "Use GetMethodCsrfProtectionHandlerPlugin to make the safe GET method as secure as POST by rejecting navigations that may carry SameSite=Lax cookies from another site."
description: "Use GetMethodCsrfProtectionHandlerPlugin to make GET as secure as POST by rejecting cross-site navigations that may carry SameSite=Lax cookies."
sidebar:
label: "GET Method CSRF Protection"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/plugins/method-override.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Method Override Plugin"
description: "Use MethodOverrideHandlerPlugin to override the HTTP method of a POST request with a query parameter, so HTML forms can invoke PUT, PATCH, and DELETE procedures."
description: "Use MethodOverrideHandlerPlugin to override a POST request's HTTP method with a query parameter, so HTML forms can invoke PUT, PATCH, and DELETE procedures."
sidebar:
label: "Method Override"
---
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/recipes/publish-client-to-npm.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Publish Client to NPM"
description: "Learn how to build and publish your oRPC client to NPM so users can consume your APIs as a fully typed SDK."
description: "Learn how to build and publish your oRPC client to NPM with pnpm and tsdown, so users can consume your APIs as a fully typed SDK."
---

:::info
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/requirements.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Runtime Requirements"
description: "oRPC is built on ES2022 and a small set of standard Web APIs. This page lists exactly what it needs and the minimum versions that provide it on Node.js, Deno, Bun, Cloudflare Workers, browsers, Android, and iOS."
description: "The ES2022 features and standard Web APIs oRPC needs, with minimum versions for Node.js, Deno, Bun, Cloudflare Workers, browsers, Android, and iOS."
sidebar:
label: "Requirements"
icon: cpu
Expand Down
4 changes: 2 additions & 2 deletions apps/content/pages/blog/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ const blogJsonLd = {
'@type': 'Blog',
'name': `${config.title} Blog`,
'url': `${siteBase}/blog`,
'description': 'News, announcements, and writing from the oRPC team.',
'description': 'News, release announcements, tutorials, and engineering articles from the oRPC team about building typesafe APIs with TypeScript.',
'blogPost': posts.map(post => ({
'@type': 'BlogPosting',
'headline': post.title,
Expand All @@ -94,7 +94,7 @@ const blogJsonLd = {
searchEnabled={config.search.enabled}
siteUrl={config.site}
ogEnabled={config.og.enabled}
page={{ title: `Blog - ${config.title}`, description: 'News, announcements, and writing from the oRPC team.', route: '/blog' }}
page={{ title: `Blog - ${config.title}`, description: 'News, release announcements, tutorials, and engineering articles from the oRPC team about building typesafe APIs with TypeScript.', route: '/blog' }}
x={config.x}
>
<script
Expand Down
2 changes: 1 addition & 1 deletion apps/content/pages/sponsors.astro
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const past = pastSponsors()
<InnerPage
name="Sponsors"
route="/sponsors"
description="Everyone who funds oRPC, what each sponsor pledges this month, and the past sponsors who helped get it here."
description="Everyone who funds oRPC, what each sponsor pledges this month, and the past sponsors who helped get it here. Sponsor via GitHub or Open Collective."
heading="The people who keep oRPC going."
lede="oRPC is MIT licensed and built in the open. Sponsors pay for the time that goes into it: fixes, features, reviews, and the docs you are reading."
>
Expand Down
Loading