Every Flytower release, newest first. Betas are previews of the next version for people on the Beta update channel.
Stable

1.4.1

Flytower 1.4.1 is a security update, and everyone should install it. It comes out of a full review of the code. It tightens how the panel, the system helper and your servers are kept apart, and the checks behind signing in and permissions. Nothing you use day to day changes.

Each Minecraft server now runs in its own group and can no longer see the system helper or the panel's own data. Servers pick this up the next time they restart. The panel is more careful with files in server folders, which the server itself can change. The system helper keeps its own files where only root can change them, and moves older ones across by itself the first time it starts. Updates run one at a time, and Install won't go to an older version, though Go back to still can. If an update can't save a copy of the database first, it stops and leaves everything as it was. A rollback now only removes files that the new version made.

Sign-in and permissions are stricter too. Discord role mappings and cancelling invites follow the same "no more than you have" rule as roles. Deleting an export or a past world asks for your passkey. Removing a passkey signs out your other devices. Recovery codes and setup tokens are harder to guess. The panel refuses changes that come from other websites. Recovery codes made before 1.4.1 still work, but it's worth making new ones under Account. Testing notes are in testing-1.4.0.md.

Features

  • rust-agent: helpers for writing and copying files without following links (51ccd75)
  • agent: helpers for writing and copying files without following links (610a2fe)

Fixes

  • let the box itself see versions on the health check under Bun (a42cc78)
  • rust-agent: move agent state and server archives out of the panel's folder (3faccb8)
  • rust-agent: one update at a time, recorded before the updater starts, and no downgrades (13f5560)
  • rust-agent: keep database copies root-only and never delete a live file the updater did not save (42d0063)
  • agent: clean up database copies in the agent's folder, and serialise with updates (bc45cce)
  • agent: move agent state and server archives out of the panel's folder (f0bf531)
  • agent: one update at a time, recorded before the updater starts, and no downgrades (b4eca6a)
  • agent: keep database copies root-only and never delete a live file the updater did not save (b216eac)
  • health check only tells versions to signed-in people and the box itself (62950a4)
  • type the export and past world delete calls (42d6105)
  • refuse changes from other sites and close the /api/_ gap (20d9f41)
  • check lockfile paths before moving or removing content (a07ef8b)
  • setup token guesses are limited per address and counted up front (5579a94)
  • check the panel's user, not its group, on the Rust agent socket (1be77d0)
  • run servers in their own group and hide the agent from them (b799c9e)
  • removing a passkey signs out your other devices (0003816)
  • past worlds to start a new server from only come from servers you can see (364fa28)
  • only follow jobs that exist and that you can see (c593802)
  • recovery-code sign-in checks one code instead of every code (d88de71)
  • rate limiter forgets old windows and counts the proxy's own hop (4a8a639)
  • deleting an export or past world needs a passkey check (8466d05)
  • validate level-name and keep world readers inside the server folder (53e098e)
  • cancelling an invite needs the standing to have made it (8857b08)
  • Discord role mappings follow the no-more-than-you-have rule (6fdd6b4)
  • write server-folder files through random exclusive temp files (16841c4)
  • only send a saved notification secret back to the same site (36d6b12)

Docs

  • release notes for 1.4.1 and its native build (e5de53f)
  • where the agent keeps its state, database copies and archives (2fcc26f)
  • deleting an export or past world asks for your passkey (fb292d6)
  • passkey removal signs out other devices; Discord role mapping limits (3327a12)

Other

  • pin version ordering in both agents (33dad60)
  • share compareVersions between the panel and the agent (9d2be54)
  • check a running server can't see the agent or the panel's data (1793857)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.4.0...v1.4.1

Stable

1.4.0

Flytower 1.4.0 gives you finer control over who can do what. The broad permissions are now split into smaller ones. For servers, editing settings, managing content, schedules, community settings and backup schedules are separate, and editing the YAML covers all of them. For Flytower itself, updates, notifications, integrations, branding and SSH are separate. Inviting people and managing roles are no longer the same thing as managing people. Existing roles keep everything they could do before. The role editor groups permissions by area and marks the powerful ones, locks the extras a permission brings with it, and lets you copy any role. People can show exactly what each person is able to do, and a server's Settings has an Access section, so someone with Manage who has access can look after one server's people and invite links without touching the rest.

Chat now goes both ways with Discord. Turn on Chat from Discord on the Discord app card under System, Integrations, then switch it on for a server in its Discord chat settings. Messages in that channel then show in game as [Discord] name: message. This needs Message Content Intent turned on for your app in the Discord Developer Portal, and the bot added to your Discord server with the button on the card. The web map zooms smoothly too: it no longer flashes blank while it zooms or redraws, pinch and trackpad zoom glide, nearby zoom levels load ahead of time, and the map's controls and player markers always stay on top.

The system helper and updater now run the Rust versions by default. If the Rust agent fails to start, Flytower falls back to the Bun one by itself and stays on it until the next update. To choose Bun yourself, put bun in /etc/flytower/agent. Testing notes are in testing-1.4.0.md and Testing the Rust agent.

Features

  • chat from Discord switches on the Discord card and server chat card (dacd16f)
  • show messages from a server's Discord chat channel in game (8ef16b1)
  • keep a Discord Gateway connection with heartbeats, resume and backoff (e4471f7)
  • start the Rust agent by default, falling back to Bun if it won't start (ba72ebf)
  • Rust agent clears its start marker once listening (5e50170)
  • Access section on server Settings (8ca45b1)
  • let a server's own access be managed by someone trusted with it (d7a35d4)
  • show what each person can do, from all their roles (f80f280)
  • role editor grouped by area, with copies and locked extras (8f46f6b)
  • say what changed in Activity when roles or access change (4157683)
  • group permissions by area and mark the powerful ones (f21526a)
  • show and hide panel pages by the finer permissions (b0fdf6f)
  • check each part of a spec change against its permission (4c64d2c)
  • check the finer permissions on every route (98c135c)
  • move custom roles to the finer permissions on upgrade (31ba429)
  • split broad permissions into finer keys (bab8d86)

Fixes

  • keep map controls above the tiles (aa5d49c)
  • keep the chat from Discord badge beside its heading, and name a stop plainly (84ebdef)
  • smooth web map zooming (f6bdb7b) · #201

Docs

  • release notes for 1.4.0 and its native build (34c8bc8)
  • release notes for 1.4.0-beta.2 and its native build (e2cfafa)
  • release notes for 1.4.0-beta.1 and its native build (d0f0d03)
  • chat from Discord and its testing notes (72a25ce)
  • keep the updating page's links inside the docs site (8956ba3)
  • Rust agent on by default, and how to choose Bun (5f8e238)
  • managing one server's access (50298ab)
  • the role editor and what someone can do (ee83ff5)
  • drop a testing step that doesn't hold yet (94e21e4)
  • testing notes for the finer permissions (d5a56b4)
  • describe the finer permissions (b9c1215)

Other

  • give the slow RCON command test room for the login (43f02b5)
  • clear the agent's start limit between the E2E's quick restarts (545b94f)
  • check the Rust agent and its Bun fallback end to end (5ffca21)
  • prove nobody gains or loses access in the permission split (a65a42e)

Other changes

  • Merge main into feat/permission-split (78b8ece)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.3.1...v1.4.0

Beta

1.4.0-beta.2

A small fix for the web map. Since the smooth zooming in 1.4.0-beta.1, the map's tiles could be drawn over its controls, so the top bar, the coordinates and the player markers sometimes disappeared under the map. They now always show on top. Nothing else has changed since 1.4.0-beta.1.

Testing: open a server's map, pan and zoom around, and check the top bar, the zoom buttons, the coordinates, the player list and the player markers stay visible. The rest of the testing notes are in testing-1.4.0.md.

Fixes

  • keep map controls above the tiles (aa5d49c)

Docs

  • release notes for 1.4.0-beta.2 and its native build (e2cfafa)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.4.0-beta.1...v1.4.0-beta.2

Beta

1.4.0-beta.1

The first 1.4.0 beta gives you finer control over who can do what. The broad permissions are now split into smaller ones. For servers, editing settings, managing content, schedules, community settings and backup schedules are separate, and editing the YAML covers all of them. For Flytower itself, updates, notifications, integrations, branding and SSH are separate. Inviting people and managing roles are no longer the same thing as managing people. Existing roles keep everything they could do before. The role editor groups permissions by area and marks the powerful ones. It locks the extras a permission brings with it, and it lets you copy any role. People can now show exactly what each person is able to do. A server's Settings has an Access section, so someone with the new Manage who has access permission can look after one server's people and invite links without touching the rest.

Chat now goes both ways with Discord. Turn on Chat from Discord on the Discord app card under System, Integrations, then switch it on for a server in its Discord chat settings. Messages in that channel then show in game as [Discord] name: message. This needs Message Content Intent turned on for your app in the Discord Developer Portal, and the bot added to your Discord server with the new button on the card. The web map also zooms smoothly now. It no longer flashes blank while it zooms or redraws, pinch and trackpad zoom glide, and nearby zoom levels load ahead of time.

The system helper and updater now run the Rust versions by default. If the Rust agent fails to start, Flytower falls back to the Bun one by itself and stays on it until the next update. To choose Bun yourself, put bun in /etc/flytower/agent. This is a beta, so please try it on a test server first. Testing notes are in testing-1.4.0.md and Testing the Rust agent.

Features

  • chat from Discord switches on the Discord card and server chat card (dacd16f)
  • show messages from a server's Discord chat channel in game (8ef16b1)
  • keep a Discord Gateway connection with heartbeats, resume and backoff (e4471f7)
  • start the Rust agent by default, falling back to Bun if it won't start (ba72ebf)
  • Rust agent clears its start marker once listening (5e50170)
  • Access section on server Settings (8ca45b1)
  • let a server's own access be managed by someone trusted with it (d7a35d4)
  • show what each person can do, from all their roles (f80f280)
  • role editor grouped by area, with copies and locked extras (8f46f6b)
  • say what changed in Activity when roles or access change (4157683)
  • group permissions by area and mark the powerful ones (f21526a)
  • show and hide panel pages by the finer permissions (b0fdf6f)
  • check each part of a spec change against its permission (4c64d2c)
  • check the finer permissions on every route (98c135c)
  • move custom roles to the finer permissions on upgrade (31ba429)
  • split broad permissions into finer keys (bab8d86)

Fixes

  • keep the chat from Discord badge beside its heading, and name a stop plainly (84ebdef)
  • smooth web map zooming (f6bdb7b) · #201

Docs

  • release notes for 1.4.0-beta.1 and its native build (d0f0d03)
  • chat from Discord and its testing notes (72a25ce)
  • keep the updating page's links inside the docs site (8956ba3)
  • Rust agent on by default, and how to choose Bun (5f8e238)
  • managing one server's access (50298ab)
  • the role editor and what someone can do (ee83ff5)
  • drop a testing step that doesn't hold yet (94e21e4)
  • testing notes for the finer permissions (d5a56b4)
  • describe the finer permissions (b9c1215)

Other

  • give the slow RCON command test room for the login (43f02b5)
  • clear the agent's start limit between the E2E's quick restarts (545b94f)
  • check the Rust agent and its Bun fallback end to end (5ffca21)
  • prove nobody gains or loses access in the permission split (a65a42e)

Other changes

  • Merge main into feat/permission-split (78b8ece)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.3.1...v1.4.0-beta.1

Beta

native-1.4.1-native.1

The native build of 1.4.1. It's the same code as 1.4.1, published so panels on the Native channel get the security fixes too. The Rust system helper gets the same hardening as the Bun one. It only accepts the panel's own user, keeps its files where only root can change them, and makes updates and rollbacks safe.

Testing: follow Testing the Rust agent on a spare VPS.

Features

  • rust-agent: helpers for writing and copying files without following links (51ccd75)
  • agent: helpers for writing and copying files without following links (610a2fe)

Fixes

  • let the box itself see versions on the health check under Bun (a42cc78)
  • rust-agent: move agent state and server archives out of the panel's folder (3faccb8)
  • rust-agent: one update at a time, recorded before the updater starts, and no downgrades (13f5560)
  • rust-agent: keep database copies root-only and never delete a live file the updater did not save (42d0063)
  • agent: clean up database copies in the agent's folder, and serialise with updates (bc45cce)
  • agent: move agent state and server archives out of the panel's folder (f0bf531)
  • agent: one update at a time, recorded before the updater starts, and no downgrades (b4eca6a)
  • agent: keep database copies root-only and never delete a live file the updater did not save (b216eac)
  • health check only tells versions to signed-in people and the box itself (62950a4)
  • type the export and past world delete calls (42d6105)
  • refuse changes from other sites and close the /api/_ gap (20d9f41)
  • check lockfile paths before moving or removing content (a07ef8b)
  • setup token guesses are limited per address and counted up front (5579a94)
  • check the panel's user, not its group, on the Rust agent socket (1be77d0)
  • run servers in their own group and hide the agent from them (b799c9e)
  • removing a passkey signs out your other devices (0003816)
  • past worlds to start a new server from only come from servers you can see (364fa28)
  • only follow jobs that exist and that you can see (c593802)
  • recovery-code sign-in checks one code instead of every code (d88de71)
  • rate limiter forgets old windows and counts the proxy's own hop (4a8a639)
  • deleting an export or past world needs a passkey check (8466d05)
  • validate level-name and keep world readers inside the server folder (53e098e)
  • cancelling an invite needs the standing to have made it (8857b08)
  • Discord role mappings follow the no-more-than-you-have rule (6fdd6b4)
  • write server-folder files through random exclusive temp files (16841c4)
  • only send a saved notification secret back to the same site (36d6b12)

Docs

  • release notes for 1.4.1 and its native build (e5de53f)
  • where the agent keeps its state, database copies and archives (2fcc26f)
  • deleting an export or past world asks for your passkey (fb292d6)
  • passkey removal signs out other devices; Discord role mapping limits (3327a12)

Other

  • pin version ordering in both agents (33dad60)
  • share compareVersions between the panel and the agent (9d2be54)
  • check a running server can't see the agent or the panel's data (1793857)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.4.0-native.1...native-1.4.1-native.1

Beta

native-1.4.0-native.1

The native build of 1.4.0. It's the same code as 1.4.0, published so panels on the Native channel get it. The Rust agent and updater are on by default, and the agent falls back to Bun by itself if it can't start.

Testing: follow Testing the Rust agent on a spare VPS.

Docs

  • release notes for 1.4.0 and its native build (34c8bc8)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.4.0-beta.2.native.1...native-1.4.0-native.1

Beta

native-1.4.0-beta.2.native.1

The native build of 1.4.0-beta.2. It's the same code as 1.4.0-beta.2, published so panels on the Native channel get the web map fix too. In this build the Rust agent and updater are on by default, and the agent falls back to Bun by itself if it can't start.

Testing: follow Testing the Rust agent on a spare VPS.

Fixes

  • keep map controls above the tiles (aa5d49c)

Docs

  • release notes for 1.4.0-beta.2 and its native build (e2cfafa)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.4.0-beta.1.native.1...native-1.4.0-beta.2.native.1

Beta

native-1.4.0-beta.1.native.1

The native build of 1.4.0-beta.1. It's the same code as 1.4.0-beta.1, published so panels on the Native channel get it. In this build the Rust agent and updater are on by default, and the agent falls back to Bun by itself if it can't start.

Testing: follow Testing the Rust agent on a spare VPS.

