---
title: "Kapitsa, local inference for Apple silicon"
description: "Kapitsa is an open-source inference engine built for Qwen and Nemotron on Apple silicon. It writes 154 tokens per second on Qwen3.6 35B-A3B on an M4 Pro, ahead of oMLX, Ollama, LM Studio and llama.cpp, and serves OpenAI and Anthropic APIs on your Mac."
canonical: "https://nace.ai/kapitsa"
---

# Kapitsa, local inference for Apple silicon

> Kapitsa is an open-source inference engine built for Qwen and Nemotron on Apple silicon. It writes 154 tokens per second on Qwen3.6 35B-A3B on an M4 Pro, ahead of oMLX, Ollama, LM Studio and llama.cpp, and serves OpenAI and Anthropic APIs on your Mac.

## The fastest way to run Qwen and Nemotron on a Mac.

A local inference engine built for two model families and one chip.

```bash
brew install nace-ai/tap/kapitsa
```

Apple silicon · macOS 15 or later. Apache 2.0. [Source on GitHub](https://github.com/nace-ai/kapitsa).

## Faster on every model it runs.

Tokens per second writing a coding answer. Median of five runs, every engine at its latest release.

### Qwen3.6 35B-A3B · 4-bit · MacBook Pro, M4 Pro, 48 GB

| Engine | Tokens per second |
| --- | ---: |
| Kapitsa | 154 |
| oMLX + DFlash2 | 127 |
| mlx-serve + MTP | 124 |
| mlx-serve + DFlash2 | 104 |
| Ollama | 89 |
| LM Studio | 86 |
| MTPLX | 80 |
| llama.cpp + MTP | 69 |

- Follow-up at 16K: 0.09 s (best other: MTPLX, 0.15 s)
- Peak memory: 21.1 GB (best other: mlx-serve, 22.5 GB)

### Qwen3.8 27B · 4-bit · MacBook Pro, M4 Pro, 48 GB

| Engine | Tokens per second |
| --- | ---: |
| Kapitsa | 63 |
| mlx-serve + DFlash2 | 52 (GPU contention) |
| oMLX + DFlash2 | 45 |
| mlx-serve + MTP | 38 (GPU contention) |
| MTPLX | 36 |
| Ollama | 32 |
| llama.cpp + MTP | 18 |
| LM Studio | 15 |

- Follow-up at 16K: 0.27 s (best other: MTPLX, 0.39 s)
- Peak memory: 19.4 GB (best other: mlx-serve, 20.1 GB)

### Qwen3.5 4B · 4-bit · MacBook Pro, M4 Pro, 48 GB

| Engine | Tokens per second |
| --- | ---: |
| Kapitsa | 122 |
| Ollama | 109 |
| MTPLX | 104 |
| oMLX | 102 |
| LM Studio | 81 |
| llama.cpp + MTP | 70 |

### Nemotron 3.5 Bolt 74B-A9B · NVIDIA 24 GB · MacBook Pro, M4 Pro, 48 GB

| Engine | Tokens per second |
| --- | ---: |
| Kapitsa | 64 |
| oMLX | 34 (GPU contention) |
| mlx-vlm | 32 |
| oMLX + LiLiCorr | fails when sampling |

- Follow-up at 16K: 0.32 s (best other: oMLX, 0.72 s)
- Peak memory: 22.7 GB (best other: oMLX, 30.3 GB)

### Nemotron 3.5 Super-VL 120B-A12B · NVIDIA NVFP4 · MacBook Pro, M5 Max, 128 GB

| Engine | Tokens per second |
| --- | ---: |
| Kapitsa | 85 |
| llama.cpp + MTP | 66 |
| oMLX | 52 |
| mlx-lm | 46 |
| mlx-vlm + MTP | 46 |

- Follow-up at 16K: 0.26 s (best other: llama.cpp, 0.20 s)
- Peak memory: 70.4 GB (best other: oMLX, 74.8 GB)

Measure your Mac with `kapitsa bench`. [How it was measured](https://github.com/nace-ai/kapitsa/blob/main/docs/benchmarks.md).

## Two families. Five models.

| Model | Architecture | Download | Flag |
| --- | --- | --- | --- |
| Qwen3.5 4B (For 16–24 GB Macs) | Dense | 3.3 GB | `--model 4b` |
| Qwen3.6 35B-A3B (Quickest to reply) | MoE, 3B active | 22.1 GB | `--model 35b` |
| Qwen3.8 27B (Strongest coder) | Dense | 20.2 GB | `--model 27b` |
| Nemotron 3.5 Bolt 74B-A9B (Built for agents) | Hybrid Mamba-2 MoE, 9B active | 25.1 GB | `--model bolt` |
| Nemotron 3.5 Super-VL 120B-A12B (For 96 GB+ Macs) | Hybrid Mamba-2 MoE, 12B active | 76.4 GB | `--model super` |

`kapitsa doctor` shows which models fit your Mac.

## Bring your coding agent.

One command downloads the model, starts it and opens your agent on it. Any OpenAI or Anthropic client works too.

- Claude Code: `kapitsa claude`
- Codex: `kapitsa codex`
- opencode: `kapitsa opencode`
- pi: `kapitsa pi`

- OpenAI: `POST http://127.0.0.1:8000/v1/chat/completions`
- OpenAI: `POST http://127.0.0.1:8000/v1/responses`
- Anthropic: `POST http://127.0.0.1:8000/v1/messages`

[Agent setup and options](https://github.com/nace-ai/kapitsa/blob/main/docs/usage.md#coding-agents)

[Server options and API details](https://github.com/nace-ai/kapitsa/blob/main/docs/usage.md#server-options)

## Built around the model.

Hand-written Metal kernels for each weight format. No MLX or llama.cpp underneath.

- **Reads on two chips.** Prompts are read on the GPU, and on dense models and Nemotron the Neural Engine reads part of each layer beside it.
- **Writes several tokens at once.** A draft proposes a block of tokens. The model checks them all in one pass.
- **Follow-ups read only what’s new.** Each conversation keeps its cache, so a follow-up at 16K tokens starts in 0.09 s on the 35B.

[Architecture walkthrough](https://github.com/nace-ai/kapitsa/blob/main/docs/architecture.md)

## For agents

- [Drex API guide](https://nace.ai/drex.md): the decision model: request shape, question types, benchmarks and deployment, as markdown
- [Decision endpoint](https://console.nace.ai/v1/systemone): POST with model "drex-latest", a state string and typed questions (choice, noul, score); https://console.nace.ai/v1/models lists checkpoints
- [Document endpoints](https://console.nace.ai/v1/documents/{parse|split|classify|extract|ground}): POST a source (a public URL, an uploaded workspace file or a finished parse job) and poll GET https://console.nace.ai/v1/documents/jobs/{id}; the same key and credit as decisions
- [Console](https://console.nace.ai): API keys, the playground, usage and billing; send `Authorization: Bearer $NACE_API_KEY` on every request
- [Console docs](https://console.nace.ai/docs): quickstart, question types, the document routes, errors, limits and pricing
- [Nace Document Intelligence](https://nace.ai/ndi.md): the Perception series: parse, split, classify, extract and ground any file type with a location on every value
- [Developers](https://nace.ai/developers.md): The execution layer for agents: Perception, Decision and Context behind one key, the Drex Max frontier, install steps, a scripted agent session and the four deployment boundaries
- [Site index](https://nace.ai/llms.txt): every page on nace.ai; append `.md` to any page URL or send `Accept: text/markdown` for the markdown version
