Skip to content

Editor Panels

The editor workspace is built from dockable panels. Each panel is a SolidJS component registered in the PanelRegistry. Panels can be dragged, resized, tabbed together, and rearranged into any configuration.

Core Panels

These five panels form the default layout and are the primary workspace:

Viewport

ID: viewport

Renders the 3D scene via a WebGPU canvas. The viewport runs its own render loop through EditorRenderSystem, which renders to an offscreen target and composites gizmo overlays, selection outlines (via JFA), and the grid.

Key features:

  • Orbit, fly, and pan camera modes
  • Translate, Rotate, Scale gizmo transforms via GizmoTransformHandler
  • Marquee (box) selection
  • Viewport toolbar with gizmo mode, coordinate space, and camera settings
  • Orientation gizmo showing current camera direction
  • Component gizmos (light radius, camera frustum, audio range) via ComponentGizmoManager
  • Viewport settings popover for grid, post-processing, and debug visualization

The viewport panel uses alwaysRender mode in dockview so the canvas stays alive even when the panel tab is hidden.

Hierarchy

ID: hierarchy

Displays all entities in the scene as a tree structure. Entities are organized by their parent-child relationships defined through the ECS hierarchy system.

Key features:

  • Drag-and-drop reparenting with world-transform preservation
  • Per-entity visibility toggle (hides from viewport)
  • Per-entity lock toggle (prevents selection and editing)
  • Multi-selection with Shift+click and Ctrl+click
  • Context menu: create entity, create child, duplicate, delete, rename, copy/paste
  • Prefab instance indicators (diamond icon)
  • Scene section headers when multiple scenes are loaded
  • Search filter for finding entities by name
  • Marquee selection within the hierarchy list

Inspector

ID: inspector

Displays and edits the properties of the selected entity or asset. The inspector uses a provider-based architecture through InspectionProviderRegistry, handling both entity inspection and asset inspection in a unified view.

Key features:

  • Specialized editors for common components:
    • Transform: Position, rotation, scale with number scrubbing
    • Camera: Projection mode, FOV, clipping planes
    • Lights: Directional, point, spot with color, intensity, range
    • Material: PBR properties, textures, blend modes
    • Collider: Shape type, dimensions, physics properties
    • Animation: Clip selection, playback controls
    • AudioSource: Volume, pitch, spatial settings
    • Rigidbody: Mass, drag, constraints
  • Add Component button with searchable, categorized dropdown
  • Remove component via component header context menu
  • Multi-entity editing (shows intersection of shared components)
  • Prefab override indicators and revert-to-source actions
  • Inspector lock (pin) to keep focus on a specific entity
  • Debug mode (Ctrl+Shift+D) for raw entity JSON view
  • Asset inspection when an asset is selected in the Asset Browser

Console

ID: console

Captures and displays log output from the engine and editor systems.

Key features:

  • Four log levels: Info, Warning, Error, Performance
  • Seven categories: General, Rendering, Physics, Audio, Editor, Script, Performance
  • Level and category filtering
  • Collapse duplicate messages with occurrence counts
  • Expandable stack traces on error entries
  • Pin important messages to keep them visible
  • Copy individual messages or full log to clipboard
  • Auto-scroll to latest messages
  • Budget violation detection from PerformanceMonitor
  • Virtual scrolling for handling up to 5,000 log entries

Asset Browser

ID: assets

Provides a file-explorer-like view of all project assets.

Key features:

  • Grid view with thumbnails or list view with metadata columns
  • Folder tree navigation with breadcrumb trail
  • Import files via drag-and-drop or OS file picker
  • Create new assets: scripts (Component, System, Startup templates), materials, prefabs, scenes
  • Sorting by name, type, size, or modification date
  • Asset type icons and metadata display
  • Context menu: rename, delete, duplicate, reimport, show in folder
  • Drag assets into viewport or hierarchy to instantiate
  • Import settings dialog for configurable import options
  • Marquee selection for multi-select

Secondary Panels

These panels are available from the View menu or command palette but are not part of the default layout:

Build

ID: build

Configure and execute project builds.

  • Build profile selection and configuration
  • Build mode (development/production) and artifact mode
  • Stage-by-stage progress display (Validate, Collect Assets, Process Scenes, Process Assets, Bundle, Optimize, Package)
  • Filterable build log with Info/Warning/Error levels
  • Build duration and output size summary
  • Run-after-build option to launch the playable output

Build Report

ID: build-report

Post-build analysis dashboard.

  • Summary: total size, duration, warnings, errors
  • Output file listing with individual sizes
  • Category breakdown (scripts, assets, scenes)
  • Per-stage timing breakdown
  • Diagnostic messages

Scene

ID: scene

