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
1 change: 1 addition & 0 deletions apps/content/.vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ export default withMermaid(defineConfig({
{ text: 'Solid Start', link: '/docs/adapters/solid-start' },
{ text: 'Svelte Kit', link: '/docs/adapters/svelte-kit' },
{ text: 'Tanstack Start', link: '/docs/adapters/tanstack-start' },
{ text: 'Web Workers', link: '/docs/adapters/web-workers' },
{ text: 'Worker Threads', link: '/docs/adapters/worker-threads' },
],
},
Expand Down
2 changes: 1 addition & 1 deletion apps/content/docs/adapters/message-port.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import { RPCHandler } from '@orpc/server/message-port'
const handler = new RPCHandler(router)

handler.upgrade(serverPort, {
context: {}, // Optionally provide an initial context
context: {}, // Provide initial context if needed
})

serverPort.start()
Expand Down
54 changes: 54 additions & 0 deletions apps/content/docs/adapters/web-workers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: Web Workers Adapter
description: Enable type-safe communication with Web Workers using oRPC.
---

# Web Workers Adapter

[Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Worker) allow JavaScript code to run in background threads, separate from the main thread of a web page. This prevents blocking the UI while performing computationally intensive tasks. Web Workers are also supported in modern runtimes like [Bun](https://bun.com/docs/api/workers), [Deno](https://docs.deno.com/examples/web_workers/), etc.

With oRPC, you can establish type-safe communication channels between your main thread and Web Workers. For additional context, see the [Message Port Adapter](/docs/adapters/message-port) guide.

## Web Worker

Configure your Web Worker to handle oRPC requests by upgrading it with a message port handler:

```ts
import { RPCHandler } from '@orpc/server/message-port'

const handler = new RPCHandler(router)
Comment thread
dinwwwh marked this conversation as resolved.

handler.upgrade(self, {
context: {}, // Provide initial context if needed
})
```

## Main Thread

Create a link to communicate with your Web Worker:

```ts
import { RPCLink } from '@orpc/client/message-port'

export const link = new RPCLink({
port: new Worker('some-worker.ts')
})
```

:::details Using Web Workers in Vite Applications?
You can leverage [Vite Web Workers feature](https://vite.dev/guide/features.html#web-workers) for streamlined development:

```ts
import SomeWorker from './some-worker.ts?worker' // [!code highlight]
import { RPCLink } from '@orpc/client/message-port'

export const link = new RPCLink({
port: new SomeWorker()
})
```
Comment thread
dinwwwh marked this conversation as resolved.

:::

:::info
This only shows how to configure the link. For full client examples, see [Client-Side Clients](/docs/client/client-side).
:::
4 changes: 3 additions & 1 deletion apps/content/docs/adapters/worker-threads.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ const handler = new RPCHandler(router)

parentPort.on('message', (message) => {
if (message instanceof MessagePort) {
handler.upgrade(message)
handler.upgrade(message, {
context: {}, // Provide initial context if needed
})
Comment thread
dinwwwh marked this conversation as resolved.

message.start()
}
Expand Down
1 change: 1 addition & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ export default antfu({
'vars-on-top': 'off',
'unicorn/prefer-type-error': 'off',
'antfu/no-import-node-modules-by-path': 'off',
'no-restricted-globals': 'off',
},
}, {
files: ['apps/content/examples/**'],
Expand Down
Loading