Releases: djinnbanter/WatchTower
Release list
WatchTower 1.2.0 Beta 1
This is a beta
This build is for NeoForge 1.21.x only. It will have bugs. Please try it on a test pack first, not your big season world.
The last public GitHub release was 1.1.2. If you're still on that jar, everything below is new. (I shipped a few private builds in between. Their notes live in this beta so you don't have to dig.)
Updating from 1.1.2
Your old dashboard login becomes the owner account. Same password. No reset. After you restart, everyone signs in again (normal after any reboot). I keep a backup of the old login file at watchtower/dashboard-auth.json.pre-1.1.18.bak.
What's new since 1.1.2
Keep the server safer
- Soft Disable / Enable for mod jars. Renames the file to
*.jar.disabledso NeoForge skips it next boot. No delete button. If the world might need that mod (extra dimensions and such), you get a world risk warning and an extra confirm. Overview shows Restart needed until you reboot. - Backup check: Backups can show Verified / Suspicious / Broken. Hit Verify now. Optional test restore goes under
watchtower/restore-verify/only, never your live world. If the newest backup fails the check, you get an Issue. - Named accounts: owner / admin / viewer. Owner adds people under Settings → Accounts. There's an audit log for settings, reviews, accounts, and sign-ins.
- The side rail shows who you're signed in as, Sign out, and an optional Minecraft skin link.
- Join / pack sync clinic: when a player can't join because their mods don't match (missing, wrong version, channel mismatch), WatchTower reads that from
latest.log, opens an Issue, and shows it on Session → Session activity with a player-safe Copy fix. - Mods → Configs: edit TOML under
config/from the dashboard. Form when it parses, raw editor if not. Saves make a backup and you can undo. Admin+ only. - Insights → Configs RAM advice looks at your host or container memory limit, not a random heap guess.
- Jar drift: same filename + version, but the file hash changed. That becomes an Issue so you can check it was on purpose (not labeled "corrupted").
- Client-only jars can show up on Issues when I'm pretty sure they don't belong on a dedicated server.
- External kill / OOM: if the host or panel killed the JVM and Minecraft left no crash report, Crashes can show a Killed entry with the right fix (raise memory vs raise the panel stop timeout).
- Soft hang / freeze: if the server tick freezes hard, you get a critical Issue (optional dump under
watchtower/hangs/). When I can tell, I add a likely cause and a suspect-mod hint. - Restart hygiene: Overview can say "maybe restart soon" when the server has been up a long time and GC/heap look worse, plus a historically quiet hour. Advice only. It never restarts for you.
- Silent script / datapack fails: KubeJS, CraftTweaker, datapack JSON, and
/reloaderrors that never crash the server still become Issues. - Weekly digest: Insights → Digest (and a dismissible Overview card) summarizes the week.
- Remember me survives a Minecraft restart. Sessions live under
watchtower/dashboard-sessions.json.
Find lag and pack pain
- Spark → Map: pan and zoom a heat map of chunk entity hotspots from the profile you selected. Click a square for the same chunk details as World.
- Insights → Storage Space map: a treemap of where disk goes (world / mods / logs / backups).
- Insights → World: entity and chunk pressure by dimension (item storms, mob spikes, forceload share, players) plus world-pressure Issues. It never auto-cleans entities or chunks.
- Logs: real viewer for
latest.log,debug.log, rotated.log.gz, and crash report files. Filters, search, problems-only, copy/download. - Activity: when lag, crashes, pack changes, and backups line up in a short window, I stitch an incident story. Overview can tease the latest one with a jump to Activity.
- Startup: boot phases and a launch/config check without waiting on a giant scheduled report.
- Issues inbox is Critical / Warning / Info only. Drift, silent-fail, world-pressure, join-sync, soft-hang, and friends still open with the right Fix actions.
- Mods → Log errors: Active / Reviewed + Mark reviewed.
- Mods catalog: icons, side badges, Updates / Conflicts / Modrinth / Forensics. Modrinth lookup never downloads jars for you.
- Support packs: pick a pack type, optional note, size strip. Customize files stays optional. Redaction and size math are tighter.
- Dashboard timezone for Schedule / quiet-window display. Stored data stays UTC.
- In-app Help Center (Docs) with searchable wiki pages.
Look and feel
- Night Watch Desk look: signal-blue accent, tighter corners, clearer gauge colours (metric vs healthy/warn), shared hero plates.
- Theme + accent: Light / Dark / Black / System plus accent presets. Rail Customize and Settings → Appearance (per account).
- Live charts jump and flash less. Tabs scroll to top when you change pages. Tabs load lazily so the shell feels snappier.
Bugs I fixed
- Soft-disable no longer snaps the Mods detail panel back to Enabled after a successful rename (the mod stays loaded until you reboot). Also no more duplicate catalog row when a mod's
mods.tomlhas NeoForge template junk like#mandatory/${file.jarVersion}. - Boot crash from Checker Framework colliding with Groovy: nested core no longer ships those packages.
- Live charts used to blink empty or jitter on hover. Calmer now.
- Opening Insights after the Storage Space map animation could blank the page. Fixed.
- Support zips could leak unredacted ops data into the facts/brief, and the size estimate was wrong. Both fixed.
- Spark finding detail: long method names wrap, and I stopped showing internal field names like
source_rollups.own_pct. - Spark → World busy-chunk cards stacked in one tall column when there were lots of them. Grid again (use Map if you want every chunk).
- When Overview says Degraded, it can say why.
- Mission uptime no longer overflows the mission band.
- External kill shouldn't fire after a clean
/stop. - Normal Modrinth version bumps don't raise jar drift (drift is same name + version, different hash only).
Full detail: CHANGELOG.md.
Files
| File | Put it here |
|---|---|
watchtower-neoforge-1.2.0-beta.1+mc1.21.jar |
Server mods/ |
watchtower-cli-1.2.0-beta.1.jar |
Same mods/ (use java -jar when the game won't boot) |
GitHub only for this beta. Not on Modrinth yet.
Watchtower 1.1.2
Watchtower 1.1.2 is out
Hey, I just shipped a big update.
Who this is for: NeoForge Minecraft 1.21 servers.
How to install
- Download from GitHub Releases or Modrinth
- Get both files:
watchtower-neoforge-1.1.2+mc1.21.jarandwatchtower-cli-1.1.2.jar - Put them in your server’s
modsfolder (replace older Watchtower jars) - Restart the server
- Open the dashboard in your browser and finish setup if it’s a new install
The big changes
Watchtower keeps watching in the background.
You shouldn’t need to keep clicking “run a giant report” just to use the dashboard. After setup, it quietly checks your server while it runs.
On new installs, the old “run a report on a timer” setting starts Off, because live checks are enough for normal days. When you do need a zip for Discord or a mod author, you build a Support pack instead.
Look and feel
This build ships the new React dashboard (the old Preact UI is gone).
- Cleaner layout — easier to scan, less clutter
- Clearer side menu — Monitor / Triage / Ops, so related tabs sit together
- Smoother feel when you move around pages
- Better light / dark / black themes
- Charts and status pages feel more modern and readable
- Buttons and main status areas stand out more without looking busy
- Scrolling and overall pages feel more like a normal app
There’s also an in-app Roadmap under System if you want to see what’s next.
First-time setup (clearer now)
When you first open Watchtower, it does a one-time scan of your logs, crashes, mods, and issues.
- You can see the progress as it goes
- You can’t skip ahead until it’s finished
- You can turn on Modrinth (the mod website) lookups during setup if you want
- It makes you set a real password before the wizard runs off without you
- When setup finishes, crash and issue counts show real numbers (not blank dashes)
- If you turn on two-factor login, you should see a scan-able QR code next to the secret key.
Overview: “how’s my server right now?”
The top of Overview is a mission status band:
- Grade + short verdict (“needs attention”, etc.)
- Live TPS / MSPT / players / heap / CPU
- Server name, Minecraft version, Java, and host/panel when known
Safe to restart?
There’s a Restart section now, it shows Safe, Caution, or Wait. It looks at backups, who’s online, disk space, pregen, and recent crashes.
Important: it does not restart the server for you. You still use your host panel or stop the server yourself.
What just went wrong?
If lag, a crash, a mod change, and a missed backup line up, Overview can preview an Incident story and point you at Activity for the event trail.
Startup / boot
After the server finishes starting, Startup can show a boot timeline (how long startup took, warnings) without waiting for a big report.
Help with RAM, lag, and disk (plain answers)
Do I need more RAM?
Watchtower looks at how much memory you actually used lately vs how much you gave the server (-Xmx). If the problem is “the game tick is slow” because of mods/world, it won’t just say “add more RAM.”
Is Java fighting the memory?
On Insights → Configs, it can show if the server is spending too much time cleaning memory, and suggest better startup flags when that helps — without telling people who already use a solid custom setup.
How long until the disk is full?
WatchTower wont just show “disk is 82% full.” It tries to estimate how many days you have left, shows disk write lag, and can raise an Issue when that number gets small.
Is the server slower than last week?
You can freeze a “this week was good” baseline. If the last 7 days look clearly worse, you get a nudge. Settings for this are under Settings → Monitoring.
Server settings tips
It can gently suggest things like view distance / simulation distance. It only suggests — it will not secretly edit your files.
Spark integration (this is a highlight)
Watchtower does not replace Spark. It reads Spark’s saved profiles and turns them into clearer advice.
What you can do
-
Capture lag the normal Spark way
Start a profile while the server is lagging, stop it, save the file. Then open Watchtower’s Spark tab and pick that profile (Refresh if you just saved it). -
Import a Spark link
On the Spark tab, Import from URL — paste aspark.lucko.melink. Watchtower downloads it once onto the server so you can study it in the dashboard. -
Auto-capture when lag is really bad (optional)
In Settings → Monitoring, turn on Auto-capture Spark on critical lag.
Needs: Spark installed on the server + “Spark enabled” on (also under Settings → Integrations).
When bad lag hits, Watchtower can run a short profile (~45 seconds), save it, and attach it to the lag Issue. Leave this off if you’re already profiling by hand. -
Read it in plain steps
The Spark tab has sections like Overview, Findings, World, Sources, Timeline, Call paths, and Compare. -
Shortcuts from the rest of the app
Overview Spark summary, lag Issues → Open in Spark, Support packs can include Spark.
Honest limits: Spark proves what was heavy during that capture. It does not prove a mod is “bad forever,” and it won’t explain client-only or pure network problems by itself.
Watchtower does not upload your profiles to the internet for you. Import only pulls a link you paste onto your server.
Mods and Modrinth
- Full mods catalog with icons and “server / client / both” style labels
- Nested jars show under the parent, not as fake extra mods
- Dedicated Modrinth scan tab with progress and ETA
- Optional auto-scan when you add/remove/update jars
- Updates view with pack-impact: Safe / Caution / Break / Unknown, plus blockers
- Watchtower never downloads mod jars for you
Turn Modrinth options on/off in Settings → Integrations.
Issues and crashes
- Issues provide smarter advice
- Crashes and Issues look more like an inbox: pick a row, see what to do next
- Fewer crash groups stuck on “Unknown”, WatchTower now understands more crash types.
- Hitting Scan on Crashes can re-check everything, not only new files
- Backup warnings use a simple rule: no usable backup in the last 24 hours
- Reviewing an issue should stop it bouncing back open from tiny day-to-day number drift
Backups
- Point Watchtower at a local backup folder on the server (best path)
- Or try panel / cloud heartbeat tracking
Alpha warning: panel / cloud backup tracking is experimental and may not work on every host. Prefer a local folder when you can.
Asking for help (Support pack)
Bottom of the side rail: Build support pack.
- Choose what to include (logs Off / Tail / Full, crashes, Spark, extras)
- Build the pack
- Download the zip
Settings cleanup
- General — preferences + legacy report options
- Monitoring — lag warnings, baseline, Spark auto-capture, scan timing
- Backups — folder / panel tracking
- Alerts — disk warnings + how long to keep old reports
- Security — password / username / 2FA
- Integrations — Modrinth + Spark on/off
- About — install info + relaunch setup
Password fields hide what you type; things you can’t change here (like dashboard port) show as info.
WatchTower 1.1.0
WatchTower 1.1.0 — smarter crashes, sharper mods, ops you can trust
This build is about making WatchTower actually understand your server — not just list files and guess. Crash reading, mod triage, and report/live pipelines are more accurate, more complete, and less likely to lie to you. The dashboard polish is there so that intelligence is easy to act on.
Artifacts
watchtower-neoforge-1.1.0+mc1.21.jarwatchtower-cli-1.1.0.jar
Install: replace the mod in mods/ → restart → hard-refresh the dashboard (Ctrl+Shift+R).
Smarter crash intelligence
WatchTower doesn’t stop at “something crashed.” It reads the report the way an experienced operator would:
- Classifies failure kinds — watchdog/hang, FML mod-load, mixin/config/duplicate/worldgen/compat patterns, OOM, env locks, and more — instead of dumping raw stacks
- Names the real suspect — primary / stall mod ids from evidence (stack, FML banners, Mod loading issue blocks), not the loudest unrelated warning
- Scan before the next full report — light classify on crash file heads so the inbox isn’t a wall of “Unknown”
- Titles you can act on — plain-English / exception fallbacks so groups never read blank or useless
- Evidence-first fix plans — “Do this now” steps match the failure (e.g. stop a stuck Create assembly before blaming Flywheel); fewer generic “update the mod” dead ends
- Declarative crash rule packs — optional YAML rules under
config/watchtower/rules/for your pack’s known patterns, without unsafe scripting
Result: fewer mystery crashes, faster triage, advice that matches what actually broke.
Sharper mod analysis
Mod troubleshooting is no longer a flat table of noise:
- Log errors rebuilt — expandable cards with full sample lines, category breakdown, and concrete Do this next from recommendations / scan issues
- No more fake mods — vanilla loggers (
ItemStack, etc.) aren’t truncated into junk ids likeitemstack - Conflicts stay honest — update/compat recommendations only; duplicate “Scan issues” clutter removed (Log errors is the triage surface)
- Create / ecosystem protection — client-only scoring won’t casually recommend removing Create/Flywheel/Registrate stack pieces
- Mod forensics — corrupt jars, config health, class/package find, UCVE owning-jar attribution when enabled
- Optional Modrinth identity — SHA lookup for slugs, links, and outdated hints (never downloads jars for you)
Result: you see which mods are actually hurting the server, with lines of evidence and a next step — not a pile of false positives.
More reliable ops (less lying UI)
- Live charts restored — RX/TX and disk IO from
/api/samplesagain; Network heroes; ambient temps that don’t clip - Startup false-Failed fixed — last
Done!boot window, not the incremental cutoff on a healthy running JVM - Overview uptime live — JVM RuntimeMXBean (not Linux-only
/proc), with report fallbacks - Reports that stick — Collecting stage marks immediately; step/elapsed progress; Hide while running; hydrate on refresh so facts don’t vanish
- Insights / Sources / Issues wiring — data on mount; schedule in hours; Don’t show again hides immediately and persists
- Support bundles include ops-cache — scan aggregates for debugging when something still looks wrong
Result: what you see in Live, Startup, Overview, and Reports matches what the server is actually doing.
Dashboard that showcases the intelligence
| Area | What you’ll notice |
|---|---|
| Sidebar | WatchTower brand mark, glass rail, report controls, theme on rail |
| Overview | A/C/F grade legend, colourful By dimension bars, uptime, backup mute / Not tracking |
| Session | Hero KPIs, Top playtime, online/offline directory |
| Crashes | Classified groups, better titles, bug icon |
| Mods | Real Log errors triage; Conflicts without noise |
| Live | Network section + working IO history |
| Backups | Status/inventory on Backups; setup in Settings → Backups |
Platform
NeoForge 1.21.x · GPL-3.0-or-later
Wiki: https://github.com/djinnbanter/WatchTower/wiki
Full detail: repo CHANGELOG.md
Watchtower 1.0.0 — NeoForge 1.21.x EXPECT BUGS
Watchtower 1.0.0
First public release for NeoForge 1.21.x on Linux dedicated servers.
Download
| File | Where to put it |
|---|---|
watchtower-neoforge-1.0.0+mc1.21.jar |
Server mods/ folder — required |
watchtower-cli-1.0.0.jar |
Same mods/ folder — recommended (not loaded as a mod; run with java -jar for DR) |
Requirements: Linux · NeoForge 1.21.x (1.21.1 through latest 1.21 patch) · Java 21
First login: http://<server-ip>:8787 — username watchtower, password password (change immediately)
What's included
- Live ops dashboard (Overview, Live, Insights, Issues, Crashes, Mods, Backups, Activity, Session, Spark, Sources)
- Setup wizard, scheduled health reports, performance insights
- Spark profiler tab, external backup tracking, disaster recovery CLI
- In-app Docs tab + GitHub Wiki
License
GPL-3.0-or-later — see LICENSE.
Full changelog: CHANGELOG.md