Launching Your Server
Step-by-step setup for a fresh AXIOM-EMU server install on a Windows host.
This guide walks through a clean install from the files you downloaded off the customer portal to players connecting with the client. It assumes a single Windows machine (local test or dedicated host) running SQL Server.
1. Get the files
Sign in to the customer portal and download the latest server bundle and matching client bundle. The portal dashboard surfaces a banner when a new release is out and your servers haven't been upgraded yet.
Extract the server archive somewhere with no spaces or localized characters in the path. C:\AxiomServer is a safe default. You should end up with this layout:
AxiomServer\
├── ConnectServer\ ConnectServer.exe + ServerList.xml + Log\
├── DataServer\ DataServer.exe + DataServer.ini
├── GameServer\ GameServer.exe + configs
├── JoinServer\ JoinServer.exe + JoinServer.ini
├── Data\ shared game data (items, monsters, drops)
├── Tools\ ConfigEncoder, AxiomEditor, PngToOzt, SQL
├── migrations\ baseline database + SQL migrations
├── .manager\ update state (installed version, pristine configs). Do not delete or edit
├── AxiomServerManager.exe starts, monitors and updates the servers. Keep it here
└── ServerManager.xml the Manager's server list2. Add an antivirus exclusion before you launch anything
Windows Defender and most third-party AV products flag the server binaries because of the protection wrapper around them. If you skip this step, the EXEs get quarantined mid-run and you will chase phantom crashes.
Open PowerShell as administrator (right-click the Start menu → Windows PowerShell (Admin) / Terminal (Admin), or right-click the PowerShell icon → Run as administrator). Without elevation the cmdlet fails with an access-denied error.
Replace the path with wherever you extracted the server.
Windows Security → Virus & threat protection → Manage settings → Exclusions → Add exclusion → Folder → select the install folder.
Or use Windows Security → Protection history → Restore.
3. Paste your license key
Your portal license key has to be written into every server's config and into ConfigEncoder. All five locations validate the key at startup and refuse to run without it.
Grab the key from axiomemu.com/portal/licenses: click the license card to open its detail page, find the License Key field at the top, then click Click to reveal and use the copy button next to the revealed value.
DataServer
DataServer\DataServer.ini
LicenseKey=
JoinServer
JoinServer\JoinServer.ini
LicenseKey=
ConnectServer
ConnectServer\ConnectServer.ini
LicenseKey=
GameServer
GameServer\DATA\GameServerInfo - Common.dat
LicenseKey=
ConfigEncoder
Tools\ConfigEncoder\EncoderConfig.xml
<License Key="..." />
4. Install SQL Server
Minimum supported version: SQL Server 2022 (engine 16.00.1000). The shipped MuOnline.bak was taken on 2022, and SQL Server refuses to restore a backup onto an older engine - the file format is forward-compatible only. 2019, 2017, 2014, and 2012 will fail step 5 with Msg 3169. 2022 is the sweet spot; 2025 also works.
SQL Server Express (free, sufficient for private servers up to a few hundred concurrent players):
SQL Server Management Studio (SSMS) - pick any version, all are backward-compatible with older SQL Server engines:
During SQL Server setup:
Choose Mixed Mode authentication - this enables the
saaccount alongside Windows auth.Set a strong
sapassword and write it down. You will need it for the ODBC DSN.On the Server Configuration step, make sure SQL Server Browser is set to Automatic if you plan to connect by instance name.
5. Restore the MuOnline database
The backup ships at server\migrations\MuOnline.bak. The .mdf / .ldf paths baked into it are from the machine it was taken on, so the restore has to redirect them. The script below reads your instance's default data/log folders and builds the RESTORE dynamically, so the only thing you edit is the path to MuOnline.bak.
Connect to your SQL Server 2022 instance in SSMS using Windows Authentication (the account that installed SQL Server is already sysadmin; the sa password from step 4 is for DataServer/JoinServer at runtime, not this restore). New Query → paste, edit @bak, F5:
Success prints RESTORE DATABASE successfully processed ... in the Messages pane and muonline appears under Databases (F5 the node to refresh).
Verify:
Returns 0 on a fresh restore.
Common restore errors
Msg 3156orMsg 3634 - Access is denied- the SQL Server service account can't write to the default data folder. Rare, but happens on locked-down hosts; grant the service account write access to the folderSERVERPROPERTY('InstanceDefaultDataPath')returns.Msg 3169- backup was taken on a newer engine. See the troubleshooting entry at the bottom of this page; you're on SQL 2019 or older and need to install 2022 (step 4).Empty string /
NULLpath fromSERVERPROPERTY- only happens on very old engines or unusual installs. Fall back to an explicitRESTORE ... WITH MOVE ... TO N'C:\...\muonline.mdf'and hard-code the paths.
6. Set up the ODBC DSN
DataServer and JoinServer both talk to SQL Server through an ODBC DSN named MuOnline. The server bundle ships registry files that create the DSN for you.
6a. Multiple SQL Server instances? Edit the .reg first
The shipped MuOnline.reg and MuOnline64.reg hard-code "Server"="(local)", which resolves to the default unnamed instance. If you have more than one SQL Server installed - for example a leftover SQL 2019 alongside the SQL 2022 you added in step 4, or a named Express install like SQLEXPRESS02 - (local) either picks the wrong engine or fails to connect at all. Edit the .reg before importing so the DSN targets the 2022 instance that holds the restored muonline database.
Find your instance name. In SSMS, connect to the 2022 engine and look at the title bar - it shows
HOSTNAME\INSTANCENAME. Or runSELECT @@SERVERNAME;in a new query. Common values:SQLEXPRESS,SQLEXPRESS2022,MSSQLSERVER(the default instance - use(local)for this one).Open
server\migrations\MuOnline.regin Notepad (right-click → Edit, not Merge).Change the
"Server"line under theMuOnlineDSN key:
Use .\\INSTANCENAME for a named instance on the same machine (note the doubled backslash - .reg files require it), or HOSTNAME\\INSTANCENAME for remote. Leave (local) only if you're on the default unnamed instance.
Repeat for
MuOnline64.regif you plan to use AxiomEditor x64.Save, then import as below.
6b. Import the DSN
The files live in server\migrations\ (e.g. C:\AxiomServer\server-v1.0.0\server\migrations\):
MuOnline.reg- 32-bit DSN. Required; DataServer and JoinServer are both 32-bit.MuOnline64.reg- 64-bit DSN. Optional; AxiomEditor x64 uses this.
Double-click the file, confirm the UAC prompt, then confirm the import.
Run
C:\Windows\SysWOW64\odbcad32.exe(this is the 32-bit administrator - the one DataServer/JoinServer's DSN must live in).System DSN → Add → SQL Server (or ODBC Driver 17/18 for SQL Server if installed).
Name:
MuOnline. Server:(local)(or.\SQLEXPRESS,.\SQLEXPRESS02, etc. - match step 4).Authentication: With Windows NT authentication for a local install, or With SQL Server authentication +
sa+ the password from step 4 for remote / locked-down setups.Default database:
muonline.Click Test Data Source - it must succeed before you move on.
7. Configure server IPs
ConnectServer binds to all interfaces, so its own .ini has no IP field - only ports. The addresses your players (and your other servers) connect to live in a handful of other places. Pick your public IP (or 127.0.0.1 for a single-box local test) and replace it in each file below.
GameServer\DATA\GameServerInfo - Common.dat
If GameServer lives on the same box as DataServer, JoinServer, and ConnectServer, leave all three *Address lines at 127.0.0.1. If you split them across hosts, point each to the right internal IP.
ServerCode is the map-group ID that ties this GameServer instance to a <Server Code="..."> entry in MapServerInfo.xml and ServerList.xml - all three must agree.
JoinServer\JoinServer.ini
JoinServer uses this to push user and server status updates to ConnectServer.
GameServer\Data\MapServerInfo.xml
This is the address GameServer hands back to the client after the server-select screen. Replace the IP - keep the leading S, it's part of the format. The Port on each row must match the ServerPort in the corresponding GameServer's Common.dat.
ConnectServer\ServerList.xml
Edit the <Server> entries so the Code values match your MapServerInfo.xml / GameServer ServerCode, and set the display names you want on the server-select screen.
Tools\ConfigEncoder\ServerConfig.xml
Connection is the address the client uses to reach ConnectServer. Serial and Version have to match ServerSerial / ServerVersion in every GameServer's Common.dat - if you change them anywhere, change them in both places, or clients will fail the handshake.
Tools\ConfigEncoder\ClientConfig.xml
Point this at your patch server. Set Enabled="0" only if you're replacing the built-in updater with your own launcher DLL/EXE. See the comments above each block in ClientConfig.xml for every other tunable - graphics, interpolation, economy caps, launcher branding.
8. Encode the client configs
Before the first run, point ConfigEncoder at your client install by editing Tools\ConfigEncoder\EncoderConfig.xml:
Output Path- the client'sData\Local\folder. ConfigEncoder writes the encoded blobs straight into here.DLLIntegrity Path- the root of the client install, used to compute integrity hashes for its DLLs.
Then run Tools\ConfigEncoder\ConfigEncoder.exe. It reads ServerConfig.xml and ClientConfig.xml and writes:
ServerInfo.axiom- connection details (ConnectServer IP/port, serial, version).ClientConfig.axiom- client-side tunables (graphics, interpolation, economy caps, launcher branding).
Both files are consumed by the client only. GameServer reads its own GameServerInfo - *.dat files and never touches the .axiom blobs.
9. Start the servers
Use AxiomServerManager.exe in the root of the server folder, or launch the four EXEs by hand. Expected startup order:
Launching manually: open each server's folder, double-click the EXE, wait for the console to settle (no new red/error lines) before starting the next.
Using the Axiom Server Manager
Run AxiomServerManager.exe. The four servers are already in its list (ServerManager.xml), in the right order. Click Start All.
Each server shows its state, CPU, memory, players and live log. Server windows are hidden by default; untick Hide server windows to see them.
Stop All stops them in reverse order. It does not log players out or save them first, so players still online lose progress since their last save. Run
server.close.5min the GameServer's Commands tab and wait for 0 players before maintenance.Auto-restart starts a server again if it crashes.
+ Add adds another instance, for example a second GameServer. A second GameServer needs its own folder and its own
ControlPortin itsGameServerInfo - Common.dat, and the same port on its row in the Manager.Updates installs new versions. See Updating with the Server Manager.
The Manager talks to each server over a local control port. It is on by default and listens on 127.0.0.1 only. The setting is ControlPort (with ControlKey) in each server's own config file:
Server
File
Default ControlPort
GameServer
GameServer\DATA\GameServerInfo - Common.dat
55990
DataServer
DataServer\DataServer.ini
55991
JoinServer
JoinServer\JoinServer.ini
55992
ConnectServer
ConnectServer\ConnectServer.ini
55993
BridgeServer (paid addon)
BridgeServer\BridgeServer.ini
55994
If a row never shows "connected", check that ControlPort and ControlKey in that file match the port and key on that row in the Manager. ControlPort = 0 turns the control channel off.
Healthy startup looks like each server loading its config, opening its listening ports, and then going quiet aside from periodic status lines. If a server exits immediately, re-read its console - the vast majority of startup failures come down to:
Wrong or missing license key.
ODBC DSN not created, or pointing at the wrong instance / wrong credentials.
Port already in use (another AXIOM-EMU instance, another MU emulator, or SSMS holding a connection).
Address mismatch - e.g.
JoinServer.inipointing to a ConnectServer IP that isn't reachable.
10. Create an account and connect
Accounts live in the MEMB_INFO table. The shipped way to create them is AxiomEditor.
Run
Tools\AxiomEditor\AxiomEditor.exe.On first launch, configure the DB connection. Two options:
ODBC - reuse the
MuOnlineDSN. No password needed if the DSN uses Windows auth.Direct - server
127.0.0.1, port1433, databaseMuOnline, usersa, password as set in step 4.
Open the Accounts tab → New Account. Set username, password, and (optionally) pre-create a character.
Launch the client with the encoded
ServerInfo.axiomandClientConfig.axiomin place, log in with the account you just created, and you should land on the character-select screen.
Troubleshooting
Last updated