STYGION Documentation Search the docs

The panel

One command, one link, and the whole of Keystone in a browser — served by your own server.

Keystone 0.2.8 Updated 6 min read

This page is older than Keystone 0.2.8, released 18 October 2026. Something may have changed since.

On this page 6 parts
  1. Where the page comes from
  2. The link, and why it expires
  3. What is in it
  4. If the page does not open
  5. When the editor has to be reachable from elsewhere (0.1.1 and newer)
  6. Turning it off

The panel

Type /keystone panel in game. Keystone puts a link in chat, you click it, and the editor opens signed in. That is the whole thing — no account, no portal, no password to invent.

Where the page comes from

#

Your own server. The editor is built into the jar and served off the same process that runs the game, on the local API's address. Nothing is fetched from us and nothing is sent to us, which is why it works with the network cable pulled out and why it cannot stop working because something of ours is down.

#

A chat line is not a secret. It is in a log file, possibly in a screenshot, and on a staffed server it was read by whoever was standing nearby. So the token in the link:

  • works once — the second person to click it gets nothing,
  • lasts five minutes,
  • and is exchanged for an ordinary key, not for a session that lives forever.

The key behind it is named after you (panel: <your name>), lasts a day, and carries the scopes you already had. keystone key revoke <id> takes it back early, and revoking yours touches nobody else's.

If a link is clicked late, or twice, the page says so and tells you to type the command again. Which of the two it was is deliberately not said — that is not the clicker's business.

What you may do in the editor depends on who you are. A level-4 operator and the console get a link to everything. Somebody who reached the panel through a group (say a moderator holding keystone.admin) gets a link that is read and moderate only: settings, groups, perks, restoring a backup, running operations by hand, the assistant's writes and translations can be changed only by the owner. The owner is a level-4 operator.

What is in it

#

The screens sit in a side rail, and a screen appears only when its module runs:

Screen What it is for
Overview Players, TPS, tick time and memory now and over the last day, what is coming up, and what needs somebody: open tickets, the assistant's proposals, a staged restore, a module that did not start.
Players Look anybody up: what they hold and where from, a group for a while, a perk, "may they do this?", progress, votes and crate keys, leaderboards and the rank ladder.
Groups Permission groups, what inherits from what, and every rule they end up with and where it came from.
Bans and accounts Bans with an end and a reason, accounts and who was refused.
Operations What is scheduled — restarts, backups, cleanups, notices — and what has already run, including what was skipped and why. Anything can be run now, in 1, 5 or 15 minutes, called off, or put into maintenance with a reason; it also shows what a clean would take. It all takes the same road: the same warnings, the same countdown, the same record.
Backups Backups and putting one back (staged for the next boot and cancellable).
Performance Live, a week of history, and every load test this server has run and what gave out first.
Console and chat The server's own console, live, with levels, search and copy, and chat beside it.
Votes, Tickets, Crates Votes and rewards, tickets, and crates: keys, odds and what is in them.
Discord The state of the bridge and its settings.
Settings Every setting Keystone has, with what it means, and the history of changes.
Languages, Warps Translations (see A player's language) and warps (see Essentials).
Assistant Questions about this server, answered from its own state. Needs a model address set.
Keys and audit The keys that can reach the local API, what each may do, a way to take one back, and who changed what.

Ctrl K (or /) finds any screen, setting, player or group and runs the common actions. The editor is light or dark with the system, or pinned by a switch.

Settings are drafts until you apply them. Change as many as you like; the server checks each as you type and refuses in words what does not fit. Ctrl S shows every change beside what it is now and applies the ones the server took — each a version the history can put back, with an Undo right there. Drafts survive a closed tab (secrets never leave the page). Flags are switches, lists are chips, times of day are a clock, ids are picked from what the server loaded, and chat text is drawn the way a vanilla client draws it.

A screen never appears before it answers. There is no tab that errors and no tab labelled "coming soon".

If the page does not open

#
  • "No editor in this build" — the jar was built without the editor. Use a release build rather than one built from source without the front end.
  • The browser cannot reach the address. The local API listens on 127.0.0.1 by default, so the link works from the machine the server runs on. From anywhere else, either tunnel or set api.reachable-at (below) — and read the local API on what you are exposing before you change it.
  • The link expired. Type /keystone panel again; they are free.

When the editor has to be reachable from elsewhere (0.1.1 and newer)

#

The address the API listens on and the address somebody types into a browser are not the same thing. 0.0.0.0 is a good answer to the first and an unusable answer to the second — a link reading http://0.0.0.0:25586/… opens nowhere. So:

Code
/keystone set keystone.api.address 0.0.0.0
/keystone set keystone.api.reachable-at 192.168.1.100

Leave api.reachable-at empty with the API on a real address and that address is used. Leave it empty with the API on 0.0.0.0 and the mod asks the machine for its own address on the network, with loopback only as a last resort. Setting it wins, which is what you need behind a router, through a tunnel, or under a name you gave the machine.

Behind a reverse proxy with https (0.2.3 and newer), write the whole address with its scheme:

Code
/keystone set keystone.api.reachable-at https://keystone.example.com

An address like that is used as written, without the API's port. The proxy only has to pass /panel (including /panel/claim) and the /v1 paths the editor calls, with the live stream at /v1/events unbuffered. The editor sends its key in an Authorization header and never a cookie, so the proxy has nothing to rewrite. The editor's pages themselves refuse to be framed by another site and do not pass their address on as a referrer.

The link is composed when you ask for one rather than when the server booted, so this setting applies immediately — which matters, because it is the setting you reach for after a link did not open.

Turning it off

#

/keystone set keystone.api.enabled false stops the local API, and the panel with it. Everything else keeps working — the panel is a way in, not a dependency.

Did this page help?

Opens the feedback panel with this page attached. It lands in the same queue as everything else.