Skip to content

Web panel

A small website served by the plugin itself — no PHP, no extra hosting, no database to connect. Recent punishments, active bans/mutes/warnings, a player search and a player page with a 3D skin, full history and alt accounts.

Turn it on

yaml
web:
  enabled: true
  host: 0.0.0.0
  port: 8085
  title: 'My Server — Punishments'
  token: ''           # empty = public; set a secret to require it
  hide-staff: false   # true hides staff names on the public page

Restart, then open http://<server-ip>:8085/ in a browser. Open the port in your firewall / hosting panel.

Protecting it

With token: 'secret' the page is only reachable as http://<ip>:8085/?token=secret (or with an Authorization: Bearer secret header). Without a token the panel is read-only anyway — nobody can ban from it.

Behind a domain

Put nginx or Caddy in front to get https://bans.yourserver.net:

nginx
location / {
    proxy_pass http://127.0.0.1:8085;
    proxy_set_header Host $host;
}

JSON endpoints

The page is built on four endpoints you can use yourself:

GET /api/statsactive counts
GET /api/recent?page=1newest punishments, 25 per page
GET /api/list?type=BAN&page=1active punishments of one type (BAN, IPBAN, MUTE, WARN)
GET /api/player?name=Steveprofile, active punishments, history, alts

Performance

Every request is served from a separate thread and reads the database through the plugin's IO thread — the game thread is never touched.

FinExBans · Paper, Folia, Velocity, BungeeCord · 1.21 → 26.2