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
| File | Responsibility |
|---|---|
.xws | Workspace name and the projects opened together for editing, indexing and analysis. |
.xeproj | Source 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.
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.
| Problem | Behavior |
|---|---|
Missing or non-.xeproj member | Workspace loading fails with the workspace path and source line. |
| Malformed project | The existing .xeproj loader reports its normal validation error. |
| Duplicate normalized member | The .xws loader rejects it explicitly. |
| Duplicate project names or invalid reference kind | Existing project-graph validation rejects the graph. |
| Project-reference cycle | Existing graph cycle detection reports the cycle. |
| Unknown section or setting | The strict Workspace parser rejects it with a line location. |