Open-source project
BOMWiki/partmode avatar
BOMWiki/partmode

PartMode: browser parametric CAD with an exact kernel and typed agent access

Open-source, local-first 3D parametric CAD that runs in the browser for people and permissioned typed agents, powered by OpenCascade WASM.

511 stars24 forksJavaScriptAGPL-3.0

At a glance

What is it?
PartMode is an AGPL-3.0 browser CAD application built on OpenCascade WebAssembly, where people and permissioned typed agents edit the same schema-5 document. Here is how it installs, how the two authority paths differ, and where it stops being the right tool.
Who is it for?
Adopt PartMode if you want parametric mechanical CAD that runs from a browser tab, keeps anonymous projects in browser storage, and lets a typed agent propose changes that a person approves against a matching document revision.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 45 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem PartMode targets: one model, not two

Most automation around CAD lives beside the CAD document. A script writes a file, a service holds its own state, and the person opening the model has to reconcile two versions of the truth. PartMode takes the opposite position. The README states that human and agent changes should use the same canonical document model and exact kernel instead of parallel, opaque automation state. The document is a schema-5 project, and OpenCascade WebAssembly evaluates the solid B-rep geometry. The three.js scene is described as a view of the result, not the source of truth, which is the sentence that tells you what kind of tool this is: the shaded viewport can be wrong or stale, and the kernel result is what counts.

The intended audience is narrower than "anyone who wants 3D in a browser". It is people doing mechanical work with constrained sketches, dimensions and expressions, editable feature history, multiple solid bodies, configurations, patterns, holes, threads, sheet-metal and structural tools, plus assemblies with mates and drawings with hidden-line views. The second audience is typed agents: MCP clients that inspect state, create a detached preview, and commit against a matching document revision. If you only need to look at a mesh, this is more machinery than the job requires.

Two authority paths over one kernel

The architecture diagram in the README splits at one decision point: authority chosen by the account owner. On the browser-approved path, a human UI writes to a browser-local schema-5 document, and a typed agent client reaches that same document only through a browser-approved local session. Anonymous browser CAD needs no account, and projects, geometry and recovery history stay in browser storage. Hosted browser-agent access is a separate, explicit choice that requires an account, a revocable agent key, a signed-in PartMode tab, and visible approval for the project-scoped session. The README is direct that a key authenticates the agent but does not grant CAD authority by itself.

On the headless path, an edit key can carry an explicit, immutable headless grant for unattended CAD, and that session writes to an account-owned schema-5 document. Both paths converge on the shared OpenCascade WASM exact kernel, and both produce exact B-rep evidence. That convergence is the design claim: the same kernel evaluates geometry whether a person or an agent asked for the change.

The relay details matter more than the diagram. Approved commands and results cross the hosted relay over HTTPS and remain only in bounded process memory. There is no offline queue, the relay is not end-to-end encrypted, and the browser project itself is not stored there. The agent commits only against the matching document revision, and the person can reject, pause, disconnect, or revoke access. Read that list as the actual security posture rather than as a feature list.

Installing PartMode from source and opening a first project

PartMode requires Node.js 22.13 or newer, which matches the engines field in package.json. The README gives the local run sequence directly:

bash
git clone https://github.com/BOMWiki/partmode.git
cd partmode
npm ci
npm run build
npm start

npm ci installs from the committed lockfile, npm run build cleans .build and dist, type-checks with tsc and runs the build script, and npm start runs node dist/server.js. When the server is up, open http://127.0.0.1:4401. The README states that browser-local CAD at that address does not require an account or an external service, so you should land in the application with no sign-in step.

The contributor gate is a separate command and it is worth knowing what it covers before you change anything:

bash
npm run ci:gate

According to the README, the gate type-checks and builds the release, verifies static and runtime manifests, and exercises the local HTTP, account, identity, MCP, cloud, and entrypoint contracts. CAD, kernel, assembly, export and visible UI changes also require the affected smoke:* checks, and the broader blocking release gate is npm run release:gate. The professional and nightly matrices are described as separate, which is a useful signal about how much of the testing surface is not in the default gate.

Connecting an MCP agent is the third step, and it starts outside the repository. Create a revocable key from Agent access at https://partmode.com/account, then store it in the secret environment used to launch your MCP client. The README is explicit: do not paste the key into a prompt, URL, command argument, or repository file. For Codex, the documented form is:

bash
codex mcp add partmode \
  --url https://partmode.com/mcp \
  --bearer-token-env-var PARTMODE_AGENT_KEY

Start a new session, read the PartMode Help resources, and call cad_capabilities before constructing anything. The README treats that call as the authority for what the running release supports.

Where PartMode is the wrong tool

The headless path is the sharpest limitation. Live headless sessions are key-bound, expire within one hour, and do not survive a service restart. Only committed headless documents are durable. If your workflow assumes a long-running unattended CAD service that keeps session state across a deploy, this design does not offer it.

