
News Broadcaster
1 / 6





In-game news for your Rust server
Post an announcement and everyone online gets a toast. Players read it in a clean popup, vote in polls, watch the wipe countdown and catch up on what they missed with /news. You run all of it from an admin panel inside the game.
One file. Needs only Oxide. No web panel, no database, no required plugins.
For your players
| Feature | What players get |
|---|---|
| Toast and popup | A toast the moment something is posted. Click it for the full post: picture, title, author, date and text. Long posts scroll, long titles shrink to fit. |
| Polls | 2 to 4 options on any post. One click to vote, live result bars, and the vote can be changed. A poll can close on a timer, and the winner is announced in chat. |
| Event countdowns | A live WIPE IN 2 DAYS 04:12:33 timer inside the post. |
| Archive | /news opens every post, with thumbnails, type filters, a Polls filter and a search box. |
| Unread tracking | NEW badges, an unread counter, Mark all read, and one chat reminder about posts missed while offline. |
| Likes | A like button on every post. |
| Their own settings | /news settings: turn off the sound, get a chat line instead of pop-ups, or skip the post shown when joining. |
Five post types, each with its own colour: INFO, WARNING, ALERT, EVENT and UPDATE.
For you
| Feature | What you get |
|---|---|
| News Management | A dashboard with stat cards (published, drafts, reads, likes, poll votes), tabs, search and sorting. Every post shows its reads, likes and votes. |
| Editor with preview | Title, picture, text, type, poll and countdown on one screen. See the exact popup before you publish. |
| Autosave | A disconnect, a restart or a plugin reload never loses a half-written post. |
| Drafts and copy | Save a post for later. Copy last week's wipe post in one click. |
| Posts for one group | VIP news or staff notes: only that Oxide group (and admins) can see them. |
| Auto-delete | Event posts remove themselves 1 to 30 days after publishing. |
| Pin, resend, bulk tools | Keep the rules on top, notify everyone online again, or pin and delete many posts at once. |
| Rewards | Pay players for reading or liking a post: items, RP or currency, once per player per post. |
| Discord | A webhook posts every announcement as an embed in the type's colour, with the picture and an optional role ping. Poll results are posted too. |
| Console and RCON | Post, list, publish, resend and delete from the console, so a scheduler or another tool can do it. |
| Image link check | The editor warns about links that will not show in game: imgur pages, Discord links that expire, GIFs. |
| Themes | Six built in, and as many of your own as you like. |
| Translations | Every text is in the lang file. |
How it looks
- Rounded corners on every panel, button and picture
- Soft shadows over a blurred background
- Smooth animations that run on the player's game: no lag and no extra traffic
- Your theme colours everywhere
The corner images are drawn by the plugin itself. No other plugin and no download is needed for the look.
Quick start
- Put
NewsBroadcaster.csinoxide/plugins/. - Run the two commands below in the server console.
- Type
/news adminin game and press NEW ANNOUNCEMENT.
| 1 | oxide.grant group default newsbroadcaster.view |
| 2 | oxide.grant user <SteamID> newsbroadcaster.admin |
Or post straight from the console:
| 1 | news.show "Wipe Day" "-" "The map has been wiped. Good luck out there!" Event |
Permissions
| Permission | What it does |
|---|---|
newsbroadcaster.view | See news: toasts, popups and the archive. Set RequireViewPermission to false to let everyone see news |
newsbroadcaster.admin | Create, edit and delete posts, change the theme |
Server admins (auth level) always have admin access.
Reference
Commands
Chat
/newsopens the archive/news latestopens the newest post/news readmarks everything as read/news settingshas the sound, pop-up and join options/news adminopens News Management (admins)/news helplists the commands
Console / RCON
news.showposts an announcementnews.pollposts an announcement with a pollnews.listlists posts with index, id, reads and likesnews.publishpublishes a draftnews.deletedeletes a postnews.resendnotifies online players againnews.triggeropens a post for one playernews.adminopens News Management
| 1 | news.show "Title" "ImageURL or -" "Text" [Type] |
| 2 | news.poll "Title" "Text" "Option 1|Option 2|Option 3" [Type] |
| 3 | news.publish <index or id> |
| 4 | news.delete <index or id> |
| 5 | news.resend <index or id> |
| 6 | news.trigger <SteamID or name> [index or id] |
Types: Info, Warning, Alert, Event, Update. Use - for no picture and \n for a new line.
Config: the options most servers change
| Option | Default | What it does |
|---|---|---|
ServerName | SERVER NEWS | The name shown in the popup header |
ShowNewsOnConnect | true | Show the newest unseen post when a player wakes up |
UnreadReminderOnConnect | true | One chat line about posts missed while offline |
RequireViewPermission | true | false lets everyone see news |
EnableAutoClose | true | Broadcast popups close by themselves after AutoCloseSeconds (15) |
AnnouncementsPerPage | 5 | Rows per page, 1 to 8 |
MaxStoredAnnouncements | 50 | The oldest posts are removed above this. Pinned posts and drafts stay |
PopupImageFrame | Tall | Wide keeps a 16:9 frame for widescreen pictures |
Notification.Position | TopRight | Six toast positions, plus X and Y offsets |
Discord.WebhookUrl | empty | Paste a webhook URL and set Enabled to post to Discord |
Rewards | off | Read and like rewards: items, points, currency |
Polls.AllowVoteChange | true | Players can change their vote |
New options are added to your config file by themselves when you update.
For developers: hooks and API
Seven hooks with plain dictionary payloads: OnNewsBroadcast, OnNewsEdited, OnNewsDeleted, OnNewsRead, OnNewsLiked, OnNewsPollVote, OnNewsPollClosed.
Post from your own plugin:
| 1 | [PluginReference] private Plugin NewsBroadcaster; |
| 2 | |
| 3 | void AnnounceEvent() |
| 4 | { |
| 5 | NewsBroadcaster?.Call("API_PostNews", "Airdrop event", "Starts in 10 minutes!", "Event"); |
| 6 | } |
Also API_CreateNews (polls, groups, countdowns, drafts), API_DeleteNews, API_GetNews, API_GetNewsList, API_GetUnreadCount and API_ShowNews.
Questions and answers
Which other plugins do I need?
Only Oxide. The plugins under "Works with" add extras.
Why does my picture not show in game?
Rust needs a direct link to a PNG or JPG. The editor tells you when a link will not work.
How do I make a post only VIPs can see?
Create the group (oxide.group add vip), add players to it, then pick VIP ONLY under WHO CAN SEE IT in the editor.
Can players turn the notifications off?
Yes, with /news settings: the sound, the pop-ups and the post shown when joining.
Can I schedule a post for later?
Not at a set time. Save it as a draft and publish it when it is time, in game or with news.publish over RCON.
Can a poll have more than one answer?
No, polls are single choice.
Works with
| Plugin | When you need it |
|---|---|
| ServerRewards | For RP as a read or like reward |
| Economics | For currency as a read or like reward |
| Notify | Only if you turn on UseNotifyPlugin |
| ImageLibrary | Optional. It caches post pictures so they load faster |
None of them is required.
Support
Message me through my RogueDepot profile. Tell me your Rust and Oxide version and paste the console error if there is one, and I will look into it.
NewsBroadcaster.json
| 1 | { |
| 2 | "General": { |
| 3 | "AutoCloseSeconds": 15, |
| 4 | "EnableAutoClose": true, |
| 5 | "ShowNewsOnConnect": true, |
| 6 | "UnreadReminderOnConnect": true, |
| 7 | "RequireViewPermission": true, |
| 8 | "ServerName": "SERVER NEWS", |
| 9 | "AnnouncementsPerPage": 5, |
| 10 | "MaxStoredAnnouncements": 50, |
| 11 | "StripLinksFromBody": true, |
| 12 | "PopupImageFrame": "Tall", |
| 13 | "ArchiveThumbnails": true, |
| 14 | "RoundedCorners": true |
| 15 | }, |
| 16 | "Notification": { |
| 17 | "Enabled": true, |
| 18 | "UseNotifyPlugin": false, |
| 19 | "NotifyType": 0, |
| 20 | "Position": "TopRight", |
| 21 | "OffsetX": 0.0, |
| 22 | "OffsetY": 0.0, |
| 23 | "Duration": 8, |
| 24 | "NotificationSound": "assets/bundled/prefabs/fx/notice/loot.drag.fx.prefab" |
| 25 | }, |
| 26 | "Discord": { |
| 27 | "Enabled": false, |
| 28 | "WebhookUrl": "", |
| 29 | "BotName": "Server News", |
| 30 | "AvatarUrl": "", |
| 31 | "RoleMention": "", |
| 32 | "PostGroupOnlyPosts": false, |
| 33 | "PostPollResults": true |
| 34 | }, |
| 35 | "Rewards": { |
| 36 | "EnableReadReward": false, |
| 37 | "ReadDelaySeconds": 5, |
| 38 | "ReadRewards": { |
| 39 | "Items": [ |
| 40 | { |
| 41 | "Shortname": "scrap", |
| 42 | "Amount": 5, |
| 43 | "SkinId": 0 |
| 44 | } |
| 45 | ], |
| 46 | "Points": 0, |
| 47 | "Currency": 0.0 |
| 48 | }, |
| 49 | "EnableLikeReward": false, |
| 50 | "LikeRewards": { |
| 51 | "Items": [ |
| 52 | { |
| 53 | "Shortname": "scrap", |
| 54 | "Amount": 10, |
| 55 | "SkinId": 0 |
| 56 | } |
| 57 | ], |
| 58 | "Points": 0, |
| 59 | "Currency": 0.0 |
| 60 | }, |
| 61 | "NotifyOnReward": true, |
| 62 | "PointsLabel": "RP", |
| 63 | "CurrencyLabel": "coins" |
| 64 | }, |
| 65 | "Polls": { |
| 66 | "AllowVoteChange": true, |
| 67 | "ShowResultsBeforeVoting": false, |
| 68 | "AnnounceResults": true |
| 69 | }, |
| 70 | "SelectedTheme": "Default", |
| 71 | "Themes": { |
| 72 | "Default": { |
| 73 | "PanelBg": "0.07 0.08 0.10 0.97", |
| 74 | "HeaderBg": "0.04 0.05 0.06 0.55", |
| 75 | "ContentBg": "0.13 0.14 0.16 0.55", |
| 76 | "ButtonPrimary": "0.36 0.71 1.00 0.95", |
| 77 | "ButtonSecondary": "0.18 0.19 0.22 0.85", |
| 78 | "TextTitle": "0.97 0.97 0.98 1.0", |
| 79 | "TextNormal": "0.85 0.86 0.88 1.0", |
| 80 | "TextMuted": "0.55 0.57 0.62 1.0" |
| 81 | }, |
| 82 | "Dark": { |
| 83 | "PanelBg": "0.04 0.04 0.05 0.98", |
| 84 | "HeaderBg": "0.02 0.02 0.03 0.55", |
| 85 | "ContentBg": "0.09 0.09 0.10 0.55", |
| 86 | "ButtonPrimary": "0.85 0.85 0.88 0.95", |
| 87 | "ButtonSecondary": "0.14 0.14 0.16 0.85", |
| 88 | "TextTitle": "0.97 0.97 0.97 1.0", |
| 89 | "TextNormal": "0.78 0.78 0.80 1.0", |
| 90 | "TextMuted": "0.48 0.48 0.52 1.0" |
| 91 | }, |
| 92 | "Ocean": { |
| 93 | "PanelBg": "0.05 0.09 0.12 0.97", |
| 94 | "HeaderBg": "0.02 0.05 0.07 0.55", |
| 95 | "ContentBg": "0.08 0.13 0.17 0.55", |
| 96 | "ButtonPrimary": "0.20 0.78 0.95 0.95", |
| 97 | "ButtonSecondary": "0.10 0.20 0.26 0.85", |
| 98 | "TextTitle": "0.95 0.98 1.00 1.0", |
| 99 | "TextNormal": "0.82 0.90 0.94 1.0", |
| 100 | "TextMuted": "0.48 0.62 0.72 1.0" |
| 101 | }, |
| 102 | "Rust": { |
| 103 | "PanelBg": "0.10 0.08 0.07 0.97", |
| 104 | "HeaderBg": "0.06 0.05 0.04 0.55", |
| 105 | "ContentBg": "0.16 0.13 0.11 0.55", |
| 106 | "ButtonPrimary": "0.95 0.40 0.18 0.95", |
| 107 | "ButtonSecondary": "0.22 0.18 0.15 0.85", |
| 108 | "TextTitle": "0.97 0.93 0.88 1.0", |
| 109 | "TextNormal": "0.84 0.78 0.72 1.0", |
| 110 | "TextMuted": "0.60 0.52 0.45 1.0" |
| 111 | }, |
| 112 | "Midnight": { |
| 113 | "PanelBg": "0.06 0.05 0.10 0.97", |
| 114 | "HeaderBg": "0.03 0.02 0.06 0.55", |
| 115 | "ContentBg": "0.11 0.10 0.16 0.55", |
| 116 | "ButtonPrimary": "0.62 0.40 0.98 0.95", |
| 117 | "ButtonSecondary": "0.17 0.16 0.22 0.85", |
| 118 | "TextTitle": "0.97 0.96 1.00 1.0", |
| 119 | "TextNormal": "0.82 0.81 0.88 1.0", |
| 120 | "TextMuted": "0.55 0.54 0.65 1.0" |
| 121 | }, |
| 122 | "Forest": { |
| 123 | "PanelBg": "0.06 0.09 0.07 0.97", |
| 124 | "HeaderBg": "0.03 0.05 0.04 0.55", |
| 125 | "ContentBg": "0.10 0.14 0.11 0.55", |
| 126 | "ButtonPrimary": "0.40 0.85 0.55 0.95", |
| 127 | "ButtonSecondary": "0.14 0.19 0.16 0.85", |
| 128 | "TextTitle": "0.94 0.98 0.94 1.0", |
| 129 | "TextNormal": "0.80 0.88 0.82 1.0", |
| 130 | "TextMuted": "0.50 0.62 0.54 1.0" |
| 131 | } |
| 132 | } |
| 133 | } |


Trusted hosting partner. Affordable game servers with solid support and panels.
Visit site ↗