Multiplayer / Dedicated server

Run your own server.

A server keeps a multiplayer game open around the clock, so friends can drop in whenever they like. Run it on a spare PC, a Raspberry Pi or a cheap VPS, and list it for everyone if you want.

Downloads

The NOVA Swift Dedicated Server is one small standalone program. It doesn't need the game, a pilot or any EV Nova data: it carries the session (rules, chat, moderation, the plug-in check) while each player's own game runs their ship. You run it from a web admin panel in your browser.

Linux

x86_64 · PCs and VPSes

NovaSwiftServer-linux-x86_64.tar.gz

Linux ARM

arm64 · Raspberry Pi 4/5, Oracle Ampere

NovaSwiftServer-linux-arm64.tar.gz

Windows

x86_64 · double-click to start

NovaSwiftServer-windows-x86_64.zip

macOS

Apple Silicon

NovaSwiftServer-macos-arm64.zip

Beta. The server is new (server-v1.0.0-beta.1): builds for Linux, macOS and Windows, over IPv4 and IPv6. The Linux installer runs the official server on a Google Cloud VM; the Docker files live in the repository under packaging/server/ and haven't been tried yet, so please report anything that goes wrong.

  • No game data. Nothing copyrighted to copy onto a VPS.
  • Zero setup. It starts with sensible defaults, makes server.cfg next to itself and prints the admin address and a one-time password.
  • Web admin panel on port 53737 with a four-step setup wizard, players (kick, ban, message), live settings, plug-ins from the catalog, the public listing helper, a network check and live logs.
  • Plain-language errors, for example "Port 53735 is already in use. Is another server running?".
  • Everyone plays together. Linux, Steam Deck, Windows and Apple players share the same server.

Where to run it

The server is light (a few MB of memory per player, no simulation). Anything that can stay switched on will do.

WhereCostGood forNotes
Your own PCFreeEvenings with friendsOnly up while the PC is on. Needs port forwarding on your router.
Raspberry Pi or old laptopFree if you have oneA 24/7 home serverUses a few watts. Same port forwarding as a PC.
A small VPSFree tiers exist (Google Cloud e2-micro), or a few dollars a month (Hetzner)A public serverHas a public address already: just open the ports in its firewall.
Tailscale or ZeroTierFreeFriends only, no forwardingEveryone joins the same private network and connects to your 100.x.y.z address. Can't be listed publicly.

Set it up in 5 minutes

  1. Download and start it

    Unpack the download. On Windows double-click Start Server.bat (or NovaSwiftServer.exe). On Linux or macOS run ./NovaSwiftServer in a terminal. It prints a box with your admin panel address and an admin password shown only once: write it down.

  2. Open the admin panel

    On a desktop your browser opens by itself on http://localhost:53737 and signs you in for the first-run wizard. On a headless machine open the printed address from your own computer (or through an SSH tunnel, see below).

  3. Answer four questions

    The wizard asks for a name, open or password (plus player slots and the rules: Safe, Full stakes or Custom), which plug-ins to run (optional, picked from the community catalog), and whether you want a public listing.

  4. Open the ports

    Forward UDP 53735 and 53736 on your router, or open them in your VPS firewall (next sections). The panel's Network page has a "can players reach me?" check and an automatic router (UPnP) button.

  5. Join it

    In the game choose Multiplayer, then Quick Connect, and type the address from the dashboard (it has a Copy button). Anyone on your network sees it under LAN automatically.