Features

  • chat from Discord switches on the Discord card and server chat card (dacd16f)
  • show messages from a server's Discord chat channel in game (8ef16b1)
  • keep a Discord Gateway connection with heartbeats, resume and backoff (e4471f7)
  • start the Rust agent by default, falling back to Bun if it won't start (ba72ebf)
  • Rust agent clears its start marker once listening (5e50170)
  • Access section on server Settings (8ca45b1)
  • let a server's own access be managed by someone trusted with it (d7a35d4)
  • show what each person can do, from all their roles (f80f280)
  • role editor grouped by area, with copies and locked extras (8f46f6b)
  • say what changed in Activity when roles or access change (4157683)
  • group permissions by area and mark the powerful ones (f21526a)
  • show and hide panel pages by the finer permissions (b0fdf6f)
  • check each part of a spec change against its permission (4c64d2c)
  • check the finer permissions on every route (98c135c)
  • move custom roles to the finer permissions on upgrade (31ba429)
  • split broad permissions into finer keys (bab8d86)

Fixes

  • keep the chat from Discord badge beside its heading, and name a stop plainly (84ebdef)
  • smooth web map zooming (f6bdb7b) · #201

Docs

  • release notes for 1.4.0-beta.1 and its native build (d0f0d03)
  • chat from Discord and its testing notes (72a25ce)
  • keep the updating page's links inside the docs site (8956ba3)
  • Rust agent on by default, and how to choose Bun (5f8e238)
  • managing one server's access (50298ab)
  • the role editor and what someone can do (ee83ff5)
  • drop a testing step that doesn't hold yet (94e21e4)
  • testing notes for the finer permissions (d5a56b4)
  • describe the finer permissions (b9c1215)

Other

  • give the slow RCON command test room for the login (43f02b5)
  • clear the agent's start limit between the E2E's quick restarts (545b94f)
  • check the Rust agent and its Bun fallback end to end (5ffca21)
  • prove nobody gains or loses access in the permission split (a65a42e)

Other changes

  • Merge main into feat/permission-split (78b8ece)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.3.1-native.1...native-1.4.0-beta.1.native.1

Stable

1.3.1

Settings and World now show their parts as sections on one page, each with a bar you can open and close, in place of a side menu. Settings has General, Community, Schedules and Maintenance, then a link to edit the server as YAML. World has Backups, Web map, Past worlds and Tools. A closed section shows a short summary, such as "Public page off", and your browser remembers which ones you left open on each tab. Old links still land on the right section.

On phones, the MOTD editor in Settings now fits the screen. It used to run off the right-hand side, which made the whole page scroll sideways.

Features

  • Settings and World as one page of collapsible sections (272e2f6)
  • collapsible sections component (a1f5f58)

Fixes

  • point notifications, tests and docs at the new sections (73ddb2e)
  • keep the MOTD editor within the screen on phones (3781e26)

Docs

  • release notes for 1.3.1 and its native build (60c3dae)

Other

  • G B jumps to the Backups section of World (c457fe8)

Other changes

  • Merge main into feat/collapsible-sections (cd76fe6)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.3.0...v1.3.1

Stable

1.3.0

Flytower 1.3.0 brings your community in. Each server has player stats: leaderboards for playtime, deaths, mob kills, distance and blocks mined, and a card for every player, on the Players tab and, if you like, on the public status page. Connect a Discord app on System, Integrations and your Discord server gets /status, /players, /leaderboard and /stats. Give a Discord role a Flytower role and its members can use /whitelist, /restart, /backup and /say. Discord chat posts game chat, joins and leaves, deaths and advancements to a channel. Each server can also have a web map, drawn by Flytower's own renderer from the world's files. It works on vanilla servers too, keeps up as players build, shows where everyone is, and can be made public.

The panel is quicker to use. The server page has six tabs instead of twelve, with logs and crashes in a pop-up on the console, and each running server's card on the overview shows its tick time, memory and CPU. You get right-click menus on cards and lists, Ctrl+K to jump to any server, tab or action, keyboard shortcuts (press ? to see them), console autocomplete, and Help built into the panel. System, Disk shows what fills the disk outside your servers and can clean it up. Installs from before 1.2 that were updated from the panel get the Caddy setup for status pages on server hostnames by themselves.

Flytower now ships parts written in Rust: flytower-du for disk use, flytower-map for the web map, and a Rust version of the system helper and updater. That last one stays off unless you switch it on (see Testing the Rust agent) until 1.4.0. Testing notes are in testing-1.3.0.md and testing-1.4.0.md.

Features

  • let each browser turn single-key shortcuts off (fd0c73c)
  • show shortcuts in the command palette (78fce4a)
  • save Settings and review YAML with Ctrl+S (6860d53)
  • move through cards and rows with J/K, Enter, . and Shift+Delete (8ce3fd9)
  • add G-jumps, L for logs, between servers, / and the ? sheet (dddb348)
  • add one shortcut list for jumps, the sheet and hints (61abb32)
  • post deaths and advancements to Discord chat (afd6213)
  • right-click menus on notification channels, with Pause and Resume (01f32a5)
  • right-click menus on crashes, with Copy report (0e4da7b)
  • right-click menus on world exports and past worlds (581b7aa)
  • right-click and ⋯ menus on Players rows (fcf7f78)
  • player action list for right-click menus (5356f9c)
  • map markers glide between player positions (ae98c9e)
  • ask for player positions every second, and dimensions less often (9fed6c5)
  • ship the Rust updater behind the same switch (7fcc888)
  • port the updater to Rust (e8dfcfc)
  • command palette on Ctrl + K with servers ahead of help (9048e82)
  • palette links with recent servers and pages (11d04b6)
  • palette entries for servers, their tabs and actions (292317c)
  • show a progress bar while the web map is drawn (3bad87a)
  • the map service passes on how far a draw has got (4dca738)
  • flytower-map reports progress as it draws (be67347)
  • panel: head the rest of the machine, and show the journal's size (b34bd32)
  • suggestions, ghost text and Tab cycling in the console (1155d74)
  • complete console commands in the browser (34257d5)
  • serve each server's command catalogue to the console (e1dc152)
  • read the game's command tree and help for console completion (4db2c17)
  • right-click and ⋯ menus on Content items (9ed0a34)
  • right-click menus on Backups rows (00cde07)
  • right-click menus on Files rows, with Copy path (9d51571)
  • download links work from the phone action sheet (b81fa22)
  • panel: show the rest of the machine in parts on System, with Clean up (c698284)
  • ActionTarget renders the card or row itself, so it works inside tables (52f8aeb)
  • panel: measure disk use through the agent, with clean up (81c3de8)
  • per-browser switch for right-click menus (e741c14)
  • right-click and ⋯ menus on server cards (b626ee4)
  • open clone, delete and back-up confirms from a link (d064f9b)
  • ActionTarget wrapper with keyboard, long-press sheet and browser-menu pass-through (e56e519)
  • rules for right-click menus and the server action list (ca161c7)
  • agent: disk verbs in the Rust agent (22e1a29)
  • show tick time, memory and CPU on the servers overview, with charts in a pop-up (92a20a2)
  • publish each server's last hour of figures for the servers overview (a4f0f18)
  • move Stats onto the Players tab (d8ca54b)
  • open logs and crashes in a pop-up from the Console (462119c)
  • split World and Settings into sections, with Backups, Schedules and YAML inside them (5d4e6b7)
  • agent: measure disk use and clean up as root (b7b0689)
  • protocol: disk.usage and three clean-up verbs (974b233)
  • link the map from the public page once it's drawn (8682411)
  • link a public web map from /status in Discord (abd9cef)
  • link the web map from the public status page (b13438f)
  • include a public web map in the server's public status (abfa5d1)
  • open and share the map from the World tab (5fee78d)
  • our own web map viewer (f5df022)
  • serve the web map at /s//map/ (6c37c83)
  • show the web map on a server's own hostname (6a013b2)
  • ship the Rust agent behind an opt-in switch (8d8ad1f)
  • ship flytower-map in the release (3a137b4)
  • web map card on the World tab (4261b98)
  • map settings, status and drawing through the API (948467e)
  • the panel keeps web maps drawn with flytower-map (dec01b7)
  • disk use counts each server's web map (3c6a04a)
  • port the update verbs to the Rust agent (ee3b38e)
  • check release signatures in the Rust agent (d3771df)
  • the web map has an on switch, off by default (d1c4acc)
  • carry web map settings in the server spec (9426a4e)
  • add per-server web map settings (b497943)
  • providers find the client jar for the web map (827877e)
  • flytower-map palette builds colours from the client jar (65ac095)
  • flytower-map reads files from the client jar (9954278)
  • port runtime.install to the Rust agent (8ad5a18)
  • verified downloads in the Rust agent (75fc541)
  • port the SSH verbs to the Rust agent (1a9bc9a)
  • read ISO times back in the Rust agent (21f9d19)
  • port the server lifecycle verbs to the Rust agent (31f905d)
  • share the server unit template between both agents (916c956)
  • flytower-map command line, with end-to-end tests (8cb56b6)
  • flytower-map draws tiles and only redraws what changed (df212a2)
  • flytower-map decodes chunks against a colour palette (0bee795)
  • flytower-map crate reads NBT and region files (0aeb9cf)
  • add /whitelist, /restart, /backup and /say for Discord staff (e7f13fa)
  • let Discord commands have sub-commands, choices and follow-ups (f93b4b9)
  • register the stats commands with the panel's stats rules (6e163b4)
  • add /leaderboard and /stats Discord commands (c05d99c)
  • let Discord command options offer fixed choices (937fac0)
  • Discord chat card on the server's settings (b7b9e4a)
  • relay each server's chat to its Discord channel, with signed player heads (58b4c0c)
  • post game chat to a Discord webhook within its rate limits (2147dfa)
  • draw a player's face from their skin for avatars (2fe9c4e)
  • show leaderboards on the public status page (1915a5c)
  • serve public leaderboards and the heads on them (79e7592)
  • add an optional leaderboard setting to the public page (8b1e095)
  • store a server's Discord chat relay settings (b9776cc)
  • map Discord roles to Flytower roles on the Discord card (169e7d5)
  • show Discord actions in Activity as "Name via Discord" (4b56f37)
  • give Discord members the Flytower roles mapped to their Discord roles (230c9f0)
  • add a Stats tab with leaderboards and player cards (df68235)
  • serve a server's leaderboards for all time, this month and this week (7834438)
  • build leaderboards and player cards from the stats snapshot (18e1bfc)
  • send the command list to Discord when it changes (867a6f5)
  • answer /status and /players from the status page's roster (c3d3541)
  • add a slash command registry for the Discord app (b3992a5)
  • let people turn stats off and leave players out (eb79238)
  • carry player stats settings in the server spec (80071f2)
  • add per-server player stats settings (5e7dad5)
  • panel: Learn more links beside settings open the right heading (5bccc33)
  • panel: a ? on every page opens its help beside it (db2abb3)
  • panel: Help, the docs for the installed version, with search (7221347)
  • docs: a shared docs layer for the panel and the website (5ee4f18)
  • schedule the stats snapshot and add stats routes (6572cb7)
  • take a daily snapshot of chosen player stats (5fcb69f)
  • add the player stats table (e9ad70e)
  • add System, Integrations with the Discord app card (ae7948e)
  • answer Discord's interactions endpoint (a7bdb5d)
  • connect a Discord app from its bot token (fc12f9a)
  • check Discord interaction signatures with Ed25519 (6de5a5d)
  • follow the journal for service.wait in the Rust agent (c23ee50)
  • wire player sessions into crashes, deletes and boot, with a players summary route (f1c9c03)
  • record player sessions from join and leave lines (2434b21)
  • let the log watcher pass on raw lines (1ef8db7)
  • add player sessions and names tables (ed574df)
  • port the service verbs to the Rust agent (25cdd23)
  • run programs from the Rust agent without a shell (3193042)
  • serve the Rust agent on the agent socket with a peer check (3d56695)
  • dispatch requests and write the audit log in the Rust agent (50413ca)
  • add the Rust agent's protocol types (48b3ce9)
  • updates: number native builds after the release they go with (8270b4f) · #134
  • installer: --native installs the newest native build (d79b6ac) · #134
  • agent: download native builds from their own tag (9b5c93b) · #134
  • updates: a Native channel for builds of the native branch (478652b) · #134
  • disk: measure with flytower-du when it's there (f1a40d3) · #136
  • du: add flytower-du, a Rust disk walker (f64592b) · #136
  • installer: start the agent through bin/flytower-agent (d957684) · #135
  • agent: start the agent and updater through the stable entry points (d6a6276) · #135
  • agent: ship stable flytower-agent and flytower-updater entry points (b961480) · #135
  • protocol: export the agent protocol as JSON Schema (85cae8e) · #135

Fixes

  • console say, me and msg show under Server and your name, not Rcon (d4a61c6)
  • add server hostnames to an old Caddyfile in the Rust agent too (06bcb26)
  • add server hostnames to an old Caddyfile when the agent starts (d728ea0)
  • post joins and leaves as plain text, like the rest of the chat relay (f54de7d)
  • show join and leave lines in Discord chat (22ee71b)
  • redraw every map once with the fixed renderer (687ec95)
  • read block names the way Minecraft 26.3 saves them (0b5f92c)
  • open the newest log straight away, and keep Back closing the logs pop-up (e888bbc)
  • point links, notifications and help at the new server sections (5ec964a)
  • give the Rust agent steps inline (c3ca6ac)
  • wrap the saved webhook on narrow screens (2878c98)
  • give the Discord test status the leaderboard field (cf49b5a)
  • check Manage people first when saving Discord roles (ec63bc1)
  • list the leaderboards route in the permission table (64a67ce)
  • show leaderboard icons and label each figure on player cards (e7d8ed2)
  • panel: serve the help docs' database from its route instead of prerendering it (9ba3eb3)

Docs

  • release notes for 1.3.0 and its native build (e82f1df)
  • add system disk use to the 1.3.0-beta.3 notes (ab864d1)
  • keyboard shortcuts page and 1.4.0 testing notes (cc45797)
  • release notes for 1.3.0-beta.3 and its native build (4c1cc31)
  • hostnames start working after an update, no installer re-run (53cb5c4)
  • testing notes for the remaining right-click menus (fdbd9d5)
  • console autocomplete testing notes (cf19e3c)
  • release summary for 1.3.0-beta.2 (579cebd)
  • command palette testing notes (73d333f)
  • typing commands in the console (48ac8bd)
  • testing notes for list right-click menus (501ebcc)
  • right-click menus and 1.4.0 testing notes (e0ff693)
  • native builds come from main now (98f4cc0)
  • release notes for 1.3.0-beta.1 and its native build (9159656)
  • the web map, drawn by Flytower (22d7b68)
  • give the player stats page its Help section and order (28df4c6)
  • describe the Discord staff commands (d07764b)
  • help frontmatter for the Discord page; move the 1.3.0 test script (e387eb9)
  • /leaderboard and /stats in Discord (ac16e7b)
  • game chat to Discord, and how to test it (4d2d5ad)
  • leaderboards on the public status page (c67c26f)
  • add Discord roles to the 1.3.0 testing checklist (f909aa5)
  • explain Discord role mapping (b572a22)
  • explain player stats and the leaderboards (e04df36)
  • describe the Discord commands and how to test them (c032092)
  • testing notes for Help in the panel (c979d6b)
  • give every page a section, an order and the panel routes it explains (f02f7a3)
  • move release test scripts into docs/testing (9968c23)
  • explain connecting a Discord app (5b9e567)
  • 1.2.1-native.1 release summary (142f156)
  • release summary for 1.2.0-beta.2.native.1 (a51b4ef)
  • record the decision to bring in Rust and Go (1b954ab) · #134

