Ultimate Broadcast
2.4.0High-performance announcements for Paper, Purpur & Folia: per-player subscriptions, Discord mirroring, scheduling, countdowns, 5 channels, MiniMessage and zero main-thread SQL. 1.21-26.3.
- Tested MC versions
- 1.18, 1.19, 1.20, 1.21, 26.1, 26.2, 26.3

Ultimate Broadcast
The announcement platform that players don't hate. A high-performance broadcast plugin for Paper, Purpur and Folia with per-player subscriptions, Discord mirroring, scheduled announcements, countdowns and five delivery channels — all driven by MiniMessage and a fully asynchronous storage engine.
v2.4.0 is a rescue release. Versions 2.1.0–2.3.0 shipped a malformed
config.ymlthat could stop the plugin from enabling on a fresh install, and their newest builds were not listed for Minecraft 1.21.5+. 2.4.0 fixes both, repairs existing configs automatically and restores support for every version from 1.21 to 26.3.
✨ Why servers switch to Ultimate Broadcast
🔔 Players control what they receive
The number one complaint about announcement plugins is spam. Ultimate Broadcast ships a real subscription centre:
/broadcast toggle— master switch, instantly respected by the scheduler./broadcast settings— a clean GUI with one toggle per category.- Categories are configurable (
announcements,events,tips,promotions,social). - Preferences persist in SQLite/MySQL and survive restarts.
- Opted-out players are skipped before a single message is rendered, so you don't pay for players who don't want the message.
💬 Discord mirroring without a bot
Mirror announcements to a Discord channel through a webhook — no bot token, no Node.js process, no extra plugin. Delivery runs on its own daemon thread with rate-limit handling and retries, and can be limited to manual, scheduled, random or countdown messages.
🧵 True Folia support
Folia has no global main thread. Ultimate Broadcast detects Folia at runtime and routes work through the global region scheduler, async scheduler and per-entity scheduler — verified on Folia 26.3. On Paper the same code uses the standard scheduler, so one jar covers both.
⚡ Zero main-thread SQL
Every history, statistics and preference write is queued on a single background thread. No INSERT ever runs inside a tick, even when the scheduler fires on a full server. SQLite uses WAL + a single writer, which removes the database is locked errors that plague broadcast plugins under load.
🎨 Five channels, one syntax
chat, actionbar, title, subtitle and bossbar all accept the same MiniMessage/legacy input:
/broadcast send title <gradient:#8B5CF6:#22D3EE><bold>Double XP Weekend</bold></gradient>
/broadcast send bossbar &eRestart in 5 minutes
/broadcast send actionbar <yellow>%player%<gray>, vote for rewards!
🧠 Smart delivery guard
- Duplicate messages inside a configurable window are dropped (proxy echo protection).
- A hard per-second cap stops announcement loops.
- Sounds and particles are skipped automatically when TPS drops below your threshold.
- Minimum-player rules keep small servers quiet.
- Per-player cooldowns on scheduled entries.
🩹 Config that repairs itself
If config.yml is invalid — including the exact indentation bug shipped in 2.1.0–2.3.0 — the plugin backs the file up, fixes it, and continues starting. Legacy settings.database / countdown.database keys are migrated in memory. No more "plugin disabled itself after update".
🚀 Feature tour
| Area | What you get |
|---|---|
| Channels | Chat, action bar, title, subtitle, boss bar |
| Scheduling | Interval or HH:MM time-of-day, sub-messages, per-player cooldowns, weighted random pool |
| Targeting | All, world, permission, world list, permission list |
| Formatting | MiniMessage + legacy & codes + &#RRGGBB hex in the same string |
| Placeholders | Built-in %player%, %online%, %world%, %time%, %ping% and full PlaceholderAPI support per recipient |
| Persistence | SQLite or MySQL, asynchronous writes, automatic history pruning |
| Safety | Duplicate window, rate cap, TPS-aware effects, subscription filtering |
| Operations | /broadcast stats, history, scheduled list, safe reload, debug reasons |
| Integrations | PlaceholderAPI, Discord webhooks, BungeeCord/Velocity plugin messaging |
| Platforms | Paper, Purpur, Folia — Minecraft 1.21 → 26.3, Java 21+ |
📋 Commands
| Command | Description | Permission |
|---|---|---|
/broadcast <message> | Send a chat announcement | ultimatebroadcast.use |
/broadcast send <channel> <message> | Send via chat, actionbar, title, subtitle or bossbar | ultimatebroadcast.admin |
/broadcast preview <message> | Preview exactly what players will see | ultimatebroadcast.preview |
/broadcast toggle [category] | Opt out of one category or everything | ultimatebroadcast.receive.toggle |
/broadcast settings | Open the personal subscription GUI | ultimatebroadcast.receive.toggle |
/broadcast schedule <minutes> <message> | Repeat a message until restart | ultimatebroadcast.admin |
/broadcast list | List scheduled entries and their next run | ultimatebroadcast.admin |
/broadcast cancel <id> | Cancel a scheduled entry | ultimatebroadcast.admin |
/broadcast countdown <seconds> <message> [--type] | Live countdown in any channel | ultimatebroadcast.admin |
/broadcast history | Last 20 delivered announcements | ultimatebroadcast.history |
/broadcast stats | Delivery, duplicate and storage statistics | ultimatebroadcast.admin |
/broadcast gui | Admin control panel | ultimatebroadcast.admin |
/broadcast discord test | Verify the webhook | ultimatebroadcast.admin |
/broadcast reload | Reload configuration safely | ultimatebroadcast.admin |
Aliases: /b, /bc.
🔐 Permissions
| Permission | Default | Description |
|---|---|---|
ultimatebroadcast.use | op | Send chat announcements |
ultimatebroadcast.admin | op | Scheduling, GUI, stats, reload |
ultimatebroadcast.preview | op | Preview messages |
ultimatebroadcast.history | op | View history |
ultimatebroadcast.bypass.cooldown | op | Ignore the command cooldown |
ultimatebroadcast.receive | true | Receive announcements |
ultimatebroadcast.receive.toggle | true | Open the subscription menu |
ultimatebroadcast.category.<id> | true | Receive a specific category |
Upgrade note:
ultimatebroadcast.usenow defaults to op. In 2.x it defaulted to true, which allowed any player to broadcast on servers that never changed it. Grant the node explicitly if you want player broadcasts.
⚙️ Configuration example
delivery:
min-players: 0
dedupe-window-seconds: 8
max-per-second: 3
low-tps-threshold: 15.0
skip-effects-on-low-tps: true
categories:
announcements:
display: "<gradient:#8B5CF6:#22D3EE><bold>Announcements</bold></gradient>"
default: true
events:
display: "<gradient:#F59E0B:#EF4444><bold>Events</bold></gradient>"
default: true
scheduler:
broadcasts:
- id: "discord"
enabled: true
interval: 15
category: "social"
message: "<aqua>Join our Discord: <white>discord.gg/example</white></aqua>"
broadcast-to: "all"
cooldown-per-player: 900
integrations:
discord:
enabled: true
webhook-url: "https://discord.com/api/webhooks/..."
events: [manual, scheduled]
Messages accept MiniMessage, legacy codes and hex:
<gradient:#FFD700:#FFAA00><bold>Welcome to the server!</bold></gradient>
&aGreen legacy text &#FF55FF and hex
🧪 Verified compatibility
| Platform | Version | Result |
|---|---|---|
| Paper | 1.21.4 | |
| Paper | 26.3 | |
| Folia | 26.3 |
Requires Java 21+ (Minecraft 26.x itself requires Java 25).
❓ FAQ
Will my 2.x config break?
No. Legacy keys are migrated in memory and invalid YAML is repaired with a timestamped backup. Comments in your file are preserved.
Does it work on Spigot?
No. Ultimate Broadcast uses the Adventure API for hex gradients and titles, which Spigot does not provide. The 2.x listings that claimed Spigot support could not actually enable on Spigot; 2.4.0 lists Paper, Purpur and Folia so the download button tells the truth.
Why did my old version stop appearing on 1.21.9?
2.1.0–2.3.0 were published with an incomplete game_versions list. 2.4.0 is listed for 1.21 → 26.3.
How do I report a bug?
Open an issue on the project's Modrinth page with your server version, plugin version and latest.log.
Built for server owners who care about TPS, and players who care about their chat.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta