Skip to content

DaisyVotes — Storage & Data

DaisyVotes stores all of its data through Sculk Data, the framework’s ORM. The default backend is SQLite, written to a database file inside plugins/DaisyVotes/ — there is no external database to install or configure.

storage.yml
backend: sqlite
file: "data.db"
remote:
host: "localhost"
port: 3306
database: "minecraft"
username: "root"
password: "${DB_PASSWORD:-}"
use-ssl: false
pool-size: 10

remote.* is only read once backend names a real server — SQLite ignores it entirely. password reads from an environment variable by default (${DB_PASSWORD:-}) so the shipped file stays a working example without a real secret sitting in a config anyone might paste into a support channel; replace it with a literal password if you’d rather set one directly.

KeyDefaultDescription
backendsqliteOne of sqlite, mysql, mariadb, postgres (postgresql also works).
filedata.dbThe SQLite file, relative to the plugin folder. Ignored for the remote backends.
remote.hostlocalhostRemote server host or IP. Ignored by SQLite.
remote.port3306Remote server port. 3306 for MySQL/MariaDB, 5432 for Postgres — see below.
remote.databaseminecraftDatabase name.
remote.usernamerootDatabase username.
remote.password${DB_PASSWORD:-}Database password. Defaults to reading the DB_PASSWORD environment variable; blank if unset.
remote.use-sslfalseConnect over SSL/TLS.
pool-size10Connections kept open. More is not faster — a Minecraft server has one thread doing the asking. Range 164.
ValueDialectDriverNotes
sqliteSQLitebundledDefault. File-based, single-server only.
mysqlMySQL/MariaDBMariaDB JDBCSee below — mysql and mariadb are the same setting.
mariadbMySQL/MariaDBMariaDB JDBCSame as mysql; accepted spelling, use whichever matches your server.
postgresPostgreSQLPostgreSQL JDBCSupported, but newer and less travelled than the other three — see below.

Ports: MySQL and MariaDB default to 3306 (remote.port’s shipped default). Postgres normally listens on 5432 — DaisyVotes does not change the default for you, so set remote.port: 5432 yourself when you switch backend to postgres.

What’s actually tested: SQLite and MySQL/MariaDB are the well-travelled paths — that’s what most installs run and what the test suite and support history cover. Postgres support is real (DaisyVotes ships the driver and creates the same tables), but it’s the newest of the four; if you hit something Postgres-specific, report it.

Running DaisyVotes across a network of servers? Point every server at the same database in storage.yml instead of SQLite — MySQL/MariaDB is the proven choice here. That one shared database keeps vote counts, points, streaks, and the reward queue consistent everywhere — it’s the foundation a cross-server network is built on. Add Redis on top (in network.yml, not here) only if you want instant cross-server delivery and parties.

DaisyVotes keeps its data in a set of tables, created automatically on first run:

TableHolds
vote_playersPer-player stats: total/daily/weekly/monthly votes, current & best streak, points & lifetime points, streak freezes, parties contributed, first/last vote timestamps.
vote_sitesPer-site totals.
player_site_votesPer-player, per-site vote counts (drives cooldowns and the daily wheel set).
vote_eventsAn immutable history of every vote received (used for accurate period windows).
pending_rewardsRewards queued for offline players, claimed with /vote claim.
vote_party_stateThe global vote-party counter and party history.
wheel_statesPer-player available & lifetime wheel spins.
wheel_spinsHistory of wheel results.
shop_purchasesPurchase history, used to enforce daily limits.
top_voter_stateTracks daily/weekly/monthly period rollovers.

The database is a normal file. To back it up safely:

  1. Stop the server (so nothing is mid-write).
  2. Copy the database file (and, if you like, the whole plugins/DaisyVotes/ folder) somewhere safe.
  3. Start the server.
  • Directoryplugins/DaisyVotes/
    • config.yml
    • menus.yml
    • rewards.yml
    • shop.yml
    • storage.yml
    • the SQLite database file (back this up)

To wipe all vote data and start fresh, stop the server and delete the database file; DaisyVotes recreates it empty on the next start.

  • Leaderboards are sorted, limited and ranked in the database itself, so there is no in-memory snapshot to go stale. stats.leaderboard-cache-seconds is no longer used as of 2.5.0 — the key is kept only so an existing config.yml still parses.
  • PlaceholderAPI values are cached for ~10 seconds so placeholder lookups never hit the database on the main thread.
  • Duplicate votes within sites.duplicate-window-seconds are dropped before any write.