Scene-level environment settings.

  • Ambient light color and intensity
  • Fog configuration (type, color, density, start/end distance)
  • Shadow settings (resolution, bias, cascade count)
  • Skybox configuration
  • Post-processing toggles

Profiler

ID: profiler

Real-time performance monitoring with four tabs:

  • Overview: FPS graph, frame time, draw calls, triangle count
  • Rendering: Detailed GPU metrics and render pass breakdown
  • Systems: Per-ECS-system timing bars
  • Memory: Heap usage and allocation tracking
  • Recording mode for capturing performance snapshots
  • Budget violation alerts

Timeline

ID: timeline

Keyframe animation editor.

  • Track list with signal and transform tracks
  • Keyframe placement on a time ruler
  • Playback controls: play, pause, stop, step, loop
  • Interpolation mode selection (linear, ease, step)
  • Zoom and scroll on the timeline view
  • Integration with the @web-engine-dev/timeline package

Settings (Preferences)

ID: settings

Editor preference configuration organized into categories:

  • General: Auto-save interval, tooltips, animations, undo limit, font size
  • Viewport: Grid settings, gizmo sizes, camera defaults
  • Theme: Light/dark base theme with token overrides
  • Shortcuts: Keybinding editor with conflict detection

Settings are persisted through SessionManager.

Plugins

ID: plugins

Plugin management interface.

  • Lists all registered plugins with state indicators (Activated, Loaded, Degraded, Error, Unloaded)
  • Plugin details: version, author, capabilities
  • Activate/deactivate toggles
  • Per-plugin configuration when a config schema is provided
  • Engine plugin bridge showing registered engine-level plugins

VCS (Version Control)

ID: vcs

Git integration panel with three tabs:

  • Changes: Modified, added, deleted files with staging controls and commit form
  • History: Commit log with author, date, and diff view
  • Blame: Per-line blame annotations for the selected file
  • Branch selector and remote sync status (ahead/behind indicators)
  • Unified and side-by-side diff view modes

Collaboration

ID: collaboration

Multi-user collaboration panel with three tabs:

  • Session: Connection status, user list with presence indicators, join/leave
  • Chat: Real-time chat between collaborators
  • Locks: Entity lock management to prevent editing conflicts

Test Runner

ID: test-runner

Run and display test results.

  • Test suite tree with pass/fail/skip indicators
  • Per-test duration and error output
  • Run all, run suite, or run individual test
  • Expandable error stack traces

Asset Preview

ID: asset-preview

Rich preview for the currently selected asset:

  • Textures: Full-resolution image with checkerboard background, zoom/pan, channel isolation (R, G, B, A, RGB), fit-to-view
  • Audio: Play/pause/stop, seek bar, volume, loop toggle, duration display
  • Scripts/Shaders: Source code with line numbers and copy button
  • Materials: PBR property summary with color swatches
  • Other: Type icon with metadata summary

Script Editor

ID: script-editor

In-editor script editing:

  • Multi-tab interface for opening multiple scripts
  • Syntax-highlighted code editing
  • Save with Ctrl+S / Cmd+S
  • Modified indicator on unsaved tabs
  • Integration with asset database for script asset tracking

Panel Registration System

Panels are registered using the PanelRegistry module (apps/editor/src/layout/PanelRegistry.ts). Each panel is defined by a PanelDefinition:

typescript
interface PanelDefinition {
  readonly id: string;
  readonly title: string;
  readonly component: Component<{ params?: Record<string, unknown> }>;
  readonly alwaysRender?: boolean;       // Keep alive when tab is hidden
  readonly selectionBehavior?: 'clear' | 'preserve' | 'custom';
}

Registration is straightforward:

typescript
import { registerPanel } from '../layout/PanelRegistry.js';

registerPanel({
  id: 'my-panel',
  title: 'My Panel',
  component: MyPanelComponent,
});

When the ExtensionRegistry is initialized, panel registrations also create PanelContribution entries so plugins can discover available panels.

Selection Behavior

The selectionBehavior property controls how clicking the panel background affects entity selection:

  • 'clear' (default): Background clicks clear all selections
  • 'preserve': Clicks never affect selection (used by Inspector, Asset Preview, Viewport)
  • 'custom': Panel handles selection logic internally

Layout Persistence

Layouts are serialized through dockview's toJSON() and stored via SessionManager plugin config. On startup, the editor attempts to restore the saved layout; if restoration fails (e.g., stale schema), it falls back to the default layout.

Key layout operations from DockviewService:

FunctionPurpose
openPanel(id)Open a panel (or activate if already open)
resetLayout()Reset to the default layout
loadBuiltinPreset(id)Apply a built-in layout preset
saveLayoutPreset(name)Save current layout as a named preset
loadLayoutPreset(name)Restore a named preset
exportLayout()Export layout as JSON string
importLayout(json)Import layout from JSON string

Proprietary software. All rights reserved.