# Configure Render Timeouts URL: /runtime/guides/render-timeouts Use `operationTimeout` for wall-clock deadlines on document description, evaluation, view rendering, and exports. All values are milliseconds; zero disables enforcement. Direct transcodes have a separate deadline. ## Prerequisites [#prerequisites] Use an isolated worker or remote transport capable of enforcing a deadline. Same-isolate `inProcessTransport` rejects a positive timeout because synchronous work also blocks the client's timer. See [Transport API](/runtime/api/transport). ## Steps [#steps] ### 1. Configure the client [#1-configure-the-client] ```typescript import { createRuntimeClient, isOperationTimeoutError } from '@taucad/runtime/client'; import { createWebWorkerClientOptions } from '@taucad/runtime/transport/web'; const clientOptions = createWebWorkerClientOptions({ createWorker: () => new Worker(new URL('./runtime.worker.ts', import.meta.url), { type: 'module' }), }); const client = createRuntimeClient({ ...clientOptions, operationTimeout: 60_000 }); const document = client.open({ source: { path: 'main.ts' } }); try { const outcome = await document.evaluation(); if (!outcome.superseded) { console.log(outcome.evaluation.success); } } catch (error) { if (isOperationTimeoutError(error)) { console.warn(error.code, error.phase); } else { throw error; } } finally { document.close(); await client.shutdown(); } ``` The worker entry declares plugins with `defineRuntime` and calls `serveWebWorkerRuntime`; see [Worker Model](/runtime/concepts/worker-model). Keep reusable client options at module scope, and materialize a fresh client for each independent lifetime. ### 2. Change future deadlines [#2-change-future-deadlines] ```typescript import type { RuntimeClient } from '@taucad/runtime/client'; export function changeDeadlines(client: RuntimeClient): void { client.setOperationTimeout(120_000); client.setTranscodeTimeout(30_000); } ``` Both setters return synchronously, reject negative/nonfinite durations, and affect subsequently admitted operations. They do not change work already in flight. Direct conversion defaults to `60_000`; document operations default to zero. ### 3. Distinguish failure from supersession [#3-distinguish-failure-from-supersession] Deadline expiry rejects the matching promise locally with `OperationTimeoutError`, including without shared memory. Supersession instead resolves as `{ superseded: true }`. Explicit abort uses `OperationAbortedError`; transport loss or termination uses `RuntimeTerminatedError`. The runtime requests cooperative cancellation. A blocked isolated host that cannot settle during bounded recovery may be terminated. Recreate its client from the stable options spec after termination; explicitly reopen the intended source. The runtime does not replay model operations automatically. ## Variations [#variations] Electron uses its renderer/main/utility transport ownership to terminate a blocked utility process. Use `createElectronClientOptions` from `@taucad/runtime/electron/renderer` rather than passing utility IDs or raw ports to the client. For native/WASM kernels, shared abort state can be checked inside synchronous loops. Kernel authors use the existing operation-scoped services signal and cooperative abort helpers; see [Cooperate with Cancellation](/runtime/guides/cooperate-with-cancellation). ## Related [#related] * [Handle Errors](/runtime/guides/error-handling) * [Client API](/runtime/api/client) * [Worker Model](/runtime/concepts/worker-model)