Skip to main content
Nika is one application seam around the engine. Your product owns the request, interface and business state. Nika owns parsing, admission, execution, policy, events, receipts and traces. The first integration is two calls — admit and settle:
run() admits the workflow before it returns: an invalid file throws a typed NikaOperationError and no handle is ever handed out. result() is the sole settlement — an admitted workflow that fails resolves as status: 'failed' data, not a throw.
Omit url for the native-process transport. Supply url and token for the HTTP transport. A contained served name such as flows/release.nika goes directly to the resident without a local binary or source. An explicit local path such as ./flows/release.nika uses a compatible local engine to capture immutable bytes before HTTP admission.

One lifecycle vocabulary

run() returns a handle only after admission; the handle is not a terminal result. Events are additive and optional to render; run.result() is the only terminal truth for that observation leg, including a pause. A paused durable job may later resume under engine authority. Configuration, compatibility, transport and protocol failures throw typed SDK errors.
nika.events(run), nika.cancel(run), run.done and the facade-level wrappers remain as compatibility aliases. run.done is the same promise as run.result(). New code should call the methods on the run handle: run.events(), run.result(), run.cancel(), run.status().

Documentation graph

Authority boundary

  • The SDK does not parse a second Nika language.
  • It does not reconstruct traces or receipts in TypeScript.
  • An observer AbortSignal does not cancel a run; call run.cancel().
  • It does not infer success from an event kind.
  • It exposes only the pinned engine’s supported routes.

Source and channel contract

Review the published source

Inspect the source corresponding to the published SDK and native payloads.