Skip to content

Running a server

rebaserHEAD edited this page Oct 18, 2026 · 5 revisions

guide, committed verified 2026-10-18 bootstrap efc697d run 2026-10-18

How to run the server on your own machine and log in with your own client. Today it takes the client from the login screen to character select and character creation; entering the world comes with the next stage.

What you'll have

A server on your machine that your WildStar 16042 client logs in to, where you can create and delete characters. Everything listens on 127.0.0.1 unless you configure otherwise.

How it works, briefly

The server is one process. Your client signs on, logs in and reaches character select through it, and everything is saved to PostgreSQL. Character creation reads two of your client's own tables, so you extract them first with MapGenerator. Host has what happens at start-up and shutdown, and the server core design has the rest.

Before you start

  • A WildStar 16042 client. The repository holds no client files.
  • PostgreSQL 18. Earlier versions won't do: names and emails rely on a case-insensitive match that version 18 added.
  • The .NET 10 SDK, the version global.json names.

Procedure

  1. Create the database. In PostgreSQL 18, create a database and a role that owns it.

  2. Set two environment variables, and keep both out of any file in the repository:

    $env:Persistence__ConnectionString = "Host=localhost;Database=nexustomorrow;Username=nexustomorrow;Password=<password>"
    $env:Gateway__UnknownAccountSecret = [Convert]::ToBase64String([Security.Cryptography.RandomNumberGenerator]::GetBytes(32))

    Keep the secret the same across restarts.

  3. Create the schemas:

    dotnet run --project Source/NexusTomorrow.Server -- migrate

    It exits 0, or 1 with the error. The server won't start while a migration is pending, so run it again after an update.

  4. Extract your client's tables with MapGenerator, then point the server at the folder holding tbl:

    $env:Content__ClientDataPath = "<the folder MapGenerator wrote>"

    Without it, character creation offers nothing.

  5. Start the server:

    dotnet run --project Source/NexusTomorrow.Server
  6. Create an account at the server's console:

    account create <email> <password>
    

    Quote a password that has spaces. help lists the commands, and Command layer commands has every one.

  7. Start your client with ClientConnector, pointed at 127.0.0.1, and log in with that account. Copy ClientConnector into your client's Client64 folder, beside the client; you can start it from there or from a shortcut. On its first run it asks for the host and language and saves them beside itself, and after that it starts the client straight away.

Settings

Settings come from appsettings.json, then the environment (with __ for :), then the command line. The ones you're most likely to change:

Setting Default For
Persistence:ConnectionString none The database
Gateway:UnknownAccountSecret none Unknown accounts' stand-in credentials
Content:ClientDataPath none Your extracted tables
Gateway:WorldPublicAddress 127.0.0.1 The address your client reaches the world on
Realm:Name, Realm:Id NexusTomorrow, 1 How the realm presents itself
Realm:MaxCharactersPerAccount 12 Characters per account

Each system's full list is on its own page: Gateway, Owners, Persistence, Host.

What to expect

  • Logging in takes you to character select.
  • A character you create appears in the list. The client then selects it by itself and plays its opening cinematic, and after that it waits, because there's no world to enter yet.

Troubleshooting

You see Do
The server won't start, naming a setting Fix that setting; the message names it, never its value
"run NexusTomorrow.Server migrate first" Run step 3 again
The server won't start, waiting on its first character ids Check the database is up and the connection string reaches it
Creation offers no options Set Content:ClientDataPath to the folder holding tbl, and restart
The original launcher opens instead of the game Start the client with ClientConnector: the client only connects to a server when its command line begins with /auth
Logins are refused The database is unreachable; server status at the console says so
ClientConnector says it can't find the client Copy it into your client's Client64 folder, beside the client
You want to see what the client and server exchange Set Logging__LogLevel__NexusTomorrow.Gateway to Debug and restart: every message in and out is logged by opcode and name, never its values

Quick reference

Command Does
dotnet run --project Source/NexusTomorrow.Server -- migrate Applies every schema's migrations
dotnet run --project Source/NexusTomorrow.Server Runs the server
account create <email> <password> Creates an account, at the console
server status Accounts online, owner queues, the save backlog, the database
help Lists the commands

Every console command, with its permission, is on Command layer commands.

Where the code lives

Piece Path
The server Source/NexusTomorrow.Server/
Default settings Source/NexusTomorrow.Server/appsettings.json
The table extractor Source/NexusTomorrow.MapGenerator/
The client launcher Source/NexusTomorrow.ClientConnector/
The running steps, as the repository keeps them README.md

Clone this wiki locally