# Choose a Kernel URL: /runtime/guides/choosing-a-kernel Pick kernels by source language or import format, and install only the packages your host needs. | Kernel package | Input | Best fit | | --------------------- | ----------------------------------------- | -------------------------------------------- | | `@taucad/replicad` | TypeScript/JavaScript using Replicad | High-level parametric BRep | | `@taucad/opencascade` | TypeScript/JavaScript using OCCT bindings | Direct BRep and topology control | | `@taucad/manifold` | TypeScript/JavaScript using Manifold | Mesh-first robust booleans | | `@taucad/jscad` | TypeScript/JavaScript using JSCAD | CSG modeling | | `@taucad/openrscad` | OpenSCAD | `.scad` models in browser or Node | | `@taucad/zoo` | KCL | Configured remote Zoo execution | | `@taucad/gltf` | glTF/GLB | glTF interchange with optional Draco | | `@taucad/brep` | STEP/STP/IGES/IGS/BREP | BRep-family file import | | `@taucad/rhino` | 3DM | Rhino file import | | `@taucad/assimp` | Mesh and scene formats | OBJ, FBX, STL, PLY, DAE, and related imports | | `@taucad/build123d` | Python using Build123d | Native desktop BRep, topology, and STEP | | `@taucad/tscircuit` | TSX using tscircuit | Electronics: 3D board, schematic, PCB, BOM | There is no catch-all Tau kernel. Every first-party import extension has one explicit owner. ## Compose toolkits [#compose-toolkits] Pass one factory per package to `defineRuntime`. Source-code kernels need a bundler beside them; file-import kernels such as `gltf()`, `brep()`, `rhino()`, and `assimp()` do not: ```typescript import { defineRuntime } from '@taucad/runtime/worker'; import { esbuild } from '@taucad/esbuild'; import { manifold } from '@taucad/manifold'; import { replicad } from '@taucad/replicad'; export const modelingRuntime = defineRuntime({ plugins: [esbuild(), replicad(), manifold()] }); ``` ## Configure a packaged capability [#configure-a-packaged-capability] Presets select capability sets — `assimp({ preset: 'import' })` installs only the import kernel, leaving the export transcoder out. Role-nested options configure the factories the preset selects: ```typescript import { defineRuntime } from '@taucad/runtime/worker'; import { zoo } from '@taucad/zoo'; export const runtime = defineRuntime({ plugins: [zoo({ kernels: { default: { baseUrl: 'wss://example.com/v1/kernels/zoo' } } })], }); ``` Use a direct role factory instead for app-local capabilities, isolated tests, or when a whole role must interleave outside plugin expansion. ## Choose Build123d only in a native host [#choose-build123d-only-in-a-native-host] Build123d needs a packaged CPython payload and a project trust grant, so only a native host such as Tau Desktop can advertise it. Its `.py` files skip the JavaScript bundler entirely -- see [Build123d](/runtime/reference/build123d) for the authoring contract. ## Choose tscircuit for electronics [#choose-tscircuit-for-electronics] A `.tsx` or `.jsx` file exports a board component. Rendering is offline: local autorouter, no parts engine; URL footprints and models are never fetched; each attempt or `kicad:`/`jlcpcb:` reference becomes a warning. See [tscircuit](/runtime/reference/tscircuit) for the authoring contract and install steps. ## Related [#related] * [Kernel Selection](/runtime/concepts/kernel-selection) * [Kernel Plugins](/runtime/api/kernels) * [Plugin System](/runtime/concepts/plugin-system)