Skip to content
Server List

How to set up Votifier and NuVotifier for server list votes

Install NuVotifier, open the right port, paste your public key or token, and send a test vote before you go live.

GuideUpdated 7 min read

Votifier is the plugin that lets a server list tell your Minecraft server that someone voted. When a player votes for you here, we connect to your server’s Votifier port and hand over the vote: who voted, from which address, and when. A reward plugin on your side then gives out whatever you’ve set up.

Setting it up takes about ten minutes: install NuVotifier, pick a port, open it, paste your token or key into your listing, and send a test vote.

Votifier or NuVotifier?

Install NuVotifier. The original Votifier was last updated in 2015. NuVotifier carries it on as a drop-in replacement: any reward plugin that works with Votifier works with NuVotifier too. It also runs on proxies, forwards votes across a network, and adds a newer protocol that signs votes with a token.

We accept both protocols:

QuestionProtocol v1 (public key)Protocol v2 (token)
What you give the listThe contents of rsa/public.keyThe token from config.yml
Works withVotifier and NuVotifierNuVotifier
Confirms deliveryNo. The connection just closesYes. Your server replies “ok” or with the error

If you run NuVotifier, use the token. Your server answers every v2 vote, so a test vote can tell you exactly what went wrong instead of leaving you to guess.

Install NuVotifier on Paper or Spigot

  1. Download the latest jar from NuVotifier’s GitHub releases or its SpigotMC page. One jar covers Bukkit, Spigot and Paper (1.7.10 and newer), Sponge 7, BungeeCord, Waterfall and Velocity.
  2. If the original Votifier is installed, delete its jar first. Both register as a plugin named Votifier, so they can’t run side by side.
  3. Put the NuVotifier jar in plugins/ and restart the server. Don’t use /reload or a plugin manager to load it; NuVotifier doesn’t survive being reloaded.
  4. Check the console for Votifier enabled on socket /0.0.0.0:8192. The first start also prints your token and creates an RSA key pair.
  5. Install a vote listener. NuVotifier only receives votes; a plugin such as VotingPlugin or SuperbVote turns them into rewards.

Where the files are

  • Paper, Spigot and other Bukkit servers: plugins/Votifier/ (NuVotifier keeps the original folder name)
  • BungeeCord and Waterfall: plugins/NuVotifier/
  • Velocity: plugins/nuvotifier/, with config.toml instead of config.yml

Each folder holds the config file and an rsa/ folder containing public.key and private.key.

The config.yml settings that matter

On a single server the generated config usually works as-is. Without its comments, it looks like this:

plugins/Votifier/config.yml
host: 0.0.0.0
port: 8192
disable-v1-protocol: false
tokens:
  default: your-generated-token
forwarding:
  method: none
  pluginMessaging:
    channel: nuvotifier:votes
  • host is the address NuVotifier listens on. On first start it copies server-ip from server.properties, or uses 0.0.0.0 (every address on the machine) when that’s empty. Keep 0.0.0.0 unless your host tells you otherwise.
  • port defaults to 8192. It has to be free, and it can’t be your game port: if players join on 25565, Votifier needs a different number. Shared hosts often assign you one.
  • tokens holds the tokens for protocol v2, labelled by each list’s service name. NuVotifier uses the token that matches the list and falls back to default, so one default token covers every list. Ours is minecraftserverlist.info, which is also the name reward plugins like VotingPlugin see on our votes.
  • disable-v1-protocol refuses public-key votes when set to true. Only turn it on if every list you use sends votes with your token.
  • forwarding only matters on a network with a proxy. Leave it at none on a single server.

After editing, run /nvreload in the server console (it doesn’t work from in-game) or restart the server.

Networks with BungeeCord or Velocity

On a network, the proxy receives votes and passes them on to your game servers. Install the same NuVotifier jar on the proxy and on every backend server that hands out rewards, and put your vote listener on those backend servers. Server lists only ever get the proxy’s address and Votifier port.

NuVotifier can pass votes along in two ways. Its own documentation recommends plugin messaging for most networks.

Plugin messaging

On the proxy, keep a free port and switch forwarding on:

Velocity: plugins/nuvotifier/config.toml
port = 8192

[forwarding]
method = "pluginMessaging"

[forwarding.pluginMessaging]
channel = "nuvotifier:votes"

BungeeCord takes the same settings in YAML, in plugins/NuVotifier/config.yml. Then, on each backend server, receive votes over the channel and turn the Votifier port off by setting it to -1, since nothing outside should connect to it:

Backend server: plugins/Votifier/config.yml
port: -1
forwarding:
  method: pluginMessaging
  pluginMessaging:
    channel: nuvotifier:votes
  • The channel must be identical everywhere: lowercase, with the colon.
  • By default every backend gets every vote. Use excludedServers to skip some, or onlySendToJoinedServer to send each vote only where the player is, with joinedServerFallback for players who are offline.
  • If nobody is online on a backend, the proxy queues the vote and delivers it when someone joins. The default file cache keeps queued votes for 10 days.

Lock down your backend servers first

NuVotifier only protects the vote channel when every connection goes through your proxy. If players can reach a backend server directly, someone could send it fake votes.

Proxy forwarding

The other method makes the proxy act like a server list: it re-sends every vote to each backend’s own NuVotifier port, signed with that backend’s token. Each backend keeps a port (a different one per server on the same machine) and sets disable-v1-protocol: true. On the proxy, set the method to proxy and list the backends:

