Skip to content

JavaScript/TypeScript Client API

Client code starts from the same lifecycle shape in native and browser hosts:

  1. Open a runtime.
  2. Connect a client endpoint.
  3. Open a session.
  4. Submit, cancel, or poll events.

The package names differ by host, but the client session methods intentionally stay aligned.

HostRole packageTransport packages
Node.js/Deno@nnrp/native-clientTCP, QUIC, IPC, and WebSocket carrier packages
Browser/edge@nnrp/browser-client@nnrp/transport-websocket

openNativeClient

Opens a native client in Node.js or Deno.

ParameterTypeRequiredDescription
optionsNnrpNativeClientOptionsYesEndpoint, transport policy, installed transport providers, session defaults, environment/platform overrides, and optional FFI binding.
ReturnsThrows
Promise<NnrpClient>NnrpCapabilityError or NnrpNativeBindingUnavailableError.
ts
import { openNativeClient } from "@nnrp/native-client";
import { createTcpTransportProvider } from "@nnrp/transport-tcp";
import { createQuicTransportProvider } from "@nnrp/transport-quic";

const client = await openNativeClient({
  endpoint: "nnrps://runtime.example/session/default",
  transportPolicy: "auto",
  transports: [
    createQuicTransportProvider(),
    createTcpTransportProvider(),
  ],
});

openBrowserRuntime

Opens a browser runtime. Browser clients connect from this runtime rather than directly from a native endpoint because the browser has a separate WASM/module lifecycle.

ParameterTypeRequiredDescription
optionsNnrpBrowserRuntimeOptionsNoModule URL, precompiled module, artifact manifest, transport policy, and browser transport providers.
Returns
Promise<NnrpBrowserRuntime>
ts
import { openBrowserRuntime } from "@nnrp/browser-client";
import { createWebSocketTransportProvider } from "@nnrp/transport-websocket";

const runtime = await openBrowserRuntime({
  transportProviders: [createWebSocketTransportProvider()],
});

NnrpBrowserRuntime.connect

Creates a browser client from an opened browser runtime.

ParameterTypeRequiredDescription
optionsNnrpBrowserConnectOptionsYesEndpoint, optional transport policy, optional transport providers, and optional session defaults.
Returns
NnrpBrowserClient
ts
const client = runtime.connect({
  endpoint: "nnrps://runtime.example/session/default",
  providerEndpoint: "wss://runtime.example/nnrp",
  transportPolicy: "auto",
});

NnrpClient.openSession

Opens a client session. Native and browser clients expose the same session concept.

ParameterTypeRequiredDescription
optionsNnrpSessionOptions or NnrpBrowserSessionOptionsNoInput profile, cadence, quality tier, and metadata.
Returns
NnrpClientSession or NnrpBrowserClientSession
ts
const session = client.openSession({ inputProfile: "tensor" });

ClientSession.submit

Submits a request and waits for a result. Native clients use the native submit/result hot path; browser clients use the browser runtime path, but the request shape is shared.

ParameterTypeRequiredDescription
requestNnrpSubmitRequestYesFrame id, payload/tensors, profile, cache/schema metadata, and submit mode.
Returns
Promise<NnrpResult>
ts
const result = await session.submit({
  frameId: 1,
  payload: new Uint8Array([1, 2, 3]),
  inputProfile: "tensor",
  submitMode: "inline",
});

ClientSession.submitNoWait

Submits a request and returns the operation id. This method is available on native client sessions.

ParameterTypeRequiredDescription
requestNnrpSubmitRequestYesSubmit request.
Returns
Promise<bigint>

ClientSession.cancel

Sends a Preview4 CANCEL frame. NnrpClientSession and NnrpBrowserClientSession expose the same method.

ParameterTypeRequiredDescription
metadataControlRequestMetadataYesFrozen operation id, sequence, reason, role, flags, and diagnostic length.
diagnosticUint8ArrayNoBytes whose length equals metadata.diagnosticBytes.
Returns
Promise<void>

Preview4 Client Control Methods

The native and browser session classes expose the same control surface. Every method encodes the named NNRP message and submits it through the active runtime in one coarse runtime call.

MethodMessageMetadataOptional tail
abort(metadata, diagnostic?)AbortControlRequestMetadatadiagnostic bytes
updatePriority(metadata)PriorityUpdateSchedulingMetadatanone
updateDeadline(metadata)DeadlineSchedulingMetadatanone
expireAt(metadata)ExpireAtSchedulingMetadatanone
supersede(metadata, diagnostic?)SupersedeSupersedeMetadatadiagnostic bytes
updateBudget(metadata)BudgetUpdateBudgetMetadatanone
negotiateCapabilities(metadata, body?)CapabilityNegotiationCapabilityMetadatacapability entries
degradeProfile(metadata, body?)DegradeProfileCapabilityMetadatacapability entries
sendRouteHint(metadata, body?)RouteHintRouteHintMetadatatyped hint body
sendExecutionHint(metadata, body?)ExecutionHintRouteHintMetadatatyped hint body
sendTraceContext(metadata, body?)TraceContextTraceContextMetadatatrace attributes
sendControl(messageType, metadata, tail?)Any client-sendable Preview4 control frameMatching runtime metadata typedeclared tail

sendControl is the typed escape hatch for ErrorRecoverable, RetryAfter, and extension-safe control routing. It rejects a metadata type that does not match messageType.

