v2.6.4 — Modpack feature
What's new since v2.6.2
A marquee feature + a slate of UX, ops, and i18n improvements. v2.6.3 was bumped on main but never tagged — this release folds it into v2.6.4 so the public history stays clean.
🎯 Modpack — Bundle installed mods for player download
Like Minecraft modpacks. Admin picks installed mods, names + versions a "pack," builds a zip, publishes. Once published, a top-right download CTA appears on the login page so players can grab matching client-side mods without needing a panel account.
- Mods → new Modpack tab with mod picker, name + version + description
- Three-state workflow: draft → published → archived
- Anonymous metadata + download endpoints (no auth required)
- Atomic temp-file zip build so public downloaders can't grab a half-written archive mid-rebuild
- Bundle target is
<game-root>/KitsuneModpacks/(parallel to KitsuneBackups)
(PR #64)
🛠 Graceful Restart — Daily restarts with player warnings
Schedule daily restarts with a player-friendly in-game countdown.
- Configurable warning ladder (default: 10 min / 5 min / 1 min / 0 min, escalating colors)
- IANA-timezone schedule (DST-aware) — e.g.
04:00 America/Los_Angelesfollows the actual wall clock through PDT/PST transitions krestart [minutes]console command for on-demand restarts- Manual "Restart Now" button in the Settings → Server Restart tab
- Re-entrancy guard prevents overlapping countdowns
Replaces the systemd-timer-plus-shell-script stopgap from v2.6.1.
🐛 Backups silent write loss
BackupService had a redundant conn.Open() call on every method — six call sites total. The custom System.Data.SQLite build that ships with KC silently dropped INSERT/UPDATE statements after a double-Open (no exception, just no row written). Reads worked, so the bug went unnoticed until the first hands-on test of the backup feature, where ZIPs appeared on disk but the audit table stayed empty.
(PR #56)
🌍 German, French, Spanish locales
Polite-form translations across ~250 keys / 30 namespaces in each. Browser auto-detect now picks the right one for de-* / fr-* / es-* visitors. Tooltip on the language switcher notes that in-game broadcast messages don't auto-translate.
8 supported locales total: English, German, French, Spanish, Chinese Simplified, Chinese Traditional, Japanese, Korean.
✨ Favicon refresh
Regenerated all four favicon variants (favicon.svg, favicon-16x16.png, favicon-32x32.png, favicon.ico) from kitsune-command-logo-transparent.png so the browser tab matches the panel's sidebar logo. Tooling: tools/regen-favicons.py (Pillow only, single source-of-truth).
(PR #60)
📝 README updates
Features list now reflects Vote Rewards (was missed in v2.6.2's README pass), Graceful Restart, Trader Zone Toggle, and Modpack.
Installation
Server (KitsuneCommand)
Download KitsuneCommand-v2.6.4.zip, extract, drop KitsuneCommand/ into your server's Mods/ directory.
Client (optional — KitsuneTraderUnlock)
Unchanged from v2.6.1. Only needed for V2's locked-down client if you want to interact with trader-area blocks when an admin opens them up via ktrader off.
Operators upgrading from v2.6.2
Drop the new ZIP in place and restart. No migration steps needed beyond letting the new 010_modpack.sql migration apply on first boot. If you were using the systemd timer + shell script stopgap for graceful restarts (set up earlier this cycle), disable it before deploying — KC's GracefulRestart feature now handles that natively and the two would fire at the same time otherwise.
🤖 Release notes generated with Claude Code