BungeeCord: plugins/NuVotifier/config.yml
forwarding:
  method: proxy
  proxy:
    survival:
      address: 127.0.0.1
      port: 8193
      token: token-from-the-survival-server

Proxy forwarding can’t queue votes for players who are offline, so only use it if plugin messaging doesn’t fit your setup.

Open the Votifier port

Votifier listens on TCP, on its own port. That port has to be reachable from the internet, just like your game port.

  • Game server hosts with a panel: look for a Network, Ports or Allocations page and add a port. Put that number in your config and restart. If your plan has no spare ports, ask support for one for Votifier; it’s a routine request.
  • VPS or dedicated server: allow the port in the machine’s firewall. If your provider also has a firewall in its web dashboard, allow it there as well.
  • Windows: add an inbound rule for the TCP port in Windows Defender Firewall.
  • Hosting at home: forward the TCP port on your router to the computer running the server, the same way you forwarded the game port.
Linux firewall
# Ubuntu and Debian (ufw)
sudo ufw allow 8192/tcp

# Fedora, Rocky Linux and other firewalld systems
sudo firewall-cmd --permanent --add-port=8192/tcp
sudo firewall-cmd --reload

Then test it from a different network, for example a laptop on your phone’s hotspot. Testing from the same network can succeed even when the outside world can’t get in.

Terminal
# macOS or Linux
nc -v your.server.ip 8192

# Windows PowerShell
Test-NetConnection your.server.ip -Port 8192

NuVotifier answers straight away with a line starting VOTIFIER 2 (the original Votifier sends VOTIFIER and its version). On Windows, look for TcpTestSucceeded : True. A refused connection or a long wait means the port isn’t open yet.

Connect it to your listing

In your dashboard, edit your server and fill in its Votifier section:

  • Votifier host: the public IP or hostname of the machine NuVotifier runs on. On a network, that’s the proxy.
  • Port: the port from your Votifier config, not the game port.
  • Protocol: NuVotifier v2 if you’re using the token, Votifier v1 for the public key.
  • Token or public key: for v2, copy the value under tokens: → default:. For v1, open rsa/public.key in a text editor and copy all of it.

Keep your keys and token private

No server list ever needs private.key. Your public key and token matter too: anyone who has them can send your server fake votes. Don’t post them in Discord or share them with players.

Not listed yet? Add your server first; the Votifier settings are part of the form.

Send a test vote

Press Send test vote in the same Votifier section. We send a vote for your username to the host and port in the form.

  • With a token (v2), your server replies, so the result tells you whether the vote was accepted, or shows NuVotifier’s error message.
  • With a public key (v1), the protocol has no reply. We can confirm that we connected, but only your console can confirm the vote was read.

In the console, a delivered vote looks like this:

Server console
[Votifier] Got a protocol v2 vote record from /203.0.113.24:51736 -> Vote (from:… username:… address:… timeStamp:… additionalData:null)

A problem shows up as a warning starting with Unable to process vote from, followed by the reason. The next section covers the usual ones.

To test your rewards without the list, run /testvote YourName in the server console, or /ptestvote YourName on a proxy. It creates a vote locally, so it checks your reward plugin, not your port.

Common errors and how to fix them

Nothing appears in the console

The vote never reached NuVotifier. Work down this list:

  • Look for Votifier enabled on socket in the startup log. If it’s missing, NuVotifier didn’t start, and the lines around where it should be say why.
  • Make sure the port in your listing matches the port in your config.
  • Open the port in every firewall on the way in, then test it from outside your network.
  • If the machine has more than one IP address, set host to 0.0.0.0.

“Votifier was not able to bind to …”

Something else is already using that port, or host is set to an IP address that isn’t on this machine. Pick another port (and open it), or set host to 0.0.0.0, then restart.

“Could not decrypt data … Make sure the public key on the list is correct.”

The public key in your listing doesn’t match the server’s key pair. Copy rsa/public.key again, all of it, without adding spaces or line breaks. If you ever deleted the rsa folder, NuVotifier made a new key pair on the next start, and every list needs the new public key.

“Signature is not valid (invalid token?)”

The token in your listing doesn’t match your config. Copy it again. If you’ve added a token for a specific list under tokens, that list must use that token, not default.

“Unknown service …”

There’s no token for the list’s service name and no default token either. Add a default token back, or delete the whole tokens section and restart: NuVotifier then generates a new default token and prints it in the console. Update your listing with it.

“This server only accepts well-formed Votifier v2 packets.”

disable-v1-protocol is true, but your listing sends votes with your public key. Switch the listing to your token, or set the option back to false.

Votes arrive, but nobody gets a reward

NuVotifier did its part; the reward side didn’t. Make sure a vote listener is installed and configured, then run /testvote YourName in the console to check its rewards on their own.

The proxy logs votes, but the backend servers don’t

  • Check that the channel is exactly nuvotifier:votes on the proxy and on every backend.
  • Check the backend isn’t in excludedServers (or, with whitelist: true, that it is).
  • If nobody was online on that backend, the vote is waiting in the queue until someone joins.

It stopped working after /reload

Reloading breaks NuVotifier’s network listener. Restart the server fully, and use /nvreload for config changes from now on.