Open-source project
Adam-CAD/CADAM avatar
Adam-CAD/CADAM

CADAM: the open source text-to-CAD web app that runs OpenSCAD in the browser

CADAM is the open source text-to-CAD web application

5,193 stars646 forksTypeScriptGPL-3.0

At a glance

What is it?
CADAM turns plain-language prompts and reference images into parametric OpenSCAD models inside a browser tab. It is a React and WebAssembly application with a Supabase backend, licensed GPL-3.0, and the repository is still being pushed to as of 2026-09-02.
Who is it for?
CADAM suits people who want to describe a part in English and get editable OpenSCAD they can export, and it is a poor fit for anyone who needs certified drawings, tolerances or a guaranteed offline pipeline, since generation depends on Anthropic, Google or OpenRouter keys plus a Supabase project.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 12 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

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

Editorial analysis

What CADAM actually solves, and for whom

Most people who need a bracket, a knob or a spacer do not want to learn a feature tree. They want a shape. CADAM takes a sentence like the twisted hexagonal vase prompt in benchmarks/01-twisted-hex-vase.md and returns a parametric OpenSCAD model you can drag sliders on. The README describes the output as "fully parametric OpenSCAD, ready to export as .STL, .SCAD, or .DXF".

The audience is narrower than the tagline suggests. It fits someone who already understands what a wall thickness or a fillet radius means, because the generated model exposes dimensions as named controls rather than hiding them. The README's benchmark table lists control counts per model: 22 dims and 8 colors for the V8 engine, 2 dims and 10 colors for the turbofan. A person who cannot judge whether 2 mm is a sensible wall will get a model that renders and prints badly.

It is a worse fit for production mechanical work. Nothing in the README mentions tolerances, GD&T, assemblies with mates, or drawing output. The exports are mesh and script formats, not engineering drawings.

How the browser pipeline works: prompt to OpenSCAD to mesh

The architecture is a Vite and React 19 single-page app with a Supabase backend, and OpenSCAD compiled to WebAssembly. The package.json shows three separate model providers wired in through the Vercel AI SDK: @ai-sdk/anthropic, @ai-sdk/google and @openrouter/ai-sdk-provider, alongside @fal-ai/client, which is the likely path for image handling given the README's "Image References" capability.

The data flow implied by the repository layout is: the browser collects your text or image, a server-side function under supabase/ calls a model, the model returns OpenSCAD source, the source is evaluated by the OpenSCAD WASM build, and Three.js renders the resulting geometry for preview. The README lists "Parameter Extraction" and "Smart Updates" as separate capabilities, which points at a deliberate split: the model is asked once to produce source plus a parameter table, and later slider moves re-run the local OpenSCAD evaluation instead of calling the API again. That is the single most useful design decision in the project, because it means dimension tweaks do not burn tokens or wait on a network round trip.

The README also states the app bundles BOSL, BOSL2 and MCAD, so generated code can call those libraries rather than emitting raw primitives. That is a real constraint as well as a convenience: code that depends on BOSL2 will not evaluate in a stock OpenSCAD install unless you add the same libraries.

Installing CADAM locally and generating your first part

The README points at adam.new/cadam as the hosted version with no install required. Self-hosting is the path the repository supports through a Vite dev server.

Node and npm versions are pinned in package.json, so check them before anything else. The engines field reads "^20.19.0 || >=22.12.0" for Node and ">=10" for npm.

bash
git clone https://github.com/Adam-CAD/CADAM.git
cd CADAM
npm install

The repository ships .env.local.template at the top level. Copy it and fill in the model provider keys and Supabase credentials before starting the dev server; without them the generation step has nothing to call.

bash
cp .env.local.template .env.local
npm run dev

Vite prints a local URL, conventionally on port 5173. Open it, type a description of a part, and the app should return a model plus a set of sliders. The README's own examples are concrete enough to copy: a knurled control knob 40 mm in diameter, or a twisted hexagonal vase about 150 mm tall tapering from a 70 mm base to a 50 mm mouth with a 2 mm wall.

