[API reference](https://evolu.dev/docs/api-reference) › [@evolu/nodejs](https://evolu.dev/docs/api-reference/nodejs) › startRelay

```ts
function startRelay(
  __namedParameters: NodeJsRelayConfig,
): Task<Relay, never, RelayDeps>;
```

Defined in: [nodejs/src/local-first/Relay.ts:91](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/nodejs/src/local-first/Relay.ts#L91)

Starts an Evolu relay server using Node.js.

Use [createRelayDeps](https://evolu.dev/docs/api-reference/nodejs/functions/createRelayDeps) to create dependencies for better-sqlite3, or
provide a custom SQLite driver implementation.

### Example

```ts
// Ensure the database is created in a predictable location for Docker.
mkdirSync("data", { recursive: true });
process.chdir("data");

const console = createConsole({
  // level: "debug",
  formatter: createConsoleFormatter()({
    timestampFormat: "relative",
  }),
});

const deps = { ...createRelayDeps(), console };

await using run = createRun(deps);
await using stack = new AsyncDisposableStack();

stack.use(
  await run.orThrow(
    startRelay({
      port: 4000,

      // Note: Relay requires URL in format ws://host:port/<ownerId>
      // isOwnerAllowed: (_ownerId) => true,

      isOwnerWithinQuota: (_ownerId, requiredBytes) => {
        const maxBytes = 1024 * 1024; // 1MB
        return requiredBytes <= maxBytes;
      },
    }),
  ),
);

await run.deps.shutdown;
```