forgecad 0.9.2 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -5
- package/README.md +1 -1
- package/README.public.md +24 -2
- package/dist/assets/{AdminPage-Bs4PiK00.js → AdminPage-4jihcEk_.js} +1 -1
- package/dist/assets/{BlogPage-DVmgN0ma.js → BlogPage-BvzruKtw.js} +1 -1
- package/dist/assets/{DocsPage-BP6wlsBN.js → DocsPage-DHbd-WS-.js} +13 -13
- package/dist/assets/{EditorApp-Arw2NnGJ.js → EditorApp-C5P2rBfh.js} +433 -84
- package/dist/assets/{EditorApp-VY9lXx0N.css → EditorApp-DS0AIUrZ.css} +25 -0
- package/dist/assets/{EmbedViewer-qgQiOahL.js → EmbedViewer-B70wQwlE.js} +2 -2
- package/dist/assets/{LandingPageProofDriven-DvhtmWOz.js → LandingPageProofDriven-DIsYTnep.js} +1 -1
- package/dist/assets/{PricingPage-Ck3CP2ti.css → PricingPage-BMedqFef.css} +48 -0
- package/dist/assets/{PricingPage-657oLvWh.js → PricingPage-YPOr12pP.js} +34 -6
- package/dist/assets/{SettingsPage-wNy3_2yn.js → SettingsPage-rntoyJ3b.js} +10 -13
- package/dist/assets/{app-BdBoMQeO.js → app-CWucmnLZ.js} +801 -1208
- package/dist/assets/cli/{render-Ci3jjyT1.js → render-DZHmUySW.js} +214 -23
- package/dist/assets/copy-CQKQppF-.js +8 -0
- package/dist/assets/{evalWorker-CMCAbK8r.js → evalWorker-C3dKxi9Y.js} +1117 -95
- package/dist/assets/{manifold-BMn-8Vf8.js → manifold-CQ3FhfWB.js} +1 -1
- package/dist/assets/{manifold-jlYQ6E5R.js → manifold-CU0G1yYL.js} +1 -1
- package/dist/assets/{manifold-DbyILno4.js → manifold-CYWZMfjB.js} +2 -2
- package/dist/assets/{renderSceneState-DAnqvxSt.js → renderSceneState-BBUrnsUN.js} +1 -1
- package/dist/assets/{reportWorker-BcRVMHK-.js → reportWorker-BhZ7DjxQ.js} +1091 -95
- package/dist/assets/{sectionPlaneMath-DXJ_TdIW.js → sectionPlaneMath-BxfokaJE.js} +1091 -95
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/usage.md +182 -89
- package/dist/docs-raw/API/core/concepts.md +26 -0
- package/dist/docs-raw/CLI.md +58 -37
- package/dist/docs-raw/INDEX.md +81 -64
- package/dist/docs-raw/cli-monetization.md +9 -8
- package/dist/docs-raw/generated/concepts.md +111 -4
- package/dist/docs-raw/generated/core.md +2 -0
- package/dist/docs-raw/generated/curves.md +480 -1
- package/dist/docs-raw/generated/output.md +1 -0
- package/dist/docs-raw/generated/sketch.md +2 -0
- package/dist/docs-raw/generated/viewport.md +81 -3
- package/dist/docs-raw/product/user-outreach-email-templates.md +159 -0
- package/dist/docs-raw/skills/forgecad-image-replicator.md +1 -1
- package/dist/docs-raw/skills/forgecad-make-a-model.md +33 -4
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +1 -1
- package/dist/docs-raw/skills/forgecad-project.md +1 -1
- package/dist/docs-raw/skills/forgecad-render-inspect.md +1 -1
- package/dist/docs-raw/skills/forgecad.md +2 -1
- package/dist/docs-raw/welcome.md +85 -137
- package/dist/index.html +1 -1
- package/dist/llms.txt +4 -3
- package/dist/sitemap.xml +6 -6
- package/dist-cli/forgecad.js +1413 -219
- package/dist-cli/forgecad.js.map +1 -1
- package/dist-skill/CONTEXT.md +594 -5
- package/dist-skill/SKILL-dev.md +2 -1
- package/dist-skill/SKILL.md +2 -1
- package/dist-skill/docs/API/core/concepts.md +26 -0
- package/dist-skill/docs/CLI.md +58 -37
- package/dist-skill/docs/generated/core.md +2 -0
- package/dist-skill/docs/generated/curves.md +480 -1
- package/dist-skill/docs/generated/output.md +1 -0
- package/dist-skill/docs/generated/sketch.md +2 -0
- package/dist-skill/docs/generated/viewport.md +81 -3
- package/dist-skill/docs-dev/API/core/concepts.md +26 -0
- package/dist-skill/docs-dev/CLI.md +58 -37
- package/dist-skill/docs-dev/generated/core.md +2 -0
- package/dist-skill/docs-dev/generated/curves.md +480 -1
- package/dist-skill/docs-dev/generated/output.md +1 -0
- package/dist-skill/docs-dev/generated/sketch.md +2 -0
- package/dist-skill/docs-dev/generated/viewport.md +81 -3
- package/dist-skill/library/README.md +0 -1
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +1 -1
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +33 -4
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
- package/dist-skill/library/forgecad-project/SKILL.md +1 -1
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +1 -1
- package/examples/api/conformal-product-ribbon.forge.js +77 -0
- package/examples/api/render-labels.forge.js +33 -0
- package/examples/api/text2d-basics.forge.js +6 -3
- package/package.json +1 -1
- package/dist-skill/library/forgecad-deep-dive/SKILL.md +0 -120
- package/dist-skill/library/forgecad-deep-dive/agents/openai.yaml +0 -4
- package/dist-skill/library/forgecad-deep-dive/references/output-shape.md +0 -64
package/dist/docs-raw/welcome.md
CHANGED
|
@@ -1,192 +1,140 @@
|
|
|
1
1
|
# Welcome to ForgeCAD
|
|
2
2
|
|
|
3
|
-
ForgeCAD is code-first CAD. A model is a normal `.forge.js` file, the browser
|
|
3
|
+
ForgeCAD is code-first CAD. A model is a normal `.forge.js` file, the browser is the live workbench, and the CLI is the reliable loop for validation, rendering, export, AI agents, and sync.
|
|
4
|
+
|
|
5
|
+
The most important rule: work in a dedicated ForgeCAD project folder. Do not run ForgeCAD from your home directory, downloads folder, desktop, or a huge source tree. Use a small folder that contains the model, helper files, SVG/reference assets, and generated inspection evidence for one project.
|
|
4
6
|
|
|
5
7
|
## First 10 Minutes
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
There are two good ways to start.
|
|
10
|
+
|
|
11
|
+
### Start From The Browser
|
|
8
12
|
|
|
9
|
-
Open these files in order:
|
|
13
|
+
New accounts get a `Start Here` project automatically. Open it in the browser and try these files in order:
|
|
10
14
|
|
|
11
15
|
| File | What to try |
|
|
12
16
|
|---|---|
|
|
13
17
|
| `00-start-here.forge.js` | Change a parameter and watch the model update. |
|
|
14
|
-
| `01-parametric-bracket.forge.js` | Inspect a
|
|
18
|
+
| `01-parametric-bracket.forge.js` | Inspect a realistic part with holes and proportions. |
|
|
15
19
|
| `02-assembly-basics.forge.js` | See how multiple parts can be arranged together. |
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+
Then clone that same project locally:
|
|
18
22
|
|
|
19
|
-
```
|
|
20
|
-
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g forgecad
|
|
25
|
+
forgecad login
|
|
26
|
+
# For GitHub/Google accounts, create an API token in Settings > API Tokens:
|
|
27
|
+
# forgecad login --token
|
|
28
|
+
forgecad project clone start-here
|
|
29
|
+
cd start-here
|
|
30
|
+
forgecad studio .
|
|
21
31
|
```
|
|
22
32
|
|
|
23
|
-
|
|
33
|
+
`forgecad studio .` opens the local editor around the current project folder. The `.` is not optional; `forgecad studio` requires a project path.
|
|
24
34
|
|
|
25
|
-
|
|
26
|
-
// Welcome to ForgeCAD.
|
|
27
|
-
// Try changing the Width or Height sliders, then watch the model update.
|
|
28
|
-
//
|
|
29
|
-
// When you are ready to work locally:
|
|
30
|
-
// npm install -g forgecad
|
|
31
|
-
// forgecad login
|
|
32
|
-
// # or, for GitHub/Google accounts: forgecad login --token
|
|
33
|
-
// forgecad project clone start-here
|
|
34
|
-
// cd start-here
|
|
35
|
-
// forgecad studio .
|
|
36
|
-
//
|
|
37
|
-
// More orientation: https://forgecad.io/docs/welcome
|
|
38
|
-
|
|
39
|
-
const width = Param.number("Width", 80, { min: 40, max: 140, unit: "mm" });
|
|
40
|
-
const depth = Param.number("Depth", 50, { min: 30, max: 90, unit: "mm" });
|
|
41
|
-
const height = Param.number("Height", 18, { min: 8, max: 40, unit: "mm" });
|
|
42
|
-
const holeRadius = Param.number("Hole Radius", 6, { min: 2, max: 12, unit: "mm" });
|
|
43
|
-
|
|
44
|
-
const plate = box(width, depth, height)
|
|
45
|
-
.subtract(cylinder(height * 2, holeRadius))
|
|
46
|
-
.color("#5b9bd5");
|
|
47
|
-
|
|
48
|
-
return { "starter plate": plate };
|
|
49
|
-
```
|
|
35
|
+
### Create A New Local Project
|
|
50
36
|
|
|
51
|
-
|
|
37
|
+
Use this when you want a fresh model instead of the starter project:
|
|
52
38
|
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const plate = Param.number("Plate", 8, { min: 4, max: 14, unit: "mm" });
|
|
62
|
-
const holeRadius = Param.number("Hole Radius", 4, { min: 2, max: 8, unit: "mm" });
|
|
63
|
-
const spacing = Param.number("Hole Spacing", 48, { min: 24, max: 80, unit: "mm" });
|
|
64
|
-
|
|
65
|
-
const base = box(width, depth, plate);
|
|
66
|
-
const upright = box(width, plate, height).translate(0, -depth / 2 + plate / 2, plate);
|
|
67
|
-
|
|
68
|
-
const baseHoles = [-spacing / 2, spacing / 2].map((x) =>
|
|
69
|
-
cylinder(plate * 3, holeRadius).translate(x, depth * 0.18, -plate)
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
const uprightHoles = [-spacing / 2, spacing / 2].map((x) =>
|
|
73
|
-
cylinder(plate * 3, holeRadius)
|
|
74
|
-
.pointAlong([0, 1, 0])
|
|
75
|
-
.translate(x, -depth / 2 - plate, plate + height * 0.58)
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
const bracket = union(base, upright)
|
|
79
|
-
.subtract(...baseHoles, ...uprightHoles)
|
|
80
|
-
.color("#6aa84f");
|
|
81
|
-
|
|
82
|
-
return { "parametric bracket": bracket };
|
|
39
|
+
```bash
|
|
40
|
+
npm install -g forgecad
|
|
41
|
+
forgecad login
|
|
42
|
+
mkdir spool-adapter
|
|
43
|
+
cd spool-adapter
|
|
44
|
+
forgecad project init "Spool Adapter" --visibility private
|
|
45
|
+
forgecad new adapter --template part
|
|
46
|
+
forgecad studio .
|
|
83
47
|
```
|
|
84
48
|
|
|
85
|
-
|
|
49
|
+
`forgecad project init` creates the hosted project, writes `forgecad.json`, and uploads any existing local `.forge.js`, `.js`, and `.svg` files. After that, `forgecad project push` syncs changes back to the hosted project.
|
|
86
50
|
|
|
87
|
-
|
|
88
|
-
// A tiny multi-part scene.
|
|
89
|
-
// ForgeCAD projects are just code, so assemblies can be built from ordinary
|
|
90
|
-
// variables and functions before you move into richer connector workflows.
|
|
91
|
-
|
|
92
|
-
const spread = Param.number("Spread", 0, { min: 0, max: 40, unit: "mm" });
|
|
93
|
-
const postHeight = Param.number("Post Height", 34, { min: 20, max: 70, unit: "mm" });
|
|
94
|
-
|
|
95
|
-
const base = box(110, 42, 8)
|
|
96
|
-
.color("#4f6f8f");
|
|
97
|
-
|
|
98
|
-
function makePost(x, color) {
|
|
99
|
-
return cylinder(postHeight, 7)
|
|
100
|
-
.translate(x, 0, 8)
|
|
101
|
-
.color(color);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const leftPost = makePost(-28 - spread, "#c76d39");
|
|
105
|
-
const rightPost = makePost(28 + spread, "#d9a441");
|
|
106
|
-
const cap = box(82 + spread * 2, 18, 8)
|
|
107
|
-
.translate(0, 0, 8 + postHeight)
|
|
108
|
-
.color("#8e5ea2");
|
|
109
|
-
|
|
110
|
-
return assembly("Assembly Basics")
|
|
111
|
-
.addPart("Base Rail", base)
|
|
112
|
-
.addPart("Left Post", leftPost)
|
|
113
|
-
.addPart("Right Post", rightPost)
|
|
114
|
-
.addPart("Top Cap", cap);
|
|
115
|
-
```
|
|
51
|
+
`forgecad project push` does not create a remote project from an arbitrary folder. If a folder has no `forgecad.json`, initialize it with `forgecad project init` or clone an existing project first.
|
|
116
52
|
|
|
117
|
-
##
|
|
53
|
+
## Why Projects Matter
|
|
118
54
|
|
|
119
|
-
|
|
55
|
+
ForgeCAD commands need a project root so imports, helper files, SVGs, and generated evidence resolve consistently.
|
|
120
56
|
|
|
121
|
-
|
|
57
|
+
A single loose `.forge.js` file is fine for a tiny experiment, but it is not the best workflow for useful AI-generated CAD. A project folder gives the agent and CLI enough context to work well:
|
|
122
58
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
59
|
+
- `forgecad.json` links the folder to the hosted project.
|
|
60
|
+
- `.forge.js`, `.js`, and `.svg` files stay together.
|
|
61
|
+
- `forgecad run` and render commands resolve local imports from the intended root.
|
|
62
|
+
- `forgecad project push` knows exactly which remote project to update.
|
|
63
|
+
- Inspection bundles, screenshots, and export outputs can live beside the model without mixing with unrelated files.
|
|
126
64
|
|
|
127
|
-
|
|
65
|
+
Bad roots create bad results. Pointing ForgeCAD or an AI agent at `~`, a monorepo, or a downloads folder can make file discovery slow, confusing, or effectively unusable. Start small and intentional:
|
|
128
66
|
|
|
129
|
-
```
|
|
130
|
-
|
|
67
|
+
```text
|
|
68
|
+
good: ~/cad/spool-adapter/
|
|
69
|
+
good: ~/Projects/forgecad/start-here/
|
|
70
|
+
bad: ~/
|
|
71
|
+
bad: ~/Downloads/
|
|
72
|
+
bad: ~/Projects/
|
|
131
73
|
```
|
|
132
74
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
forgecad login --token
|
|
137
|
-
```
|
|
75
|
+
## First Script
|
|
138
76
|
|
|
139
|
-
|
|
77
|
+
Inside a cloned or initialized ForgeCAD project, create `starter.forge.js`:
|
|
140
78
|
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
79
|
+
```js
|
|
80
|
+
const width = Param.number("Width", 90, { min: 50, max: 160, unit: "mm" });
|
|
81
|
+
const depth = Param.number("Depth", 56, { min: 32, max: 100, unit: "mm" });
|
|
82
|
+
const height = Param.number("Height", 12, { min: 6, max: 32, unit: "mm" });
|
|
83
|
+
const holeRadius = Param.number("Hole Radius", 5, { min: 2, max: 10, unit: "mm" });
|
|
146
84
|
|
|
147
|
-
|
|
85
|
+
const base = box(width, depth, height).color("#5f87c6");
|
|
86
|
+
const hole = cylinder(height * 3, holeRadius).translate(0, 0, -height);
|
|
148
87
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
88
|
+
return {
|
|
89
|
+
"starter plate": base.subtract(hole),
|
|
90
|
+
};
|
|
152
91
|
```
|
|
153
92
|
|
|
154
|
-
|
|
93
|
+
Validate it and open the editor:
|
|
155
94
|
|
|
156
95
|
```bash
|
|
157
|
-
forgecad
|
|
96
|
+
forgecad run starter.forge.js
|
|
97
|
+
forgecad studio .
|
|
158
98
|
```
|
|
159
99
|
|
|
160
|
-
## Use
|
|
100
|
+
## Use An AI Coding Agent
|
|
161
101
|
|
|
162
|
-
ForgeCAD works well with coding agents because the source of truth is plain code.
|
|
102
|
+
ForgeCAD works well with coding agents because the source of truth is plain code and the CLI can prove whether the model still runs.
|
|
163
103
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
Install the agent skill library:
|
|
104
|
+
Install the public skill library:
|
|
167
105
|
|
|
168
106
|
```bash
|
|
169
107
|
forgecad skill install
|
|
170
108
|
```
|
|
171
109
|
|
|
172
|
-
|
|
110
|
+
Then start your agent from inside the project folder and give it a concrete job:
|
|
173
111
|
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
forgecad
|
|
177
|
-
|
|
112
|
+
```text
|
|
113
|
+
Use the ForgeCAD skills. Work in this project folder. Build or edit real
|
|
114
|
+
ForgeCAD geometry in .forge.js files. Validate with forgecad run, render at
|
|
115
|
+
least one 3D view or inspect bundle, and run parameter checks before calling it done.
|
|
178
116
|
```
|
|
179
117
|
|
|
180
|
-
|
|
118
|
+
The strongest loop is:
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
agent edits files -> forgecad run -> render or inspect -> fix -> check params -> project push
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Useful commands:
|
|
181
125
|
|
|
182
126
|
```bash
|
|
183
|
-
forgecad run
|
|
184
|
-
forgecad render
|
|
127
|
+
forgecad run adapter.forge.js
|
|
128
|
+
forgecad render 3d adapter.forge.js --camera iso
|
|
129
|
+
forgecad render inspect adapter.forge.js --channels rgb,mask,collisions,thickness --force
|
|
130
|
+
forgecad check params adapter.forge.js --samples 8
|
|
131
|
+
forgecad project push
|
|
132
|
+
forgecad project open
|
|
185
133
|
```
|
|
186
134
|
|
|
187
|
-
|
|
135
|
+
For the full approved model list, agent setup, quality guidance, and recording ideas, see [AI Usage](AI/usage.md).
|
|
188
136
|
|
|
189
|
-
## Where
|
|
137
|
+
## Where To Go Next
|
|
190
138
|
|
|
191
139
|
| Goal | Start here |
|
|
192
140
|
|---|---|
|
|
@@ -194,6 +142,6 @@ This is the strongest workflow: the agent writes code, the CLI checks geometry,
|
|
|
194
142
|
| Build sketches and extrusions | [Sketches](/docs/sketch) |
|
|
195
143
|
| Build assemblies | [Assembly](/docs/assembly) |
|
|
196
144
|
| Export files and renders | [Output](/docs/output) and [CLI](/docs/cli) |
|
|
197
|
-
| Try
|
|
145
|
+
| Try concrete examples | Browse the [public repo examples](https://github.com/KoStard/ForgeCAD/tree/mainline/examples/api) |
|
|
198
146
|
|
|
199
|
-
If you get lost,
|
|
147
|
+
If you get lost, return to the `Start Here` project, change one number, run the file, and inspect the result. ForgeCAD grows from that loop.
|
package/dist/index.html
CHANGED
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
56
56
|
html, body, #root { width: 100%; min-height: 100%; background: var(--fc-bg); color: var(--fc-text); font-family: system-ui, -apple-system, sans-serif; }
|
|
57
57
|
</style>
|
|
58
|
-
<script type="module" crossorigin src="/assets/app-
|
|
58
|
+
<script type="module" crossorigin src="/assets/app-CWucmnLZ.js"></script>
|
|
59
59
|
<link rel="stylesheet" crossorigin href="/assets/app-aLOpQQza.css">
|
|
60
60
|
</head>
|
|
61
61
|
<body>
|
package/dist/llms.txt
CHANGED
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
ForgeCAD turns ordinary `.forge.js` files into live CAD models. Parameters become sliders, scripts return shapes or assemblies, and the same source can be validated, rendered, inspected, and exported from the command line.
|
|
6
6
|
|
|
7
|
-
For coding agents, start with the welcome guide, then read the relevant raw Markdown docs and examples before editing model code. ForgeCAD models use millimeters by default, expose parameters through `Param.*`, and should be verified with `forgecad run
|
|
7
|
+
For coding agents, start with the welcome guide and AI Usage guide, then read the relevant raw Markdown docs and examples before editing model code. Work inside a dedicated ForgeCAD project folder with `forgecad.json`; do not use a home directory, downloads folder, desktop, or broad repository root as the project context. ForgeCAD models use millimeters by default, expose parameters through `Param.*`, and should be verified with `forgecad run`, `forgecad render inspect`, and `forgecad check params` when shell access is available. Project imports must include the full extension: use `require("./part.forge.js")` for model files and `require("./helpers.js")` for helper modules.
|
|
8
8
|
|
|
9
9
|
## Start Here
|
|
10
10
|
|
|
11
11
|
- [ForgeCAD browser app](https://forgecad.io/): Hosted CAD workbench for editing, previewing, sharing, and publishing parametric models.
|
|
12
|
-
- [Welcome guide](https://forgecad.io/docs-raw/welcome.md):
|
|
12
|
+
- [Welcome guide](https://forgecad.io/docs-raw/welcome.md): Project setup, local editor, browser sync, and the first AI loop.
|
|
13
|
+
- [AI Usage guide](https://forgecad.io/docs-raw/AI/usage.md): Approved models, project-first agent setup, skills, validation gates, quality prompts, and recording ideas.
|
|
13
14
|
- [Documentation home](https://forgecad.io/docs): Human-readable documentation with search and navigation.
|
|
14
|
-
- [CLI reference](https://forgecad.io/docs-raw/CLI.md): Install, login, open studios, run scripts, render, export, inspect, and sync
|
|
15
|
+
- [CLI reference](https://forgecad.io/docs-raw/CLI.md): Install, login, create projects, open studios with explicit paths, run scripts, render, export, inspect, and sync.
|
|
15
16
|
|
|
16
17
|
## API Reference
|
|
17
18
|
|
package/dist/sitemap.xml
CHANGED
|
@@ -2,37 +2,37 @@
|
|
|
2
2
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
3
|
<url>
|
|
4
4
|
<loc>https://forgecad.io/</loc>
|
|
5
|
-
<lastmod>2026-05-
|
|
5
|
+
<lastmod>2026-05-06</lastmod>
|
|
6
6
|
<changefreq>weekly</changefreq>
|
|
7
7
|
<priority>1.0</priority>
|
|
8
8
|
</url>
|
|
9
9
|
<url>
|
|
10
10
|
<loc>https://forgecad.io/docs</loc>
|
|
11
|
-
<lastmod>2026-05-
|
|
11
|
+
<lastmod>2026-05-06</lastmod>
|
|
12
12
|
<changefreq>weekly</changefreq>
|
|
13
13
|
<priority>0.8</priority>
|
|
14
14
|
</url>
|
|
15
15
|
<url>
|
|
16
16
|
<loc>https://forgecad.io/blog</loc>
|
|
17
|
-
<lastmod>2026-05-
|
|
17
|
+
<lastmod>2026-05-06</lastmod>
|
|
18
18
|
<changefreq>weekly</changefreq>
|
|
19
19
|
<priority>0.7</priority>
|
|
20
20
|
</url>
|
|
21
21
|
<url>
|
|
22
22
|
<loc>https://forgecad.io/pricing</loc>
|
|
23
|
-
<lastmod>2026-05-
|
|
23
|
+
<lastmod>2026-05-06</lastmod>
|
|
24
24
|
<changefreq>monthly</changefreq>
|
|
25
25
|
<priority>0.6</priority>
|
|
26
26
|
</url>
|
|
27
27
|
<url>
|
|
28
28
|
<loc>https://forgecad.io/examples</loc>
|
|
29
|
-
<lastmod>2026-05-
|
|
29
|
+
<lastmod>2026-05-06</lastmod>
|
|
30
30
|
<changefreq>weekly</changefreq>
|
|
31
31
|
<priority>0.6</priority>
|
|
32
32
|
</url>
|
|
33
33
|
<url>
|
|
34
34
|
<loc>https://forgecad.io/blog/hello-forgecad-io</loc>
|
|
35
|
-
<lastmod>2026-05-
|
|
35
|
+
<lastmod>2026-05-06</lastmod>
|
|
36
36
|
<changefreq>monthly</changefreq>
|
|
37
37
|
<priority>0.5</priority>
|
|
38
38
|
</url>
|