Project Structure

What a Vastopia project folder contains, which files ship to players and which to the server, and what every section of project.vastopia means.

8 min read

What a project is#

A Vastopia project is a plain folder on your disk. Everything that makes up your game lives inside it as ordinary files: JSON data, Godot scenes, 3D models, C# scripts and a handful of binary map files. There is no database and no hidden state; you can copy, zip, back up or put the folder under version control like any other directory.

The folder is identified by one file at its root, project.vastopia. The editor treats any directory that contains that file as a project, and refuses to open or delete a folder without it.

Two things make the layout worth understanding:

  • The folder is split into a client half (assets/) and a server half (server/). When you push a build, the client half is packed into a PCK that players download, and the server half is zipped and sent to the game server. A definition such as an item exists in both halves with different fields, and the editors keep the two copies in sync for you. See Data Editor overview for the split per data type.
  • Several directories are derived output or caches that the editor regenerates. They are never uploaded and are safe to delete.

Folder layout#

A project created from the bundled starter looks like this (asset folders such as audio/ appear the first time you import that kind of file):

Text
my-game/
├── project.vastopia          # Project identity and settings (INI)
├── game_config.json          # Player-facing metadata (title, description, starting map)
├── prop_library.json         # The map editor's prop library
├── interface_library.json    # Folder assignments for the GUI editor's interface list
│
├── assets/                   # CLIENT SIDE - packed into the PCK
│   ├── AssetLibrary.json     # Asset registry (every imported asset, keyed by ULID)
│   ├── maps/<map_name>/      # One directory per map
│   ├── data/                 # Client data JSON (items.json, npcs.json, objects.json, ...)
│   ├── interface/screens/    # Interface scenes (.tscn), incl. tabs/ and templates/
│   ├── models/               # 3D models, one folder per asset
│   ├── sprites/  textures/  audio/  anims/  skeletons/  icons/  vfx/
│   ├── branding/             # Game icon, cover, screenshots, loading screens
│   ├── images/  UI/  characters/   # HUD art, interface art, player character assets
│
├── server/                   # SERVER SIDE - zipped and uploaded with every build
│   ├── data/                 # Server data JSON + per-map spawn and collision files
│   ├── modules/              # C# gameplay modules
│   ├── scripts/              # C# scripts (commands, interfaces, npcs, objects, ...)
│   └── schemas/              # Script API schemas and schema-backed data
│
├── packs/                    # Build output (.pck files) - regenerated, never uploaded
├── .export_cache/            # Converted-model cache for fast exports - safe to delete
└── .vastopia_upload/         # Spool for assets queued for the cloud library

The client half: assets/#

Everything under assets/ is content the player's game client needs. When a build is exported, the editor packs it into four categories:

Pack categorySourceNotes
mapsassets/maps/One directory per map. See Map files and export for the files inside.
dataassets/data/ plus game_config.jsonThe client copies of items.json, npcs.json, objects.json, animations.json, vfx_database.json, tab_config.json, map_area_config.json, skills_config.json, and the interface_manifests/ folder.
uiassets/interface/screens/Interface scenes, including the tabs/ and templates/ subfolders.
assetsassets/models/, anims/, skeletons/, textures/, audio/, sprites/, branding/, icons/, vfx/Imported assets. Models are shipped as self-contained .scn scenes; see Models.

assets/AssetLibrary.json is the registry the Asset Manager maintains: every imported asset gets a ULID, a type and a path here.

The server half: server/#

The server never sees assets/. When you push a build, the editor zips exactly four subfolders of server/ - data, modules, scripts and schemas - into the server package.

FolderContents
server/data/Server copies of items.json, npcs.json, objects.json; loot_tables.json, skills_config.json, wisdom_config.json, world_settings.json, script_bindings.json, property_manifests.json, and systems.json (which gameplay systems are enabled).
server/data/maps/Per-map exports written when you save a map: npc_spawns/<map>.json, object_spawns/<map>.json, location_bounds/<map>.json and the binary collision file flag_data/<map>.terrain.
server/modules/C# gameplay modules, grouped into Commands, Content, Entity, Events, Social, Systems, Utilities and World.
server/scripts/C# scripts attached to commands, interfaces, NPCs, objects, items, shops, tasks, areas and more.
server/schemas/One folder per schema (Items, NPCs, Objects, Combat, Drops, Quests, Shops, Skills, ...) that powers Script Editor autocomplete and the schema data editors.

The server folder also carries VastopiaScripts.csproj, Directory.Build.props and a generated global-usings file. Those exist so an IDE can compile-check your scripts; see IDE setup.

Derived output and caches#