Committed records survive session expiry, key revocation, restarts and deployments, and remain until account deletion. The README states there is no individual project-delete control yet. That is a real constraint for anyone who needs to remove a single project without removing the account, and it is the kind of thing to confirm against the running release rather than assume.

The headless surface is also narrower. There is no visible Studio, the artifact surface is smaller, and STEP is the current dedicated export path. If your pipeline needs drawings or the broader interchange set from an unattended job, the browser path is where those live.

Interchange has its own ceiling. Drawings export exact OpenCascade hidden-line views to SVG and PDF sheets that can carry document-owned dimensions, tolerances, notes, symbols and tables, but DXF exports a restricted R12 orthographic or sketch geometry subset. If a downstream consumer needs full DXF entity coverage, that subset will bite.

Finally, exact capability coverage varies by template, and the README says a failed rebuild is reported instead of being treated as valid geometry. That is the right behaviour, but it means a template is a starting point you may have to repair, not a finished model.

PartMode compared with desktop parametric CAD

The obvious comparison is a desktop parametric CAD package such as FreeCAD. The difference is not the feature checklist; it is where the kernel runs and what that implies. FreeCAD runs its geometry kernel as a local desktop process with a local file on disk. PartMode compiles OpenCascade to WebAssembly and runs it in the browser, with the document in browser storage for the anonymous case. That removes the install step for the person modelling and makes the project reachable from a tab, and it also means the kernel is bounded by what the browser will give a WebAssembly module.

The second difference is who can drive the document. A desktop package typically exposes a Python console or a macro API that runs with the same authority as the user. PartMode separates authentication from authority: an agent key does not grant CAD authority by itself, and a browser-approved session requires a signed-in tab and visible approval. That is a stricter model than a macro API, and it is also more moving parts. If your workflow depends on a script silently rewriting a model on a schedule, a desktop macro is simpler and PartMode's headless grant is the closest analogue, with the one-hour session expiry attached.

The third difference is durability. A desktop file is durable because it is a file. PartMode's anonymous projects live in browser storage, which means clearing site data is a real risk to be aware of, and the durable path for unattended work is a committed headless document tied to an account.

Maintenance, licensing and what the release history shows

The repository is not archived, and the last push was on 2026-08-17. The most recent release listed is source-snapshot-2026-08-11, published on 2026-08-10, described as a public source snapshot. package.json carries version 8.0.0 and the private flag is set to true, which is worth noting: the package is not published as a consumable npm dependency, so the supported way in is cloning the repository and building it, not installing it from a registry.

Upgrade cost is shaped by the snapshot model. If you track the public source snapshots, you are tracking a moving application rather than a versioned library with a compatibility contract. The README points to live cad_capabilities output as authoritative for the operations and schemas a running release supports, which implies the supported surface is a property of the running build. Budget for re-reading that output after an upgrade rather than assuming stability.

The licence is AGPL-3.0, declared as AGPL-3.0-only in package.json, with a LICENSE file at the repository root and a THIRD_PARTY_NOTICES.md alongside it. The README states PartMode is free to use, inspect, modify and self-host under that licence. AGPL-3.0 carries network-use obligations that differ from permissive licences, and the third-party notices file exists because the application bundles other components. If you plan to self-host a modified PartMode and expose it to other users, that is the point to read the licence text and the notices file carefully. This is a description of what the repository contains, not legal advice.

Editorial conclusion

Adopt PartMode if you want parametric mechanical CAD that runs from a browser tab, keeps anonymous projects in browser storage, and lets a typed agent propose changes that a person approves against a matching document revision. Do not adopt it for unattended headless CAD without accepting that headless documents have no individual project-delete control yet, that live headless sessions expire within one hour and do not survive a service restart, and that the hosted relay is not end-to-end encrypted. Before committing, verify the running release's cad_capabilities output, since the README states that live output remains authoritative for the exact operations and schemas a release supports, and check the DXF R12 subset and the sheet-metal and structural tools against your own part.

Frequently asked questions

Does PartMode require an account to model in the browser?

No. The README states that anonymous browser CAD needs no account, and that projects, geometry and recovery history remain in browser storage. An account is required only for hosted browser-agent access or for the server-headless path.

What does PartMode use to evaluate geometry?

OpenCascade WebAssembly evaluates the solid B-rep geometry, alongside replicad and three.js. The README describes the shaded three.js scene as a view of the result, not the source of truth.

How do I run PartMode locally?

The README gives a clone, npm ci, npm run build, npm start sequence and requires Node.js 22.13 or newer. The application is then served at http://127.0.0.1:4401.

How long does a headless PartMode session last?

Live headless sessions are key-bound, expire within one hour, and do not survive a service restart. Only committed headless documents are durable, and those remain until account deletion.

Official sources

  1. BOMWiki/partmode on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/bomwiki-partmode.svg)](https://hysenlabs.com/projects/bomwiki-partmode)