Other

  • go back to the console before the crash banner check (ff3fd59)
  • share the per-browser on/off switch (4c15618)
  • don't reuse a name the smoke test already declares (d9f5166)
  • check console completion against a real server in E2E (ebc1b96)
  • panel: the clean-up route needs system.manage (30c0a75)
  • share the copy-with-toast helper between menus (1ffe81c)
  • right-click menu on a running server card in E2E (48e8af3)
  • give the map's maximum-wait test room on a busy runner (7a1e449)
  • put the stats view in its own component so it can move pages (7cb89d6)
  • cover the Discord staff commands (121aa25)
  • share player and power actions between the panel and Discord (a3f388f)
  • list the Discord role routes in the permission table (b8e731d)
  • cover Discord role mapping, refusals and Activity (2644a19)
  • build a server's public status in one place (b993e3f)
  • panel: rename parseMarkdown to parseNotes (c27e9ee)
  • recognise native versions like 1.2.0-beta.2.native.1 (8253e5c) · #134
  • release native builds under native- tags (6505c61) · #134
  • build flytower-du into releases and check it on amd64 and arm64 (5fa5272) · #136
  • protocol: shared fixtures every implementation must agree on (a048004) · #135

Other changes

  • Merge main into feat/keyboard-shortcuts (284de08)
  • Merge main into feat/right-click-more (74b5dd3)
  • Merge main into feat/keyboard-shortcuts (dee37e0)
  • Merge main into feat/system-disk-use (fddc78a)
  • Merge main into feat/system-disk-use (18485b3)
  • Merge main into feat/system-disk-use (165e561)
  • Merge main into feat/system-disk-use (3b03cfc)
  • Merge main into feat/server-tabs (0ed6057)
  • Merge main into feat/map-public (cc45486)
  • Merge main into feat/map-panel; renumber the map migration to 0021 (78d26aa)
  • Merge main into feat/map-renderer (134ffd0)
  • Merge main into feat/discord-staff-commands (4c27238)
  • Merge main into feat/discord-roles (2dec38f)
  • Merge v1.2.1 into native (9edc05a)
  • Merge v1.2.0-beta.2 into native (b389c71)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.2.1...v1.3.0

Beta

1.3.0-beta.3

The server page is simpler. It now has six tabs instead of twelve: Console, Players, Content, World, Files and Settings. Logs and crashes open in a large pop-up from the console, stats sit on the Players tab, and backups, the web map, past worlds and world tools are grouped in a side menu on World. Old links still work. Each running server's card on the servers overview now shows its tick time, memory and CPU, with a line for the last hour, marked fine, busy or struggling.

The panel is also quicker to get around. Server cards, files, backups and content have right-click menus with the same actions as their ⋯ buttons. On a phone, press and hold to get them. Shift and right-click still gives the browser's own menu. Ctrl+K (⌘K on a Mac) now finds servers, their tabs and actions, and the panel's pages, as well as help. The console suggests commands as you type, including player names, item and block ids, and commands added by mods and plugins. Press Tab to fill one in.

System, Disk now breaks down what's outside your servers into Java runtimes, Flytower, system logs, package cache and the operating system. Clean up can shrink the system journal, clear the package cache, or remove old Flytower versions. Each one asks for your passkey and is recorded in Activity.

Discord chat now posts joins and leaves (they were blank before) and can post deaths and advancements, with a switch for each on the Discord chat card. Players move on the web map every second instead of every three, and glide between positions. Installs from before 1.2 that were updated from the panel now get the Caddy setup that serves status pages on server hostnames, so you don't need to re-run the installer. The Rust updater also ships, behind the same off-by-default switch as the Rust agent. Testing notes are in testing-1.3.0.md, and disk use is in testing-1.4.0.md.

Features

  • post deaths and advancements to Discord chat (afd6213)
  • map markers glide between player positions (ae98c9e)
  • ask for player positions every second, and dimensions less often (9fed6c5)
  • ship the Rust updater behind the same switch (7fcc888)
  • port the updater to Rust (e8dfcfc)
  • command palette on Ctrl + K with servers ahead of help (9048e82)
  • palette links with recent servers and pages (11d04b6)
  • palette entries for servers, their tabs and actions (292317c)
  • panel: head the rest of the machine, and show the journal's size (b34bd32)
  • suggestions, ghost text and Tab cycling in the console (1155d74)
  • complete console commands in the browser (34257d5)
  • serve each server's command catalogue to the console (e1dc152)
  • read the game's command tree and help for console completion (4db2c17)
  • right-click and ⋯ menus on Content items (9ed0a34)
  • right-click menus on Backups rows (00cde07)
  • right-click menus on Files rows, with Copy path (9d51571)
  • download links work from the phone action sheet (b81fa22)
  • panel: show the rest of the machine in parts on System, with Clean up (c698284)
  • ActionTarget renders the card or row itself, so it works inside tables (52f8aeb)
  • panel: measure disk use through the agent, with clean up (81c3de8)
  • per-browser switch for right-click menus (e741c14)
  • right-click and ⋯ menus on server cards (b626ee4)
  • open clone, delete and back-up confirms from a link (d064f9b)
  • ActionTarget wrapper with keyboard, long-press sheet and browser-menu pass-through (e56e519)
  • rules for right-click menus and the server action list (ca161c7)
  • agent: disk verbs in the Rust agent (22e1a29)
  • show tick time, memory and CPU on the servers overview, with charts in a pop-up (92a20a2)
  • publish each server's last hour of figures for the servers overview (a4f0f18)
  • move Stats onto the Players tab (d8ca54b)
  • open logs and crashes in a pop-up from the Console (462119c)
  • split World and Settings into sections, with Backups, Schedules and YAML inside them (5d4e6b7)
  • agent: measure disk use and clean up as root (b7b0689)
  • protocol: disk.usage and three clean-up verbs (974b233)

Fixes

  • add server hostnames to an old Caddyfile in the Rust agent too (06bcb26)
  • add server hostnames to an old Caddyfile when the agent starts (d728ea0)
  • post joins and leaves as plain text, like the rest of the chat relay (f54de7d)
  • show join and leave lines in Discord chat (22ee71b)
  • open the newest log straight away, and keep Back closing the logs pop-up (e888bbc)
  • point links, notifications and help at the new server sections (5ec964a)

Docs

  • add system disk use to the 1.3.0-beta.3 notes (ab864d1)
  • release notes for 1.3.0-beta.3 and its native build (4c1cc31)
  • hostnames start working after an update, no installer re-run (53cb5c4)
  • console autocomplete testing notes (cf19e3c)
  • command palette testing notes (73d333f)
  • typing commands in the console (48ac8bd)
  • testing notes for list right-click menus (501ebcc)
  • right-click menus and 1.4.0 testing notes (e0ff693)

Other

  • go back to the console before the crash banner check (ff3fd59)
  • don't reuse a name the smoke test already declares (d9f5166)
  • check console completion against a real server in E2E (ebc1b96)
  • panel: the clean-up route needs system.manage (30c0a75)
  • share the copy-with-toast helper between menus (1ffe81c)
  • right-click menu on a running server card in E2E (48e8af3)

Other changes

  • Merge main into feat/system-disk-use (fddc78a)
  • Merge main into feat/system-disk-use (18485b3)
  • Merge main into feat/system-disk-use (165e561)
  • Merge main into feat/system-disk-use (3b03cfc)
  • Merge main into feat/server-tabs (0ed6057)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.3.0-beta.2...v1.3.0-beta.3

Beta

1.3.0-beta.2

The web map now draws worlds from Minecraft 26.3. In 26.3 the game changed how chunks record which block is which, and Flytower's renderer read every block as air, so the map showed players but no terrain. Maps you've already turned on are redrawn in full once after the update, so nothing needs switching off and on again.

While the map is being drawn, the Web map card on the World tab now shows how far it has got, as "N of M regions" with a progress bar. A full redraw of a big world can take a while, so this shows it's moving.

Testing: update, open World → Web map and watch the bar fill as the map redraws, then open the map and check that terrain, water and trees show. Testing notes are in testing-1.3.0.md.

Features

  • show a progress bar while the web map is drawn (3bad87a)
  • the map service passes on how far a draw has got (4dca738)
  • flytower-map reports progress as it draws (be67347)

Fixes

  • redraw every map once with the fixed renderer (687ec95)
  • read block names the way Minecraft 26.3 saves them (0b5f92c)
  • give the Rust agent steps inline (c3ca6ac)

Docs

  • release summary for 1.3.0-beta.2 (579cebd)
  • native builds come from main now (98f4cc0)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.3.0-beta.1...v1.3.0-beta.2

Beta

1.3.0-beta.1

The first 1.3.0 beta brings your community into Flytower. Each server has a new Stats tab with leaderboards for playtime, deaths, mob kills, distance and blocks mined (all time, this month or this week) and a card for every player, built from play sessions and a daily snapshot of the game's own stats. Players can be left out, and the public status page can show the leaderboards too. Flytower can also answer slash commands in your Discord server: connect a Discord app on System, Integrations with its bot token, and /status, /players, /leaderboard and /stats work straight away. Give a Discord role a Flytower role and its members can use /whitelist, /restart, /backup and /say, with every command in Activity as "Name via Discord". A server's Settings can also post game chat, joins and leaves to a Discord channel through a webhook. See Player stats and Discord.

Servers can now have a web map, drawn by Flytower's own renderer from the world's files, so it works on vanilla servers too and needs no mod. Switch it on from the World tab: it keeps up as players explore and build, shows where everyone is while you watch, and can be made public on the status page and in Discord. The panel also has Help built in, with the docs for the version you're running in the sidebar, a ? on every page and search on Ctrl+K. System, Disk now measures with flytower-du, a small Rust program that's much quicker on big worlds. The Rust rewrite of the system helper ships too, but it's off unless you switch it on (see Testing the Rust agent). See Web map.

This is a beta, and the web map hasn't been tried on a real world yet, so please use a test server. Testing notes are in testing-1.3.0.md.

Features

  • link the map from the public page once it's drawn (8682411)
  • link a public web map from /status in Discord (abd9cef)
  • link the web map from the public status page (b13438f)
  • include a public web map in the server's public status (abfa5d1)
  • open and share the map from the World tab (5fee78d)
  • our own web map viewer (f5df022)
  • serve the web map at /s//map/ (6c37c83)
  • show the web map on a server's own hostname (6a013b2)
  • ship the Rust agent behind an opt-in switch (8d8ad1f)
  • ship flytower-map in the release (3a137b4)
  • web map card on the World tab (4261b98)
  • map settings, status and drawing through the API (948467e)
  • the panel keeps web maps drawn with flytower-map (dec01b7)
  • disk use counts each server's web map (3c6a04a)
  • port the update verbs to the Rust agent (ee3b38e)
  • check release signatures in the Rust agent (d3771df)
  • the web map has an on switch, off by default (d1c4acc)
  • carry web map settings in the server spec (9426a4e)
  • add per-server web map settings (b497943)
  • providers find the client jar for the web map (827877e)
  • flytower-map palette builds colours from the client jar (65ac095)
  • flytower-map reads files from the client jar (9954278)
  • port runtime.install to the Rust agent (8ad5a18)
  • verified downloads in the Rust agent (75fc541)
  • port the SSH verbs to the Rust agent (1a9bc9a)
  • read ISO times back in the Rust agent (21f9d19)
  • port the server lifecycle verbs to the Rust agent (31f905d)
  • share the server unit template between both agents (916c956)
  • flytower-map command line, with end-to-end tests (8cb56b6)
  • flytower-map draws tiles and only redraws what changed (df212a2)
  • flytower-map decodes chunks against a colour palette (0bee795)
  • flytower-map crate reads NBT and region files (0aeb9cf)
  • add /whitelist, /restart, /backup and /say for Discord staff (e7f13fa)
  • let Discord commands have sub-commands, choices and follow-ups (f93b4b9)
  • register the stats commands with the panel's stats rules (6e163b4)
  • add /leaderboard and /stats Discord commands (c05d99c)
  • let Discord command options offer fixed choices (937fac0)
  • Discord chat card on the server's settings (b7b9e4a)
  • relay each server's chat to its Discord channel, with signed player heads (58b4c0c)
  • post game chat to a Discord webhook within its rate limits (2147dfa)
  • draw a player's face from their skin for avatars (2fe9c4e)
  • show leaderboards on the public status page (1915a5c)
  • serve public leaderboards and the heads on them (79e7592)
  • add an optional leaderboard setting to the public page (8b1e095)
  • store a server's Discord chat relay settings (b9776cc)
  • map Discord roles to Flytower roles on the Discord card (169e7d5)
  • show Discord actions in Activity as "Name via Discord" (4b56f37)
  • give Discord members the Flytower roles mapped to their Discord roles (230c9f0)
  • add a Stats tab with leaderboards and player cards (df68235)
  • serve a server's leaderboards for all time, this month and this week (7834438)
  • build leaderboards and player cards from the stats snapshot (18e1bfc)
  • send the command list to Discord when it changes (867a6f5)
  • answer /status and /players from the status page's roster (c3d3541)
  • add a slash command registry for the Discord app (b3992a5)
  • let people turn stats off and leave players out (eb79238)
  • carry player stats settings in the server spec (80071f2)
  • add per-server player stats settings (5e7dad5)
  • panel: Learn more links beside settings open the right heading (5bccc33)
  • panel: a ? on every page opens its help beside it (db2abb3)
  • panel: Help, the docs for the installed version, with search (7221347)
  • docs: a shared docs layer for the panel and the website (5ee4f18)
  • schedule the stats snapshot and add stats routes (6572cb7)
  • take a daily snapshot of chosen player stats (5fcb69f)
  • add the player stats table (e9ad70e)
  • add System, Integrations with the Discord app card (ae7948e)
  • answer Discord's interactions endpoint (a7bdb5d)
  • connect a Discord app from its bot token (fc12f9a)
  • check Discord interaction signatures with Ed25519 (6de5a5d)
  • follow the journal for service.wait in the Rust agent (c23ee50)
  • wire player sessions into crashes, deletes and boot, with a players summary route (f1c9c03)
  • record player sessions from join and leave lines (2434b21)
  • let the log watcher pass on raw lines (1ef8db7)
  • add player sessions and names tables (ed574df)
  • port the service verbs to the Rust agent (25cdd23)
  • run programs from the Rust agent without a shell (3193042)
  • serve the Rust agent on the agent socket with a peer check (3d56695)
  • dispatch requests and write the audit log in the Rust agent (50413ca)
  • add the Rust agent's protocol types (48b3ce9)
  • updates: number native builds after the release they go with (8270b4f) · #134
  • installer: --native installs the newest native build (d79b6ac) · #134
  • agent: download native builds from their own tag (9b5c93b) · #134
  • updates: a Native channel for builds of the native branch (478652b) · #134
  • disk: measure with flytower-du when it's there (f1a40d3) · #136
  • du: add flytower-du, a Rust disk walker (f64592b) · #136
  • installer: start the agent through bin/flytower-agent (d957684) · #135
  • agent: start the agent and updater through the stable entry points (d6a6276) · #135
  • agent: ship stable flytower-agent and flytower-updater entry points (b961480) · #135
  • protocol: export the agent protocol as JSON Schema (85cae8e) · #135

Fixes

  • wrap the saved webhook on narrow screens (2878c98)
  • give the Discord test status the leaderboard field (cf49b5a)
  • check Manage people first when saving Discord roles (ec63bc1)
  • list the leaderboards route in the permission table (64a67ce)
  • show leaderboard icons and label each figure on player cards (e7d8ed2)
  • panel: serve the help docs' database from its route instead of prerendering it (9ba3eb3)