Pick your path

  1. Download the zip for your system and unpack it anywhere (it keeps its settings and logs in that folder, so it's portable).
  2. Start it: double-click on Windows, ./NovaSwiftServer on macOS and Linux. On macOS the first run may need right-click, Open because the build isn't notarised yet.
  3. Finish the wizard in the browser that opens. Forward the ports (or tick UPnP in Settings).
  4. Settings has Start with this computer (a scheduled task on Windows, a login item on macOS) if you want it back after a reboot.

Open the ports

PortProtocolWhat it's forOpen to the internet?
53735UDPThe game itselfYes, players need it
53736UDPStatus pings (server lists, player counts, latency) and LAN discovery. Game port + 1 if you change the game port.Yes, to show as online in server lists
53737TCPWeb admin panelNo. Keep it on your own network, or reach it over SSH or a VPN. The panel is plain HTTP.

In your router's settings, forward UDP 53735 and UDP 53736 to the computer running the server, or press Try automatic port forwarding (UPnP) on the panel's Network page (many routers have UPnP off).

Then give players your public address (the Network page looks it up). If your router's WAN address differs from it, or starts with 100.64 to 100.127, your provider uses carrier-grade NAT and forwarding can't work: use a VPS or Tailscale instead. Many routers can't loop back to their own public address, so test from your phone on mobile data.

The admin panel

PageWhat you do there
DashboardStatus, uptime, players, bandwidth, version, update notice, and the address players type, with a Copy button.
PlayersWho is online (ping, star system, time), kick, ban, message one player, or announce to everyone.
SettingsName, description, welcome message, region, slots, join password, rules, ports, LAN visibility, UPnP, admin password, updates, start with the computer. Most changes apply instantly; rules change for players already online.
Plug-insBrowse and search the NovaSwift catalog, turn plug-ins on (the server downloads them), or upload your own file. Gameplay plug-ins are required; art and sound plug-ins are automatically optional. Catalog plug-ins get the one-click Install & Join prompt in the game; your own file is marked "players must get this themselves".
Public listingFill in owner and address, see a checklist, copy the ready-made servers.json entry, and open the pull request on GitHub.
NetworkThe ports to open, your addresses, a public-IP lookup, a local self-test, UPnP, CGNAT warning, and router, VPS and Tailscale instructions.
LogsA live tail of joins, refusals and errors (also saved in logs/server.log).
BansThe blocked addresses; add or lift one.

Security. The panel is protected by the generated admin password and a login lockout, but it is plain HTTP. Bind it to this computer only in Settings (Admin panel is reachable from: This computer only) if the machine is on the internet, and use an SSH tunnel. Lost the password? Run NovaSwiftServer --reset-admin-password.

server.cfg and the console

Everything lives in one server.cfg next to the program (or, if that folder isn't writable, in your user data folder; --data FOLDER picks one). The panel rewrites it when you save, so you rarely touch it. Changes made by hand need a restart.

[server]
name = Joshua's NovaSwift server
description = Friendly co-op, newbies welcome
port = 53735                  # UDP; port + 1 answers pings
max_players = 8
password =                    # empty = open
motd = Welcome, pilot!        # shown in chat when someone joins
region = eu
lan_announce = true
upnp = false

[rules]
preset = safe                 # safe | full | custom
# custom only: pvp_damage_real, death_real, friendly_fire, allow_pvp, allow_trade, game_speed

[admin]
port = 53737
bind = 0.0.0.0                # 127.0.0.1 = this computer only
password_hash =               # set from the panel

[plugins]
enabled = frozen-heart        # catalog ids and uploaded folder names

[public]
listed = false
address = play.example.com
owner = Jane
contact = discord: jane

[updates]
check = true
auto_update = false

[bans]
203.0.113.7 = griefing

Command line: --data DIR, --port N, --admin-port N, --no-browser, --no-stdin, --reset-admin-password, --version. Console commands (type them into the server window):

CommandDoes
statusName, uptime, players, rules, address
playersWho's connected (id, name, ping, address)
kick <id|name> [reason]Remove a player
ban <id|name> / unban <ip>Remove and block a player's address, or lift a ban
say <text>Message everyone
rules [safe|full]Show or switch the stakes
pluginsRequired and optional plug-ins
quitStop the server

Passwords. A join password is sent hashed, but game traffic isn't encrypted. Don't reuse a password that matters.

Security

The server is built for the public internet. The admin panel listens on this machine only by default (use an SSH tunnel; the installer enforces it), logins lock out with growing waits, passwords must be strong, and every admin action is written to an audit log. The Linux service runs as a no-login account inside a systemd sandbox (read-only system, no capabilities, filtered system calls); the Docker image runs unprivileged with a read-only file system.

On the game port the server rate-limits and size-limits every connection, blocks flooding addresses for ten minutes, refuses to answer oversized or unpadded status pings (so it cannot be used to amplify an attack), strips forged identities from relayed messages, and cleans player names and chat. Admins can kick, ban, mute and run an invite-only allowlist; players can /votekick, /report and block others. Updates install only from signed GitHub releases, and plug-in downloads are HTTPS-only, size-capped and unpacked safely.

Honest limits. A player who is the sync authority of a star system runs that system's game logic, so a modified client can cheat within plausible limits there; game traffic is not encrypted; the panel has no built-in HTTPS (tunnel or reverse proxy). Details: docs/SECURITY.md.

Keep it running

The Linux installer sets up a systemd service that starts at boot and restarts after a crash: sudo systemctl status novaswift-server, journalctl -u novaswift-server -f. Docker uses restart: always. On Windows and macOS use Start with this computer in Settings. The server checks GitHub for new versions (tag server-v…) and shows a notice; it only installs them if you turn on automatic updates.

Get listed

The public server list is a JSON file in the NovaSwift-Plugins repository. Both the game's browser and the server list on this website read it. The panel's Public listing page does the paperwork:

  1. Fill in the details

    A public address (a DNS name is best), your name and a contact such as a Discord name. The checklist tells you what's missing.

  2. Copy your entry

    The panel generates the entry, including the content hash of every gameplay plug-in you require. Nothing is uploaded automatically.

  3. Open the pull request

    The button opens servers/servers.json on GitHub in edit mode: paste the entry into the list and choose Propose changes. A check runs on it, and once it's merged your server appears in the game and on the website.

Rules for listing: a public address (no 192.168.x.x), no password, honest rules labels, plug-ins players can get from the catalog, family-friendly names, and a contact. Servers that stay offline for a month or two may be removed. Until you're listed players can join with your address.

{
  "id": "example-eu",
  "name": "Example Sector",
  "host": "nova.example.com",
  "port": 53735,
  "region": "eu",
  "description": "Friendly 24/7 server, safe rules, stock EV Nova.",
  "owner": { "name": "Jane", "contact": "discord: jane" },
  "rules": "safe",
  "plugins": [],
  "maxPlayers": 12,
  "added": "2026-10-13"
}

The old headless mode

Before the standalone server, the Linux game build could run headless with --server. It still works, but it needs your EV Nova data on the machine and has no web panel, so it is legacy: prefer the Dedicated Server above.

scripts/run-dedicated-server.sh --name "My Server" --port 53735 --max-players 8 --rules safe

FAQ and troubleshooting

Do I need EV Nova or the game on the server?

No. The server never reads game data; it only compares players' plug-in lists. Plug-ins you enable are downloaded from the community catalog (or uploaded by you) to the server's own plugins folder.

"Port 53735 is already in use"

Another server (or a game you are hosting) is using it. Stop that, or change the port: start with --port 53745, or fix it in server.cfg. The admin panel still opens so you can change the port there.

Friends can't connect

Check UDP 53735 is forwarded to the right machine and allowed in its firewall. Test from outside your network, and use the panel's Network page. If your provider uses carrier-grade NAT, forwarding won't work: use a VPS or Tailscale.

The server shows as offline in lists but people can join

Status pings use UDP 53736 (game port + 1). Forward and allow that port too.

Players get "plug-ins" errors

Everyone needs the same gameplay plug-ins as the server. The game lists what to install, disable or update, and offers one-click Install & Join for catalog plug-ins. Cosmetic plug-ins don't count. For plug-ins you uploaded yourself, players must get the same file.

UPnP didn't work

Many routers ship with UPnP turned off, and it can't help behind carrier-grade NAT. Forward the ports by hand.

I forgot the admin password

Run the server once with --reset-admin-password. It prints a new password and exits.

Does it work with Apple players?

Yes. Mac, iPhone, iPad and Apple TV players join by address, from the server list or Quick Connect, the same as desktop players.