Skip to content
You are reading the v2 docs, currently in beta.V1 docs
oRPC
Esc
navigateopen⌘Jpreview
On this page

Worker Threads Adapter

Use oRPC for typesafe communication between Node.js Worker Threads via the Message Port Adapter.

Use Node.js Worker Threads with oRPC for typesafe inter-thread communication via the Message Port Adapter.

Worker Thread

Listen for a MessagePort sent from the main thread and upgrade it:

import { parentPort } from 'node:worker_threads'
import { onError } from '@orpc/server'
import { RPCHandler } from '@orpc/server/message-port'

const handler = new RPCHandler(router, {
  interceptors: [
    onError((error) => {
      console.error(error)
    }),
  ],
})

parentPort?.on('message', (message) => {
  if (message instanceof MessagePort) {
    handler.upgrade(message, {
      context: {} // Provide initial context if needed
    })

    message.start()
  }
})

Main Thread

Create a MessageChannel, send one port to the worker thread, and use the other to initialize the client link:

import { MessageChannel, Worker } from 'node:worker_threads'
import { RPCLink } from '@orpc/client/message-port'

const { port1: clientPort, port2: serverPort } = new MessageChannel()

const worker = new Worker(new URL('./some-worker.js', import.meta.url))

worker.postMessage(serverPort, [serverPort])

const link = new RPCLink({
  port: clientPort
})

clientPort.start()

Last updated on August 25, 2026

Was this page helpful?