Docs

  • release notes for 1.3.0-beta.1 and its native build (9159656)
  • the web map, drawn by Flytower (22d7b68)
  • give the player stats page its Help section and order (28df4c6)
  • describe the Discord staff commands (d07764b)
  • help frontmatter for the Discord page; move the 1.3.0 test script (e387eb9)
  • /leaderboard and /stats in Discord (ac16e7b)
  • game chat to Discord, and how to test it (4d2d5ad)
  • leaderboards on the public status page (c67c26f)
  • add Discord roles to the 1.3.0 testing checklist (f909aa5)
  • explain Discord role mapping (b572a22)
  • explain player stats and the leaderboards (e04df36)
  • describe the Discord commands and how to test them (c032092)
  • testing notes for Help in the panel (c979d6b)
  • give every page a section, an order and the panel routes it explains (f02f7a3)
  • move release test scripts into docs/testing (9968c23)
  • explain connecting a Discord app (5b9e567)
  • 1.2.1-native.1 release summary (142f156)
  • release summary for 1.2.0-beta.2.native.1 (a51b4ef)
  • record the decision to bring in Rust and Go (1b954ab) · #134

Other

  • give the map's maximum-wait test room on a busy runner (7a1e449)
  • put the stats view in its own component so it can move pages (7cb89d6)
  • cover the Discord staff commands (121aa25)
  • share player and power actions between the panel and Discord (a3f388f)
  • list the Discord role routes in the permission table (b8e731d)
  • cover Discord role mapping, refusals and Activity (2644a19)
  • build a server's public status in one place (b993e3f)
  • panel: rename parseMarkdown to parseNotes (c27e9ee)
  • recognise native versions like 1.2.0-beta.2.native.1 (8253e5c) · #134
  • release native builds under native- tags (6505c61) · #134
  • build flytower-du into releases and check it on amd64 and arm64 (5fa5272) · #136
  • protocol: shared fixtures every implementation must agree on (a048004) · #135

Other changes

  • Merge main into feat/map-public (cc45486)
  • Merge main into feat/map-panel; renumber the map migration to 0021 (78d26aa)
  • Merge main into feat/map-renderer (134ffd0)
  • Merge main into feat/discord-staff-commands (4c27238)
  • Merge main into feat/discord-roles (2dec38f)
  • Merge v1.2.1 into native (9edc05a)
  • Merge v1.2.0-beta.2 into native (b389c71)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.2.1...v1.3.0-beta.1

Stable

1.2.1

Join and leave notifications work on Minecraft 26.x. Recent versions log joins as System chat: Steve joined the game, which Flytower didn't recognise, so no join or leave notifications were sent and the public status page missed who was online. To get them, tick A player joined and A player left on a notification channel in System → Notifications.

Testing: join and leave a 26.x server, and check that each notification arrives within a second and that the status page lists you while you're on.

Fixes

  • notify: read joins and leaves that Minecraft 26.x logs as system chat (3f67e66)

Docs

  • 1.2.1 release summary (1832a40)
  • 1.2.0 release summary (a8f9750)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.2.0...v1.2.1

Stable

1.2.0

Flytower 1.2.0 is about people and sharing. People and roles: invite people with a one-time link from the new Access page as an Admin, Operator or Viewer, for one server or all of them, or build your own roles from a list of permissions. Everyone sees only the servers and buttons they can use, and you become the Owner when you update. Your account (click your name in the sidebar) holds your name, theme, passkeys and recovery codes. Each server can also have a public status page at /s/<server name>, or on its own hostname, showing whether it's up, the address to join, who's online and, on Fabric, a .mrpack modpack to download. Re-run the installer once with the same --domain for hostnames to work.

Servers look more like themselves too. There's a rich-text MOTD editor with a live preview of the multiplayer list, an uploaded server icon, player heads on the Players tab (fetched by Flytower itself, never by a third-party site), and branding on System for your own name, colour, font and logo across the panel, sign-in, Discord and in-game messages. Resetting a world can keep the old one as a past world to download, share or import, and any backup can be kept forever. Client-only Modrinth projects can now be installed when you ask for them, with a warning in the plan.

Testing notes are in testing-1.2.0.md.

