Workspace files (.xws)

A .xws file opens several Xenon projects as one editor and tooling workspace. It organizes projects; each .xeproj still owns compilation and dependency settings.

Workspace and project responsibilities

FileResponsibility
.xwsWorkspace name and the projects opened together for editing, indexing and analysis.
.xeprojSource root, artifact type, project references, profiles and native dependencies for one project.

Membership does not imply dependency. Two projects listed in one workspace remain independent unless one project's [references] projects setting names the other. The workspace loader never invents reference edges from list order.

Editor buffers are runtime state

Open and unsaved source text belongs to immutable document snapshots in the running Workspace. It is never written into .xws.

Minimal format

The file is UTF-8 text using the same TOML-style syntax as .xeproj. The [workspace] section accepts an optional nonempty name and a required nonempty projects string array.

[workspace]
name = "Game Workspace"
projects = [
    "Engine/Engine.xeproj",
    "Game/Game.xeproj",
    "Tools/Tools.xeproj",
]

Project paths are resolved relative to the directory containing the .xws file, never relative to the process working directory. Each entry must resolve to an existing .xeproj.

Explicit members and dependencies

Every path in projects is an explicit Workspace member and appears in Workspace snapshots and symbol search even when it has no dependency relationship with the other members.

If an explicit member references a project not listed in .xws, the loader discovers that project transitively through the existing .xeproj graph and includes it once as an implicit dependency member. If the dependency is listed explicitly, the same normalized logical project is reused; no second copy is created.

# Game.xws membership
Engine    Game    Tools

# Dependency edges still come from .xeproj
Game → Engine
Tools → none

The order of explicit entries is preserved, but it does not create a dependency or define a startup project.

Normalization and validation

Paths are normalized before identity and duplicate checks. Equivalent spellings such as Game/Game.xeproj, ./Game/Game.xeproj and Game/../Game/Game.xeproj therefore cannot create multiple logical projects; duplicate explicit entries are rejected with a source-line error.

ProblemBehavior
Missing or non-.xeproj memberWorkspace loading fails with the workspace path and source line.
Malformed projectThe existing .xeproj loader reports its normal validation error.
Duplicate normalized memberThe .xws loader rejects it explicitly.
Duplicate project names or invalid reference kindExisting project-graph validation rejects the graph.
Project-reference cycleExisting graph cycle detection reports the cycle.
Unknown section or settingThe strict Workspace parser rejects it with a line location.