> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nika.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Deployment topologies

> Choose LocalNika, the resident firer, an OS bridge, model serve or the preview remote client by job.

export const ProjectContract = () => <>
    <Info>
      <strong>Live project control plane.</strong> The released engine
      discovers <code>nika.yaml</code> from the working directory toward its
      ancestors. The file is optional when built-in defaults are enough. Its
      project-shape grammar is closed: <code>nika</code> ·
      <code>ceiling</code> · <code>arm</code> · <code>traces</code> ·
      <code>registry</code>.
    </Info>
    <Warning>
      <strong>Current released reader limit.</strong> Direct workflow operations
      accept the <code>traces</code> and <code>registry</code> project-policy
      rungs. The cadence path behind <code>nika arm</code> and
      <code>nika serve</code> currently accepts only <code>nika</code>, optional
      <code>ceiling</code> and <code>arm</code>. Keep those profiles separate
      until the engine readers converge.
    </Warning>
  </>;

export const RemoteContract = () => <Warning>
    <strong>Preview surface.</strong> The root package types the intended
    workflow HTTP and SSE API. The reference engine does not ship a compatible
    workflow service today. Do not point it at the stable resident firer or
    <code>nika model serve</code>.
  </Warning>;

export const LocalContract = () => <Tip>
    <strong>Live surface.</strong> <code>@supernovae-st/nika-client/local</code>
    drives the released <code>nika</code> binary through its versioned machine
    contracts. It is the production path today.
  </Tip>;

<ProjectContract />

The word “server” hides several boundaries. Start with who initiates work and
what protocol crosses the process edge.

## Decision table

| Need                                      | Use                | Status  | Boundary                                |
| ----------------------------------------- | ------------------ | ------- | --------------------------------------- |
| Product code starts a workflow            | `LocalNika`        | Live    | argv + NDJSON to the local binary       |
| The project clock starts work             | `nika serve`       | Live    | `nika.yaml arm[]` to the resident firer |
| The host scheduler starts work            | `nika arm --emit`  | Live    | launchd or systemd to `nika arm fire`   |
| The engine needs local inference          | `nika model serve` | Live    | Loopback OpenAI-compatible model API    |
| An application needs remote workflow jobs | Root `Nika` client | Preview | Intended HTTP + SSE workflow API        |

## Request-driven application

<LocalContract />

```ts theme={"system"}
const handle = nika.run('workflows/support.nika.yaml', {
  vars: { ticket: request.id },
  signal: request.signal,
})

for await (const event of handle) render(event)
```

The application owns the user experience and cancellation. The engine owns
workflow admission, execution and the receipt.

## Clock-driven project

```text theme={"system"}
container / bare VM ── nika serve ──────┐
                                         ├── one firer ── run + ledger
managed host ───────── launchd / systemd ┘
```

Both lanes consume the same `arm:` registry. Choose based on who should own
process lifetime and wakeups, not because one lane changes workflow semantics.

## Inference provider

```sh theme={"system"}
nika model serve --model Qwen/Qwen3-0.6B-GGUF --port 8712
```

This process serves a model on loopback for the engine to call. It does not
accept Nika workflow jobs.

## Remote workflow horizon

<RemoteContract />

The root SDK already types jobs, workflow listing, SSE, artifacts and webhook
verification. The reference engine does not ship the compatible workflow HTTP
service today. `nika serve` and `nika model serve` are not substitutes.

## Architecture view

<div className="sdk-flight">
  <span>PROCESS TOPOLOGY · NAME THE EDGE</span>

  <pre tabIndex={0}>
    {`application ── LocalNika ── argv/NDJSON ── nika run       [ LIVE ]

        nika.yaml ──── nika serve / OS ─────────── arm fire       [ LIVE ]

        nika engine ── OpenAI-compatible loopback ─ model serve    [ LIVE ]

        application ── Nika client ── HTTP/SSE ─── workflow API   [ PREVIEW ]`}
  </pre>
</div>

## Continue

<CardGroup cols={2}>
  <Card title="Server surfaces" icon="server" href="/sdk/operations/server-surfaces">
    The compact truth table for similarly named commands.
  </Card>

  <Card title="Resident server" icon="clock" href="/sdk/operations/resident-server">
    Run the stable project clock.
  </Card>

  <Card title="Remote client" icon="satellite-dish" href="/sdk/remote/client">
    Explore the preview HTTP contract.
  </Card>

  <Card title="Project setup" icon="folder-tree" href="/sdk/start/project-setup">
    Place control, intent, application code and state.
  </Card>
</CardGroup>
