Migrating from MTA

Moving a Multi Theft Auto server to Vital.sandbox


Overview

MTA: San Andreas is an open-source multiplayer modification for GTA San Andreas. Its scripting environment runs on top of the GTA SA engine with Lua, and supports custom assets, UIs, and server-side logic.

Vital.sandbox is a standalone platform with no dependency on GTA SA or its assets. Vital.sandbox runs on Godot 4 + C++17 with a purpose-built Lua sandbox. Asset formats, the resource system, and scripting patterns differ from MTA.


Platform comparison

AreaMTAVital.sandbox
Open sourcePartially — networking layer is closed sourceYes
Base game requiredYes — GTA SA clientNo — standalone
LicensingNo restrictionsNo restrictions
HostingSelf-hostedSelf-hosted
DiscoveryExternal master listExternal master list
MonetizationYour own implementationYour own implementation
Revenue cutNoneNone
LanguageLua, primarily single-threadedLua — async threads, promises, event-driven, per-environment isolation
MaintenanceActiveActively developed
RenderingGTA SA rendererGodot 4 — PBR, SDFGI, SSR, SSAO, volumetric fog, glow, full GFX API
PhysicsGTA SA physicsGodot physics — rigid body, character, vehicle, area, collision shapes, raycast
NetworkingMTA network layer (closed source)Built-in sync — net IDs, ISyncable, server-authoritative replication
UICEF browser + MTA GUINative WebView, Canvas 2D, SVG, Render Targets, custom fonts and textures
AudioOpenAL via GTAAudio 2D + Audio 3D — spatial attenuation, pitch, FX chain
Model formats.DFF (RenderWare)GLB
Texture formats.TXD (RenderWare)JPG, PNG, WEBP, BMP, DDS, KTX, EXR
Collision formats.COLBuilt into GLB
Audio formatsGTA SA audioOGG, WAV, MP3
DatabaseMySQL via pluginMySQL — core.database with async query API
HTTPFetch via pluginutil.http — GET/POST, custom headers, timeout
File I/OfileOpen / fileWrite / fileReadutil.file — read, write, hash, delete

What carries over

SystemMTAVital.sandbox
EventsaddEventHandler
triggerEvent
triggerClientEvent
util.event.on
util.event.off
util.event.emit
util.event.emit_callback
TimerssetTimer
killTimer
util.timer.create
util.timer.next_tick
HTTP• Fetch via pluginutil.http.get
util.http.post
Database• MySQL via plugincore.database.create
core.database_query.select
core.database_query.insert
core.database_query.update
core.database_query.delete
core.database_query.fetch
core.database_query.execute
3D ModelsengineLoadDFF
engineLoadTXD
engineLoadCOL
engineApplyShaderToWorldTexture
core.model.load
core.model.unload
core.model.create
Vehicles• MTA vehicle APIphysics.vehicle_body.create
physics.vehicle_wheel.create
UI• CEF browser
• MTA GUI elements
core.webview.create
core.svg.create
core.svg.create_from_raw
Audio• OpenAL via GTAcore.audio_2d.create
core.audio_3d.create
Images• GTA SA texturescore.image.create
File I/OfileOpen
fileWrite
fileRead
util.file.read
util.file.write
util.file.exists
util.file.delete
util.file.hash
util.file.size
util.file.contents
Networking• MTA sync layercore.engine.get_entity_by_net_id
Async scripting• Coroutine-basedutil.thread.create
util.thread.current
util.promise.create

What does not carry over

  • GTA San Andreas assets — map, vehicles, weapons, peds, interiors. You need your own assets in supported formats.
  • GTA-SA specific APIs — ped animation sets, weapon pickups, wanted level, and anything that addresses the GTA engine binary directly. These have no equivalent.
  • MTA XML resource format — Vital.sandbox uses manifest.yaml per resource with a different script declaration and dependency structure.
  • Built-in game world — there is no world loaded by default. Map, terrain, and environment are your own assets to load.

On this page