The available scripts are worth knowing: npm run build runs tsc -b then vite build, npm run typecheck runs tsc -b --noEmit, npm run lint runs eslint with supabase/** ignored, and npm run preview serves the built output. The lint script explicitly excludes the supabase directory, which tells you the edge functions are not covered by the frontend lint config.

Where CADAM breaks down

The licence is the first hard boundary. CADAM is GPL-3.0. If you fork it and distribute a modified version, the GPL obligations travel with the code. That is fine for internal use and for open forks, and awkward for anyone planning to wrap it in a closed product. The repository contains no separate commercial-licence file that the README mentions.

Generation quality is bounded by the model you point it at, and the project gives you no offline fallback. If your Anthropic, Google or OpenRouter key is missing or rate limited, the app has no local model to fall back on. The README does not document an offline mode, and it does not document rollback to a previous model version inside a session.

The benchmark table is a demonstration, not an evaluation. It shows prompts and resulting control counts for a V8 engine, a radial aircraft engine, a turbofan and a blisk, but it publishes no success rate, no failure cases and no timing. Treat it as a gallery. A prompt that produces a tangled or non-manifold result is not covered anywhere in the README.

The library dependency is a quieter trap. Because BOSL, BOSL2 and MCAD are bundled in the app, generated code can use them freely. Export that .SCAD file and open it in desktop OpenSCAD without those libraries installed and it will fail to render. The README does not say whether the export path inlines the library code.

CADAM against OpenSCAD and CadQuery

The obvious comparison is plain OpenSCAD, and the difference is who writes the first draft. In OpenSCAD you author the script yourself and get complete control over structure, but you also carry the full cost of expressing a complex shape. CADAM inverts that: you describe the part, the model writes the script, and you edit parameters afterward. The trade is that you inherit someone else's variable naming and module structure, and the README gives no indication that you can steer the code style.

The second comparison is CadQuery, a Python library for programmatic CAD. CadQuery gives you a real programming language with loops, functions and a package ecosystem, and it produces B-rep geometry through OCCT rather than meshes. CADAM's pipeline is OpenSCAD-based, so the underlying geometry is CSG and the exports in the README are .STL, .SCAD and .DXF. If your downstream work needs solid modelling operations, fillets on curved intersections, or STEP export, that is a different tool class. CADAM's value is the prompt-to-parametric-source step, not the kernel.

Maintenance, upgrades and what the licence means in practice

The repository is not archived, and the last push was on 2026-09-02. Releases are spaced roughly two to three months apart: v0.1.0 on 2026-03-04, v0.2.0 on 2026-05-22, v0.3.0 on 2026-06-17. All three are pre-1.0, which is the number that matters for upgrade planning. Pre-1.0 versioning conventionally permits breaking changes on a minor bump, and the README promises no API or schema stability.

Upgrade cost concentrates in three places. The dependency list in package.json is long and includes a large set of Radix UI packages plus three separate AI SDK providers, so a major bump in any of them can ripple. The Supabase directory holds backend functions with their own schema, and the lint script ignores that directory, so schema changes will not surface as type errors in the frontend build. Third, the OpenSCAD WASM build is a moving target upstream.

On the licence: GPL-3.0 is a copyleft licence. If you distribute modified CADAM, or a service built on it in a way that constitutes distribution, the source obligations apply. The repository contains a LICENSE file and a CODE_OF_CONDUCT.md and CONTRIBUTING.md, but no file the README describes as a commercial or dual-licence grant. If your organisation has rules about copyleft dependencies, run this past whoever handles that before you build on it. This is a description of the licence, not legal advice.

Editorial conclusion

CADAM suits people who want to describe a part in English and get editable OpenSCAD they can export, and it is a poor fit for anyone who needs certified drawings, tolerances or a guaranteed offline pipeline, since generation depends on Anthropic, Google or OpenRouter keys plus a Supabase project. Before adopting it, read package.json for the exact Node and npm engine ranges, check the .env.local.template for the required keys, and confirm whether the GPL-3.0 obligations fit how you intend to distribute your fork.

Frequently asked questions

Is CADAM free?

The source is published under GPL-3.0, so you can self-host it at no licence cost. Running it yourself still requires API keys for a model provider and a Supabase project, and those services have their own terms.

What does CADAM stand for?

The repository does not expand the name anywhere in its README or package metadata. The README describes the project only as "The Open Source Text to CAD Web App".

Where is CADAM located?

The source lives at github.com/Adam-CAD/CADAM, and the README points at adam.new/cadam for the hosted version you can try without installing anything.

Official sources

  1. Adam-CAD/CADAM on GitHub
  2. License: GPL-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/adam-cad-cadam.svg)](https://hysenlabs.com/projects/adam-cad-cadam)