| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
cq-cli is a Command Line Interface for executing CadQuery scripts and converting their output to another format. It uses a plugin system where "codecs" can be placed in the cqcodecs directory and will be automatically loaded and used if a user selects that codec from the command line.
Input and output files can be specified via arguments, but cq-cli also supports stdin, stdout, and stderr streams so that it can be used in a pipeline.
Requires Python 3.11 or later. Linux, macOS, and Windows are supported, though some features may behave differently on Windows.
uv is the recommended way to install and run cq-cli. It handles Python version management and virtual environments automatically.
uv venv --python 3.11 source .venv/bin/activate # Windows: .venv\Scripts\activate uv sync
Once complete, run cq-cli with:
cq-cli --help
It is strongly recommended to use a Python virtual environment when installing via pip.
To install the latest release from PyPI, use the following command:
pip install cadquery-cli
Note: There was a naming collision on PyPI which required the package name to be cadquery-cli rather than cq-cli. The command name stays the same after installation though.
To install the latest development version instead of the stable release, use the following command:
pip install git+https://github.com/CadQuery/cq-cli.git
Once the installation is complete, the CLI can be invoked as:
cq-cli --help
or:
python -m cq_cli.main --help
cq-cli [-h] [--codec CODEC] [--infile INFILE] [--outfile OUTFILE]
[--errfile ERRFILE] [--params PARAMS] [--outputopts OPTS]
[--getparams GETPARAMS] [--validate VALIDATE] [--expression EXPRESSION]
Command line utility for converting CadQuery script output to various output formats.
| Argument | Description |
|---|---|
| -h, --help | Show help message and exit |
| --codec CODEC | The codec to use for conversion (e.g. step, stl, svg, dxf, glb, gltf, threejs). Can be omitted if --outfile has a recognised extension. Multiple codecs can be specified separated by ; — must match the number of --outfile entries. |
| --infile INFILE | The input CadQuery script (.py) or FreeCAD file (.fcstd). Reads from stdin if omitted. |
| --outfile OUTFILE | File to write the converted output to. Prints to stdout if omitted. Multiple output files can be specified separated by ;. |
| --errfile ERRFILE | File to write errors to. Prints to stderr if omitted. |
| --params PARAMS | Parameters to pass to the script. Accepts: a JSON file path, a JSON string ({"width":10}), or a colon/semicolon delimited string (width:10;height:5;). |
| --outputopts OPTS | Codec-specific options as a colon/semicolon delimited string. e.g. width:100;height:200; |
| --getparams GETPARAMS | Analyse the script and write parameter metadata as JSON. Pass a file path to write to a file, or true to print to stdout. |
| --validate VALIDATE | Set to true to validate the script without producing output. |
| --expression EXPRESSION | A Python expression to evaluate and render (e.g. my_shape(x=5)). Useful for rendering a specific part from a file that contains multiple functions. |
cq-cli --codec help
cq-cli --validate true --infile /input/path/script.py
cq-cli --codec step --infile /input/path/script.py
cq-cli --codec step --infile /input/path/script.py --outfile /output/path/newfile.step
cq-cli --codec step --infile /input/path/script.py --errfile /error/path/error.txt
cat /input/path/script.py | cq-cli --codec step | wc -l
cq-cli --infile /input/path/script.py --outfile /output/path/newfile.stl
cq-cli --infile /input/path/script.py --outfile /output/path/model.step;/output/path/model.stl
cq-cli --codec svg --infile /input/path/script.py --outfile /output/path/newfile.svg --outputopts "width:100;height:100;marginLeft:12;marginTop:12;showAxes:False;projectionDir:(0.5,0.5,0.5);strokeWidth:0.25;strokeColor:(255,0,0);hiddenColor:(0,0,255);showHidden:True;"
cq-cli --codec stl --infile /input/path/script.py --outfile /output/path/script.stl --outputopts "linearDeflection:0.3;angularDeflection:0.3"
cq-cli --getparams /output/path/params.json --infile /input/path/script.py
cq-cli --codec stl --infile /input/path/script.py --outfile /output/path/output.stl --params /parameter/path/parameters.json
cq-cli --codec stl --infile /input/path/script.py --params "{\"width\":10}"
cq-cli --codec stl --infile /input/path/script.py --outfile test.stl --params "width:2;centered:True"
cq-cli --codec step --infile /input/path/script.py --outfile /output/path/part.step --expression "my_part(x=5)"
The recommended way to set up a development environment is with uv.
git clone https://github.com/CadQuery/cq-cli.git cd cq-cli uv venv --python 3.11 source .venv/bin/activate # Windows: .venv\Scripts\activate uv sync --extra dev
Alternatively, using pip:
git clone https://github.com/CadQuery/cq-cli.git cd cq-cli python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -e .[dev]
Run the test suite:
pytest -v --ignore=tests/test_freecad.py
The codec plugin system is based on naming conventions so that cq-cli knows what codec options to accept from the user. When adding a codec, place it in the cqcodecs directory and follow the naming convention cq_codec_[your codec name].py. The your codec name part of the filename will automatically be used as the codec name specified by the user.
A good starting point is cqcodecs/cq_codec_step.py, which shows a simple codec implementation that relies on CadQuery to do the heavy lifting. At minimum, your codec needs a convert function that accepts a CQGI BuildResult object and returns a string or bytes representing the converted model. If the codec writes the output file directly, return None and cq-cli will assume the output was written to disk.
A test is required when adding a codec to cq-cli. Add a file named test_[your codec name]_codec.py in the tests directory. tests/test_step_codec.py is a good template.
| Code | Meaning |
|---|---|
| 0 | Operation completed successfully. |
| 1 | The CadQuery script could not be read from --infile. |
| 2 | Usage error — incorrect or insufficient arguments. |
| 3 | No valid codec was provided or could be inferred. |
| 100 | Error while running the CadQuery script (build error, possibly from OCCT). |
| 200 | Error while running the conversion codec. |
This repository has five GitHub Actions workflows in `.github/workflows`:
CI/CD
Builds per OS - WIP
| Back | FazBrowse Home | New Git URL |