A plugin-native FDM slicer that runs everywhere
One slicer that runs everywhere.
NozzleLab is a plugin-native FDM 3D slicer written in TypeScript and running on Bun. One kernel, one plugin system and five ways to drive it — CLI, terminal, browser, HTTP API and MCP — all slicing through the same engine.
- Plugin-native
- Bun
- TypeScript
- Three.js
- MCP
- Cross-platform
01 · surfaces
Five ways to drive one kernel.
Name the command — there is no implicit default. Every surface renders from the same plugin registry and slices through the same pipeline, so a capability on one is a capability on all of them.
Command surfaces
- CLI01
Scriptable subcommands for automation and pipelines, compiled to a single cross-platform binary.
nozzlelab cli
- TUI02
A keyboard-first terminal UI built on Ink — the slicer without ever leaving the shell.
nozzlelab tui
- Web03
A browser slicer with a three.js viewport, running the engine in a Web Worker so the UI never blocks.
nozzlelab web
- API04
Plain Bun.serve HTTP endpoints over the same settings catalog, catalogs and slice pipeline.
nozzlelab api
- MCP05
A Model Context Protocol server over stdio, with stateless and stateful tool sets.
nozzlelab mcp
02 · principles
The rules the codebase lives by.
01
Everything is a plugin
The kernel holds contracts and typed registries — zero implementations. File formats, printer transports, infill patterns and languages are all plugins.
02
One source, every surface
Data and config are defined once and consumed everywhere. Feature parity is mandatory: a capability on one surface is a bug on the others.
03
Isomorphic core
The kernel never touches window, fs or process. Platform capabilities are injected as ports, so the same runtime works in a browser worker, a Bun worker or an API job.
04
TypeScript first
All geometry ships as pure TypeScript behind a backend port. A WASM backend is adopted only when golden-file output matches exactly and benchmarks prove a real speedup.
03 · try it
Slice something right now.
The browser build runs the real engine in a Web Worker — drop in an STL, pick a machine and slice, with nothing to install and nothing sent to a server.
Source-available under BUSL-1.1; personal and internal use is permitted.