FolderWhat it isSafe to delete?
packs/.pck archives the editor builds from your project (packs/maps/<map>.pck, packs/data/data.pck, packs/ui/<name>.pck, packs/interfaces.pck). The editor watches assets/maps, assets/data and assets/interface/screens and repacks a couple of seconds after a change.Yes. Rebuilt on demand. Excluded from cloud saves and template exports.
.export_cache/models/Models converted to .scn for the exporter, keyed by a fingerprint of the source file. Warms up as you open maps and publish.Yes. The next export re-converts.
.vastopia_upload/Queue and spooled copies of assets waiting to reach the cloud asset library. Imports upload in the background; jobs sit here while you are offline or signed out.Only if you do not mind losing queued uploads.
*.bak, *.tmp-*Backups and atomic-write scratch left by the editor and the MCP server.Yes.
_upload.pck, _server_package.zip, _build_manifest.json, _upload_state.jsonScratch the publish pipeline writes at the project root while a build is in flight.Yes, when no build is running.

Anything dot-prefixed at the project root is treated as a cache: it is skipped by Save Project to Cloud and Export as Template, and the exporter never packs it.

project.vastopia#

project.vastopia is an INI file in Godot ConfigFile style: quoted string values, a blank line after each section header. The editor writes it; you rarely need to edit it by hand, but it is useful to know what each section controls.

SectionKeyMeaning
[project]nameDisplay name of the project. Also pre-fills the game title.
versionProject version string. Default "1.0.0".
created, modifiedISO-8601 timestamps. modified is stamped on every project save.
descriptionFree text, default empty.
data_formatOn-disk data format version (currently 1). Lets an older bundled MCP server refuse to write files it does not understand.
template_id, template_versionWhich template the project was created from — a bundled starter id such as mmo-starter (version bundled), or a published template id and version.
[paths]maps_dir, data_dir, interface_dir, ui_dirProject-relative folders, ending in /. Defaults: assets/maps/, assets/data/, assets/interface/screens/, assets/UI/.
[game]titleIn-game title.
starting_mapName of the map the game is configured to start on.
start_x, start_zPlayer spawn tile, written by the Game Settings editor.
[platform]game_idUUID linking this project to a game on the Vastopia platform. Generated when the project is created; required for publishing and cloud saves.
[systems]enabledThe list of enabled gameplay system ids. Projects created before this key existed read as "everything on".
[server]project_pathLocal folder of a Vastopia-Server source checkout (the one containing RealmServer.csproj). Used by Dev Test. Machine-specific.
[client]project_pathLocal folder of a Vastopia-Client checkout (containing project.godot). Machine-specific.
[branding]icon_path, icon_cdn_urlWhere the game icon lives locally and, after upload, on the CDN.
[export]pack_only_used_modelsWhether builds skip unreferenced models. Default true.
[world]max_world_sizeLargest map footprint per side in world units; 0 = unlimited.
[map_defaults]terrain_type, lighting_themePresets preselected when you create a new map.

The [server] and [client] paths describe your machine, not your game. They are left alone in cloud saves and templates, and re-stamped with the local checkouts whenever a project is downloaded or created.

game_config.json#

game_config.json is the small, player-facing metadata file. It is shipped inside the data pack and uploaded alongside every build. Every value is a string except tags (an array) and the spawn tile (integers):

JSON
{
	"description": "",
	"developer": "",
	"genre": "Adventure",
	"starting_map": "",
	"tags": [],
	"title": "Default",
	"version": "1.0.0",
	"website": ""
}

The New Project wizard fills title, description, developer, website, genre and tags. The Game Settings editor adds start_x and start_z and keeps starting_map current. See Game configuration for where each field is edited.

Where projects are kept#

  • Default location: the New Project wizard proposes a folder under your Documents directory (Documents/VastopiaProjects/), and projects downloaded from the cloud land there too. You can choose any writable location with Browse....
  • Recent projects: the editor remembers the last ten projects you opened. The list is pruned automatically when a folder disappears. Remove from Recent on a project card only forgets the entry; Delete Project... removes the folder from disk after a confirmation.
  • Game link: opening a project whose [platform] game_id is set records the game-to-folder mapping on this machine, so the hub can tell which of your account's games already live here.

Version control#

Because a project is plain files, git works well. Commit everything except the derived folders above. If you create a project with the MCP server, it initialises a repository for you with a .gitignore covering packs/, *.pck, server_data.zip, .vastopia_backups/, audit_log.jsonl, terrain_work/, *.bak, *.tmp-*, .godot/, .import/ and *.uid. The same list is a good starting point for a project you created in the editor.

With AI (MCP)#

  • get_project_summary - name, version, starting map, game id, maps and entity counts.
  • get_project_config - every section of project.vastopia as an object.
  • set_project_paths - change [paths] entries without touching the rest of the file.
  • validate_project - report entities that exist on only one side of the dual export, placements pointing at deleted definitions, dangling script bindings and leftover temp files.
  • list_projects, select_project, get_active_project, create_project - manage several projects in one workspace.
Spotted a mistake or something missing?Tell us on Discord