Primary question: Does your target browser environment support WebGPU, and can you work within a rapidly evolving 0.x API?
RepoDaily adoption score
RepoDaily rates this as 87/100 (strong) for adoption: evidence, installation path, production risk, differentiation, license clarity, and AI/agent fit are scored from the article sources and adoption notes.
5 source(s) across 4 source category/categories, plus a RepoDaily-specific evidence module when available.
6 workflow step(s), 6 next-action step(s), and 2 command/install signal(s) were detected.
Trending momentum is +338 stars, with maintenance/release/issue signals counted when present.
Risk is marked medium, with 4 security note(s) and 4 explicit skip condition(s).
3 opportunity lens item(s), 4 alternative(s), and 3 type-specific section(s) support differentiation.
License source or license wording is present.
2 AI/agent-related signal(s) were detected in the article text and metadata.
Project overview
Pascal Editor is an open-source 3D building editor that runs entirely in the browser, built on React Three Fiber and WebGPU. The repository is a Turborepo monorepo that splits functionality across four publishable npm packages — @pascal-app/core, @pascal-app/viewer, @pascal-app/editor, and @pascal-app/nodes — plus a Next.js application under apps/editor that serves as the standalone host. The architecture is designed so that the viewer renders scenes with sensible defaults and the editor layer adds interactive tools, selection management, and direct-manipulation UI on top.
The project's core data model revolves around nodes that extend a BaseNode type, each carrying an auto-generated ID with a type prefix (e.g. "wall_abc123"), a parentId reference, visibility flag, and an optional Camera property. Scene state lives in a Zustand store called useScene, which persists to IndexedDB and supports undo/redo through the Zundo library. The viewer maintains its own store (useViewer) for selection, level display modes (stacked, exploded, solo), and camera mode, while the editor app has a third store (useEditor) for active tool state, panel visibility, and editor preferences.
Version 0.6.0, released on 2026-04-21, introduced substantial capabilities: a multi-surface material system that allows click-targeted per-surface material editing for walls, stairs, and roofs; automatic wall-room generation where closed wall loops auto-split and produce slabs; stair-slab integration with driven cutouts; curved fence support; 13 material presets including granite, marble, parquet, and wood; and an export pipeline supporting GLB, STL, and OBJ formats. The release also added a street view / walkthrough mode and fixed several WebGPU initialization and fallback issues.
Why it is trending now
- 338 period stars at trending rank 13, reflecting growing interest in browser-native 3D architectural tooling
- Version 0.6.0 shipped a dense feature set including multi-surface materials, automatic wall-room generation, and GLB/STL/OBJ export — all contributed via merged pull requests from multiple community contributors
- WebGPU rendering with a documented fallback that skips post-processing when WebGPU is unavailable, making the editor usable across a range of browser capabilities
- Clean package separation allows embedding the viewer (@pascal-app/viewer) as a standalone component without pulling in editor-specific code
- Plugin system documented at editor.pascal.app/docs/developers/plugins with a worked example repository (pascalorg/plugin-trees)
Problem it solves
- Browser-based 3D architectural editing has historically required heavy desktop software (Blender, SketchUp, AutoCAD) or proprietary web platforms with limited extensibility
- Existing open-source web 3D editors often lack domain-specific features like wall-to-room auto-generation, multi-surface material assignment, and architectural export formats
- State management in 3D editing tools is complex — undo/redo, persistence, and cross-component synchronization are non-trivial to implement from scratch
- WebGPU adoption is still maturing across browsers, creating a need for runtimes that gracefully degrade
How it works
- Install the published packages via npm: @pascal-app/core, @pascal-app/viewer, @pascal-app/editor, and @pascal-app/nodes
- Load the built-in plugin before mounting the Viewer component: call loadPlugin(builtinPlugin) imported from @pascal-app/core and @pascal-app/nodes respectively
- The viewer renders the 3D scene using React Three Fiber with WebGPU, applying default camera, controls, and post-processing
- Scene data (nodes, root IDs, dirty nodes) lives in the useScene Zustand store, persisted to IndexedDB with undo/redo via Zundo
- The editor layer extends the viewer with interactive tools, selection management, and direct-manipulation UI — the viewer never imports from the editor app
- New node kinds and sidebar panels can be added as plugins following the contract documented at editor.pascal.app/docs/developers/plugins
Monorepo Package Architecture
The repository is structured as a Turborepo monorepo with workspaces spanning apps/*, packages/*, and tooling/*. The core package (@pascal-app/core) holds node schemas, scene state via Zustand, registry contracts, spatial queries, and an event bus — and contains no UI code. The viewer package (@pascal-app/viewer) handles 3D rendering through React Three Fiber, including shared render systems, default camera/controls, and post-processing.
A strict boundary rule is enforced: packages/viewer must never import from apps/editor. The viewer is designed as a standalone component, and editor-specific behavior is injected via props or children. This separation means you can embed the viewer independently and layer editing capabilities only when needed.
Each package maintains its own Zustand store. The useScene store in @pascal-app/core manages scene data (nodes, root IDs, dirty nodes, CRUD operations) and is persisted to IndexedDB with undo/redo powered by Zundo. The useViewer store tracks current selection (building/level/zone IDs), level display mode, and camera mode. The useEditor store in apps/editor holds active tool state, structure layer visibility, and panel states.
Commands and Development Surface
- Clone, install, and run: git clone the repo, cd editor, bun install, bun dev — editor starts at http://localhost:3002
- Prerequisites: Bun 1.3+ (packageManager is pinned to bun@1.3.0) or Node.js 18+ (engines.node >= 18)
- Linting and formatting: bun check (Biome check), bun check:fix (Biome auto-fix), bun lint, bun format
- Type checking: bun check-types runs turbo check-types across the monorepo
- Release scripts: gh workflow run release.yml with -f package=<name> -f bump=<patch|minor|major>; individual package releases available for viewer, core, editor, nodes, and mcp
- Cache cleanup: bun clean:cache removes .next, .swc, .turbo directories; bun restart kills port 3002, clears cache, and restarts dev
- Optional: copy .env.example to .env and add a Google Maps API key for address search — the editor functions fully without it
Integration Surface and Access Patterns
The stores expose both React hook subscriptions and direct state access for use outside React components. Inside React components, you subscribe with selectors: const nodes = useScene((state) => state.nodes) or const activeTool = useEditor((state) => state.tool). Outside React (in callbacks or systems), you access state directly: const node = useScene.getState().nodes[id] or useViewer.getState().setSelection({ levelId: 'level_123' }).
The plugin system allows shipping new node kinds and sidebar panels as separate packages rather than modifying built-ins. The contract is documented at editor.pascal.app/docs/developers/plugins, and pascalorg/plugin-trees on GitHub serves as a reference implementation. This makes the editor extensible without forking the core repository.
Export capabilities in v0.6.0 cover GLB, STL, and OBJ formats, enabling interoperability with 3D printing pipelines, game engines, and desktop CAD tools. The street view / walkthrough mode provides a first-person navigation experience within the modeled space.
Who should pay attention?
Good fit if
- Teams building browser-based architectural or interior design tools who want a composable viewer/editor foundation
- Developers exploring WebGPU rendering pipelines with React Three Fiber in a production-oriented codebase
- Projects that need plugin-based extensibility for custom 3D node types without forking the editor
- Anyone evaluating open-source alternatives to proprietary 3D design platforms for spatial planning
Skip for now if
- Projects requiring stable, production-frozen APIs — Pascal Editor is at v0.6.0 with a rapidly evolving feature set
- Applications targeting browsers without WebGPU support and where post-processing fallback is insufficient
- Teams needing server-side rendering of 3D scenes — this is a client-side browser runtime
- Use cases outside architectural/spatial 3D modeling where a general-purpose 3D engine would be more appropriate
Risks and cautions
Pre-1.0 software with a fast-moving API, WebGPU browser dependency, and a relatively young plugin ecosystem.
- Current version is 0.6.0 (released 2026-04-21) — breaking changes are expected before a 1.0 release
- WebGPU support varies across browsers; the editor includes a fallback that skips post-processing but functionality may be reduced
- The package overrides pin specific versions of three (0.185.1), React types (19.2.17), and TypeScript (6.0.3 native preview), which may conflict with consumer dependency trees
- Plugin ecosystem is nascent — the documented worked example (pascalorg/plugin-trees) is the primary reference, and community-contributed plugins are not yet widespread
- Multiple contributors are actively landing features (v0.6.0 alone merged 15+ PRs from at least 10 contributors), meaning the codebase and APIs shift frequently
- MIT licensed — Copyright (c) 2026 Pascal Group Inc., permitting commercial use, modification, and redistribution
- Optional Google Maps API key integration requires a .env file; the editor works fully without it, reducing surface area for deployments that do not need address search
- Scene data is persisted client-side to IndexedDB, not transmitted to a remote server by the core packages
- No authentication, authorization, or multi-user collaboration features are documented in the source pack — consumer applications must implement their own security layer
Alternatives to compare
| Approach | When to use | Trade-off |
|---|---|---|
Sweet Home 3D | You need a mature desktop interior design application with years of stability and a large furniture catalog | Free / open source (GPL) |
Blender (with Archimesh/Archipack) | You need a full-featured 3D modeling suite with BIM add-ons and are comfortable with a desktop-native workflow | Free / open source (GPL) |
IfcOpenShell | You need IFC-based BIM interoperability and open-source geometry processing rather than an interactive editor | Free / open source (LGPL) |
Proprietary web 3D platforms (Matterport, Spatial) | You need managed hosting, collaboration, and support without maintaining a self-hosted runtime | Subscription |
What this trend reveals
Build domain-specific node plugins
The plugin system with loadPlugin and a documented contract means you can create specialized node types — HVAC ducts, structural steel, landscape elements — without forking the core. Clone pascalorg/plugin-trees as a starting point.
Read the plugin docs at editor.pascal.app/docs/developers/plugins and test your plugin against the v0.6.0 node schema
Export pipeline for manufacturing and BIM
GLB, STL, and OBJ export opens paths to 3D printing, CNC fabrication, and import into Revit or Navisworks. A wrapper service that converts Pascal scenes to IFC could bridge the gap to enterprise BIM workflows.
Export a sample scene to STL and verify geometry integrity in a slicer or CAD import
Collaborative editing layer
The Zustand store pattern with getState/setState access outside React is well-suited for wiring a real-time sync layer (WebSocket, CRDT). The scene store's dirty-node tracking provides a natural change-detection hook.
Prototype a WebSocket bridge that subscribes to useScene dirty-node events and broadcasts deltas
RepoDaily verdict
Pascal Editor is one of the most architecturally clean open-source browser-based 3D building editors available — the package separation, Zustand store design, and plugin contract reflect thoughtful engineering. At v0.6.0 with WebGPU dependency and a volatile API, it is best suited for teams willing to track rapid changes and contribute upstream rather than for those seeking a drop-in stable platform.