Additional Features
Procurement and Manufacturing
PartCAD currently supports two types of providers (entities that can provide
parts and assemblies): store and manufacturer.
store can be used to quote and order parts from existing lists:
by vendor and SKU.
manufacturer can be used to quote and order parts by using their 3D model
(for example, by 3D printing them).
# partcad.yaml
parts:
existing_part:
vendor: homedepot # for example
sku: ...
...
new_part:
manufacturing:
method: additive
parameters:
color: black
material: //pub/std/manufacturing/material/plastic:pla
...
See Providers for more information about the providers and how PartCAD selects them.
In the future, PartCAD will support assembler, which is supposed to produce
an assembly given assembly instructions and using parts ordered from
store-s and manufacturer-s.
Currently, the provider has to be explicitly specified in the quote or order request, or explicitly specified as one of the suppliers in the package where the parts are declared. In the future PartCAD will be able to select providers based on the location and preferences of the requestor, while leaving the possibility to enforce the use of a specific provider for corresponding parts (for example, for parts that are using a patented design).
Generative AI
PartCAD aims to provide powerful generative AI capabilities to the CAD community. Such capabilities serve two purposes.
First of all, they can be used to script more features using LLMs. Write your own AI agents that iterate through existing packages to find the part you are looking for, or automatically generate part designs. Or anything else you can think of.
Last but not least, they are powering accessibility features, allowing blind users to navigate the catalog of parts or to interactively create their own designs.
Google Gemini, OpenAI and Ollama APIs are supported. The following configuration is required:
# ~/.partcad/config.yaml googleApiKey: <...> openaiApiKey: <...>
The following configuration is optional:
# ~/.partcad/config.yaml # ollamaNumThread is the number of CPU threads Ollama should utilize ollamaNumThread: <integer>
PartCAD AI agents are designed to query AI multiple times, so that a range of options is considered and the best result is found. The following configuration options can be used to influence that behavior:
# ~/.partcad/config.yaml # maxGeometricModeling is the number of attempts for geometric modelling maxGeometricModeling: 4 # maxModelGeneration is the number of attempts for CAD script generation maxModelGeneration: 3 # maxScriptCorrection is the number of attempts to incrementally fix the script if it's not working maxScriptCorrection: 2
Design
PartCAD is capable of using generative AI to create parts. The generated part definitions are persisted as Python or CAD scripts.
# Initialize the package pc init # Define the part but do not generate it yet pc add part ai-openscad --ai google --desc "Pixel phone case of a surprising shape" "generated-case.scad" # Inspect the part. It triggers part generating on demand. pc inspect "generated-case"
To use ChatGPT instead of Gemini, pass “openai” instead of “google” as the “–ai” parameter. To use Ollama, pass “ollama”.
If needed, the part can be regenerated by truncating the generated files.
true > "generated-case.scad" pc inspect "generated-case"
Please, be ready to retry a few times to get an acceptable outcome.
Summarization
Summarize the part or assembly using following commands:
pc init pc inspect -V //pub/robotics/parts/gobilda:structure/u_channel_2 pc inspect -V -a //pub/robotics/parts/gobilda:examples/wormgear
Or their more script-friendly variants:
pc init pc -q --no-ansi inspect -V //pub/robotics/parts/gobilda:structure/u_channel_2 pc -q --no-ansi inspect -V -a //pub/robotics/parts/gobilda:examples/wormgear
Caching
PartCAD is capable of caching intermediate and final results of all model compilations. This can be particularly useful when working with large models or when scripting languages (like OpenSCAD, CadQuery or build123d) are used.
At the moment code-CAD caching is experimental and can be enabled by using the following configuration:
# ~/.partcad/config.yaml cacheDependenciesIgnore: True
Security
As code-CAD is gaining popularity in the community, the topic of supply chain security and the risk of running arbitrary third-party code is not sufficiently addressed. PartCAD aims to close that gap for open-source software in a way that exceeds anything commercial software has to offer at the moment.
PartCAD is capable of rendering scripted parts
(CadQuery and build123d use Python) in sandboxed environments.
At the moment it is only useful from a dependency management perspective (it allows third-party packages to bring their Python dependencies without polluting your own Python environment), in the future, PartCAD aims to achieve security isolation of the sandboxed environments. That will fundamentally change the security implications of using scripted models shared online.
Telemetry
Public Repositories
By default PartCAD collects telemetry data to improve the user experience and to help understand how the tool is being used. The data collected includes the following:
What commands are being run?
How much time is consumed by each step?
What errors and exceptions are being raised?
PartCAD uses OpenTelemetry to collect telemetry data. You can disable telemetry by setting the following configuration:
# ~/.partcad/config.yaml telemetry: type: none
Alternatively, you can disable telemetry by setting the following environment variable:
PC_TELEMETRY_TYPE="none"
You can also change telemetry settings using CLI:
pc system set telemetry type none # or, if you want to collect data about PartCAD performance in your organization: pc system set telemetry type sentry pc system set telemetry env <you-org-name> pc system set telemetry sentryDsn <your-sentry-dsn>
Private Repositories
If you are systemically using PartCAD in your organization then it makes sense to collect your own telemetry data to understand how the tool is being used in your organization, and to learn how to improve your organization performance.
The only OpenTelemetry backend provider currently supported is Sentry. Create an organization account on Sentry and obtain a DSN key.
# ~/.partcad/config.yaml telemetry: type: sentry sentryDsn: "<your-sentry-dsn>"
Other OpenTelemetry backend providers can be supported on request.
Automation Support
PartCAD allows you to set CLI options and override user configurations specified in
~/.partcad/config.yaml using environment variables. This can be particularly
useful for setting configurations dynamically or in environments where modifying
configuration files is not feasible.
Generally, all of PartCAD’s environment variables are prefixed with PC.
For CLI options, the environment variable prefix depends on the command being used. You can use the –help option to determine the corresponding environment variable for each CLI option.
Here are some examples:
# Equivalent to: pc add part --desc "testing" scad test.scad PC_ADD_PART_DESC="testing" pc add part scad test.scad
Note that, these environment variables will be overridden if the CLI option is specified.
For user configurations, the environment variables are of the format PC followed by the
configuration option name(in uppercase). For example, to override the googleApiKey configuration,
you would set the environment variable PC_GOOGLEAPIKEY.
Note that environment variable names are case-sensitive. Always use uppercase letters
for the PC prefix and the rest of the variable name, as shown in the examples above.
In this case, these environment variables will take precedence over the values specified in
~/.partcad/config.yaml.
Flexible Git Configuration
By default, PartCAD uses the system’s Git configuration when importing packages
using git. If you want to override these configurations, you can add your
overrides in ~/.partcad/config.yaml as shown below:
# ~/.partcad/config.yaml git: config: "user.name": "John Doe" "user.email": "johndoe@example.com" ...
Cloning over SSH is faster and more reliable because it uses an efficient protocol with lower overhead, supports compression, and maintains stable connections via key-based authentication. SSH avoids HTTPS rate limits, handles firewalls better, and eliminates credential prompts, making it ideal for large repositories or frequent interactions.
If you have SSH keys configured then you can add the following to the ~/.partcad/config.yaml:
# ~/.partcad/config.yaml dependencies: overrides: url: "git@github.com:": "https://github.com/"
Personally Identifiable Information
The user section in ~/.partcad/config.yaml defines the default personal
and contact details used throughout the system. These details include
the user’s name, email, phone number, company, and address information.
# ~/.partcad/config.yaml user: firstName: <...> lastName: <...> email: <...> phone: <...> company: <...> line1: <...> line2: <(optional)> countryCode: US stateCode: <...> zipCode: <...> city: <...>
Address Configuration
Users can override any details from the user section by specifying shippingAddress and billingAddress separately.
# ~/.partcad/config.yaml user: # Default user details (includes firstName, lastName, email, phone, company, address, etc.) shippingAddress: # Optional, overrides user details for shipping firstName: <(optional)> lastName: <(optional)> phone: <(optional)> company: <(optional)> line1: <(optional)> line2: <(optional)> countryCode: <(optional)> stateCode: <(optional)> zipCode: <(optional)> city: <(optional)> billingAddress: # Optional, overrides user details for billing firstName: <(optional)> lastName: <(optional)> phone: <(optional)> company: <(optional)> line1: <(optional)> line2: <(optional)> countryCode: <(optional)> stateCode: <(optional)> zipCode: <(optional)> city: <(optional)>
Override Behavior
If shippingAddress is not specified, the system will use the user details for shipping.
If billingAddress is not specified, the system will use the user details for billing.
If shippingAddress or billingAddress is provided, it completely replaces the corresponding fields from user.
This setup allows full customization of shipping and billing details, supporting scenarios where items need to be sent to different recipients or addresses.
Parameter Configuration
The configuration file (~/.partcad/config.yaml) allows users to define
reusable parameters, which can be accessed dynamically within the provider configurations.
In ~/.partcad/config.yaml, parameters are stored under a parameters section.
Example:
# ~/.partcad/config.yaml parameters: object_id: <parameter name>: <parameter value>
Object IDs are used to reference different types of objects within a package, such as sketches, parts, assemblies, scenes, interfaces, and providers.
Accessing Parameters in Providers
In the providers section, parameters can be referenced dynamically
using a function get_from_config(), ensuring that sensitive
or reusable values (e.g., API keys, URLs) do not need to be
hardcoded multiple times.
Example:
# ~/.partcad/config.yaml providers: <provider name>: type: <store|manufacturer|enrich> url: <...> parameters: url: type: string default: {{ get_from_config() }}