Preview4 Client Object And Cache Methods

MethodMessageMetadataOptional tail
declareObject(metadata, body?)ObjectDeclareObjectDescriptorMetadataobject metadata
referenceObject(metadata, body?)ObjectRefObjectReferenceMetadatareference metadata
releaseObject(metadata, diagnostic?)ObjectReleaseObjectReleaseMetadatadiagnostic bytes
patchObject(metadata, delta)ObjectPatchObjectDeltaMetadatadelta bytes
sendObjectDelta(metadata, delta)ObjectDeltaObjectDeltaMetadatadelta bytes
referenceCache(metadata, body?)CacheReferenceCacheReferenceMetadatacache metadata
reportCacheMiss(metadata, diagnostic?)CacheMissCacheMissMetadatadiagnostic bytes
invalidateCache(metadata)CacheInvalidateCacheInvalidateMetadatanone

Object and cache methods return Promise<void>. They do not perform an implicit cache lookup before each submit.

Preview4 Runtime Events

nextEvent() and events() extend NnrpRuntimeEvent with every Preview4 runtime-frame discriminant: cancel, abort, priority-update, deadline, expire-at, supersede, budget-update, progress, partial-result, backpressure, credit-update, capability-negotiation, degrade-profile, route-hint, execution-hint, trace-context, result-drop-reason, recoverable-error, retry-after, object-declare, object-ref, object-release, object-patch, object-delta, cache-reference, cache-miss, and cache-invalidate. The exact typed fields and semantic tail names are frozen in Runtime Control & Objects.

Events preserve wire order within one operation. Events from different operations may interleave. After cancellation, result-drop-reason remains observable, while late result and partial-result payloads for the cancelled operation are suppressed from normal result iteration.

Submit Cancellation

submit(request, options?) and submitNoWait(request, options?) accept NnrpSubmitOptions:

FieldTypeRequiredDescription
signalNnrpAbortSignalLikeNoAn already-aborted signal rejects before dispatch; an abort after dispatch sends CANCEL.
timeoutMillisnumberNoLocal wait bound. The SDK sends DEADLINE before dispatch and cancels work when the bound expires.

These helpers use the same control sequence allocator as explicit control methods; they do not invent an out-of-band cancellation channel.

ClientSession.nextEvent

Reads the next runtime event.

ParameterTypeRequiredDescription
optionsNnrpEventPollOptionsNoEvent polling options.
Returns
Promise<NnrpRuntimeEvent>

Runtime Differences

AreaNative clientBrowser client
Package@nnrp/native-client@nnrp/browser-client
Runtime openopenNativeClient(options) returns a connected client.openBrowserRuntime(options) returns a runtime, then runtime.connect(options) returns a client.
Transport packagesTCP, QUIC, IPC, and WebSocket packages carry native transport artifacts.Browser clients use the WebSocket provider with browser-client WASM.
Server APIsNot exposed.Not exposed.

Option Types

NnrpNativeClientOptions

FieldTypeRequiredDescription
endpointstringYesRemote NNRP endpoint.
providerEndpointstring | URLNoExplicit carrier-local endpoint for diagnostics, conformance, or controlled deployment.
transportPolicyNnrpTransportPolicyNoauto, prefer-*, or force-* selection policy.
transportsreadonly NnrpTransportProvider[]NoInstalled native transport providers. See Transport Providers.
sessionDefaultsNnrpSessionOptionsNoDefaults applied when sessions omit values.
environmentRecord<string, string>NoEnvironment override for artifact lookup or diagnostics.
platformstringNoPlatform override for tests and controlled packaging checks.
ffiNnrpNativeFfiBindingNoExplicit native binding for controlled deployments and tests.

NnrpBrowserRuntimeOptions

FieldTypeRequiredDescription
moduleUrlstring | URLNoExplicit WASM module URL.
moduleWebAssembly.ModuleNoPrecompiled WASM module.
artifactNnrpWasmArtifactOptionsNoBrowser WASM primitive manifest plus optional base URL.
transportPolicyNnrpTransportPolicyNoBrowser transport selection policy.
transportProvidersreadonly NnrpBrowserTransportProvider[]NoBrowser transport providers. The current SDK accepts WebSocket providers. See Transport Providers.

NnrpBrowserConnectOptions

FieldTypeRequiredDescription
endpointstringYesRemote nnrp:// or nnrps:// application endpoint.
providerEndpointstring | URLNoExplicit ws:// or wss:// carrier-local endpoint.
transportPolicyNnrpTransportPolicyNoSelection policy.
transportProvidersreadonly NnrpBrowserTransportProvider[]NoBrowser providers for this connection.
sessionDefaultsNnrpBrowserSessionOptionsNoDefaults applied when sessions omit values.

NnrpSessionOptions

FieldTypeRequiredDescription
inputProfilestringNoInput profile name such as tensor or token.
targetCadencenumberNoRequested cadence.
qualityTiernumberNoApplication quality tier.
metadataRecord<string, unknown>NoApplication metadata attached to the session.

NnrpBrowserSessionOptions

Same shape as NnrpSessionOptions, scoped to browser clients.

NnrpEventPollOptions

FieldTypeRequiredDescription
timeoutMsnumberNoMaximum event wait in milliseconds.
maxEventsnumberNoMaximum number of events to read when the runtime batches events.

NNRP Documentation