[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Worker](https://evolu.dev/docs/api-reference/common/Worker) › WorkerSelf

Defined in: [packages/common/src/Worker.ts:275](https://github.com/evoluhq/evolu/blob/b6ade4b22d4be1758761a2712668e870d3e602c7/packages/common/src/Worker.ts#L275)

Typed `self` for code running inside a dedicated worker.

This is the worker-side counterpart to [Worker](https://evolu.dev/docs/api-reference/common/Worker/interfaces/Worker) — a typed
[MessagePort](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort) that wraps `self` inside the worker.

## Extends

- [`MessagePort`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort)\<`Output`, `Input`\>

## Methods

<a id="dispose"></a>

### \[dispose\]()

```ts
dispose: void;
```

Defined in: node\_modules/@typescript/old/lib/lib.esnext.disposable.d.ts:34

#### Inherited from

[`MessagePort`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort).[`[dispose]`](/docs/api-reference/common/Worker/interfaces/MessagePort#dispose)

## Properties

<a id="native"></a>

### native

```ts
readonly native: NativeMessagePort<Output, Input>;
```

Defined in: [packages/common/src/Worker.ts:86](https://github.com/evoluhq/evolu/blob/b6ade4b22d4be1758761a2712668e870d3e602c7/packages/common/src/Worker.ts#L86)

The native underlying port for transferring via `postMessage`.

Prepare a port for transfer:

```ts
import {
  assertType,
  createMessageChannel,
  type NativeMessagePort,
} from "@evolu/common";

interface ConsoleMessage {
  readonly type: "ConsoleEntry";
  readonly text: string;
}

using consoleChannel = createMessageChannel<ConsoleMessage>();
const init = {
  type: "InitConsole",
  port: consoleChannel.port1.native,
};

assertType<NativeMessagePort<ConsoleMessage>, typeof init.port>();
```

#### Inherited from

[`MessagePort`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort).[`native`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort#native)

---

<a id="onmessage"></a>

### onMessage

```ts
onMessage: ((message: Input) => void) | null;
```

Defined in: [packages/common/src/Worker.ts:58](https://github.com/evoluhq/evolu/blob/b6ade4b22d4be1758761a2712668e870d3e602c7/packages/common/src/Worker.ts#L58)

Handler for incoming messages. Messages are queued until this is assigned,
matching native `MessagePort` behavior where setting `onmessage` implicitly
calls `start()`. This enables safe async initialization — the sender can
post messages immediately while the receiver sets up.

#### Inherited from

[`MessagePort`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort).[`onMessage`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort#onmessage)

---

<a id="postmessage"></a>

### postMessage

```ts
readonly postMessage: (message: Output, transfer?: readonly Transferable[]) => void;
```

Defined in: [packages/common/src/Worker.ts:47](https://github.com/evoluhq/evolu/blob/b6ade4b22d4be1758761a2712668e870d3e602c7/packages/common/src/Worker.ts#L47)

#### Inherited from

[`MessagePort`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort).[`postMessage`](https://evolu.dev/docs/api-reference/common/Worker/interfaces/MessagePort#postmessage)