Description
BetterNews - Server News in Minecraft GUI
BetterNews is a client-side mod for Minecraft Forge 1.20.1 that displays server news directly in the game - right after joining the world, in a beautiful built-in interface.
π What problem does this mod solve?
Server administrators have no good way to inform players about updates, announcements, and events inside Minecraft. Usually they resort to Discord messages, forum posts, or in-game chat spam - all of which are easy to miss.
BetterNews solves this: the news is loaded from your website, rendered in a polished GUI window with image support, and shown automatically on every login - but only once, until there is something new to read.
β¨ Features
π° Automatic news display on join
- After joining a world or server, the mod waits briefly and then opens the news window automatically
- The window opens only if there is at least one unread news entry
- The timer starts after the player moves their mouse - so it never interrupts the loading screen
- The delay is configurable (
showDelaySeconds, default: 10 seconds)
π₯οΈ Built-in news reader GUI
- A clean, styled panel (80% width Γ 90% height of the screen by default)
- Header - article title on the left, formatted date on the right
- Cover image - full-width banner below the header (loaded from the server, if provided)
- Scrollable content area - rendered Markdown with inline images
- Footer - navigation buttons, article counter, unread marker (
β)
π Markdown rendering
The mod renders Markdown content fetched from your website. Supported elements:
| Element | Syntax |
|---|---|
| Headings (3 levels) | # ## ### |
| Bold | **text** |
| Italic | *text* |
| Strikethrough | ~~text~~ |
| Inline code | `code` |
| Code block | ``` |
| Bullet list (nested) | - item |
| Numbered list (nested) | 1. item |
| Link | [text](url) |
| Inline image |  |
| Table | standard Markdown syntax |
| Horizontal rule | --- |
| Blockquote | > text |
| Colored text | <span style="color:#RRGGBB">text</span> |
ποΈ Navigation between articles
- β / β buttons navigate through all articles (both read and unread - for history browsing)
- On open, the window jumps automatically to the first unread article
- The β button is always active (no mandatory read timer)
- Read All button marks all articles as read and closes the window
- Pressing
ESCcloses the window without marking anything as read
β Smart read tracking
- An article is marked as read automatically when the player scrolls to the bottom and has had it open for at least
minReadSeconds - Read state is stored in
config/betternews.tomland persists between sessions - On first launch (no config file yet), only the latest article is marked as unread - so returning players aren't flooded with old news
β‘ Smart preloading
- When a news article is opened, the mod preloads the current, next, and previous articles in the background
- Switching between adjacent articles is nearly instant (served from cache)
- If an article is not yet loaded, the content area shows an animated loading spinner and navigation buttons are temporarily disabled
πΌοΈ Async image loading with fallback
- All images (cover + inline) are loaded asynchronously in background threads
- Loading spinner is shown until the article text and all images are fully loaded
- Images are registered as
DynamicTextureand displayed using Minecraft's texture engine - Supports a Range-request fallback for servers that do not respond correctly to full GET requests
- Retries up to 3 times on failure
π§Ή Session cache
- All loaded data (text, images) is kept in memory until the player leaves the world
- On disconnect, all
DynamicTextureresources are released viaTextureManager.release() - The JSON index is not cached - it is re-fetched on every world join to always get fresh news
π Internationalisation
- Interface language follows the Minecraft client locale
- Dates are formatted according to the active locale (e.g., "19 Mar 2026" in English, "19 ΠΌΠ°Ρ. 2026" in Russian)
- Built-in translations: English (
en_us)
β¨οΈ /news command
- Type
/newsin chat to open the news window at any time, even if there are no unread articles
βοΈ Configuration
File: config/betternews.toml
| Parameter | Default | Description |
|---|---|---|
newsIndexUrl |
"" |
Direct URL to the JSON news index, e.g. https://mysite.com/news.json |
showDelaySeconds |
10 |
Delay in seconds after joining before the window appears |
httpTimeoutSeconds |
30 |
HTTP request timeout in seconds |
minReadSeconds |
5 |
Minimum time the window must be open before an article can be auto-marked as read |
unreadNews |
[] |
Auto-managed list of unread article keys (do not edit manually) |
π‘ Server-side setup (no server mod required!)
The mod is 100% client-side. You only need a static website (or any HTTP file server) with the following structure:
JSON index (news.json)
[
{
"title": "Major Update 2.0",
"date": "2026-03-19",
"url": "/news/major-update/index.md"
},
{
"title": "Server Launch",
"date": "2026-01-01",
"url": "/news/server-launch/index.md"
}
]
- Articles are listed newest first
- The
urlfield must be a relative path - the domain is taken fromnewsIndexUrlin the config - Absolute URLs in article entries are rejected for security
Article folder structure
news/
βββ major-update/
βββ index.md β article body (Markdown with YAML frontmatter)
βββ cover.jpg β optional cover image (full-width banner)
βββ img/
βββ screenshot.jpg
Article file (index.md)
---
title: Major Update 2.0
date: 2026-03-19
description: Reworked progression, new dungeons and dozens of fixes.
cover: cover.jpg
server: MyServer
---
## What's new
Some **bold** text, *italic*, and an image:

Frontmatter fields
| Field | Required | Description |
|---|---|---|
title |
β | Article title shown in the header |
date |
β | Publication date (yyyy-MM-dd), shown in the header |
If
titleordateare present in frontmatter, they take priority over the values in the JSON index.
π Links
- Clicking any
[link](url)in an article opens the system browser directly - no confirmation dialog
π¦ Requirements
- Minecraft: 1.20.1
- Forge: 47.4.16 or newer (loader version β₯ 47)
- Side: Client-only (no server mod needed)
- Java: 17+


