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.
Files changed (79) hide show
  1. package/LICENSE +7 -5
  2. package/README.md +1 -1
  3. package/README.public.md +24 -2
  4. package/dist/assets/{AdminPage-Bs4PiK00.js → AdminPage-4jihcEk_.js} +1 -1
  5. package/dist/assets/{BlogPage-DVmgN0ma.js → BlogPage-BvzruKtw.js} +1 -1
  6. package/dist/assets/{DocsPage-BP6wlsBN.js → DocsPage-DHbd-WS-.js} +13 -13
  7. package/dist/assets/{EditorApp-Arw2NnGJ.js → EditorApp-C5P2rBfh.js} +433 -84
  8. package/dist/assets/{EditorApp-VY9lXx0N.css → EditorApp-DS0AIUrZ.css} +25 -0
  9. package/dist/assets/{EmbedViewer-qgQiOahL.js → EmbedViewer-B70wQwlE.js} +2 -2
  10. package/dist/assets/{LandingPageProofDriven-DvhtmWOz.js → LandingPageProofDriven-DIsYTnep.js} +1 -1
  11. package/dist/assets/{PricingPage-Ck3CP2ti.css → PricingPage-BMedqFef.css} +48 -0
  12. package/dist/assets/{PricingPage-657oLvWh.js → PricingPage-YPOr12pP.js} +34 -6
  13. package/dist/assets/{SettingsPage-wNy3_2yn.js → SettingsPage-rntoyJ3b.js} +10 -13
  14. package/dist/assets/{app-BdBoMQeO.js → app-CWucmnLZ.js} +801 -1208
  15. package/dist/assets/cli/{render-Ci3jjyT1.js → render-DZHmUySW.js} +214 -23
  16. package/dist/assets/copy-CQKQppF-.js +8 -0
  17. package/dist/assets/{evalWorker-CMCAbK8r.js → evalWorker-C3dKxi9Y.js} +1117 -95
  18. package/dist/assets/{manifold-BMn-8Vf8.js → manifold-CQ3FhfWB.js} +1 -1
  19. package/dist/assets/{manifold-jlYQ6E5R.js → manifold-CU0G1yYL.js} +1 -1
  20. package/dist/assets/{manifold-DbyILno4.js → manifold-CYWZMfjB.js} +2 -2
  21. package/dist/assets/{renderSceneState-DAnqvxSt.js → renderSceneState-BBUrnsUN.js} +1 -1
  22. package/dist/assets/{reportWorker-BcRVMHK-.js → reportWorker-BhZ7DjxQ.js} +1091 -95
  23. package/dist/assets/{sectionPlaneMath-DXJ_TdIW.js → sectionPlaneMath-BxfokaJE.js} +1091 -95
  24. package/dist/cli/render.html +1 -1
  25. package/dist/docs/index.html +2 -2
  26. package/dist/docs-raw/AI/usage.md +182 -89
  27. package/dist/docs-raw/API/core/concepts.md +26 -0
  28. package/dist/docs-raw/CLI.md +58 -37
  29. package/dist/docs-raw/INDEX.md +81 -64
  30. package/dist/docs-raw/cli-monetization.md +9 -8
  31. package/dist/docs-raw/generated/concepts.md +111 -4
  32. package/dist/docs-raw/generated/core.md +2 -0
  33. package/dist/docs-raw/generated/curves.md +480 -1
  34. package/dist/docs-raw/generated/output.md +1 -0
  35. package/dist/docs-raw/generated/sketch.md +2 -0
  36. package/dist/docs-raw/generated/viewport.md +81 -3
  37. package/dist/docs-raw/product/user-outreach-email-templates.md +159 -0
  38. package/dist/docs-raw/skills/forgecad-image-replicator.md +1 -1
  39. package/dist/docs-raw/skills/forgecad-make-a-model.md +33 -4
  40. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +1 -1
  41. package/dist/docs-raw/skills/forgecad-project.md +1 -1
  42. package/dist/docs-raw/skills/forgecad-render-inspect.md +1 -1
  43. package/dist/docs-raw/skills/forgecad.md +2 -1
  44. package/dist/docs-raw/welcome.md +85 -137
  45. package/dist/index.html +1 -1
  46. package/dist/llms.txt +4 -3
  47. package/dist/sitemap.xml +6 -6
  48. package/dist-cli/forgecad.js +1413 -219
  49. package/dist-cli/forgecad.js.map +1 -1
  50. package/dist-skill/CONTEXT.md +594 -5
  51. package/dist-skill/SKILL-dev.md +2 -1
  52. package/dist-skill/SKILL.md +2 -1
  53. package/dist-skill/docs/API/core/concepts.md +26 -0
  54. package/dist-skill/docs/CLI.md +58 -37
  55. package/dist-skill/docs/generated/core.md +2 -0
  56. package/dist-skill/docs/generated/curves.md +480 -1
  57. package/dist-skill/docs/generated/output.md +1 -0
  58. package/dist-skill/docs/generated/sketch.md +2 -0
  59. package/dist-skill/docs/generated/viewport.md +81 -3
  60. package/dist-skill/docs-dev/API/core/concepts.md +26 -0
  61. package/dist-skill/docs-dev/CLI.md +58 -37
  62. package/dist-skill/docs-dev/generated/core.md +2 -0
  63. package/dist-skill/docs-dev/generated/curves.md +480 -1
  64. package/dist-skill/docs-dev/generated/output.md +1 -0
  65. package/dist-skill/docs-dev/generated/sketch.md +2 -0
  66. package/dist-skill/docs-dev/generated/viewport.md +81 -3
  67. package/dist-skill/library/README.md +0 -1
  68. package/dist-skill/library/forgecad-image-replicator/SKILL.md +1 -1
  69. package/dist-skill/library/forgecad-make-a-model/SKILL.md +33 -4
  70. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  71. package/dist-skill/library/forgecad-project/SKILL.md +1 -1
  72. package/dist-skill/library/forgecad-render-inspect/SKILL.md +1 -1
  73. package/examples/api/conformal-product-ribbon.forge.js +77 -0
  74. package/examples/api/render-labels.forge.js +33 -0
  75. package/examples/api/text2d-basics.forge.js +6 -3
  76. package/package.json +1 -1
  77. package/dist-skill/library/forgecad-deep-dive/SKILL.md +0 -120
  78. package/dist-skill/library/forgecad-deep-dive/agents/openai.yaml +0 -4
  79. package/dist-skill/library/forgecad-deep-dive/references/output-shape.md +0 -64
