Repository navigation
Upgrade and Rollback
This guide is for administrators updating an existing installation, including standalone Paper servers and Velocity/BungeeCord networks. It focuses on preserving voting data and having a tested rollback before replacing a JAR.
Version baseline (November 2026): The latest published stable release is VotingPlugin 7.1.1, published July 23, 2026, and compiled for Java 21. Changes on the
master/7.2-SNAPSHOT development line may not exist in that stable release. Check the release list and Spigot resource for the exact artifact being installed.
Record:
- VotingPlugin build/version currently running, and the target build/version.
- Bukkit/Paper version, Java version, and whether you use a standalone server or a Velocity/BungeeCord network.
- VotifierPlus or NuVotifier version and how inbound votes reach VotingPlugin.
- Current storage:
Config.ymlβDataStorage: SQLITEorMYSQL, including relevant driver and database type. - Other plugins receiving voting events or invoking VotingPlugin/AdvancedCore APIs, and any custom reward or placeholder integrations.
Do not assume a feature documented for a development commit is in the published stable JAR. If the wiki labels something development-only, verify the feature against the actual artifact you are upgrading to.
Take a coordinated, consistent recovery point while all data writers are stopped. Announce a maintenance window, stop external vote intake, and cleanly shut down every participating server and proxy before copying the plugin files, Users.db, or the shared SQL database. VoteShop purchases, scheduled resets, background saves, and queued rewards may continue writing even after external voting stops. An alternative is a genuinely coordinated application-consistent snapshot of both SQL storage and all plugin files, with writes quiesced across every node. Do not copy Users.db while its server is live.
Back up the whole plugins/VotingPlugin/ folder rather than just one YAML file, including files normally generated by the plugin. Take the SQL dump and file snapshots within the same stopped/quiesced maintenance window so they represent a matching restore point.
| Environment | Minimum backup |
|---|---|
| Standalone / SQLite |
Users.db and entire VotingPlugin configuration/data directory, plus previous VotingPlugin and Votifier listener JARs |
| Standalone / MySQL | Consistent SQL database backup plus configuration/data directory and previous JARs |
| Proxy network | One consistent SQL backup and all proxy/backend VotingPlugin configuration directories, selected listener configuration, and previous plugin JARs |
| Optional Control integration | Its separately managed backup/snapshot plan; do not assume a VotingPlugin folder copy includes the Control service's state |
Never edit ServerData.yml directly; backing it up is different from modifying it. Protect copied SQL credentials, Votifier private keys, proxy secrets, and backups themselves.
A file-only backup is not sufficient for an SQL-backed installation, and rollback without restoring related data may leave counts/points/streaks inconsistent.
- Build a test server with an isolated copy of the configuration and a nonproduction copy of the database.
- Install the correct JAR for the platform and start with the target Java 21 runtime.
- Review console errors, new/removed config keys, listener compatibility, and storage-driver availability.
- Compare behavior for
/vote, website links, rewards, vote points, streaks, VoteParty, and monthly/daily resets. - Run an internal
/av vote <player> <site>test and also a real/listener-generated Votifier test; the internal command does not verify the public listening port. - Verify an offline vote or a reconnect if your server relies on queued rewards. For proxy networks, test each eligible backend.
- Keep an exact record of the candidate build and the rollback procedure. Avoid enabling unrelated new features during the same upgrade.
Do not run a staging listener against a production voting website and databaseβthat could create duplicate votes or reward effects.
- Complete the isolated staging test described above, then schedule maintenance for production.
- Stop external voting, cleanly shut down the server, and capture the consistent filesystem and (if used) SQL backup while stopped. Do not rely on Bukkit
/reloador a hot-swap. - Replace the VotingPlugin backend JAR, keeping the previous artifact for rollback. Update the listener only when required and verified separately.
- Start the server; inspect startup errors and the configured data-storage type.
- Compare existing
Config.ymlandVoteSites.ymlwith release defaults without overwriting local customizations. - Perform the internal + real Votifier checks, inspect vote totals and reward delivery, and then reopen voting.
See Getting Started: Standalone for where the files live.
The normal released topology installs VotingPlugin on the proxy and all participating backends, with a shared SQL database and a compatible Votifier listener on the proxy.
- In staging, test proxy-to-backend compatibility and the selected
BungeeMethod(usuallyPLUGINMESSAGING). - Schedule a maintenance window. Do not assume that every combination of stable and development proxy/backend versions can interoperate.
- Stop external vote intake and cleanly shut down every participating proxy and backend, allowing pending writers to finish or be safely quiesced.
- With all nodes stopped, back up every node and the shared SQL database as one coordinated restore point, then update the proxy and backend VotingPlugin JARs together.
- Ensure each backend still has a unique
Servername and the proxy and backends use compatible SQL settings and matching communication channels. - Restart nodes, verify
/votingpluginproxy status, then test internal forwarding and a real/listener-generated vote into the proxy. - Check that a single incoming vote does not create duplicate rewards via multiple forwarding routes.
See Proxy Setups and Votifier Troubleshooting for the transport options and tests.
Do not blindly downgrade a running server or keep writing to a database with incompatible versions.
- Stop vote intake and all affected servers/proxies.
- Keep the failed installation's logs and a separate diagnostic backup.
- Restore the previous JARs and their corresponding configuration files.
- If the new version changed the storage format or wrote incompatible data, restore the matching consistent database/SQLite backup as well. Coordinate all nodes if shared SQL is involved.
- Restart the previous deployment as a whole, verify startup/storage connectivity, and run a bounded test vote.
- Reconcile any votes received since the snapshot before reopening, rather than assuming those votes will automatically reappear.
Rollback can lose activity between the backup and failure. A recoverable backup and a maintenance window matter more than a quick JAR swap.
Do not combine an ordinary JAR upgrade with a storage or UUID migration unless you have tested the exact combination.
The storage migration guide documents /av converttodata <storage> and /av convertfromdata <storage>. These commands copy user data and do not change DataStorage automatically. Back up source and destination, pause vote intake, verify the copy, switch storage, and restart only after confirmation.
For existing proxy networks, keep the supported shared-SQL layout; a local SQLite backend is not a drop-in replacement for the shared database.
Changing OnlineMode or BedrockPlayerPrefix can change which identity receives votes, points, and rewards. Coordinate proxy/backends and plan a separate migration with backups and verification; do not flip these settings just to fix a single unmatched vote.
See Online / Offline Mode and Bedrock Player Support.
- Target JAR and Java version are known and supported
- Previous JARs, plugin folders, and SQL/SQLite state have verified backups
- Standalone or every proxy/backend component starts cleanly
- No storage-driver, service-site, UUID, or proxy transport errors
- Internal test and real Votifier vote both work
- Total, points, per-site rewards, milestones, VoteParty, and offline delivery meet expectations
- Rollback steps and source backup are retained until confidence is established
File Layout Β· Storage Migration Β· Getting Started Β· FAQ
- Vote Milestones
- Vote Streak System
- Vote Reminders β Current System
- Legacy Vote Reminding
- Vote Broadcast System
- Vote Logging
- Webhooks
- Time Changes
- Month Date Totals
- VoteShop
- Rewards Cookbook β Copyable Recipes
- Rewards Overview β Start Here
- Special Rewards
- Reward System Concepts
- Reward File Format
- Where to Set Rewards
- All Reward Possibilities
- AdvancedPriority Rewards
- Reward Examples
- Delayed Reward Command
- World Example
- VotingPlugin-Specific Rewards
- Commands & Permissions
- Signs
- API
- PlaceholderAPI Placeholders
- Minecraft Server Lists
- Bedrock Player Support
- Transferring Data Storage