# @delight-rpc/worker-threads

> ```sh npm install --save @delight-rpc/worker-threads # or yarn add @delight-rpc/worker-threads ```

Latest version **8.0.1** (published 2026-02-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install @delight-rpc/worker-threads
pnpm add @delight-rpc/worker-threads
yarn add @delight-rpc/worker-threads
bun add @delight-rpc/worker-threads
```

## Health

**Score 60/100 (C)** — status: stable.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 8.0.1 |
| Published | 2026-02-26 |
| First published | 2021-10-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=22 |
| Dependencies | 7 |
| Unpacked size | 32.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | BlackGlory |
| Maintainers | black_glory |

## Links

- npm: https://www.npmjs.com/package/@delight-rpc/worker-threads
- Repository: https://github.com/delight-rpc/worker-threads
- Homepage: https://github.com/delight-rpc/worker-threads#readme
- Issues: https://github.com/delight-rpc/worker-threads/issues
- npm.io page: https://npm.io/package/@delight-rpc/worker-threads

## Dependencies (7)

- [extra-abort](https://npm.io/package/extra-abort.md) ^0.4.1
- [extra-defer](https://npm.io/package/extra-defer.md) ^0.3.1
- [extra-promise](https://npm.io/package/extra-promise.md) ^7.1.1
- [@blackglory/errors](https://npm.io/package/@blackglory/errors.md) ^3.1.0
- [@blackglory/prelude](https://npm.io/package/@blackglory/prelude.md) ^0.4.0
- [@delight-rpc/protocol](https://npm.io/package/@delight-rpc/protocol.md) ^4.0.0
- [@blackglory/structures](https://npm.io/package/@blackglory/structures.md) ^0.14.13

## Recent versions

- 8.0.1 (latest) — 2026-02-26
- 8.0.0 — 2026-02-25
- 7.0.0 — 2026-02-25
- 6.0.3 — 2026-02-12
- 6.0.2 — 2025-11-03
- 6.0.1 — 2023-06-11
- 6.0.0 — 2023-03-19
- 5.0.2 — 2023-02-11
- 5.0.1 — 2023-02-05
- 5.0.0 — 2022-12-16
- 4.2.0 — 2022-08-01
- 4.1.0 — 2022-08-01
- 4.0.3 — 2022-08-01
- 4.0.2 — 2022-06-21
- 4.0.1 — 2022-05-21
- … 19 more at https://npm.io/package/@delight-rpc/worker-threads/versions

## README

# @delight-rpc/worker-threads
## Install
```sh
npm install --save @delight-rpc/worker-threads
# or
yarn add @delight-rpc/worker-threads
```

## Usage
### Main as Client, Worker as Server
```ts
// api.d.ts
interface IAPI {
  echo(message: string): string
}

// worker.ts
import { parentPort } from 'worker_threads'
import { createServer } from '@delight-rpc/worker-threads'

const api: IAPI = {
  echo(message: string): string {
    return message
  }
}

createServer(api, parentPort!)

// main.ts
import { Worker } from 'worker_threads'
import { createClient } from '@delight-rpc/worker-threads'

const worker = new Worker('./worker.js')
const [client] = createClient<IAPI>(worker)

await client.echo('hello world')
```

### Worker as Client, Main as Server
```ts
// api.d.ts
interface IAPI {
  echo(message: string): string
}

// main.ts
import { Worker } from 'worker_threads'
import { createServer } from '@delight-rpc/worker-threads'

const api: IAPI = {
  echo(message: string): string {
    return message
  }
}

const worker = new Worker('./worker.js')
createServer(api, worker)

// worker.ts
import { parentPort } from 'worker_threads'
import { createClient } from '@delight-rpc/worker-threads'

const [client] = createClient<IAPI>(parentPort!)
await client.echo('hello world')
```

## API
### createClient
```ts
function createClient<IAPI extends object>(
  port: MessagePort | Worker
, options?: {
    parameterValidators?: DelightRPC.ParameterValidators<IAPI>
    expectedVersion?: string
    channel?: string
    timeout?: number

    postMessage?: (
      port: MessagePort | Worker
    , message: IRequest<unknown> | IAbort
    ) => void
    = (port, message) => port.postMessage(message)

    receiveMessage?: (message: unknown) =>
    | IResponse<unknown>
    | undefined
    = message => {
      if (
        DelightRPC.isResult(message) ||
        DelightRPC.isError(message)
      ) {
        return message
      }
    }
  }
): [client: DelightRPC.ClientProxy<IAPI>, close: () => void]
```

### createBatchClient
```ts
function createBatchClient<DataType>(
  port: MessagePort | Worker
, options?: {
    expectedVersion?: string
    channel?: string
    timeout?: number

    postMessage?: (
      port: MessagePort | Worker
    , message: IBatchRequest<DataType> | IAbort
    ) => void
    = (port, message) => port.postMessage(message)

    receiveMessage?: (message: unknown) =>
    | IError
    | IBatchResponse<DataType>
    | undefined
    = message => {
      if (
        DelightRPC.isError(message) ||
        DelightRPC.isBatchResponse(message)
      ) {
        return message
      }
    }
  }
): [client: DelightRPC.BatchClient<DataType>, close: () => void]
```

### createServer
```ts
function createServer<IAPI extends object>(
  api: DelightRPC.ImplementationOf<IAPI>
, port: MessagePort | Worker
, options?: {
    parameterValidators?: DelightRPC.ParameterValidators<IAPI>
    version?: `${number}.${number}.${number}`
    channel?: string | RegExp | AnyChannel
    ownPropsOnly?: boolean

    postMessage?: (
      port: MessagePort | Worker
    , message: IResponse<unknown> | IBatchResponse<unknown> | IAbort
    ) => void
    = (port, message) => port.postMessage(message)

    receiveMessage?: (message: unknown) =>
    | IRequest<unknown>
    | IBatchRequest<unknown>
    | IAbort
    | undefined
    = message => {
      if (
        DelightRPC.isRequest(message) ||
        DelightRPC.isBatchRequest(message) ||
        DelightRPC.isAbort(message)
      ) {
        return message
      }
    }
  }
): () => void
```

---
_Source: https://npm.io/package/@delight-rpc/worker-threads · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