@@ -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 gives you an immediate 3D workbench, and the CLI gives you the serious local loop for agents, validation, rendering, export, and sync.
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
- Start with the `Start Here` project. New accounts get these files automatically. If your account was created before the starter project existed, create the files from the code below.
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 more realistic part with holes and proportions. |
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
- Do not try to learn the entire API first. The first useful loop is smaller:
21
+ Then clone that same project locally:
18
22
 
19
- ```text
20
- edit one number -> run -> inspect the model -> repeat
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
- ### `00-start-here.forge.js`
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
- ```js
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
- ### `01-parametric-bracket.forge.js`
37
+ Use this when you want a fresh model instead of the starter project:
52
38
 
53
- ```js
54
- // A small parametric bracket.
55
- // This file shows the normal ForgeCAD rhythm:
56
- // parameters -> primitives -> booleans -> named result.
57
-
58
- const width = Param.number("Width", 90, { min: 60, max: 150, unit: "mm" });
59
- const depth = Param.number("Depth", 64, { min: 42, max: 100, unit: "mm" });
60
- const height = Param.number("Height", 70, { min: 40, max: 120, unit: "mm" });
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
- ### `02-assembly-basics.forge.js`
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
- ```js
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
- ## Move to the CLI
53
+ ## Why Projects Matter
118
54
 
119
- The browser is the fastest way to see ForgeCAD. The CLI is the way to make it part of your real workflow.
55
+ ForgeCAD commands need a project root so imports, helper files, SVGs, and generated evidence resolve consistently.
120
56
 
121
- Install the CLI:
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
- ```bash
124
- npm install -g forgecad
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
- If your ForgeCAD account uses email and password, log in directly:
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
- ```bash
130
- forgecad login
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
- If your account was created through GitHub or Google, create an API token in `Settings > API Tokens`, then log in with the token:
134
-
135
- ```bash
136
- forgecad login --token
137
- ```
75
+ ## First Script
138
76
 
139
- Clone your starter project locally:
77
+ Inside a cloned or initialized ForgeCAD project, create `starter.forge.js`:
140
78
 
141
- ```bash
142
- forgecad project clone start-here
143
- cd start-here
144
- forgecad studio .
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
- Then validate and render from the terminal:
85
+ const base = box(width, depth, height).color("#5f87c6");
86
+ const hole = cylinder(height * 3, holeRadius).translate(0, 0, -height);
148
87
 
149
- ```bash
150
- forgecad run 00-start-here.forge.js
151
- forgecad render 3d 01-parametric-bracket.forge.js
88
+ return {
89
+ "starter plate": base.subtract(hole),
90
+ };
152
91
  ```
153
92
 
154
- Push local changes back to the hosted project:
93
+ Validate it and open the editor:
155
94
 
156
95
  ```bash
157
- forgecad project push
96
+ forgecad run starter.forge.js
97
+ forgecad studio .
158
98
  ```
159
99
 
160
- ## Use an AI Coding Agent
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
- For the full setup, approved model list, and installable skill library, see [AI Usage](AI/usage.md).
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
- This installs the core `forgecad` skill plus public workflow skills such as `forgecad-make-a-model` and `forgecad-render-inspect` into the known global skill directories for generic agents, Claude Code, Codex, and OpenCode. Use `--target` when you want to update only one agent location:
110
+ Then start your agent from inside the project folder and give it a concrete job:
173
111
 
174
- ```bash
175
- forgecad skill install --target claude
176
- forgecad skill install --target opencode
177
- forgecad skill install --target codex
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
- Then ask your agent to edit the local `.forge.js` files and verify with CLI commands such as:
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 01-parametric-bracket.forge.js
184
- forgecad render inspect 01-parametric-bracket.forge.js --channels rgb,mask
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
- This is the strongest workflow: the agent writes code, the CLI checks geometry, and the browser gives you fast visual inspection.
135
+ For the full approved model list, agent setup, quality guidance, and recording ideas, see [AI Usage](AI/usage.md).
188
136
 
189
- ## Where to Go Next
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 another concrete model pattern | Open `01-parametric-bracket.forge.js` or `02-assembly-basics.forge.js`, then browse the [public repo examples](https://github.com/KoStard/ForgeCAD/tree/mainline/examples/api) |
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, come back to the starter project and change one thing at a time. The whole product grows from that loop.
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-BdBoMQeO.js"></script>
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` or `forgecad render inspect` when shell access is available.
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): First model, first CLI loop, and the fastest route into ForgeCAD.
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 projects.
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-03</lastmod>
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-03</lastmod>
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-03</lastmod>
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-03</lastmod>
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-03</lastmod>
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-03</lastmod>
35
+ <lastmod>2026-05-06</lastmod>
36
36
  <changefreq>monthly</changefreq>
37
37
  <priority>0.5</priority>
38
38
  </url>