# Text-to-CAD Output Capabilities: STEP, STL, 3MF, and GLB Export Guide

> Explore Text-to-CAD export capabilities for STEP, STL, 3MF, and GLB. Learn how parametric geometry is converted using Python build123d or JavaScript.

- Repository: [earthtojake/text-to-cad](https://github.com/earthtojake/text-to-cad)
- Tags: how-to-guide
- Published: 2026-08-04

---

**Text-to-CAD exports parametric geometry as STEP files first, then derives STL, 3MF, and GLB formats through a unified Python build123d workflow or a JavaScript implicit CAD runtime.**

The `earthtojake/text-to-cad` repository organizes natural-language CAD generation as a skill library with robust output capabilities. According to the canonical skill definition in [`skills/cad/SKILL.md`](https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md), the system treats **STEP** as the primary source of truth, with all other formats generated through explicit export pipelines to ensure geometric fidelity.

## Primary Output Formats and Architecture

The repository implements a hierarchical output strategy where secondary formats are always derived from a single authoritative source.

### STEP as the Source of Truth

The CAD skill declares **STEP** (`.step` or `.stp`) as the mandatory primary artifact. This format preserves parametric boundary representation (B-rep) data, enabling precise measurements and edits in professional CAD tools. The generation path relies on `build123d` Python scripts invoked via the CLI.

To generate a STEP file from a build123d source file:

```bash
python scripts/step my_part.py --kind part --output my_part.step

```

This command processes the Python generator and emits a standards-compliant STEP file that serves as the foundation for all downstream exports.

### Derived Secondary Formats

The `scripts/step` utility supports on-the-fly conversion to mesh formats using the `--format` flag. Secondary outputs include **STL** (tessellated geometry), **3MF** (modern manufacturing format), and **GLB** (compressed glTF for web viewing).

Export to alternative formats from the primary STEP:

```bash

# Export to STL

python scripts/step my_part.py --kind part --format stl --output my_part.stl

# Export to 3MF

python scripts/step my_part.py --kind part --format 3mf --output my_part.3mf

# Export to GLB

python scripts/step my_part.py --kind part --format glb --output my_part.glb

```

All conversions maintain the coordinate system and units defined in the source build123d script.

## Python Workflow with build123d

The core Python workflow follows a three-stage pipeline: generation, validation, and snapshot. These stages are enforced by the skill definition to ensure output quality before hand-off to viewers.

### Generating STEP Files

The entry point `scripts/step` accepts either a Python file containing build123d code or an existing STEP file for re-export. When provided with Python source, it executes the script within a controlled environment that exposes the `build123d` API.

The CLI signature follows this pattern:

```bash
python scripts/step <source> --kind <part|assembly> --output <path> [--format <step|stl|3mf|glb>]

```

If the source is an existing `.step` or `.stp` file, the script imports the geometry and applies the requested format conversion without re-executing parametric code. For a complete end-to-end example, see [`benchmarks/01-rectangular-calibration-block.md`](https://github.com/earthtojake/text-to-cad/blob/main/benchmarks/01-rectangular-calibration-block.md), which demonstrates a natural language prompt resulting in a validated STEP output.

### Validating Geometry with Inspection Scripts

Before final export, the `scripts/inspect` tool validates geometry, selectors, and measurements against design specifications. This script is invoked automatically during the skill workflow to catch topological errors.

Run an inspection with full fact reporting:

```bash
python scripts/inspect refs my_part.step --facts --planes --positioning

```

The inspection generates a validation report that includes face references, plane alignments, and dimensional positioning, ensuring the exported artifact matches the design intent defined in [`skills/cad/SKILL.md`](https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md).

### Creating Visual Snapshots

The `scripts/snapshot` utility produces PNG renderings of the STEP geometry for documentation and verification. This step is mandatory before handing off to the CAD viewer.

Generate a snapshot:

```bash
python scripts/snapshot my_part.step --output /tmp/my_part_snapshot.png

```

The snapshot captures the current view state and saves a high-resolution image suitable for pull request previews or automated reporting pipelines.

## JavaScript Implicit CAD Workflow

For browser-native implicit modeling, the repository provides `packages/implicitjs`, a standalone JavaScript runtime documented in [`packages/implicitjs/README.md`](https://github.com/earthtojake/text-to-cad/blob/main/packages/implicitjs/README.md) that renders signed distance functions (SDFs) using Three.js.

### Exporting Meshes from Implicit Models

The implicit workflow uses [`.implicit.js`](https://github.com/earthtojake/text-to-cad/blob/main/.implicit.js) modules that define mathematical geometry rather than parametric features. The runtime tessellates these implicit surfaces into standard meshes.

Export an implicit model to GLB using npm:

```bash
npm run export -- --input examples/model.implicit.js --format glb --output /tmp/model.glb

```

Supported export formats include **STL**, **3MF**, and **GLB**, specified via the `--format` parameter. The runtime handles adaptive meshing to balance file size and surface accuracy.

### Rendering Preview Images and GIFs

The implicitjs package supports orbital GIF generation and static PNG snapshots for documentation.

Generate an orbital preview GIF:

```bash
npm run snapshot -- --input examples/model.implicit.js --output /tmp/model.gif --mode orbit

```

This creates a rotating animation suitable for README files and design reviews, distinct from the static snapshots produced by the Python workflow.

## CAD Viewer Integration and Hand-off

Every CAD workflow concludes with a mandatory hand-off to the `$cad-viewer` skill. As defined in [`skills/cad/SKILL.md`](https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md) (lines 76-78), this step launches a local web UI that loads the generated STEP file and returns a shareable URL.

Invoke the viewer from the CLI:

```bash
$cad-viewer /path/to/my_part.step

```

Example response:

```

Viewer URL: https://viewer.cadskills.xyz/?dir=/absolute/path/to/models&file=my_part.step

```

The viewer supports real-time sectioning, measurement tools, and format conversion verification. The integration script at [`scripts/viewer/sync-cad-viewer-repo.sh`](https://github.com/earthtojake/text-to-cad/blob/main/scripts/viewer/sync-cad-viewer-repo.sh) ensures the local viewer client remains synchronized with the latest rendering engine.

## Summary

- **STEP is the primary format**: All workflows in [`skills/cad/SKILL.md`](https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md) treat STEP as the source of truth, with STL, 3MF, and GLB derived through explicit conversion flags.
- **Two distinct pipelines**: Python build123d workflows use `scripts/step`, `scripts/inspect`, and `scripts/snapshot`, while implicit CAD uses `packages/implicitjs` with `npm run export`.
- **Validation is mandatory**: The `scripts/inspect` tool validates geometry before export, and `scripts/snapshot` creates visual verification artifacts.
- **Viewer hand-off required**: Every workflow must conclude with `$cad-viewer` to generate a shareable web link for the output file.

## Frequently Asked Questions

### What is the primary output format in Text-to-CAD?

**STEP (.step or .stp)** is the canonical output format according to [`skills/cad/SKILL.md`](https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md). The architecture treats STEP as the single source of truth because it preserves parametric boundary representation (B-rep) data required for precise manufacturing. All mesh formats (STL, 3MF, GLB) are derived from this primary file to prevent geometric divergence.

### How do I convert a STEP file to STL or GLB?

Use the `scripts/step` CLI with the `--format` flag. For STL conversion, run `python scripts/step input.step --format stl --output model.stl`. For GLB, use `--format glb`. Alternatively, if working from Python source, pass the format directly during initial generation: `python scripts/step model.py --format glb --output model.glb`.

### What is the difference between the Python and JavaScript workflows?

The **Python workflow** (`scripts/step`) uses `build123d` for parametric feature-based modeling and exports STEP files as the primary artifact. The **JavaScript workflow** (`packages/implicitjs`) uses implicit functions (SDFs) defined in [`.implicit.js`](https://github.com/earthtojake/text-to-cad/blob/main/.implicit.js) modules for browser-native rendering, exporting meshes directly without an intermediate STEP file. Python is suited for mechanical CAD with precise dimensions, while JavaScript handles organic shapes and web-native visualization.

### How does the CAD Viewer integration work?

The `$cad-viewer` skill automatically launches a local web server that loads the generated STEP file into a Three.js-based viewer. As documented in [`skills/cad/SKILL.md`](https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md), this hand-off is mandatory for every CAD workflow. The viewer returns a URL like `https://viewer.cadskills.xyz/?dir=/path&file=model.step` that can be shared for collaborative review, and it supports real-time measurements and section analysis.