Pascal Editor
Your first Pascal project: create, inspect, save and reopen
Choose the local CLI or embedded-package path, load required node definitions and verify a small building scene without mistaking an empty canvas for success.
What you will learn
- Choose one entry point for the first experiment
- Use a small scene with observable invariants
- Make persistence a separate acceptance step
Before you start
- Basic scene-graph, JavaScript and HTTP concepts
- An owned small scene with expected dimensions and relationships
Explain the implementation boundary and reproduce the chapter’s checklist or narrow graph exercise.
Key takeaways
- Local CLI and embedded Viewer are different entry points.
- Load node definitions before expecting a rendered scene.
- A first project should survive save, reopen and inspection.
Choose one entry point for the first experiment
The README offers npx @pascal-app/cli editor for a persistent local installation without cloning the repository. The inspected CLI requires Node.js 22.13 or later and manages background editor and MCP processes. The command downloads and runs package code and creates local state; review the package and use a disposable evaluation environment rather than treating it as a read-only query.
Embedding takes another route: install the core, viewer, editor and nodes packages with compatible peer dependencies, load builtinPlugin once, and only then mount Viewer. The viewer README explicitly says that an empty registry cannot render scene nodes. Installing a package is not the same as registering its definitions in the running application.
Use a small scene with observable invariants
Begin with a site, building and level, then add one wall and one hosted opening through the editor. Give the project a meaningful display name and use a simple ASCII identifier when specifying a slug. The slug helper removes non-ASCII characters rather than transliterating them: an all-Chinese identifier normalizes to empty and is rejected, while a display name is a separate field.
Inspect the scene tree as well as the canvas. The default scene builder writes both children lists and parentId links because rendering can traverse one direction while the scene authority checks symmetry. Move or reparent an item, undo the change and confirm that the object appears exactly once under its intended parent.
Make persistence a separate acceptance step
Save the project, close only the evaluation session and reopen it using the documented project workflow. Verify dimensions, node IDs, materials and installed-plugin state. A canvas that survives a React rerender does not prove durable storage; a database record does not prove all required assets can still load or render.
The JSON below is an editorial acceptance checklist, not a native Pascal scene or CLI configuration. No local installation, server or actual GPU rendering was executed in this review. The source-helper probe verifies narrower graph and naming behavior, which is useful evidence but cannot replace this end-to-end first-project test.
Implementation steps
- 1
Review the intended package version and Node requirement.
- 2
Start a disposable local pilot or prepare the embedded registry.
- 3
Create a small scene and inspect both graph directions.
- 4
Save and reopen, checking materials and node identity.
Copy-ready example
{"projectSlug":"first-room","displayName":"First room","acceptance":["one visible opening","no duplicate child","dimensions retained","material retained after reopen"],"exerciseExecuted":false}Frequently asked questions
Why can an embedded viewer be blank?
One source-supported cause is an uninitialized node registry. Check plugin loading, scene content and renderer capability separately.
Are project slugs transliterated?
No. The inspected sanitizer keeps ASCII letters, digits and hyphens and rejects a result that becomes empty.
Sources
- README.mdSource checked 2026-09-08
- LICENSESource checked 2026-09-08
- packages/cli/package.jsonSource checked 2026-09-08
- packages/core/package.jsonSource checked 2026-09-08
- packages/viewer/README.mdSource checked 2026-09-08
- packages/cli/src/runtime.tsSource checked 2026-09-08
- packages/cli/src/editor-process.tsSource checked 2026-09-08
- packages/cli/src/mcp-connector.tsSource checked 2026-09-08
- packages/mcp/src/transports/http.tsSource checked 2026-09-08
- packages/mcp/src/storage/sqlite-scene-store.tsSource checked 2026-09-08
- packages/core/src/store/use-scene.tsSource checked 2026-09-08
- packages/viewer/src/components/renderers/node-renderer.tsxSource checked 2026-09-08
- packages/viewer/src/lib/renderer-capability.tsSource checked 2026-09-08
- packages/core/src/validation/validate-build-json.tsSource checked 2026-09-08
- packages/core/src/utils/heal-scene-graph.tsSource checked 2026-09-08
- packages/mcp/src/storage/slug.tsSource checked 2026-09-08