# Choose a Kernel
URL: /docs/guides/choosing-a-kernel



Choose a Kernel [#choose-a-kernel]

Compare the built-in kernels and select the right one for your CAD workflow. This guide helps you decide based on language, export formats, and use cases.

Prerequisites [#prerequisites]

* [Install @taucad/runtime](../getting-started/installation)
* Completed the [Quick Start](../getting-started/quick-start)

Goal [#goal]

Select the best kernel for your project based on modeling paradigm (BRep, mesh, CSG), language (TypeScript, OpenSCAD, KCL), and export requirements (STEP, STL, glTF).

Steps [#steps]

1. Compare the Kernels [#1-compare-the-kernels]

| Kernel          | Language      | Strengths                                                           | Export Formats                   | Use Cases                                               |
| --------------- | ------------- | ------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------- |
| **Replicad**    | TypeScript/JS | Parametric BRep via OpenCASCADE. STEP export. Strong typing.        | glTF, GLB, STEP, STL, STL-binary | Professional CAD, mechanical parts, STEP interchange    |
| **OpenCASCADE** | TypeScript/JS | Direct OpenCASCADE API. Full BRep control over shapes and topology. | glTF, GLB, STEP, IGES, STL       | Advanced geometry, direct OCCT scripting, BRep kernels  |
| **Manifold**    | TypeScript/JS | Mesh-first modeling with robust booleans and fast WASM execution.   | glTF, GLB                        | Browser-native CAD, procedural booleans, mesh workflows |
| **OpenSCAD**    | OpenSCAD      | CSG modeling. Familiar `.scad` syntax. Mature ecosystem.            | glTF, GLB, STL, STL-binary       | 3D printing, functional parts, CSG workflows            |
| **JSCAD**       | TypeScript/JS | Parametric CSG with `@jscad/modeling`. Browser-native.              | glTF, GLB                        | Web-based CAD, parametric designs, lightweight models   |
| **Zoo (KCL)**   | KCL           | Cloud-native CAD. AI integration via Zoo API.                       | glTF, GLB, STEP, STL, STL-binary | Cloud workflows, AI-assisted modeling, remote execution |
| **Tau**         | Any           | Catch-all file converter. Imports STEP, STL, 3MF, OBJ, etc.         | glTF, GLB                        | File import/preview, format conversion                  |

2. Evaluate Language and Ecosystem [#2-evaluate-language-and-ecosystem]

* **TypeScript/JS**: Choose Replicad, OpenCASCADE, Manifold, or JSCAD for TypeScript-based CAD. Replicad provides a high-level API over OpenCASCADE, while the OpenCASCADE kernel gives direct API access. Manifold is mesh-first and boolean-focused, and JSCAD is CSG-focused.
* **OpenSCAD**: Choose OpenSCAD if you have existing `.scad` files or prefer the OpenSCAD language.
* **KCL**: Choose Zoo if you need cloud execution or AI integration via the Zoo API.

3. Determine Export Requirements [#3-determine-export-requirements]

* **STEP**: Required for professional CAD interchange. Use Replicad, OpenCASCADE, or Zoo.
* **STL for 3D printing**: Replicad, OpenCASCADE, OpenSCAD, and Zoo support STL (ASCII/binary).
* **glTF/GLB for web viewers**: All kernels produce glTF/GLB, including Manifold.

4. Choose by Modeling Paradigm [#4-choose-by-modeling-paradigm]

* **BRep high-level (Replicad)**: Best for precise mechanical parts, fillets, chamfers, and STEP export with a convenient API.
* **BRep low-level (OpenCASCADE)**: Best when you need direct control over OpenCASCADE topology, operations, and data structures.
* **Mesh-first booleans (Manifold)**: Best for robust boolean-heavy modeling and fast browser-native mesh generation.
* **CSG (OpenSCAD, JSCAD)**: Best for boolean operations, 3D printing, and procedural designs.

5. Configure Your Chosen Kernel [#5-configure-your-chosen-kernel]

Replicad [#replicad]

Use Replicad when you need:

* STEP export for CAD interchange
* BRep modeling with fillets and chamfers
* TypeScript/JS with strong typing
* Professional mechanical design

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { replicad } from '@taucad/runtime/kernels';
import { esbuild } from '@taucad/runtime/bundler';

const client = createRuntimeClient({
  kernels: [replicad()],
  bundlers: [esbuild()],
  fileSystem: fromMemoryFS(),
});
```

OpenCASCADE [#opencascade]

Use OpenCASCADE when you need:

* Direct access to the OpenCASCADE Technology (OCCT) API
* Full control over BRep topology and operations
* Advanced geometry construction beyond Replicad's API

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { opencascade } from '@taucad/runtime/kernels';
import { esbuild } from '@taucad/runtime/bundler';

const client = createRuntimeClient({
  kernels: [opencascade()],
  bundlers: [esbuild()],
  fileSystem: fromMemoryFS(),
});
```

OpenSCAD [#openscad]

Use OpenSCAD when you have:

* Existing `.scad` files
* CSG-based designs for 3D printing
* Familiarity with OpenSCAD syntax

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { openscad } from '@taucad/runtime/kernels';

const client = createRuntimeClient({
  kernels: [openscad()],
  fileSystem: fromMemoryFS(),
});
```

Manifold [#manifold]

Use Manifold when you need:

* High-performance boolean operations in TypeScript
* Mesh-first modeling pipelines
* Browser-friendly WASM performance with robust topology

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { manifold } from '@taucad/runtime/kernels';
import { esbuild } from '@taucad/runtime/bundler';

const client = createRuntimeClient({
  kernels: [manifold()],
  bundlers: [esbuild()],
  fileSystem: fromMemoryFS(),
});
```

JSCAD [#jscad]

Use JSCAD when you need:

* Parametric CSG in TypeScript
* Lightweight browser-based CAD
* No STEP or STL export (glTF/GLB only)

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { jscad } from '@taucad/runtime/kernels';
import { esbuild } from '@taucad/runtime/bundler';

const client = createRuntimeClient({
  kernels: [jscad()],
  bundlers: [esbuild()],
  fileSystem: fromMemoryFS(),
});
```

Zoo (KCL) [#zoo-kcl]

Use Zoo when you need:

* Cloud execution via Zoo API
* AI-assisted modeling
* KCL language with remote engine

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { zoo } from '@taucad/runtime/kernels';

const client = createRuntimeClient({
  kernels: [zoo({ baseUrl: 'wss://your-zoo-server/v1/kernels/zoo' })],
  fileSystem: fromMemoryFS(),
});
```

Tau (Converter) [#tau-converter]

Use Tau when you need:

* Import and preview existing CAD files (STEP, STL, 3MF, OBJ, etc.)
* Format conversion to glTF without writing code
* A catch-all fallback for file formats not handled by other kernels

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { tau } from '@taucad/runtime/kernels';

const client = createRuntimeClient({
  kernels: [tau()],
  fileSystem: fromMemoryFS(),
});
```

6. Register Multiple Kernels [#6-register-multiple-kernels]

Register multiple kernels in a single client. The framework selects the kernel automatically based on file extension and import detection:

```typescript
import { createRuntimeClient, presets } from '@taucad/runtime';

const client = createRuntimeClient(presets.all());
```

Or configure kernels individually for tree-shaking:

```typescript
import { createRuntimeClient, fromMemoryFS } from '@taucad/runtime';
import { replicad, opencascade, manifold, openscad, jscad, tau } from '@taucad/runtime/kernels';
import { esbuild } from '@taucad/runtime/bundler';

const client = createRuntimeClient({
  kernels: [replicad(), opencascade(), manifold(), openscad(), jscad(), tau()],
  bundlers: [esbuild()],
  fileSystem: fromMemoryFS(),
});
```

Kernel selection order follows the order in the `kernels` array. The first kernel whose extension or import detection matches is used. See [Kernel Selection](../concepts/kernel-selection) for details.

Variations [#variations]

* **presets.all()**: Returns `{ kernels, middleware, bundlers }` with all built-in plugins. Pass directly to [`createRuntimeClient`](../api/client).
* **Replicad options**: Pass `{ wasm: 'single-exceptions' }` to `replicad()` for detailed OpenCASCADE error messages during development.
* **OpenCASCADE options**: Pass `{ wasm: 'full' }` to `opencascade()` for the full WASM build.
* **Manifold options**: `manifold()` currently has no runtime options; behavior is controlled by your model code.
* **Zoo options**: Zoo requires `baseUrl` for the WebSocket connection to the Zoo engine.

Related [#related]

* [Kernel Selection](../concepts/kernel-selection) -- How the framework chooses a kernel
* [Plugin System](../concepts/plugin-system) -- Extend with custom kernels
* [API Reference: Kernels](../api/kernels) -- Kernel factory functions
* [Create a Custom Kernel](./custom-kernel) -- Build your own kernel plugin