Features

  • document the Access page (23a0acc)
  • rename People to Access, with People and Roles tabs (73eda62)
  • pick your appearance with the colour mode select (d7abe18)
  • document Your account and the new People page (c49ced0)
  • give People and Your account their own places in the sidebar (4990633)
  • let people rename themselves, save their theme and sign out everywhere (bff9e7d)
  • end older sessions when the session version changes (d87d477)
  • hide what a person can't use, and show view-only tabs (bed7397)
  • role editor on the People page (ff59ff2)
  • custom roles built from the permission list (42eb8df)
  • installer prints a setup link (f363575)
  • People page under System (46d55c1)
  • setup and invite links fill the token in (e409a45)
  • join through an invite link with a new passkey (a0906b2)
  • invite, change and remove people (e572e46)
  • store invite links (b061ab6)
  • send live topics only to people who can see them (cde77d0)
  • check a permission on every API route (efaf60a)
  • add roles, grants and the permission list (ff4b321)
  • status: serve the public page on each server's own hostname (60e3243)
  • status: players' modpack download on the public page (89b902f)
  • providers: Modrinth lookups for players' modpacks (d8bfec5)
  • status: show the server icon on the public page (01782e3)
  • upload a server icon for the multiplayer list (#120) (76402db)
  • upload, crop and remove a server icon in Game settings (1833980)
  • status: MOTD and link previews on the public page (39b917b)
  • set and remove a server's icon through the API (87c5835)
  • check server icons as PNGs and keep only their image chunks (8f1c83c)
  • status: public status page at /s/ and its settings card (05d00a4)
  • rich text MOTD editor with live preview (#115) (981b841)
  • status: public status API with a roster kept from the log (27a437c)
  • spec: public page settings in the spec and the database (5aafd9c)
  • configurable branding: name, colours, font and logo (#118) (9656776)
  • keep past worlds when resetting a world (#114) (17d98f5)
  • one two-line box for the MOTD instead of two inputs (d66bf83)
  • branding: describe branding changes in Activity (5743aa1)
  • player heads on the Players tab (#113) (eb41554)
  • rich text MOTD editor with a second line and Show codes (2429e44)
  • preview the server's entry in the multiplayer list (92f6961)
  • self-host Monocraft for the MOTD preview (e7febbc)
  • branding: System > Branding, and the brand across the panel (d50eebe)
  • branding: use the brand in Discord, in-game messages and passkey prompts (903911f)
  • branding: store branding and serve the theme, logo and favicon (09691a2)
  • branding: clean uploaded SVG and PNG logos (bae3766)
  • branding: colour scale, contrast checks and theme stylesheet from one accent (1a7317b)
  • past worlds on the World tab, and keep options in the reset dialog (03c2042)
  • start a new server from a past world (c558635)
  • keep the old world and its backup when resetting (a0c6254)
  • past worlds, kept as named exports that never expire (7f9aa3b)
  • backups that retention never deletes (62d06dc)
  • player heads on the Players tab (6487a70)
  • read, write and lay out § formatted MOTDs (b6c3ffe)
  • show client-only switch in content search (babfede) · #72
  • UUIDs for online players, from usercache.json (65e2847)
  • cache player skins on disk and serve them to the panel (8c5a2eb)
  • providers: read player skins from Mojang's session server (21b3960)

Fixes

  • bundle the invites migration again after the merge (62a3c0d)
  • keep the bundled migrations as generated (6aaecb8)
  • only list disk use and updates for servers a person can see (1b1231f)
  • notify: look at the log once more after each change (3c13427)
  • console: read the log again when asked during a read (81500eb)
  • bundle the roles migration (f3e28ce)
  • install client-only Modrinth projects when asked for (#111) (a524a1c)
  • branding: line up the form, and keep edits when branding changes elsewhere (44d685b)
  • branding: tidy the Powered by Flytower line (f55db97)
  • branding: fit the name in the sidebar on one line (941ff96)
  • refresh past worlds after a reset without reloading the page (c2a2288)
  • branding: keep a long name on one line and the tab title current (55e8bf3)
  • keep the MOTD's second line when a server is created (01473e7)
  • show content warnings in plans without blocking apply (65604c8) · #72
  • install client-only Modrinth projects when asked for, with a warning (f6e3a34) · #72

Docs

  • fold the people and roles notes into 1.2.0-beta.2 (2268de0)
  • custom roles and what people see (4d5788e)
  • people and roles (1d1e8f6)
  • testing notes and release notes for roles groundwork (48293a3)
  • don't name Chunky as server-only; Modrinth marks it optional on clients (106c067)
  • modpack fields in the YAML reference, testing notes and release summary (c8c7803)
  • players' modpack guide, YAML fields and testing notes (f49ff19)
  • public status page guide, YAML reference, testing notes and release summary (470b4d5)
  • release summary for 1.1.0 (35a69b2)
  • how to release an older commit (77eb9af)
  • server icons, and testing notes (0c1d906)
  • bring the README up to date for 1.1.0 and 1.2.0 (#119) (d28a5e4)
  • bring the README up to date for 1.1.0 and 1.2.0 (cf33c63)
  • release summary for branding (ceab6f5)
  • branding, and its testing notes (2cb10cc)
  • MOTD editor, codes in the spec, and testing notes (9a6bd0b)
  • past worlds, kept backups, and testing notes (6da0d70)
  • release summary and testing notes for player heads (7ddd483)
  • client-only mods, testing notes and release summary (32eb89c) · #72

Other

  • custom roles (1e45fd3)
  • invites, last Owner and people changes (359bc5e)
  • fail when an API route skips its permission check (4b429a1)
  • release a chosen tag, branch or commit, with a 1.1.0 summary (#121) (b6e1469)
  • the sealer test can't fail when ciphertext happens to contain "shh" (e14c73e)
  • release: a stable release's notes cover everything since the last stable one (7bda909)
  • release a chosen tag, branch or commit from the Release workflow (ad640a5)
  • e2e: save branding through the UI and reset it (ec38e7d)
  • a two-line MOTD with codes round-trips through YAML (92af9e0)
  • branding: colours, cleaning, storage and where the brand shows (9fa478d)
  • run E2E less often: skip housekeeping-only merges, one upgrade per minor version (a54256e)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.1.0...v1.2.0

Beta

1.2.0-beta.2

People and roles. Invite people with a one-time link from the new Access page in the sidebar, as an Admin, Operator or Viewer, for one server or all of them, or make your own roles from a list of permissions on the Roles tab. People see only the servers and buttons they can use, and changes apply straight away. You become the Owner when you update. Click your name at the bottom of the sidebar for Your account: your name, light or dark (remembered on every device), passkeys, recovery codes and signing out everywhere else. SSH now has its own section in System, and the installer prints a setup link so first-time setup is one click. See People and roles.

Public status page. Each server can have a page anyone can open without signing in, at /s/<server name>, showing its icon, MOTD, a description you write, whether it's up, the address to join and who's online (a count, names and heads, or nothing, as you choose). On Fabric it also offers a modpack (.mrpack) with the server's mods and any client-only extras you add, and a server with its own hostname shows its page at https://<hostname>. Turn it on from the server's Settings, Public page. Existing installs need the installer re-run once, with the same --domain, for hostnames to work. See Public status page.

Join and leave notifications are reliable again.

Testing notes are in the "Public status page" and "People and roles" sections of testing-1.2.0.md.

Features

  • document the Access page (23a0acc)
  • rename People to Access, with People and Roles tabs (73eda62)
  • pick your appearance with the colour mode select (d7abe18)
  • document Your account and the new People page (c49ced0)
  • give People and Your account their own places in the sidebar (4990633)
  • let people rename themselves, save their theme and sign out everywhere (bff9e7d)
  • end older sessions when the session version changes (d87d477)
  • hide what a person can't use, and show view-only tabs (bed7397)
  • role editor on the People page (ff59ff2)
  • custom roles built from the permission list (42eb8df)
  • installer prints a setup link (f363575)
  • People page under System (46d55c1)
  • setup and invite links fill the token in (e409a45)
  • join through an invite link with a new passkey (a0906b2)
  • invite, change and remove people (e572e46)
  • store invite links (b061ab6)
  • send live topics only to people who can see them (cde77d0)
  • check a permission on every API route (efaf60a)
  • add roles, grants and the permission list (ff4b321)
  • status: serve the public page on each server's own hostname (60e3243)
  • status: players' modpack download on the public page (89b902f)
  • providers: Modrinth lookups for players' modpacks (d8bfec5)
  • status: show the server icon on the public page (01782e3)
  • status: MOTD and link previews on the public page (39b917b)
  • status: public status page at /s/ and its settings card (05d00a4)
  • status: public status API with a roster kept from the log (27a437c)
  • spec: public page settings in the spec and the database (5aafd9c)

Fixes

  • bundle the invites migration again after the merge (62a3c0d)
  • keep the bundled migrations as generated (6aaecb8)
  • only list disk use and updates for servers a person can see (1b1231f)
  • notify: look at the log once more after each change (3c13427)
  • console: read the log again when asked during a read (81500eb)
  • bundle the roles migration (f3e28ce)

Docs

  • fold the people and roles notes into 1.2.0-beta.2 (2268de0)
  • custom roles and what people see (4d5788e)
  • people and roles (1d1e8f6)
  • testing notes and release notes for roles groundwork (48293a3)
  • don't name Chunky as server-only; Modrinth marks it optional on clients (106c067)
  • modpack fields in the YAML reference, testing notes and release summary (c8c7803)
  • players' modpack guide, YAML fields and testing notes (f49ff19)
  • public status page guide, YAML reference, testing notes and release summary (470b4d5)

Other

  • custom roles (1e45fd3)
  • invites, last Owner and people changes (359bc5e)
  • fail when an API route skips its permission check (4b429a1)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.2.0-beta.1...v1.2.0-beta.2

Beta

1.2.0-beta.1

Players now have faces. Every list on the Players tab (online, whitelist, operators and bans) shows each player's head, with the hat layer, next to their name. Flytower fetches skins from Mojang itself and keeps them on disk under /var/lib/flytower/skins, so your browser never tells a third-party avatar site who plays on your server, a player's skin is checked again only once a day, and heads keep showing when Mojang is down. Offline-mode and unknown players get the default Steve or Alex head without anything being sent to Mojang.

Client-only mods can now be installed. Modrinth lets authors mark a project as running only on players' computers, and Flytower used to refuse those outright, even when a server mod needed one. Now a client-only project you list in the YAML, or add from Add content with the new Show client-only switch, is installed like anything else, and so is a client-only required dependency. The plan shows a warning naming it (and, for a dependency, the mod that needs it), so you know where to look if the server won't start. Search still hides client-only projects by default. See Client-only mods.

Resetting a world can now end a season instead of throwing it away. The reset dialog offers to keep the old world as a past world under a name you choose, such as "2025–26 world", zipped with its datapacks so it opens in single player as it was, and to keep the final backup forever so retention never deletes it. Past worlds are listed on the World tab until you delete them, where each can be downloaded, shared with a link, renamed, or turned into a new server through Import. Any backup can also be marked Keep forever from its menu. See Past worlds.

Flytower can now wear your own brand. On System → Branding, set a name, an accent colour, a display font, a logo and a favicon, and the panel, the sign-in page, Discord notifications and in-game announcements all use them. Flytower works out lighter and darker shades from your colour and picks ones that pass WCAG AA contrast in both light and dark mode, so buttons and links stay readable. Uploaded SVGs are rebuilt without scripts or links to other files, and PNGs lose their metadata. A small "Powered by Flytower" line can be turned off. Nothing changes until you set something. See Branding.

The message of the day has a proper editor. Game settings now has two lines with a toolbar for the 16 colours and bold, italic, underline, strikethrough and obfuscated text, and a live preview of how the server looks in Minecraft's multiplayer list, which warns when a line is too long and would be wrapped or cut off. Show codes shows the raw § codes for anyone who'd rather type them. The MOTD is still the same motd: string in YAML, so specs, clones and imports are unchanged, and an MOTD with codes written by hand opens already formatted.

Servers can have their own icon in the multiplayer list. Upload a picture in Game settings, crop it square and save: Flytower scales it to the 64×64 server-icon.png Minecraft reads, keeps only the image (none of the file's metadata), and shows it in the MOTD preview. Remove goes back to the default, and clones keep the icon. Like the MOTD, it shows after the next restart.

Testing notes are in the "Player heads", "Client-only mods", "Past worlds", "Branding", "MOTD editor" and "Server icon" sections of testing-1.2.0.md.

Features

  • upload a server icon for the multiplayer list (#120) (76402db)
  • upload, crop and remove a server icon in Game settings (1833980)
  • set and remove a server's icon through the API (87c5835)
  • check server icons as PNGs and keep only their image chunks (8f1c83c)
  • rich text MOTD editor with live preview (#115) (981b841)
  • configurable branding: name, colours, font and logo (#118) (9656776)
  • keep past worlds when resetting a world (#114) (17d98f5)
  • one two-line box for the MOTD instead of two inputs (d66bf83)
  • branding: describe branding changes in Activity (5743aa1)
  • player heads on the Players tab (#113) (eb41554)
  • rich text MOTD editor with a second line and Show codes (2429e44)
  • preview the server's entry in the multiplayer list (92f6961)
  • self-host Monocraft for the MOTD preview (e7febbc)
  • branding: System > Branding, and the brand across the panel (d50eebe)
  • branding: use the brand in Discord, in-game messages and passkey prompts (903911f)
  • branding: store branding and serve the theme, logo and favicon (09691a2)
  • branding: clean uploaded SVG and PNG logos (bae3766)
  • branding: colour scale, contrast checks and theme stylesheet from one accent (1a7317b)
  • past worlds on the World tab, and keep options in the reset dialog (03c2042)
  • start a new server from a past world (c558635)
  • keep the old world and its backup when resetting (a0c6254)
  • past worlds, kept as named exports that never expire (7f9aa3b)
  • backups that retention never deletes (62d06dc)
  • player heads on the Players tab (6487a70)
  • read, write and lay out § formatted MOTDs (b6c3ffe)
  • show client-only switch in content search (babfede) · #72
  • UUIDs for online players, from usercache.json (65e2847)
  • cache player skins on disk and serve them to the panel (8c5a2eb)
  • providers: read player skins from Mojang's session server (21b3960)

Fixes

  • install client-only Modrinth projects when asked for (#111) (a524a1c)
  • branding: line up the form, and keep edits when branding changes elsewhere (44d685b)
  • branding: tidy the Powered by Flytower line (f55db97)
  • branding: fit the name in the sidebar on one line (941ff96)
  • refresh past worlds after a reset without reloading the page (c2a2288)
  • branding: keep a long name on one line and the tab title current (55e8bf3)
  • keep the MOTD's second line when a server is created (01473e7)
  • show content warnings in plans without blocking apply (65604c8) · #72
  • install client-only Modrinth projects when asked for, with a warning (f6e3a34) · #72

Docs

  • release summary for 1.1.0 (35a69b2)
  • how to release an older commit (77eb9af)
  • server icons, and testing notes (0c1d906)
  • bring the README up to date for 1.1.0 and 1.2.0 (#119) (d28a5e4)
  • bring the README up to date for 1.1.0 and 1.2.0 (cf33c63)
  • release summary for branding (ceab6f5)
  • branding, and its testing notes (2cb10cc)
  • MOTD editor, codes in the spec, and testing notes (9a6bd0b)
  • past worlds, kept backups, and testing notes (6da0d70)
  • release summary and testing notes for player heads (7ddd483)
  • client-only mods, testing notes and release summary (32eb89c) · #72

Other

  • release a chosen tag, branch or commit, with a 1.1.0 summary (#121) (b6e1469)
  • the sealer test can't fail when ciphertext happens to contain "shh" (e14c73e)
  • release: a stable release's notes cover everything since the last stable one (7bda909)
  • release a chosen tag, branch or commit from the Release workflow (ad640a5)
  • e2e: save branding through the UI and reset it (ec38e7d)
  • a two-line MOTD with codes round-trips through YAML (92af9e0)
  • branding: colours, cleaning, storage and where the brand shows (9fa478d)
  • run E2E less often: skip housekeeping-only merges, one upgrade per minor version (a54256e)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.1.0...v1.2.0-beta.1

Stable

1.1.0

Flytower 1.1.0 is about knowing what your servers are doing without watching them. Notifications go to Discord, ntfy or signed webhooks for failed backups, a filling disk, new versions, starts, stops, restarts, joins and leaves, all read from the server's log as it's written. Crash detection follows systemd's journal, keeps each crash's cause, report and last log lines under Logs → Crashes, stops a crash loop after three crashes in ten minutes, and can restart a server that stops responding.

Servers can now run things on a schedule from the new Schedules tab: a restart with a countdown in chat, a console command, or an announcement, in the server's own time zone. Update badges show newer mods, plugins, datapacks, Java builds and Flytower itself, and never install anything by themselves. System shows where the disk has gone, warns at 85% and skips scheduled backups past 95%. Secrets such as management-server-secret are kept out of specs, the YAML tab and clones, and backups skip files they can't read instead of failing. The whole panel had a tidy-up too, with a proper phone layout and a System page split into sections.

Flytower is now free software under the GNU AGPL v3.0. If you've shared a spec from a server with the management server turned on, change its secret.

Testing notes are in testing-1.1.0.md.

Features

  • scheduled restarts, commands and announcements (#105) (566d812)
  • disk use per server, and low disk warnings (#103) (070a413)
  • call off a restart while it counts down (a72a1b1) · #58
  • ui: a Schedules tab to add, edit and run scheduled tasks (0e94840) · #58
  • spec: schedules in plans, apply, the YAML tab, new servers and clones (3a98909) · #58
  • api: list, save and run scheduled tasks (6357e75) · #58
  • run scheduled restarts, commands and announcements (5e0ccf8) · #58
  • backups: wait for a server's lock to be let go (f42d36b) · #58
  • db: a schedules table and a time zone per server (26a390d) · #58
  • spec: schedules and timezone in server specs (55da5d7) · #58
  • update badges for Flytower, content, Minecraft and Java (#101) (aa27a67)
  • warn before a manual backup on a nearly full disk (42fc0ae)
  • banner on every page while the disk is 95% full (df66916)
  • disk use breakdown on each server's Settings tab (c141d1f)
  • disk bar on System, split by server, with free space and a table (36cf41a)
  • include display names in the System disk report (5cec5ef)
  • skip scheduled backups when the disk is 95% full (e82bed3)
  • disk use API for the System page and each server (608cb89)
  • measure disk use in the background, hourly and after each job (eb81b80)
  • announce every finished job on the bus (2792ba9)
  • measure each server's disk use by group, without following symlinks (2e95f03)
  • System shows Flytower and Java updates, with a badge in the sidebar (77825b6)
  • Content tab mentions a newer Minecraft and says quietly when a check failed (bc87cfd)
  • update badges on the servers list and the Content tab (8b82843)
  • updates WebSocket topic and API, kept in step with the Content tab and System (f46f101)
  • check for updates every six hours and when the panel is opened (0eea61c)
  • background update checker that keeps the last good result (2169282)
  • compare installed Java runtimes with Adoptium's newest builds (334f933)
  • update_status table for the background update check (6aeb63d)
  • Start and Target dates on the Projects board (#96) (36992d3)
  • re-sync the board when a milestone's due date changes (94fe5dd)
  • board-sync fills in Start date and Target date for the Roadmap (fa2a4a4)
  • keep the Projects board's Status in sync automatically (#95) (57173e4)
  • Board workflow keeps the Projects board in sync as issues and PRs change (021c48e)
  • board-sync script that sets each board item's Status from the repository (5607ae4)
  • show the Assistant's reply in the run summary for dispatched runs (#92) (37b3df3)
  • show the Assistant's reply in the run summary for dispatched runs (2464b3c)
  • let the Assistant workflow use a Claude subscription token (#91) (ff763b9)
  • let the Assistant workflow use a Claude subscription token (2505f81)
  • release notes start with a written summary (#87) (54e2dd5)
  • Assistant workflow for releases and the Projects board (#88) (ca67a53)
  • Assistant workflow for releases and the Projects board (aa9983c)
  • release: start notes with a written summary, and list commits that aren't Conventional Commits (8918df4)
  • license Flytower under AGPL-3.0 (#84) (8474e83)
  • crash detection, crash loops and "not responding" (#78) (74555ba) · #57
  • notify: the new-version notice follows the update channel, so Stable installs aren't told about betas (b67c684) · #56
  • installer: --pr installs a pull request's signed test build (88ad47f)
  • notify: Notifications card on System to add, edit, test and remove channels (627f40a) · #56
  • notify: API to list, add, change, test and remove channels, with passkey checks and activity entries (2dae952) · #56
  • notify: report failed backups and off-site copies, the disk filling, updates, starts, stops, joins and leaves (215aeea) · #56
  • notify: send to Discord, ntfy and signed JSON webhooks, with quiet periods and retries (cc9ea0d) · #56
  • notify: tables for notification channels and what has been sent (fe04ce7) · #56

Fixes

  • re-running the installer no longer fails writing the setup token (#110) (ab6b041)
  • installer: write the setup token hash where a starting panel can't take it mid-write (894ce57)
  • schedule previews show times in the schedule's own time zone (eddeb19) · #58
  • hide management-server-secret and other secret properties (#100) (5e7ad41)
  • a cloned server gets fresh secrets instead of the original's (98a317a)
  • the properties API hides secrets and refuses edits to them (fc5809c)
  • keep secret properties such as management-server-secret out of specs (8109480)
  • backups skip files they can't read instead of failing (#98) (543c3fc)
  • backups skip files they can't read instead of failing (aa8c2da)
  • board-sync finds fields by listing them, since asking for a missing one is an error (7170cc7)
  • board-sync asks for plain fields on issue and PR connections (a6330dc)
  • let the Assistant write GraphQL queries to files (#94) (befe831)
  • let the Assistant write GraphQL queries to files (2702fb7)
  • let the Assistant reach the Projects board with PROJECTS_TOKEN (#93) (affad7b)
  • pass PROJECTS_TOKEN under its own name, since the action overwrites GH_TOKEN (c015409)
  • run board commands with PROJECTS_TOKEN through a gh wrapper (047d0da)
  • release notes from 1.1.0-beta.2 onwards match the earlier format (#90) (f421421)
  • release: split squash merges back into their commits in release notes (687ac10)
  • say why an Assistant run failed (#89) (c7dff70)
  • say why an Assistant run failed (6e2a1f0)
  • notify: notice quick stops and starts from the status poller, not only the minute sampler (42940a4) · #56
  • notify: hear starts, stops, restarts, joins and leaves from the server log through inotify, with no polling (42940a4) · #56

Docs

  • release summary for scheduled tasks (d0a1948) · #58
  • scheduled tasks, the spec's schedules and timezone, and testing notes (285413e) · #58
  • disk space guide, testing notes and release summary for disk use (b34297a)
  • release summary for update badges (be6ab4c)
  • update badges, with 1.1.0 testing notes (e8f691d)
  • release summary for hidden secrets (078fef7)
  • list the properties Flytower manages or hides, with testing notes (45dae88)
  • release summary for 1.1.0-beta.5 (7132c63)
  • what backups leave out, and testing notes for skipped files (a438284)
  • line up the Assistant workflow's secrets list (bb15217)
  • release: summaries for 1.0.1 to beta.4 share one shape: short paragraphs and a testing link (e2c6a11)
  • write the house rules for the Assistant workflow (976fccd)
  • release: summaries for 1.0.1 and 1.1.0-beta.1 to beta.4 (f31b454)
  • notify: activity comes from the log as it happens, and restart alerts (42940a4) · #56
  • notifications, and 1.1.0 testing notes starting with them (d5b32a7) · #56

Other

  • e2e: a scheduled restart with a warning, and a command's reply (5901cd3) · #58
  • schedules in plans and apply (1dbdd6e) · #58
  • one set of cron timers for backups and scheduled tasks (5a6362a) · #58
  • smoke checks the System page measures the test server (d8e516a)
  • Release notes workflow rewrites an existing release's notes from main (53eae73)
  • notify: drop the status-poll feed, and let a log tailer run without a timer (42940a4) · #56
  • build and sign each pull request as a test build under pr- (2791438)
  • e2e: add a webhook channel through the form and check its test arrives signed (b4c7900) · #56

Other changes

  • UI pass: display fixes, consistent layout, phone layout, System sections (#83) (1253de5) · #79
  • Merge main (update channel, 1.0.1) into feat/notifications; notifications move to migration 0008 (651ac73)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.0.1...v1.1.0

Beta

1.1.0-beta.6

Update badges arrive. Flytower checks for updates in the background every six hours, and when you open the panel if the last check is over an hour old, then shows what it found: a count on each server's card and its Content tab for newer mods, plugins and datapacks, a count on System and a banner when a new Flytower is out, and the newest Temurin build for each installed Java under System → Updates. Nothing is ever installed by itself. The Content tab also mentions when a newer Minecraft is out and whether everything installed has a build for it yet, but never pushes it. If Modrinth, GitHub or Adoptium is down, the last result stays and a quiet line says the check failed.

Secrets in server.properties are now hidden. On Minecraft 1.21.9 and later, management-server-secret showed in the YAML tab, in spec downloads and in clones. It's now treated like the RCON password: it never goes into a spec or the Settings form, a spec that sets it is refused, and a cloned server gets a fresh secret of its own. Any future key ending in secret or password is hidden the same way. The Files tab still shows server.properties as it is, for editing a secret by hand. If you've shared a spec from a server with the management server turned on, change its secret.

System now shows where the disk has gone: one bar split by server, with free space, and a table of each server's size and its largest part. Each server's Settings tab breaks its space down into world, backups, world exports, logs, mods and the rest. Sizes are measured in the background after backups, restores and imports, and every hour, so pages stay quick. Past 85% System warns you; past 95% a banner shows on every page, scheduled backups are skipped rather than risk filling the disk mid-save, and Back up now asks first.

Servers can now run things on a schedule, from the new Schedules tab or schedules: in their YAML: a restart with a countdown in chat (15, 5 and 1 minutes and 10 seconds before, by default, skipped when nobody is online), a console command whose reply is kept, or an announcement. Tasks run in the server's own time zone, wait for a backup or change to finish, can be run or called off from the tab, and are listed in Activity. A new A scheduled restart, command or announcement failed notification is ticked on channels that already take problem alerts. See Scheduled tasks.

Testing notes are in the "Update badges", "Hidden secrets", "Disk use" and "Scheduled tasks" sections of testing-1.1.0.md.

Features

  • scheduled restarts, commands and announcements (#105) (566d812)
  • disk use per server, and low disk warnings (#103) (070a413)
  • call off a restart while it counts down (a72a1b1) · #58
  • ui: a Schedules tab to add, edit and run scheduled tasks (0e94840) · #58
  • spec: schedules in plans, apply, the YAML tab, new servers and clones (3a98909) · #58
  • api: list, save and run scheduled tasks (6357e75) · #58
  • run scheduled restarts, commands and announcements (5e0ccf8) · #58
  • backups: wait for a server's lock to be let go (f42d36b) · #58
  • db: a schedules table and a time zone per server (26a390d) · #58
  • spec: schedules and timezone in server specs (55da5d7) · #58
  • update badges for Flytower, content, Minecraft and Java (#101) (aa27a67)
  • warn before a manual backup on a nearly full disk (42fc0ae)
  • banner on every page while the disk is 95% full (df66916)
  • disk use breakdown on each server's Settings tab (c141d1f)
  • disk bar on System, split by server, with free space and a table (36cf41a)
  • include display names in the System disk report (5cec5ef)
  • skip scheduled backups when the disk is 95% full (e82bed3)
  • disk use API for the System page and each server (608cb89)
  • measure disk use in the background, hourly and after each job (eb81b80)
  • announce every finished job on the bus (2792ba9)
  • measure each server's disk use by group, without following symlinks (2e95f03)
  • System shows Flytower and Java updates, with a badge in the sidebar (77825b6)
  • Content tab mentions a newer Minecraft and says quietly when a check failed (bc87cfd)
  • update badges on the servers list and the Content tab (8b82843)
  • updates WebSocket topic and API, kept in step with the Content tab and System (f46f101)
  • check for updates every six hours and when the panel is opened (0eea61c)
  • background update checker that keeps the last good result (2169282)
  • compare installed Java runtimes with Adoptium's newest builds (334f933)
  • update_status table for the background update check (6aeb63d)

Fixes

  • re-running the installer no longer fails writing the setup token (#110) (ab6b041)
  • installer: write the setup token hash where a starting panel can't take it mid-write (894ce57)
  • schedule previews show times in the schedule's own time zone (eddeb19) · #58
  • hide management-server-secret and other secret properties (#100) (5e7ad41)
  • a cloned server gets fresh secrets instead of the original's (98a317a)
  • the properties API hides secrets and refuses edits to them (fc5809c)
  • keep secret properties such as management-server-secret out of specs (8109480)

Docs

  • release summary for scheduled tasks (d0a1948) · #58
  • scheduled tasks, the spec's schedules and timezone, and testing notes (285413e) · #58
  • disk space guide, testing notes and release summary for disk use (b34297a)
  • release summary for update badges (be6ab4c)
  • update badges, with 1.1.0 testing notes (e8f691d)
  • release summary for hidden secrets (078fef7)
  • list the properties Flytower manages or hides, with testing notes (45dae88)

Other

  • e2e: a scheduled restart with a warning, and a command's reply (5901cd3) · #58
  • schedules in plans and apply (1dbdd6e) · #58
  • one set of cron timers for backups and scheduled tasks (5a6362a) · #58
  • smoke checks the System page measures the test server (d8e516a)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.1.0-beta.5...v1.1.0-beta.6

Beta

1.1.0-beta.5

Backups no longer fail because of one file Flytower can't read. A scheduled backup could stop with "Cannot open: Permission denied" when spark was profiling, because Java makes spark's scratch files private to the server. Those scratch files, and any file ending in .tmp, are now left out of backups, and any other file that can't be read is skipped with a note on the backup's job instead of failing the whole backup.

Testing notes are in the last section of testing-1.1.0.md.

Features

  • Start and Target dates on the Projects board (#96) (36992d3)
  • re-sync the board when a milestone's due date changes (94fe5dd)
  • board-sync fills in Start date and Target date for the Roadmap (fa2a4a4)
  • keep the Projects board's Status in sync automatically (#95) (57173e4)
  • Board workflow keeps the Projects board in sync as issues and PRs change (021c48e)
  • board-sync script that sets each board item's Status from the repository (5607ae4)
  • show the Assistant's reply in the run summary for dispatched runs (#92) (37b3df3)
  • show the Assistant's reply in the run summary for dispatched runs (2464b3c)
  • let the Assistant workflow use a Claude subscription token (#91) (ff763b9)
  • let the Assistant workflow use a Claude subscription token (2505f81)
  • release notes start with a written summary (#87) (54e2dd5)
  • Assistant workflow for releases and the Projects board (#88) (ca67a53)
  • Assistant workflow for releases and the Projects board (aa9983c)
  • release: start notes with a written summary, and list commits that aren't Conventional Commits (8918df4)

Fixes

  • backups skip files they can't read instead of failing (#98) (543c3fc)
  • backups skip files they can't read instead of failing (aa8c2da)
  • board-sync finds fields by listing them, since asking for a missing one is an error (7170cc7)
  • board-sync asks for plain fields on issue and PR connections (a6330dc)
  • let the Assistant write GraphQL queries to files (#94) (befe831)
  • let the Assistant write GraphQL queries to files (2702fb7)
  • let the Assistant reach the Projects board with PROJECTS_TOKEN (#93) (affad7b)
  • pass PROJECTS_TOKEN under its own name, since the action overwrites GH_TOKEN (c015409)
  • run board commands with PROJECTS_TOKEN through a gh wrapper (047d0da)
  • release notes from 1.1.0-beta.2 onwards match the earlier format (#90) (f421421)
  • release: split squash merges back into their commits in release notes (687ac10)
  • say why an Assistant run failed (#89) (c7dff70)
  • say why an Assistant run failed (6e2a1f0)

Docs

  • release summary for 1.1.0-beta.5 (7132c63)
  • what backups leave out, and testing notes for skipped files (a438284)
  • line up the Assistant workflow's secrets list (bb15217)
  • release: summaries for 1.0.1 to beta.4 share one shape: short paragraphs and a testing link (e2c6a11)
  • write the house rules for the Assistant workflow (976fccd)
  • release: summaries for 1.0.1 and 1.1.0-beta.1 to beta.4 (f31b454)

Other

  • Release notes workflow rewrites an existing release's notes from main (53eae73)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.1.0-beta.4...v1.1.0-beta.5

Beta

1.1.0-beta.4

Crash detection arrives. Flytower follows systemd's journal, so it notices a crash the moment it happens and records the cause, the crash report and the last 50 lines of the log. The Console tab shows a crash banner, Logs → Crashes keeps 30 days of history, and new alerts cover crashes, crash loops and servers that stop responding.

After three crashes in ten minutes a server is left stopped instead of restarting forever, and Start or Restart clears it. A server that misses five console answers in a row is marked Not responding, and can be restarted automatically under Settings → Crashes. Stops and restarts from Flytower, or a stop typed in the console, never count as crashes.

Flytower is now free software under the GNU AGPL v3.0.

Testing notes are in section 2 of testing-1.1.0.md.

Features

  • license Flytower under AGPL-3.0 (#84) (8474e83)
  • crash detection, crash loops and "not responding" (#78) (74555ba) · #57

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.1.0-beta.3...v1.1.0-beta.4

Beta

1.1.0-beta.3

A tidy-up of the whole panel after the UI audit. Nothing about how servers run has changed.

On phones, server cards fit the screen, Start, Restart and Stop sit in a Power menu, and the server tabs become a menu. The System page is split into five sections: Overview, Updates, Off-site storage, Notifications, and Account and security. Settings and Game settings show a Discard and Save bar while you have unsaved changes, Export world has moved to the World tab, and release notes like these are shown formatted in the panel. Pages share one width and style, dates and times follow your locale, and the Console Address card shows the server's hostname.

Testing notes are under UI pass in testing-1.1.0.md.

Other changes

  • UI pass: display fixes, consistent layout, phone layout, System sections (#83) (1253de5) · #79

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.1.0-beta.2...v1.1.0-beta.3

Beta

native-1.3.1-native.1

The native build of 1.3.1. It's the same code as 1.3.1, published so panels on the Native channel get it. The Rust agent and updater are unchanged since 1.3.0-native.1, and they're still off unless you switch them on.

Features

  • Settings and World as one page of collapsible sections (272e2f6)
  • collapsible sections component (a1f5f58)

Fixes

  • point notifications, tests and docs at the new sections (73ddb2e)
  • keep the MOTD editor within the screen on phones (3781e26)

Docs

  • release notes for 1.3.1 and its native build (60c3dae)

Other

  • G B jumps to the Backups section of World (c457fe8)

Other changes

  • Merge main into feat/collapsible-sections (cd76fe6)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.3.0-native.1...native-1.3.1-native.1

Beta

native-1.3.0-native.1

The native build of 1.3.0. It's the same code as 1.3.0, published so panels on the Native channel get it. With rust in /etc/flytower/agent, every job the system helper does, along with updates and Go back to, runs in Rust. It's still off unless you switch it on. 1.4.0 plans to make it the default.

Testing: on a spare VPS, switch Rust on and follow Testing the Rust agent.

Features

  • let each browser turn single-key shortcuts off (fd0c73c)
  • show shortcuts in the command palette (78fce4a)
  • save Settings and review YAML with Ctrl+S (6860d53)
  • move through cards and rows with J/K, Enter, . and Shift+Delete (8ce3fd9)
  • add G-jumps, L for logs, between servers, / and the ? sheet (dddb348)
  • add one shortcut list for jumps, the sheet and hints (61abb32)
  • right-click menus on notification channels, with Pause and Resume (01f32a5)
  • right-click menus on crashes, with Copy report (0e4da7b)
  • right-click menus on world exports and past worlds (581b7aa)
  • right-click and ⋯ menus on Players rows (fcf7f78)
  • player action list for right-click menus (5356f9c)

Fixes

  • console say, me and msg show under Server and your name, not Rcon (d4a61c6)

Docs

  • release notes for 1.3.0 and its native build (e82f1df)
  • keyboard shortcuts page and 1.4.0 testing notes (cc45797)
  • testing notes for the remaining right-click menus (fdbd9d5)

Other

  • share the per-browser on/off switch (4c15618)

Other changes

  • Merge main into feat/keyboard-shortcuts (284de08)
  • Merge main into feat/right-click-more (74b5dd3)
  • Merge main into feat/keyboard-shortcuts (dee37e0)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.3.0-beta.3.native.1...native-1.3.0-native.1

Beta

native-1.3.0-beta.3.native.1

The native build of 1.3.0-beta.3. It's the same code as 1.3.0-beta.3, published so panels on the Native channel get it. The updater has now been rewritten in Rust as well, so with rust in /etc/flytower/agent all of the root-side work runs in Rust: every job the system helper does, plus updates and rollbacks. It's still off unless you switch it on.

Testing: on a spare VPS, switch Rust on, then follow Testing the Rust agent, including the update and rollback checks.

Features

  • post deaths and advancements to Discord chat (afd6213)
  • map markers glide between player positions (ae98c9e)
  • ask for player positions every second, and dimensions less often (9fed6c5)
  • ship the Rust updater behind the same switch (7fcc888)
  • port the updater to Rust (e8dfcfc)
  • command palette on Ctrl + K with servers ahead of help (9048e82)
  • palette links with recent servers and pages (11d04b6)
  • palette entries for servers, their tabs and actions (292317c)
  • show a progress bar while the web map is drawn (3bad87a)
  • the map service passes on how far a draw has got (4dca738)
  • flytower-map reports progress as it draws (be67347)
  • panel: head the rest of the machine, and show the journal's size (b34bd32)
  • suggestions, ghost text and Tab cycling in the console (1155d74)
  • complete console commands in the browser (34257d5)
  • serve each server's command catalogue to the console (e1dc152)
  • read the game's command tree and help for console completion (4db2c17)
  • right-click and ⋯ menus on Content items (9ed0a34)
  • right-click menus on Backups rows (00cde07)
  • right-click menus on Files rows, with Copy path (9d51571)
  • download links work from the phone action sheet (b81fa22)
  • panel: show the rest of the machine in parts on System, with Clean up (c698284)
  • ActionTarget renders the card or row itself, so it works inside tables (52f8aeb)
  • panel: measure disk use through the agent, with clean up (81c3de8)
  • per-browser switch for right-click menus (e741c14)
  • right-click and ⋯ menus on server cards (b626ee4)
  • open clone, delete and back-up confirms from a link (d064f9b)
  • ActionTarget wrapper with keyboard, long-press sheet and browser-menu pass-through (e56e519)
  • rules for right-click menus and the server action list (ca161c7)
  • agent: disk verbs in the Rust agent (22e1a29)
  • show tick time, memory and CPU on the servers overview, with charts in a pop-up (92a20a2)
  • publish each server's last hour of figures for the servers overview (a4f0f18)
  • move Stats onto the Players tab (d8ca54b)
  • open logs and crashes in a pop-up from the Console (462119c)
  • split World and Settings into sections, with Backups, Schedules and YAML inside them (5d4e6b7)
  • agent: measure disk use and clean up as root (b7b0689)
  • protocol: disk.usage and three clean-up verbs (974b233)

Fixes

  • add server hostnames to an old Caddyfile in the Rust agent too (06bcb26)
  • add server hostnames to an old Caddyfile when the agent starts (d728ea0)
  • post joins and leaves as plain text, like the rest of the chat relay (f54de7d)
  • show join and leave lines in Discord chat (22ee71b)
  • redraw every map once with the fixed renderer (687ec95)
  • read block names the way Minecraft 26.3 saves them (0b5f92c)
  • open the newest log straight away, and keep Back closing the logs pop-up (e888bbc)
  • point links, notifications and help at the new server sections (5ec964a)
  • give the Rust agent steps inline (c3ca6ac)

Docs

  • add system disk use to the 1.3.0-beta.3 notes (ab864d1)
  • release notes for 1.3.0-beta.3 and its native build (4c1cc31)
  • hostnames start working after an update, no installer re-run (53cb5c4)
  • console autocomplete testing notes (cf19e3c)
  • release summary for 1.3.0-beta.2 (579cebd)
  • command palette testing notes (73d333f)
  • typing commands in the console (48ac8bd)
  • testing notes for list right-click menus (501ebcc)
  • right-click menus and 1.4.0 testing notes (e0ff693)
  • native builds come from main now (98f4cc0)

Other

  • go back to the console before the crash banner check (ff3fd59)
  • don't reuse a name the smoke test already declares (d9f5166)
  • check console completion against a real server in E2E (ebc1b96)
  • panel: the clean-up route needs system.manage (30c0a75)
  • share the copy-with-toast helper between menus (1ffe81c)
  • right-click menu on a running server card in E2E (48e8af3)

Other changes

  • Merge main into feat/system-disk-use (fddc78a)
  • Merge main into feat/system-disk-use (18485b3)
  • Merge main into feat/system-disk-use (165e561)
  • Merge main into feat/system-disk-use (3b03cfc)
  • Merge main into feat/server-tabs (0ed6057)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.3.0-beta.1.native.1...native-1.3.0-beta.3.native.1

Beta

native-1.3.0-beta.1.native.1

The native build of 1.3.0-beta.1. It's the same code as 1.3.0-beta.1, published so panels on the Native channel get the 1.3.0 features: stats and leaderboards, Discord commands and chat, the web map and in-panel Help. Native work now lives on main, and every system helper job has been ported to Rust, so this is the build to try the Rust agent on. It's still off until you switch it on.

Testing: follow Testing the Rust agent on a spare VPS, and check that switching back to the Bun agent still works.

Features

  • link the map from the public page once it's drawn (8682411)
  • link a public web map from /status in Discord (abd9cef)
  • link the web map from the public status page (b13438f)
  • include a public web map in the server's public status (abfa5d1)
  • open and share the map from the World tab (5fee78d)
  • our own web map viewer (f5df022)
  • serve the web map at /s//map/ (6c37c83)
  • show the web map on a server's own hostname (6a013b2)
  • ship the Rust agent behind an opt-in switch (8d8ad1f)
  • ship flytower-map in the release (3a137b4)
  • web map card on the World tab (4261b98)
  • map settings, status and drawing through the API (948467e)
  • the panel keeps web maps drawn with flytower-map (dec01b7)
  • disk use counts each server's web map (3c6a04a)
  • port the update verbs to the Rust agent (ee3b38e)
  • check release signatures in the Rust agent (d3771df)
  • the web map has an on switch, off by default (d1c4acc)
  • carry web map settings in the server spec (9426a4e)
  • add per-server web map settings (b497943)
  • providers find the client jar for the web map (827877e)
  • flytower-map palette builds colours from the client jar (65ac095)
  • flytower-map reads files from the client jar (9954278)
  • port runtime.install to the Rust agent (8ad5a18)
  • verified downloads in the Rust agent (75fc541)
  • port the SSH verbs to the Rust agent (1a9bc9a)
  • read ISO times back in the Rust agent (21f9d19)
  • port the server lifecycle verbs to the Rust agent (31f905d)
  • share the server unit template between both agents (916c956)
  • flytower-map command line, with end-to-end tests (8cb56b6)
  • flytower-map draws tiles and only redraws what changed (df212a2)
  • flytower-map decodes chunks against a colour palette (0bee795)
  • flytower-map crate reads NBT and region files (0aeb9cf)
  • add /whitelist, /restart, /backup and /say for Discord staff (e7f13fa)
  • let Discord commands have sub-commands, choices and follow-ups (f93b4b9)
  • register the stats commands with the panel's stats rules (6e163b4)
  • add /leaderboard and /stats Discord commands (c05d99c)
  • let Discord command options offer fixed choices (937fac0)
  • Discord chat card on the server's settings (b7b9e4a)
  • relay each server's chat to its Discord channel, with signed player heads (58b4c0c)
  • post game chat to a Discord webhook within its rate limits (2147dfa)
  • draw a player's face from their skin for avatars (2fe9c4e)
  • show leaderboards on the public status page (1915a5c)
  • serve public leaderboards and the heads on them (79e7592)
  • add an optional leaderboard setting to the public page (8b1e095)
  • store a server's Discord chat relay settings (b9776cc)
  • map Discord roles to Flytower roles on the Discord card (169e7d5)
  • show Discord actions in Activity as "Name via Discord" (4b56f37)
  • give Discord members the Flytower roles mapped to their Discord roles (230c9f0)
  • add a Stats tab with leaderboards and player cards (df68235)
  • serve a server's leaderboards for all time, this month and this week (7834438)
  • build leaderboards and player cards from the stats snapshot (18e1bfc)
  • send the command list to Discord when it changes (867a6f5)
  • answer /status and /players from the status page's roster (c3d3541)
  • add a slash command registry for the Discord app (b3992a5)
  • let people turn stats off and leave players out (eb79238)
  • carry player stats settings in the server spec (80071f2)
  • add per-server player stats settings (5e7dad5)
  • panel: Learn more links beside settings open the right heading (5bccc33)
  • panel: a ? on every page opens its help beside it (db2abb3)
  • panel: Help, the docs for the installed version, with search (7221347)
  • docs: a shared docs layer for the panel and the website (5ee4f18)
  • schedule the stats snapshot and add stats routes (6572cb7)
  • take a daily snapshot of chosen player stats (5fcb69f)
  • add the player stats table (e9ad70e)
  • add System, Integrations with the Discord app card (ae7948e)
  • answer Discord's interactions endpoint (a7bdb5d)
  • connect a Discord app from its bot token (fc12f9a)
  • check Discord interaction signatures with Ed25519 (6de5a5d)
  • follow the journal for service.wait in the Rust agent (c23ee50)
  • wire player sessions into crashes, deletes and boot, with a players summary route (f1c9c03)
  • record player sessions from join and leave lines (2434b21)
  • let the log watcher pass on raw lines (1ef8db7)
  • add player sessions and names tables (ed574df)
  • port the service verbs to the Rust agent (25cdd23)
  • run programs from the Rust agent without a shell (3193042)
  • serve the Rust agent on the agent socket with a peer check (3d56695)
  • dispatch requests and write the audit log in the Rust agent (50413ca)
  • add the Rust agent's protocol types (48b3ce9)

Fixes

  • wrap the saved webhook on narrow screens (2878c98)
  • give the Discord test status the leaderboard field (cf49b5a)
  • check Manage people first when saving Discord roles (ec63bc1)
  • list the leaderboards route in the permission table (64a67ce)
  • show leaderboard icons and label each figure on player cards (e7d8ed2)
  • panel: serve the help docs' database from its route instead of prerendering it (9ba3eb3)

Docs

  • release notes for 1.3.0-beta.1 and its native build (9159656)
  • the web map, drawn by Flytower (22d7b68)
  • give the player stats page its Help section and order (28df4c6)
  • describe the Discord staff commands (d07764b)
  • help frontmatter for the Discord page; move the 1.3.0 test script (e387eb9)
  • /leaderboard and /stats in Discord (ac16e7b)
  • game chat to Discord, and how to test it (4d2d5ad)
  • leaderboards on the public status page (c67c26f)
  • add Discord roles to the 1.3.0 testing checklist (f909aa5)
  • explain Discord role mapping (b572a22)
  • explain player stats and the leaderboards (e04df36)
  • describe the Discord commands and how to test them (c032092)
  • testing notes for Help in the panel (c979d6b)
  • give every page a section, an order and the panel routes it explains (f02f7a3)
  • move release test scripts into docs/testing (9968c23)
  • explain connecting a Discord app (5b9e567)

Other

  • give the map's maximum-wait test room on a busy runner (7a1e449)
  • put the stats view in its own component so it can move pages (7cb89d6)
  • cover the Discord staff commands (121aa25)
  • share player and power actions between the panel and Discord (a3f388f)
  • list the Discord role routes in the permission table (b8e731d)
  • cover Discord role mapping, refusals and Activity (2644a19)
  • build a server's public status in one place (b993e3f)
  • panel: rename parseMarkdown to parseNotes (c27e9ee)

Other changes

  • Merge main into feat/map-public (cc45486)
  • Merge main into feat/map-panel; renumber the map migration to 0021 (78d26aa)
  • Merge main into feat/map-renderer (134ffd0)
  • Merge main into feat/discord-staff-commands (4c27238)
  • Merge main into feat/discord-roles (2dec38f)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.2.1-native.1...native-1.3.0-beta.1.native.1

Beta

native-1.2.1-native.1

Native build of 1.2.1. This is everything in 1.2.1, with the same native pieces as 1.2.0-beta.2.native.1. It's for test servers only, and it's offered only on the Native channel under System, Updates (or with install.sh --native). See Native builds.

Faster disk use. System, Disk measures with flytower-du, the small Rust program shipped in the release, and falls back to the old way if it's ever missing or fails. The system helper starts through bin/flytower-agent, ready for the Rust agent in a later native build.

Testing: update from 1.2.0-beta.2.native.1 on the Native channel and check that join and leave notifications arrive on a 26.x server, that System, Disk shows the same figures as before, and that Go back to 1.2.0-beta.2.native.1 still works.

Fixes

  • notify: read joins and leaves that Minecraft 26.x logs as system chat (3f67e66)

Docs

  • 1.2.1-native.1 release summary (142f156)
  • 1.2.1 release summary (1832a40)
  • 1.2.0 release summary (a8f9750)

Other changes

  • Merge v1.2.1 into native (9edc05a)

Full diff: https://github.com/MattA-Official/mc-panel/compare/native-1.2.0-beta.2.native.1...native-1.2.1-native.1

Beta

native-1.2.0-beta.2.native.1

The first native build. This is everything in 1.2.0-beta.2, plus the first steps of rewriting parts of Flytower in Rust and Go. It's for test servers only. Install it with install.sh --native, or choose Native under System, Updates. Native builds are only offered on the Native channel, and Beta and Stable never see them. See Native builds.

Faster disk use. System, Disk now measures with flytower-du, a small Rust program shipped in the release, which is about ten times quicker on big worlds and gives the same numbers. If it's ever missing or fails, the panel falls back to the old way. The system helper now starts through bin/flytower-agent, so a later native build can swap in the Rust version. Going back to an older release still works.

Testing: check that System, Disk shows the same figures as before, that ls /opt/flytower/current/bin lists flytower-du, that systemctl cat flytower-agent shows ExecStart=/opt/flytower/current/bin/flytower-agent, and that Go back to 1.2.0-beta.2 still works.

Features

  • updates: number native builds after the release they go with (8270b4f) · #134
  • installer: --native installs the newest native build (d79b6ac) · #134
  • agent: download native builds from their own tag (9b5c93b) · #134
  • updates: a Native channel for builds of the native branch (478652b) · #134
  • document the Access page (23a0acc)
  • rename People to Access, with People and Roles tabs (73eda62)
  • pick your appearance with the colour mode select (d7abe18)
  • disk: measure with flytower-du when it's there (f1a40d3) · #136
  • du: add flytower-du, a Rust disk walker (f64592b) · #136
  • installer: start the agent through bin/flytower-agent (d957684) · #135
  • agent: start the agent and updater through the stable entry points (d6a6276) · #135
  • agent: ship stable flytower-agent and flytower-updater entry points (b961480) · #135
  • document Your account and the new People page (c49ced0)
  • give People and Your account their own places in the sidebar (4990633)
  • let people rename themselves, save their theme and sign out everywhere (bff9e7d)
  • end older sessions when the session version changes (d87d477)
  • protocol: export the agent protocol as JSON Schema (85cae8e) · #135
  • hide what a person can't use, and show view-only tabs (bed7397)
  • role editor on the People page (ff59ff2)
  • custom roles built from the permission list (42eb8df)
  • installer prints a setup link (f363575)
  • People page under System (46d55c1)
  • setup and invite links fill the token in (e409a45)
  • join through an invite link with a new passkey (a0906b2)
  • invite, change and remove people (e572e46)
  • store invite links (b061ab6)
  • send live topics only to people who can see them (cde77d0)
  • check a permission on every API route (efaf60a)
  • add roles, grants and the permission list (ff4b321)
  • status: serve the public page on each server's own hostname (60e3243)
  • status: players' modpack download on the public page (89b902f)
  • providers: Modrinth lookups for players' modpacks (d8bfec5)
  • status: show the server icon on the public page (01782e3)
  • status: MOTD and link previews on the public page (39b917b)
  • status: public status page at /s/ and its settings card (05d00a4)
  • status: public status API with a roster kept from the log (27a437c)
  • spec: public page settings in the spec and the database (5aafd9c)

Fixes

  • bundle the invites migration again after the merge (62a3c0d)
  • keep the bundled migrations as generated (6aaecb8)
  • only list disk use and updates for servers a person can see (1b1231f)
  • notify: look at the log once more after each change (3c13427)
  • console: read the log again when asked during a read (81500eb)
  • bundle the roles migration (f3e28ce)

Docs

  • release summary for 1.2.0-beta.2.native.1 (a51b4ef)
  • fold the people and roles notes into 1.2.0-beta.2 (2268de0)
  • record the decision to bring in Rust and Go (1b954ab) · #134
  • custom roles and what people see (4d5788e)
  • people and roles (1d1e8f6)
  • testing notes and release notes for roles groundwork (48293a3)
  • don't name Chunky as server-only; Modrinth marks it optional on clients (106c067)
  • modpack fields in the YAML reference, testing notes and release summary (c8c7803)
  • players' modpack guide, YAML fields and testing notes (f49ff19)
  • public status page guide, YAML reference, testing notes and release summary (470b4d5)

Other

  • recognise native versions like 1.2.0-beta.2.native.1 (8253e5c) · #134
  • release native builds under native- tags (6505c61) · #134
  • build flytower-du into releases and check it on amd64 and arm64 (5fa5272) · #136
  • protocol: shared fixtures every implementation must agree on (a048004) · #135
  • custom roles (1e45fd3)
  • invites, last Owner and people changes (359bc5e)
  • fail when an API route skips its permission check (4b429a1)

Other changes

  • Merge v1.2.0-beta.2 into native (b389c71)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.2.0-beta.1...native-1.2.0-beta.2.native.1

Beta

1.1.0-beta.2

Fixes the missing and late Server started and Server stopped notifications from 1.1.0-beta.1, and adds restart alerts.

Flytower now reads each server's log as Minecraft writes it, with no polling and no mod or plugin needed, so starts, stops, joins and leaves arrive within about a second. Server started is sent once players can actually join, and chat or /say can't fake any of these events. Restart from the panel now sends "Server restarting" and then "Server restarted", instead of a separate stop and start.

Testing notes are in section 1 of testing-1.1.0.md.

Fixes

  • notify: notice quick stops and starts from the status poller, not only the minute sampler (42940a4) · #56
  • notify: hear starts, stops, restarts, joins and leaves from the server log through inotify, with no polling (42940a4) · #56

Docs

  • notify: activity comes from the log as it happens, and restart alerts (42940a4) · #56

Other

  • notify: drop the status-poll feed, and let a log tailer run without a timer (42940a4) · #56

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.1.0-beta.1...v1.1.0-beta.2

Beta

1.1.0-beta.1

The first 1.1 beta brings notifications. Flytower can tell you about failed backups and off-site copies, the disk filling up, new versions, servers starting and stopping, and players joining and leaving. It sends them to Discord, ntfy or signed JSON webhooks, with quiet periods and retries. Set up channels on the System page.

Every pull request now also gets a signed test build, which the installer can install with --pr <number>.

Testing notes are in section 1 of testing-1.1.0.md.

Features

  • notify: the new-version notice follows the update channel, so Stable installs aren't told about betas (b67c684) · #56
  • installer: --pr installs a pull request's signed test build (88ad47f)
  • notify: Notifications card on System to add, edit, test and remove channels (627f40a) · #56
  • notify: API to list, add, change, test and remove channels, with passkey checks and activity entries (2dae952) · #56
  • notify: report failed backups and off-site copies, the disk filling, updates, starts, stops, joins and leaves (215aeea) · #56
  • notify: send to Discord, ntfy and signed JSON webhooks, with quiet periods and retries (cc9ea0d) · #56
  • notify: tables for notification channels and what has been sent (fe04ce7) · #56

Docs

  • notifications, and 1.1.0 testing notes starting with them (d5b32a7) · #56

Other

  • build and sign each pull request as a test build under pr- (2791438)
  • e2e: add a webhook channel through the form and check its test arrives signed (b4c7900) · #56

Other changes

  • Merge main (update channel, 1.0.1) into feat/notifications; notifications move to migration 0008 (651ac73)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v1.0.1...v1.1.0-beta.1

Stable

1.0.1

Adds update channels. Choose Stable or Beta on the System page: Stable installs (the default) are only offered stable releases, and Beta also offers betas such as 1.1.0, marked with a Beta badge. The installer installs the newest stable release unless you pass --beta.

Testing notes are in testing-1.0.1.md.

Features

  • installer: install the newest stable release by default, and betas with --beta (6448256) · #74
  • updates: Stable or Beta switch on the System page, with a Beta badge on offered betas (da5c372) · #74
  • updates: choose the update channel through the API, with an activity entry (7f17052) · #74
  • updates: filter releases by channel, and order beta.10 after beta.9 (8708348) · #74
  • settings: typed helpers to read and write panel settings (f82a76d) · #74
  • settings: a table for panel-wide settings (2600049) · #74
  • installer: --pr installs a pull request's signed test build (58f36b9)

Docs

  • update channels, publishing betas, and 1.0.1 testing notes (73587b5) · #74

Other

  • e2e: read the chosen channel from its card, which has no label element (1e9d38a)
  • e2e: upgrade only from releases, not pull request test builds (a5e08d6)
  • e2e: choose the Beta channel on the System page and check it's kept (2f4f4a4)
  • build and sign each pull request as a test build under pr- (a8cf9c1)

Other changes

  • Update channel: choose Stable or Beta releases (#75) (ccbd6a9)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v0.5.0...v1.0.1

Stable

1.0.0

Features

  • account: list, add and remove passkeys, and make new recovery codes, on the System page (e8b5002) · #55
  • security: deleting a backup asks for your passkey, since it takes the off-site copy too (468b8fa)
  • security: HSTS when the panel is reached over HTTPS (7b49304)
  • security: send a content security policy and anti-framing headers on every response (965fb22)
  • spec: choose off-site storage by name in the server YAML (116fa26) · #54
  • backups: Off-site storage on System and a per-server choice on Backups, with upload status (320fca8) · #50
  • backups: copy backups to S3-compatible storage, retry failed uploads, restore from the copy (00206e7)
  • content: plugins from Hangar, checked by sha256, and Chunky pre-generation on Paper (e914567) · #49
  • content: Paper plugins from Modrinth, installed into plugins/ through plan and apply (5c14fa3)
  • servers: run Paper, from New server, the Version card and imports (608f0b8) · #48
  • providers: Paper builds from PaperMC's Fill API, checked by sha256 (dc2bda5)
  • installer: Flytower's release signing key (8689f90)
  • metrics: a week of CPU, memory, players and tick time, charted on a Performance tab and the System page (fb9d76c) · #46
  • system: Updates card to install a newer Flytower or go back, following the restart (9a0a4da) · #45
  • agent: install signed releases and switch to them with an updater that rolls back (73bcae2) · #45
  • release: sign SHA256SUMS with Ed25519 and check it in the installer and agent (5e02a4a) · #44
  • panel: Activity page listing who did what, with filters (e91aa8c) · #47

Fixes

  • security: adding a passkey while signed in needs a passkey check (54f0a03) · #55
  • backups: off-site uploads never started after a sweep that found nothing to do (fd8fb35)
  • console: strip Paper's hex colour codes from replies (a2780d4)
  • content: label plugins in the content list (374606e)
  • updater: give restored database files back to the panel's user on rollback (f6ecb06)
  • agent: tidy an unused assignment in the updater (c8ef617)

Docs

  • testing notes for 1.0.0 (37284bf)
  • documentation for 1.0, from installing to recovering the panel (13fc391) · #53
  • testing notes for 0.6.0 (aa9b153)
  • testing notes for 0.5.0; installer says when the signature checked out (8c3d9d6)

Other

  • e2e: upgrade from every published release, checking migrations and data come through (9749521) · #52
  • release: accept the signing key as pasted (flattened PEM, escaped newlines, or an OpenSSH key) (7636f68)
  • e2e: stop on a failed off-site upload and show every backup's state; log upload failures (5ef5a79)
  • e2e: use S3Mock for off-site storage; MinIO's images are no longer public (c448f7b)
  • release: say plainly when the signing key secret can't be read or doesn't match (b0202f1)
  • e2e: update to a signed release, and roll back one whose panel won't start (bf49f0b)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v0.4.0...v1.0.0

Beta

0.5.0

Features

  • account: list, add and remove passkeys, and make new recovery codes, on the System page (e8b5002) · #55
  • security: deleting a backup asks for your passkey, since it takes the off-site copy too (468b8fa)
  • security: HSTS when the panel is reached over HTTPS (7b49304)
  • security: send a content security policy and anti-framing headers on every response (965fb22)
  • spec: choose off-site storage by name in the server YAML (116fa26) · #54
  • backups: Off-site storage on System and a per-server choice on Backups, with upload status (320fca8) · #50
  • backups: copy backups to S3-compatible storage, retry failed uploads, restore from the copy (00206e7)
  • content: plugins from Hangar, checked by sha256, and Chunky pre-generation on Paper (e914567) · #49
  • content: Paper plugins from Modrinth, installed into plugins/ through plan and apply (5c14fa3)
  • servers: run Paper, from New server, the Version card and imports (608f0b8) · #48
  • providers: Paper builds from PaperMC's Fill API, checked by sha256 (dc2bda5)
  • installer: Flytower's release signing key (8689f90)
  • metrics: a week of CPU, memory, players and tick time, charted on a Performance tab and the System page (fb9d76c) · #46
  • system: Updates card to install a newer Flytower or go back, following the restart (9a0a4da) · #45
  • agent: install signed releases and switch to them with an updater that rolls back (73bcae2) · #45
  • release: sign SHA256SUMS with Ed25519 and check it in the installer and agent (5e02a4a) · #44
  • panel: Activity page listing who did what, with filters (e91aa8c) · #47

Fixes

  • security: adding a passkey while signed in needs a passkey check (54f0a03) · #55
  • backups: off-site uploads never started after a sweep that found nothing to do (fd8fb35)
  • console: strip Paper's hex colour codes from replies (a2780d4)
  • content: label plugins in the content list (374606e)
  • updater: give restored database files back to the panel's user on rollback (f6ecb06)
  • agent: tidy an unused assignment in the updater (c8ef617)

Docs

  • testing notes for 1.0.0 (37284bf)
  • documentation for 1.0, from installing to recovering the panel (13fc391) · #53
  • testing notes for 0.6.0 (aa9b153)
  • testing notes for 0.5.0; installer says when the signature checked out (8c3d9d6)

Other

  • e2e: upgrade from every published release, checking migrations and data come through (9749521) · #52
  • release: accept the signing key as pasted (flattened PEM, escaped newlines, or an OpenSSH key) (7636f68)
  • e2e: stop on a failed off-site upload and show every backup's state; log upload failures (5ef5a79)
  • e2e: use S3Mock for off-site storage; MinIO's images are no longer public (c448f7b)
  • release: say plainly when the signing key secret can't be read or doesn't match (b0202f1)
  • e2e: update to a signed release, and roll back one whose panel won't start (bf49f0b)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v0.4.0...v0.5.0

Beta

0.4.0

Features

  • world: Copy a world in card on the World tab (825ca0a) · #20
  • world: copy another server's world over this one, after a backup (3ccb6ab) · #20
  • settings: Clone card to copy a server, with or without its world (0999fdd) · #43
  • panel: clone a server through the create job, with or without its world (87a5247) · #43
  • panel: DNS record helper for server hostnames (0248669) · #41
  • panel: Address card in Settings, and copyable addresses on cards and the header (8cb915c) · #40
  • panel: per-server hostnames in the database, spec, plans and resources (16d20ac) · #40
  • panel: show the memory budget on Servers and System, and cap sliders to it (4363df5) · #42
  • panel: a memory budget for create, import, plans and resources (2055f7f) · #42

Docs

  • testing guide for 0.4.0 (0e60ad0)

Other

  • e2e: clone a running server with its world, and refuse an over-budget clone (ae62b83)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v0.3.0...v0.4.0

Beta

0.3.0

Features

  • world: World tab with pre-generation progress and world reset (becddd3) · #39
  • world: Chunky pre-generation and world reset service and API (939a22a) · #39
  • settings: Version card to change Minecraft version or loader (2070d46) · #38
  • spec: change the Minecraft version or loader through a plan (bb56bc6) · #38
  • agent: server.configure can switch the server's Java (af77a64) · #38
  • panel: pick Vanilla Tweaks packs from the Content tab (2de5c02) · #37
  • panel: install Vanilla Tweaks packs through the spec, unwrapping their zips (ee4444f) · #37
  • providers: add Vanilla Tweaks datapacks and crafting tweaks (9c2dbc3) · #37
  • panel: add the Content tab, with every change reviewed as a plan (5af6ee5) · #36
  • panel: list, search and check updates for a server's content (d0679c8) · #36
  • panel: let the Modrinth address be set, for mirrors and tests (77b9196) · #36
  • panel: edit, review and apply a server's spec from its YAML tab (2cc711f) · #35
  • panel: add a YAML editor and a plan view (92f941a) · #35
  • panel: create a server from a YAML spec (fb608cb) · #35
  • panel: add plan and apply endpoints (571f001) · #34
  • panel: plan a spec change and apply it as a job (ac647ca) · #34
  • panel: store a server's content list and read its lockfile (778c640) · #34
  • providers: keep locked versions when resolving content (c66643f) · #34
  • providers: add link content and resolve dependencies across a content list (b9a6770) · #33
  • providers: find and resolve mods and datapacks on Modrinth (a333920) · #33
  • panel: serve each server's spec, a spec checker and the JSON Schema (7a0c556) · #32
  • panel: describe a server as a YAML spec (d016bbf) · #32

Fixes

  • backups: wait for RCON when a server has only just started (5591b62)
  • panel: give two backups taken in the same second different names (749a0ad)

Docs

  • testing guide for 0.3.0 (c699e75)

Other

  • e2e: add Chunky through a plan and pre-generate a small area (baef1ad)
  • e2e: try a Vanilla Tweaks pack, reporting rather than failing if the site changed (cee50e9) · #37
  • e2e: add a Modrinth mod through plan and apply (fdddadd) · #34

Full diff: https://github.com/MattA-Official/mc-panel/compare/v0.2.0...v0.3.0

Beta

0.2.0

Features

  • panel: manage SSH access from System (1a9f7db) · #28
  • agent: close SSH, or open it for a while with a timer that survives restarts (259f03d) · #28
  • panel: add import page (bd8d33a) · #27
  • panel: add import API (6d3cf00) · #27
  • panel: stage imports from chunked uploads, links and deleted servers (2c8349f) · #27
  • agent: keep deleted servers' archives readable by the panel (73717ed) · #27
  • panel: create a server from imported files (0595d95) · #27
  • panel: work out what an imported folder is (edb865e) · #27
  • panel: read a world's Minecraft version from level.dat (55844f3) · #27
  • panel: add a zip reader for untrusted uploads (13a5e19) · #27
  • agent: restore the panel's group access to a server folder (50b7346) · #26
  • panel: add export world card with share links (980717e) · #19
  • panel: add export API and public share downloads (7c93418) · #19
  • panel: export worlds as zips with expiring share links (86de0d8) · #19
  • panel: add a streaming zip writer with zip64 (56d114d) · #19
  • panel: add backups tab with schedule, restore and download (6d78997) · #26
  • panel: add backup API and scheduled backups (f44a924) · #26
  • panel: back up and restore servers as jobs (67dc9ef) · #26
  • rcon: allow a longer timeout for one slow command (9cfc87c) · #26
  • panel: archive server folders with tar and zstd, and prune by retention (d0b8f03) · #26
  • panel: add logs tab with search and download (dd29f7a) · #25
  • panel: read and search server logs (843e18f) · #25
  • panel: add file manager tab (ceb343d) · #24
  • panel: confine file operations to the server folder (6460ae8) · #24
  • panel: add players tab for who's online, whitelist, ops and bans (1ded1ef) · #23
  • providers: look up players with Mojang and derive offline UUIDs (5cfb14d) · #23
  • panel: add settings tab for game settings, memory and port (efe655f) · #22
  • panel: edit server.properties without disturbing the file (bbea215) · #22
  • agent: add server.configure for memory and port changes (4b997dd) · #22
  • panel: delete a server with a typed name and passkey check (3be86d0) · #21

Fixes

  • panel: restore into a server folder the panel doesn't own (01c9ff3)
  • panel: keep the cause when a cross-disk copy fails (baf4946)
  • panel: fix file permissions before backups, restores and file reads (2d8ea45) · #26
  • rcon: send one packet at a time and end replies by size (9886e13) · #26
  • panel: keep the server name visible on phones (6a85e8c)

Docs

  • add testing notes for 0.2.0 (f3b55e8)

Other

  • e2e: open SSH by port, as the test image has no OpenSSH ufw profile (93645b6)
  • e2e: turn ufw on, allowing everything, for the emergency SSH check (21de4f6)
  • e2e: confirm the restore with a native click inside the dialog, and report toasts (63ee3c1)
  • e2e: check emergency SSH closes on time across an agent restart (f8cf815) · #28
  • e2e: open the backup menu with a native click (c57495e)
  • e2e: export a world and fetch it through a share link (bd5eaa8) · #19
  • panel: share the save pause, lock and space check (36176c2) · #19
  • e2e: back up a running server and restore it through the UI (ceb80ad) · #26
  • agent: fake Minecraft answers player commands and keeps list files (ff80418)
  • panel: give the server page tabs with nested routes (cdad2b3)

Full diff: https://github.com/MattA-Official/mc-panel/compare/v0.1.0...v0.2.0

Beta

0.1.0

Features

  • installer: add one-line installer for Ubuntu and Debian (3a9b32a) · #14
  • panel: add live server console with RCON commands (8ed4952) · #13
  • panel: add log tailer and console hub (66e0575) · #13
  • rcon: add a Minecraft RCON client (93792f6) · #13
  • panel: add servers list and server page with live status (7cd7da9) · #12
  • panel: add server list, detail and power endpoints (2733094) · #12
  • panel: add create-server wizard with live progress (3f30553) · #11
  • panel: add server creation API and job WebSocket (40e9442) · #11
  • panel: add job runner for creating servers (e0bfb00) · #11
  • providers: add Mojang vanilla and Fabric loader providers (260b755) · #10
  • panel: first-run setup, passkey sign-in, recovery codes and step-up (efc2afc) · #8, #9
  • panel: add passkey, recovery code, setup token and challenge modules (a07123c) · #8
  • panel: add bun:sqlite database with Drizzle schema and bundled migrations (aacb730) · #7
  • panel: scaffold Nuxt 4 SPA on Bun with Flytower branding and health check (e03bcbc) · #6
  • protocol: add a typed agent client with timeouts (00cdc42)
  • agent: create and delete servers with per-server users, limits and firewall rules (10fe1df)
  • agent: install Temurin runtimes from Adoptium with checksum verification (0b9152f)
  • agent: serve requests over a group-restricted Unix socket (d4b3f31)
  • agent: add request dispatcher, audit hook and service verbs (2c304d7)
  • protocol: add agent verb schemas, envelopes and line framing (5bac7f5)

Fixes

  • release: copy real files instead of Nitro's absolute symlinks (db7e4b3) · #15
  • panel: keep wizard port and progress steps readable (a6e80bc) · #11

Docs

  • add install guide, 0.1.0 test script and feedback template (8f35383) · #17
  • add README (00c0f5d)

Other

  • allow releasing from the Actions tab (3a0af4e)
  • e2e: install into a systemd container and drive it with Bun.WebView (42d1332) · #16
  • build and publish release tarballs on version tags (691f756) · #15
  • panel: give the recovery-code test room on slow runners (bb0ff87)
  • agent: simulate logs and RCON in the fake agent (340b60c)
  • await every rejects assertion (9f71960)
  • agent: add a fake agent for local panel development (8bfffe2)
  • panel: list public server fields explicitly (a76631d) · #12
  • protocol: connect to the agent with Bun.connect (6e6460e) · #18
  • agent: serve the socket with Bun.listen and decode frames as a stream (b5a5837) · #18
  • agent: run commands with Bun.spawn and hash downloads with Bun.CryptoHasher (8e6c694) · #18
  • ignore Nuxt build output and lockfiles in Prettier (05f8141)
  • switch runtime, package manager and tests to Bun (8d5e6ee)
  • rename working name to Flytower (b4b1058)
  • check formatting in lint, ignore lockfile (0a00026)
  • add TypeScript, ESLint, Prettier, Vitest and CI (d404edc)
  • initialise pnpm workspace (a533b88)
Beta

pr-85

Test build of #85 at 1eb9dd769db5d3f727042fa878a819bdc016515a, version 1.1.0-pr.85.19. Not a release: for testing on a spare VPS.

Install or upgrade to it with:

curl -fsSL https://github.com/MattA-Official/mc-panel/releases/download/pr-85/install.sh \
  | sudo bash -s -- --pr 85 --domain panel.example.com

It's deleted when the pull request closes.

Beta

pr-132

Test build of #132 at 2268de02da0aaed9c6072c9a7da445e7a88be076, version 1.2.0-pr.132.115. Not a release: for testing on a spare VPS.

Install or upgrade to it with:

curl -fsSL https://github.com/MattA-Official/mc-panel/releases/download/pr-132/install.sh \
  | sudo bash -s -- --pr 132 --domain panel.example.com

It's deleted when the pull request closes.