[{"data":1,"prerenderedAt":24851},["ShallowReactive",2],{"docs-navigation":3,"docs-search":117,"releases":930,"mdc-v8wunw-key":1127,"mdc--v9sb74-key":1726,"mdc-i6gjjb-key":2361,"mdc-y58pdl-key":2430,"mdc--pa6y0g-key":2903,"mdc--w579ey-key":3365,"mdc--klolgj-key":3427,"mdc--4kcrf6-key":3506,"mdc--s6o97o-key":3911,"mdc-s8q779-key":4081,"mdc-ulbtzs-key":7361,"mdc--7ms62y-key":8159,"mdc-otcfzk-key":8325,"mdc--nhjmtu-key":10013,"mdc-mnkds5-key":10126,"mdc-uzd6im-key":11749,"mdc--qnixg3-key":12425,"mdc--ujd5ep-key":13299,"mdc--xjlwny-key":14972,"mdc--6a4iug-key":15732,"mdc--3xko24-key":16159,"mdc-zarfs3-key":16276,"mdc-6y137r-key":16378,"mdc--z0vf63-key":16517,"mdc--r04ame-key":16817,"mdc-jfd2a6-key":17600,"mdc--sefnmz-key":18847,"mdc-v9vl0c-key":19024,"mdc-kmd3cj-key":19961,"mdc--wl19p3-key":20130,"mdc--lnmxk1-key":20401,"mdc--r1yypd-key":20731,"mdc--rbc6gd-key":21416,"mdc--9wf8kg-key":21973,"mdc--j0ftz1-key":22251,"mdc-41cf8h-key":22905,"mdc--lwk5gl-key":23928,"mdc--penx0k-key":24760,"mdc--z9bq2r-key":24810},[4],{"title":5,"path":6,"stem":7,"children":8,"page":116},"Docs","\u002Fdocs","docs",[9,15,20,26,31,37,42,47,52,57,62,67,72,77,82,87,92,97,101,106,111],{"title":10,"path":11,"stem":12,"section":13,"order":14},"Overview","\u002Fdocs\u002Freadme","docs\u002FREADME","Getting started",1,{"title":16,"path":17,"stem":18,"section":13,"order":19},"Your account, passkeys and recovery codes","\u002Fdocs\u002Faccount","docs\u002Faccount",4,{"title":21,"path":22,"stem":23,"section":24,"order":25},"Addresses and DNS","\u002Fdocs\u002Faddresses","docs\u002Faddresses","Running servers",12,{"title":27,"path":28,"stem":29,"section":24,"order":30},"Backups","\u002Fdocs\u002Fbackups","docs\u002Fbackups",11,{"title":32,"path":33,"stem":34,"section":35,"order":36},"Branding","\u002Fdocs\u002Fbranding","docs\u002Fbranding","Looking after the machine",20,{"title":38,"path":39,"stem":40,"section":24,"order":41},"Mods, plugins and datapacks","\u002Fdocs\u002Fcontent","docs\u002Fcontent",10,{"title":43,"path":44,"stem":45,"section":24,"order":46},"Crashes","\u002Fdocs\u002Fcrashes","docs\u002Fcrashes",15,{"title":48,"path":49,"stem":50,"section":24,"order":51},"Discord app","\u002Fdocs\u002Fdiscord","docs\u002Fdiscord",18,{"title":53,"path":54,"stem":55,"section":35,"order":56},"Disk space","\u002Fdocs\u002Fdisk","docs\u002Fdisk",21,{"title":58,"path":59,"stem":60,"section":13,"order":61},"Your first server","\u002Fdocs\u002Ffirst-server","docs\u002Ffirst-server",3,{"title":63,"path":64,"stem":65,"section":13,"order":66},"Installing Flytower","\u002Fdocs\u002Finstall","docs\u002Finstall",2,{"title":68,"path":69,"stem":70,"section":24,"order":71},"Web map","\u002Fdocs\u002Fmap","docs\u002Fmap",19,{"title":73,"path":74,"stem":75,"section":24,"order":76},"Notifications","\u002Fdocs\u002Fnotifications","docs\u002Fnotifications",16,{"title":78,"path":79,"stem":80,"section":13,"order":81},"People and roles","\u002Fdocs\u002Fpeople","docs\u002Fpeople",5,{"title":83,"path":84,"stem":85,"section":24,"order":86},"Scheduled tasks","\u002Fdocs\u002Fschedules","docs\u002Fschedules",14,{"title":88,"path":89,"stem":90,"section":13,"order":91},"Keyboard shortcuts","\u002Fdocs\u002Fshortcuts","docs\u002Fshortcuts",6,{"title":93,"path":94,"stem":95,"section":24,"order":96},"Server YAML reference","\u002Fdocs\u002Fspec","docs\u002Fspec",17,{"title":98,"path":99,"stem":100,"section":24,"order":71},"Player stats","\u002Fdocs\u002Fstats","docs\u002Fstats",{"title":102,"path":103,"stem":104,"section":24,"order":105},"Public status page","\u002Fdocs\u002Fstatus-page","docs\u002Fstatus-page",13,{"title":107,"path":108,"stem":109,"section":35,"order":110},"Troubleshooting","\u002Fdocs\u002Ftroubleshooting","docs\u002Ftroubleshooting",23,{"title":112,"path":113,"stem":114,"section":35,"order":115},"Updating Flytower","\u002Fdocs\u002Fupdating","docs\u002Fupdating",22,false,[118,121,126,130,134,138,143,146,149,154,159,164,169,174,179,184,187,190,195,200,205,208,212,217,222,227,232,237,242,245,249,254,259,264,269,274,277,281,286,291,296,301,306,311,316,319,322,327,332,337,342,345,349,354,359,364,369,374,379,384,389,394,399,402,405,410,415,420,425,430,433,436,441,446,451,456,461,466,471,476,481,486,489,493,498,503,508,513,517,520,524,529,534,539,544,549,554,557,561,566,571,576,581,586,591,594,597,602,607,612,617,622,627,630,634,639,644,649,654,659,662,665,670,675,680,685,688,692,697,701,706,711,716,721,726,731,736,741,746,751,756,761,766,771,776,779,782,787,792,797,800,803,807,812,816,821,826,830,835,840,842,845,850,855,860,865,870,875,880,882,885,890,895,900,905,910,915,920,925],{"id":11,"title":10,"titles":119,"content":120,"level":14},[],"Flytower is a web panel for running Minecraft servers on your own VPS. You install it once, then create and look after servers from the browser. You sign in with a passkey.",{"id":122,"title":123,"titles":124,"content":125,"level":14},"\u002Fdocs\u002Freadme#flytower-documentation","Flytower documentation",[],"Flytower is a web panel for running Minecraft servers on your own VPS. You install it once, then create and look after servers from the browser. You sign in with a passkey. These pages are also in the panel itself, for the version you have installed: Help in the sidebar, the ? at the top of each page for the page you're on, and  to search them.",{"id":127,"title":13,"titles":128,"content":129,"level":66},"\u002Fdocs\u002Freadme#getting-started",[123],"Installing Flytower: what you need, the installer, and its options. Your first server: creating, starting and joining a server. Your account, passkeys and recovery codes: signing in, extra devices, your name and appearance, and what to do if you lose them. People and roles: inviting people as Admins, Operators or Viewers, for one server or all of them. Keyboard shortcuts: G then a letter to jump about, J and K through lists, and ? to list them.",{"id":131,"title":24,"titles":132,"content":133,"level":66},"\u002Fdocs\u002Freadme#running-servers",[123],"Mods, plugins and datapacks: Modrinth, Hangar, Vanilla Tweaks, and your own files. Backups: schedules, retention, restoring, off-site copies, and past worlds. Addresses and DNS: giving each server its own hostname. Public status page: a page anyone can open, with the address, whether it's up and who's on. Scheduled tasks: restarts with an in-game countdown, console commands and announcements. Crashes: crash reports, crash loops, and servers that stop responding. Player stats: leaderboards for playtime, deaths, kills, distance and blocks mined, and leaving players out. Notifications: Discord, ntfy and JSON webhooks for crashes, failed backups, a filling disk, updates and players. Discord app: slash commands like \u002Fstatus and \u002Fplayers in your Discord server. Web map: a map of the world in the browser, drawn by Flytower, with players on it. Server YAML reference: every field of a server spec.",{"id":135,"title":35,"titles":136,"content":137,"level":66},"\u002Fdocs\u002Freadme#looking-after-the-machine",[123],"Branding: your own name, colours, font, logo and favicon. Disk space: where the space has gone, warnings at 85% and 95%, and freeing some up. Updating Flytower: self-update, going back, update badges, and upgrading old installs. Troubleshooting: logs, SSH, and getting the panel itself back.",{"id":139,"title":140,"titles":141,"content":142,"level":66},"\u002Fdocs\u002Freadme#how-it-fits-together","How it fits together",[123],"The panel (flytower-panel) is the web app. It runs as the unprivileged flytower user and listens only on 127.0.0.1:3000. Caddy puts it on HTTPS. The agent (flytower-agent) is a small root helper. It does a fixed list of jobs over a Unix socket: creating server users and folders, managing systemd units, installing Java, opening ports, and updating Flytower. Each server runs as its own user (mc-\u003Cname>) from \u002Fsrv\u002Fflytower\u002Fservers\u002F\u003Cname>, under systemd (flytower-mc@\u003Cname>), with a fixed memory limit. Its folder is an ordinary Minecraft server folder that still runs without Flytower.",{"id":17,"title":16,"titles":144,"content":145,"level":14},[],"Flytower has no passwords. You sign in with a passkey: your phone, laptop or password manager proves it's you with your fingerprint, face or PIN. Passkeys can't be phished, and there's nothing to leak.",{"id":147,"title":16,"titles":148,"content":145,"level":14},"\u002Fdocs\u002Faccount#your-account-passkeys-and-recovery-codes",[],{"id":150,"title":151,"titles":152,"content":153,"level":66},"\u002Fdocs\u002Faccount#setting-up","Setting up",[16],"The installer gives you a setup link and a setup token (or uses the token you chose). The first time, open the link (or open the panel and enter the token), create your passkey, and save the ten recovery codes you're shown. Download them or copy them somewhere safe, like your password manager. You're asked to type one back to show you've saved them.",{"id":155,"title":156,"titles":157,"content":158,"level":66},"\u002Fdocs\u002Faccount#more-than-one-device","More than one device",[16],"Your passkeys and recovery codes, on Your account. On Your account (your name at the bottom of the sidebar), Your passkeys: Add a passkey creates one on the device you're using, or on a security key. Add at least two, so losing one device doesn't lock you out. Passkeys in iCloud Keychain, Google Password Manager, 1Password and similar sync between your devices by themselves. Remove a passkey you no longer use, or one on a lost device. Removing one also signs you out on every other device, so a lost one can't carry on; sign in again on the ones you still use. Your last passkey can't be removed.",{"id":160,"title":161,"titles":162,"content":163,"level":66},"\u002Fdocs\u002Faccount#if-you-lose-every-passkey","If you lose every passkey",[16],"On the sign-in page, choose Lost your passkeys? Use a recovery code. Each code works once. After signing in with one, you're asked to add a new passkey straight away, before anything else. Down to your last few codes? Your account, Make new codes gives you a fresh set of ten. The old ones stop working. If your codes were made before Flytower 1.4.1, making a new set is worth doing: newer codes are quicker for the panel to check.",{"id":165,"title":166,"titles":167,"content":168,"level":66},"\u002Fdocs\u002Faccount#if-you-lose-your-passkeys-and-your-codes","If you lose your passkeys and your codes",[16],"You need to get onto the machine itself, through your VPS provider's web console (or SSH if it's open). Then re-run the installer with a new setup token: curl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Flatest\u002Fdownload\u002Finstall.sh \\\n  | sudo bash -s -- --domain panel.example.com --setup-token NEW-LONG-RANDOM-TOKEN\nsudo sqlite3 \u002Fvar\u002Flib\u002Fflytower\u002Fflytower.db 'DELETE FROM credentials; DELETE FROM recovery_codes;'\nsudo systemctl restart flytower-panel The panel then asks for the setup token again, as on the first day. Your servers, backups and settings are untouched. (sqlite3 may need installing with apt install sqlite3.)",{"id":170,"title":171,"titles":172,"content":173,"level":66},"\u002Fdocs\u002Faccount#who-did-what","Who did what",[16],"Activity lists every sign-in, passkey change and recovery-code use, alongside everything done to servers.",{"id":175,"title":176,"titles":177,"content":178,"level":66},"\u002Fdocs\u002Faccount#your-account","Your account",[16],"Click your name at the bottom of the sidebar to open Your account: Profile: change your name (it shows in Activity and on Access) and pick Appearance: light, dark or system. Your choice is saved for you, so it follows you to every device. The sun and moon button in the sidebar switches too. Your passkeys and recovery codes, as above. Sign out everywhere else: for a lost phone or a shared computer. Every other browser signed in as you is signed out on its next click; this one stays signed in. It asks for your passkey.",{"id":180,"title":181,"titles":182,"content":183,"level":66},"\u002Fdocs\u002Faccount#this-browser","This browser",[16],"Some settings live in the browser rather than on your account, so each device can be different. They're under This browser on Your account. Use Flytower's right-click menus. Right-click a server card for its actions: open, start or stop, back up, go to a tab, clone or delete. Shift + right-click always shows the browser's own menu, as do text you've selected and any field. On a phone, press and hold a card instead. Turn this off to keep the browser's menu everywhere; the ⋯ button on each card offers the same actions either way. Use single-key shortcuts. Keys like G then S for Servers, J and K to move through a list, and ? to list them all (see Keyboard shortcuts). Turn this off if keys get pressed for you, by voice control for example. Ctrl + K and Ctrl + S work either way. html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":22,"title":21,"titles":185,"content":186,"level":14},[],"By default players connect to your VPS's IP address, with a port for every server after the first. A hostname per server lets them type survival.example.com instead, with no port.",{"id":188,"title":21,"titles":189,"content":186,"level":14},"\u002Fdocs\u002Faddresses#addresses-and-dns",[],{"id":191,"title":192,"titles":193,"content":194,"level":66},"\u002Fdocs\u002Faddresses#setting-one","Setting one",[21],"A server's Settings, General, Address: enter the hostname, such as survival.example.com. You can also set it with hostname: in the YAML. Two servers can't share one.",{"id":196,"title":197,"titles":198,"content":199,"level":66},"\u002Fdocs\u002Faddresses#dns-records","DNS records",[21],"Under the address, DNS records lists exactly what to create with your DNS provider: An A record (and AAAA if the machine has IPv6) pointing the hostname at the VPS. An SRV record (_minecraft._tcp.\u003Chostname>), when the server isn't on port 25565. This tells Minecraft which port to use, so players don't need to type it. On Cloudflare, set the records to DNS only (grey cloud). Minecraft traffic can't go through Cloudflare's proxy. Check again looks the records up and marks each one Right, Missing or Wrong (with where it points now). DNS changes can take a few minutes to show.",{"id":201,"title":202,"titles":203,"content":204,"level":66},"\u002Fdocs\u002Faddresses#the-panels-own-address","The panel's own address",[21],"The panel's domain is set when you install (--domain). Caddy gets and renews its certificate. To move the panel to another domain, re-run the installer with the new --domain. Your passkeys belong to the old domain, so sign in with a recovery code once on the new one, then add a passkey.",{"id":28,"title":27,"titles":206,"content":207,"level":14},[],"Everything here is on a server's World tab, which opens on .",{"id":209,"title":27,"titles":210,"content":211,"level":14},"\u002Fdocs\u002Fbackups#backups",[],"Everything here is on a server's World tab, which opens on . The Backups section of a server's World tab.",{"id":213,"title":214,"titles":215,"content":216,"level":66},"\u002Fdocs\u002Fbackups#taking-backups","Taking backups",[27],", with a note if you like. If the server is running, it pauses saving for a moment so the world on disk is consistent. Players stay connected. : every 6 or 12 hours, daily, weekly, or your own cron expression, in your time zone. Flytower also takes a safety backup before anything risky: applying a plan that touches mods or the world, restoring, resetting the world, or copying another world in. Backups are .tar.zst archives of the whole server folder. They live in \u002Fvar\u002Flib\u002Fflytower\u002Fbackups\u002F\u003Cserver>, and you can download them. Some things are left out because they're never worth restoring: logs, crash-reports, spark's scratch folder config\u002Fspark\u002Ftmp, and any file ending in .tmp. If a file can't be read, for example because a mod made it private to the server, the backup leaves that file out rather than failing, and the backup's job says which files it skipped.",{"id":218,"title":219,"titles":220,"content":221,"level":66},"\u002Fdocs\u002Fbackups#how-many-are-kept","How many are kept",[27],"Scheduled backups are thinned out by the keep settings. By default Flytower keeps the newest 6, plus the newest from each of the last 7 days and the last 4 weeks. The three newest safety backups are kept. Backups you take yourself are never deleted automatically. To keep any backup forever, choose Keep forever on it. It gets a Kept badge, retention never deletes it, and it doesn't count towards the numbers above. Stop keeping forever hands it back to retention. When the disk is 95% full, scheduled backups are skipped rather than risk filling it, and Back up now asks first. See Disk space.",{"id":223,"title":224,"titles":225,"content":226,"level":66},"\u002Fdocs\u002Fbackups#restoring","Restoring",[27],"Choose Restore on a backup. Flytower asks for your passkey, takes a safety backup of how things are now, stops the server, puts the backup back, and starts it again. Changed your mind? Restore the safety backup.",{"id":228,"title":229,"titles":230,"content":231,"level":66},"\u002Fdocs\u002Fbackups#off-site-copies","Off-site copies",[27],"A backup on the same machine won't help if the machine is lost. Flytower can copy backups to any S3-compatible storage, such as Backblaze B2, Cloudflare R2, Wasabi or Amazon S3. Create a bucket with your provider, and an access key that can read, write and delete in it. With R2 and B2, a key limited to that one bucket is best. System, Off-site storage, Add storage. Enter the endpoint (for example https:\u002F\u002Fs3.eu-central-003.backblazeb2.com), region, bucket, an optional folder prefix, and the key. Test writes, reads back and deletes a small file. On each server's World, Backups, choose the storage under Off-site copies, or set backups.offsite in its YAML. Existing backups are copied, and new ones follow within a minute or two. Each backup shows a cloud icon once its copy is safe. Failed uploads retry by themselves (after 1, 5 and 30 minutes), and Retry off-site copy tries again straight away. Deleting a backup, or retention removing it, deletes its copy too. Copies are stored under \u003Cprefix>\u002F\u003Cserver>\u002F\u003Cfile>. If a backup's local file is lost, the backup shows Off-site only, and restoring it downloads it first. The secret key is encrypted with the panel's app secret (in \u002Fetc\u002Fflytower\u002Fpanel.env) and is never shown again after you save it.",{"id":233,"title":234,"titles":235,"content":236,"level":66},"\u002Fdocs\u002Fbackups#sharing-a-world","Sharing a world",[27],"World, Past worlds, Export world makes a zip of just the world, ready for single player. Share gives a link anyone can download it from, without signing in, for as long as you choose. Revoke a link to stop it working.",{"id":238,"title":239,"titles":240,"content":241,"level":66},"\u002Fdocs\u002Fbackups#past-worlds","Past worlds",[27],"Resetting a world (World, Tools, Reset the world) can end a season rather than throw it away. The reset dialog offers to: Keep the old world as a past world, under a name you choose (for example \"2025–26 world\"). Flytower zips the old world, datapacks included, after the server has stopped and before anything is cleared, so it opens in single player exactly as it was. If there isn't room on the disk, the reset stops and nothing changes. Keep the final backup forever: the safety backup taken first is marked as kept. It holds the whole server (mods, settings and world), not just the world. Past worlds are listed under World, Past worlds, and are kept until you delete them. Each one can be downloaded, shared with a link like an export, renamed, or turned into a new server with Start a server from it, which opens Import with that world chosen. Import, A past world lists every server's past worlds too. Deleting a server leaves its past worlds and backups in place.",{"id":33,"title":32,"titles":243,"content":244,"level":14},[],"Flytower can wear your society's or community's name and colours instead of its own, without changing any code. Set it on System, Branding. Saving asks for your passkey.",{"id":246,"title":32,"titles":247,"content":248,"level":14},"\u002Fdocs\u002Fbranding#branding",[],"Flytower can wear your society's or community's name and colours instead of its own, without changing any code. Set it on System, Branding. Saving asks for your passkey. The name, colour and font, on System, Branding.",{"id":250,"title":251,"titles":252,"content":253,"level":66},"\u002Fdocs\u002Fbranding#what-you-can-change","What you can change",[32],"Name: up to 40 characters. It replaces \"Flytower\" in the menu, on the sign-in page, in browser tab titles, as the name on Discord notifications and in passkey prompts. Accent colour: your brand colour, as a hex code like #2f6fd0 or from the picker. See below for how it's used. Display font: the face for titles and server names. Choose from Big Shoulders Display (Flytower's own), IBM Plex Sans, Fraunces (a serif) or Space Grotesk. All of them are bundled with Flytower, so nothing is loaded from Google or anywhere else. Body text and the console stay in IBM Plex. Logo: shown next to the name in the menu and on the sign-in page. Favicon: the browser tab's icon. Without one, the logo is used. Powered by Flytower: a small line under the menu and on the sign-in page. It only shows when your name isn't Flytower, and you can turn it off. Reset to Flytower puts everything back and deletes uploaded images. Branding is stored in Flytower's database, so it's kept through updates and travels with the database.",{"id":255,"title":256,"titles":257,"content":258,"level":66},"\u002Fdocs\u002Fbranding#colours-and-contrast","Colours and contrast",[32],"You pick one colour. Flytower works out a full range of lighter and darker shades from it, keeping its hue, with your exact colour as one of them. The form shows the range. Then, for light mode and for dark mode separately, it uses the shade nearest your colour that's easy to read: at least 4.5:1 contrast (WCAG AA) against the page and card backgrounds, and against the text on a coloured button. So a dark navy is used as it is on the light theme, and a lighter navy on the dark theme. The preview shows both, with the shade and contrast ratio each uses. Status colours (green for running, amber for starting, red for crashed) and warnings never change, so a red brand won't make a healthy server look crashed.",{"id":260,"title":261,"titles":262,"content":263,"level":66},"\u002Fdocs\u002Fbranding#logos-and-favicons","Logos and favicons",[32],"Upload an SVG or PNG. It's cleaned before it's kept: SVG: rebuilt from shapes, gradients, text and simple filters only. Scripts, event handlers, embedded images and web pages, links to other files, animations and editor metadata are taken out. Files with a DOCTYPE are refused. The SVG needs a viewBox (or a width and height) so it can be scaled. If your design tool's export is refused, export it again as \"plain\" or \"optimised\" SVG. PNG: up to 1024 pixels on each side. Text, EXIF and other metadata are removed, so nothing like a camera location or an author's name is published. Once cleaned, an image can be up to 256 KB. Logos are shown at about 28 pixels high in the menu and 40 on the sign-in page, so a square or slightly wide mark works best. Uploaded images are public, like the sign-in page, since that page shows them before anyone signs in.",{"id":265,"title":266,"titles":267,"content":268,"level":66},"\u002Fdocs\u002Fbranding#where-else-it-shows","Where else it shows",[32],"Discord: notifications are posted under your name, and the footer reads \"Name · server\". If your logo is a PNG and the panel has a domain, it's the webhook's avatar too (Discord can't show SVG avatars). Discord doesn't allow names that mention Discord, so those post as Flytower. The colours down the side of each message still mean how serious it is. In-game: scheduled announcements and restart warnings use your accent colour instead of gold. Passkeys: the prompt to create or use a passkey names your panel. Existing passkeys keep working. The public status page (coming in 1.2) uses the same name, colours and logo.",{"id":270,"title":271,"titles":272,"content":273,"level":66},"\u002Fdocs\u002Fbranding#for-other-tools","For other tools",[32],"GET \u002Fapi\u002Fbranding returns the name, colour, the shades used in each mode, the font and the logo and favicon addresses as JSON, without signing in. \u002Fbranding\u002Ftheme.css is the stylesheet every page loads; it's empty while the colours and font are Flytower's own.",{"id":39,"title":38,"titles":275,"content":276,"level":14},[],"A server's Content tab lists what it runs. Add content searches the sources Flytower trusts. Everything you add goes into a plan first, and every download is checked against the hash its source publishes, so a tampered file is refused.",{"id":278,"title":38,"titles":279,"content":280,"level":14},"\u002Fdocs\u002Fcontent#mods-plugins-and-datapacks",[],"A server's Content tab lists what it runs. Add content searches the sources Flytower trusts. Everything you add goes into a plan first, and every download is checked against the hash its source publishes, so a tampered file is refused. A server's Content tab.",{"id":282,"title":283,"titles":284,"content":285,"level":66},"\u002Fdocs\u002Fcontent#what-each-loader-runs","What each loader runs",[38],"Loader Mods (mods\u002F) Plugins (plugins\u002F) Datapacks (world\u002Fdatapacks\u002F) Vanilla ✓ Fabric ✓ ✓ Paper ✓ ✓",{"id":287,"title":288,"titles":289,"content":290,"level":66},"\u002Fdocs\u002Fcontent#sources","Sources",[38],"Modrinth: mods, plugins and datapacks. Only versions made for your loader and Minecraft version are offered. Required dependencies (Fabric API, for example) come along by themselves, and are marked \"Needed by …\". Hangar: PaperMC's plugin repository, for Paper servers. Hangar dependencies come along too. Plugins that Hangar only links to on another site can't be checked, so they're refused; add them as a link instead (below). Vanilla Tweaks: tick the datapacks and crafting tweaks you want. Flytower builds the zip from Vanilla Tweaks just as their site does. A link: any https file with its SHA-256, in the YAML.",{"id":292,"title":293,"titles":294,"content":295,"level":66},"\u002Fdocs\u002Fcontent#client-only-mods","Client-only mods",[38],"Modrinth lets each author say whether their project runs on a server. Search leaves out the ones marked client-only, since most (minimaps, shaders, zoom) do nothing there. Some server mods need one anyway, and the marks aren't always right, so turn on Show client-only in Add content to see them, or list one in the YAML like anything else. A required dependency marked client-only comes along by itself too. Either way, the plan shows a warning like \"Modrinth marks Voxy as client-only. It's installed because you asked for it; remove it if the server won't start.\" The plan still applies, and the item is locked and checked for updates like any other.",{"id":297,"title":298,"titles":299,"content":300,"level":66},"\u002Fdocs\u002Fcontent#updates","Updates",[38],"Nothing updates by itself. The Content tab shows what's newer for your Minecraft version; update one item or all of them. Flytower also checks in the background every six hours and puts the number of updates on the server's card and its Content tab, and says when a newer Minecraft is out that everything installed is ready for. See Update badges. When you change the Minecraft version (Settings, Version), the plan moves every item to a build for the new version, and names anything that has none. The plan won't apply until you remove those.",{"id":302,"title":303,"titles":304,"content":305,"level":66},"\u002Fdocs\u002Fcontent#removing","Removing",[38],"Remove an item and anything that was only there for it goes too.",{"id":307,"title":308,"titles":309,"content":310,"level":66},"\u002Fdocs\u002Fcontent#files-you-add-yourself","Files you add yourself",[38],"Jars and zips you put in mods\u002F, plugins\u002F or datapacks\u002F yourself (through the Files tab or SFTP) are listed as added by hand. Flytower leaves them alone: it never updates or removes them.",{"id":312,"title":313,"titles":314,"content":315,"level":66},"\u002Fdocs\u002Fcontent#the-lockfile","The lockfile",[38],"Each server folder has a flytower.lock.json, listing exactly what's installed: the version, where it came from, and its hash. It's what lets Flytower tell its own files from yours. Leave it in place if you move the folder.",{"id":44,"title":43,"titles":317,"content":318,"level":14},[],"Flytower notices when a server crashes, tells you why, and stops a server that keeps crashing from restarting forever. It also spots a server that is still running but has stopped responding.",{"id":320,"title":43,"titles":321,"content":318,"level":14},"\u002Fdocs\u002Fcrashes#crashes",[],{"id":323,"title":324,"titles":325,"content":326,"level":66},"\u002Fdocs\u002Fcrashes#what-happens-when-a-server-crashes","What happens when a server crashes",[43],"Flytower follows systemd's journal (through its system helper), so it hears about a crash, or a server started or stopped with systemctl, as it happens, without checking over and over. As a safety net it also looks at every server every five minutes. If the journal can't be followed, it falls back to checking every ten seconds. systemd restarts it after 15 seconds. On newer systems (systemd 254 or later, such as Ubuntu 24.04) the wait grows with each crash, up to a minute. Flytower records the crash with its cause, a link to Minecraft's crash report if one was written, and the last 50 lines of the log (which would otherwise be lost when the server starts again). The server's badge reads Restarting after a crash, and the Console tab shows a banner with the time, the cause and an Open crash report button, which opens the report in the Files tab. The banner stays until you close it, even after the server is back. The servers list shows a red dot next to a server with a crash nobody has looked at. The crash is in Activity, credited to Flytower, and a notification is sent, followed by \"Server is back up\" once players can join again (when the log says it's ready). The cause is one of: Minecraft crashed, with the crash report's description, such as \"Exception ticking world\". Out of memory: either the server went over its memory limit and the system stopped it, or Java ran out of heap. Give it more memory under Settings, General, or take out mods. Java itself crashed (an hs_err_pid….log file in the server folder). It exited with code N, or It was killed by SIGKILL (or another signal), when there's nothing more specific. Every crash, crash loop and \"not responding\" from the last 30 days is listed under the Console's Crashes button (or View logs, Crashes), each with its crash report and the log from just before it.",{"id":328,"title":329,"titles":330,"content":331,"level":66},"\u002Fdocs\u002Fcrashes#crash-loops","Crash loops",[43],"After three crashes in ten minutes, the server is left stopped and marked Crash-looping, and a \"Server keeps crashing\" notification is sent. Fix the cause (the crash report usually says which mod), then press Start. Starting it from Flytower clears the crash loop.",{"id":333,"title":334,"titles":335,"content":336,"level":66},"\u002Fdocs\u002Fcrashes#not-responding","Not responding",[43],"Once a minute, Flytower asks each running server for its player list and tick time over RCON (the same questions as the performance charts on the servers list). If a server that systemd says is running doesn't answer for five minutes in a row, it's marked Not responding and a notification is sent. A server that has only just started gets fifteen minutes, since a big world can take a while to load. Nothing else happens unless you turn on Restart it when it stops responding under the server's Settings, Maintenance (or recovery: { restartWhenUnresponsive: true } in its YAML). Then Flytower restarts it once. If it's still stuck afterwards, it stays marked but isn't restarted again until it has answered at least once.",{"id":338,"title":339,"titles":340,"content":341,"level":66},"\u002Fdocs\u002Fcrashes#what-isnt-a-crash","What isn't a crash",[43],"Stopping or restarting from Flytower, including the stop and start around applying changes, restoring a backup or resetting the world, even if the server crashes on the way down. Typing stop in the console. The server stops normally and isn't restarted. If Minecraft writes a crash report and then exits normally (so systemd sees a clean exit), Flytower still counts it as a crash and starts the server again itself, within the same three-in-ten-minutes limit.",{"id":49,"title":48,"titles":343,"content":344,"level":14},[],"Flytower can answer slash commands in your Discord server, such as \u002Fstatus and \u002Fplayers, through a Discord app you make. It's separate from notifications, which only need a channel webhook.",{"id":346,"title":48,"titles":347,"content":348,"level":14},"\u002Fdocs\u002Fdiscord#discord-app",[],"Flytower can answer slash commands in your Discord server, such as \u002Fstatus and \u002Fplayers, through a Discord app you make. It's separate from notifications, which only need a channel webhook. Discord sends each command to your panel over HTTPS, so the panel needs a domain that Discord can reach from the internet. Flytower doesn't keep a connection open to Discord, unless you turn on chat from Discord.",{"id":350,"title":351,"titles":352,"content":353,"level":66},"\u002Fdocs\u002Fdiscord#connecting-an-app","Connecting an app",[48],"Open the Discord Developer Portal and press New Application. Its name and icon are what people see next to the answers. On the app's Bot tab, press Reset Token and copy the token. In Flytower, open System, Integrations, paste the token into Discord app and press Connect. You're asked for your passkey. The Discord app card, on System, Integrations. Flytower then: reads the app's name, application ID and public key from Discord, so you don't copy them by hand, stores the token encrypted (it's never shown again), and sets the app's Interactions Endpoint URL to https:\u002F\u002F\u003Cyour panel domain>\u002Fapi\u002Fdiscord\u002Finteractions. Discord checks the address straight away by calling it, so a green Connected means Discord can reach the panel. Last, press Add to a Discord server and pick the server. The app only needs the applications.commands scope, so it can't read messages or change anything in your Discord server.",{"id":355,"title":356,"titles":357,"content":358,"level":66},"\u002Fdocs\u002Fdiscord#commands","Commands",[48],"Command Answers \u002Fstatus [server] Whether the server is online, starting or offline, its address, how many are on, its version, and a link to its web map when that's public. \u002Fplayers [server] Who's on right now. \u002Fleaderboard [stat] [period] [server] The top players for playtime, deaths, mob kills, distance or blocks mined, for all time, this month or this week. \u002Fstats \u003Cplayer> [server] One player's figures for all time, and what they added this week.",{"id":360,"title":361,"titles":362,"content":363,"level":61},"\u002Fdocs\u002Fdiscord#staff-commands","Staff commands",[48,356],"These need a Discord role mapped to a Flytower role with the permission shown, on the server picked. Command Needs Does \u002Fwhitelist add \u003Cplayer> [server] Manage players Lets a player join. Works while the server is stopped too, like the Players tab. \u002Fwhitelist remove \u003Cplayer> [server] Manage players Takes a player off the whitelist. \u002Frestart [server] Start and stop Says \"Restarting\" at once, then \"back up\" once players can join again (or why it failed). \u002Fbackup [server] [note] Take backups Says \"Backing up\" at once, then the size when it's done (or why it failed). \u002Fsay \u003Cmessage> [server] Send console commands Shows [Discord] Your name: message to everyone in the game. You can leave out server when your role only covers one server; otherwise Discord suggests the ones you can act on. Every staff command is in Activity as \"Name via Discord\". \u002Fsay sends plain text only: Minecraft formatting codes and line breaks are taken out, and nothing in the message can run a command or add a click action. Leave out server to get every server at once; as you type it, Discord suggests the servers you can see. Both answer from the same information as the public status page, so the server itself is never asked and the page's settings apply: a server whose page shows only a count shows only a count in Discord, and one that hides players or its version hides them here too. Which servers show. Servers with their public page turned on, plus any server the caller can see through their Discord role. Everything else stays hidden: asking for it answers the same as a server that doesn't exist. Leaderboards and stats. \u002Fleaderboard and \u002Fstats use the same figures as the server's stats on its Players tab. They only cover servers whose public page shows leaderboards (which needs the page to show player names, and the server to keep stats). Players left out of stats never appear. For anyone who can't see the server in Flytower, \u002Fstats only knows the players on the public all-time or weekly leaderboards (the top five), shows only their figures on those boards, and never says when someone last played. With more than one such server, pick one with server. Answers are posted in the channel for everyone to see, except \"no such server\" and similar, which only the person who asked sees. Player names can never ping anyone. Flytower sends Discord its command list when you connect, and again after an update if the list changed. If Discord didn't take it, the card says so, with Send them again.",{"id":365,"title":366,"titles":367,"content":368,"level":66},"\u002Fdocs\u002Fdiscord#discord-roles","Discord roles",[48],"Staff commands use the access of a Flytower role. Under Discord roles on the card, give a Discord role a Flytower role, for all servers or one server, and its members can do in Discord what that role can do in the panel. Discord sends the caller's roles with every command, so nobody has to link their Discord account. In Discord, turn on Developer Mode (User Settings, Advanced). In your Discord server's Server Settings, Roles, right-click the role and choose Copy Role ID. On the card, press Give a Discord role access, paste the ID, give it a name you'll recognise (Discord doesn't tell the app role names), and pick the Flytower role and servers. A member with several mapped roles gets all of them together. Changes apply to the next command. Owner can't be given out through Discord. Saving needs Manage integrations, Manage roles and your passkey, and is in Activity. As with giving people roles, you can only give a Discord role what you could do on those servers yourself, and only remove a mapping you could have made. Mappings you leave as they are stay. Anyone without a mapped role who tries a staff command gets a private \"Sorry, you can't use that\", and the attempt is in Activity. Commands used in a direct message with the app only get what everyone gets. Everything done through Discord is in Activity as \"Name via Discord\", using the member's nickname in your Discord server.",{"id":370,"title":371,"titles":372,"content":373,"level":66},"\u002Fdocs\u002Fdiscord#if-the-endpoint-isnt-set","If the endpoint isn't set",[48],"The card says Endpoint not set, with Discord's reason, when Discord couldn't reach the panel or the panel has no domain. Fix the cause, then press Try the endpoint again. You can also copy the endpoint from the card into Interactions Endpoint URL on the app's General Information page in the Developer Portal; Discord checks it there too.",{"id":375,"title":376,"titles":377,"content":378,"level":66},"\u002Fdocs\u002Fdiscord#testing-and-disconnecting","Testing and disconnecting",[48],"Test connection checks the stored token still works for the same app, and notices if the endpoint was changed in the Developer Portal. Disconnect takes the app's commands down, clears its endpoint, and forgets the token. The app itself stays in the Developer Portal and in any Discord server it was added to; remove it there if you don't want it any more. If you think the token has leaked, press Reset Token in the Developer Portal: the old one stops working at once, and you connect again with the new one.",{"id":380,"title":381,"titles":382,"content":383,"level":66},"\u002Fdocs\u002Fdiscord#game-chat-in-a-channel","Game chat in a channel",[48],"Each server can post what players say in game to a Discord channel. This only needs the channel's webhook, not the app. In Discord, open the channel's settings, Integrations, Webhooks, press New Webhook and Copy Webhook URL. In Flytower, open the server, Settings, Community, Discord chat, paste the URL and press Turn on. You're asked for your passkey. Send a test posts a line first if you'd like to check. Discord chat, in a server's Settings, Community. Chat (and \u002Fme) is posted under the player's name with their face as the picture. say and me from the panel's console are posted under [Server] and the name of whoever sent them. Joins, leaves, deaths and advancements are posted the same way, in italics (joined the game, was slain by Zombie, has made the advancement [Stone Age]). Everything is plain text, unlike notifications, which use embeds. Turn any of the four off with the switches. Lines come from the server's log the moment Minecraft writes them, including chat that mods like No Chat Reports turn into system messages. Nothing typed in game can ping anyone: every message has mentions switched off, and Markdown, @everyone, \u003C@…> and similar show exactly as typed. Links still work but don't get a preview. Discord limits how fast a webhook can post. Flytower sends one message at a time per server and waits whenever Discord says to. When chat is quicker than that, one player's lines in a row go as one message, and a bigger backlog goes as one message listing everyone's lines, so nothing is lost unless the server is 200 lines behind. Player faces need the panel to have a domain, because Discord fetches them from the panel (the address is signed, so it can't be used to look up other players). Without one, chat is posted with Discord's default picture. If Discord says the webhook is gone (it was deleted) or refuses it, Flytower stops posting and the card says why. Paste a new webhook, or press Save to try the same one again. The webhook URL is stored encrypted and never shown again; the card shows only the webhook's ID.",{"id":385,"title":386,"titles":387,"content":388,"level":66},"\u002Fdocs\u002Fdiscord#chat-from-discord","Chat from Discord",[48],"Messages people send in a server's Discord chat channel can be shown in game too, as [Discord] name: message. It's off until you turn it on, because it keeps one connection to Discord open from the panel and needs a setting switched on in the Developer Portal. In the Discord Developer Portal, open the app's Bot tab and turn on Message Content Intent under Privileged Gateway Intents. Without it Discord sends messages with no text. In Flytower, open System, Integrations. Under Chat from Discord on the Discord app card, press Add the bot to a Discord server and pick your server. Unlike the commands, this adds the app as a bot; it only asks to see channels. Press Turn on. You're asked for your passkey. The badge shows Connected once Discord has accepted the connection. For each server, open Settings, Community, Discord chat, switch on Chat from Discord and press Save. Messages from the channel the server's chat webhook posts to are then shown in game. Flytower asks Discord which channel that is, so there's nothing to copy. The name shown is the person's nickname in your Discord server, or their display name. Only what people type comes through: bots, webhooks (including Flytower's own chat posts, so nothing echoes back) and Discord's own messages like joins and pins are left out. A message that's only a picture, file or sticker shows as [sent an image] and so on. Messages are plain text in game. Mentions show as @name, channels as #channel, roles as @role and custom emoji as :name:; Markdown is taken out and spoilers show as [spoiler]. Line breaks become spaces, Minecraft formatting codes are removed, and anything over 256 characters is cut. The text is sent with tellraw as JSON built by the panel, so nothing typed can run a command or add a click action. Messages also show in the server's console in the panel. Messages only go to servers that are running, one at a time and in order. If Discord sends more than 20 at once for one server, the rest are dropped rather than queued up.",{"id":390,"title":391,"titles":392,"content":393,"level":61},"\u002Fdocs\u002Fdiscord#if-the-connection-drops","If the connection drops",[48,386],"The connection heartbeats as Discord asks. When it drops, or Discord stops answering, the card shows Reconnecting and the panel connects again, resuming where it left off so no messages are missed. It waits a little longer after each failed attempt, up to a minute. It stops, with Stopped and Discord's reason, when trying again can't help: most often because Message Content Intent is off, or the bot token was reset. Fix that, then press Connect again. Disconnecting the app closes the connection; connecting one again reopens it if chat from Discord is still on. A server's Discord chat card says when chat from Discord is switched on there but can't work yet: when it's off for the whole panel, the connection has stopped, or the bot isn't in that channel's Discord server. Turning chat from Discord on and off is in Activity, as is switching it on or off for a server.",{"id":395,"title":396,"titles":397,"content":398,"level":66},"\u002Fdocs\u002Fdiscord#how-its-kept-safe","How it's kept safe",[48],"Every request to the endpoint must carry Discord's Ed25519 signature, made with the app's private key and checked against its public key before anything else happens. Requests with a missing or wrong signature, or a timestamp more than five minutes off, get a 401. The bot token and each server's chat webhook are encrypted with keys derived from the panel's own secret, like notification and off-site storage secrets. Connecting and disconnecting need Manage integrations and a passkey check, and both are in Activity. So does turning on chat from Discord. Chat from Discord asks Discord for as little as it can: the list of Discord servers the bot is in, and messages in the channels it can see. The bot only has permission to see channels.",{"id":54,"title":53,"titles":400,"content":401,"level":14},[],"A full disk is one of the few things that can corrupt a Minecraft world: if the server can't finish writing a save, the region file it was writing can be left half done. Flytower shows where the space has gone and warns you well before it runs out.",{"id":403,"title":53,"titles":404,"content":401,"level":14},"\u002Fdocs\u002Fdisk#disk-space",[],{"id":406,"title":407,"titles":408,"content":409,"level":66},"\u002Fdocs\u002Fdisk#where-the-space-has-gone","Where the space has gone",[53],"The Disk card, on System, Overview. System, Overview, Disk shows one bar for the disk that holds your servers. Each server has its own colour, then imports and archives, then the rest of the machine in grey, then free space. Hover over a part of the bar to see its size. The table under it lists each server's total and its largest part, with links to its details and its backups. A server's total includes its backups and world exports, since those are kept for it. Under the servers, the rest of the machine is split into parts, in shades of grey so the servers keep their colours: Part What's in it Java runtimes The Java versions Flytower installed for your servers, in \u002Fopt\u002Fflytower\u002Fruntimes Flytower Flytower itself, including the older version kept so you can go back, its settings in \u002Fetc\u002Fflytower and its database System logs The systemd journal and everything else in \u002Fvar\u002Flog Package cache and temp files Packages apt has downloaded (\u002Fvar\u002Fcache\u002Fapt), \u002Ftmp and \u002Fvar\u002Ftmp Operating system and everything else Whatever's left: the operating system, programs you installed yourself, and anything else Flytower doesn't know about Only what's on the same disk as your servers counts. On many machines \u002Ftmp is kept in memory, so it shows as nothing. If Flytower can't measure these (straight after updating from an older version, for example, before the helper has restarted), the rest of the machine shows as one System and other files part, as it used to.",{"id":411,"title":412,"titles":413,"content":414,"level":61},"\u002Fdocs\u002Fdisk#cleaning-up","Cleaning up",[53,407],"Three of the parts have a Clean up button, for people who can manage Flytower: Part What it does System logs Shrinks the systemd journal to the size you pick (100 MB to 1 GB), deleting the oldest entries first. Package cache and temp files Clears apt's cache of downloaded packages. apt downloads them again if they're ever needed. Flytower Removes Flytower versions other than the one running and the one you can go back to, along with the copies of the database kept for them. Each one says how much it should free before you start, asks for your passkey, and is recorded in Activity with how much it freed. The disk is measured again straight after. Nothing is removed from \u002Ftmp, \u002Fvar\u002Ftmp or the rest of \u002Fvar\u002Flog: they belong to other programs. Each server's Settings, Maintenance has a Disk use card that splits the server into: Part What's in it World Every folder starting with world, and the folder named by level-name in server.properties Backups This server's backups, kept in \u002Fvar\u002Flib\u002Fflytower\u002Fbackups\u002F\u003Cname> World exports Zips made with World, Past worlds Logs and crash reports logs and crash-reports Mods, plugins and config mods, plugins and config Web map The server's web map, kept in \u002Fvar\u002Flib\u002Fflytower\u002Fmaps\u002Fservers\u002F\u003Cname> Other Everything else, such as the server jar and its libraries Sizes are what files really take up on the disk. Symbolic links aren't followed, and a file linked twice is counted once.",{"id":416,"title":417,"titles":418,"content":419,"level":66},"\u002Fdocs\u002Fdisk#when-its-measured","When it's measured",[53],"Walking a big world takes a while, so Flytower measures in the background, one server at a time, and pages show the last result. Flytower's system helper does the measuring, so it can read every folder, including ones the panel isn't allowed into. It's measured: straight after anything that changes a server's files: a backup, restore, world reset, world copy, export, import, or applying a spec; every hour, to catch everything else (the world growing as people explore, logs piling up); when you press Measure now on System. The last result is kept, so the figures are there straight away after Flytower restarts. If Flytower can't read some of a server's files (Java's temporary files, for example), the figures say so, since the real total is a little higher. How full the disk is, as a whole, is checked every minute along with the rest of the machine's metrics.",{"id":421,"title":422,"titles":423,"content":424,"level":66},"\u002Fdocs\u002Fdisk#warnings","Warnings",[53],"How full What happens 85% System shows a warning, and a notification goes out if a channel has The disk is nearly full ticked. 95% A red banner shows on every page. Scheduled backups are skipped, a second notification goes out, and Back up now asks before it starts. Below 80% A \"back to normal\" notification goes out. A scheduled backup that's skipped doesn't start at all, so it can't fill the disk halfway through. It shows in the job list as \"Skipped: the disk is 96% full…\", and channels with A backup failed ticked hear about it. Backups carry on as normal once there's room. You can still back up by hand: Flytower warns you first, since the backup itself needs space.",{"id":426,"title":427,"titles":428,"content":429,"level":66},"\u002Fdocs\u002Fdisk#freeing-up-space","Freeing up space",[53],"Old backups and world exports are the usual culprits. Lower how many backups each server keeps (World, Backups, Schedule), or delete old ones. Backups you took yourself are never deleted automatically. Delete world exports you've already downloaded (World, Past worlds). Deleted servers are kept as archives in \u002Fvar\u002Flib\u002Fflytower-archive (before 1.4.1, \u002Fvar\u002Flib\u002Fflytower\u002Farchive; the system helper moves them across) so they can be brought back. Delete the ones you're sure about over SSH. With off-site copies set up, you can keep fewer backups on the machine.",{"id":59,"title":58,"titles":431,"content":432,"level":14},[],"",{"id":434,"title":58,"titles":435,"content":432,"level":14},"\u002Fdocs\u002Ffirst-server#your-first-server",[],{"id":437,"title":438,"titles":439,"content":440,"level":66},"\u002Fdocs\u002Ffirst-server#create-it","Create it",[58],"The New server form. Servers, . Give it a name , which is what players see. The short name below it is used for its folder and can't change later. Pick a loader :\nVanilla: Mojang's server, unchanged. Datapacks only. Fabric: for mods (performance mods like Lithium, or gameplay mods). Datapacks work too. Paper: for plugins (from Modrinth or Hangar), with Paper's own performance improvements. Datapacks work too. Pick the Minecraft version. The newest release is chosen for you; tick Snapshots to see test versions. Choose memory . The slider stops at what the machine has free (see Memory budget below). Leave port empty to use the next free one, starting at 25565. . Flytower installs the right Java, downloads the server, accepts the EULA for you (you agree to it by creating the server), and starts it. Players connect to  ( ). That's your VPS's address, with :port if it isn't 25565. To give each server a name of its own instead, see Addresses and DNS.",{"id":442,"title":443,"titles":444,"content":445,"level":66},"\u002Fdocs\u002Ffirst-server#other-ways-to-start","Other ways to start",[58],"Import server: upload a world (a zip of the world folder) or a whole server folder, from your own computer or another host. Vanilla, Fabric, Paper, Spigot and Purpur servers are recognised. Spigot and Purpur come in as Paper, which reads the same worlds and plugins. server.properties, the whitelist, ops and bans come across. From YAML: paste a server spec, for example one downloaded from another Flytower. Clone (a server's Settings, Maintenance): a copy with the same settings and content, with or without its world. A deleted server: deleting a server archives its folder first, and you can import it back from Import server.",{"id":447,"title":448,"titles":449,"content":450,"level":66},"\u002Fdocs\u002Ffirst-server#the-servers-tabs","The server's tabs",[58],"Tab What it's for Console Live output, and commands (without the \u002F). ,  and  are in the header. View logs opens today's log and older ones to search or download, and Crashes lists recent crashes. Players People: who's online; kick, ban, operators, and the whitelist. Stats: leaderboards and a card for every player (see Stats). Content Mods, plugins and datapacks. See Content. World Backups (taking, restoring, schedule, off-site copies), the Web map, Past worlds and world exports, and Tools: pre-generating chunks, copying another server's world in, and resetting. Files The server folder: edit, upload, rename, delete. Settings General: server.properties, memory, version and loader, address. Community: public page, player stats, Discord chat. Schedules. Maintenance: crashes, disk use, cloning, deleting. Edit as YAML at the bottom: the whole server as one spec. World and Settings list their sections on one page. Click a section's bar to open or close it; the panel remembers which ones you left open. Closed sections show a short summary on their bar, such as whether the public page is on.",{"id":452,"title":453,"titles":454,"content":455,"level":66},"\u002Fdocs\u002Ffirst-server#how-busy-a-server-is","How busy a server is",[58],"On the servers list, each running server's card shows its Tick time, Memory and CPU, with a line of tick time over the last hour. Each figure is marked ● fine, ▲ busy or ■ struggling, and hovering over it says why: Tick: Minecraft aims for 20 ticks a second, so each tick has 50 ms. Over 40 ms is busy; over 50 ms is struggling, and the game slows down for everyone. Memory: busy over 90% of the server's memory limit. Give it more under Settings, General if it stays there. CPU: the server's share of the whole machine. Busy when it has been over 85% for five minutes in a row. Click the figures for the full charts: CPU, memory, players and time per tick over the last hour, day or week.",{"id":457,"title":458,"titles":459,"content":460,"level":66},"\u002Fdocs\u002Ffirst-server#typing-commands-in-the-console","Typing commands in the console",[58],"The console suggests as you type: command names first, then what comes next, such as online players and @a\u002F@p for a player, item and block ids for give and setblock, effects, sounds, game modes and coordinates. A line under the suggestions shows the command's shape, like give \u003Ctargets> \u003Citem> [\u003Ccount>]. Tab fills in the highlighted suggestion; press it again to go through the others, and Shift+Tab to go back. Type a space to move on to the next part. Up and Down move through the suggestions while they're open, and through your earlier commands when they're not. Escape closes them, and → at the end of the line takes the greyed-out suggestion. On a phone, suggestions are a row of buttons above the box. Flytower gets the vanilla commands from the game itself: the first time a console opens for a Minecraft version, it downloads that version's server from Mojang and runs its built-in command report (in the background, at low priority, with the Java the server already uses), then keeps the result. Until that's done, and if it can't be done, you still get the commands from the server's help. Mods' and plugins' commands come from help too, so they complete by name and show their usage; their arguments don't. They're read again each time the server starts. Only people who can send commands get suggestions.",{"id":462,"title":463,"titles":464,"content":465,"level":61},"\u002Fdocs\u002Ffirst-server#talking-to-players","Talking to players",[58,458],"say, me and msg (or tell and w) from the console show under your name rather than the game's \"Rcon\": say hello shows [Server] Your name: hello to everyone, with the tag in your brand colour, and msg Steve hi reaches only Steve as \"Server Your name whispers to you: hi\". The message is plain text, so formatting codes are taken out and @p in it isn't swapped for a name. A scheduled command task shows as [Server] alone. If the server posts game chat to Discord, say and me go there too, under [Server] Your name; whispers don't.",{"id":467,"title":468,"titles":469,"content":470,"level":66},"\u002Fdocs\u002Ffirst-server#how-it-looks-in-the-server-list","How it looks in the server list",[58],"Settings, General, Game settings has the server's entry in Minecraft's multiplayer list. Server icon: Upload a PNG, JPEG or WebP picture (up to 10 MB), drag and zoom to crop it square, and save. Flytower scales it to the 64×64 server-icon.png Minecraft reads, keeping only the image itself (nothing else from the file, such as its metadata). Remove goes back to the default. Clones keep the icon. It isn't part of the spec, since a spec can't carry a picture. Message of the day: two lines, with colours and formatting from the toolbar, or § codes with Show codes. See properties. A preview shows the whole entry as it'll look, and warns when a line is too long. Minecraft reads both when the server starts, so they show after the next restart.",{"id":472,"title":473,"titles":474,"content":475,"level":66},"\u002Fdocs\u002Ffirst-server#plans","Plans",[58],"Anything that changes what a server runs (content, its version or loader, settings in YAML) shows a plan first: what will be added, updated or removed, how much will be downloaded, and whether a restart is needed. Nothing happens until you press Apply. Anything that touches mods or the world takes a backup first.",{"id":477,"title":478,"titles":479,"content":480,"level":66},"\u002Fdocs\u002Ffirst-server#memory-budget","Memory budget",[58],"Each server gets the memory you give it, plus about 0.5 GB that Java uses around it. Flytower keeps 1 GB for the system and itself, and won't let the total go over what the machine has. The Servers and System pages show who has what. If you need more room, lower another server's memory or move to a bigger VPS.",{"id":482,"title":483,"titles":484,"content":485,"level":66},"\u002Fdocs\u002Ffirst-server#dangerous-actions","Dangerous actions",[58],"Restoring a backup, resetting or copying a world, deleting a backup, an export, a past world or a server, opening SSH, adding or removing passkeys, off-site storage changes and updates all ask for your passkey again, unless you confirmed one in the last five minutes.",{"id":64,"title":63,"titles":487,"content":488,"level":14},[],"Flytower installs on a fresh Ubuntu 24.04+ or Debian 12+ server (amd64 or arm64). The installer sets up the panel only. Java and Minecraft are installed later, from the panel, when you create a server.",{"id":490,"title":63,"titles":491,"content":492,"level":14},"\u002Fdocs\u002Finstall#installing-flytower",[],"Flytower installs on a fresh Ubuntu 24.04+ or Debian 12+ server (amd64 or arm64). The installer sets up the panel only. Java and Minecraft are installed later, from the panel, when you create a server. You need: A VPS with at least 4 GB of RAM (8 GB if you want more than one server running). A domain name you can add a DNS record to, for the panel itself (for example panel.example.com). Passkeys only work over HTTPS on a real name, and Flytower gets the certificate for you.",{"id":494,"title":495,"titles":496,"content":497,"level":66},"\u002Fdocs\u002Finstall#option-a-hetzner-cloud-no-ssh-at-all","Option A: Hetzner Cloud, no SSH at all",[63],"Pick a setup token. Any long random string, for example from a password manager. You'll type it into the panel once. In the Hetzner Cloud console, create a server: Image: Ubuntu 24.04 Type: CPX21 or larger (CPX31 for a few servers) Networking: keep a public IPv4 Cloud config: paste this, with your domain and token: #cloud-config\nruncmd:\n  - curl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Flatest\u002Fdownload\u002Finstall.sh | bash -s -- --domain panel.example.com --setup-token YOUR-SETUP-TOKEN\nOnce the server shows its IPv4 address, add a DNS A record for your panel domain pointing at it. If your DNS is on Cloudflare, leave it DNS only (grey cloud). Wait two or three minutes, then open https:\u002F\u002Fpanel.example.com. If the certificate isn't ready yet, give it another minute: Caddy keeps retrying once DNS resolves. Open the setup link the installer prints (or enter the setup token), create your passkey, and save your recovery codes.",{"id":499,"title":500,"titles":501,"content":502,"level":66},"\u002Fdocs\u002Finstall#option-b-an-existing-server-over-ssh","Option B: an existing server over SSH",[63],"curl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Flatest\u002Fdownload\u002Finstall.sh \\\n  | sudo bash -s -- --domain panel.example.com The installer prints a setup link and a setup token at the end. Open the link to go straight to creating your passkey, or open the panel and type the token if the link won't open where you are (on another device, say). Either works once, within 24 hours. Lost them before finishing setup? Run the same command again for new ones. It keeps the version you have.",{"id":504,"title":505,"titles":506,"content":507,"level":66},"\u002Fdocs\u002Finstall#what-the-installer-does","What the installer does",[63],"Unpacks the release (which includes its own Bun runtime) into \u002Fopt\u002Fflytower\u002Freleases\u002F\u003Cversion> and points \u002Fopt\u002Fflytower\u002Fcurrent at it. Creates a flytower system user for the panel. The panel never runs as root; a small root helper (flytower-agent) does the handful of things that need it. Installs Caddy for HTTPS, and opens 80, 443 and your SSH port with ufw. It asks sshd which port SSH uses (22 if it can't tell) and says which it opened. Minecraft ports are opened per server as you create them. Stores data in \u002Fvar\u002Flib\u002Fflytower, configuration in \u002Fetc\u002Fflytower, and servers in \u002Fsrv\u002Fflytower\u002Fservers\u002F\u003Cname>. Running the installer again keeps your data, secret and servers. On a box that already has Flytower, it also keeps the installed version, whichever channel it came from, unless you pass --version, --beta, --native, --pr or --tarball. To update, use System → Updates in the panel (or --version latest for the newest stable release). If the version you pick is older than the one installed, the installer first saves a copy of the panel's database in \u002Fvar\u002Flib\u002Fflytower-agent\u002Fdb-backups\u002F. The installer checks the release's signature before installing anything, and prints \"Release signature checked\" when it matches. Releases before 1.0 are marked as pre-releases on GitHub, so the latest links above skip them. To install one, use the versioned link from its release notes.",{"id":509,"title":510,"titles":511,"content":512,"level":61},"\u002Fdocs\u002Finstall#options","Options",[63,505],"Option Meaning --domain \u003Chost> The panel's address. Required. --version \u003Cx.y.z> Install a specific release. --version latest is the newest stable one. A fresh install defaults to that; a re-run keeps what's installed. --beta Install the newest release, betas included. --native Install the newest native build. For test servers. --setup-token \u003Ctext> Use this setup token instead of generating one. --tarball \u003Cfile> Install from a release tarball already on the machine. Its signature isn't checked, so only use one you trust. --pr \u003Cnumber> Install the signed test build of that pull request. For testing only. --no-caddy Skip Caddy if you run your own HTTPS proxy (point it at 127.0.0.1:3000). --no-firewall Leave ufw alone.",{"id":514,"title":107,"titles":515,"content":516,"level":66},"\u002Fdocs\u002Finstall#troubleshooting",[63],"The page doesn't load: check DNS points at the server (dig +short panel.example.com), and that ports 80 and 443 are allowed in any provider firewall. Logs: journalctl -u flytower-panel -u flytower-agent -n 100, and journalctl -u flytower-mc@\u003Cname> for a server. More in Troubleshooting. Next: your first server. html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"id":69,"title":68,"titles":518,"content":519,"level":14},[],"A server can have a map of its world that opens in the browser. It looks like the game's own maps seen from above, keeps up as players explore and build, and shows where everyone is while you watch.",{"id":521,"title":68,"titles":522,"content":523,"level":14},"\u002Fdocs\u002Fmap#web-map",[],"A server can have a map of its world that opens in the browser. It looks like the game's own maps seen from above, keeps up as players explore and build, and shows where everyone is while you watch. Flytower draws it itself, from the world's files. Nothing is added to the server, so it works the same on vanilla, Fabric and Paper, and the server needs no extra memory or ports.",{"id":525,"title":526,"titles":527,"content":528,"level":66},"\u002Fdocs\u002Fmap#turning-it-on","Turning it on",[68],"On the server's World tab, Web map, switch on Draw a web map. Flytower draws the whole world straight away, then keeps it up to date. You can also set it in the YAML with map: { enabled: true }. Web map, on a server's World tab. Turning it off stops drawing and deletes the map's files. Turning it back on draws everything again.",{"id":530,"title":531,"titles":532,"content":533,"level":66},"\u002Fdocs\u002Fmap#how-it-keeps-up","How it keeps up",[68],"Minecraft saves the world every few minutes, and whenever the server stops. Flytower notices each save as it happens (it doesn't keep checking) and, once saving has been quiet for half a minute, draws just the parts of the world that changed. A busy server is redrawn at least every five minutes. Draw now on the card draws what's changed without waiting. Redraw everything draws the whole world again, which is only needed if something looks wrong. When the world is reset, copied from another server or restored from a backup, the next drawing notices that every region file is new and draws the new world, and parts of the old one that aren't in the new world disappear. The card shows how drawing is going, as it happens: when the map was last drawn, how much changed, and how long it took. If any chunks couldn't be read (a damaged region file, say), it says how many and why, and draws the rest.",{"id":535,"title":536,"titles":537,"content":538,"level":61},"\u002Fdocs\u002Fmap#colours","Colours",[68,531],"The colours come from the game itself: the first time a server on a new Minecraft version is drawn, Flytower downloads that version's game files from Mojang, checks them against Mojang's published checksum, works out a colour for every block and biome, and deletes the download. Nothing in it is ever run. If that download fails, the map is drawn with simpler built-in colours, the card says so, and the next drawing tries again.",{"id":540,"title":541,"titles":542,"content":543,"level":66},"\u002Fdocs\u002Fmap#opening-it","Opening it",[68],"Once the map has been drawn, the card has an Open map button. The map is at: https:\u002F\u002F\u003Cyour panel>\u002Fs\u002F\u003Cserver name>\u002Fmap\u002F https:\u002F\u002F\u003Chostname>\u002Fmap\u002F too, when the server has its own hostname and its public page is on. On the map: Drag to move around. Scroll, pinch, double-click (Shift to zoom out) or use + and − to zoom. Pick the Overworld, Nether or End at the top. The Nether is drawn below its roof. The coordinates under the pointer are at the bottom left. Players online in this dimension show with their heads. The list at the bottom right jumps to each one. The address keeps where you're looking, so you can send someone a link to a spot. An open map checks for newly drawn parts every minute, and player positions every few seconds.",{"id":545,"title":546,"titles":547,"content":548,"level":66},"\u002Fdocs\u002Fmap#who-can-see-it","Who can see it",[68],"Show players: where each online player is. Flytower asks the server with the game's own data command, only while someone has the map open, and at most every three seconds however many people are looking. Someone who opens the map without signing in only sees players when the public page shows player names; with it set to show how many are on, or nothing, the public map shows no players either. Anyone can open it: lets people open the map without signing in, and links it from the public page and \u002Fstatus in Discord. This needs the public page on. Off (the default), only people who can see the server in the panel can open it. When the map is public, the card shows its address to share, with a copy button. Someone who isn't signed in and opens a map that isn't public is sent to sign in. Anyone who can't see the server, or opens a map that's off, gets \"Not found\", exactly as for a server that doesn't exist. Player heads come from the panel's own copy of their skins, never from another site. The map page loads nothing from anywhere else, and a public map never sets a cookie.",{"id":550,"title":551,"titles":552,"content":553,"level":66},"\u002Fdocs\u002Fmap#what-it-costs","What it costs",[68],"CPU: drawing runs at the lowest priority, so the Minecraft servers always come first. Each server's map is drawn one pass at a time, and at most two servers' maps at once, so one huge world doesn't hold up the others. A pass that makes no progress for ten minutes is stopped and shows as failed on the card; the next save tries again. A 512×512-block region takes well under a second; after the first drawing, only changed regions are drawn. Memory: about 20 MB while drawing, and nothing in between. Disk: one image per 512×512 blocks of explored world, plus zoomed-out copies. The server's Disk use card shows it on its own line, Web map. The files are in \u002Fvar\u002Flib\u002Fflytower\u002Fmaps, not in the server's folder, so they're never in backups. Ports: none. The panel serves the map itself.",{"id":74,"title":73,"titles":555,"content":556,"level":14},[],"Flytower can tell you when something needs attention, so you don't have to watch the panel. It sends to a Discord channel, to your phone through ntfy, or to anything else as a signed JSON webhook.",{"id":558,"title":73,"titles":559,"content":560,"level":14},"\u002Fdocs\u002Fnotifications#notifications",[],"Flytower can tell you when something needs attention, so you don't have to watch the panel. It sends to a Discord channel, to your phone through ntfy, or to anything else as a signed JSON webhook. Set them up on System, Notifications. Each place Flytower sends to is a channel. You can have as many as you like, each with its own events and servers: for example, problems to an admins' Discord channel and joins to a public one. The notification channels, on System, Notifications.",{"id":562,"title":563,"titles":564,"content":565,"level":66},"\u002Fdocs\u002Fnotifications#what-you-can-hear-about","What you can hear about",[73],"Group Event When Problems A server crashed As it happens (Flytower follows systemd), with the cause. \"Back up\" follows once it's running. Problems A server kept crashing and was left stopped After three crashes in ten minutes. See Crashes. Problems A server stopped responding Its console hasn't answered for five minutes. \"Responding again\" follows when it does. Problems A backup failed A manual or scheduled backup fails. A \"working again\" message follows the next good backup. Problems Copying a backup off-site failed An off-site copy fails twice in a row (one blip that the retry fixes stays quiet), and when it works again. Problems A scheduled restart, command or announcement failed It failed, or was skipped because a backup or change ran for ten minutes. See Scheduled tasks. Problems The disk is nearly full Once at 85%, once more at 95%, and \"back to normal\" when it drops below 80%. Updates A new version of Flytower is out Once per new version on your update channel (betas only on Beta). Flytower checks every six hours. Updates Updates for installed mods, plugins or datapacks Once per server per new set of updates, from the same check as the Content tab. Activity A server started or stopped The moment players can join, and the moment it starts shutting down, however it happened. Activity A server restarted from the panel \"Restarting\" when you press Restart, then \"Restarted\" once players can join again. Activity A player joined or left The moment it happens. New channels start with the problems and updates ticked, and the activity left off. Channels made before crash alerts and scheduled-task alerts existed get them ticked if they already had any problem ticked. How activity is noticed. Flytower reads each server's own log (logs\u002Flatest.log) and Linux tells it the moment a line is written, so nothing is checked on a timer and no mod or plugin is needed. \"Server started\" means the log said Done (…)! For help, type \"help\", which is when players can actually join. \"Server stopping\" means it said Stopping the server. A restart from the panel sends \"Restarting\" and \"Restarted\" instead of a stop and a start. Chat can't fake any of these: a player typing \"Steve joined the game\" doesn't count. Crashes come from systemd's journal instead, since a crashed server may not get to write anything; see Crashes. Quiet periods. The same problem on the same server is sent at most once every 30 minutes (ten for crashes), so a backup that fails every hour doesn't flood the channel. Once a problem has cleared, the next one is sent straight away. Updates are sent once per version. Activity isn't held back. Servers. Leave Servers empty to hear about every server, including ones you create later, or pick some. Machine-wide events (the disk, Flytower updates) go to every channel that has them ticked.",{"id":567,"title":568,"titles":569,"content":570,"level":66},"\u002Fdocs\u002Fnotifications#discord","Discord",[73],"In Discord, open the channel's settings (the cog), then Integrations, Webhooks, New Webhook. Name it (Flytower sends as \"Flytower\" anyway) and Copy Webhook URL. In Flytower: Add channel, Send to Discord, paste the URL, tick what you want, Send test, then Add. Messages are embeds coloured by how serious they are (red for problems, amber for warnings, blue for news, green for \"back to normal\"). The title links back to the right page of the panel. Player names can't ping anyone: Flytower turns off mentions on every message.",{"id":572,"title":573,"titles":574,"content":575,"level":66},"\u002Fdocs\u002Fnotifications#ntfy-phone-push","ntfy (phone push)",[73],"ntfy sends push notifications to its phone app with no account needed. Install the ntfy app and subscribe to a topic. On the public ntfy.sh server, anyone who knows a topic's name can read it, so make it long and hard to guess, like flytower-7f3k2q9x. In Flytower: Add channel, Send to ntfy, and enter https:\u002F\u002Fntfy.sh\u002Fyour-topic. If you run your own ntfy server with access control, put an access token in Access token. Problems arrive as high or urgent priority, and tapping one opens the panel.",{"id":577,"title":578,"titles":579,"content":580,"level":66},"\u002Fdocs\u002Fnotifications#json-webhook","JSON webhook",[73],"For anything else (Slack through a workflow, Home Assistant, your own script), Flytower POSTs each event as JSON: {\n  \"version\": 1,\n  \"id\": \"8d2babc4-494b-4b97-b835-a6b70a3da5b2\",\n  \"kind\": \"backup.failed\",\n  \"severity\": \"critical\",\n  \"title\": \"A scheduled backup failed\",\n  \"detail\": \"Not enough disk space: this needs up to 2.1 GB and only 1.4 GB is free.\",\n  \"server\": { \"name\": \"survival\", \"displayName\": \"Survival\" },\n  \"link\": \"https:\u002F\u002Fpanel.example.com\u002Fservers\u002Fsurvival\u002Fbackups\",\n  \"at\": \"2026-11-10T03:00:12.512Z\"\n} kind is one of backup.failed, offsite.failed, disk.full, update.flytower, update.content, server.started, server.stopped, server.restarted, player.joined, player.left or test. severity is critical, warning, info or ok (\"back to normal\"). server is null for machine-wide events. Headers: X-Flytower-Event (the kind), X-Flytower-Delivery (the id, the same across retries) and, if you set a signing secret, X-Flytower-Signature. Checking the signature. Use Generate for a secret, and keep a copy for your receiver. The signature is sha256= followed by the hex HMAC-SHA256 of the exact request body, keyed with the secret. Compare it in constant time before trusting the body. In Bun: import { timingSafeEqual } from 'node:crypto'\n\nconst body = await req.text()\nconst mac = new Bun.CryptoHasher('sha256', secret).update(body).digest('hex')\nconst expected = Buffer.from(`sha256=${mac}`)\nconst given = Buffer.from(req.headers.get('x-flytower-signature') ?? '')\nconst ok = given.length === expected.length && timingSafeEqual(given, expected) Answer with any 2xx status. Anything else counts as a failed delivery.",{"id":582,"title":583,"titles":584,"content":585,"level":66},"\u002Fdocs\u002Fnotifications#when-delivery-fails","When delivery fails",[73],"Flytower tries each message four times over about two and a half minutes. If Discord says to slow down, it waits as long as Discord asks. An address that says it doesn't exist (404) or refuses the token (401, 403) isn't retried. A channel whose last delivery failed shows the error in red under it on System, Notifications, until a message gets through. The error is also in the panel's log (journalctl -u flytower-panel). A failed notification never sets off another one.",{"id":587,"title":588,"titles":589,"content":590,"level":66},"\u002Fdocs\u002Fnotifications#security","Security",[73],"Adding, changing and removing channels asks for your passkey, because they send information off the machine. Each change is in Activity. The address and any token or secret are stored encrypted, like off-site storage keys, and never sent back to the browser. The list shows a masked version (for example discord.com\u002Fapi\u002Fwebhooks\u002F1234…\u002F••••) so you can tell channels apart. To change the address, type the new one in; leaving it blank keeps the saved one. Messages say what happened and on which server, never passwords or file contents. Player names do appear in join and leave messages. html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"id":79,"title":78,"titles":592,"content":593,"level":14},[],"Flytower can have more than one person signing in. Each person has one or more roles, each for one server or for all of them. Roles add up: someone can be an Operator on every server and an Admin on one.",{"id":595,"title":78,"titles":596,"content":593,"level":14},"\u002Fdocs\u002Fpeople#people-and-roles",[],{"id":598,"title":599,"titles":600,"content":601,"level":66},"\u002Fdocs\u002Fpeople#roles","Roles",[78],"Role Can Owner Everything, including people, Flytower updates, SSH, notifications, off-site storage and branding. There's always at least one Owner. Admin Everything on their servers: settings, files, content, backups and downloads, worlds, schedules, and deleting the server. On all servers, can also create new servers. Operator Start, stop and restart, the console and logs, players (whitelist, operators, bans) and taking backups. Viewer The server's status, settings and who's online. Not the console or logs, since they show players' IP addresses. Dangerous actions (deleting, restoring, resetting a world, opening SSH and so on) still ask for a passkey, whatever the role.",{"id":603,"title":604,"titles":605,"content":606,"level":66},"\u002Fdocs\u002Fpeople#custom-roles","Custom roles",[78],"On Access, the Roles tab lists every role, and  makes your own, such as a Moderator who can read the console and manage players but not start or stop the server. Tick what it can do. Anything done on a server includes seeing it, and some permissions bring others along: sending console commands includes reading the console, changing files includes reading them, and Edit the YAML includes every kind of setting. The permissions under Across Flytower (creating servers, inviting and managing people, roles, updates, notifications, integrations, branding, SSH and all activity) only count when the role is given for all servers. A server's settings are split so a role can cover just part of them: Change settings (properties, MOTD, icon, memory, recovery, address, time zone), Manage content (mods, plugins, datapacks, game version), Manage schedules, Change backup settings, and Manage community features (public page, stats, Discord chat, web map). The YAML tab can change everything at once, so it needs Edit the YAML; a change made anywhere else only needs the permission for the part it touches. The editor groups permissions by area, and All ticks a whole area. Permissions that come with one you've ticked are ticked and locked, with what brings them. Ones you don't have yourself are switched off, since you can't hand them out. Permissions that amount to full control (console commands, changing files or content, the YAML, managing people or roles, updates and SSH) are marked Powerful, with a line on why. Every role, built-in ones included, has a copy button. New role can also Start from any role. A copy only keeps the permissions you have yourself. Under each role you can see how many people have it and where. On People, the checklist button shows what someone can do: everything their roles add up to, on all servers, on single servers, and across Flytower. Changing a role changes it for everyone who has it, straight away. A role can be deleted once nobody has it, and its unused invite links are cancelled. Built-in roles can't be changed (copy one instead), and you can't make a role that can do more than you can. Activity says which permissions a change added or removed, and which roles someone was given or lost.",{"id":608,"title":609,"titles":610,"content":611,"level":66},"\u002Fdocs\u002Fpeople#what-people-see","What people see",[78],"People only see the servers they've been given. On a server, tabs they can't use are hidden: without the console permission a server opens on its players, and Files only shows with the files permission. Where they can look but not change things (settings, content, players, backups, schedules, world), the tab says View only and its buttons are off. Start, stop and restart only show for people who can use them, as do New server and the System pages for updates, storage, notifications, branding and SSH. If someone's access changes while they have the panel open, it updates when they come back to the tab.",{"id":613,"title":614,"titles":615,"content":616,"level":66},"\u002Fdocs\u002Fpeople#inviting-someone","Inviting someone",[78],"Access, People: everyone who can sign in, and invite links not used yet. Go to Access in the sidebar. On the People tab, choose . Pick a role and a server (or all servers). A note for who it's for is optional and only shown to you. Copy the link and send it to them. It works once, for 7 days, and is only shown once. When they open it, they choose a name, create a passkey and save their recovery codes, the same steps as first-time setup. Until they do, the link shows under Invite links not used yet, where you can cancel it. You can only give someone access you have yourself.",{"id":618,"title":619,"titles":620,"content":621,"level":66},"\u002Fdocs\u002Fpeople#changing-or-removing-someone","Changing or removing someone",[78],"On Access, People, choose the pencil to change someone's roles, or the remove button to take them off. Both ask for your passkey and apply straight away: a removed person is signed out on their next click and their passkeys stop working. The last Owner can't be removed or given a smaller role. Make someone else an Owner first. Everything here is recorded under Activity, in Sign-ins and access.",{"id":623,"title":624,"titles":625,"content":626,"level":66},"\u002Fdocs\u002Fpeople#one-servers-access","One server's access",[78],"A server's Settings has an Access section for people who manage people, or who have Manage who has access on that server. It lists everyone who can reach the server: roles they have on it, and roles they have on all servers (those are changed on Access). From there you can change someone's roles on this server, add someone who isn't on it yet, and make or cancel invite links for it. Manage who has access suits someone who runs one server, like an event server, and brings in their own helpers. They can only give roles they could have on that server themselves, and can't touch other servers or anyone's roles for all servers. Admin doesn't include it; give it with a custom role. Changes are in the server's Activity.",{"id":84,"title":83,"titles":628,"content":629,"level":14},[],"Each server can run things by itself on a schedule: a restart with a countdown in-game, a console command, or an announcement in everyone's chat. For example, restart at 5am every day, warning players 15, 5 and 1 minutes and 10 seconds beforehand.",{"id":631,"title":83,"titles":632,"content":633,"level":14},"\u002Fdocs\u002Fschedules#scheduled-tasks",[],"Each server can run things by itself on a schedule: a restart with a countdown in-game, a console command, or an announcement in everyone's chat. For example, restart at 5am every day, warning players 15, 5 and 1 minutes and 10 seconds beforehand. Set them under the server's Settings, , or under schedules in its YAML. Both are the same list.",{"id":635,"title":636,"titles":637,"content":638,"level":66},"\u002Fdocs\u002Fschedules#adding-a-task","Adding a task",[83],"The Schedules section of a server's Settings, with a daily restart and an hourly save. Press  and choose what it does: Restart: warns anyone online, saves the world, then restarts the server. Command: runs a console command, such as save-all or whitelist reload. Write it without the slash. Its reply is kept, and shows when you point at the task's last result. Announcement: shows a line of text in everyone's chat, in gold (or your brand colour). Then choose when: every day at a time, every week on a day, every hour, every few minutes, or a cron expression for anything else. Cron has five parts: minute, hour, day of the month, month, and day of the week. 0 5 * * * is 05:00 every day, and 30 3 * * 1-5 is 03:30 on weekdays. The form shows the next three times it would run. Every task on the list shows when it runs next, and when it last ran and how that went.  runs it straight away. The list updates by itself while a task runs.",{"id":640,"title":641,"titles":642,"content":643,"level":66},"\u002Fdocs\u002Fschedules#time-zone","Time zone",[83],"Tasks run in the server's time zone, set at the bottom of Settings, Schedules (or timezone in the YAML). It starts as UTC, so set it to where your players are, such as Europe\u002FLondon. Clocks changing for summer time are handled: 05:00 stays 05:00. Backups keep their own time zone, set under World, Backups.",{"id":645,"title":646,"titles":647,"content":648,"level":66},"\u002Fdocs\u002Fschedules#restarts","Restarts",[83],"A restart set for 05:00 starts its countdown at the first warning, so with the usual warnings it begins at 04:45 and restarts at 05:00: Players see \"Server restarting in 15 minutes\" in chat, then again at each warning. The last 10 seconds also show as a title in the middle of the screen. The world is saved (save-all flush). The server restarts the same way as the Restart button. It isn't counted as a crash, and if a channel has A server restarted from the panel ticked, the restart is announced there. The task records how long the restart took, such as \"Restarted in 41s (4 warnings)\". The warnings are up to you: any of 10s, 1m, 15m, 1h and so on, up to two hours, or none at all. Restart straight away when nobody is online (on by default) skips the countdown if the server is empty when the countdown would start. The restart then happens at once, up to the first warning early, which saves keeping an empty server waiting. While a restart counts down, its Run now button becomes Call off. Calling it off tells anyone who was warned that the restart isn't happening, and the task's result says it was cancelled. Run now on a restart asks first, and starts the countdown from the moment you confirm.",{"id":650,"title":651,"titles":652,"content":653,"level":66},"\u002Fdocs\u002Fschedules#when-a-task-cant-run","When a task can't run",[83],"The server isn't running: the task is skipped, and its result says so. No notification is sent. A backup, restore or change is running on the server: the task waits until it's finished, for up to ten minutes. If it's still going after that, the task is skipped, its result says why, and a notification is sent. A restart's countdown doesn't hold the server up: a backup due during the warnings still runs, and the restart waits for it to finish before saving and restarting. The server is stopped during a restart's countdown: the restart is called off rather than starting the server again, and its result says so. The task is changed or deleted during its countdown (or its server is deleted): the countdown is called off, and anyone who was warned hears that the restart isn't happening. It fails: for example, the console doesn't answer, or the server doesn't come back after a restart. The task's result says what went wrong, and a A scheduled restart, command or announcement failed notification is sent. The next run that works sends \"Scheduled tasks are working again\". Every run is in Activity: credited to Flytower when it ran on its schedule, or to you when you pressed Run now.",{"id":655,"title":656,"titles":657,"content":658,"level":66},"\u002Fdocs\u002Fschedules#things-a-task-cant-do","Things a task can't do",[83],"A command can't be stop. To systemd, a server that stops by itself looks like a crash, so it would be started again (and counted as a crash). Use a restart task instead. A command is one line, and an announcement is at most 256 characters. A task waits for a backup, restore or change on its server, and for a restart that is saving and restarting, for up to ten minutes as above. A command or announcement due during a restart's warnings runs straight away.",{"id":89,"title":88,"titles":660,"content":661,"level":14},[],"Press ? on any page to see these in the panel. They never fire while you're typing in a field, the console or an editor, and they never replace the browser's own Ctrl (⌘ on a Mac) keys.",{"id":663,"title":88,"titles":664,"content":661,"level":14},"\u002Fdocs\u002Fshortcuts#keyboard-shortcuts",[],{"id":666,"title":667,"titles":668,"content":669,"level":66},"\u002Fdocs\u002Fshortcuts#anywhere","Anywhere",[88],"Keys Does Ctrl + K Search servers, pages and actions ? List the shortcuts \u002F Focus the page's search, or the console's command line Ctrl + S Save on Settings or in the file editor; on YAML, review your changes Escape Close the open dialog, menu or editor",{"id":671,"title":672,"titles":673,"content":674,"level":66},"\u002Fdocs\u002Fshortcuts#go-to-press-g-then-a-letter","Go to (press G, then a letter)",[88],"Keys Goes to G S Servers G A Activity G Y System On a server page these go to a part of that server: Keys Goes to G C Console G L, or just L Logs G P Players G B Backups (on World) G N Content G W World G F Files G T Settings G M YAML and The same tab on the previous or next server",{"id":676,"title":677,"titles":678,"content":679,"level":66},"\u002Fdocs\u002Fshortcuts#lists-and-cards","Lists and cards",[88],"On the server cards and the rows of Files, Backups and Content: Keys Does J and K, or ↓ and ↑ Move to the next or previous row Enter Open the row (a file opens in the editor, a card opens its server) . or Shift + F10 Open the row's menu, as a right-click would Shift + Delete Delete the row, with the usual confirm Starting, restarting and stopping a server have no single key on purpose, so a stray key press can't stop it. Use the buttons, the row's menu or Ctrl + K.",{"id":681,"title":682,"titles":683,"content":684,"level":66},"\u002Fdocs\u002Fshortcuts#turning-them-off","Turning them off",[88],"Single-key shortcuts (the letters, ?, \u002F, ** and **) can be turned off for one browser under This browser on Your account, for example if you use voice control or a screen reader that sends keys. Ctrl + K and Ctrl + S keep working.",{"id":94,"title":93,"titles":686,"content":687,"level":14},[],"Every server can be written as one YAML document, its spec. Settings, YAML shows a server's spec and lets you edit it. New server, From YAML makes a server from one. Changes go through a plan like any other.",{"id":689,"title":93,"titles":690,"content":691,"level":14},"\u002Fdocs\u002Fspec#server-yaml-reference",[],"Every server can be written as one YAML document, its spec. Settings, YAML shows a server's spec and lets you edit it. New server, From YAML makes a server from one. Changes go through a plan like any other. The first line points editors at the schema (\u002Fschema\u002Fserver-v1.json on your panel). In VS Code with the YAML extension, that gives you autocomplete and checking.",{"id":693,"title":694,"titles":695,"content":696,"level":66},"\u002Fdocs\u002Fspec#example","Example",[93],"# yaml-language-server: $schema=https:\u002F\u002Fpanel.example.com\u002Fschema\u002Fserver-v1.json\nname: survival\ndisplayName: Weekend Survival\nloader:\n  type: fabric\n  minecraft: '26.3'\nmemory: 6G\nport: 25566\nhostname: survival.example.com\nproperties:\n  motd: Welcome back\n  difficulty: normal\n  max-players: 30\n  view-distance: 12\ncontent:\n  - modrinth: lithium\n  - modrinth: chunky\n  - vanillatweaks: Survival\u002Fmultiplayer sleep\n  - url: https:\u002F\u002Fexample.com\u002Fmy-datapack.zip\n    sha256: 0f343b0931126a20f133d67c2b018a3b5f0c6d0e7c5c1f2a2b1e5c8d9f7a6b5c\n    kind: datapack\nbackups:\n  schedule: '0 4 * * *'\n  timezone: Europe\u002FLondon\n  keep: { last: 6, daily: 7, weekly: 4 }\n  offsite: B2\ntimezone: Europe\u002FLondon\nschedules:\n  - restart: '0 5 * * *'\n  - command: save-all\n    cron: '*\u002F30 * * * *'\n  - announce: 'The server restarts at 5am'\n    cron: '0 22 * * *'",{"id":698,"title":699,"titles":700,"content":432,"level":66},"\u002Fdocs\u002Fspec#fields","Fields",[93],{"id":702,"title":703,"titles":704,"content":705,"level":61},"\u002Fdocs\u002Fspec#name-required","name (required)",[93,699],"The short name, used for the server's folder, user and unit. Lowercase letters, digits and hyphens, 2 to 31 characters, starting with a letter. It can't change once the server exists.",{"id":707,"title":708,"titles":709,"content":710,"level":61},"\u002Fdocs\u002Fspec#displayname","displayName",[93,699],"What players and you see. Defaults to the name.",{"id":712,"title":713,"titles":714,"content":715,"level":61},"\u002Fdocs\u002Fspec#loader-required","loader (required)",[93,699],"Field Meaning type vanilla, fabric or paper. minecraft The Minecraft version, in quotes (unquoted, YAML reads 1.20 as the number 1.2). version The Fabric loader version or Paper build number. Leave it out for the newest stable one when the plan runs. Changing the version or loader goes through a plan that takes a backup first. Going back to an older Minecraft version is refused, because worlds can't be downgraded. Restore a backup instead.",{"id":717,"title":718,"titles":719,"content":720,"level":61},"\u002Fdocs\u002Fspec#memory","memory",[93,699],"Memory for Java, like 4G or 3584M, between 1G and 64G. It must fit the machine's memory budget.",{"id":722,"title":723,"titles":724,"content":725,"level":61},"\u002Fdocs\u002Fspec#port","port",[93,699],"The game port, 1024 to 65535. Leave it out to use the next free one. Clashes with other servers are refused.",{"id":727,"title":728,"titles":729,"content":730,"level":61},"\u002Fdocs\u002Fspec#hostname","hostname",[93,699],"The address players use, such as survival.example.com. null clears it; left out, it stays as it is. See Addresses and DNS.",{"id":732,"title":733,"titles":734,"content":735,"level":61},"\u002Fdocs\u002Fspec#properties","properties",[93,699],"Values for server.properties: strings, numbers or booleans. Anything left out keeps its current value. Values equal to Minecraft's defaults are left out when Flytower writes a spec. Some keys can't be set here: server-port, enable-rcon and rcon.port are managed by Flytower. Set the port with port. Secrets are hidden: rcon.password, management-server-secret, and any other key ending in secret or password (such as -secret or .password). They're never written into a spec or shown in the Settings form, and editing other properties or applying a spec keeps whatever secret is on disk. A cloned server gets fresh secrets of its own. To change one by hand, edit server.properties in the Files tab. motd is the message of the day, shown under the server in the multiplayer list. It can have two lines and Minecraft's § formatting codes: colours §0 to §f, §l bold, §o italic, §n underline, §m strikethrough, §k obfuscated and §r to reset. In YAML, use double quotes so \\n starts the second line: properties:\n  motd: \"§6§lNew Theatre §r§7Survival\\n§bOpen to members\" The editor in Settings, General, Game settings writes the same string, so you rarely need to type codes by hand. Hex colours aren't supported, because vanilla only reads the 16 colours from server.properties.",{"id":737,"title":738,"titles":739,"content":740,"level":61},"\u002Fdocs\u002Fspec#content","content",[93,699],"The full list of what the server runs. Anything installed through Flytower that isn't listed is removed. Dependencies don't need listing. Each item is one of: Item Fields Modrinth modrinth: project slug or id. version: a version number or id (newest compatible if left out). kind: mod, plugin or datapack, rarely needed. Hangar hangar: slug or owner\u002Fslug (Paper only). version: a version name (newest compatible if left out). Vanilla Tweaks vanillatweaks: \"Category\u002Fpack name\", as on their site. tweak: crafting for a crafting tweak; datapack otherwise. A link url: an https link. sha256: the file's hash; it's refused if it doesn't match. kind: mod, plugin or datapack. filename: optional. See Mods, plugins and datapacks.",{"id":742,"title":743,"titles":744,"content":745,"level":61},"\u002Fdocs\u002Fspec#backups","backups",[93,699],"Left out entirely, a server's backup settings stay as they are. When present: Field Meaning schedule A cron expression (minute hour day month weekday), such as '0 4 * * *' for 4am daily, or null for no schedule. timezone The time zone the schedule runs in, such as Europe\u002FLondon. Defaults to UTC. keep last (default 6), daily (7) and weekly (4): how many scheduled backups to keep. See Backups. offsite The name of off-site storage from System, Off-site storage, or null for none. Left out, it stays.",{"id":747,"title":748,"titles":749,"content":750,"level":61},"\u002Fdocs\u002Fspec#recovery","recovery",[93,699],"What Flytower does when the server gets stuck. Left out, the current setting stays. Field Meaning restartWhenUnresponsive true to restart the server once when its console hasn't answered for five minutes. Defaults to false. See Crashes.",{"id":752,"title":753,"titles":754,"content":755,"level":61},"\u002Fdocs\u002Fspec#public","public",[93,699],"The server's public status page. Left out, the current settings stay. Field Meaning enabled true to turn the page on at \u002Fs\u002F\u003Cname>. Defaults to false. description A few lines about the server, up to 500 characters, shown as plain text with line breaks. show.players count (the default) shows how many are online, names shows their heads and names, none shows nothing. show.version false to hide the Minecraft version and loader. Defaults to true. show.leaderboard true to show the player stats leaderboards. Needs show.players: names and stats on. Defaults to false. pack.enabled false to stop offering the players' modpack. Defaults to true; Fabric only. pack.extras Client-only extras for the modpack: a list of modrinth: \u003Cslug>, each with an optional exact version. public:\n  enabled: true\n  description: |\n    Survival for New Theatre members.\n    Season 3 started in September.\n  show:\n    players: names\n  pack:\n    extras:\n      - modrinth: iris\n      - modrinth: complementary-reimagined",{"id":757,"title":758,"titles":759,"content":760,"level":61},"\u002Fdocs\u002Fspec#map","map",[93,699],"The server's web map. Left out, the current settings stay. Field Meaning enabled true to draw a web map of the world. Defaults to false. public true to let anyone open the map without signing in. Needs the public page on. Defaults to false: only people who can see the server can. players false to hide where players are. Defaults to true. map:\n  enabled: true\n  public: true",{"id":762,"title":763,"titles":764,"content":765,"level":61},"\u002Fdocs\u002Fspec#timezone","timezone",[93,699],"The time zone the server's scheduled tasks run in, such as Europe\u002FLondon. Left out, it stays (UTC to begin with). Backups have their own, under backups.",{"id":767,"title":768,"titles":769,"content":770,"level":61},"\u002Fdocs\u002Fspec#schedules","schedules",[93,699],"Restarts, console commands and announcements the server runs by itself. See Scheduled tasks. When present, the whole list is replaced (tasks that haven't changed keep their last run). Left out, the current tasks stay; write schedules: [] to remove them all. Each item is one of: Item Meaning restart: '0 5 * * *' Restart at these times. warn lists when to warn players beforehand, like [15m, 5m, 1m, 10s] (the default), up to 2h; [] for none. skipWarningsWhenEmpty (default true) restarts straight away when nobody is online. command: save-all cron: '*\u002F30 * * * *' Run a console command, without the slash. It can't be stop; use a restart instead. announce: 'Restart at 5am' cron: '0 22 * * *' Show a line in everyone's chat, in gold or the brand colour. At most 256 characters. Applying changed schedules never restarts the server. The plan lists tasks added and removed under Schedules.",{"id":772,"title":773,"titles":774,"content":775,"level":66},"\u002Fdocs\u002Fspec#errors","Errors",[93],"Mistakes are marked on their line with a message saying what's wrong, and you can't apply until they're fixed. Problems the plan finds (a port in use, a mod with no build for your version, not enough memory) are listed in the plan, and stop it from applying. html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}",{"id":99,"title":98,"titles":777,"content":778,"level":14},[],"Each server's Players tab has a Stats view with leaderboards and a card for every player. Anyone who can see the server in the panel can see it.",{"id":780,"title":98,"titles":781,"content":778,"level":14},"\u002Fdocs\u002Fstats#player-stats",[],{"id":783,"title":784,"titles":785,"content":786,"level":66},"\u002Fdocs\u002Fstats#where-the-figures-come-from","Where the figures come from",[98],"Flytower doesn't add a mod or plugin for this. It uses two things it already has: Visits: when each player joins and leaves, from the server's log. This gives first and last seen, the number of visits and who is online. A daily read of Minecraft's own stats files (world\u002Fplayers\u002Fstats\u002F, or world\u002Fstats\u002F on older versions) at 03:30 in the server's time zone. Flytower keeps about twenty numbers per player from them, not the thousands of counters the files hold. Because the stats are read once a day, the leaderboards can be up to a day behind. People who can change the server's settings can press Read now on the Stats view to read them straight away.",{"id":788,"title":789,"titles":790,"content":791,"level":66},"\u002Fdocs\u002Fstats#leaderboards","Leaderboards",[98],"There are five boards, each showing the top ten: Board What it counts Playtime Time in the game, as Minecraft counts it Deaths Times the player died Mob kills Mobs killed Distance travelled Walking, sprinting, swimming, flying with elytra, boats, horses and minecarts together Blocks mined Every block broken with the right tool Switch between All time, This month and This week. Weeks start on Monday and months on the 1st, in the server's time zone. Players with the same figure share a place. If a world is reset, its counts start again from zero; Flytower counts everything in the new world as new.",{"id":793,"title":794,"titles":795,"content":796,"level":66},"\u002Fdocs\u002Fstats#turning-stats-off-and-leaving-players-out","Turning stats off and leaving players out",[98],"Under Settings, Community, Player stats you can turn stats off for a server (what was kept stays and is still shown, but nothing new is kept) or leave individual players out. A player who is left out has everything kept about them on that server deleted, and never appears on the Stats view, a leaderboard or anywhere else.",{"id":103,"title":102,"titles":798,"content":799,"level":14},[],"Each server can have a page that anyone can open without signing in, at https:\u002F\u002F\u003Cyour panel>\u002Fs\u002F\u003Cserver name>. It shows the server's name, icon and MOTD, a few lines you write about it, whether it's up, the address to join with a Copy button, the Minecraft version, and who's online. It wears your branding and works in light and dark mode. It's useful to link from a Discord server or a website, and those sites show a preview of the link with the server's name and description.",{"id":801,"title":102,"titles":802,"content":799,"level":14},"\u002Fdocs\u002Fstatus-page#public-status-page",[],{"id":804,"title":526,"titles":805,"content":806,"level":66},"\u002Fdocs\u002Fstatus-page#turning-it-on",[102],"A server's Settings, Community, Public page: switch on Show a public page for this server, write a description (up to 500 characters, shown as plain text with line breaks), choose what it says about players, and Save. The card then shows the page's address with a copy button. Public page, in a server's Settings, Community. If the server has its own hostname, the page is also at https:\u002F\u002F\u003Chostname>, such as https:\u002F\u002Fsurvival.example.com. See On the server's own address. While the page is off, its address says \"Nothing here\", exactly as for a server that doesn't exist, so nobody can find out which servers you have by guessing names. You can also set it with public: in the YAML.",{"id":808,"title":809,"titles":810,"content":811,"level":66},"\u002Fdocs\u002Fstatus-page#players","Players",[102],"You choose what the page says about who's online: How many are online (the default): \"3 of 20 players online\". Names and heads: everyone who's on, by name, with their face. Heads come through the panel, as on the Players tab, so visitors' browsers never contact Mojang or anyone else. Nothing. Bear in mind that Minecraft itself already tells anyone who adds your server to their multiplayer list how many people are on, and a sample of their names, unless you set hide-online-players=true in the server's settings.",{"id":813,"title":789,"titles":814,"content":815,"level":66},"\u002Fdocs\u002Fstatus-page#leaderboards",[102],"With Names and heads chosen, you can also tick Show leaderboards. The page then shows the top five for playtime, deaths, mob kills, distance travelled and blocks mined, for all time, this month and this week, from the same figures as the server's stats on its Players tab. It's off unless you turn it on. Leaderboards only show while the page shows names and the server keeps player stats. Players left out of stats never appear. Only names, heads and the figures leave the panel: nothing about when people played or who is left out.",{"id":817,"title":818,"titles":819,"content":820,"level":66},"\u002Fdocs\u002Fstatus-page#modpack-for-players","Modpack for players",[102],"On a Fabric server, the page can offer a modpack (.mrpack): one file players open in the Modrinth app or Prism Launcher to get a ready-to-play instance with the right Minecraft, Fabric and mods. It's on by default while the page is on; switch off Offer a modpack for players to hide it. What goes in it: From the server: each Modrinth mod in the server's content that also runs on players' computers, at the exact version the server has. Mods whose Modrinth page says they don't run on clients are left out (Modrinth's own labels decide, so a mod marked \"optional\" on clients, like Lithium, is included as optional), and so are plugins, datapacks and files that didn't come from Modrinth. Extras for players: client-only mods, shader packs and resource packs you add by their Modrinth slug, the last part of the project's address (sodium, iris, complementary-reimagined). Flytower picks the newest version for the server's Minecraft version and adds the mods they need. A shader pack needs Iris, so add iris too. The Public page card lists What players get and, under Left out, anything that wasn't added and why. The pack lists each file by its Modrinth download and checksums, as the format requires, so Flytower never copies or hosts anyone's mods: the launcher downloads them from Modrinth. It's rebuilt the first time someone asks for it after the server's content, extras or versions change, and kept under \u002Fvar\u002Flib\u002Fflytower\u002Fpacks. Paper and vanilla servers don't get one, since their plugins and datapacks only run on the server.",{"id":822,"title":823,"titles":824,"content":825,"level":66},"\u002Fdocs\u002Fstatus-page#on-the-servers-own-address","On the server's own address",[102],"A server with a hostname (and its A record pointing at the VPS, which players need anyway) shows its public page at https:\u002F\u002F\u003Chostname> too. There, nothing else of the panel is reachable: the address only serves that server's page, its modpack and the branding. Signing in and every other page stay on the panel's own domain. Caddy gets a certificate for the hostname the first time someone opens it, after asking the panel that the name belongs to a server whose public page is on, so nobody can make your box request certificates for other names. Turning the page off stops new certificates; the address then shows \"Not found\". Installs from before 1.2 get this added to Caddy's configuration by the system helper the first time it starts after an update, so the hostname starts working on its own. The old file is kept as \u002Fetc\u002Fcaddy\u002FCaddyfile.before-hostnames. If it's still not working, check journalctl -u flytower-agent for \"updating the Caddyfile failed\". \u002Fs\u002F\u003Cname> on the panel's domain works either way. If you manage Caddy yourself (--no-caddy), Flytower leaves your Caddyfile alone, so add this to it: {\n    on_demand_tls {\n        ask http:\u002F\u002F127.0.0.1:3000\u002Fapi\u002Fpublic\u002Ftls-ask\n    }\n}\n\nhttps:\u002F\u002F {\n    tls {\n        on_demand\n    }\n    reverse_proxy 127.0.0.1:3000\n}",{"id":827,"title":68,"titles":828,"content":829,"level":66},"\u002Fdocs\u002Fstatus-page#web-map",[102],"When the server's web map is on and set so Anyone can open it, the page has an Open the map button once the map has been drawn. Turning the public page off makes the map private again.",{"id":831,"title":832,"titles":833,"content":834,"level":66},"\u002Fdocs\u002Fstatus-page#how-it-stays-light","How it stays light",[102],"Visitors never reach the Minecraft server. Who's online comes from the \"joined the game\" and \"left the game\" lines in the server's log, which Flytower already follows for notifications. When the panel starts, it asks the console once who's already on. Whether the server is up comes from systemd, as everywhere else in the panel. The page refreshes itself every 30 seconds while it's open in a visible tab. The panel limits each visitor to 120 requests a minute, and nothing on the page loads from other sites.",{"id":836,"title":837,"titles":838,"content":839,"level":66},"\u002Fdocs\u002Fstatus-page#what-the-page-never-shows","What the page never shows",[102],"Only what's listed above leaves the panel: no ports other than the join address, no file paths, console output, backups or settings, and no other servers. Offline-mode player names get the default Steve or Alex head.",{"id":108,"title":107,"titles":841,"content":432,"level":14},[],{"id":843,"title":107,"titles":844,"content":432,"level":14},"\u002Fdocs\u002Ftroubleshooting#troubleshooting",[],{"id":846,"title":847,"titles":848,"content":849,"level":66},"\u002Fdocs\u002Ftroubleshooting#the-panel-doesnt-load","The panel doesn't load",[107],"Check the domain points at the machine: dig +short panel.example.com. Check ports 80 and 443 are open in your provider's firewall, as well as on the machine (the installer opens them with ufw). Right after installing, Caddy may still be getting the certificate. Give it a minute after DNS resolves.",{"id":851,"title":852,"titles":853,"content":854,"level":66},"\u002Fdocs\u002Ftroubleshooting#logs","Logs",[107],"You'll need a shell on the machine: SSH (open it for a while from System, SSH), or your provider's web console. journalctl -u flytower-panel -u flytower-agent -n 200 --no-pager   # the panel and agent\njournalctl -u flytower-mc@survival -n 200 --no-pager               # one server\njournalctl -u 'flytower-update-*' --no-pager                        # updates A server's own logs are also under View logs on its Console tab, and in \u002Fsrv\u002Fflytower\u002Fservers\u002F\u003Cname>\u002Flogs.",{"id":856,"title":857,"titles":858,"content":859,"level":66},"\u002Fdocs\u002Ftroubleshooting#a-server-wont-start","A server won't start",[107],"Its Console and View logs show Minecraft's own error. The usual causes are a mod or plugin that doesn't suit the version, or a broken config file. Remove the content you added last (or restore the backup taken before it), then start it again. Out of memory: lower other servers' memory or raise this one's within the budget. If it crashed, the Console tab's banner links to the crash report, and its Crashes button has the log from just before it. After three crashes in ten minutes it's left stopped; Start tries again. See Crashes.",{"id":861,"title":862,"titles":863,"content":864,"level":66},"\u002Fdocs\u002Ftroubleshooting#ssh","SSH",[107],"The installer leaves SSH open. Once the panel works and you have a passkey, close it from System, SSH. You can open it again for a set time (15 minutes to 24 hours). It closes by itself when the time is up, even across reboots. If the panel itself is broken and SSH is closed, use your VPS provider's web console.",{"id":866,"title":867,"titles":868,"content":869,"level":66},"\u002Fdocs\u002Ftroubleshooting#backing-up-the-panel","Backing up the panel",[107],"Server backups don't include the panel's own database. To keep a copy of it (your passkeys, settings, history and off-site storage details), copy both of these somewhere safe: \u002Fvar\u002Flib\u002Fflytower\u002Fflytower.db \u002Fetc\u002Fflytower\u002Fpanel.env. It holds the app secret, which off-site storage keys are encrypted with. To restore them on a new machine: install Flytower, stop the panel (systemctl stop flytower-panel), put both files back (owned by flytower), and start it.",{"id":871,"title":872,"titles":873,"content":874,"level":66},"\u002Fdocs\u002Ftroubleshooting#where-things-are","Where things are",[107],"Path What \u002Fopt\u002Fflytower\u002Fcurrent The installed release (with its own Bun) \u002Fetc\u002Fflytower Configuration and the app secret \u002Fvar\u002Flib\u002Fflytower\u002Fflytower.db The panel's database \u002Fvar\u002Flib\u002Fflytower\u002Fbackups Backups, one folder per server \u002Fsrv\u002Fflytower\u002Fservers\u002F\u003Cname> Server folders \u002Fetc\u002Fcaddy\u002FCaddyfile HTTPS, written by the installer",{"id":876,"title":877,"titles":878,"content":879,"level":66},"\u002Fdocs\u002Ftroubleshooting#reporting-a-problem","Reporting a problem",[107],"Open an issue on GitHub, with what you did, what happened, and the logs above if you can. html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":113,"title":112,"titles":881,"content":432,"level":14},[],{"id":883,"title":112,"titles":884,"content":432,"level":14},"\u002Fdocs\u002Fupdating#updating-flytower",[],{"id":886,"title":887,"titles":888,"content":889,"level":66},"\u002Fdocs\u002Fupdating#from-the-panel","From the panel",[112],"System, Updates shows the version you're on and offers any newer release, with its notes. Update asks for your passkey, then: downloads the release and checks its signature against Flytower's release key; copies the panel's database aside, into \u002Fvar\u002Flib\u002Fflytower-agent\u002Fdb-backups, which only root can read. If the copy can't be made (a full disk, say), the update stops there and your database is left exactly as it was; switches to the new version and restarts the panel and agent. Your Minecraft servers keep running throughout; checks the new panel starts and answers. If it doesn't, Flytower puts the previous version and the database back by itself, and the card says what went wrong. The panel is away for a minute or so. Go back to the previous version is offered afterwards in the same way. Both show up in Activity. One update runs at a time: while one is downloading or switching, another update, a Go back to or a clean-up of old releases is refused until it's done. The system helper only installs releases newer than the one running. To go back, use Go back to, which offers the releases still on the machine.",{"id":891,"title":892,"titles":893,"content":894,"level":66},"\u002Fdocs\u002Fupdating#stable-or-beta","Stable or Beta",[112],"The Update channel on the same card chooses what you're offered: Stable (the default): finished releases only. Beta: betas too, such as 1.1.0-beta.1, so you can try new features before they're released. They're signed and tested like any release, but may have rough edges. Take a backup of anything you care about first. Changing the channel doesn't install anything, and shows up in Activity. A beta is marked Beta when it's offered. Choosing Stable again while you're running a beta doesn't take you backwards: you're offered the next stable release that's newer than your beta (1.1.0 comes after 1.1.0-beta.3). To leave a beta sooner, Go back to the version you had before. If you install a beta with the installer and never choose a channel, Flytower assumes Beta.",{"id":896,"title":897,"titles":898,"content":899,"level":66},"\u002Fdocs\u002Fupdating#native-builds","Native builds",[112],"The Native channel is for trying Flytower with parts rewritten in Rust and Go, such as the system helper. These builds are made from the same code as the release they go with. Each one is numbered after the release it goes with, plus a counter: 1.2.0-beta.2.native.1 goes with 1.2.0-beta.2, and 1.2.0-native.1 goes with 1.2.0. Beta and Stable never offer them, and Native offers only them, so a native install stays native until you choose another channel. Use native builds on a test server. Leaving them means using Go back to for a version you had before, or reinstalling. To start on one, install with --native, or choose Native under System, Updates. From 1.4.0, the system helper and the updater are the Rust versions on every channel (1.3 carried them switched off). The Bun versions are still in each release: if the Rust helper fails to start, Flytower starts the Bun one by itself and says so in journalctl -u flytower-agent. To use Bun on purpose, run echo bun > \u002Fetc\u002Fflytower\u002Fagent as root and restart flytower-agent. Delete that file and restart again to go back. After a fallback, the box stays on Bun until it reboots or updates; to try Rust again sooner, delete \u002Frun\u002Fflytower\u002Fagent-rust-starting and restart flytower-agent.",{"id":901,"title":902,"titles":903,"content":904,"level":66},"\u002Fdocs\u002Fupdating#releases-are-signed","Releases are signed",[112],"Each release's SHA256SUMS is signed with Flytower's Ed25519 release key. The installer and the updater both check the signature before installing anything, using the public key built into them. A download that doesn't match is refused.",{"id":906,"title":907,"titles":908,"content":909,"level":66},"\u002Fdocs\u002Fupdating#re-running-the-installer","Re-running the installer",[112],"Running the installer again keeps your data, settings and app secret. On a box that already has Flytower it also keeps the installed version, so a beta, native or test box stays as it is. Use it if the panel won't start at all, or for a new setup token: curl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Flatest\u002Fdownload\u002Finstall.sh \\\n  | sudo bash -s -- --domain panel.example.com To change version with it, add --version \u003Cx.y.z>, --version latest (the newest stable release), --beta or --native. Installs from before 0.5.0, which had no updater, upgrade this way with --version latest. If the version you pick is older than the one installed, the installer saves a copy of the panel's database in \u002Fvar\u002Flib\u002Fflytower-agent\u002Fdb-backups\u002F before switching, since older code may not understand newer data. Every release is tested upgrading from each earlier one, including the database, before it's published.",{"id":911,"title":912,"titles":913,"content":914,"level":66},"\u002Fdocs\u002Fupdating#minecraft-and-java","Minecraft and Java",[112],"Flytower updates itself, not your servers. Minecraft versions change only when you choose (Settings, Version), and mods and plugins only when you update them. See Content. Java is installed per server as each Minecraft version needs it.",{"id":916,"title":917,"titles":918,"content":919,"level":66},"\u002Fdocs\u002Fupdating#update-badges","Update badges",[112],"Flytower looks for updates in the background, so you don't have to remember to press Check now. It never installs anything by itself; it only tells you. What Where it shows Compared with Flytower A count on System in the sidebar and on Updates; a banner on System The newest release on your update channel Mods, plugins, datapacks A count on the server's card and on its Content tab Newer builds for the server's Minecraft version, the same as the Content tab Minecraft A note on the Content tab The newest release the loader supports, and whether everything installed has a build for it Java System, Updates, under Java Adoptium's newest Temurin build for the same Java version When. Every six hours, at a minute and hour picked when the panel starts, so installs don't all ask Modrinth and GitHub at once. Opening the panel checks again if the last check is over an hour old, and Check now on System, Updates checks everything straight away. Badges update by themselves in open tabs as results arrive. A newer Minecraft is only mentioned. Upgrading a world can't be undone without a backup, so Flytower never notifies about it or offers it as an update. The Content tab says when one is out, and either that everything installed is ready for it, or which items don't have a build yet (and, if there is one, the newest version that everything is ready for). Change version from Settings, Version when you're ready. When a check fails, for example because Modrinth or GitHub is down, the last good result and its badge stay, and a quiet line says the check failed. Nothing is sent to notification channels, and the next good check clears the message. Notifications. The same check feeds the A new version of Flytower is out and Updates for installed mods, plugins or datapacks notifications: one message per new version, not one per check. See Notifications. Java shows each Java version Flytower has installed, which servers use it, and whether Adoptium has a newer build. Installing the newer build from the panel isn't there yet; until then servers keep running on the build they have.",{"id":921,"title":922,"titles":923,"content":924,"level":66},"\u002Fdocs\u002Fupdating#publishing-a-beta","Publishing a beta",[112],"For maintainers: run the Release workflow with a version like 1.1.0-beta.1. Any version with a -suffix is published as a GitHub pre-release, which only Beta installs are offered. Number betas beta.1, beta.2 and so on; beta.10 correctly comes after beta.9.",{"id":926,"title":927,"titles":928,"content":929,"level":66},"\u002Fdocs\u002Fupdating#publishing-a-native-build","Publishing a native build",[112],"For maintainers: run the Release workflow on main (or the ref of the release it goes with) with that release's version plus .native.N, such as 1.3.0-beta.1.native.1. For a stable release, use -native.N, such as 1.3.0-native.1. Native builds are published alongside each release, and in between when native work is worth trying. They're tagged native-\u003Cversion> rather than v…, because Beta panels offer every v-tagged pre-release and older panels never look at other tags. Write the summary in .github\u002Frelease-notes\u002F\u003Cversion>.md as usual. html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",[931,936,941,947,952,957,962,967,972,977,982,987,992,997,1002,1007,1012,1017,1022,1027,1032,1037,1042,1047,1052,1057,1062,1067,1072,1077,1082,1087,1092,1097,1102,1107,1112,1117,1122],{"version":932,"date":933,"url":934,"beta":116,"body":935},"1.4.1","2026-11-11T18:26:57Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nEach 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.\n\nSign-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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.1\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md).\n\n### Features\n\n- **rust-agent:** helpers for writing and copying files without following links ([51ccd75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F51ccd75324fca8f80389cbb366294ec2c5b4a497))\n- **agent:** helpers for writing and copying files without following links ([610a2fe](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F610a2fe178f556535d05234106f4dbfd438b3bfe))\n\n### Fixes\n\n- let the box itself see versions on the health check under Bun ([a42cc78](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa42cc78aceb2d1cec20445311f2ca29eec152565))\n- **rust-agent:** move agent state and server archives out of the panel's folder ([3faccb8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3faccb8a157fe04790873697bfa0dff85bd5d98b))\n- **rust-agent:** one update at a time, recorded before the updater starts, and no downgrades ([13f5560](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13f556012eedb7c436b06d1f300d250a709517c6))\n- **rust-agent:** keep database copies root-only and never delete a live file the updater did not save ([42d0063](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d0063d15c259cc70767596b8cb32e02a385168))\n- **agent:** clean up database copies in the agent's folder, and serialise with updates ([bc45cce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbc45cce091ce0dacdb33d40501fc9d0a2c6d6fb2))\n- **agent:** move agent state and server archives out of the panel's folder ([f0bf531](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff0bf5317cfeff08dfa6e021324632085bb8a19b9))\n- **agent:** one update at a time, recorded before the updater starts, and no downgrades ([b4eca6a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4eca6ac7c1702b512691a5e5dff68a15f0b87c9))\n- **agent:** keep database copies root-only and never delete a live file the updater did not save ([b216eac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb216eacf11db9c273d697c429132c4f1390c83d6))\n- health check only tells versions to signed-in people and the box itself ([62950a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62950a45efb588a279d9489f68a97d31a5f57721))\n- type the export and past world delete calls ([42d6105](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d61059412d6512734cf8ff17d820803a66a73f))\n- refuse changes from other sites and close the \u002Fapi\u002F_ gap ([20d9f41](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F20d9f41f8950ecc8f7133c11a185d4f85be75ffa))\n- check lockfile paths before moving or removing content ([a07ef8b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa07ef8b72904c992d649e9e4742986eeef3e048e))\n- setup token guesses are limited per address and counted up front ([5579a94](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5579a9478c880de8cbd5e9f18bf50e675062c3df))\n- check the panel's user, not its group, on the Rust agent socket ([1be77d0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1be77d0a260cc1dd2d7f2064e06d722754a6c95b))\n- run servers in their own group and hide the agent from them ([b799c9e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb799c9eb71d5e72eb4c476f1dc9557e486552d75))\n- removing a passkey signs out your other devices ([0003816](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0003816e20e4d7e293325c88c6d85b0afa892efa))\n- past worlds to start a new server from only come from servers you can see ([364fa28](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F364fa286ae390d070c6b3a97ecdcba66b69a0a89))\n- only follow jobs that exist and that you can see ([c593802](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc5938020e76aec50f259d82a8abd9dd717e3a89d))\n- recovery-code sign-in checks one code instead of every code ([d88de71](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd88de712b75e28c139d448798503eb363f766555))\n- rate limiter forgets old windows and counts the proxy's own hop ([4a8a639](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4a8a639998b660b02662edd1cb9cb5d23473fb47))\n- deleting an export or past world needs a passkey check ([8466d05](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8466d051d1336420614e377ca2799288663e442b))\n- validate level-name and keep world readers inside the server folder ([53e098e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53e098edac588010235f9b6bd197f1bae2e652e5))\n- cancelling an invite needs the standing to have made it ([8857b08](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8857b082e6026f2835c192e4e15ee40e1f27e96b))\n- Discord role mappings follow the no-more-than-you-have rule ([6fdd6b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6fdd6b4f0d8d11b713b17137feb2e926e3bf64b4))\n- write server-folder files through random exclusive temp files ([16841c4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F16841c4a000157f2d903e37171808ac2e0dc6746))\n- only send a saved notification secret back to the same site ([36d6b12](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36d6b1217c8cacec3876d50d4c11f7c31034ba65))\n\n### Docs\n\n- release notes for 1.4.1 and its native build ([e5de53f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe5de53f93e9e01c17982fcfe2e022417b99e81ed))\n- where the agent keeps its state, database copies and archives ([2fcc26f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2fcc26ffaeeaf1243e10052f9a9050efebf2a265))\n- deleting an export or past world asks for your passkey ([fb292d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb292d61630b51b2bdfbe5b373d35c1882dd9e52))\n- passkey removal signs out other devices; Discord role mapping limits ([3327a12](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3327a12f27c6e930d4d75d2c07eab14aef99cd8d))\n\n### Other\n\n- pin version ordering in both agents ([33dad60](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F33dad60e4398a393a53c95cf35cb9067122f1248))\n- share compareVersions between the panel and the agent ([9d2be54](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9d2be54f9f6f1081e6a6e770d816e592cfb6b100))\n- check a running server can't see the agent or the panel's data ([1793857](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1793857f16adb55f2dd39fd9504b086e54bbc64e))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.4.0...v1.4.1",{"version":937,"date":938,"url":939,"beta":116,"body":940},"1.4.0","2026-11-11T11:54:16Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nChat 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.\n\nThe 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 `\u002Fetc\u002Fflytower\u002Fagent`. Testing notes are in [testing-1.4.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md) and [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md).\n\n### Features\n\n- chat from Discord switches on the Discord card and server chat card ([dacd16f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdacd16fba3ab8f51004fa0d4ef053a9d5fff8a37))\n- show messages from a server's Discord chat channel in game ([8ef16b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ef16b1239434c134685bf9813b0fad62e314d28))\n- keep a Discord Gateway connection with heartbeats, resume and backoff ([e4471f7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe4471f77468b0f2454ea26053619720d93e840d5))\n- start the Rust agent by default, falling back to Bun if it won't start ([ba72ebf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fba72ebfe8d417ffd547bab67dad521e0fee876d2))\n- Rust agent clears its start marker once listening ([5e50170](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e50170dcfdb0aa1a385a7078983ab0d3002a785))\n- Access section on server Settings ([8ca45b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ca45b1dde52429fb042f62641d852b7d1176f02))\n- let a server's own access be managed by someone trusted with it ([d7a35d4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7a35d4fe08edb722ecefe84c07ebfcbe1a2ca43))\n- show what each person can do, from all their roles ([f80f280](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff80f280a31108a031c3a27075aba3cf2ad9002fd))\n- role editor grouped by area, with copies and locked extras ([8f46f6b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f46f6bdd4dcab3baf41437dbf530f80062357c5))\n- say what changed in Activity when roles or access change ([4157683](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F41576832362f1018353dc4aad5d09f4b3f5ff61e))\n- group permissions by area and mark the powerful ones ([f21526a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff21526a0a1c3900623555e91243ad148e4a1978d))\n- show and hide panel pages by the finer permissions ([b0fdf6f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb0fdf6ffaef5b2b146af369e5473e0fd763e0fc9))\n- check each part of a spec change against its permission ([4c64d2c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c64d2cd591c547c2f12f3a46f1960e4d7691ba6))\n- check the finer permissions on every route ([98c135c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98c135cbbd7b17fe960909f93f7c22d870259d0b))\n- move custom roles to the finer permissions on upgrade ([31ba429](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31ba4297066a4f070b99d97f86051f6184b5966d))\n- split broad permissions into finer keys ([bab8d86](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbab8d866001516ca65bd58bd6d0c8feaa5f45e2b))\n\n### Fixes\n\n- keep map controls above the tiles ([aa5d49c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa5d49c0df3676b6a405306dc2232645b1b65e1b))\n- keep the chat from Discord badge beside its heading, and name a stop plainly ([84ebdef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F84ebdef5263a36c0f896118bd8159588fa63561d))\n- smooth web map zooming ([f6bdb7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6bdb7be6514acdf674657601fe997b42445c499)) · [#201](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F201)\n\n### Docs\n\n- release notes for 1.4.0 and its native build ([34c8bc8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F34c8bc8f833fd5da7f3a2b2f740c6263e6226acd))\n- release notes for 1.4.0-beta.2 and its native build ([e2cfafa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe2cfafa15534189b7fc2837025b751a4940c5353))\n- release notes for 1.4.0-beta.1 and its native build ([d0f0d03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0f0d03f4df366ff3f7aa285a1a62a23d99e82b8))\n- chat from Discord and its testing notes ([72a25ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F72a25ce284d07365e278948fc6116973698524bc))\n- keep the updating page's links inside the docs site ([8956ba3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8956ba3fce9097c09846363b891499fea0f46d36))\n- Rust agent on by default, and how to choose Bun ([5f8e238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5f8e23834ae13d5f84737da4247e87dfa684e0b2))\n- managing one server's access ([50298ab](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50298ab035db8fff5e205fdc2494f201df2caca8))\n- the role editor and what someone can do ([ee83ff5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee83ff5fdbd1b7b19c79f8aacc08fecc6ad363e9))\n- drop a testing step that doesn't hold yet ([94e21e4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F94e21e42c6481d88330d7f44b7e17d71b6d63ef6))\n- testing notes for the finer permissions ([d5a56b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd5a56b4b499621098e695876457af7e26a4d9843))\n- describe the finer permissions ([b9c1215](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9c1215f7720001d17463cec3b9022a9b8e0fd8d))\n\n### Other\n\n- give the slow RCON command test room for the login ([43f02b5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F43f02b54e7a3cc331dcb088a993bc3f3d0d40cbc))\n- clear the agent's start limit between the E2E's quick restarts ([545b94f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F545b94f70eae78407cc44519356b96fe96ae5d83))\n- check the Rust agent and its Bun fallback end to end ([5ffca21](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ffca2124502bd675d5e45d7a9b60011902a36d9))\n- prove nobody gains or loses access in the permission split ([a65a42e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa65a42e3394376b6ae735ee6073dcb98ffa449d6))\n\n### Other changes\n\n- Merge main into feat\u002Fpermission-split ([78b8ece](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78b8ecec20a29531c5ceacb64b7149628b8ccf36))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.1...v1.4.0",{"version":942,"date":943,"url":944,"beta":945,"body":946},"1.4.0-beta.2","2026-11-11T10:58:17Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.4.0-beta.2",true,"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.\n\nTesting: 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0-beta.2\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md).\n\n### Fixes\n\n- keep map controls above the tiles ([aa5d49c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa5d49c0df3676b6a405306dc2232645b1b65e1b))\n\n### Docs\n\n- release notes for 1.4.0-beta.2 and its native build ([e2cfafa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe2cfafa15534189b7fc2837025b751a4940c5353))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.4.0-beta.1...v1.4.0-beta.2",{"version":948,"date":949,"url":950,"beta":945,"body":951},"1.4.0-beta.1","2026-11-11T00:59:03Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nChat 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.\n\nThe 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 `\u002Fetc\u002Fflytower\u002Fagent`. This is a beta, so please try it on a test server first. Testing notes are in [testing-1.4.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md) and [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md).\n\n### Features\n\n- chat from Discord switches on the Discord card and server chat card ([dacd16f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdacd16fba3ab8f51004fa0d4ef053a9d5fff8a37))\n- show messages from a server's Discord chat channel in game ([8ef16b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ef16b1239434c134685bf9813b0fad62e314d28))\n- keep a Discord Gateway connection with heartbeats, resume and backoff ([e4471f7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe4471f77468b0f2454ea26053619720d93e840d5))\n- start the Rust agent by default, falling back to Bun if it won't start ([ba72ebf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fba72ebfe8d417ffd547bab67dad521e0fee876d2))\n- Rust agent clears its start marker once listening ([5e50170](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e50170dcfdb0aa1a385a7078983ab0d3002a785))\n- Access section on server Settings ([8ca45b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ca45b1dde52429fb042f62641d852b7d1176f02))\n- let a server's own access be managed by someone trusted with it ([d7a35d4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7a35d4fe08edb722ecefe84c07ebfcbe1a2ca43))\n- show what each person can do, from all their roles ([f80f280](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff80f280a31108a031c3a27075aba3cf2ad9002fd))\n- role editor grouped by area, with copies and locked extras ([8f46f6b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f46f6bdd4dcab3baf41437dbf530f80062357c5))\n- say what changed in Activity when roles or access change ([4157683](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F41576832362f1018353dc4aad5d09f4b3f5ff61e))\n- group permissions by area and mark the powerful ones ([f21526a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff21526a0a1c3900623555e91243ad148e4a1978d))\n- show and hide panel pages by the finer permissions ([b0fdf6f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb0fdf6ffaef5b2b146af369e5473e0fd763e0fc9))\n- check each part of a spec change against its permission ([4c64d2c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c64d2cd591c547c2f12f3a46f1960e4d7691ba6))\n- check the finer permissions on every route ([98c135c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98c135cbbd7b17fe960909f93f7c22d870259d0b))\n- move custom roles to the finer permissions on upgrade ([31ba429](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31ba4297066a4f070b99d97f86051f6184b5966d))\n- split broad permissions into finer keys ([bab8d86](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbab8d866001516ca65bd58bd6d0c8feaa5f45e2b))\n\n### Fixes\n\n- keep the chat from Discord badge beside its heading, and name a stop plainly ([84ebdef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F84ebdef5263a36c0f896118bd8159588fa63561d))\n- smooth web map zooming ([f6bdb7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6bdb7be6514acdf674657601fe997b42445c499)) · [#201](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F201)\n\n### Docs\n\n- release notes for 1.4.0-beta.1 and its native build ([d0f0d03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0f0d03f4df366ff3f7aa285a1a62a23d99e82b8))\n- chat from Discord and its testing notes ([72a25ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F72a25ce284d07365e278948fc6116973698524bc))\n- keep the updating page's links inside the docs site ([8956ba3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8956ba3fce9097c09846363b891499fea0f46d36))\n- Rust agent on by default, and how to choose Bun ([5f8e238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5f8e23834ae13d5f84737da4247e87dfa684e0b2))\n- managing one server's access ([50298ab](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50298ab035db8fff5e205fdc2494f201df2caca8))\n- the role editor and what someone can do ([ee83ff5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee83ff5fdbd1b7b19c79f8aacc08fecc6ad363e9))\n- drop a testing step that doesn't hold yet ([94e21e4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F94e21e42c6481d88330d7f44b7e17d71b6d63ef6))\n- testing notes for the finer permissions ([d5a56b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd5a56b4b499621098e695876457af7e26a4d9843))\n- describe the finer permissions ([b9c1215](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9c1215f7720001d17463cec3b9022a9b8e0fd8d))\n\n### Other\n\n- give the slow RCON command test room for the login ([43f02b5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F43f02b54e7a3cc331dcb088a993bc3f3d0d40cbc))\n- clear the agent's start limit between the E2E's quick restarts ([545b94f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F545b94f70eae78407cc44519356b96fe96ae5d83))\n- check the Rust agent and its Bun fallback end to end ([5ffca21](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ffca2124502bd675d5e45d7a9b60011902a36d9))\n- prove nobody gains or loses access in the permission split ([a65a42e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa65a42e3394376b6ae735ee6073dcb98ffa449d6))\n\n### Other changes\n\n- Merge main into feat\u002Fpermission-split ([78b8ece](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78b8ecec20a29531c5ceacb64b7149628b8ccf36))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.1...v1.4.0-beta.1",{"version":953,"date":954,"url":955,"beta":945,"body":956},"native-1.4.1-native.1","2026-11-11T18:29:36Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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.\n\nTesting: follow [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.1-native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md) on a spare VPS.\n\n### Features\n\n- **rust-agent:** helpers for writing and copying files without following links ([51ccd75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F51ccd75324fca8f80389cbb366294ec2c5b4a497))\n- **agent:** helpers for writing and copying files without following links ([610a2fe](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F610a2fe178f556535d05234106f4dbfd438b3bfe))\n\n### Fixes\n\n- let the box itself see versions on the health check under Bun ([a42cc78](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa42cc78aceb2d1cec20445311f2ca29eec152565))\n- **rust-agent:** move agent state and server archives out of the panel's folder ([3faccb8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3faccb8a157fe04790873697bfa0dff85bd5d98b))\n- **rust-agent:** one update at a time, recorded before the updater starts, and no downgrades ([13f5560](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13f556012eedb7c436b06d1f300d250a709517c6))\n- **rust-agent:** keep database copies root-only and never delete a live file the updater did not save ([42d0063](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d0063d15c259cc70767596b8cb32e02a385168))\n- **agent:** clean up database copies in the agent's folder, and serialise with updates ([bc45cce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbc45cce091ce0dacdb33d40501fc9d0a2c6d6fb2))\n- **agent:** move agent state and server archives out of the panel's folder ([f0bf531](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff0bf5317cfeff08dfa6e021324632085bb8a19b9))\n- **agent:** one update at a time, recorded before the updater starts, and no downgrades ([b4eca6a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4eca6ac7c1702b512691a5e5dff68a15f0b87c9))\n- **agent:** keep database copies root-only and never delete a live file the updater did not save ([b216eac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb216eacf11db9c273d697c429132c4f1390c83d6))\n- health check only tells versions to signed-in people and the box itself ([62950a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62950a45efb588a279d9489f68a97d31a5f57721))\n- type the export and past world delete calls ([42d6105](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d61059412d6512734cf8ff17d820803a66a73f))\n- refuse changes from other sites and close the \u002Fapi\u002F_ gap ([20d9f41](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F20d9f41f8950ecc8f7133c11a185d4f85be75ffa))\n- check lockfile paths before moving or removing content ([a07ef8b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa07ef8b72904c992d649e9e4742986eeef3e048e))\n- setup token guesses are limited per address and counted up front ([5579a94](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5579a9478c880de8cbd5e9f18bf50e675062c3df))\n- check the panel's user, not its group, on the Rust agent socket ([1be77d0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1be77d0a260cc1dd2d7f2064e06d722754a6c95b))\n- run servers in their own group and hide the agent from them ([b799c9e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb799c9eb71d5e72eb4c476f1dc9557e486552d75))\n- removing a passkey signs out your other devices ([0003816](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0003816e20e4d7e293325c88c6d85b0afa892efa))\n- past worlds to start a new server from only come from servers you can see ([364fa28](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F364fa286ae390d070c6b3a97ecdcba66b69a0a89))\n- only follow jobs that exist and that you can see ([c593802](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc5938020e76aec50f259d82a8abd9dd717e3a89d))\n- recovery-code sign-in checks one code instead of every code ([d88de71](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd88de712b75e28c139d448798503eb363f766555))\n- rate limiter forgets old windows and counts the proxy's own hop ([4a8a639](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4a8a639998b660b02662edd1cb9cb5d23473fb47))\n- deleting an export or past world needs a passkey check ([8466d05](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8466d051d1336420614e377ca2799288663e442b))\n- validate level-name and keep world readers inside the server folder ([53e098e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53e098edac588010235f9b6bd197f1bae2e652e5))\n- cancelling an invite needs the standing to have made it ([8857b08](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8857b082e6026f2835c192e4e15ee40e1f27e96b))\n- Discord role mappings follow the no-more-than-you-have rule ([6fdd6b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6fdd6b4f0d8d11b713b17137feb2e926e3bf64b4))\n- write server-folder files through random exclusive temp files ([16841c4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F16841c4a000157f2d903e37171808ac2e0dc6746))\n- only send a saved notification secret back to the same site ([36d6b12](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36d6b1217c8cacec3876d50d4c11f7c31034ba65))\n\n### Docs\n\n- release notes for 1.4.1 and its native build ([e5de53f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe5de53f93e9e01c17982fcfe2e022417b99e81ed))\n- where the agent keeps its state, database copies and archives ([2fcc26f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2fcc26ffaeeaf1243e10052f9a9050efebf2a265))\n- deleting an export or past world asks for your passkey ([fb292d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb292d61630b51b2bdfbe5b373d35c1882dd9e52))\n- passkey removal signs out other devices; Discord role mapping limits ([3327a12](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3327a12f27c6e930d4d75d2c07eab14aef99cd8d))\n\n### Other\n\n- pin version ordering in both agents ([33dad60](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F33dad60e4398a393a53c95cf35cb9067122f1248))\n- share compareVersions between the panel and the agent ([9d2be54](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9d2be54f9f6f1081e6a6e770d816e592cfb6b100))\n- check a running server can't see the agent or the panel's data ([1793857](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1793857f16adb55f2dd39fd9504b086e54bbc64e))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.4.0-native.1...native-1.4.1-native.1",{"version":958,"date":959,"url":960,"beta":945,"body":961},"native-1.4.0-native.1","2026-11-11T11:57:21Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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.\n\nTesting: follow [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.0-native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md) on a spare VPS.\n\n### Docs\n\n- release notes for 1.4.0 and its native build ([34c8bc8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F34c8bc8f833fd5da7f3a2b2f740c6263e6226acd))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.4.0-beta.2.native.1...native-1.4.0-native.1",{"version":963,"date":964,"url":965,"beta":945,"body":966},"native-1.4.0-beta.2.native.1","2026-11-11T11:01:15Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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.\n\nTesting: follow [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.0-beta.2.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md) on a spare VPS.\n\n### Fixes\n\n- keep map controls above the tiles ([aa5d49c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa5d49c0df3676b6a405306dc2232645b1b65e1b))\n\n### Docs\n\n- release notes for 1.4.0-beta.2 and its native build ([e2cfafa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe2cfafa15534189b7fc2837025b751a4940c5353))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.4.0-beta.1.native.1...native-1.4.0-beta.2.native.1",{"version":968,"date":969,"url":970,"beta":945,"body":971},"native-1.4.0-beta.1.native.1","2026-11-11T01:01:57Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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.\n\nTesting: follow [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.0-beta.1.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md) on a spare VPS.\n\n### Features\n\n- chat from Discord switches on the Discord card and server chat card ([dacd16f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdacd16fba3ab8f51004fa0d4ef053a9d5fff8a37))\n- show messages from a server's Discord chat channel in game ([8ef16b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ef16b1239434c134685bf9813b0fad62e314d28))\n- keep a Discord Gateway connection with heartbeats, resume and backoff ([e4471f7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe4471f77468b0f2454ea26053619720d93e840d5))\n- start the Rust agent by default, falling back to Bun if it won't start ([ba72ebf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fba72ebfe8d417ffd547bab67dad521e0fee876d2))\n- Rust agent clears its start marker once listening ([5e50170](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e50170dcfdb0aa1a385a7078983ab0d3002a785))\n- Access section on server Settings ([8ca45b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ca45b1dde52429fb042f62641d852b7d1176f02))\n- let a server's own access be managed by someone trusted with it ([d7a35d4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7a35d4fe08edb722ecefe84c07ebfcbe1a2ca43))\n- show what each person can do, from all their roles ([f80f280](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff80f280a31108a031c3a27075aba3cf2ad9002fd))\n- role editor grouped by area, with copies and locked extras ([8f46f6b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f46f6bdd4dcab3baf41437dbf530f80062357c5))\n- say what changed in Activity when roles or access change ([4157683](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F41576832362f1018353dc4aad5d09f4b3f5ff61e))\n- group permissions by area and mark the powerful ones ([f21526a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff21526a0a1c3900623555e91243ad148e4a1978d))\n- show and hide panel pages by the finer permissions ([b0fdf6f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb0fdf6ffaef5b2b146af369e5473e0fd763e0fc9))\n- check each part of a spec change against its permission ([4c64d2c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c64d2cd591c547c2f12f3a46f1960e4d7691ba6))\n- check the finer permissions on every route ([98c135c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98c135cbbd7b17fe960909f93f7c22d870259d0b))\n- move custom roles to the finer permissions on upgrade ([31ba429](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31ba4297066a4f070b99d97f86051f6184b5966d))\n- split broad permissions into finer keys ([bab8d86](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbab8d866001516ca65bd58bd6d0c8feaa5f45e2b))\n\n### Fixes\n\n- keep the chat from Discord badge beside its heading, and name a stop plainly ([84ebdef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F84ebdef5263a36c0f896118bd8159588fa63561d))\n- smooth web map zooming ([f6bdb7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6bdb7be6514acdf674657601fe997b42445c499)) · [#201](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F201)\n\n### Docs\n\n- release notes for 1.4.0-beta.1 and its native build ([d0f0d03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0f0d03f4df366ff3f7aa285a1a62a23d99e82b8))\n- chat from Discord and its testing notes ([72a25ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F72a25ce284d07365e278948fc6116973698524bc))\n- keep the updating page's links inside the docs site ([8956ba3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8956ba3fce9097c09846363b891499fea0f46d36))\n- Rust agent on by default, and how to choose Bun ([5f8e238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5f8e23834ae13d5f84737da4247e87dfa684e0b2))\n- managing one server's access ([50298ab](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50298ab035db8fff5e205fdc2494f201df2caca8))\n- the role editor and what someone can do ([ee83ff5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee83ff5fdbd1b7b19c79f8aacc08fecc6ad363e9))\n- drop a testing step that doesn't hold yet ([94e21e4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F94e21e42c6481d88330d7f44b7e17d71b6d63ef6))\n- testing notes for the finer permissions ([d5a56b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd5a56b4b499621098e695876457af7e26a4d9843))\n- describe the finer permissions ([b9c1215](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9c1215f7720001d17463cec3b9022a9b8e0fd8d))\n\n### Other\n\n- give the slow RCON command test room for the login ([43f02b5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F43f02b54e7a3cc331dcb088a993bc3f3d0d40cbc))\n- clear the agent's start limit between the E2E's quick restarts ([545b94f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F545b94f70eae78407cc44519356b96fe96ae5d83))\n- check the Rust agent and its Bun fallback end to end ([5ffca21](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ffca2124502bd675d5e45d7a9b60011902a36d9))\n- prove nobody gains or loses access in the permission split ([a65a42e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa65a42e3394376b6ae735ee6073dcb98ffa449d6))\n\n### Other changes\n\n- Merge main into feat\u002Fpermission-split ([78b8ece](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78b8ecec20a29531c5ceacb64b7149628b8ccf36))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.1-native.1...native-1.4.0-beta.1.native.1",{"version":973,"date":974,"url":975,"beta":116,"body":976},"1.3.1","2026-11-10T21:46:55Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nOn 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.\n\n### Features\n\n- Settings and World as one page of collapsible sections ([272e2f6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F272e2f6735ea9b64f3a2bfe31f6c52bb96e04b4d))\n- collapsible sections component ([a1f5f58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa1f5f58f9265fe1fc51d7768ac808ab8dbd46121))\n\n### Fixes\n\n- point notifications, tests and docs at the new sections ([73ddb2e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73ddb2edfd6c97a9c3418d9b22b26bbcfe855fe3))\n- keep the MOTD editor within the screen on phones ([3781e26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3781e2681a86743a8df3c01e2c76c9eb44e6683a))\n\n### Docs\n\n- release notes for 1.3.1 and its native build ([60c3dae](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F60c3dae1277ceeeb57ef8f9cdde6a668fe152eda))\n\n### Other\n\n- G B jumps to the Backups section of World ([c457fe8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc457fe85ecc74b7172a1ce86ca31493cfabf158a))\n\n### Other changes\n\n- Merge main into feat\u002Fcollapsible-sections ([cd76fe6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcd76fe6298a6959a7b6e1b5aa30b469a6eba51c4))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.0...v1.3.1",{"version":978,"date":979,"url":980,"beta":116,"body":981},"1.3.0","2026-11-10T21:02:37Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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 `\u002Fstatus`, `\u002Fplayers`, `\u002Fleaderboard` and `\u002Fstats`. Give a Discord role a Flytower role and its members can use `\u002Fwhitelist`, `\u002Frestart`, `\u002Fbackup` and `\u002Fsay`. **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.\n\nThe 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.\n\nFlytower 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md)) until 1.4.0. Testing notes are in [testing-1.3.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md) and [testing-1.4.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md).\n\n### Features\n\n- let each browser turn single-key shortcuts off ([fd0c73c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffd0c73cfd9db220b8601771980f99270fa789dfe))\n- show shortcuts in the command palette ([78fce4a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78fce4abc2d72e3f12658819fee42240fc0fc997))\n- save Settings and review YAML with Ctrl+S ([6860d53](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6860d53a1156f1a1f14fb4bfd88dd77330d26013))\n- move through cards and rows with J\u002FK, Enter, . and Shift+Delete ([8ce3fd9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ce3fd95b6f4760df63f9516524589f28381d2fe))\n- add G-jumps, L for logs, [ ] between servers, \u002F and the ? sheet ([dddb348](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdddb3482a82743da362cbe32224b8f24a43d5df6))\n- add one shortcut list for jumps, the sheet and hints ([61abb32](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F61abb325a2258f6340647237f95f9b6371b99577))\n- post deaths and advancements to Discord chat ([afd6213](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fafd621399238150fc3e98686b17aeb77292adb96))\n- right-click menus on notification channels, with Pause and Resume ([01f32a5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01f32a50250fb0c87e551ab7a10473f2833db00b))\n- right-click menus on crashes, with Copy report ([0e4da7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e4da7bf968044e36eb644234f80bf36941d0fe8))\n- right-click menus on world exports and past worlds ([581b7aa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F581b7aaa82c6f516b2f71cbde2ce2c9583c2455d))\n- right-click and ⋯ menus on Players rows ([fcf7f78](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffcf7f7826ac8d693c5692290718c8535aba01a11))\n- player action list for right-click menus ([5356f9c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5356f9cc759740f3b6c683dcccd366df8d0187b7))\n- map markers glide between player positions ([ae98c9e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae98c9e070e04fa6623dc9c3090c92019a696060))\n- ask for player positions every second, and dimensions less often ([9fed6c5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9fed6c582f22dd8fa094471da1e5b520f03ad1d8))\n- ship the Rust updater behind the same switch ([7fcc888](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7fcc88831a839dc75ba557f655b04d2b7607dfb0))\n- port the updater to Rust ([e8dfcfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8dfcfc3890ebaaddf3c983eaf653632280098c6))\n- command palette on Ctrl + K with servers ahead of help ([9048e82](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9048e82e671ed701e6cd9e9ac0af00c070141a36))\n- palette links with recent servers and pages ([11d04b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F11d04b6f086d3bc9203898124026438f7d5693bf))\n- palette entries for servers, their tabs and actions ([292317c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F292317cec34f80112857839acdcb37bb98b73593))\n- show a progress bar while the web map is drawn ([3bad87a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3bad87a634a128c2afb137a1e44187ce79143d32))\n- the map service passes on how far a draw has got ([4dca738](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4dca7380906de90b7e510c09d8e5f511de85cb53))\n- flytower-map reports progress as it draws ([be67347](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbe673477a6664e0941c2d62cc2325aa100cdbced))\n- **panel:** head the rest of the machine, and show the journal's size ([b34bd32](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb34bd3265294031c6b0858f37c9fa98203346abc))\n- suggestions, ghost text and Tab cycling in the console ([1155d74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1155d74393e9eb286b3b23096d099b47372c168b))\n- complete console commands in the browser ([34257d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F34257d564582526c89f3be8174ddd6d91b34c474))\n- serve each server's command catalogue to the console ([e1dc152](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe1dc15221ea59e7677a948982dbde9a00d445d34))\n- read the game's command tree and help for console completion ([4db2c17](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4db2c17a309470cdac2895efca2491914abddf6d))\n- right-click and ⋯ menus on Content items ([9ed0a34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ed0a34c9b10a1ae5d5492eb122667de1ac7cb41))\n- right-click menus on Backups rows ([00cde07](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00cde07b4e66f42aa71e9d4ec85c34704648f604))\n- right-click menus on Files rows, with Copy path ([9d51571](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9d515716adc667c36bbdfd1d7521e6f17cd0682e))\n- download links work from the phone action sheet ([b81fa22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb81fa22d897e87c489784dc11ab242702d7e02cb))\n- **panel:** show the rest of the machine in parts on System, with Clean up ([c698284](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc698284529266fc5c019bea68ec3f616c83862cc))\n- ActionTarget renders the card or row itself, so it works inside tables ([52f8aeb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F52f8aebb3bd3c83a5ce09b54c5e1959cda427b90))\n- **panel:** measure disk use through the agent, with clean up ([81c3de8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81c3de829fef70efcb7c539d5162d6099868afe3))\n- per-browser switch for right-click menus ([e741c14](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe741c14589f2c4c53053fd91ed21db61092209b8))\n- right-click and ⋯ menus on server cards ([b626ee4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb626ee49b7dc585e157201850f3e60abafed27ae))\n- open clone, delete and back-up confirms from a link ([d064f9b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd064f9b47c9f4f8e21a58aa1b8c4d5f26e31697d))\n- ActionTarget wrapper with keyboard, long-press sheet and browser-menu pass-through ([e56e519](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe56e51907b3099ecc83c23817d1acd3801343402))\n- rules for right-click menus and the server action list ([ca161c7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fca161c740e81960b56f65728fa746f3ccaa63e95))\n- **agent:** disk verbs in the Rust agent ([22e1a29](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22e1a29e5d2f02cc2262e89812234b323390ddbc))\n- show tick time, memory and CPU on the servers overview, with charts in a pop-up ([92a20a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92a20a2aae5fe97ce0c4d5e5705454297559805a))\n- publish each server's last hour of figures for the servers overview ([a4f0f18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa4f0f1857832d8214796e74113ac6a0c660e6cca))\n- move Stats onto the Players tab ([d8ca54b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8ca54bdf77640aa295392be33aebc5b2de1aa38))\n- open logs and crashes in a pop-up from the Console ([462119c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F462119cae593347b9616b9d0a5ecdbc6cced26b3))\n- split World and Settings into sections, with Backups, Schedules and YAML inside them ([5d4e6b7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5d4e6b70c68a631107d5e949171e039151cf8a00))\n- **agent:** measure disk use and clean up as root ([b7b0689](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b0689e89a6e3598347a259cf5230b1bed77869))\n- **protocol:** disk.usage and three clean-up verbs ([974b233](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F974b2334362224a8a967d3fb6dcb1ca666be5d5a))\n- link the map from the public page once it's drawn ([8682411](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F868241199515f6c6816d9d1b78e584fb03312082))\n- link a public web map from \u002Fstatus in Discord ([abd9cef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabd9cef298617817c50051a862ec574f1990dbed))\n- link the web map from the public status page ([b13438f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb13438fe42c81a0795e15c28b219895251a63e96))\n- include a public web map in the server's public status ([abfa5d1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabfa5d15d407d4be0557a0f9c7faeea834e74cb9))\n- open and share the map from the World tab ([5fee78d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fee78d05a8942a313ae74c7d3d4bfd84fdb0b16))\n- our own web map viewer ([f5df022](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff5df022bc7215719e09a9dfb7b5bba7d8dec7c9c))\n- serve the web map at \u002Fs\u002F\u003Cname>\u002Fmap\u002F ([6c37c83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6c37c835ab4544542607d022caa29e18f873ad04))\n- show the web map on a server's own hostname ([6a013b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6a013b2417f8153e32f4d862222547e57026cf33))\n- ship the Rust agent behind an opt-in switch ([8d8ad1f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8d8ad1fa8b0d9ebf1b7d9a56402c98cea623916b))\n- ship flytower-map in the release ([3a137b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a137b443700644fcfdabc0a0575479fb18bb4fe))\n- web map card on the World tab ([4261b98](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4261b982f900d8171594b9e4341d23e9c2f9283b))\n- map settings, status and drawing through the API ([948467e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F948467e73adaf70d19d95d08cc554d935c17aab1))\n- the panel keeps web maps drawn with flytower-map ([dec01b7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdec01b7534aa7e471e72559ece283efb9f3fe703))\n- disk use counts each server's web map ([3c6a04a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c6a04a16a3071c46c4556d85350b1961a83ab0d))\n- port the update verbs to the Rust agent ([ee3b38e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee3b38e37e0cfafe04a0edaab6fda3bc016b79d1))\n- check release signatures in the Rust agent ([d3771df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd3771dfc0ac493baebd796dce24bc3b66bd19119))\n- the web map has an on switch, off by default ([d1c4acc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd1c4acc4b882e60c46134cf5e5eb69eca734f250))\n- carry web map settings in the server spec ([9426a4e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9426a4e5b37d425e75192349cc78f181650ef5a2))\n- add per-server web map settings ([b497943](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb49794300575d8ccc259c52e931c1dc2f2adfeb2))\n- providers find the client jar for the web map ([827877e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F827877eecf0b0f78c0b35fef1ddb531346b879ee))\n- flytower-map palette builds colours from the client jar ([65ac095](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65ac095383138fc2084952d4aa40cbc7ea46a53e))\n- flytower-map reads files from the client jar ([9954278](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9954278747a2edfd18ef977f911b737248a6ff77))\n- port runtime.install to the Rust agent ([8ad5a18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ad5a18ca2ab07a9d9cef1be1893a8c7c7b7fa34))\n- verified downloads in the Rust agent ([75fc541](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F75fc541843c877471d843a354d498e28e8724179))\n- port the SSH verbs to the Rust agent ([1a9bc9a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a9bc9a9d48b537e6159e1e323ecf3e6d0cee55a))\n- read ISO times back in the Rust agent ([21f9d19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21f9d194acad8ddbc3b18b1c34f7ebddca8e0f24))\n- port the server lifecycle verbs to the Rust agent ([31f905d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31f905d7e8c6877b58de57f5570d80f02738ac3b))\n- share the server unit template between both agents ([916c956](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F916c9567117035c920853184023e2d0b2a8c811d))\n- flytower-map command line, with end-to-end tests ([8cb56b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8cb56b6ad71ed8c72e982000cf513dd431f4e0af))\n- flytower-map draws tiles and only redraws what changed ([df212a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf212a25a35d7f370ce0998d646b02811cc100b7))\n- flytower-map decodes chunks against a colour palette ([0bee795](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0bee7957a0f1b2cd1f412327695fca261c1d5e6c))\n- flytower-map crate reads NBT and region files ([0aeb9cf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0aeb9cfb4f591eaee75d499aa62c74389fa06395))\n- add \u002Fwhitelist, \u002Frestart, \u002Fbackup and \u002Fsay for Discord staff ([e7f13fa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7f13fa191456263552c848de1be9dea59faf98c))\n- let Discord commands have sub-commands, choices and follow-ups ([f93b4b9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff93b4b94bfaebea9cf61c230c3b145b77105f19c))\n- register the stats commands with the panel's stats rules ([6e163b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e163b4dd75205382d24cd065b5796d97448a4b1))\n- add \u002Fleaderboard and \u002Fstats Discord commands ([c05d99c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc05d99cec7f2f7a1bd5384346ae6b4ce86c48f92))\n- let Discord command options offer fixed choices ([937fac0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F937fac070810f9a754d9ae59240dcbb865397985))\n- Discord chat card on the server's settings ([b7b9e4a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b9e4a1e87adb094e63c8d5ceb6090a9a4584f2))\n- relay each server's chat to its Discord channel, with signed player heads ([58b4c0c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F58b4c0cb70329d6dd705ebb4bc864f01d9f3c4ca))\n- post game chat to a Discord webhook within its rate limits ([2147dfa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2147dfae72fbced1a06f29974e2a4f690096b394))\n- draw a player's face from their skin for avatars ([2fe9c4e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2fe9c4e8c0c98344efd8ce8a1ce59b4e5d6a0787))\n- show leaderboards on the public status page ([1915a5c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1915a5c9ecd6373506d473e9aa313e2da99be490))\n- serve public leaderboards and the heads on them ([79e7592](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F79e7592f180fc65c863312409c8af1d2db4a825d))\n- add an optional leaderboard setting to the public page ([8b1e095](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8b1e095de51d8e55e66d3ed95c8319569f1e4c9b))\n- store a server's Discord chat relay settings ([b9776cc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9776cc83143e2e9fc1939639d95897937e09f79))\n- map Discord roles to Flytower roles on the Discord card ([169e7d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F169e7d502626b176e1d876937b6ce6e301a58477))\n- show Discord actions in Activity as \"Name via Discord\" ([4b56f37](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b56f3707361e60fce0e45b983060d9080604196))\n- give Discord members the Flytower roles mapped to their Discord roles ([230c9f0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F230c9f080ba8d794be6afa0dca578739bd0c59ef))\n- add a Stats tab with leaderboards and player cards ([df68235](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf6823522bfae02331002c47509328f496d6eedf))\n- serve a server's leaderboards for all time, this month and this week ([7834438](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7834438c62aad12e923b85f150da135595190dec))\n- build leaderboards and player cards from the stats snapshot ([18e1bfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18e1bfc24d6fb5c652d73047d377d6f3c2d336f9))\n- send the command list to Discord when it changes ([867a6f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F867a6f5e9bb81afb3b76d8ce32bc8acf3c1382fe))\n- answer \u002Fstatus and \u002Fplayers from the status page's roster ([c3d3541](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3d3541b2eee0aacefcf3f9985f765f35b115efe))\n- add a slash command registry for the Discord app ([b3992a5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb3992a57eb3e292c1f9a54359f23d6747ba78634))\n- let people turn stats off and leave players out ([eb79238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb79238aa2c1fc718a1b73f0b4d070801a7bfb6f))\n- carry player stats settings in the server spec ([80071f2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F80071f242dce2fb5fb77f45214c695afdd184d18))\n- add per-server player stats settings ([5e7dad5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e7dad52a747806c97c7b856ab550afaf3648e44))\n- **panel:** Learn more links beside settings open the right heading ([5bccc33](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5bccc33f76939ea45ebe5304b5912c314b29a778))\n- **panel:** a ? on every page opens its help beside it ([db2abb3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdb2abb3ad21fd173fa822c9803260d7c5878005e))\n- **panel:** Help, the docs for the installed version, with search ([7221347](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7221347c3eb57ff4183bdc4f672bdd742e7ab6a4))\n- **docs:** a shared docs layer for the panel and the website ([5ee4f18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ee4f18711e83900b4ab266539d091eaa775f34e))\n- schedule the stats snapshot and add stats routes ([6572cb7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6572cb7d31604dbd99f2c29af89a5aab73149ef0))\n- take a daily snapshot of chosen player stats ([5fcb69f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fcb69f8d8bfc64ca829ff260af5fc71b765cc81))\n- add the player stats table ([e9ad70e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe9ad70e72c260558e9e3176bbc8d62a4055be22e))\n- add System, Integrations with the Discord app card ([ae7948e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae7948e38e56870904d025bcf900ff9f0894a1a0))\n- answer Discord's interactions endpoint ([a7bdb5d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa7bdb5dd51cfc70c22b3b062ee6c4a9771c8b282))\n- connect a Discord app from its bot token ([fc12f9a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffc12f9a3f587a737cef12baeb3689778e58297b7))\n- check Discord interaction signatures with Ed25519 ([6de5a5d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6de5a5d20ceb69f5c16169d61fd27539a5f0b0de))\n- follow the journal for service.wait in the Rust agent ([c23ee50](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc23ee50fa7415f5e1b6f9f603df6e84505bd96ea))\n- wire player sessions into crashes, deletes and boot, with a players summary route ([f1c9c03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1c9c03ca6ead9cbcd003fdb4b477cee8d7deb89))\n- record player sessions from join and leave lines ([2434b21](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2434b21d58230380674d0c8cbe6626ed668985d4))\n- let the log watcher pass on raw lines ([1ef8db7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ef8db734d32e317ca18e47c499b13855bf3adbc))\n- add player sessions and names tables ([ed574df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fed574df594924880cfe2b14678037829526cb53e))\n- port the service verbs to the Rust agent ([25cdd23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F25cdd23ec91ed29ebd4618900ebec7dbf9636fae))\n- run programs from the Rust agent without a shell ([3193042](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31930426a70860fb95da3575fb3d6a9596190ac7))\n- serve the Rust agent on the agent socket with a peer check ([3d56695](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3d5669555996305d60c41829af7b861b5b2980a9))\n- dispatch requests and write the audit log in the Rust agent ([50413ca](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50413ca3b2cdbea5d9c1513991173cf54a3dd45a))\n- add the Rust agent's protocol types ([48b3ce9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48b3ce97179e7bd7e7b3ed0619803a624adc433d))\n- **updates:** number native builds after the release they go with ([8270b4f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8270b4fc42df6b7a0478d547cddc61989404c4a8)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **installer:** --native installs the newest native build ([d79b6ac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd79b6ac662e923ad4f1b7df7f95a18b55fe6843e)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **agent:** download native builds from their own tag ([9b5c93b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9b5c93bd7b9ae00bd77beb1b6324059330936895)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **updates:** a Native channel for builds of the native branch ([478652b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F478652b846657641e2ff0cb92ea29ec564447442)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **disk:** measure with flytower-du when it's there ([f1a40d3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1a40d3c2aee36b864556f22d577508c472941d9)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **du:** add flytower-du, a Rust disk walker ([f64592b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff64592b93a495b1ee154ad346d8be2212118b24f)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **installer:** start the agent through bin\u002Fflytower-agent ([d957684](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd957684c7e9bc0c83ab0fd3cfad2714ba2023a2a)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **agent:** start the agent and updater through the stable entry points ([d6a6276](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd6a6276f337db3fb0e981b0ce504aca36fb71953)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **agent:** ship stable flytower-agent and flytower-updater entry points ([b961480](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb961480542b64d56c1a3fd8b61fd4fe85fc9f014)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **protocol:** export the agent protocol as JSON Schema ([85cae8e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F85cae8e453941509abad8bd113b44536bd80935b)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n\n### Fixes\n\n- console say, me and msg show under [Server] and your name, not Rcon ([d4a61c6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd4a61c670b2c6dde57b7c43747e93c436fb2ee23))\n- add server hostnames to an old Caddyfile in the Rust agent too ([06bcb26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F06bcb26fe8c5e0da878eb2073c1855806245e4e6))\n- add server hostnames to an old Caddyfile when the agent starts ([d728ea0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd728ea086056fc85406a68b8041d4bcbacb6ac79))\n- post joins and leaves as plain text, like the rest of the chat relay ([f54de7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff54de7d589ad735665f9bf5ffb6efc783ad07c42))\n- show join and leave lines in Discord chat ([22ee71b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22ee71b477517a33fccd1e3cf7e4c0b266eeae4a))\n- redraw every map once with the fixed renderer ([687ec95](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F687ec95270a10de419c20a914e5e9e2a76979ae5))\n- read block names the way Minecraft 26.3 saves them ([0b5f92c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0b5f92c02a0fa1994bf42222995244ac950e093a))\n- open the newest log straight away, and keep Back closing the logs pop-up ([e888bbc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe888bbcd8f645daa78dd0dd5532ffa1c19908b68))\n- point links, notifications and help at the new server sections ([5ec964a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ec964ae354ac61d9ee2e192246ca6b522b55871))\n- give the Rust agent steps inline ([c3ca6ac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3ca6ac4149c2600f8751cc806c34d4ff8ac175f))\n- wrap the saved webhook on narrow screens ([2878c98](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2878c98deec06f248b8ba5b6b34428251fe837d8))\n- give the Discord test status the leaderboard field ([cf49b5a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf49b5a336da3b31b926c0a5a85e19350f058e6f))\n- check Manage people first when saving Discord roles ([ec63bc1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fec63bc1dfa45175b174fe48b9308eda8c9da318e))\n- list the leaderboards route in the permission table ([64a67ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F64a67ce3900605d3fcd8bded1f165c0a551a6221))\n- show leaderboard icons and label each figure on player cards ([e7d8ed2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7d8ed23b88728a110579bca2c94aeb5582a88a9))\n- **panel:** serve the help docs' database from its route instead of prerendering it ([9ba3eb3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ba3eb31d2ba1f7b8d65553566efe58dc193cd6a))\n\n### Docs\n\n- release notes for 1.3.0 and its native build ([e82f1df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe82f1dfb33f39b3c3f159b30f9b4c69971b8e0ba))\n- add system disk use to the 1.3.0-beta.3 notes ([ab864d1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fab864d149f3afe2fb06645d36436668b456d70ae))\n- keyboard shortcuts page and 1.4.0 testing notes ([cc45797](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc457978fd8fdbd03412a5c97987b26604f1d3e9))\n- release notes for 1.3.0-beta.3 and its native build ([4c1cc31](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c1cc31886280a903ca61270af0ee1bda3ba13e4))\n- hostnames start working after an update, no installer re-run ([53cb5c4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53cb5c4e8c5c164559de01e10f286256606a1334))\n- testing notes for the remaining right-click menus ([fdbd9d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffdbd9d59f89f025679c36097d0af5ab74bac558e))\n- console autocomplete testing notes ([cf19e3c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf19e3c75aff9294b4bf6aee6912e7baefc233ee))\n- release summary for 1.3.0-beta.2 ([579cebd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F579cebd84facce001936a7f85e9c3c6edc2c55ad))\n- command palette testing notes ([73d333f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73d333f919d29b4327ecb6db0dc3a5f4391118b5))\n- typing commands in the console ([48ac8bd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48ac8bdaadbec620b4b39188fe894cae09bb7c3a))\n- testing notes for list right-click menus ([501ebcc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F501ebcccc4e9c61c6661391a48d4af8a5ddc7201))\n- right-click menus and 1.4.0 testing notes ([e0ff693](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe0ff693b2539cf7fcb2b98d54e1dea6a0e2e9cdb))\n- native builds come from main now ([98f4cc0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98f4cc0fd4f7940804deb5fc4533cd48a4f4f9b0))\n- release notes for 1.3.0-beta.1 and its native build ([9159656](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F915965641b2250e710093e2b5c83faaa7bbf41fd))\n- the web map, drawn by Flytower ([22d7b68](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22d7b6877ca4e5a9813ff3b3f4357d8a040e501d))\n- give the player stats page its Help section and order ([28df4c6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F28df4c6906d9f669dc9ecd473faf7dc2460af74d))\n- describe the Discord staff commands ([d07764b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd07764b85530440a85c0192c892d89ed1b0b0d2c))\n- help frontmatter for the Discord page; move the 1.3.0 test script ([e387eb9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe387eb9d16690b2e36d505009d7a7bfdd6578dee))\n- \u002Fleaderboard and \u002Fstats in Discord ([ac16e7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fac16e7b940d2b2d7543dd7f4570fcaa667a758cf))\n- game chat to Discord, and how to test it ([4d2d5ad](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d2d5adb0490ab89fad27f17d6ed76ace247db9c))\n- leaderboards on the public status page ([c67c26f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc67c26f34298a8d33da0879da3473e8c84c8b8fe))\n- add Discord roles to the 1.3.0 testing checklist ([f909aa5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff909aa5819f72dd70c7e6700caa25c4cb366bbae))\n- explain Discord role mapping ([b572a22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb572a224631d29b55a84ab5a6e68b7b1b9e05628))\n- explain player stats and the leaderboards ([e04df36](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe04df362e8b1cf4babfd8828802c48cc9afe36f7))\n- describe the Discord commands and how to test them ([c032092](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc0320920c820b275648b3e80a0921024712bf59d))\n- testing notes for Help in the panel ([c979d6b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc979d6bddee533e59cba42d9db11b3e7c80b3469))\n- give every page a section, an order and the panel routes it explains ([f02f7a3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff02f7a32cfed69ddb92dcadf88739ee37974a36c))\n- move release test scripts into docs\u002Ftesting ([9968c23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9968c23b7262a58c9d9a66a95976f338cb662fb4))\n- explain connecting a Discord app ([5b9e567](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5b9e5672666b2f7ecfa9ee92586e9c43a6979c6f))\n- 1.2.1-native.1 release summary ([142f156](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F142f156fc7dc38cb4a0274e538a7a413b6796659))\n- release summary for 1.2.0-beta.2.native.1 ([a51b4ef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa51b4ef63a3009c54f587b3c170aef4d82a54d3e))\n- record the decision to bring in Rust and Go ([1b954ab](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b954aba7ba6890cf938201999d8c994e9013d02)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n\n### Other\n\n- go back to the console before the crash banner check ([ff3fd59](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff3fd59c125bb240479b8597f779a797132aecd9))\n- share the per-browser on\u002Foff switch ([4c15618](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c156189100085a45a4e7a8edf9735bc788a57eb))\n- don't reuse a name the smoke test already declares ([d9f5166](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd9f516613937e2fed08a24bb9e3689b8cd38bb67))\n- check console completion against a real server in E2E ([ebc1b96](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Febc1b9605b1a204cdaf2fe7621c74f3ae6d72bba))\n- **panel:** the clean-up route needs system.manage ([30c0a75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F30c0a750a02e62e55c905f5e101320e3af2beedd))\n- share the copy-with-toast helper between menus ([1ffe81c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ffe81ce3730e3205ef679dd56ba1f883209ffbe))\n- right-click menu on a running server card in E2E ([48e8af3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48e8af35471ced319ecf941f0c566bfc247f2186))\n- give the map's maximum-wait test room on a busy runner ([7a1e449](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7a1e449f946c2cc1f0615f2dd094394676b6c0ec))\n- put the stats view in its own component so it can move pages ([7cb89d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7cb89d6c104d629054f4e777ee903708828c9f94))\n- cover the Discord staff commands ([121aa25](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F121aa25655bf9f60416ae9f7745863f7935e209f))\n- share player and power actions between the panel and Discord ([a3f388f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa3f388facb2fc6ffc77da177ea1433bc46d3919c))\n- list the Discord role routes in the permission table ([b8e731d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb8e731dd943031a0350c2094e6e04448991867f8))\n- cover Discord role mapping, refusals and Activity ([2644a19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2644a19f1ff8f5da504af138ff80269d90b1a887))\n- build a server's public status in one place ([b993e3f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb993e3fc3b77a65f0a16bd3fcff6e941b64634b5))\n- **panel:** rename parseMarkdown to parseNotes ([c27e9ee](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc27e9ee8f86c31c62e7838c3ba8c6ffcc54be4b2))\n- recognise native versions like 1.2.0-beta.2.native.1 ([8253e5c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8253e5cdf990733ce21fa05f468d42e929bbb3eb)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- release native builds under native- tags ([6505c61](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6505c6179b4d93a9d9b1386916b2e70a4f1ab503)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- build flytower-du into releases and check it on amd64 and arm64 ([5fa5272](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fa527286394087cd76424ff1e675d92ba3a6546)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **protocol:** shared fixtures every implementation must agree on ([a048004](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0480047f4f211eb631c8aa6ba931b1ad23c0be0)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n\n### Other changes\n\n- Merge main into feat\u002Fkeyboard-shortcuts ([284de08](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F284de08565952c7a7a607587edbcb5a10b8eca30))\n- Merge main into feat\u002Fright-click-more ([74b5dd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F74b5dd33fa9f006b37880b77f3297bb642faaf95))\n- Merge main into feat\u002Fkeyboard-shortcuts ([dee37e0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdee37e0b956d422c27fd8ed6c28be2d26849bca6))\n- Merge main into feat\u002Fsystem-disk-use ([fddc78a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffddc78a4e252aeb84b1c6ceb2d288c36f377f2bd))\n- Merge main into feat\u002Fsystem-disk-use ([18485b3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18485b32af63d384a89e7d9001621bf93853b6e0))\n- Merge main into feat\u002Fsystem-disk-use ([165e561](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F165e561f8cc0f2860efe3ca9843a81591f385564))\n- Merge main into feat\u002Fsystem-disk-use ([3b03cfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3b03cfca874e1d73e6e2051bd22e3daa28d829cd))\n- Merge main into feat\u002Fserver-tabs ([0ed6057](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0ed60579436e733221940ae47dd24dbe96f84656))\n- Merge main into feat\u002Fmap-public ([cc45486](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc45486beb1c0b9714098643626867d0afe2eaf8))\n- Merge main into feat\u002Fmap-panel; renumber the map migration to 0021 ([78d26aa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78d26aaee6f7150d3700486ad4a0667e1c0ea75c))\n- Merge main into feat\u002Fmap-renderer ([134ffd0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F134ffd089ce48b8edcb9baef205fad282b5b3c2d))\n- Merge main into feat\u002Fdiscord-staff-commands ([4c27238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c27238ca70bcd2cdc9933907559ba99b3fbcdbb))\n- Merge main into feat\u002Fdiscord-roles ([2dec38f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2dec38f71d8788640f389223688af29231059e9e))\n- Merge v1.2.1 into native ([9edc05a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9edc05ab72c6a6352bbfa46bb7b516086c64d88a))\n- Merge v1.2.0-beta.2 into native ([b389c71](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb389c71d2577ee7ca221bbdda32b84aa752ccc90))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.1...v1.3.0",{"version":983,"date":984,"url":985,"beta":945,"body":986},"1.3.0-beta.3","2026-11-10T20:14:00Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nThe 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.\n\n**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**.\n\nDiscord 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.3\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md), and disk use is in [testing-1.4.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.3\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md).\n\n### Features\n\n- post deaths and advancements to Discord chat ([afd6213](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fafd621399238150fc3e98686b17aeb77292adb96))\n- map markers glide between player positions ([ae98c9e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae98c9e070e04fa6623dc9c3090c92019a696060))\n- ask for player positions every second, and dimensions less often ([9fed6c5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9fed6c582f22dd8fa094471da1e5b520f03ad1d8))\n- ship the Rust updater behind the same switch ([7fcc888](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7fcc88831a839dc75ba557f655b04d2b7607dfb0))\n- port the updater to Rust ([e8dfcfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8dfcfc3890ebaaddf3c983eaf653632280098c6))\n- command palette on Ctrl + K with servers ahead of help ([9048e82](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9048e82e671ed701e6cd9e9ac0af00c070141a36))\n- palette links with recent servers and pages ([11d04b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F11d04b6f086d3bc9203898124026438f7d5693bf))\n- palette entries for servers, their tabs and actions ([292317c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F292317cec34f80112857839acdcb37bb98b73593))\n- **panel:** head the rest of the machine, and show the journal's size ([b34bd32](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb34bd3265294031c6b0858f37c9fa98203346abc))\n- suggestions, ghost text and Tab cycling in the console ([1155d74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1155d74393e9eb286b3b23096d099b47372c168b))\n- complete console commands in the browser ([34257d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F34257d564582526c89f3be8174ddd6d91b34c474))\n- serve each server's command catalogue to the console ([e1dc152](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe1dc15221ea59e7677a948982dbde9a00d445d34))\n- read the game's command tree and help for console completion ([4db2c17](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4db2c17a309470cdac2895efca2491914abddf6d))\n- right-click and ⋯ menus on Content items ([9ed0a34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ed0a34c9b10a1ae5d5492eb122667de1ac7cb41))\n- right-click menus on Backups rows ([00cde07](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00cde07b4e66f42aa71e9d4ec85c34704648f604))\n- right-click menus on Files rows, with Copy path ([9d51571](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9d515716adc667c36bbdfd1d7521e6f17cd0682e))\n- download links work from the phone action sheet ([b81fa22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb81fa22d897e87c489784dc11ab242702d7e02cb))\n- **panel:** show the rest of the machine in parts on System, with Clean up ([c698284](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc698284529266fc5c019bea68ec3f616c83862cc))\n- ActionTarget renders the card or row itself, so it works inside tables ([52f8aeb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F52f8aebb3bd3c83a5ce09b54c5e1959cda427b90))\n- **panel:** measure disk use through the agent, with clean up ([81c3de8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81c3de829fef70efcb7c539d5162d6099868afe3))\n- per-browser switch for right-click menus ([e741c14](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe741c14589f2c4c53053fd91ed21db61092209b8))\n- right-click and ⋯ menus on server cards ([b626ee4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb626ee49b7dc585e157201850f3e60abafed27ae))\n- open clone, delete and back-up confirms from a link ([d064f9b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd064f9b47c9f4f8e21a58aa1b8c4d5f26e31697d))\n- ActionTarget wrapper with keyboard, long-press sheet and browser-menu pass-through ([e56e519](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe56e51907b3099ecc83c23817d1acd3801343402))\n- rules for right-click menus and the server action list ([ca161c7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fca161c740e81960b56f65728fa746f3ccaa63e95))\n- **agent:** disk verbs in the Rust agent ([22e1a29](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22e1a29e5d2f02cc2262e89812234b323390ddbc))\n- show tick time, memory and CPU on the servers overview, with charts in a pop-up ([92a20a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92a20a2aae5fe97ce0c4d5e5705454297559805a))\n- publish each server's last hour of figures for the servers overview ([a4f0f18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa4f0f1857832d8214796e74113ac6a0c660e6cca))\n- move Stats onto the Players tab ([d8ca54b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8ca54bdf77640aa295392be33aebc5b2de1aa38))\n- open logs and crashes in a pop-up from the Console ([462119c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F462119cae593347b9616b9d0a5ecdbc6cced26b3))\n- split World and Settings into sections, with Backups, Schedules and YAML inside them ([5d4e6b7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5d4e6b70c68a631107d5e949171e039151cf8a00))\n- **agent:** measure disk use and clean up as root ([b7b0689](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b0689e89a6e3598347a259cf5230b1bed77869))\n- **protocol:** disk.usage and three clean-up verbs ([974b233](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F974b2334362224a8a967d3fb6dcb1ca666be5d5a))\n\n### Fixes\n\n- add server hostnames to an old Caddyfile in the Rust agent too ([06bcb26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F06bcb26fe8c5e0da878eb2073c1855806245e4e6))\n- add server hostnames to an old Caddyfile when the agent starts ([d728ea0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd728ea086056fc85406a68b8041d4bcbacb6ac79))\n- post joins and leaves as plain text, like the rest of the chat relay ([f54de7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff54de7d589ad735665f9bf5ffb6efc783ad07c42))\n- show join and leave lines in Discord chat ([22ee71b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22ee71b477517a33fccd1e3cf7e4c0b266eeae4a))\n- open the newest log straight away, and keep Back closing the logs pop-up ([e888bbc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe888bbcd8f645daa78dd0dd5532ffa1c19908b68))\n- point links, notifications and help at the new server sections ([5ec964a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ec964ae354ac61d9ee2e192246ca6b522b55871))\n\n### Docs\n\n- add system disk use to the 1.3.0-beta.3 notes ([ab864d1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fab864d149f3afe2fb06645d36436668b456d70ae))\n- release notes for 1.3.0-beta.3 and its native build ([4c1cc31](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c1cc31886280a903ca61270af0ee1bda3ba13e4))\n- hostnames start working after an update, no installer re-run ([53cb5c4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53cb5c4e8c5c164559de01e10f286256606a1334))\n- console autocomplete testing notes ([cf19e3c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf19e3c75aff9294b4bf6aee6912e7baefc233ee))\n- command palette testing notes ([73d333f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73d333f919d29b4327ecb6db0dc3a5f4391118b5))\n- typing commands in the console ([48ac8bd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48ac8bdaadbec620b4b39188fe894cae09bb7c3a))\n- testing notes for list right-click menus ([501ebcc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F501ebcccc4e9c61c6661391a48d4af8a5ddc7201))\n- right-click menus and 1.4.0 testing notes ([e0ff693](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe0ff693b2539cf7fcb2b98d54e1dea6a0e2e9cdb))\n\n### Other\n\n- go back to the console before the crash banner check ([ff3fd59](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff3fd59c125bb240479b8597f779a797132aecd9))\n- don't reuse a name the smoke test already declares ([d9f5166](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd9f516613937e2fed08a24bb9e3689b8cd38bb67))\n- check console completion against a real server in E2E ([ebc1b96](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Febc1b9605b1a204cdaf2fe7621c74f3ae6d72bba))\n- **panel:** the clean-up route needs system.manage ([30c0a75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F30c0a750a02e62e55c905f5e101320e3af2beedd))\n- share the copy-with-toast helper between menus ([1ffe81c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ffe81ce3730e3205ef679dd56ba1f883209ffbe))\n- right-click menu on a running server card in E2E ([48e8af3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48e8af35471ced319ecf941f0c566bfc247f2186))\n\n### Other changes\n\n- Merge main into feat\u002Fsystem-disk-use ([fddc78a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffddc78a4e252aeb84b1c6ceb2d288c36f377f2bd))\n- Merge main into feat\u002Fsystem-disk-use ([18485b3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18485b32af63d384a89e7d9001621bf93853b6e0))\n- Merge main into feat\u002Fsystem-disk-use ([165e561](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F165e561f8cc0f2860efe3ca9843a81591f385564))\n- Merge main into feat\u002Fsystem-disk-use ([3b03cfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3b03cfca874e1d73e6e2051bd22e3daa28d829cd))\n- Merge main into feat\u002Fserver-tabs ([0ed6057](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0ed60579436e733221940ae47dd24dbe96f84656))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.0-beta.2...v1.3.0-beta.3",{"version":988,"date":989,"url":990,"beta":945,"body":991},"1.3.0-beta.2","2026-11-10T18:58:04Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nWhile 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.\n\nTesting: 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.2\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md).\n\n### Features\n\n- show a progress bar while the web map is drawn ([3bad87a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3bad87a634a128c2afb137a1e44187ce79143d32))\n- the map service passes on how far a draw has got ([4dca738](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4dca7380906de90b7e510c09d8e5f511de85cb53))\n- flytower-map reports progress as it draws ([be67347](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbe673477a6664e0941c2d62cc2325aa100cdbced))\n\n### Fixes\n\n- redraw every map once with the fixed renderer ([687ec95](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F687ec95270a10de419c20a914e5e9e2a76979ae5))\n- read block names the way Minecraft 26.3 saves them ([0b5f92c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0b5f92c02a0fa1994bf42222995244ac950e093a))\n- give the Rust agent steps inline ([c3ca6ac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3ca6ac4149c2600f8751cc806c34d4ff8ac175f))\n\n### Docs\n\n- release summary for 1.3.0-beta.2 ([579cebd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F579cebd84facce001936a7f85e9c3c6edc2c55ad))\n- native builds come from main now ([98f4cc0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98f4cc0fd4f7940804deb5fc4533cd48a4f4f9b0))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.0-beta.1...v1.3.0-beta.2",{"version":993,"date":994,"url":995,"beta":945,"body":996},"1.3.0-beta.1","2026-11-10T18:09:26Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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 `\u002Fstatus`, `\u002Fplayers`, `\u002Fleaderboard` and `\u002Fstats` work straight away. Give a Discord role a Flytower role and its members can use `\u002Fwhitelist`, `\u002Frestart`, `\u002Fbackup` and `\u002Fsay`, 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Fstats.md) and [Discord](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Fdiscord.md).\n\nServers 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md)). See [Web map](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Fmap.md).\n\nThis 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md).\n\n### Features\n\n- link the map from the public page once it's drawn ([8682411](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F868241199515f6c6816d9d1b78e584fb03312082))\n- link a public web map from \u002Fstatus in Discord ([abd9cef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabd9cef298617817c50051a862ec574f1990dbed))\n- link the web map from the public status page ([b13438f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb13438fe42c81a0795e15c28b219895251a63e96))\n- include a public web map in the server's public status ([abfa5d1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabfa5d15d407d4be0557a0f9c7faeea834e74cb9))\n- open and share the map from the World tab ([5fee78d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fee78d05a8942a313ae74c7d3d4bfd84fdb0b16))\n- our own web map viewer ([f5df022](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff5df022bc7215719e09a9dfb7b5bba7d8dec7c9c))\n- serve the web map at \u002Fs\u002F\u003Cname>\u002Fmap\u002F ([6c37c83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6c37c835ab4544542607d022caa29e18f873ad04))\n- show the web map on a server's own hostname ([6a013b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6a013b2417f8153e32f4d862222547e57026cf33))\n- ship the Rust agent behind an opt-in switch ([8d8ad1f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8d8ad1fa8b0d9ebf1b7d9a56402c98cea623916b))\n- ship flytower-map in the release ([3a137b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a137b443700644fcfdabc0a0575479fb18bb4fe))\n- web map card on the World tab ([4261b98](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4261b982f900d8171594b9e4341d23e9c2f9283b))\n- map settings, status and drawing through the API ([948467e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F948467e73adaf70d19d95d08cc554d935c17aab1))\n- the panel keeps web maps drawn with flytower-map ([dec01b7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdec01b7534aa7e471e72559ece283efb9f3fe703))\n- disk use counts each server's web map ([3c6a04a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c6a04a16a3071c46c4556d85350b1961a83ab0d))\n- port the update verbs to the Rust agent ([ee3b38e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee3b38e37e0cfafe04a0edaab6fda3bc016b79d1))\n- check release signatures in the Rust agent ([d3771df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd3771dfc0ac493baebd796dce24bc3b66bd19119))\n- the web map has an on switch, off by default ([d1c4acc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd1c4acc4b882e60c46134cf5e5eb69eca734f250))\n- carry web map settings in the server spec ([9426a4e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9426a4e5b37d425e75192349cc78f181650ef5a2))\n- add per-server web map settings ([b497943](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb49794300575d8ccc259c52e931c1dc2f2adfeb2))\n- providers find the client jar for the web map ([827877e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F827877eecf0b0f78c0b35fef1ddb531346b879ee))\n- flytower-map palette builds colours from the client jar ([65ac095](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65ac095383138fc2084952d4aa40cbc7ea46a53e))\n- flytower-map reads files from the client jar ([9954278](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9954278747a2edfd18ef977f911b737248a6ff77))\n- port runtime.install to the Rust agent ([8ad5a18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ad5a18ca2ab07a9d9cef1be1893a8c7c7b7fa34))\n- verified downloads in the Rust agent ([75fc541](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F75fc541843c877471d843a354d498e28e8724179))\n- port the SSH verbs to the Rust agent ([1a9bc9a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a9bc9a9d48b537e6159e1e323ecf3e6d0cee55a))\n- read ISO times back in the Rust agent ([21f9d19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21f9d194acad8ddbc3b18b1c34f7ebddca8e0f24))\n- port the server lifecycle verbs to the Rust agent ([31f905d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31f905d7e8c6877b58de57f5570d80f02738ac3b))\n- share the server unit template between both agents ([916c956](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F916c9567117035c920853184023e2d0b2a8c811d))\n- flytower-map command line, with end-to-end tests ([8cb56b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8cb56b6ad71ed8c72e982000cf513dd431f4e0af))\n- flytower-map draws tiles and only redraws what changed ([df212a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf212a25a35d7f370ce0998d646b02811cc100b7))\n- flytower-map decodes chunks against a colour palette ([0bee795](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0bee7957a0f1b2cd1f412327695fca261c1d5e6c))\n- flytower-map crate reads NBT and region files ([0aeb9cf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0aeb9cfb4f591eaee75d499aa62c74389fa06395))\n- add \u002Fwhitelist, \u002Frestart, \u002Fbackup and \u002Fsay for Discord staff ([e7f13fa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7f13fa191456263552c848de1be9dea59faf98c))\n- let Discord commands have sub-commands, choices and follow-ups ([f93b4b9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff93b4b94bfaebea9cf61c230c3b145b77105f19c))\n- register the stats commands with the panel's stats rules ([6e163b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e163b4dd75205382d24cd065b5796d97448a4b1))\n- add \u002Fleaderboard and \u002Fstats Discord commands ([c05d99c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc05d99cec7f2f7a1bd5384346ae6b4ce86c48f92))\n- let Discord command options offer fixed choices ([937fac0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F937fac070810f9a754d9ae59240dcbb865397985))\n- Discord chat card on the server's settings ([b7b9e4a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b9e4a1e87adb094e63c8d5ceb6090a9a4584f2))\n- relay each server's chat to its Discord channel, with signed player heads ([58b4c0c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F58b4c0cb70329d6dd705ebb4bc864f01d9f3c4ca))\n- post game chat to a Discord webhook within its rate limits ([2147dfa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2147dfae72fbced1a06f29974e2a4f690096b394))\n- draw a player's face from their skin for avatars ([2fe9c4e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2fe9c4e8c0c98344efd8ce8a1ce59b4e5d6a0787))\n- show leaderboards on the public status page ([1915a5c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1915a5c9ecd6373506d473e9aa313e2da99be490))\n- serve public leaderboards and the heads on them ([79e7592](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F79e7592f180fc65c863312409c8af1d2db4a825d))\n- add an optional leaderboard setting to the public page ([8b1e095](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8b1e095de51d8e55e66d3ed95c8319569f1e4c9b))\n- store a server's Discord chat relay settings ([b9776cc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9776cc83143e2e9fc1939639d95897937e09f79))\n- map Discord roles to Flytower roles on the Discord card ([169e7d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F169e7d502626b176e1d876937b6ce6e301a58477))\n- show Discord actions in Activity as \"Name via Discord\" ([4b56f37](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b56f3707361e60fce0e45b983060d9080604196))\n- give Discord members the Flytower roles mapped to their Discord roles ([230c9f0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F230c9f080ba8d794be6afa0dca578739bd0c59ef))\n- add a Stats tab with leaderboards and player cards ([df68235](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf6823522bfae02331002c47509328f496d6eedf))\n- serve a server's leaderboards for all time, this month and this week ([7834438](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7834438c62aad12e923b85f150da135595190dec))\n- build leaderboards and player cards from the stats snapshot ([18e1bfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18e1bfc24d6fb5c652d73047d377d6f3c2d336f9))\n- send the command list to Discord when it changes ([867a6f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F867a6f5e9bb81afb3b76d8ce32bc8acf3c1382fe))\n- answer \u002Fstatus and \u002Fplayers from the status page's roster ([c3d3541](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3d3541b2eee0aacefcf3f9985f765f35b115efe))\n- add a slash command registry for the Discord app ([b3992a5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb3992a57eb3e292c1f9a54359f23d6747ba78634))\n- let people turn stats off and leave players out ([eb79238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb79238aa2c1fc718a1b73f0b4d070801a7bfb6f))\n- carry player stats settings in the server spec ([80071f2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F80071f242dce2fb5fb77f45214c695afdd184d18))\n- add per-server player stats settings ([5e7dad5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e7dad52a747806c97c7b856ab550afaf3648e44))\n- **panel:** Learn more links beside settings open the right heading ([5bccc33](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5bccc33f76939ea45ebe5304b5912c314b29a778))\n- **panel:** a ? on every page opens its help beside it ([db2abb3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdb2abb3ad21fd173fa822c9803260d7c5878005e))\n- **panel:** Help, the docs for the installed version, with search ([7221347](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7221347c3eb57ff4183bdc4f672bdd742e7ab6a4))\n- **docs:** a shared docs layer for the panel and the website ([5ee4f18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ee4f18711e83900b4ab266539d091eaa775f34e))\n- schedule the stats snapshot and add stats routes ([6572cb7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6572cb7d31604dbd99f2c29af89a5aab73149ef0))\n- take a daily snapshot of chosen player stats ([5fcb69f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fcb69f8d8bfc64ca829ff260af5fc71b765cc81))\n- add the player stats table ([e9ad70e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe9ad70e72c260558e9e3176bbc8d62a4055be22e))\n- add System, Integrations with the Discord app card ([ae7948e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae7948e38e56870904d025bcf900ff9f0894a1a0))\n- answer Discord's interactions endpoint ([a7bdb5d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa7bdb5dd51cfc70c22b3b062ee6c4a9771c8b282))\n- connect a Discord app from its bot token ([fc12f9a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffc12f9a3f587a737cef12baeb3689778e58297b7))\n- check Discord interaction signatures with Ed25519 ([6de5a5d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6de5a5d20ceb69f5c16169d61fd27539a5f0b0de))\n- follow the journal for service.wait in the Rust agent ([c23ee50](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc23ee50fa7415f5e1b6f9f603df6e84505bd96ea))\n- wire player sessions into crashes, deletes and boot, with a players summary route ([f1c9c03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1c9c03ca6ead9cbcd003fdb4b477cee8d7deb89))\n- record player sessions from join and leave lines ([2434b21](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2434b21d58230380674d0c8cbe6626ed668985d4))\n- let the log watcher pass on raw lines ([1ef8db7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ef8db734d32e317ca18e47c499b13855bf3adbc))\n- add player sessions and names tables ([ed574df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fed574df594924880cfe2b14678037829526cb53e))\n- port the service verbs to the Rust agent ([25cdd23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F25cdd23ec91ed29ebd4618900ebec7dbf9636fae))\n- run programs from the Rust agent without a shell ([3193042](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31930426a70860fb95da3575fb3d6a9596190ac7))\n- serve the Rust agent on the agent socket with a peer check ([3d56695](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3d5669555996305d60c41829af7b861b5b2980a9))\n- dispatch requests and write the audit log in the Rust agent ([50413ca](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50413ca3b2cdbea5d9c1513991173cf54a3dd45a))\n- add the Rust agent's protocol types ([48b3ce9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48b3ce97179e7bd7e7b3ed0619803a624adc433d))\n- **updates:** number native builds after the release they go with ([8270b4f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8270b4fc42df6b7a0478d547cddc61989404c4a8)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **installer:** --native installs the newest native build ([d79b6ac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd79b6ac662e923ad4f1b7df7f95a18b55fe6843e)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **agent:** download native builds from their own tag ([9b5c93b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9b5c93bd7b9ae00bd77beb1b6324059330936895)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **updates:** a Native channel for builds of the native branch ([478652b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F478652b846657641e2ff0cb92ea29ec564447442)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **disk:** measure with flytower-du when it's there ([f1a40d3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1a40d3c2aee36b864556f22d577508c472941d9)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **du:** add flytower-du, a Rust disk walker ([f64592b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff64592b93a495b1ee154ad346d8be2212118b24f)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **installer:** start the agent through bin\u002Fflytower-agent ([d957684](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd957684c7e9bc0c83ab0fd3cfad2714ba2023a2a)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **agent:** start the agent and updater through the stable entry points ([d6a6276](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd6a6276f337db3fb0e981b0ce504aca36fb71953)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **agent:** ship stable flytower-agent and flytower-updater entry points ([b961480](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb961480542b64d56c1a3fd8b61fd4fe85fc9f014)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **protocol:** export the agent protocol as JSON Schema ([85cae8e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F85cae8e453941509abad8bd113b44536bd80935b)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n\n### Fixes\n\n- wrap the saved webhook on narrow screens ([2878c98](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2878c98deec06f248b8ba5b6b34428251fe837d8))\n- give the Discord test status the leaderboard field ([cf49b5a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf49b5a336da3b31b926c0a5a85e19350f058e6f))\n- check Manage people first when saving Discord roles ([ec63bc1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fec63bc1dfa45175b174fe48b9308eda8c9da318e))\n- list the leaderboards route in the permission table ([64a67ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F64a67ce3900605d3fcd8bded1f165c0a551a6221))\n- show leaderboard icons and label each figure on player cards ([e7d8ed2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7d8ed23b88728a110579bca2c94aeb5582a88a9))\n- **panel:** serve the help docs' database from its route instead of prerendering it ([9ba3eb3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ba3eb31d2ba1f7b8d65553566efe58dc193cd6a))\n\n### Docs\n\n- release notes for 1.3.0-beta.1 and its native build ([9159656](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F915965641b2250e710093e2b5c83faaa7bbf41fd))\n- the web map, drawn by Flytower ([22d7b68](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22d7b6877ca4e5a9813ff3b3f4357d8a040e501d))\n- give the player stats page its Help section and order ([28df4c6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F28df4c6906d9f669dc9ecd473faf7dc2460af74d))\n- describe the Discord staff commands ([d07764b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd07764b85530440a85c0192c892d89ed1b0b0d2c))\n- help frontmatter for the Discord page; move the 1.3.0 test script ([e387eb9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe387eb9d16690b2e36d505009d7a7bfdd6578dee))\n- \u002Fleaderboard and \u002Fstats in Discord ([ac16e7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fac16e7b940d2b2d7543dd7f4570fcaa667a758cf))\n- game chat to Discord, and how to test it ([4d2d5ad](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d2d5adb0490ab89fad27f17d6ed76ace247db9c))\n- leaderboards on the public status page ([c67c26f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc67c26f34298a8d33da0879da3473e8c84c8b8fe))\n- add Discord roles to the 1.3.0 testing checklist ([f909aa5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff909aa5819f72dd70c7e6700caa25c4cb366bbae))\n- explain Discord role mapping ([b572a22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb572a224631d29b55a84ab5a6e68b7b1b9e05628))\n- explain player stats and the leaderboards ([e04df36](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe04df362e8b1cf4babfd8828802c48cc9afe36f7))\n- describe the Discord commands and how to test them ([c032092](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc0320920c820b275648b3e80a0921024712bf59d))\n- testing notes for Help in the panel ([c979d6b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc979d6bddee533e59cba42d9db11b3e7c80b3469))\n- give every page a section, an order and the panel routes it explains ([f02f7a3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff02f7a32cfed69ddb92dcadf88739ee37974a36c))\n- move release test scripts into docs\u002Ftesting ([9968c23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9968c23b7262a58c9d9a66a95976f338cb662fb4))\n- explain connecting a Discord app ([5b9e567](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5b9e5672666b2f7ecfa9ee92586e9c43a6979c6f))\n- 1.2.1-native.1 release summary ([142f156](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F142f156fc7dc38cb4a0274e538a7a413b6796659))\n- release summary for 1.2.0-beta.2.native.1 ([a51b4ef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa51b4ef63a3009c54f587b3c170aef4d82a54d3e))\n- record the decision to bring in Rust and Go ([1b954ab](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b954aba7ba6890cf938201999d8c994e9013d02)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n\n### Other\n\n- give the map's maximum-wait test room on a busy runner ([7a1e449](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7a1e449f946c2cc1f0615f2dd094394676b6c0ec))\n- put the stats view in its own component so it can move pages ([7cb89d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7cb89d6c104d629054f4e777ee903708828c9f94))\n- cover the Discord staff commands ([121aa25](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F121aa25655bf9f60416ae9f7745863f7935e209f))\n- share player and power actions between the panel and Discord ([a3f388f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa3f388facb2fc6ffc77da177ea1433bc46d3919c))\n- list the Discord role routes in the permission table ([b8e731d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb8e731dd943031a0350c2094e6e04448991867f8))\n- cover Discord role mapping, refusals and Activity ([2644a19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2644a19f1ff8f5da504af138ff80269d90b1a887))\n- build a server's public status in one place ([b993e3f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb993e3fc3b77a65f0a16bd3fcff6e941b64634b5))\n- **panel:** rename parseMarkdown to parseNotes ([c27e9ee](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc27e9ee8f86c31c62e7838c3ba8c6ffcc54be4b2))\n- recognise native versions like 1.2.0-beta.2.native.1 ([8253e5c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8253e5cdf990733ce21fa05f468d42e929bbb3eb)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- release native builds under native- tags ([6505c61](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6505c6179b4d93a9d9b1386916b2e70a4f1ab503)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- build flytower-du into releases and check it on amd64 and arm64 ([5fa5272](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fa527286394087cd76424ff1e675d92ba3a6546)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **protocol:** shared fixtures every implementation must agree on ([a048004](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0480047f4f211eb631c8aa6ba931b1ad23c0be0)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n\n### Other changes\n\n- Merge main into feat\u002Fmap-public ([cc45486](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc45486beb1c0b9714098643626867d0afe2eaf8))\n- Merge main into feat\u002Fmap-panel; renumber the map migration to 0021 ([78d26aa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78d26aaee6f7150d3700486ad4a0667e1c0ea75c))\n- Merge main into feat\u002Fmap-renderer ([134ffd0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F134ffd089ce48b8edcb9baef205fad282b5b3c2d))\n- Merge main into feat\u002Fdiscord-staff-commands ([4c27238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c27238ca70bcd2cdc9933907559ba99b3fbcdbb))\n- Merge main into feat\u002Fdiscord-roles ([2dec38f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2dec38f71d8788640f389223688af29231059e9e))\n- Merge v1.2.1 into native ([9edc05a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9edc05ab72c6a6352bbfa46bb7b516086c64d88a))\n- Merge v1.2.0-beta.2 into native ([b389c71](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb389c71d2577ee7ca221bbdda32b84aa752ccc90))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.1...v1.3.0-beta.1",{"version":998,"date":999,"url":1000,"beta":116,"body":1001},"1.2.1","2026-11-10T15:53:23Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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**.\n\nTesting: 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.\n\n### Fixes\n\n- **notify:** read joins and leaves that Minecraft 26.x logs as system chat ([3f67e66](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3f67e660b8007f011e6d3ae9c12c218398941b90))\n\n### Docs\n\n- 1.2.1 release summary ([1832a40](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1832a406ddf584df409beb47f711fd33471b0b1b))\n- 1.2.0 release summary ([a8f9750](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa8f9750d98146d8718ac12687fff49e90e63c5f9))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.0...v1.2.1",{"version":1003,"date":1004,"url":1005,"beta":116,"body":1006},"1.2.0","2026-11-10T15:51:05Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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 `\u002Fs\u002F\u003Cserver 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.\n\nServers 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.\n\nTesting notes are in [testing-1.2.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0\u002Fdocs\u002Ftesting-1.2.0.md).\n\n### Features\n\n- document the Access page ([23a0acc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F23a0acc08591d66590dc3b35c384c1aac5b5f2ba))\n- rename People to Access, with People and Roles tabs ([73eda62](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73eda62f892a64d3a4f706ff2c062dc09ed8f608))\n- pick your appearance with the colour mode select ([d7abe18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7abe182c176ee690ba29ce6196a082960ff9a0e))\n- document Your account and the new People page ([c49ced0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc49ced078d7dc56b3985001ac5f401fc4b0d89bf))\n- give People and Your account their own places in the sidebar ([4990633](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F49906334c7cf6e8521f19eb5783e37741e4f2c11))\n- let people rename themselves, save their theme and sign out everywhere ([bff9e7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbff9e7d0b0f813430146eba07419da1fad69b054))\n- end older sessions when the session version changes ([d87d477](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd87d47759fda479200cebe570fcb409f65a984f8))\n- hide what a person can't use, and show view-only tabs ([bed7397](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbed7397e0553203d0a18542803ba87aa09d9db96))\n- role editor on the People page ([ff59ff2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff59ff2d4a1ef5d6e4ea3f5fca653b351c96bcc7))\n- custom roles built from the permission list ([42eb8df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42eb8df6015c4a9ee4795486b9c0e3153f465b1d))\n- installer prints a setup link ([f363575](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3635756f825a504e072c12711b6c01db37f1135))\n- People page under System ([46d55c1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F46d55c1e176bf728ffafbedb33186973898f67f4))\n- setup and invite links fill the token in ([e409a45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe409a45f31d195ed57ab1d8d45a395b18ea39c0c))\n- join through an invite link with a new passkey ([a0906b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0906b29c853aa157036fd459fb52a2402b1619c))\n- invite, change and remove people ([e572e46](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe572e4614676ebc5437e4d550c9941515fcbeba1))\n- store invite links ([b061ab6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb061ab684d37ed7ecfbb4393919599048e7d89db))\n- send live topics only to people who can see them ([cde77d0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcde77d0c3b2be2b05a97e05e59ccd02dcedff551))\n- check a permission on every API route ([efaf60a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefaf60a5afc37867a074b4f1ea279561ab4e08ca))\n- add roles, grants and the permission list ([ff4b321](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff4b32121df1a0219ef491e3522ff78b1c63160d))\n- **status:** serve the public page on each server's own hostname ([60e3243](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F60e3243ba19e6a24cc7c1382acd0749f3ff73b8f))\n- **status:** players' modpack download on the public page ([89b902f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F89b902f36520584be0065e32c3b0404902085626))\n- **providers:** Modrinth lookups for players' modpacks ([d8bfec5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8bfec590779b8f1a2b2c932531a09d3588106b0))\n- **status:** show the server icon on the public page ([01782e3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01782e3e798320365892b15620b554450df1b1b8))\n- upload a server icon for the multiplayer list (#120) ([76402db](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F76402db2410720075fa0c41cf2c664981f486ef0))\n- upload, crop and remove a server icon in Game settings ([1833980](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1833980888c7ba8c5e71ad8fc091f77854bca5f5))\n- **status:** MOTD and link previews on the public page ([39b917b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F39b917ba29857f74919fd39800ab8170c665aa79))\n- set and remove a server's icon through the API ([87c5835](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F87c58356415b82a9d0edd71677ad329f112135ed))\n- check server icons as PNGs and keep only their image chunks ([8f1c83c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f1c83c98dfba5dd704773c51b36520e3fa9c068))\n- **status:** public status page at \u002Fs\u002F\u003Cname> and its settings card ([05d00a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F05d00a40d3f468bd63bd0094cfa141e4824e96aa))\n- rich text MOTD editor with live preview (#115) ([981b841](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F981b84125f1a82381842cf24a68589287e775ea1))\n- **status:** public status API with a roster kept from the log ([27a437c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F27a437cc7c6537f26a6c1523f54d551260c88055))\n- **spec:** public page settings in the spec and the database ([5aafd9c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5aafd9c30319cc337d875fe7e308e7711e029abd))\n- configurable branding: name, colours, font and logo (#118) ([9656776](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9656776f902007802762fe6bba1904817fe5ddca))\n- keep past worlds when resetting a world (#114) ([17d98f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F17d98f5fd63e23f89b3632ae8ae9af66b9991c4b))\n- one two-line box for the MOTD instead of two inputs ([d66bf83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd66bf8398ae3ec4c11fa6f821105e7de959db2dd))\n- **branding:** describe branding changes in Activity ([5743aa1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5743aa1b8a946458c6de79fee3dbccd26024c7b2))\n- player heads on the Players tab (#113) ([eb41554](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb415543b875491f13a60d2c6833cdf44d73eb27))\n- rich text MOTD editor with a second line and Show codes ([2429e44](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2429e44c4502296ed2da4f8a33709c40795940f2))\n- preview the server's entry in the multiplayer list ([92f6961](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92f6961f1c9b92d1744762a8ba22a0acc2429149))\n- self-host Monocraft for the MOTD preview ([e7febbc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7febbc997c91035cb3a2cb3c855ec0faa8a496d))\n- **branding:** System > Branding, and the brand across the panel ([d50eebe](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd50eebe2f0ef9a4b0432714c30c32a6974541fd2))\n- **branding:** use the brand in Discord, in-game messages and passkey prompts ([903911f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F903911f62f4081579035e06f3b6da849de235c91))\n- **branding:** store branding and serve the theme, logo and favicon ([09691a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F09691a2afd8502a27369aa63fd781d248b4d5de1))\n- **branding:** clean uploaded SVG and PNG logos ([bae3766](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbae37663b26f7d4cb20bf2bf03f088e99b3f945e))\n- **branding:** colour scale, contrast checks and theme stylesheet from one accent ([1a7317b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a7317bb55d346ba109c7bfe31e678ffe880fe26))\n- past worlds on the World tab, and keep options in the reset dialog ([03c2042](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F03c2042f5fb685e6938ba8709df2a3fc1ad88737))\n- start a new server from a past world ([c558635](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc5586357bce30ba58a3565e98a45c9143c93a1da))\n- keep the old world and its backup when resetting ([a0c6254](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0c6254274a54659e3dc2e46716a2a7440dbfed3))\n- past worlds, kept as named exports that never expire ([7f9aa3b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7f9aa3b4d9871450456109912295b774e7b77f93))\n- backups that retention never deletes ([62d06dc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62d06dc4d86df4255279f8be0692becd1fd636e1))\n- player heads on the Players tab ([6487a70](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6487a70191c0a4fb816b8fc13a3ec268c6363a2b))\n- read, write and lay out § formatted MOTDs ([b6c3ffe](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb6c3ffec445c0f2ea05900a101b0c7a75bb57406))\n- show client-only switch in content search ([babfede](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbabfeded89f7d332619dda27fcddf8d6867e8df1)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n- UUIDs for online players, from usercache.json ([65e2847](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65e2847df6d945d3edadad4d510dbce1ab6005e0))\n- cache player skins on disk and serve them to the panel ([8c5a2eb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8c5a2eb567d668534a29aa5c51f52c18b87d2ea7))\n- **providers:** read player skins from Mojang's session server ([21b3960](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21b3960131cbff23064f076a37b4a27592c9f6d1))\n\n### Fixes\n\n- bundle the invites migration again after the merge ([62a3c0d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62a3c0d8316ff3379ffddb1eb21785f527a42177))\n- keep the bundled migrations as generated ([6aaecb8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6aaecb8387e1008d91b939295562dd4fd16cf968))\n- only list disk use and updates for servers a person can see ([1b1231f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b1231fa63eb1a8289b6c9c641e5fc4abd457989))\n- **notify:** look at the log once more after each change ([3c13427](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c1342728b84ece223514226a92b6bf2a8d8f172))\n- **console:** read the log again when asked during a read ([81500eb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81500eb48ff1ebcb36fdc3f2a370fffae989c04e))\n- bundle the roles migration ([f3e28ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3e28cea0eaa181ed28bbc77a80400709445b289))\n- install client-only Modrinth projects when asked for (#111) ([a524a1c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa524a1c49181eb9b36941f7c6b80ba690ebac43a))\n- **branding:** line up the form, and keep edits when branding changes elsewhere ([44d685b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F44d685b1284682a61168ffe96c23c0fe9c18a065))\n- **branding:** tidy the Powered by Flytower line ([f55db97](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff55db97c7e4337556819b66f0eee2e98695f7f98))\n- **branding:** fit the name in the sidebar on one line ([941ff96](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F941ff96a702c508d74e1677dd211ea4dc4f49991))\n- refresh past worlds after a reset without reloading the page ([c2a2288](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc2a2288bcd8459feaa5c605994cfea8e38a6c126))\n- **branding:** keep a long name on one line and the tab title current ([55e8bf3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55e8bf38ca8a2f33d4f5342df95ec2fd77ef201a))\n- keep the MOTD's second line when a server is created ([01473e7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01473e7c5e5390a9810676de9c96e30b8980b8bb))\n- show content warnings in plans without blocking apply ([65604c8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65604c875129e7957eef9bb63430974f94b5e4d9)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n- install client-only Modrinth projects when asked for, with a warning ([f6e3a34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6e3a34e29e411a4d36bcf03f96f9338c000a504)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n\n### Docs\n\n- fold the people and roles notes into 1.2.0-beta.2 ([2268de0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2268de02da0aaed9c6072c9a7da445e7a88be076))\n- custom roles and what people see ([4d5788e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d5788ed803444126382d993ae2ff4f13192d394))\n- people and roles ([1d1e8f6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1d1e8f6cbaad4b60d61ba01134df25f28a456f0c))\n- testing notes and release notes for roles groundwork ([48293a3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48293a3a7e34b3982470fbaea5e06d1871a718de))\n- don't name Chunky as server-only; Modrinth marks it optional on clients ([106c067](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F106c067213ff05d3d8f07d0cf6b6aab20d4c598e))\n- modpack fields in the YAML reference, testing notes and release summary ([c8c7803](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc8c7803a9f14e78698a2b00db2f58f3c91fc7335))\n- players' modpack guide, YAML fields and testing notes ([f49ff19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff49ff19ea743ca57ee11211cfa104faa94a017f3))\n- public status page guide, YAML reference, testing notes and release summary ([470b4d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F470b4d5b70a376deb5f0fb96bd843a2c8b4554d5))\n- release summary for 1.1.0 ([35a69b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F35a69b289fa2c9424ed402134a7c35e7253cd3c0))\n- how to release an older commit ([77eb9af](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77eb9afd2c0a3eb70fbc011c21c969e8d970d5bc))\n- server icons, and testing notes ([0c1d906](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0c1d906c7725f8a968a51b3e2bc79d50edd1e05e))\n- bring the README up to date for 1.1.0 and 1.2.0 (#119) ([d28a5e4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd28a5e496f9a650ebf19591d5313bc326656e7a8))\n- bring the README up to date for 1.1.0 and 1.2.0 ([cf33c63](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf33c63d4609aed5d979979ac8cf19d9a9b39488))\n- release summary for branding ([ceab6f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fceab6f597739328d6f33d3f175d9a1ca55622496))\n- branding, and its testing notes ([2cb10cc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2cb10cc294c2514e2fc3c3e64593fd7bad45c671))\n- MOTD editor, codes in the spec, and testing notes ([9a6bd0b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9a6bd0b2978f261bd38cf6a0d766446943a37aca))\n- past worlds, kept backups, and testing notes ([6da0d70](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6da0d7002884598f400b7551f380b94604da8b6c))\n- release summary and testing notes for player heads ([7ddd483](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7ddd483792502377b013f2ce65b9ea3573e3e7fa))\n- client-only mods, testing notes and release summary ([32eb89c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F32eb89cb3192270f258f0d8f07dee69127e0788e)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n\n### Other\n\n- custom roles ([1e45fd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1e45fd38a07db6598b18fcf1d4467830ff4ade37))\n- invites, last Owner and people changes ([359bc5e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F359bc5e0dacd5431f9b7dfbbaf5da5d02e6b2734))\n- fail when an API route skips its permission check ([4b429a1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b429a1279725efb1aa795cc62d65e57759d94ba))\n- release a chosen tag, branch or commit, with a 1.1.0 summary (#121) ([b6e1469](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb6e14697c7a598d41dea895779ef0513deb12d2f))\n- the sealer test can't fail when ciphertext happens to contain \"shh\" ([e14c73e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe14c73e8155e1dd3087f6b0c0f1904e74b79b89f))\n- **release:** a stable release's notes cover everything since the last stable one ([7bda909](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7bda9098a1ad9944afd3294aaba1fed0e085c9d0))\n- release a chosen tag, branch or commit from the Release workflow ([ad640a5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fad640a5db98fb5c093afac5a536e0b400593c051))\n- **e2e:** save branding through the UI and reset it ([ec38e7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fec38e7d296184087d73fd0c05073fd783f4cd818))\n- a two-line MOTD with codes round-trips through YAML ([92af9e0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92af9e0b4b08fb26b9a787c40e5f6d44315d6006))\n- **branding:** colours, cleaning, storage and where the brand shows ([9fa478d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9fa478d45df5f3ad739697aba5e62d0055c77288))\n- run E2E less often: skip housekeeping-only merges, one upgrade per minor version ([a54256e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa54256edba1032288371ad3d2ecf8d86676fbb05))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0...v1.2.0",{"version":1008,"date":1009,"url":1010,"beta":945,"body":1011},"1.2.0-beta.2","2026-11-10T15:23:33Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.2\u002Fdocs\u002Fpeople.md).\n\n**Public status page.** Each server can have a page anyone can open without signing in, at `\u002Fs\u002F\u003Cserver 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:\u002F\u002F\u003Chostname>`. 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.2\u002Fdocs\u002Fstatus-page.md).\n\nJoin and leave notifications are reliable again.\n\nTesting notes are in the \"Public status page\" and \"People and roles\" sections of [testing-1.2.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.2\u002Fdocs\u002Ftesting-1.2.0.md).\n\n### Features\n\n- document the Access page ([23a0acc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F23a0acc08591d66590dc3b35c384c1aac5b5f2ba))\n- rename People to Access, with People and Roles tabs ([73eda62](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73eda62f892a64d3a4f706ff2c062dc09ed8f608))\n- pick your appearance with the colour mode select ([d7abe18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7abe182c176ee690ba29ce6196a082960ff9a0e))\n- document Your account and the new People page ([c49ced0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc49ced078d7dc56b3985001ac5f401fc4b0d89bf))\n- give People and Your account their own places in the sidebar ([4990633](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F49906334c7cf6e8521f19eb5783e37741e4f2c11))\n- let people rename themselves, save their theme and sign out everywhere ([bff9e7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbff9e7d0b0f813430146eba07419da1fad69b054))\n- end older sessions when the session version changes ([d87d477](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd87d47759fda479200cebe570fcb409f65a984f8))\n- hide what a person can't use, and show view-only tabs ([bed7397](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbed7397e0553203d0a18542803ba87aa09d9db96))\n- role editor on the People page ([ff59ff2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff59ff2d4a1ef5d6e4ea3f5fca653b351c96bcc7))\n- custom roles built from the permission list ([42eb8df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42eb8df6015c4a9ee4795486b9c0e3153f465b1d))\n- installer prints a setup link ([f363575](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3635756f825a504e072c12711b6c01db37f1135))\n- People page under System ([46d55c1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F46d55c1e176bf728ffafbedb33186973898f67f4))\n- setup and invite links fill the token in ([e409a45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe409a45f31d195ed57ab1d8d45a395b18ea39c0c))\n- join through an invite link with a new passkey ([a0906b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0906b29c853aa157036fd459fb52a2402b1619c))\n- invite, change and remove people ([e572e46](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe572e4614676ebc5437e4d550c9941515fcbeba1))\n- store invite links ([b061ab6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb061ab684d37ed7ecfbb4393919599048e7d89db))\n- send live topics only to people who can see them ([cde77d0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcde77d0c3b2be2b05a97e05e59ccd02dcedff551))\n- check a permission on every API route ([efaf60a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefaf60a5afc37867a074b4f1ea279561ab4e08ca))\n- add roles, grants and the permission list ([ff4b321](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff4b32121df1a0219ef491e3522ff78b1c63160d))\n- **status:** serve the public page on each server's own hostname ([60e3243](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F60e3243ba19e6a24cc7c1382acd0749f3ff73b8f))\n- **status:** players' modpack download on the public page ([89b902f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F89b902f36520584be0065e32c3b0404902085626))\n- **providers:** Modrinth lookups for players' modpacks ([d8bfec5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8bfec590779b8f1a2b2c932531a09d3588106b0))\n- **status:** show the server icon on the public page ([01782e3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01782e3e798320365892b15620b554450df1b1b8))\n- **status:** MOTD and link previews on the public page ([39b917b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F39b917ba29857f74919fd39800ab8170c665aa79))\n- **status:** public status page at \u002Fs\u002F\u003Cname> and its settings card ([05d00a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F05d00a40d3f468bd63bd0094cfa141e4824e96aa))\n- **status:** public status API with a roster kept from the log ([27a437c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F27a437cc7c6537f26a6c1523f54d551260c88055))\n- **spec:** public page settings in the spec and the database ([5aafd9c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5aafd9c30319cc337d875fe7e308e7711e029abd))\n\n### Fixes\n\n- bundle the invites migration again after the merge ([62a3c0d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62a3c0d8316ff3379ffddb1eb21785f527a42177))\n- keep the bundled migrations as generated ([6aaecb8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6aaecb8387e1008d91b939295562dd4fd16cf968))\n- only list disk use and updates for servers a person can see ([1b1231f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b1231fa63eb1a8289b6c9c641e5fc4abd457989))\n- **notify:** look at the log once more after each change ([3c13427](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c1342728b84ece223514226a92b6bf2a8d8f172))\n- **console:** read the log again when asked during a read ([81500eb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81500eb48ff1ebcb36fdc3f2a370fffae989c04e))\n- bundle the roles migration ([f3e28ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3e28cea0eaa181ed28bbc77a80400709445b289))\n\n### Docs\n\n- fold the people and roles notes into 1.2.0-beta.2 ([2268de0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2268de02da0aaed9c6072c9a7da445e7a88be076))\n- custom roles and what people see ([4d5788e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d5788ed803444126382d993ae2ff4f13192d394))\n- people and roles ([1d1e8f6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1d1e8f6cbaad4b60d61ba01134df25f28a456f0c))\n- testing notes and release notes for roles groundwork ([48293a3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48293a3a7e34b3982470fbaea5e06d1871a718de))\n- don't name Chunky as server-only; Modrinth marks it optional on clients ([106c067](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F106c067213ff05d3d8f07d0cf6b6aab20d4c598e))\n- modpack fields in the YAML reference, testing notes and release summary ([c8c7803](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc8c7803a9f14e78698a2b00db2f58f3c91fc7335))\n- players' modpack guide, YAML fields and testing notes ([f49ff19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff49ff19ea743ca57ee11211cfa104faa94a017f3))\n- public status page guide, YAML reference, testing notes and release summary ([470b4d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F470b4d5b70a376deb5f0fb96bd843a2c8b4554d5))\n\n### Other\n\n- custom roles ([1e45fd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1e45fd38a07db6598b18fcf1d4467830ff4ade37))\n- invites, last Owner and people changes ([359bc5e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F359bc5e0dacd5431f9b7dfbbaf5da5d02e6b2734))\n- fail when an API route skips its permission check ([4b429a1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b429a1279725efb1aa795cc62d65e57759d94ba))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.0-beta.1...v1.2.0-beta.2",{"version":1013,"date":1014,"url":1015,"beta":945,"body":1016},"1.2.0-beta.1","2026-11-10T13:38:19Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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 `\u002Fvar\u002Flib\u002Fflytower\u002Fskins`, 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.\n\nClient-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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Fcontent.md#client-only-mods).\n\nResetting 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Fbackups.md#past-worlds).\n\nFlytower 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Fbranding.md).\n\nThe 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.\n\nServers 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.\n\nTesting notes are in the \"Player heads\", \"Client-only mods\", \"Past worlds\", \"Branding\", \"MOTD editor\" and \"Server icon\" sections of [testing-1.2.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Ftesting-1.2.0.md).\n\n### Features\n\n- upload a server icon for the multiplayer list (#120) ([76402db](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F76402db2410720075fa0c41cf2c664981f486ef0))\n- upload, crop and remove a server icon in Game settings ([1833980](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1833980888c7ba8c5e71ad8fc091f77854bca5f5))\n- set and remove a server's icon through the API ([87c5835](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F87c58356415b82a9d0edd71677ad329f112135ed))\n- check server icons as PNGs and keep only their image chunks ([8f1c83c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f1c83c98dfba5dd704773c51b36520e3fa9c068))\n- rich text MOTD editor with live preview (#115) ([981b841](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F981b84125f1a82381842cf24a68589287e775ea1))\n- configurable branding: name, colours, font and logo (#118) ([9656776](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9656776f902007802762fe6bba1904817fe5ddca))\n- keep past worlds when resetting a world (#114) ([17d98f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F17d98f5fd63e23f89b3632ae8ae9af66b9991c4b))\n- one two-line box for the MOTD instead of two inputs ([d66bf83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd66bf8398ae3ec4c11fa6f821105e7de959db2dd))\n- **branding:** describe branding changes in Activity ([5743aa1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5743aa1b8a946458c6de79fee3dbccd26024c7b2))\n- player heads on the Players tab (#113) ([eb41554](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb415543b875491f13a60d2c6833cdf44d73eb27))\n- rich text MOTD editor with a second line and Show codes ([2429e44](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2429e44c4502296ed2da4f8a33709c40795940f2))\n- preview the server's entry in the multiplayer list ([92f6961](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92f6961f1c9b92d1744762a8ba22a0acc2429149))\n- self-host Monocraft for the MOTD preview ([e7febbc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7febbc997c91035cb3a2cb3c855ec0faa8a496d))\n- **branding:** System > Branding, and the brand across the panel ([d50eebe](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd50eebe2f0ef9a4b0432714c30c32a6974541fd2))\n- **branding:** use the brand in Discord, in-game messages and passkey prompts ([903911f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F903911f62f4081579035e06f3b6da849de235c91))\n- **branding:** store branding and serve the theme, logo and favicon ([09691a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F09691a2afd8502a27369aa63fd781d248b4d5de1))\n- **branding:** clean uploaded SVG and PNG logos ([bae3766](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbae37663b26f7d4cb20bf2bf03f088e99b3f945e))\n- **branding:** colour scale, contrast checks and theme stylesheet from one accent ([1a7317b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a7317bb55d346ba109c7bfe31e678ffe880fe26))\n- past worlds on the World tab, and keep options in the reset dialog ([03c2042](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F03c2042f5fb685e6938ba8709df2a3fc1ad88737))\n- start a new server from a past world ([c558635](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc5586357bce30ba58a3565e98a45c9143c93a1da))\n- keep the old world and its backup when resetting ([a0c6254](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0c6254274a54659e3dc2e46716a2a7440dbfed3))\n- past worlds, kept as named exports that never expire ([7f9aa3b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7f9aa3b4d9871450456109912295b774e7b77f93))\n- backups that retention never deletes ([62d06dc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62d06dc4d86df4255279f8be0692becd1fd636e1))\n- player heads on the Players tab ([6487a70](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6487a70191c0a4fb816b8fc13a3ec268c6363a2b))\n- read, write and lay out § formatted MOTDs ([b6c3ffe](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb6c3ffec445c0f2ea05900a101b0c7a75bb57406))\n- show client-only switch in content search ([babfede](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbabfeded89f7d332619dda27fcddf8d6867e8df1)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n- UUIDs for online players, from usercache.json ([65e2847](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65e2847df6d945d3edadad4d510dbce1ab6005e0))\n- cache player skins on disk and serve them to the panel ([8c5a2eb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8c5a2eb567d668534a29aa5c51f52c18b87d2ea7))\n- **providers:** read player skins from Mojang's session server ([21b3960](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21b3960131cbff23064f076a37b4a27592c9f6d1))\n\n### Fixes\n\n- install client-only Modrinth projects when asked for (#111) ([a524a1c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa524a1c49181eb9b36941f7c6b80ba690ebac43a))\n- **branding:** line up the form, and keep edits when branding changes elsewhere ([44d685b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F44d685b1284682a61168ffe96c23c0fe9c18a065))\n- **branding:** tidy the Powered by Flytower line ([f55db97](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff55db97c7e4337556819b66f0eee2e98695f7f98))\n- **branding:** fit the name in the sidebar on one line ([941ff96](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F941ff96a702c508d74e1677dd211ea4dc4f49991))\n- refresh past worlds after a reset without reloading the page ([c2a2288](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc2a2288bcd8459feaa5c605994cfea8e38a6c126))\n- **branding:** keep a long name on one line and the tab title current ([55e8bf3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55e8bf38ca8a2f33d4f5342df95ec2fd77ef201a))\n- keep the MOTD's second line when a server is created ([01473e7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01473e7c5e5390a9810676de9c96e30b8980b8bb))\n- show content warnings in plans without blocking apply ([65604c8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65604c875129e7957eef9bb63430974f94b5e4d9)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n- install client-only Modrinth projects when asked for, with a warning ([f6e3a34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6e3a34e29e411a4d36bcf03f96f9338c000a504)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n\n### Docs\n\n- release summary for 1.1.0 ([35a69b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F35a69b289fa2c9424ed402134a7c35e7253cd3c0))\n- how to release an older commit ([77eb9af](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77eb9afd2c0a3eb70fbc011c21c969e8d970d5bc))\n- server icons, and testing notes ([0c1d906](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0c1d906c7725f8a968a51b3e2bc79d50edd1e05e))\n- bring the README up to date for 1.1.0 and 1.2.0 (#119) ([d28a5e4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd28a5e496f9a650ebf19591d5313bc326656e7a8))\n- bring the README up to date for 1.1.0 and 1.2.0 ([cf33c63](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf33c63d4609aed5d979979ac8cf19d9a9b39488))\n- release summary for branding ([ceab6f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fceab6f597739328d6f33d3f175d9a1ca55622496))\n- branding, and its testing notes ([2cb10cc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2cb10cc294c2514e2fc3c3e64593fd7bad45c671))\n- MOTD editor, codes in the spec, and testing notes ([9a6bd0b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9a6bd0b2978f261bd38cf6a0d766446943a37aca))\n- past worlds, kept backups, and testing notes ([6da0d70](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6da0d7002884598f400b7551f380b94604da8b6c))\n- release summary and testing notes for player heads ([7ddd483](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7ddd483792502377b013f2ce65b9ea3573e3e7fa))\n- client-only mods, testing notes and release summary ([32eb89c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F32eb89cb3192270f258f0d8f07dee69127e0788e)) · [#72](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72)\n\n### Other\n\n- release a chosen tag, branch or commit, with a 1.1.0 summary (#121) ([b6e1469](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb6e14697c7a598d41dea895779ef0513deb12d2f))\n- the sealer test can't fail when ciphertext happens to contain \"shh\" ([e14c73e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe14c73e8155e1dd3087f6b0c0f1904e74b79b89f))\n- **release:** a stable release's notes cover everything since the last stable one ([7bda909](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7bda9098a1ad9944afd3294aaba1fed0e085c9d0))\n- release a chosen tag, branch or commit from the Release workflow ([ad640a5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fad640a5db98fb5c093afac5a536e0b400593c051))\n- **e2e:** save branding through the UI and reset it ([ec38e7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fec38e7d296184087d73fd0c05073fd783f4cd818))\n- a two-line MOTD with codes round-trips through YAML ([92af9e0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92af9e0b4b08fb26b9a787c40e5f6d44315d6006))\n- **branding:** colours, cleaning, storage and where the brand shows ([9fa478d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9fa478d45df5f3ad739697aba5e62d0055c77288))\n- run E2E less often: skip housekeeping-only merges, one upgrade per minor version ([a54256e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa54256edba1032288371ad3d2ecf8d86676fbb05))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0...v1.2.0-beta.1",{"version":1018,"date":1019,"url":1020,"beta":116,"body":1021},"1.1.0","2026-11-10T13:35:54Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nServers 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.\n\nFlytower 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.\n\nTesting notes are in [testing-1.1.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0\u002Fdocs\u002Ftesting-1.1.0.md).\n\n### Features\n\n- scheduled restarts, commands and announcements (#105) ([566d812](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F566d8120a1c96af9c6408a5a0100e6a910e1c144))\n- disk use per server, and low disk warnings (#103) ([070a413](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F070a41359f5deeef7e929b8d5f113b1b5f1d8557))\n- call off a restart while it counts down ([a72a1b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa72a1b12d3b03fca38dd524c7e9d2b3cd1ded3f0)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **ui:** a Schedules tab to add, edit and run scheduled tasks ([0e94840](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e94840cd1bd3f5906d45667e94878b59c65e656)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **spec:** schedules in plans, apply, the YAML tab, new servers and clones ([3a98909](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a9890971da00029610dbc8aa8c3f86d1f594d39)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **api:** list, save and run scheduled tasks ([6357e75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6357e75f47e497ba70395ee6c4c559062da2eab6)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- run scheduled restarts, commands and announcements ([5e0ccf8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e0ccf80d5d173f2682e29d3dfeb86bca0659875)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **backups:** wait for a server's lock to be let go ([f42d36b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff42d36b5ce5852b194fb906f097efa5e0f2e9574)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **db:** a schedules table and a time zone per server ([26a390d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F26a390d848e05468d1307cb995b1d37159db4c83)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **spec:** schedules and timezone in server specs ([55da5d7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55da5d7de22723ac394f964f09f6f9937d808c66)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- update badges for Flytower, content, Minecraft and Java (#101) ([aa27a67](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa27a67e685529f5a8c00c33a3499c761dbe2228))\n- warn before a manual backup on a nearly full disk ([42fc0ae](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42fc0aebaf5460e4b03c48e97fd38444cb747f52))\n- banner on every page while the disk is 95% full ([df66916](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf669166c125c48d091c4c9da6f57165e0c440a4))\n- disk use breakdown on each server's Settings tab ([c141d1f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc141d1fa77debc7962bfcebf24a67ad4fc3a9e2e))\n- disk bar on System, split by server, with free space and a table ([36cf41a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36cf41ab7516251499ca1f4091c2e659f810a0f2))\n- include display names in the System disk report ([5cec5ef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5cec5ef353a0834409c945088aa797084664b2cf))\n- skip scheduled backups when the disk is 95% full ([e82bed3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe82bed3495ae3726646a184d588350333b6c48ed))\n- disk use API for the System page and each server ([608cb89](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F608cb892b3be36869787824b222e4c1248c9405d))\n- measure disk use in the background, hourly and after each job ([eb81b80](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb81b805a081bc399e821a4d5d54eb943deb8a9a))\n- announce every finished job on the bus ([2792ba9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2792ba9d621b60844317b4a7f4412a6eba89083f))\n- measure each server's disk use by group, without following symlinks ([2e95f03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2e95f0346a392c1bfcac13dd9a68b2c1421bc700))\n- System shows Flytower and Java updates, with a badge in the sidebar ([77825b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77825b603b2ec2397b3dced2970ee386dfda4c8c))\n- Content tab mentions a newer Minecraft and says quietly when a check failed ([bc87cfd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbc87cfd57f5f8f42cee31a025ffad382fc9fbf16))\n- update badges on the servers list and the Content tab ([8b82843](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8b82843fc0c60309e557fe08cb08b63a361cb5f8))\n- updates WebSocket topic and API, kept in step with the Content tab and System ([f46f101](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff46f101baa0d8eb746fd5ad6f8d7ae5012e110ab))\n- check for updates every six hours and when the panel is opened ([0eea61c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0eea61ce23fa48e90dff83f649f0767682b4977c))\n- background update checker that keeps the last good result ([2169282](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21692828d00df78bdd45b59f5bd0dcaad5a3b10d))\n- compare installed Java runtimes with Adoptium's newest builds ([334f933](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F334f933633e76032122ce2e5be23136b6f25b01b))\n- update_status table for the background update check ([6aeb63d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6aeb63d5620b8f186b20be22f05127588547a455))\n- Start and Target dates on the Projects board (#96) ([36992d3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36992d3f3c0443aac95b829a19c9175ae3e1b41f))\n- re-sync the board when a milestone's due date changes ([94fe5dd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F94fe5dd25de30526bce44d8c2c29e11e8286553c))\n- board-sync fills in Start date and Target date for the Roadmap ([fa2a4a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffa2a4a45cf36497999bf97ab62b315427696a48b))\n- keep the Projects board's Status in sync automatically (#95) ([57173e4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F57173e422de62ed53f6b4962b9c5e0fa1b27bc56))\n- Board workflow keeps the Projects board in sync as issues and PRs change ([021c48e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F021c48e2b2c321a3b0c0f6aa791e250b2c5fb491))\n- board-sync script that sets each board item's Status from the repository ([5607ae4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5607ae411934adb25cffce3510f370d4291e7e06))\n- show the Assistant's reply in the run summary for dispatched runs (#92) ([37b3df3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F37b3df39dedb80a5276b4f6c353de2e31099331a))\n- show the Assistant's reply in the run summary for dispatched runs ([2464b3c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2464b3c3c3007fadd2949e956ce9909889399a47))\n- let the Assistant workflow use a Claude subscription token (#91) ([ff763b9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff763b94feb577408958125830847fd34545ac55))\n- let the Assistant workflow use a Claude subscription token ([2505f81](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2505f815d6010c7c8c95575d0073f86626372f0d))\n- release notes start with a written summary (#87) ([54e2dd5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F54e2dd5ca6f5539cc6eec7b3b3c39363143b1231))\n- Assistant workflow for releases and the Projects board (#88) ([ca67a53](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fca67a5327249301e78a7b9dff395636d2ac1780d))\n- Assistant workflow for releases and the Projects board ([aa9983c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa9983c81a094dfebae355df57816757f407c962))\n- **release:** start notes with a written summary, and list commits that aren't Conventional Commits ([8918df4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8918df40014d9c6fbab36f4658b1860b7f8ec678))\n- license Flytower under AGPL-3.0 (#84) ([8474e83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8474e8357e2ef431753d1ae393db317f65b03219))\n- crash detection, crash loops and \"not responding\" (#78) ([74555ba](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F74555bae65241aaa2b57a320b474f18d4d86fed8)) · [#57](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F57)\n- **notify:** the new-version notice follows the update channel, so Stable installs aren't told about betas ([b67c684](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb67c6841d741d2a959a8068917b8c74385450c09)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **installer:** --pr \u003Cnumber> installs a pull request's signed test build ([88ad47f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F88ad47f2dd8ff05036998ba22441f54b056fbd62))\n- **notify:** Notifications card on System to add, edit, test and remove channels ([627f40a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F627f40a2ca8ff54b463defe09f0d25de96aa223a)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** API to list, add, change, test and remove channels, with passkey checks and activity entries ([2dae952](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2dae95209d95b0201cb810685078ce3317d44334)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** report failed backups and off-site copies, the disk filling, updates, starts, stops, joins and leaves ([215aeea](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F215aeea5e3a65b25487de8b7f8e792c3c5717d83)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** send to Discord, ntfy and signed JSON webhooks, with quiet periods and retries ([cc9ea0d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc9ea0d4b8eb4ae09ab66d8560a58e0b2f27b3dd)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** tables for notification channels and what has been sent ([fe04ce7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffe04ce74a77f943704e0814f06f66c60815c0582)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Fixes\n\n- re-running the installer no longer fails writing the setup token (#110) ([ab6b041](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fab6b0418b8834cf98111f76af7d3912cecdba368))\n- **installer:** write the setup token hash where a starting panel can't take it mid-write ([894ce57](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F894ce57f293205322129adc67c5cb17d159d9f4a))\n- schedule previews show times in the schedule's own time zone ([eddeb19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feddeb197ae6416c64962868d559a5cebfeabecd9)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- hide management-server-secret and other secret properties (#100) ([5e7ad41](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e7ad41233a774405d5aa098fb9765c6681e49c3))\n- a cloned server gets fresh secrets instead of the original's ([98a317a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98a317af254a3aa1101c15afc7204b5adbe28634))\n- the properties API hides secrets and refuses edits to them ([fc5809c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffc5809cbfe7327575efe5ee0f532051dc581f00b))\n- keep secret properties such as management-server-secret out of specs ([8109480](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81094804fd345c7009135c7890152fd45d3d75c9))\n- backups skip files they can't read instead of failing (#98) ([543c3fc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F543c3fcc8d309c41f7c53fbdab26d33e5ffb72ff))\n- backups skip files they can't read instead of failing ([aa8c2da](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa8c2daa4ba4a698c2bf2690add1b087c8438635))\n- board-sync finds fields by listing them, since asking for a missing one is an error ([7170cc7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7170cc7e5dfd7d03f78ab0cc133d062991161c23))\n- board-sync asks for plain fields on issue and PR connections ([a6330dc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa6330dc56ca7dfa8b5b83805d9b8f9160dce0250))\n- let the Assistant write GraphQL queries to files (#94) ([befe831](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbefe831a0fcc7da5d67ff22d3a7da00ae895b4c2))\n- let the Assistant write GraphQL queries to files ([2702fb7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2702fb7b7db8790f95e4c2266649c37f8ed187d9))\n- let the Assistant reach the Projects board with PROJECTS_TOKEN (#93) ([affad7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faffad7bd0c95960e4f2b586f0fb32495b15e3910))\n- pass PROJECTS_TOKEN under its own name, since the action overwrites GH_TOKEN ([c015409](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc015409dfce0f2e6a095b952e23fea9933d8c1ff))\n- run board commands with PROJECTS_TOKEN through a gh wrapper ([047d0da](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F047d0da7437c96f1a4844ba4537d4783219dd79a))\n- release notes from 1.1.0-beta.2 onwards match the earlier format (#90) ([f421421](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff421421f1527e00a9bfb2e7bab24a0c57b707b78))\n- **release:** split squash merges back into their commits in release notes ([687ac10](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F687ac10a9f70abfdfd35af933ff2db8cd303eab2))\n- say why an Assistant run failed (#89) ([c7dff70](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc7dff7063736c384f1dc63c093c224902ec0e84e))\n- say why an Assistant run failed ([6e2a1f0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e2a1f003bacac50798ea887250d0b53397c3580))\n- **notify:** notice quick stops and starts from the status poller, not only the minute sampler ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** hear starts, stops, restarts, joins and leaves from the server log through inotify, with no polling ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Docs\n\n- release summary for scheduled tasks ([d0a1948](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0a19487e540e095f8302bf95354750f02d48ddd)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- scheduled tasks, the spec's schedules and timezone, and testing notes ([285413e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F285413e1067ef45425e2019e4a05680e16b672c4)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- disk space guide, testing notes and release summary for disk use ([b34297a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb34297adff950df692877ff7946f017b999b8e56))\n- release summary for update badges ([be6ab4c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbe6ab4c251916c413cf4a7f5b535ae74bb322ad0))\n- update badges, with 1.1.0 testing notes ([e8f691d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8f691d287a423bad5465e643a912c79b142b4e9))\n- release summary for hidden secrets ([078fef7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F078fef76153dd8c669fdee7e98ee8621ef6bee44))\n- list the properties Flytower manages or hides, with testing notes ([45dae88](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F45dae88e4d6ee3a3dd09406c39065d341aba21b3))\n- release summary for 1.1.0-beta.5 ([7132c63](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7132c631d016ce2fa2629a831d6148c5f1d98d20))\n- what backups leave out, and testing notes for skipped files ([a438284](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa43828447b9b8303b08fe1b96952acfed4ddf027))\n- line up the Assistant workflow's secrets list ([bb15217](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbb152176a9c9f95ae45a22db086b5bc18cb2f8d2))\n- **release:** summaries for 1.0.1 to beta.4 share one shape: short paragraphs and a testing link ([e2c6a11](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe2c6a116849883529fd87e6dedc93d4ba27aa73d))\n- write the house rules for the Assistant workflow ([976fccd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F976fccdb31f5194b5dcae39db1d6f4db1180f31b))\n- **release:** summaries for 1.0.1 and 1.1.0-beta.1 to beta.4 ([f31b454](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff31b4541e42e72762de6eb4ecb23d22ec751a203))\n- **notify:** activity comes from the log as it happens, and restart alerts ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- notifications, and 1.1.0 testing notes starting with them ([d5b32a7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd5b32a7310d171a4f84478652e64c601b2bfa734)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Other\n\n- **e2e:** a scheduled restart with a warning, and a command's reply ([5901cd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5901cd3c4b7109c41c6341474803eb004586e62e)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- schedules in plans and apply ([1dbdd6e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1dbdd6e16e87f5b3d92079c9d91fb069fe948897)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- one set of cron timers for backups and scheduled tasks ([5a6362a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5a6362aac03fbbcfb0867dd826baa91dd041b7e7)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- smoke checks the System page measures the test server ([d8e516a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8e516a0643302977c05bc2006a5c53e938d4bed))\n- Release notes workflow rewrites an existing release's notes from main ([53eae73](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53eae732c6365a0c1484aebbf0571cd421639c4f))\n- **notify:** drop the status-poll feed, and let a log tailer run without a timer ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- build and sign each pull request as a test build under pr-\u003Cnumber> ([2791438](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F27914384d5f4c1fea86a12f38fd85a8147ef3799))\n- **e2e:** add a webhook channel through the form and check its test arrives signed ([b4c7900](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4c79002a4613d0e701da73f2eabf6c73be54570)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Other changes\n\n- UI pass: display fixes, consistent layout, phone layout, System sections (#83) ([1253de5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1253de532c19ce46c9bed0a5765284a510348e1a)) · [#79](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F79)\n- Merge main (update channel, 1.0.1) into feat\u002Fnotifications; notifications move to migration 0008 ([651ac73](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F651ac73082b89498eef5ee99d891bd6bec123836))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.0.1...v1.1.0",{"version":1023,"date":1024,"url":1025,"beta":945,"body":1026},"1.1.0-beta.6","2026-11-10T12:39:06Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nSecrets 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.\n\nSystem 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.\n\nServers 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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.6\u002Fdocs\u002Fschedules.md).\n\nTesting notes are in the \"Update badges\", \"Hidden secrets\", \"Disk use\" and \"Scheduled tasks\" sections of [testing-1.1.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.6\u002Fdocs\u002Ftesting-1.1.0.md).\n\n### Features\n\n- scheduled restarts, commands and announcements (#105) ([566d812](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F566d8120a1c96af9c6408a5a0100e6a910e1c144))\n- disk use per server, and low disk warnings (#103) ([070a413](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F070a41359f5deeef7e929b8d5f113b1b5f1d8557))\n- call off a restart while it counts down ([a72a1b1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa72a1b12d3b03fca38dd524c7e9d2b3cd1ded3f0)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **ui:** a Schedules tab to add, edit and run scheduled tasks ([0e94840](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e94840cd1bd3f5906d45667e94878b59c65e656)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **spec:** schedules in plans, apply, the YAML tab, new servers and clones ([3a98909](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a9890971da00029610dbc8aa8c3f86d1f594d39)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **api:** list, save and run scheduled tasks ([6357e75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6357e75f47e497ba70395ee6c4c559062da2eab6)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- run scheduled restarts, commands and announcements ([5e0ccf8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e0ccf80d5d173f2682e29d3dfeb86bca0659875)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **backups:** wait for a server's lock to be let go ([f42d36b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff42d36b5ce5852b194fb906f097efa5e0f2e9574)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **db:** a schedules table and a time zone per server ([26a390d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F26a390d848e05468d1307cb995b1d37159db4c83)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- **spec:** schedules and timezone in server specs ([55da5d7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55da5d7de22723ac394f964f09f6f9937d808c66)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- update badges for Flytower, content, Minecraft and Java (#101) ([aa27a67](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa27a67e685529f5a8c00c33a3499c761dbe2228))\n- warn before a manual backup on a nearly full disk ([42fc0ae](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42fc0aebaf5460e4b03c48e97fd38444cb747f52))\n- banner on every page while the disk is 95% full ([df66916](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf669166c125c48d091c4c9da6f57165e0c440a4))\n- disk use breakdown on each server's Settings tab ([c141d1f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc141d1fa77debc7962bfcebf24a67ad4fc3a9e2e))\n- disk bar on System, split by server, with free space and a table ([36cf41a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36cf41ab7516251499ca1f4091c2e659f810a0f2))\n- include display names in the System disk report ([5cec5ef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5cec5ef353a0834409c945088aa797084664b2cf))\n- skip scheduled backups when the disk is 95% full ([e82bed3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe82bed3495ae3726646a184d588350333b6c48ed))\n- disk use API for the System page and each server ([608cb89](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F608cb892b3be36869787824b222e4c1248c9405d))\n- measure disk use in the background, hourly and after each job ([eb81b80](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb81b805a081bc399e821a4d5d54eb943deb8a9a))\n- announce every finished job on the bus ([2792ba9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2792ba9d621b60844317b4a7f4412a6eba89083f))\n- measure each server's disk use by group, without following symlinks ([2e95f03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2e95f0346a392c1bfcac13dd9a68b2c1421bc700))\n- System shows Flytower and Java updates, with a badge in the sidebar ([77825b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77825b603b2ec2397b3dced2970ee386dfda4c8c))\n- Content tab mentions a newer Minecraft and says quietly when a check failed ([bc87cfd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbc87cfd57f5f8f42cee31a025ffad382fc9fbf16))\n- update badges on the servers list and the Content tab ([8b82843](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8b82843fc0c60309e557fe08cb08b63a361cb5f8))\n- updates WebSocket topic and API, kept in step with the Content tab and System ([f46f101](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff46f101baa0d8eb746fd5ad6f8d7ae5012e110ab))\n- check for updates every six hours and when the panel is opened ([0eea61c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0eea61ce23fa48e90dff83f649f0767682b4977c))\n- background update checker that keeps the last good result ([2169282](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21692828d00df78bdd45b59f5bd0dcaad5a3b10d))\n- compare installed Java runtimes with Adoptium's newest builds ([334f933](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F334f933633e76032122ce2e5be23136b6f25b01b))\n- update_status table for the background update check ([6aeb63d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6aeb63d5620b8f186b20be22f05127588547a455))\n\n### Fixes\n\n- re-running the installer no longer fails writing the setup token (#110) ([ab6b041](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fab6b0418b8834cf98111f76af7d3912cecdba368))\n- **installer:** write the setup token hash where a starting panel can't take it mid-write ([894ce57](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F894ce57f293205322129adc67c5cb17d159d9f4a))\n- schedule previews show times in the schedule's own time zone ([eddeb19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feddeb197ae6416c64962868d559a5cebfeabecd9)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- hide management-server-secret and other secret properties (#100) ([5e7ad41](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e7ad41233a774405d5aa098fb9765c6681e49c3))\n- a cloned server gets fresh secrets instead of the original's ([98a317a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98a317af254a3aa1101c15afc7204b5adbe28634))\n- the properties API hides secrets and refuses edits to them ([fc5809c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffc5809cbfe7327575efe5ee0f532051dc581f00b))\n- keep secret properties such as management-server-secret out of specs ([8109480](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81094804fd345c7009135c7890152fd45d3d75c9))\n\n### Docs\n\n- release summary for scheduled tasks ([d0a1948](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0a19487e540e095f8302bf95354750f02d48ddd)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- scheduled tasks, the spec's schedules and timezone, and testing notes ([285413e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F285413e1067ef45425e2019e4a05680e16b672c4)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- disk space guide, testing notes and release summary for disk use ([b34297a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb34297adff950df692877ff7946f017b999b8e56))\n- release summary for update badges ([be6ab4c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbe6ab4c251916c413cf4a7f5b535ae74bb322ad0))\n- update badges, with 1.1.0 testing notes ([e8f691d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8f691d287a423bad5465e643a912c79b142b4e9))\n- release summary for hidden secrets ([078fef7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F078fef76153dd8c669fdee7e98ee8621ef6bee44))\n- list the properties Flytower manages or hides, with testing notes ([45dae88](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F45dae88e4d6ee3a3dd09406c39065d341aba21b3))\n\n### Other\n\n- **e2e:** a scheduled restart with a warning, and a command's reply ([5901cd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5901cd3c4b7109c41c6341474803eb004586e62e)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- schedules in plans and apply ([1dbdd6e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1dbdd6e16e87f5b3d92079c9d91fb069fe948897)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- one set of cron timers for backups and scheduled tasks ([5a6362a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5a6362aac03fbbcfb0867dd826baa91dd041b7e7)) · [#58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58)\n- smoke checks the System page measures the test server ([d8e516a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8e516a0643302977c05bc2006a5c53e938d4bed))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.5...v1.1.0-beta.6",{"version":1028,"date":1029,"url":1030,"beta":945,"body":1031},"1.1.0-beta.5","2026-11-10T11:48:41Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nTesting notes are in the last section of [testing-1.1.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.5\u002Fdocs\u002Ftesting-1.1.0.md).\n\n### Features\n\n- Start and Target dates on the Projects board (#96) ([36992d3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36992d3f3c0443aac95b829a19c9175ae3e1b41f))\n- re-sync the board when a milestone's due date changes ([94fe5dd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F94fe5dd25de30526bce44d8c2c29e11e8286553c))\n- board-sync fills in Start date and Target date for the Roadmap ([fa2a4a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffa2a4a45cf36497999bf97ab62b315427696a48b))\n- keep the Projects board's Status in sync automatically (#95) ([57173e4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F57173e422de62ed53f6b4962b9c5e0fa1b27bc56))\n- Board workflow keeps the Projects board in sync as issues and PRs change ([021c48e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F021c48e2b2c321a3b0c0f6aa791e250b2c5fb491))\n- board-sync script that sets each board item's Status from the repository ([5607ae4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5607ae411934adb25cffce3510f370d4291e7e06))\n- show the Assistant's reply in the run summary for dispatched runs (#92) ([37b3df3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F37b3df39dedb80a5276b4f6c353de2e31099331a))\n- show the Assistant's reply in the run summary for dispatched runs ([2464b3c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2464b3c3c3007fadd2949e956ce9909889399a47))\n- let the Assistant workflow use a Claude subscription token (#91) ([ff763b9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff763b94feb577408958125830847fd34545ac55))\n- let the Assistant workflow use a Claude subscription token ([2505f81](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2505f815d6010c7c8c95575d0073f86626372f0d))\n- release notes start with a written summary (#87) ([54e2dd5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F54e2dd5ca6f5539cc6eec7b3b3c39363143b1231))\n- Assistant workflow for releases and the Projects board (#88) ([ca67a53](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fca67a5327249301e78a7b9dff395636d2ac1780d))\n- Assistant workflow for releases and the Projects board ([aa9983c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa9983c81a094dfebae355df57816757f407c962))\n- **release:** start notes with a written summary, and list commits that aren't Conventional Commits ([8918df4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8918df40014d9c6fbab36f4658b1860b7f8ec678))\n\n### Fixes\n\n- backups skip files they can't read instead of failing (#98) ([543c3fc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F543c3fcc8d309c41f7c53fbdab26d33e5ffb72ff))\n- backups skip files they can't read instead of failing ([aa8c2da](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa8c2daa4ba4a698c2bf2690add1b087c8438635))\n- board-sync finds fields by listing them, since asking for a missing one is an error ([7170cc7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7170cc7e5dfd7d03f78ab0cc133d062991161c23))\n- board-sync asks for plain fields on issue and PR connections ([a6330dc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa6330dc56ca7dfa8b5b83805d9b8f9160dce0250))\n- let the Assistant write GraphQL queries to files (#94) ([befe831](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbefe831a0fcc7da5d67ff22d3a7da00ae895b4c2))\n- let the Assistant write GraphQL queries to files ([2702fb7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2702fb7b7db8790f95e4c2266649c37f8ed187d9))\n- let the Assistant reach the Projects board with PROJECTS_TOKEN (#93) ([affad7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faffad7bd0c95960e4f2b586f0fb32495b15e3910))\n- pass PROJECTS_TOKEN under its own name, since the action overwrites GH_TOKEN ([c015409](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc015409dfce0f2e6a095b952e23fea9933d8c1ff))\n- run board commands with PROJECTS_TOKEN through a gh wrapper ([047d0da](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F047d0da7437c96f1a4844ba4537d4783219dd79a))\n- release notes from 1.1.0-beta.2 onwards match the earlier format (#90) ([f421421](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff421421f1527e00a9bfb2e7bab24a0c57b707b78))\n- **release:** split squash merges back into their commits in release notes ([687ac10](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F687ac10a9f70abfdfd35af933ff2db8cd303eab2))\n- say why an Assistant run failed (#89) ([c7dff70](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc7dff7063736c384f1dc63c093c224902ec0e84e))\n- say why an Assistant run failed ([6e2a1f0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e2a1f003bacac50798ea887250d0b53397c3580))\n\n### Docs\n\n- release summary for 1.1.0-beta.5 ([7132c63](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7132c631d016ce2fa2629a831d6148c5f1d98d20))\n- what backups leave out, and testing notes for skipped files ([a438284](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa43828447b9b8303b08fe1b96952acfed4ddf027))\n- line up the Assistant workflow's secrets list ([bb15217](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbb152176a9c9f95ae45a22db086b5bc18cb2f8d2))\n- **release:** summaries for 1.0.1 to beta.4 share one shape: short paragraphs and a testing link ([e2c6a11](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe2c6a116849883529fd87e6dedc93d4ba27aa73d))\n- write the house rules for the Assistant workflow ([976fccd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F976fccdb31f5194b5dcae39db1d6f4db1180f31b))\n- **release:** summaries for 1.0.1 and 1.1.0-beta.1 to beta.4 ([f31b454](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff31b4541e42e72762de6eb4ecb23d22ec751a203))\n\n### Other\n\n- Release notes workflow rewrites an existing release's notes from main ([53eae73](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53eae732c6365a0c1484aebbf0571cd421639c4f))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.4...v1.1.0-beta.5",{"version":1033,"date":1034,"url":1035,"beta":945,"body":1036},"1.1.0-beta.4","2026-11-10T09:01:35Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nAfter 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.\n\nFlytower is now free software under the GNU AGPL v3.0.\n\nTesting notes are in section 2 of [testing-1.1.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.4\u002Fdocs\u002Ftesting-1.1.0.md).\n\n### Features\n\n- license Flytower under AGPL-3.0 (#84) ([8474e83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8474e8357e2ef431753d1ae393db317f65b03219))\n- crash detection, crash loops and \"not responding\" (#78) ([74555ba](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F74555bae65241aaa2b57a320b474f18d4d86fed8)) · [#57](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F57)\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.3...v1.1.0-beta.4",{"version":1038,"date":1039,"url":1040,"beta":945,"body":1041},"1.1.0-beta.3","2026-11-10T01:06:26Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.1.0-beta.3","A tidy-up of the whole panel after the UI audit. Nothing about how servers run has changed.\n\nOn 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.\n\nTesting notes are under **UI pass** in [testing-1.1.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.3\u002Fdocs\u002Ftesting-1.1.0.md).\n\n### Other changes\n\n- UI pass: display fixes, consistent layout, phone layout, System sections (#83) ([1253de5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1253de532c19ce46c9bed0a5765284a510348e1a)) · [#79](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F79)\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.2...v1.1.0-beta.3",{"version":1043,"date":1044,"url":1045,"beta":945,"body":1046},"native-1.3.1-native.1","2026-11-10T21:50:08Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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.\n\n### Features\n\n- Settings and World as one page of collapsible sections ([272e2f6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F272e2f6735ea9b64f3a2bfe31f6c52bb96e04b4d))\n- collapsible sections component ([a1f5f58](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa1f5f58f9265fe1fc51d7768ac808ab8dbd46121))\n\n### Fixes\n\n- point notifications, tests and docs at the new sections ([73ddb2e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73ddb2edfd6c97a9c3418d9b22b26bbcfe855fe3))\n- keep the MOTD editor within the screen on phones ([3781e26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3781e2681a86743a8df3c01e2c76c9eb44e6683a))\n\n### Docs\n\n- release notes for 1.3.1 and its native build ([60c3dae](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F60c3dae1277ceeeb57ef8f9cdde6a668fe152eda))\n\n### Other\n\n- G B jumps to the Backups section of World ([c457fe8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc457fe85ecc74b7172a1ce86ca31493cfabf158a))\n\n### Other changes\n\n- Merge main into feat\u002Fcollapsible-sections ([cd76fe6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcd76fe6298a6959a7b6e1b5aa30b469a6eba51c4))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.0-native.1...native-1.3.1-native.1",{"version":1048,"date":1049,"url":1050,"beta":945,"body":1051},"native-1.3.0-native.1","2026-11-10T21:05:51Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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 `\u002Fetc\u002Fflytower\u002Fagent`, 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.\n\nTesting: on a spare VPS, switch Rust on and follow [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.3.0-native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md).\n\n### Features\n\n- let each browser turn single-key shortcuts off ([fd0c73c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffd0c73cfd9db220b8601771980f99270fa789dfe))\n- show shortcuts in the command palette ([78fce4a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78fce4abc2d72e3f12658819fee42240fc0fc997))\n- save Settings and review YAML with Ctrl+S ([6860d53](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6860d53a1156f1a1f14fb4bfd88dd77330d26013))\n- move through cards and rows with J\u002FK, Enter, . and Shift+Delete ([8ce3fd9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ce3fd95b6f4760df63f9516524589f28381d2fe))\n- add G-jumps, L for logs, [ ] between servers, \u002F and the ? sheet ([dddb348](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdddb3482a82743da362cbe32224b8f24a43d5df6))\n- add one shortcut list for jumps, the sheet and hints ([61abb32](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F61abb325a2258f6340647237f95f9b6371b99577))\n- right-click menus on notification channels, with Pause and Resume ([01f32a5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01f32a50250fb0c87e551ab7a10473f2833db00b))\n- right-click menus on crashes, with Copy report ([0e4da7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e4da7bf968044e36eb644234f80bf36941d0fe8))\n- right-click menus on world exports and past worlds ([581b7aa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F581b7aaa82c6f516b2f71cbde2ce2c9583c2455d))\n- right-click and ⋯ menus on Players rows ([fcf7f78](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffcf7f7826ac8d693c5692290718c8535aba01a11))\n- player action list for right-click menus ([5356f9c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5356f9cc759740f3b6c683dcccd366df8d0187b7))\n\n### Fixes\n\n- console say, me and msg show under [Server] and your name, not Rcon ([d4a61c6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd4a61c670b2c6dde57b7c43747e93c436fb2ee23))\n\n### Docs\n\n- release notes for 1.3.0 and its native build ([e82f1df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe82f1dfb33f39b3c3f159b30f9b4c69971b8e0ba))\n- keyboard shortcuts page and 1.4.0 testing notes ([cc45797](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc457978fd8fdbd03412a5c97987b26604f1d3e9))\n- testing notes for the remaining right-click menus ([fdbd9d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffdbd9d59f89f025679c36097d0af5ab74bac558e))\n\n### Other\n\n- share the per-browser on\u002Foff switch ([4c15618](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c156189100085a45a4e7a8edf9735bc788a57eb))\n\n### Other changes\n\n- Merge main into feat\u002Fkeyboard-shortcuts ([284de08](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F284de08565952c7a7a607587edbcb5a10b8eca30))\n- Merge main into feat\u002Fright-click-more ([74b5dd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F74b5dd33fa9f006b37880b77f3297bb642faaf95))\n- Merge main into feat\u002Fkeyboard-shortcuts ([dee37e0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdee37e0b956d422c27fd8ed6c28be2d26849bca6))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.0-beta.3.native.1...native-1.3.0-native.1",{"version":1053,"date":1054,"url":1055,"beta":945,"body":1056},"native-1.3.0-beta.3.native.1","2026-11-10T20:16:14Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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 `\u002Fetc\u002Fflytower\u002Fagent` 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.\n\nTesting: on a spare VPS, switch Rust on, then follow [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.3.0-beta.3.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md), including the update and rollback checks.\n\n### Features\n\n- post deaths and advancements to Discord chat ([afd6213](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fafd621399238150fc3e98686b17aeb77292adb96))\n- map markers glide between player positions ([ae98c9e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae98c9e070e04fa6623dc9c3090c92019a696060))\n- ask for player positions every second, and dimensions less often ([9fed6c5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9fed6c582f22dd8fa094471da1e5b520f03ad1d8))\n- ship the Rust updater behind the same switch ([7fcc888](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7fcc88831a839dc75ba557f655b04d2b7607dfb0))\n- port the updater to Rust ([e8dfcfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8dfcfc3890ebaaddf3c983eaf653632280098c6))\n- command palette on Ctrl + K with servers ahead of help ([9048e82](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9048e82e671ed701e6cd9e9ac0af00c070141a36))\n- palette links with recent servers and pages ([11d04b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F11d04b6f086d3bc9203898124026438f7d5693bf))\n- palette entries for servers, their tabs and actions ([292317c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F292317cec34f80112857839acdcb37bb98b73593))\n- show a progress bar while the web map is drawn ([3bad87a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3bad87a634a128c2afb137a1e44187ce79143d32))\n- the map service passes on how far a draw has got ([4dca738](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4dca7380906de90b7e510c09d8e5f511de85cb53))\n- flytower-map reports progress as it draws ([be67347](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbe673477a6664e0941c2d62cc2325aa100cdbced))\n- **panel:** head the rest of the machine, and show the journal's size ([b34bd32](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb34bd3265294031c6b0858f37c9fa98203346abc))\n- suggestions, ghost text and Tab cycling in the console ([1155d74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1155d74393e9eb286b3b23096d099b47372c168b))\n- complete console commands in the browser ([34257d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F34257d564582526c89f3be8174ddd6d91b34c474))\n- serve each server's command catalogue to the console ([e1dc152](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe1dc15221ea59e7677a948982dbde9a00d445d34))\n- read the game's command tree and help for console completion ([4db2c17](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4db2c17a309470cdac2895efca2491914abddf6d))\n- right-click and ⋯ menus on Content items ([9ed0a34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ed0a34c9b10a1ae5d5492eb122667de1ac7cb41))\n- right-click menus on Backups rows ([00cde07](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00cde07b4e66f42aa71e9d4ec85c34704648f604))\n- right-click menus on Files rows, with Copy path ([9d51571](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9d515716adc667c36bbdfd1d7521e6f17cd0682e))\n- download links work from the phone action sheet ([b81fa22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb81fa22d897e87c489784dc11ab242702d7e02cb))\n- **panel:** show the rest of the machine in parts on System, with Clean up ([c698284](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc698284529266fc5c019bea68ec3f616c83862cc))\n- ActionTarget renders the card or row itself, so it works inside tables ([52f8aeb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F52f8aebb3bd3c83a5ce09b54c5e1959cda427b90))\n- **panel:** measure disk use through the agent, with clean up ([81c3de8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81c3de829fef70efcb7c539d5162d6099868afe3))\n- per-browser switch for right-click menus ([e741c14](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe741c14589f2c4c53053fd91ed21db61092209b8))\n- right-click and ⋯ menus on server cards ([b626ee4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb626ee49b7dc585e157201850f3e60abafed27ae))\n- open clone, delete and back-up confirms from a link ([d064f9b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd064f9b47c9f4f8e21a58aa1b8c4d5f26e31697d))\n- ActionTarget wrapper with keyboard, long-press sheet and browser-menu pass-through ([e56e519](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe56e51907b3099ecc83c23817d1acd3801343402))\n- rules for right-click menus and the server action list ([ca161c7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fca161c740e81960b56f65728fa746f3ccaa63e95))\n- **agent:** disk verbs in the Rust agent ([22e1a29](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22e1a29e5d2f02cc2262e89812234b323390ddbc))\n- show tick time, memory and CPU on the servers overview, with charts in a pop-up ([92a20a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92a20a2aae5fe97ce0c4d5e5705454297559805a))\n- publish each server's last hour of figures for the servers overview ([a4f0f18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa4f0f1857832d8214796e74113ac6a0c660e6cca))\n- move Stats onto the Players tab ([d8ca54b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8ca54bdf77640aa295392be33aebc5b2de1aa38))\n- open logs and crashes in a pop-up from the Console ([462119c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F462119cae593347b9616b9d0a5ecdbc6cced26b3))\n- split World and Settings into sections, with Backups, Schedules and YAML inside them ([5d4e6b7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5d4e6b70c68a631107d5e949171e039151cf8a00))\n- **agent:** measure disk use and clean up as root ([b7b0689](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b0689e89a6e3598347a259cf5230b1bed77869))\n- **protocol:** disk.usage and three clean-up verbs ([974b233](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F974b2334362224a8a967d3fb6dcb1ca666be5d5a))\n\n### Fixes\n\n- add server hostnames to an old Caddyfile in the Rust agent too ([06bcb26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F06bcb26fe8c5e0da878eb2073c1855806245e4e6))\n- add server hostnames to an old Caddyfile when the agent starts ([d728ea0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd728ea086056fc85406a68b8041d4bcbacb6ac79))\n- post joins and leaves as plain text, like the rest of the chat relay ([f54de7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff54de7d589ad735665f9bf5ffb6efc783ad07c42))\n- show join and leave lines in Discord chat ([22ee71b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22ee71b477517a33fccd1e3cf7e4c0b266eeae4a))\n- redraw every map once with the fixed renderer ([687ec95](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F687ec95270a10de419c20a914e5e9e2a76979ae5))\n- read block names the way Minecraft 26.3 saves them ([0b5f92c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0b5f92c02a0fa1994bf42222995244ac950e093a))\n- open the newest log straight away, and keep Back closing the logs pop-up ([e888bbc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe888bbcd8f645daa78dd0dd5532ffa1c19908b68))\n- point links, notifications and help at the new server sections ([5ec964a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ec964ae354ac61d9ee2e192246ca6b522b55871))\n- give the Rust agent steps inline ([c3ca6ac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3ca6ac4149c2600f8751cc806c34d4ff8ac175f))\n\n### Docs\n\n- add system disk use to the 1.3.0-beta.3 notes ([ab864d1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fab864d149f3afe2fb06645d36436668b456d70ae))\n- release notes for 1.3.0-beta.3 and its native build ([4c1cc31](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c1cc31886280a903ca61270af0ee1bda3ba13e4))\n- hostnames start working after an update, no installer re-run ([53cb5c4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53cb5c4e8c5c164559de01e10f286256606a1334))\n- console autocomplete testing notes ([cf19e3c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf19e3c75aff9294b4bf6aee6912e7baefc233ee))\n- release summary for 1.3.0-beta.2 ([579cebd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F579cebd84facce001936a7f85e9c3c6edc2c55ad))\n- command palette testing notes ([73d333f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73d333f919d29b4327ecb6db0dc3a5f4391118b5))\n- typing commands in the console ([48ac8bd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48ac8bdaadbec620b4b39188fe894cae09bb7c3a))\n- testing notes for list right-click menus ([501ebcc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F501ebcccc4e9c61c6661391a48d4af8a5ddc7201))\n- right-click menus and 1.4.0 testing notes ([e0ff693](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe0ff693b2539cf7fcb2b98d54e1dea6a0e2e9cdb))\n- native builds come from main now ([98f4cc0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98f4cc0fd4f7940804deb5fc4533cd48a4f4f9b0))\n\n### Other\n\n- go back to the console before the crash banner check ([ff3fd59](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff3fd59c125bb240479b8597f779a797132aecd9))\n- don't reuse a name the smoke test already declares ([d9f5166](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd9f516613937e2fed08a24bb9e3689b8cd38bb67))\n- check console completion against a real server in E2E ([ebc1b96](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Febc1b9605b1a204cdaf2fe7621c74f3ae6d72bba))\n- **panel:** the clean-up route needs system.manage ([30c0a75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F30c0a750a02e62e55c905f5e101320e3af2beedd))\n- share the copy-with-toast helper between menus ([1ffe81c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ffe81ce3730e3205ef679dd56ba1f883209ffbe))\n- right-click menu on a running server card in E2E ([48e8af3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48e8af35471ced319ecf941f0c566bfc247f2186))\n\n### Other changes\n\n- Merge main into feat\u002Fsystem-disk-use ([fddc78a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffddc78a4e252aeb84b1c6ceb2d288c36f377f2bd))\n- Merge main into feat\u002Fsystem-disk-use ([18485b3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18485b32af63d384a89e7d9001621bf93853b6e0))\n- Merge main into feat\u002Fsystem-disk-use ([165e561](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F165e561f8cc0f2860efe3ca9843a81591f385564))\n- Merge main into feat\u002Fsystem-disk-use ([3b03cfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3b03cfca874e1d73e6e2051bd22e3daa28d829cd))\n- Merge main into feat\u002Fserver-tabs ([0ed6057](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0ed60579436e733221940ae47dd24dbe96f84656))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.0-beta.1.native.1...native-1.3.0-beta.3.native.1",{"version":1058,"date":1059,"url":1060,"beta":945,"body":1061},"native-1.3.0-beta.1.native.1","2026-11-10T18:12:35Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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.\n\nTesting: follow [Testing the Rust agent](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.3.0-beta.1.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md) on a spare VPS, and check that switching back to the Bun agent still works.\n\n### Features\n\n- link the map from the public page once it's drawn ([8682411](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F868241199515f6c6816d9d1b78e584fb03312082))\n- link a public web map from \u002Fstatus in Discord ([abd9cef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabd9cef298617817c50051a862ec574f1990dbed))\n- link the web map from the public status page ([b13438f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb13438fe42c81a0795e15c28b219895251a63e96))\n- include a public web map in the server's public status ([abfa5d1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabfa5d15d407d4be0557a0f9c7faeea834e74cb9))\n- open and share the map from the World tab ([5fee78d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fee78d05a8942a313ae74c7d3d4bfd84fdb0b16))\n- our own web map viewer ([f5df022](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff5df022bc7215719e09a9dfb7b5bba7d8dec7c9c))\n- serve the web map at \u002Fs\u002F\u003Cname>\u002Fmap\u002F ([6c37c83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6c37c835ab4544542607d022caa29e18f873ad04))\n- show the web map on a server's own hostname ([6a013b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6a013b2417f8153e32f4d862222547e57026cf33))\n- ship the Rust agent behind an opt-in switch ([8d8ad1f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8d8ad1fa8b0d9ebf1b7d9a56402c98cea623916b))\n- ship flytower-map in the release ([3a137b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a137b443700644fcfdabc0a0575479fb18bb4fe))\n- web map card on the World tab ([4261b98](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4261b982f900d8171594b9e4341d23e9c2f9283b))\n- map settings, status and drawing through the API ([948467e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F948467e73adaf70d19d95d08cc554d935c17aab1))\n- the panel keeps web maps drawn with flytower-map ([dec01b7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdec01b7534aa7e471e72559ece283efb9f3fe703))\n- disk use counts each server's web map ([3c6a04a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c6a04a16a3071c46c4556d85350b1961a83ab0d))\n- port the update verbs to the Rust agent ([ee3b38e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee3b38e37e0cfafe04a0edaab6fda3bc016b79d1))\n- check release signatures in the Rust agent ([d3771df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd3771dfc0ac493baebd796dce24bc3b66bd19119))\n- the web map has an on switch, off by default ([d1c4acc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd1c4acc4b882e60c46134cf5e5eb69eca734f250))\n- carry web map settings in the server spec ([9426a4e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9426a4e5b37d425e75192349cc78f181650ef5a2))\n- add per-server web map settings ([b497943](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb49794300575d8ccc259c52e931c1dc2f2adfeb2))\n- providers find the client jar for the web map ([827877e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F827877eecf0b0f78c0b35fef1ddb531346b879ee))\n- flytower-map palette builds colours from the client jar ([65ac095](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65ac095383138fc2084952d4aa40cbc7ea46a53e))\n- flytower-map reads files from the client jar ([9954278](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9954278747a2edfd18ef977f911b737248a6ff77))\n- port runtime.install to the Rust agent ([8ad5a18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ad5a18ca2ab07a9d9cef1be1893a8c7c7b7fa34))\n- verified downloads in the Rust agent ([75fc541](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F75fc541843c877471d843a354d498e28e8724179))\n- port the SSH verbs to the Rust agent ([1a9bc9a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a9bc9a9d48b537e6159e1e323ecf3e6d0cee55a))\n- read ISO times back in the Rust agent ([21f9d19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21f9d194acad8ddbc3b18b1c34f7ebddca8e0f24))\n- port the server lifecycle verbs to the Rust agent ([31f905d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31f905d7e8c6877b58de57f5570d80f02738ac3b))\n- share the server unit template between both agents ([916c956](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F916c9567117035c920853184023e2d0b2a8c811d))\n- flytower-map command line, with end-to-end tests ([8cb56b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8cb56b6ad71ed8c72e982000cf513dd431f4e0af))\n- flytower-map draws tiles and only redraws what changed ([df212a2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf212a25a35d7f370ce0998d646b02811cc100b7))\n- flytower-map decodes chunks against a colour palette ([0bee795](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0bee7957a0f1b2cd1f412327695fca261c1d5e6c))\n- flytower-map crate reads NBT and region files ([0aeb9cf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0aeb9cfb4f591eaee75d499aa62c74389fa06395))\n- add \u002Fwhitelist, \u002Frestart, \u002Fbackup and \u002Fsay for Discord staff ([e7f13fa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7f13fa191456263552c848de1be9dea59faf98c))\n- let Discord commands have sub-commands, choices and follow-ups ([f93b4b9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff93b4b94bfaebea9cf61c230c3b145b77105f19c))\n- register the stats commands with the panel's stats rules ([6e163b4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e163b4dd75205382d24cd065b5796d97448a4b1))\n- add \u002Fleaderboard and \u002Fstats Discord commands ([c05d99c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc05d99cec7f2f7a1bd5384346ae6b4ce86c48f92))\n- let Discord command options offer fixed choices ([937fac0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F937fac070810f9a754d9ae59240dcbb865397985))\n- Discord chat card on the server's settings ([b7b9e4a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b9e4a1e87adb094e63c8d5ceb6090a9a4584f2))\n- relay each server's chat to its Discord channel, with signed player heads ([58b4c0c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F58b4c0cb70329d6dd705ebb4bc864f01d9f3c4ca))\n- post game chat to a Discord webhook within its rate limits ([2147dfa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2147dfae72fbced1a06f29974e2a4f690096b394))\n- draw a player's face from their skin for avatars ([2fe9c4e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2fe9c4e8c0c98344efd8ce8a1ce59b4e5d6a0787))\n- show leaderboards on the public status page ([1915a5c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1915a5c9ecd6373506d473e9aa313e2da99be490))\n- serve public leaderboards and the heads on them ([79e7592](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F79e7592f180fc65c863312409c8af1d2db4a825d))\n- add an optional leaderboard setting to the public page ([8b1e095](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8b1e095de51d8e55e66d3ed95c8319569f1e4c9b))\n- store a server's Discord chat relay settings ([b9776cc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9776cc83143e2e9fc1939639d95897937e09f79))\n- map Discord roles to Flytower roles on the Discord card ([169e7d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F169e7d502626b176e1d876937b6ce6e301a58477))\n- show Discord actions in Activity as \"Name via Discord\" ([4b56f37](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b56f3707361e60fce0e45b983060d9080604196))\n- give Discord members the Flytower roles mapped to their Discord roles ([230c9f0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F230c9f080ba8d794be6afa0dca578739bd0c59ef))\n- add a Stats tab with leaderboards and player cards ([df68235](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf6823522bfae02331002c47509328f496d6eedf))\n- serve a server's leaderboards for all time, this month and this week ([7834438](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7834438c62aad12e923b85f150da135595190dec))\n- build leaderboards and player cards from the stats snapshot ([18e1bfc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18e1bfc24d6fb5c652d73047d377d6f3c2d336f9))\n- send the command list to Discord when it changes ([867a6f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F867a6f5e9bb81afb3b76d8ce32bc8acf3c1382fe))\n- answer \u002Fstatus and \u002Fplayers from the status page's roster ([c3d3541](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3d3541b2eee0aacefcf3f9985f765f35b115efe))\n- add a slash command registry for the Discord app ([b3992a5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb3992a57eb3e292c1f9a54359f23d6747ba78634))\n- let people turn stats off and leave players out ([eb79238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb79238aa2c1fc718a1b73f0b4d070801a7bfb6f))\n- carry player stats settings in the server spec ([80071f2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F80071f242dce2fb5fb77f45214c695afdd184d18))\n- add per-server player stats settings ([5e7dad5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e7dad52a747806c97c7b856ab550afaf3648e44))\n- **panel:** Learn more links beside settings open the right heading ([5bccc33](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5bccc33f76939ea45ebe5304b5912c314b29a778))\n- **panel:** a ? on every page opens its help beside it ([db2abb3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdb2abb3ad21fd173fa822c9803260d7c5878005e))\n- **panel:** Help, the docs for the installed version, with search ([7221347](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7221347c3eb57ff4183bdc4f672bdd742e7ab6a4))\n- **docs:** a shared docs layer for the panel and the website ([5ee4f18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ee4f18711e83900b4ab266539d091eaa775f34e))\n- schedule the stats snapshot and add stats routes ([6572cb7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6572cb7d31604dbd99f2c29af89a5aab73149ef0))\n- take a daily snapshot of chosen player stats ([5fcb69f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fcb69f8d8bfc64ca829ff260af5fc71b765cc81))\n- add the player stats table ([e9ad70e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe9ad70e72c260558e9e3176bbc8d62a4055be22e))\n- add System, Integrations with the Discord app card ([ae7948e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae7948e38e56870904d025bcf900ff9f0894a1a0))\n- answer Discord's interactions endpoint ([a7bdb5d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa7bdb5dd51cfc70c22b3b062ee6c4a9771c8b282))\n- connect a Discord app from its bot token ([fc12f9a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffc12f9a3f587a737cef12baeb3689778e58297b7))\n- check Discord interaction signatures with Ed25519 ([6de5a5d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6de5a5d20ceb69f5c16169d61fd27539a5f0b0de))\n- follow the journal for service.wait in the Rust agent ([c23ee50](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc23ee50fa7415f5e1b6f9f603df6e84505bd96ea))\n- wire player sessions into crashes, deletes and boot, with a players summary route ([f1c9c03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1c9c03ca6ead9cbcd003fdb4b477cee8d7deb89))\n- record player sessions from join and leave lines ([2434b21](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2434b21d58230380674d0c8cbe6626ed668985d4))\n- let the log watcher pass on raw lines ([1ef8db7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ef8db734d32e317ca18e47c499b13855bf3adbc))\n- add player sessions and names tables ([ed574df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fed574df594924880cfe2b14678037829526cb53e))\n- port the service verbs to the Rust agent ([25cdd23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F25cdd23ec91ed29ebd4618900ebec7dbf9636fae))\n- run programs from the Rust agent without a shell ([3193042](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31930426a70860fb95da3575fb3d6a9596190ac7))\n- serve the Rust agent on the agent socket with a peer check ([3d56695](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3d5669555996305d60c41829af7b861b5b2980a9))\n- dispatch requests and write the audit log in the Rust agent ([50413ca](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50413ca3b2cdbea5d9c1513991173cf54a3dd45a))\n- add the Rust agent's protocol types ([48b3ce9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48b3ce97179e7bd7e7b3ed0619803a624adc433d))\n\n### Fixes\n\n- wrap the saved webhook on narrow screens ([2878c98](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2878c98deec06f248b8ba5b6b34428251fe837d8))\n- give the Discord test status the leaderboard field ([cf49b5a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf49b5a336da3b31b926c0a5a85e19350f058e6f))\n- check Manage people first when saving Discord roles ([ec63bc1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fec63bc1dfa45175b174fe48b9308eda8c9da318e))\n- list the leaderboards route in the permission table ([64a67ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F64a67ce3900605d3fcd8bded1f165c0a551a6221))\n- show leaderboard icons and label each figure on player cards ([e7d8ed2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7d8ed23b88728a110579bca2c94aeb5582a88a9))\n- **panel:** serve the help docs' database from its route instead of prerendering it ([9ba3eb3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ba3eb31d2ba1f7b8d65553566efe58dc193cd6a))\n\n### Docs\n\n- release notes for 1.3.0-beta.1 and its native build ([9159656](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F915965641b2250e710093e2b5c83faaa7bbf41fd))\n- the web map, drawn by Flytower ([22d7b68](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22d7b6877ca4e5a9813ff3b3f4357d8a040e501d))\n- give the player stats page its Help section and order ([28df4c6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F28df4c6906d9f669dc9ecd473faf7dc2460af74d))\n- describe the Discord staff commands ([d07764b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd07764b85530440a85c0192c892d89ed1b0b0d2c))\n- help frontmatter for the Discord page; move the 1.3.0 test script ([e387eb9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe387eb9d16690b2e36d505009d7a7bfdd6578dee))\n- \u002Fleaderboard and \u002Fstats in Discord ([ac16e7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fac16e7b940d2b2d7543dd7f4570fcaa667a758cf))\n- game chat to Discord, and how to test it ([4d2d5ad](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d2d5adb0490ab89fad27f17d6ed76ace247db9c))\n- leaderboards on the public status page ([c67c26f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc67c26f34298a8d33da0879da3473e8c84c8b8fe))\n- add Discord roles to the 1.3.0 testing checklist ([f909aa5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff909aa5819f72dd70c7e6700caa25c4cb366bbae))\n- explain Discord role mapping ([b572a22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb572a224631d29b55a84ab5a6e68b7b1b9e05628))\n- explain player stats and the leaderboards ([e04df36](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe04df362e8b1cf4babfd8828802c48cc9afe36f7))\n- describe the Discord commands and how to test them ([c032092](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc0320920c820b275648b3e80a0921024712bf59d))\n- testing notes for Help in the panel ([c979d6b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc979d6bddee533e59cba42d9db11b3e7c80b3469))\n- give every page a section, an order and the panel routes it explains ([f02f7a3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff02f7a32cfed69ddb92dcadf88739ee37974a36c))\n- move release test scripts into docs\u002Ftesting ([9968c23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9968c23b7262a58c9d9a66a95976f338cb662fb4))\n- explain connecting a Discord app ([5b9e567](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5b9e5672666b2f7ecfa9ee92586e9c43a6979c6f))\n\n### Other\n\n- give the map's maximum-wait test room on a busy runner ([7a1e449](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7a1e449f946c2cc1f0615f2dd094394676b6c0ec))\n- put the stats view in its own component so it can move pages ([7cb89d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7cb89d6c104d629054f4e777ee903708828c9f94))\n- cover the Discord staff commands ([121aa25](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F121aa25655bf9f60416ae9f7745863f7935e209f))\n- share player and power actions between the panel and Discord ([a3f388f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa3f388facb2fc6ffc77da177ea1433bc46d3919c))\n- list the Discord role routes in the permission table ([b8e731d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb8e731dd943031a0350c2094e6e04448991867f8))\n- cover Discord role mapping, refusals and Activity ([2644a19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2644a19f1ff8f5da504af138ff80269d90b1a887))\n- build a server's public status in one place ([b993e3f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb993e3fc3b77a65f0a16bd3fcff6e941b64634b5))\n- **panel:** rename parseMarkdown to parseNotes ([c27e9ee](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc27e9ee8f86c31c62e7838c3ba8c6ffcc54be4b2))\n\n### Other changes\n\n- Merge main into feat\u002Fmap-public ([cc45486](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc45486beb1c0b9714098643626867d0afe2eaf8))\n- Merge main into feat\u002Fmap-panel; renumber the map migration to 0021 ([78d26aa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78d26aaee6f7150d3700486ad4a0667e1c0ea75c))\n- Merge main into feat\u002Fmap-renderer ([134ffd0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F134ffd089ce48b8edcb9baef205fad282b5b3c2d))\n- Merge main into feat\u002Fdiscord-staff-commands ([4c27238](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c27238ca70bcd2cdc9933907559ba99b3fbcdbb))\n- Merge main into feat\u002Fdiscord-roles ([2dec38f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2dec38f71d8788640f389223688af29231059e9e))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.2.1-native.1...native-1.3.0-beta.1.native.1",{"version":1063,"date":1064,"url":1065,"beta":945,"body":1066},"native-1.2.1-native.1","2026-11-10T15:59:46Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.2.1-native.1\u002Fdocs\u002Fupdating.md#native-builds).\n\n**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\u002Fflytower-agent`, ready for the Rust agent in a later native build.\n\nTesting: 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.\n\n### Fixes\n\n- **notify:** read joins and leaves that Minecraft 26.x logs as system chat ([3f67e66](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3f67e660b8007f011e6d3ae9c12c218398941b90))\n\n### Docs\n\n- 1.2.1-native.1 release summary ([142f156](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F142f156fc7dc38cb4a0274e538a7a413b6796659))\n- 1.2.1 release summary ([1832a40](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1832a406ddf584df409beb47f711fd33471b0b1b))\n- 1.2.0 release summary ([a8f9750](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa8f9750d98146d8718ac12687fff49e90e63c5f9))\n\n### Other changes\n\n- Merge v1.2.1 into native ([9edc05a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9edc05ab72c6a6352bbfa46bb7b516086c64d88a))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.2.0-beta.2.native.1...native-1.2.1-native.1",{"version":1068,"date":1069,"url":1070,"beta":945,"body":1071},"native-1.2.0-beta.2.native.1","2026-11-10T15:33:03Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fnative-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](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.2.0-beta.2.native.1\u002Fdocs\u002Fupdating.md#native-builds).\n\n**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\u002Fflytower-agent`, so a later native build can swap in the Rust version. Going back to an older release still works.\n\nTesting: check that **System, Disk** shows the same figures as before, that `ls \u002Fopt\u002Fflytower\u002Fcurrent\u002Fbin` lists `flytower-du`, that `systemctl cat flytower-agent` shows `ExecStart=\u002Fopt\u002Fflytower\u002Fcurrent\u002Fbin\u002Fflytower-agent`, and that **Go back to** 1.2.0-beta.2 still works.\n\n### Features\n\n- **updates:** number native builds after the release they go with ([8270b4f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8270b4fc42df6b7a0478d547cddc61989404c4a8)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **installer:** --native installs the newest native build ([d79b6ac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd79b6ac662e923ad4f1b7df7f95a18b55fe6843e)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **agent:** download native builds from their own tag ([9b5c93b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9b5c93bd7b9ae00bd77beb1b6324059330936895)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- **updates:** a Native channel for builds of the native branch ([478652b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F478652b846657641e2ff0cb92ea29ec564447442)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- document the Access page ([23a0acc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F23a0acc08591d66590dc3b35c384c1aac5b5f2ba))\n- rename People to Access, with People and Roles tabs ([73eda62](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73eda62f892a64d3a4f706ff2c062dc09ed8f608))\n- pick your appearance with the colour mode select ([d7abe18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7abe182c176ee690ba29ce6196a082960ff9a0e))\n- **disk:** measure with flytower-du when it's there ([f1a40d3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1a40d3c2aee36b864556f22d577508c472941d9)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **du:** add flytower-du, a Rust disk walker ([f64592b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff64592b93a495b1ee154ad346d8be2212118b24f)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **installer:** start the agent through bin\u002Fflytower-agent ([d957684](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd957684c7e9bc0c83ab0fd3cfad2714ba2023a2a)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **agent:** start the agent and updater through the stable entry points ([d6a6276](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd6a6276f337db3fb0e981b0ce504aca36fb71953)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- **agent:** ship stable flytower-agent and flytower-updater entry points ([b961480](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb961480542b64d56c1a3fd8b61fd4fe85fc9f014)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- document Your account and the new People page ([c49ced0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc49ced078d7dc56b3985001ac5f401fc4b0d89bf))\n- give People and Your account their own places in the sidebar ([4990633](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F49906334c7cf6e8521f19eb5783e37741e4f2c11))\n- let people rename themselves, save their theme and sign out everywhere ([bff9e7d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbff9e7d0b0f813430146eba07419da1fad69b054))\n- end older sessions when the session version changes ([d87d477](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd87d47759fda479200cebe570fcb409f65a984f8))\n- **protocol:** export the agent protocol as JSON Schema ([85cae8e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F85cae8e453941509abad8bd113b44536bd80935b)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- hide what a person can't use, and show view-only tabs ([bed7397](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbed7397e0553203d0a18542803ba87aa09d9db96))\n- role editor on the People page ([ff59ff2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff59ff2d4a1ef5d6e4ea3f5fca653b351c96bcc7))\n- custom roles built from the permission list ([42eb8df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42eb8df6015c4a9ee4795486b9c0e3153f465b1d))\n- installer prints a setup link ([f363575](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3635756f825a504e072c12711b6c01db37f1135))\n- People page under System ([46d55c1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F46d55c1e176bf728ffafbedb33186973898f67f4))\n- setup and invite links fill the token in ([e409a45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe409a45f31d195ed57ab1d8d45a395b18ea39c0c))\n- join through an invite link with a new passkey ([a0906b2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0906b29c853aa157036fd459fb52a2402b1619c))\n- invite, change and remove people ([e572e46](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe572e4614676ebc5437e4d550c9941515fcbeba1))\n- store invite links ([b061ab6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb061ab684d37ed7ecfbb4393919599048e7d89db))\n- send live topics only to people who can see them ([cde77d0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcde77d0c3b2be2b05a97e05e59ccd02dcedff551))\n- check a permission on every API route ([efaf60a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefaf60a5afc37867a074b4f1ea279561ab4e08ca))\n- add roles, grants and the permission list ([ff4b321](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff4b32121df1a0219ef491e3522ff78b1c63160d))\n- **status:** serve the public page on each server's own hostname ([60e3243](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F60e3243ba19e6a24cc7c1382acd0749f3ff73b8f))\n- **status:** players' modpack download on the public page ([89b902f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F89b902f36520584be0065e32c3b0404902085626))\n- **providers:** Modrinth lookups for players' modpacks ([d8bfec5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8bfec590779b8f1a2b2c932531a09d3588106b0))\n- **status:** show the server icon on the public page ([01782e3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01782e3e798320365892b15620b554450df1b1b8))\n- **status:** MOTD and link previews on the public page ([39b917b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F39b917ba29857f74919fd39800ab8170c665aa79))\n- **status:** public status page at \u002Fs\u002F\u003Cname> and its settings card ([05d00a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F05d00a40d3f468bd63bd0094cfa141e4824e96aa))\n- **status:** public status API with a roster kept from the log ([27a437c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F27a437cc7c6537f26a6c1523f54d551260c88055))\n- **spec:** public page settings in the spec and the database ([5aafd9c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5aafd9c30319cc337d875fe7e308e7711e029abd))\n\n### Fixes\n\n- bundle the invites migration again after the merge ([62a3c0d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62a3c0d8316ff3379ffddb1eb21785f527a42177))\n- keep the bundled migrations as generated ([6aaecb8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6aaecb8387e1008d91b939295562dd4fd16cf968))\n- only list disk use and updates for servers a person can see ([1b1231f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b1231fa63eb1a8289b6c9c641e5fc4abd457989))\n- **notify:** look at the log once more after each change ([3c13427](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c1342728b84ece223514226a92b6bf2a8d8f172))\n- **console:** read the log again when asked during a read ([81500eb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81500eb48ff1ebcb36fdc3f2a370fffae989c04e))\n- bundle the roles migration ([f3e28ce](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3e28cea0eaa181ed28bbc77a80400709445b289))\n\n### Docs\n\n- release summary for 1.2.0-beta.2.native.1 ([a51b4ef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa51b4ef63a3009c54f587b3c170aef4d82a54d3e))\n- fold the people and roles notes into 1.2.0-beta.2 ([2268de0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2268de02da0aaed9c6072c9a7da445e7a88be076))\n- record the decision to bring in Rust and Go ([1b954ab](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b954aba7ba6890cf938201999d8c994e9013d02)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- custom roles and what people see ([4d5788e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d5788ed803444126382d993ae2ff4f13192d394))\n- people and roles ([1d1e8f6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1d1e8f6cbaad4b60d61ba01134df25f28a456f0c))\n- testing notes and release notes for roles groundwork ([48293a3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48293a3a7e34b3982470fbaea5e06d1871a718de))\n- don't name Chunky as server-only; Modrinth marks it optional on clients ([106c067](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F106c067213ff05d3d8f07d0cf6b6aab20d4c598e))\n- modpack fields in the YAML reference, testing notes and release summary ([c8c7803](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc8c7803a9f14e78698a2b00db2f58f3c91fc7335))\n- players' modpack guide, YAML fields and testing notes ([f49ff19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff49ff19ea743ca57ee11211cfa104faa94a017f3))\n- public status page guide, YAML reference, testing notes and release summary ([470b4d5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F470b4d5b70a376deb5f0fb96bd843a2c8b4554d5))\n\n### Other\n\n- recognise native versions like 1.2.0-beta.2.native.1 ([8253e5c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8253e5cdf990733ce21fa05f468d42e929bbb3eb)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- release native builds under native- tags ([6505c61](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6505c6179b4d93a9d9b1386916b2e70a4f1ab503)) · [#134](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134)\n- build flytower-du into releases and check it on amd64 and arm64 ([5fa5272](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fa527286394087cd76424ff1e675d92ba3a6546)) · [#136](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136)\n- **protocol:** shared fixtures every implementation must agree on ([a048004](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0480047f4f211eb631c8aa6ba931b1ad23c0be0)) · [#135](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135)\n- custom roles ([1e45fd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1e45fd38a07db6598b18fcf1d4467830ff4ade37))\n- invites, last Owner and people changes ([359bc5e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F359bc5e0dacd5431f9b7dfbbaf5da5d02e6b2734))\n- fail when an API route skips its permission check ([4b429a1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b429a1279725efb1aa795cc62d65e57759d94ba))\n\n### Other changes\n\n- Merge v1.2.0-beta.2 into native ([b389c71](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb389c71d2577ee7ca221bbdda32b84aa752ccc90))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.0-beta.1...native-1.2.0-beta.2.native.1",{"version":1073,"date":1074,"url":1075,"beta":945,"body":1076},"1.1.0-beta.2","2026-11-09T23:43:05Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nFlytower 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 `\u002Fsay` 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.\n\nTesting notes are in section 1 of [testing-1.1.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.2\u002Fdocs\u002Ftesting-1.1.0.md).\n\n### Fixes\n\n- **notify:** notice quick stops and starts from the status poller, not only the minute sampler ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** hear starts, stops, restarts, joins and leaves from the server log through inotify, with no polling ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Docs\n\n- **notify:** activity comes from the log as it happens, and restart alerts ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Other\n\n- **notify:** drop the status-poll feed, and let a log tailer run without a timer ([42940a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.1...v1.1.0-beta.2",{"version":1078,"date":1079,"url":1080,"beta":945,"body":1081},"1.1.0-beta.1","2026-11-09T23:07:59Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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.\n\nEvery pull request now also gets a signed test build, which the installer can install with `--pr \u003Cnumber>`.\n\nTesting notes are in section 1 of [testing-1.1.0.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.1\u002Fdocs\u002Ftesting-1.1.0.md).\n\n### Features\n\n- **notify:** the new-version notice follows the update channel, so Stable installs aren't told about betas ([b67c684](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb67c6841d741d2a959a8068917b8c74385450c09)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **installer:** --pr \u003Cnumber> installs a pull request's signed test build ([88ad47f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F88ad47f2dd8ff05036998ba22441f54b056fbd62))\n- **notify:** Notifications card on System to add, edit, test and remove channels ([627f40a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F627f40a2ca8ff54b463defe09f0d25de96aa223a)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** API to list, add, change, test and remove channels, with passkey checks and activity entries ([2dae952](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2dae95209d95b0201cb810685078ce3317d44334)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** report failed backups and off-site copies, the disk filling, updates, starts, stops, joins and leaves ([215aeea](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F215aeea5e3a65b25487de8b7f8e792c3c5717d83)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** send to Discord, ntfy and signed JSON webhooks, with quiet periods and retries ([cc9ea0d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc9ea0d4b8eb4ae09ab66d8560a58e0b2f27b3dd)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n- **notify:** tables for notification channels and what has been sent ([fe04ce7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffe04ce74a77f943704e0814f06f66c60815c0582)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Docs\n\n- notifications, and 1.1.0 testing notes starting with them ([d5b32a7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd5b32a7310d171a4f84478652e64c601b2bfa734)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Other\n\n- build and sign each pull request as a test build under pr-\u003Cnumber> ([2791438](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F27914384d5f4c1fea86a12f38fd85a8147ef3799))\n- **e2e:** add a webhook channel through the form and check its test arrives signed ([b4c7900](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4c79002a4613d0e701da73f2eabf6c73be54570)) · [#56](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56)\n\n### Other changes\n\n- Merge main (update channel, 1.0.1) into feat\u002Fnotifications; notifications move to migration 0008 ([651ac73](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F651ac73082b89498eef5ee99d891bd6bec123836))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.0.1...v1.1.0-beta.1",{"version":1083,"date":1084,"url":1085,"beta":116,"body":1086},"1.0.1","2026-11-09T22:53:11Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.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`.\n\nTesting notes are in [testing-1.0.1.md](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.0.1\u002Fdocs\u002Ftesting-1.0.1.md).\n\n### Features\n\n- **installer:** install the newest stable release by default, and betas with --beta ([6448256](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F64482566da9d98e7b431d15a04bf7f055ccb867d)) · [#74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74)\n- **updates:** Stable or Beta switch on the System page, with a Beta badge on offered betas ([da5c372](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fda5c3726b834868ee94a19c5d531efe7c43ab106)) · [#74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74)\n- **updates:** choose the update channel through the API, with an activity entry ([7f17052](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7f170525c0fb3324a3b4dd26f75c1e96bef0ed65)) · [#74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74)\n- **updates:** filter releases by channel, and order beta.10 after beta.9 ([8708348](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F87083484e662ffef8d46590dad47956f2c49f0c8)) · [#74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74)\n- **settings:** typed helpers to read and write panel settings ([f82a76d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff82a76d0b2b161b670efe90a5689a111e2935c56)) · [#74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74)\n- **settings:** a table for panel-wide settings ([2600049](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2600049b1e431fea1ada84ac3a1ea019597c17fa)) · [#74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74)\n- **installer:** --pr \u003Cnumber> installs a pull request's signed test build ([58f36b9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F58f36b95cd2e3d1df22aa5f45e320e123dcf57cb))\n\n### Docs\n\n- update channels, publishing betas, and 1.0.1 testing notes ([73587b5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73587b5003a259c96552a45a2904b0158eb40e96)) · [#74](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74)\n\n### Other\n\n- **e2e:** read the chosen channel from its card, which has no label element ([1e9d38a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1e9d38a56a08e59f542a1b4e9e39ab759a62eb9a))\n- **e2e:** upgrade only from releases, not pull request test builds ([a5e08d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa5e08d609e234e2c063cce874380d3906fe2f653))\n- **e2e:** choose the Beta channel on the System page and check it's kept ([2f4f4a4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2f4f4a45a18098d946cae3c8b4f0ff27a41e828c))\n- build and sign each pull request as a test build under pr-\u003Cnumber> ([a8cf9c1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa8cf9c1ea1df54ab8129a3a85bb2bb9dfb4138c9))\n\n### Other changes\n\n- Update channel: choose Stable or Beta releases (#75) ([ccbd6a9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fccbd6a9d185208c53b02b2d29cf20d8e867dd3e5))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.5.0...v1.0.1",{"version":1088,"date":1089,"url":1090,"beta":116,"body":1091},"1.0.0","2026-11-09T21:13:14Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv1.0.0","### Features\n\n- **account:** list, add and remove passkeys, and make new recovery codes, on the System page ([e8b5002](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8b500299e610e1f259b8fadeb6469d8ac2dd77a)) · [#55](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F55)\n- **security:** deleting a backup asks for your passkey, since it takes the off-site copy too ([468b8fa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F468b8fa94e8edeeeca7b4daef828cb32877cf26f))\n- **security:** HSTS when the panel is reached over HTTPS ([7b49304](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7b49304bfce438254b8552f381616b23345bac9b))\n- **security:** send a content security policy and anti-framing headers on every response ([965fb22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F965fb22cc14ae7c50159f5ab34e8118b1b621e0f))\n- **spec:** choose off-site storage by name in the server YAML ([116fa26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F116fa26ccf34e69a4ec98ca63a6cd77be98a04bc)) · [#54](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F54)\n- **backups:** Off-site storage on System and a per-server choice on Backups, with upload status ([320fca8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F320fca8cba7fe6b803c329302c4b634c4da34bd0)) · [#50](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F50)\n- **backups:** copy backups to S3-compatible storage, retry failed uploads, restore from the copy ([00206e7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00206e72ac1bcd06c4dba2d4bade21b9069dc486))\n- **content:** plugins from Hangar, checked by sha256, and Chunky pre-generation on Paper ([e914567](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe91456735f182814443950452e2b39ed1d518333)) · [#49](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F49)\n- **content:** Paper plugins from Modrinth, installed into plugins\u002F through plan and apply ([5c14fa3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5c14fa3a5c7eb61ac03234acba8a4c6953813783))\n- **servers:** run Paper, from New server, the Version card and imports ([608f0b8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F608f0b8d7857837a6d87c017667ca839c5d3dc89)) · [#48](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F48)\n- **providers:** Paper builds from PaperMC's Fill API, checked by sha256 ([dc2bda5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdc2bda5f7717d611ad7bf41719a5abc804c82ebf))\n- **installer:** Flytower's release signing key ([8689f90](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8689f900abc2af8c01bac85478664b206bd73b35))\n- **metrics:** a week of CPU, memory, players and tick time, charted on a Performance tab and the System page ([fb9d76c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb9d76c433ab67860df23592b56557a824b89f91)) · [#46](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F46)\n- **system:** Updates card to install a newer Flytower or go back, following the restart ([9a0a4da](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9a0a4da366b55b49db481ef7c8c90196af4fdd00)) · [#45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F45)\n- **agent:** install signed releases and switch to them with an updater that rolls back ([73bcae2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73bcae2516c66c1447e97c7a1fa251bf09ddafca)) · [#45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F45)\n- **release:** sign SHA256SUMS with Ed25519 and check it in the installer and agent ([5e02a4a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e02a4afd81b82e34047ebc9b91fb34eaa4d7902)) · [#44](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F44)\n- **panel:** Activity page listing who did what, with filters ([e91aa8c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe91aa8c767a3db941023a402bae374df353270e8)) · [#47](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F47)\n\n### Fixes\n\n- **security:** adding a passkey while signed in needs a passkey check ([54f0a03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F54f0a03cbce92e310f1cc365ca07a8e996d991df)) · [#55](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F55)\n- **backups:** off-site uploads never started after a sweep that found nothing to do ([fd8fb35](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffd8fb3542f1c672f64d562663866d7a3c7150e22))\n- **console:** strip Paper's hex colour codes from replies ([a2780d4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa2780d49233e6adaa75ae7a01411df53d1168989))\n- **content:** label plugins in the content list ([374606e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F374606e4372d42fdc7e87ec4d1627f0de42aad7b))\n- **updater:** give restored database files back to the panel's user on rollback ([f6ecb06](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6ecb06c55f1e456620b1b98846645086f9ce8ec))\n- **agent:** tidy an unused assignment in the updater ([c8ef617](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc8ef61737ef291161cf4b7bf3d42eb2fe65aeba6))\n\n### Docs\n\n- testing notes for 1.0.0 ([37284bf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F37284bf0baf92dd792461ee200691f4b7737b0d1))\n- documentation for 1.0, from installing to recovering the panel ([13fc391](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13fc391732e179aa24925a9a7c5c2dd1a4da7573)) · [#53](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F53)\n- testing notes for 0.6.0 ([aa9b153](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa9b15381f4ee1f402890eb96f1a2ca96fd39315))\n- testing notes for 0.5.0; installer says when the signature checked out ([8c3d9d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8c3d9d65c13a103a5544b5a0325e3e7571f653ee))\n\n### Other\n\n- **e2e:** upgrade from every published release, checking migrations and data come through ([9749521](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9749521b5c99f6c01787dc77dbc573221c998099)) · [#52](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F52)\n- **release:** accept the signing key as pasted (flattened PEM, escaped newlines, or an OpenSSH key) ([7636f68](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7636f6859dc921d19b0c67387d22e0d4794cecf0))\n- **e2e:** stop on a failed off-site upload and show every backup's state; log upload failures ([5ef5a79](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ef5a7914bd7ddedb8ab92f60a11c6b2218c78a7))\n- **e2e:** use S3Mock for off-site storage; MinIO's images are no longer public ([c448f7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc448f7b670d61fda63340c78906b3d351a5757a1))\n- **release:** say plainly when the signing key secret can't be read or doesn't match ([b0202f1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb0202f1a7a7c5192c0b31d31c9bd0140d215d211))\n- **e2e:** update to a signed release, and roll back one whose panel won't start ([bf49f0b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbf49f0b653bab0dbfb425bfdf41cd7c26697f90f))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.4.0...v1.0.0",{"version":1093,"date":1094,"url":1095,"beta":945,"body":1096},"0.5.0","2026-11-09T21:06:17Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv0.5.0","### Features\n\n- **account:** list, add and remove passkeys, and make new recovery codes, on the System page ([e8b5002](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8b500299e610e1f259b8fadeb6469d8ac2dd77a)) · [#55](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F55)\n- **security:** deleting a backup asks for your passkey, since it takes the off-site copy too ([468b8fa](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F468b8fa94e8edeeeca7b4daef828cb32877cf26f))\n- **security:** HSTS when the panel is reached over HTTPS ([7b49304](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7b49304bfce438254b8552f381616b23345bac9b))\n- **security:** send a content security policy and anti-framing headers on every response ([965fb22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F965fb22cc14ae7c50159f5ab34e8118b1b621e0f))\n- **spec:** choose off-site storage by name in the server YAML ([116fa26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F116fa26ccf34e69a4ec98ca63a6cd77be98a04bc)) · [#54](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F54)\n- **backups:** Off-site storage on System and a per-server choice on Backups, with upload status ([320fca8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F320fca8cba7fe6b803c329302c4b634c4da34bd0)) · [#50](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F50)\n- **backups:** copy backups to S3-compatible storage, retry failed uploads, restore from the copy ([00206e7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00206e72ac1bcd06c4dba2d4bade21b9069dc486))\n- **content:** plugins from Hangar, checked by sha256, and Chunky pre-generation on Paper ([e914567](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe91456735f182814443950452e2b39ed1d518333)) · [#49](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F49)\n- **content:** Paper plugins from Modrinth, installed into plugins\u002F through plan and apply ([5c14fa3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5c14fa3a5c7eb61ac03234acba8a4c6953813783))\n- **servers:** run Paper, from New server, the Version card and imports ([608f0b8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F608f0b8d7857837a6d87c017667ca839c5d3dc89)) · [#48](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F48)\n- **providers:** Paper builds from PaperMC's Fill API, checked by sha256 ([dc2bda5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdc2bda5f7717d611ad7bf41719a5abc804c82ebf))\n- **installer:** Flytower's release signing key ([8689f90](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8689f900abc2af8c01bac85478664b206bd73b35))\n- **metrics:** a week of CPU, memory, players and tick time, charted on a Performance tab and the System page ([fb9d76c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb9d76c433ab67860df23592b56557a824b89f91)) · [#46](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F46)\n- **system:** Updates card to install a newer Flytower or go back, following the restart ([9a0a4da](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9a0a4da366b55b49db481ef7c8c90196af4fdd00)) · [#45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F45)\n- **agent:** install signed releases and switch to them with an updater that rolls back ([73bcae2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73bcae2516c66c1447e97c7a1fa251bf09ddafca)) · [#45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F45)\n- **release:** sign SHA256SUMS with Ed25519 and check it in the installer and agent ([5e02a4a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e02a4afd81b82e34047ebc9b91fb34eaa4d7902)) · [#44](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F44)\n- **panel:** Activity page listing who did what, with filters ([e91aa8c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe91aa8c767a3db941023a402bae374df353270e8)) · [#47](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F47)\n\n### Fixes\n\n- **security:** adding a passkey while signed in needs a passkey check ([54f0a03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F54f0a03cbce92e310f1cc365ca07a8e996d991df)) · [#55](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F55)\n- **backups:** off-site uploads never started after a sweep that found nothing to do ([fd8fb35](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffd8fb3542f1c672f64d562663866d7a3c7150e22))\n- **console:** strip Paper's hex colour codes from replies ([a2780d4](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa2780d49233e6adaa75ae7a01411df53d1168989))\n- **content:** label plugins in the content list ([374606e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F374606e4372d42fdc7e87ec4d1627f0de42aad7b))\n- **updater:** give restored database files back to the panel's user on rollback ([f6ecb06](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6ecb06c55f1e456620b1b98846645086f9ce8ec))\n- **agent:** tidy an unused assignment in the updater ([c8ef617](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc8ef61737ef291161cf4b7bf3d42eb2fe65aeba6))\n\n### Docs\n\n- testing notes for 1.0.0 ([37284bf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F37284bf0baf92dd792461ee200691f4b7737b0d1))\n- documentation for 1.0, from installing to recovering the panel ([13fc391](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13fc391732e179aa24925a9a7c5c2dd1a4da7573)) · [#53](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F53)\n- testing notes for 0.6.0 ([aa9b153](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa9b15381f4ee1f402890eb96f1a2ca96fd39315))\n- testing notes for 0.5.0; installer says when the signature checked out ([8c3d9d6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8c3d9d65c13a103a5544b5a0325e3e7571f653ee))\n\n### Other\n\n- **e2e:** upgrade from every published release, checking migrations and data come through ([9749521](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9749521b5c99f6c01787dc77dbc573221c998099)) · [#52](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F52)\n- **release:** accept the signing key as pasted (flattened PEM, escaped newlines, or an OpenSSH key) ([7636f68](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7636f6859dc921d19b0c67387d22e0d4794cecf0))\n- **e2e:** stop on a failed off-site upload and show every backup's state; log upload failures ([5ef5a79](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ef5a7914bd7ddedb8ab92f60a11c6b2218c78a7))\n- **e2e:** use S3Mock for off-site storage; MinIO's images are no longer public ([c448f7b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc448f7b670d61fda63340c78906b3d351a5757a1))\n- **release:** say plainly when the signing key secret can't be read or doesn't match ([b0202f1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb0202f1a7a7c5192c0b31d31c9bd0140d215d211))\n- **e2e:** update to a signed release, and roll back one whose panel won't start ([bf49f0b](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbf49f0b653bab0dbfb425bfdf41cd7c26697f90f))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.4.0...v0.5.0",{"version":1098,"date":1099,"url":1100,"beta":945,"body":1101},"0.4.0","2026-11-09T16:34:09Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv0.4.0","### Features\n\n- **world:** Copy a world in card on the World tab ([825ca0a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F825ca0ac6d92cacf39824df8285586c623967123)) · [#20](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F20)\n- **world:** copy another server's world over this one, after a backup ([3ccb6ab](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3ccb6abc382d78e9f536142510a9ee6c21da7c15)) · [#20](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F20)\n- **settings:** Clone card to copy a server, with or without its world ([0999fdd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0999fdd5098bb33fa95cb793fb2a8012779e1397)) · [#43](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F43)\n- **panel:** clone a server through the create job, with or without its world ([87a5247](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F87a5247d8e4b31c8ff56dbfd488bd63797c756a6)) · [#43](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F43)\n- **panel:** DNS record helper for server hostnames ([0248669](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0248669cd0c827d7f9294b71474c77b71bcf393d)) · [#41](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F41)\n- **panel:** Address card in Settings, and copyable addresses on cards and the header ([8cb915c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8cb915ce925a14c7660af9fd6e1dbb841df8fb2e)) · [#40](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F40)\n- **panel:** per-server hostnames in the database, spec, plans and resources ([16d20ac](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F16d20acf26e7629b9b8341d4e7b264bc27ac0634)) · [#40](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F40)\n- **panel:** show the memory budget on Servers and System, and cap sliders to it ([4363df5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4363df54f080875bf79402b7e814b51c84463b32)) · [#42](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F42)\n- **panel:** a memory budget for create, import, plans and resources ([2055f7f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2055f7f3125fa1a0040ef49264a7bcd36b46a820)) · [#42](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F42)\n\n### Docs\n\n- testing guide for 0.4.0 ([0e60ad0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e60ad0c0a5340188befed5cdb8dc0fced8607c1))\n\n### Other\n\n- **e2e:** clone a running server with its world, and refuse an over-budget clone ([ae62b83](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae62b83d691e758a85b40c728ebd1f69831f50d5))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.3.0...v0.4.0",{"version":1103,"date":1104,"url":1105,"beta":945,"body":1106},"0.3.0","2026-11-09T16:05:59Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv0.3.0","### Features\n\n- **world:** World tab with pre-generation progress and world reset ([becddd3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbecddd3a75924bff34f6b323052e4ff1c59cdca8)) · [#39](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F39)\n- **world:** Chunky pre-generation and world reset service and API ([939a22a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F939a22aa4af2f02e79097ec9dd0fc6297d19f962)) · [#39](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F39)\n- **settings:** Version card to change Minecraft version or loader ([2070d46](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2070d467c5c6b9cd0a7b5a155c8529b86f9e6c1d)) · [#38](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F38)\n- **spec:** change the Minecraft version or loader through a plan ([bb56bc6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbb56bc61150f04f4a4badc7b84e4050742fdf092)) · [#38](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F38)\n- **agent:** server.configure can switch the server's Java ([af77a64](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faf77a6431892ac55d5e810defc373a858f929cab)) · [#38](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F38)\n- **panel:** pick Vanilla Tweaks packs from the Content tab ([2de5c02](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2de5c02891cf40954861dae7dd2951d50c9d5579)) · [#37](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F37)\n- **panel:** install Vanilla Tweaks packs through the spec, unwrapping their zips ([ee4444f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee4444ffed5eae52d34f3cf86a61dbb726c3cdb1)) · [#37](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F37)\n- **providers:** add Vanilla Tweaks datapacks and crafting tweaks ([9c2dbc3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9c2dbc3ca3dc5992a4088efaa22d6409fb94d45a)) · [#37](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F37)\n- **panel:** add the Content tab, with every change reviewed as a plan ([5af6ee5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5af6ee5e4faee8cd3a1884c5b19ffc2624df66d2)) · [#36](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F36)\n- **panel:** list, search and check updates for a server's content ([d0679c8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0679c8325db6f833fac524363590f4e3380b903)) · [#36](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F36)\n- **panel:** let the Modrinth address be set, for mirrors and tests ([77b9196](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77b9196f6e98a0cec82fa1059d2329f957b9ed98)) · [#36](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F36)\n- **panel:** edit, review and apply a server's spec from its YAML tab ([2cc711f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2cc711fa9dfa5b5dadf8cf594bc76fa10ff19dbb)) · [#35](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F35)\n- **panel:** add a YAML editor and a plan view ([92f941a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92f941a25e3b55a8cf7b47606b4b574b569f7a63)) · [#35](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F35)\n- **panel:** create a server from a YAML spec ([fb608cb](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb608cb3557cbc1da287a57cd86efd5aaa61edfa)) · [#35](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F35)\n- **panel:** add plan and apply endpoints ([571f001](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F571f001fe32851889cd4018948e57af411ca696e)) · [#34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F34)\n- **panel:** plan a spec change and apply it as a job ([ac647ca](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fac647ca3199f7788beeadd10d53b34bf894656ac)) · [#34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F34)\n- **panel:** store a server's content list and read its lockfile ([778c640](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F778c6404ef6048201227dc314759db4165d9e63c)) · [#34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F34)\n- **providers:** keep locked versions when resolving content ([c66643f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc66643f7c1066e4c085cfb2114a30a85871267a0)) · [#34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F34)\n- **providers:** add link content and resolve dependencies across a content list ([b9a6770](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9a67701d1a7bef0693267c5253bcf81f5286c85)) · [#33](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F33)\n- **providers:** find and resolve mods and datapacks on Modrinth ([a333920](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa333920ed9fa7273810a2b4eb3f47e0d4918d93f)) · [#33](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F33)\n- **panel:** serve each server's spec, a spec checker and the JSON Schema ([7a0c556](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7a0c5567df49feee6eb3e8611c5257d5a41ce82f)) · [#32](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F32)\n- **panel:** describe a server as a YAML spec ([d016bbf](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd016bbf240716c4742c3cf41d484a3e02bfde33a)) · [#32](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F32)\n\n### Fixes\n\n- **backups:** wait for RCON when a server has only just started ([5591b62](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5591b62e1399d92518b4291641d4a29e97673e97))\n- **panel:** give two backups taken in the same second different names ([749a0ad](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F749a0ad2e3e1c43494e892a74b3548c7b166d034))\n\n### Docs\n\n- testing guide for 0.3.0 ([c699e75](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc699e7515fbc55c6c2980c4c64ae00833b53c794))\n\n### Other\n\n- **e2e:** add Chunky through a plan and pre-generate a small area ([baef1ad](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbaef1add79e4637053c5d37e1b7daf7321572b0f))\n- **e2e:** try a Vanilla Tweaks pack, reporting rather than failing if the site changed ([cee50e9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcee50e9696fb8656848c33e883a3670c59d39b10)) · [#37](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F37)\n- **e2e:** add a Modrinth mod through plan and apply ([fdddadd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffdddaddeec44785862d3d57b0c2cee4187df3100)) · [#34](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F34)\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.2.0...v0.3.0",{"version":1108,"date":1109,"url":1110,"beta":945,"body":1111},"0.2.0","2026-11-09T15:05:49Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv0.2.0","### Features\n\n- **panel:** manage SSH access from System ([1a9f7db](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a9f7db0d7a764b921e0cabfbb8b4c10c1a0b1da)) · [#28](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F28)\n- **agent:** close SSH, or open it for a while with a timer that survives restarts ([259f03d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F259f03d377e895e4220a45351c43090e0e529235)) · [#28](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F28)\n- **panel:** add import page ([bd8d33a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbd8d33ae391261f9fe1e4741c81fc8c5e60b993a)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **panel:** add import API ([6d3cf00](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6d3cf006bd73ac7ff667a00dc08b6f4b21d2a8e9)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **panel:** stage imports from chunked uploads, links and deleted servers ([2c8349f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2c8349fb8833a1daefcfe4c8e04f85379eb2e7ea)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **agent:** keep deleted servers' archives readable by the panel ([73717ed](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73717edc03118c1dcd34ff0a29971c2b97a66979)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **panel:** create a server from imported files ([0595d95](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0595d95c4c842b7994f7da5b9013829a5c4c88a9)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **panel:** work out what an imported folder is ([edb865e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fedb865e8ae191f10d7a4c488206c9a37f2f773fb)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **panel:** read a world's Minecraft version from level.dat ([55844f3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55844f3d014dac49a666f3ba7c947ae2337178c2)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **panel:** add a zip reader for untrusted uploads ([13a5e19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13a5e19bc3b3425751088b9f5616579e22d7d760)) · [#27](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27)\n- **agent:** restore the panel's group access to a server folder ([50b7346](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50b734689fc68906872f062927d6839d1ed4521f)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **panel:** add export world card with share links ([980717e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F980717ee1df0a575306afceba5e4ccd5681b5027)) · [#19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F19)\n- **panel:** add export API and public share downloads ([7c93418](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7c93418145f877f01bfdaada45856a5cacc04b5e)) · [#19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F19)\n- **panel:** export worlds as zips with expiring share links ([86de0d8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F86de0d8258a337d92150485a3e1deb09b1725620)) · [#19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F19)\n- **panel:** add a streaming zip writer with zip64 ([56d114d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F56d114d248a06eb8b71273a9a589d898293baaab)) · [#19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F19)\n- **panel:** add backups tab with schedule, restore and download ([6d78997](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6d78997bce08fe6d6fea9448548aa0e3d568b26b)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **panel:** add backup API and scheduled backups ([f44a924](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff44a9242a62d769c577f18f071131cfef0600ee8)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **panel:** back up and restore servers as jobs ([67dc9ef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F67dc9efe41a1a5e2121ca11ebe97836afe233543)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **rcon:** allow a longer timeout for one slow command ([9cfc87c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9cfc87ceaab320f1d36ee40aed76e6fffd4e9578)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **panel:** archive server folders with tar and zstd, and prune by retention ([d0b8f03](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0b8f03b9adf92c0a25606c771ced88900074e7d)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **panel:** add logs tab with search and download ([dd29f7a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdd29f7a908ba218caef619c0276c4296429aadbe)) · [#25](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F25)\n- **panel:** read and search server logs ([843e18f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F843e18fc23d80eef3aceebd521b1c90d930faccd)) · [#25](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F25)\n- **panel:** add file manager tab ([ceb343d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fceb343dc49ae66093d0d5b4284e4a36881bd6299)) · [#24](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F24)\n- **panel:** confine file operations to the server folder ([6460ae8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6460ae82e3cbaa221a40d198007a66f189df0821)) · [#24](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F24)\n- **panel:** add players tab for who's online, whitelist, ops and bans ([1ded1ef](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ded1efd87f4639ce8e51a56594d2e34c991bd04)) · [#23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F23)\n- **providers:** look up players with Mojang and derive offline UUIDs ([5cfb14d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5cfb14d1c913da441dc086071ffa0ced923b90c7)) · [#23](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F23)\n- **panel:** add settings tab for game settings, memory and port ([efe655f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefe655fa75c88c53b78db8d7220a5bc3f0c4b886)) · [#22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F22)\n- **panel:** edit server.properties without disturbing the file ([bbea215](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbbea2158f983e9f45db88f823679e13a438927fb)) · [#22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F22)\n- **agent:** add server.configure for memory and port changes ([4b997dd](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b997dd9462e81f0e566ee92f09a4953d9080c67)) · [#22](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F22)\n- **panel:** delete a server with a typed name and passkey check ([3be86d0](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3be86d0e4a340a4b43b2d7a4afd69e6fe7653015)) · [#21](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F21)\n\n### Fixes\n\n- **panel:** restore into a server folder the panel doesn't own ([01c9ff3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01c9ff34fc870f2e9c753c56668a0a16a3f82ae1))\n- **panel:** keep the cause when a cross-disk copy fails ([baf4946](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbaf49462e84440060da5577af15a1c845b9c8eb9))\n- **panel:** fix file permissions before backups, restores and file reads ([2d8ea45](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2d8ea45ba61596974effe721af9c7c8ce9b8050d)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **rcon:** send one packet at a time and end replies by size ([9886e13](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9886e136921b09287af79811d3ef03e07d02ebbd)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **panel:** keep the server name visible on phones ([6a85e8c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6a85e8c6fbff42d8d286118b0d1df085a2ecf335))\n\n### Docs\n\n- add testing notes for 0.2.0 ([f3b55e8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3b55e865fca7b1c55944f6141cbd36d7b2f1d04))\n\n### Other\n\n- **e2e:** open SSH by port, as the test image has no OpenSSH ufw profile ([93645b6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F93645b6e0529d565877fa137c89165ef2e0c4ce8))\n- **e2e:** turn ufw on, allowing everything, for the emergency SSH check ([21de4f6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21de4f62e49417b6e8e6ac635924edba443d141f))\n- **e2e:** confirm the restore with a native click inside the dialog, and report toasts ([63ee3c1](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F63ee3c120e5e29058a0b5811815ac9e6bd2aa5a7))\n- **e2e:** check emergency SSH closes on time across an agent restart ([f8cf815](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff8cf8157b94e3926c110e16601001019e0d93e72)) · [#28](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F28)\n- **e2e:** open the backup menu with a native click ([c57495e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc57495e3a55c20f17e58da03bb99fedaf31016f4))\n- **e2e:** export a world and fetch it through a share link ([bd5eaa8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbd5eaa8a98d6178236f4855ffa7b7f3f7f258cbe)) · [#19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F19)\n- **panel:** share the save pause, lock and space check ([36176c2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36176c22942d1658628c8fa319bafd85065ecfcb)) · [#19](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F19)\n- **e2e:** back up a running server and restore it through the UI ([ceb80ad](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fceb80ade21706a9d7d1b4d193b6849db9bd98d83)) · [#26](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26)\n- **agent:** fake Minecraft answers player commands and keeps list files ([ff80418](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff804184e670f02510a6dcb343e7ca91b481b612))\n- **panel:** give the server page tabs with nested routes ([cdad2b3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcdad2b3034bfa9b0ec09b958848ce44999684f0e))\n\n**Full diff:** https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.1.0...v0.2.0",{"version":1113,"date":1114,"url":1115,"beta":945,"body":1116},"0.1.0","2026-11-09T13:37:22Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fv0.1.0","### Features\n\n- **installer:** add one-line installer for Ubuntu and Debian ([3a9b32a](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a9b32a5b274c7e85d77e4b0cb5e7379e25a6406)) · [#14](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F14)\n- **panel:** add live server console with RCON commands ([8ed4952](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ed4952a3893ad15f89d0bc28ca05b41ba22ced3)) · [#13](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F13)\n- **panel:** add log tailer and console hub ([66e0575](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F66e0575bece128d5c8902bb1792290e91f53db14)) · [#13](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F13)\n- **rcon:** add a Minecraft RCON client ([93792f6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F93792f6b0bfaa3452a68146f950db05ddfbce290)) · [#13](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F13)\n- **panel:** add servers list and server page with live status ([7cd7da9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7cd7da9b6eb8853a87ee9096d44a7f0998f17de5)) · [#12](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F12)\n- **panel:** add server list, detail and power endpoints ([2733094](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2733094a4fec60c2caec70f252976fbb9ee06be3)) · [#12](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F12)\n- **panel:** add create-server wizard with live progress ([3f30553](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3f30553c8668b9dbbb38dd5285be5a8cd3b94f3c)) · [#11](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F11)\n- **panel:** add server creation API and job WebSocket ([40e9442](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F40e9442cd5b645388fb2ff03ec9797f552e92650)) · [#11](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F11)\n- **panel:** add job runner for creating servers ([e0bfb00](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe0bfb000030721aae7a76d711d27513a43efa808)) · [#11](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F11)\n- **providers:** add Mojang vanilla and Fabric loader providers ([260b755](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F260b75579dd0158373976799f13dcc4982b6a0ed)) · [#10](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F10)\n- **panel:** first-run setup, passkey sign-in, recovery codes and step-up ([efc2afc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefc2afcd33a9732cc0648cff61d15a14dd912b35)) · [#8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F8), [#9](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F9)\n- **panel:** add passkey, recovery code, setup token and challenge modules ([a07123c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa07123c88f39189c366c2ca5515558480d89c788)) · [#8](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F8)\n- **panel:** add bun:sqlite database with Drizzle schema and bundled migrations ([aacb730](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faacb730ebb7d82748b310487f3de221b185b13cc)) · [#7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F7)\n- **panel:** scaffold Nuxt 4 SPA on Bun with Flytower branding and health check ([e03bcbc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe03bcbc456ea2e5ae6411149499b8817060055ce)) · [#6](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F6)\n- **protocol:** add a typed agent client with timeouts ([00cdc42](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00cdc4297f9fe8494f3b11701a41d165c233644e))\n- **agent:** create and delete servers with per-server users, limits and firewall rules ([10fe1df](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F10fe1dfae3d1e0c3fa11b22482b26a0e5da9a3dd))\n- **agent:** install Temurin runtimes from Adoptium with checksum verification ([0b9152f](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0b9152f70ca9cccf151fdbe43c1b05bcd8078726))\n- **agent:** serve requests over a group-restricted Unix socket ([d4b3f31](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd4b3f319babd33043d5e8046b32942bd9a7d1d9b))\n- **agent:** add request dispatcher, audit hook and service verbs ([2c304d7](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2c304d74bab7b6cbb472fc027c1ee113213ffa88))\n- **protocol:** add agent verb schemas, envelopes and line framing ([5bac7f5](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5bac7f53e6dc6c7834e7c15ff50775f200d97ec0))\n\n### Fixes\n\n- **release:** copy real files instead of Nitro's absolute symlinks ([db7e4b3](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdb7e4b323840b92cb7f96de99d769fbbcd11bba5)) · [#15](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F15)\n- **panel:** keep wizard port and progress steps readable ([a6e80bc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa6e80bc96cebce8368ab8112b72b5dc35ccbf3d7)) · [#11](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F11)\n\n### Docs\n\n- add install guide, 0.1.0 test script and feedback template ([8f35383](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f3538348ca495f0c07118c4dd3de50739cafcd2)) · [#17](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F17)\n- add README ([00c0f5d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00c0f5d190371d8b8abbd97904fd2b1c6744bb8d))\n\n### Other\n\n- allow releasing from the Actions tab ([3a0af4e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a0af4e598d5129399b81d513a80d7df46b3e480))\n- **e2e:** install into a systemd container and drive it with Bun.WebView ([42d1332](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d1332de4b6a43f3f8fc711c4a411e0a18f955f)) · [#16](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F16)\n- build and publish release tarballs on version tags ([691f756](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F691f756a4dd461127168d154fdf0e68a73aee0bc)) · [#15](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F15)\n- **panel:** give the recovery-code test room on slow runners ([bb0ff87](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbb0ff87ccdf4633479a7113a587df6e35fe2b6f6))\n- **agent:** simulate logs and RCON in the fake agent ([340b60c](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F340b60cbc0955f1dad892341beee942c71bd619e))\n- await every rejects assertion ([9f71960](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9f71960d5ddf9ed0de59f50b416dcfdaa74dadae))\n- **agent:** add a fake agent for local panel development ([8bfffe2](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8bfffe2d0d75646927a5dd933729ed172dc1d5af))\n- **panel:** list public server fields explicitly ([a76631d](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa76631d349307dfa7e6572e53309b33687b7f96e)) · [#12](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F12)\n- **protocol:** connect to the agent with Bun.connect ([6e6460e](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e6460e796bd4ca4fd9d98f69cf7eaede8a99f15)) · [#18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F18)\n- **agent:** serve the socket with Bun.listen and decode frames as a stream ([b5a5837](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb5a583725679d2dfb91e9d3889d0a52e6c13aa88)) · [#18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F18)\n- **agent:** run commands with Bun.spawn and hash downloads with Bun.CryptoHasher ([8e6c694](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8e6c6943cd74e7bdb3b54977f051f332a5985eb9)) · [#18](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F18)\n- ignore Nuxt build output and lockfiles in Prettier ([05f8141](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F05f814138da8c0af3bde2be6cf9e58d9c2a01ab7))\n- switch runtime, package manager and tests to Bun ([8d5e6ee](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8d5e6eeeb7a34d2251149f081aaab2dedcb9e720))\n- rename working name to Flytower ([b4b1058](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4b10583ec93ee86a142b84758bd7b5ee9c64540))\n- check formatting in lint, ignore lockfile ([0a00026](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0a00026f2ceb9984abb6b2eea5573e56ec6c7e41))\n- add TypeScript, ESLint, Prettier, Vitest and CI ([d404edc](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd404edc375fbe8d67b5027734a3fdaebb94302fd))\n- initialise pnpm workspace ([a533b88](https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa533b88e76537b55e64a3a3f66c56dbff343925a))",{"version":1118,"date":1119,"url":1120,"beta":945,"body":1121},"pr-85","2026-11-10T00:34:07Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fpr-85","Test build of #85 at 1eb9dd769db5d3f727042fa878a819bdc016515a, version `1.1.0-pr.85.19`. **Not a release**: for testing on a spare VPS.\n\nInstall or upgrade to it with:\n\n```sh\ncurl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Fdownload\u002Fpr-85\u002Finstall.sh \\\n  | sudo bash -s -- --pr 85 --domain panel.example.com\n```\n\nIt's deleted when the pull request closes.",{"version":1123,"date":1124,"url":1125,"beta":945,"body":1126},"pr-132","2026-11-10T15:11:24Z","https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Ftag\u002Fpr-132","Test build of #132 at 2268de02da0aaed9c6072c9a7da445e7a88be076, version `1.2.0-pr.132.115`. **Not a release**: for testing on a spare VPS.\n\nInstall or upgrade to it with:\n\n```sh\ncurl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Fdownload\u002Fpr-132\u002Finstall.sh \\\n  | sudo bash -s -- --pr 132 --domain panel.example.com\n```\n\nIt's deleted when the pull request closes.",{"data":1128,"body":1129},{},{"type":1130,"children":1131},"root",[1132,1140,1160,1183,1190,1231,1237,1603,1607,1662,1668,1710],{"type":1133,"tag":1134,"props":1135,"children":1136},"element","p",{},[1137],{"type":1138,"value":1139},"text","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.",{"type":1133,"tag":1134,"props":1141,"children":1142},{},[1143,1145,1151,1153,1158],{"type":1138,"value":1144},"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 ",{"type":1133,"tag":1146,"props":1147,"children":1148},"strong",{},[1149],{"type":1138,"value":1150},"Install",{"type":1138,"value":1152}," won't go to an older version, though ",{"type":1133,"tag":1146,"props":1154,"children":1155},{},[1156],{"type":1138,"value":1157},"Go back to",{"type":1138,"value":1159}," 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.",{"type":1133,"tag":1134,"props":1161,"children":1162},{},[1163,1165,1170,1172,1181],{"type":1138,"value":1164},"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 ",{"type":1133,"tag":1146,"props":1166,"children":1167},{},[1168],{"type":1138,"value":1169},"Account",{"type":1138,"value":1171},". Testing notes are in ",{"type":1133,"tag":1173,"props":1174,"children":1178},"a",{"href":1175,"rel":1176},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.1\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md",[1177],"nofollow",[1179],{"type":1138,"value":1180},"testing-1.4.0.md",{"type":1138,"value":1182},".",{"type":1133,"tag":1184,"props":1185,"children":1187},"h3",{"id":1186},"features",[1188],{"type":1138,"value":1189},"Features",{"type":1133,"tag":1191,"props":1192,"children":1193},"ul",{},[1194,1214],{"type":1133,"tag":1195,"props":1196,"children":1197},"li",{},[1198,1203,1205,1212],{"type":1133,"tag":1146,"props":1199,"children":1200},{},[1201],{"type":1138,"value":1202},"rust-agent:",{"type":1138,"value":1204}," helpers for writing and copying files without following links (",{"type":1133,"tag":1173,"props":1206,"children":1209},{"href":1207,"rel":1208},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F51ccd75324fca8f80389cbb366294ec2c5b4a497",[1177],[1210],{"type":1138,"value":1211},"51ccd75",{"type":1138,"value":1213},")",{"type":1133,"tag":1195,"props":1215,"children":1216},{},[1217,1222,1223,1230],{"type":1133,"tag":1146,"props":1218,"children":1219},{},[1220],{"type":1138,"value":1221},"agent:",{"type":1138,"value":1204},{"type":1133,"tag":1173,"props":1224,"children":1227},{"href":1225,"rel":1226},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F610a2fe178f556535d05234106f4dbfd438b3bfe",[1177],[1228],{"type":1138,"value":1229},"610a2fe",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":1232,"children":1234},{"id":1233},"fixes",[1235],{"type":1138,"value":1236},"Fixes",{"type":1133,"tag":1191,"props":1238,"children":1239},{},[1240,1253,1270,1287,1304,1321,1337,1353,1369,1382,1395,1408,1421,1434,1447,1460,1473,1486,1499,1512,1525,1538,1551,1564,1577,1590],{"type":1133,"tag":1195,"props":1241,"children":1242},{},[1243,1245,1252],{"type":1138,"value":1244},"let the box itself see versions on the health check under Bun (",{"type":1133,"tag":1173,"props":1246,"children":1249},{"href":1247,"rel":1248},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa42cc78aceb2d1cec20445311f2ca29eec152565",[1177],[1250],{"type":1138,"value":1251},"a42cc78",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1254,"children":1255},{},[1256,1260,1262,1269],{"type":1133,"tag":1146,"props":1257,"children":1258},{},[1259],{"type":1138,"value":1202},{"type":1138,"value":1261}," move agent state and server archives out of the panel's folder (",{"type":1133,"tag":1173,"props":1263,"children":1266},{"href":1264,"rel":1265},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3faccb8a157fe04790873697bfa0dff85bd5d98b",[1177],[1267],{"type":1138,"value":1268},"3faccb8",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1271,"children":1272},{},[1273,1277,1279,1286],{"type":1133,"tag":1146,"props":1274,"children":1275},{},[1276],{"type":1138,"value":1202},{"type":1138,"value":1278}," one update at a time, recorded before the updater starts, and no downgrades (",{"type":1133,"tag":1173,"props":1280,"children":1283},{"href":1281,"rel":1282},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13f556012eedb7c436b06d1f300d250a709517c6",[1177],[1284],{"type":1138,"value":1285},"13f5560",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1288,"children":1289},{},[1290,1294,1296,1303],{"type":1133,"tag":1146,"props":1291,"children":1292},{},[1293],{"type":1138,"value":1202},{"type":1138,"value":1295}," keep database copies root-only and never delete a live file the updater did not save (",{"type":1133,"tag":1173,"props":1297,"children":1300},{"href":1298,"rel":1299},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d0063d15c259cc70767596b8cb32e02a385168",[1177],[1301],{"type":1138,"value":1302},"42d0063",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1305,"children":1306},{},[1307,1311,1313,1320],{"type":1133,"tag":1146,"props":1308,"children":1309},{},[1310],{"type":1138,"value":1221},{"type":1138,"value":1312}," clean up database copies in the agent's folder, and serialise with updates (",{"type":1133,"tag":1173,"props":1314,"children":1317},{"href":1315,"rel":1316},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbc45cce091ce0dacdb33d40501fc9d0a2c6d6fb2",[1177],[1318],{"type":1138,"value":1319},"bc45cce",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1322,"children":1323},{},[1324,1328,1329,1336],{"type":1133,"tag":1146,"props":1325,"children":1326},{},[1327],{"type":1138,"value":1221},{"type":1138,"value":1261},{"type":1133,"tag":1173,"props":1330,"children":1333},{"href":1331,"rel":1332},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff0bf5317cfeff08dfa6e021324632085bb8a19b9",[1177],[1334],{"type":1138,"value":1335},"f0bf531",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1338,"children":1339},{},[1340,1344,1345,1352],{"type":1133,"tag":1146,"props":1341,"children":1342},{},[1343],{"type":1138,"value":1221},{"type":1138,"value":1278},{"type":1133,"tag":1173,"props":1346,"children":1349},{"href":1347,"rel":1348},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4eca6ac7c1702b512691a5e5dff68a15f0b87c9",[1177],[1350],{"type":1138,"value":1351},"b4eca6a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1354,"children":1355},{},[1356,1360,1361,1368],{"type":1133,"tag":1146,"props":1357,"children":1358},{},[1359],{"type":1138,"value":1221},{"type":1138,"value":1295},{"type":1133,"tag":1173,"props":1362,"children":1365},{"href":1363,"rel":1364},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb216eacf11db9c273d697c429132c4f1390c83d6",[1177],[1366],{"type":1138,"value":1367},"b216eac",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1370,"children":1371},{},[1372,1374,1381],{"type":1138,"value":1373},"health check only tells versions to signed-in people and the box itself (",{"type":1133,"tag":1173,"props":1375,"children":1378},{"href":1376,"rel":1377},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62950a45efb588a279d9489f68a97d31a5f57721",[1177],[1379],{"type":1138,"value":1380},"62950a4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1383,"children":1384},{},[1385,1387,1394],{"type":1138,"value":1386},"type the export and past world delete calls (",{"type":1133,"tag":1173,"props":1388,"children":1391},{"href":1389,"rel":1390},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d61059412d6512734cf8ff17d820803a66a73f",[1177],[1392],{"type":1138,"value":1393},"42d6105",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1396,"children":1397},{},[1398,1400,1407],{"type":1138,"value":1399},"refuse changes from other sites and close the \u002Fapi\u002F_ gap (",{"type":1133,"tag":1173,"props":1401,"children":1404},{"href":1402,"rel":1403},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F20d9f41f8950ecc8f7133c11a185d4f85be75ffa",[1177],[1405],{"type":1138,"value":1406},"20d9f41",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1409,"children":1410},{},[1411,1413,1420],{"type":1138,"value":1412},"check lockfile paths before moving or removing content (",{"type":1133,"tag":1173,"props":1414,"children":1417},{"href":1415,"rel":1416},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa07ef8b72904c992d649e9e4742986eeef3e048e",[1177],[1418],{"type":1138,"value":1419},"a07ef8b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1422,"children":1423},{},[1424,1426,1433],{"type":1138,"value":1425},"setup token guesses are limited per address and counted up front (",{"type":1133,"tag":1173,"props":1427,"children":1430},{"href":1428,"rel":1429},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5579a9478c880de8cbd5e9f18bf50e675062c3df",[1177],[1431],{"type":1138,"value":1432},"5579a94",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1435,"children":1436},{},[1437,1439,1446],{"type":1138,"value":1438},"check the panel's user, not its group, on the Rust agent socket (",{"type":1133,"tag":1173,"props":1440,"children":1443},{"href":1441,"rel":1442},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1be77d0a260cc1dd2d7f2064e06d722754a6c95b",[1177],[1444],{"type":1138,"value":1445},"1be77d0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1448,"children":1449},{},[1450,1452,1459],{"type":1138,"value":1451},"run servers in their own group and hide the agent from them (",{"type":1133,"tag":1173,"props":1453,"children":1456},{"href":1454,"rel":1455},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb799c9eb71d5e72eb4c476f1dc9557e486552d75",[1177],[1457],{"type":1138,"value":1458},"b799c9e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1461,"children":1462},{},[1463,1465,1472],{"type":1138,"value":1464},"removing a passkey signs out your other devices (",{"type":1133,"tag":1173,"props":1466,"children":1469},{"href":1467,"rel":1468},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0003816e20e4d7e293325c88c6d85b0afa892efa",[1177],[1470],{"type":1138,"value":1471},"0003816",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1474,"children":1475},{},[1476,1478,1485],{"type":1138,"value":1477},"past worlds to start a new server from only come from servers you can see (",{"type":1133,"tag":1173,"props":1479,"children":1482},{"href":1480,"rel":1481},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F364fa286ae390d070c6b3a97ecdcba66b69a0a89",[1177],[1483],{"type":1138,"value":1484},"364fa28",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1487,"children":1488},{},[1489,1491,1498],{"type":1138,"value":1490},"only follow jobs that exist and that you can see (",{"type":1133,"tag":1173,"props":1492,"children":1495},{"href":1493,"rel":1494},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc5938020e76aec50f259d82a8abd9dd717e3a89d",[1177],[1496],{"type":1138,"value":1497},"c593802",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1500,"children":1501},{},[1502,1504,1511],{"type":1138,"value":1503},"recovery-code sign-in checks one code instead of every code (",{"type":1133,"tag":1173,"props":1505,"children":1508},{"href":1506,"rel":1507},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd88de712b75e28c139d448798503eb363f766555",[1177],[1509],{"type":1138,"value":1510},"d88de71",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1513,"children":1514},{},[1515,1517,1524],{"type":1138,"value":1516},"rate limiter forgets old windows and counts the proxy's own hop (",{"type":1133,"tag":1173,"props":1518,"children":1521},{"href":1519,"rel":1520},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4a8a639998b660b02662edd1cb9cb5d23473fb47",[1177],[1522],{"type":1138,"value":1523},"4a8a639",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1526,"children":1527},{},[1528,1530,1537],{"type":1138,"value":1529},"deleting an export or past world needs a passkey check (",{"type":1133,"tag":1173,"props":1531,"children":1534},{"href":1532,"rel":1533},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8466d051d1336420614e377ca2799288663e442b",[1177],[1535],{"type":1138,"value":1536},"8466d05",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1539,"children":1540},{},[1541,1543,1550],{"type":1138,"value":1542},"validate level-name and keep world readers inside the server folder (",{"type":1133,"tag":1173,"props":1544,"children":1547},{"href":1545,"rel":1546},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53e098edac588010235f9b6bd197f1bae2e652e5",[1177],[1548],{"type":1138,"value":1549},"53e098e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1552,"children":1553},{},[1554,1556,1563],{"type":1138,"value":1555},"cancelling an invite needs the standing to have made it (",{"type":1133,"tag":1173,"props":1557,"children":1560},{"href":1558,"rel":1559},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8857b082e6026f2835c192e4e15ee40e1f27e96b",[1177],[1561],{"type":1138,"value":1562},"8857b08",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1565,"children":1566},{},[1567,1569,1576],{"type":1138,"value":1568},"Discord role mappings follow the no-more-than-you-have rule (",{"type":1133,"tag":1173,"props":1570,"children":1573},{"href":1571,"rel":1572},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6fdd6b4f0d8d11b713b17137feb2e926e3bf64b4",[1177],[1574],{"type":1138,"value":1575},"6fdd6b4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1578,"children":1579},{},[1580,1582,1589],{"type":1138,"value":1581},"write server-folder files through random exclusive temp files (",{"type":1133,"tag":1173,"props":1583,"children":1586},{"href":1584,"rel":1585},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F16841c4a000157f2d903e37171808ac2e0dc6746",[1177],[1587],{"type":1138,"value":1588},"16841c4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1591,"children":1592},{},[1593,1595,1602],{"type":1138,"value":1594},"only send a saved notification secret back to the same site (",{"type":1133,"tag":1173,"props":1596,"children":1599},{"href":1597,"rel":1598},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36d6b1217c8cacec3876d50d4c11f7c31034ba65",[1177],[1600],{"type":1138,"value":1601},"36d6b12",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":1604,"children":1605},{"id":7},[1606],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":1608,"children":1609},{},[1610,1623,1636,1649],{"type":1133,"tag":1195,"props":1611,"children":1612},{},[1613,1615,1622],{"type":1138,"value":1614},"release notes for 1.4.1 and its native build (",{"type":1133,"tag":1173,"props":1616,"children":1619},{"href":1617,"rel":1618},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe5de53f93e9e01c17982fcfe2e022417b99e81ed",[1177],[1620],{"type":1138,"value":1621},"e5de53f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1624,"children":1625},{},[1626,1628,1635],{"type":1138,"value":1627},"where the agent keeps its state, database copies and archives (",{"type":1133,"tag":1173,"props":1629,"children":1632},{"href":1630,"rel":1631},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2fcc26ffaeeaf1243e10052f9a9050efebf2a265",[1177],[1633],{"type":1138,"value":1634},"2fcc26f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1637,"children":1638},{},[1639,1641,1648],{"type":1138,"value":1640},"deleting an export or past world asks for your passkey (",{"type":1133,"tag":1173,"props":1642,"children":1645},{"href":1643,"rel":1644},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb292d61630b51b2bdfbe5b373d35c1882dd9e52",[1177],[1646],{"type":1138,"value":1647},"fb292d6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1650,"children":1651},{},[1652,1654,1661],{"type":1138,"value":1653},"passkey removal signs out other devices; Discord role mapping limits (",{"type":1133,"tag":1173,"props":1655,"children":1658},{"href":1656,"rel":1657},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3327a12f27c6e930d4d75d2c07eab14aef99cd8d",[1177],[1659],{"type":1138,"value":1660},"3327a12",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":1663,"children":1665},{"id":1664},"other",[1666],{"type":1138,"value":1667},"Other",{"type":1133,"tag":1191,"props":1669,"children":1670},{},[1671,1684,1697],{"type":1133,"tag":1195,"props":1672,"children":1673},{},[1674,1676,1683],{"type":1138,"value":1675},"pin version ordering in both agents (",{"type":1133,"tag":1173,"props":1677,"children":1680},{"href":1678,"rel":1679},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F33dad60e4398a393a53c95cf35cb9067122f1248",[1177],[1681],{"type":1138,"value":1682},"33dad60",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1685,"children":1686},{},[1687,1689,1696],{"type":1138,"value":1688},"share compareVersions between the panel and the agent (",{"type":1133,"tag":1173,"props":1690,"children":1693},{"href":1691,"rel":1692},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9d2be54f9f6f1081e6a6e770d816e592cfb6b100",[1177],[1694],{"type":1138,"value":1695},"9d2be54",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1698,"children":1699},{},[1700,1702,1709],{"type":1138,"value":1701},"check a running server can't see the agent or the panel's data (",{"type":1133,"tag":1173,"props":1703,"children":1706},{"href":1704,"rel":1705},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1793857f16adb55f2dd39fd9504b086e54bbc64e",[1177],[1707],{"type":1138,"value":1708},"1793857",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":1711,"children":1712},{},[1713,1718,1720],{"type":1133,"tag":1146,"props":1714,"children":1715},{},[1716],{"type":1138,"value":1717},"Full diff:",{"type":1138,"value":1719}," ",{"type":1133,"tag":1173,"props":1721,"children":1724},{"href":1722,"rel":1723},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.4.0...v1.4.1",[1177],[1725],{"type":1138,"value":1722},{"data":1727,"body":1728},{},{"type":1130,"children":1729},[1730,1763,1804,1847,1851,2062,2066,2116,2120,2266,2270,2325,2331,2347],{"type":1133,"tag":1134,"props":1731,"children":1732},{},[1733,1735,1740,1742,1747,1749,1754,1756,1761],{"type":1138,"value":1734},"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. ",{"type":1133,"tag":1146,"props":1736,"children":1737},{},[1738],{"type":1138,"value":1739},"People",{"type":1138,"value":1741}," can show exactly what each person is able to do, and a server's ",{"type":1133,"tag":1146,"props":1743,"children":1744},{},[1745],{"type":1138,"value":1746},"Settings",{"type":1138,"value":1748}," has an ",{"type":1133,"tag":1146,"props":1750,"children":1751},{},[1752],{"type":1138,"value":1753},"Access",{"type":1138,"value":1755}," section, so someone with ",{"type":1133,"tag":1146,"props":1757,"children":1758},{},[1759],{"type":1138,"value":1760},"Manage who has access",{"type":1138,"value":1762}," can look after one server's people and invite links without touching the rest.",{"type":1133,"tag":1134,"props":1764,"children":1765},{},[1766,1768,1772,1774,1779,1781,1786,1788,1795,1797,1802],{"type":1138,"value":1767},"Chat now goes both ways with Discord. Turn on ",{"type":1133,"tag":1146,"props":1769,"children":1770},{},[1771],{"type":1138,"value":386},{"type":1138,"value":1773}," on the Discord app card under ",{"type":1133,"tag":1146,"props":1775,"children":1776},{},[1777],{"type":1138,"value":1778},"System, Integrations",{"type":1138,"value":1780},", then switch it on for a server in its ",{"type":1133,"tag":1146,"props":1782,"children":1783},{},[1784],{"type":1138,"value":1785},"Discord chat",{"type":1138,"value":1787}," settings. Messages in that channel then show in game as ",{"type":1133,"tag":1789,"props":1790,"children":1792},"code",{"className":1791},[],[1793],{"type":1138,"value":1794},"[Discord] name: message",{"type":1138,"value":1796},". This needs ",{"type":1133,"tag":1146,"props":1798,"children":1799},{},[1800],{"type":1138,"value":1801},"Message Content Intent",{"type":1138,"value":1803}," 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.",{"type":1133,"tag":1134,"props":1805,"children":1806},{},[1807,1809,1814,1816,1822,1824,1830,1831,1837,1839,1846],{"type":1138,"value":1808},"The system helper and updater now run the ",{"type":1133,"tag":1146,"props":1810,"children":1811},{},[1812],{"type":1138,"value":1813},"Rust",{"type":1138,"value":1815}," 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 ",{"type":1133,"tag":1789,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":1138,"value":1821},"bun",{"type":1138,"value":1823}," in ",{"type":1133,"tag":1789,"props":1825,"children":1827},{"className":1826},[],[1828],{"type":1138,"value":1829},"\u002Fetc\u002Fflytower\u002Fagent",{"type":1138,"value":1171},{"type":1133,"tag":1173,"props":1832,"children":1835},{"href":1833,"rel":1834},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md",[1177],[1836],{"type":1138,"value":1180},{"type":1138,"value":1838}," and ",{"type":1133,"tag":1173,"props":1840,"children":1843},{"href":1841,"rel":1842},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[1844],{"type":1138,"value":1845},"Testing the Rust agent",{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":1848,"children":1849},{"id":1186},[1850],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":1852,"children":1853},{},[1854,1867,1880,1893,1906,1919,1932,1945,1958,1971,1984,1997,2010,2023,2036,2049],{"type":1133,"tag":1195,"props":1855,"children":1856},{},[1857,1859,1866],{"type":1138,"value":1858},"chat from Discord switches on the Discord card and server chat card (",{"type":1133,"tag":1173,"props":1860,"children":1863},{"href":1861,"rel":1862},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdacd16fba3ab8f51004fa0d4ef053a9d5fff8a37",[1177],[1864],{"type":1138,"value":1865},"dacd16f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1868,"children":1869},{},[1870,1872,1879],{"type":1138,"value":1871},"show messages from a server's Discord chat channel in game (",{"type":1133,"tag":1173,"props":1873,"children":1876},{"href":1874,"rel":1875},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ef16b1239434c134685bf9813b0fad62e314d28",[1177],[1877],{"type":1138,"value":1878},"8ef16b1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1881,"children":1882},{},[1883,1885,1892],{"type":1138,"value":1884},"keep a Discord Gateway connection with heartbeats, resume and backoff (",{"type":1133,"tag":1173,"props":1886,"children":1889},{"href":1887,"rel":1888},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe4471f77468b0f2454ea26053619720d93e840d5",[1177],[1890],{"type":1138,"value":1891},"e4471f7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1894,"children":1895},{},[1896,1898,1905],{"type":1138,"value":1897},"start the Rust agent by default, falling back to Bun if it won't start (",{"type":1133,"tag":1173,"props":1899,"children":1902},{"href":1900,"rel":1901},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fba72ebfe8d417ffd547bab67dad521e0fee876d2",[1177],[1903],{"type":1138,"value":1904},"ba72ebf",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1907,"children":1908},{},[1909,1911,1918],{"type":1138,"value":1910},"Rust agent clears its start marker once listening (",{"type":1133,"tag":1173,"props":1912,"children":1915},{"href":1913,"rel":1914},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e50170dcfdb0aa1a385a7078983ab0d3002a785",[1177],[1916],{"type":1138,"value":1917},"5e50170",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1920,"children":1921},{},[1922,1924,1931],{"type":1138,"value":1923},"Access section on server Settings (",{"type":1133,"tag":1173,"props":1925,"children":1928},{"href":1926,"rel":1927},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ca45b1dde52429fb042f62641d852b7d1176f02",[1177],[1929],{"type":1138,"value":1930},"8ca45b1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1933,"children":1934},{},[1935,1937,1944],{"type":1138,"value":1936},"let a server's own access be managed by someone trusted with it (",{"type":1133,"tag":1173,"props":1938,"children":1941},{"href":1939,"rel":1940},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7a35d4fe08edb722ecefe84c07ebfcbe1a2ca43",[1177],[1942],{"type":1138,"value":1943},"d7a35d4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1946,"children":1947},{},[1948,1950,1957],{"type":1138,"value":1949},"show what each person can do, from all their roles (",{"type":1133,"tag":1173,"props":1951,"children":1954},{"href":1952,"rel":1953},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff80f280a31108a031c3a27075aba3cf2ad9002fd",[1177],[1955],{"type":1138,"value":1956},"f80f280",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1959,"children":1960},{},[1961,1963,1970],{"type":1138,"value":1962},"role editor grouped by area, with copies and locked extras (",{"type":1133,"tag":1173,"props":1964,"children":1967},{"href":1965,"rel":1966},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f46f6bdd4dcab3baf41437dbf530f80062357c5",[1177],[1968],{"type":1138,"value":1969},"8f46f6b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1972,"children":1973},{},[1974,1976,1983],{"type":1138,"value":1975},"say what changed in Activity when roles or access change (",{"type":1133,"tag":1173,"props":1977,"children":1980},{"href":1978,"rel":1979},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F41576832362f1018353dc4aad5d09f4b3f5ff61e",[1177],[1981],{"type":1138,"value":1982},"4157683",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1985,"children":1986},{},[1987,1989,1996],{"type":1138,"value":1988},"group permissions by area and mark the powerful ones (",{"type":1133,"tag":1173,"props":1990,"children":1993},{"href":1991,"rel":1992},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff21526a0a1c3900623555e91243ad148e4a1978d",[1177],[1994],{"type":1138,"value":1995},"f21526a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":1998,"children":1999},{},[2000,2002,2009],{"type":1138,"value":2001},"show and hide panel pages by the finer permissions (",{"type":1133,"tag":1173,"props":2003,"children":2006},{"href":2004,"rel":2005},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb0fdf6ffaef5b2b146af369e5473e0fd763e0fc9",[1177],[2007],{"type":1138,"value":2008},"b0fdf6f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2011,"children":2012},{},[2013,2015,2022],{"type":1138,"value":2014},"check each part of a spec change against its permission (",{"type":1133,"tag":1173,"props":2016,"children":2019},{"href":2017,"rel":2018},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c64d2cd591c547c2f12f3a46f1960e4d7691ba6",[1177],[2020],{"type":1138,"value":2021},"4c64d2c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2024,"children":2025},{},[2026,2028,2035],{"type":1138,"value":2027},"check the finer permissions on every route (",{"type":1133,"tag":1173,"props":2029,"children":2032},{"href":2030,"rel":2031},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98c135cbbd7b17fe960909f93f7c22d870259d0b",[1177],[2033],{"type":1138,"value":2034},"98c135c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2037,"children":2038},{},[2039,2041,2048],{"type":1138,"value":2040},"move custom roles to the finer permissions on upgrade (",{"type":1133,"tag":1173,"props":2042,"children":2045},{"href":2043,"rel":2044},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31ba4297066a4f070b99d97f86051f6184b5966d",[1177],[2046],{"type":1138,"value":2047},"31ba429",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2050,"children":2051},{},[2052,2054,2061],{"type":1138,"value":2053},"split broad permissions into finer keys (",{"type":1133,"tag":1173,"props":2055,"children":2058},{"href":2056,"rel":2057},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbab8d866001516ca65bd58bd6d0c8feaa5f45e2b",[1177],[2059],{"type":1138,"value":2060},"bab8d86",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2063,"children":2064},{"id":1233},[2065],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":2067,"children":2068},{},[2069,2082,2095],{"type":1133,"tag":1195,"props":2070,"children":2071},{},[2072,2074,2081],{"type":1138,"value":2073},"keep map controls above the tiles (",{"type":1133,"tag":1173,"props":2075,"children":2078},{"href":2076,"rel":2077},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa5d49c0df3676b6a405306dc2232645b1b65e1b",[1177],[2079],{"type":1138,"value":2080},"aa5d49c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2083,"children":2084},{},[2085,2087,2094],{"type":1138,"value":2086},"keep the chat from Discord badge beside its heading, and name a stop plainly (",{"type":1133,"tag":1173,"props":2088,"children":2091},{"href":2089,"rel":2090},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F84ebdef5263a36c0f896118bd8159588fa63561d",[1177],[2092],{"type":1138,"value":2093},"84ebdef",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2096,"children":2097},{},[2098,2100,2107,2109],{"type":1138,"value":2099},"smooth web map zooming (",{"type":1133,"tag":1173,"props":2101,"children":2104},{"href":2102,"rel":2103},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6bdb7be6514acdf674657601fe997b42445c499",[1177],[2105],{"type":1138,"value":2106},"f6bdb7b",{"type":1138,"value":2108},") · ",{"type":1133,"tag":1173,"props":2110,"children":2113},{"href":2111,"rel":2112},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F201",[1177],[2114],{"type":1138,"value":2115},"#201",{"type":1133,"tag":1184,"props":2117,"children":2118},{"id":7},[2119],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":2121,"children":2122},{},[2123,2136,2149,2162,2175,2188,2201,2214,2227,2240,2253],{"type":1133,"tag":1195,"props":2124,"children":2125},{},[2126,2128,2135],{"type":1138,"value":2127},"release notes for 1.4.0 and its native build (",{"type":1133,"tag":1173,"props":2129,"children":2132},{"href":2130,"rel":2131},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F34c8bc8f833fd5da7f3a2b2f740c6263e6226acd",[1177],[2133],{"type":1138,"value":2134},"34c8bc8",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2137,"children":2138},{},[2139,2141,2148],{"type":1138,"value":2140},"release notes for 1.4.0-beta.2 and its native build (",{"type":1133,"tag":1173,"props":2142,"children":2145},{"href":2143,"rel":2144},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe2cfafa15534189b7fc2837025b751a4940c5353",[1177],[2146],{"type":1138,"value":2147},"e2cfafa",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2150,"children":2151},{},[2152,2154,2161],{"type":1138,"value":2153},"release notes for 1.4.0-beta.1 and its native build (",{"type":1133,"tag":1173,"props":2155,"children":2158},{"href":2156,"rel":2157},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0f0d03f4df366ff3f7aa285a1a62a23d99e82b8",[1177],[2159],{"type":1138,"value":2160},"d0f0d03",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2163,"children":2164},{},[2165,2167,2174],{"type":1138,"value":2166},"chat from Discord and its testing notes (",{"type":1133,"tag":1173,"props":2168,"children":2171},{"href":2169,"rel":2170},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F72a25ce284d07365e278948fc6116973698524bc",[1177],[2172],{"type":1138,"value":2173},"72a25ce",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2176,"children":2177},{},[2178,2180,2187],{"type":1138,"value":2179},"keep the updating page's links inside the docs site (",{"type":1133,"tag":1173,"props":2181,"children":2184},{"href":2182,"rel":2183},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8956ba3fce9097c09846363b891499fea0f46d36",[1177],[2185],{"type":1138,"value":2186},"8956ba3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2189,"children":2190},{},[2191,2193,2200],{"type":1138,"value":2192},"Rust agent on by default, and how to choose Bun (",{"type":1133,"tag":1173,"props":2194,"children":2197},{"href":2195,"rel":2196},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5f8e23834ae13d5f84737da4247e87dfa684e0b2",[1177],[2198],{"type":1138,"value":2199},"5f8e238",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2202,"children":2203},{},[2204,2206,2213],{"type":1138,"value":2205},"managing one server's access (",{"type":1133,"tag":1173,"props":2207,"children":2210},{"href":2208,"rel":2209},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50298ab035db8fff5e205fdc2494f201df2caca8",[1177],[2211],{"type":1138,"value":2212},"50298ab",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2215,"children":2216},{},[2217,2219,2226],{"type":1138,"value":2218},"the role editor and what someone can do (",{"type":1133,"tag":1173,"props":2220,"children":2223},{"href":2221,"rel":2222},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee83ff5fdbd1b7b19c79f8aacc08fecc6ad363e9",[1177],[2224],{"type":1138,"value":2225},"ee83ff5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2228,"children":2229},{},[2230,2232,2239],{"type":1138,"value":2231},"drop a testing step that doesn't hold yet (",{"type":1133,"tag":1173,"props":2233,"children":2236},{"href":2234,"rel":2235},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F94e21e42c6481d88330d7f44b7e17d71b6d63ef6",[1177],[2237],{"type":1138,"value":2238},"94e21e4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2241,"children":2242},{},[2243,2245,2252],{"type":1138,"value":2244},"testing notes for the finer permissions (",{"type":1133,"tag":1173,"props":2246,"children":2249},{"href":2247,"rel":2248},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd5a56b4b499621098e695876457af7e26a4d9843",[1177],[2250],{"type":1138,"value":2251},"d5a56b4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2254,"children":2255},{},[2256,2258,2265],{"type":1138,"value":2257},"describe the finer permissions (",{"type":1133,"tag":1173,"props":2259,"children":2262},{"href":2260,"rel":2261},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9c1215f7720001d17463cec3b9022a9b8e0fd8d",[1177],[2263],{"type":1138,"value":2264},"b9c1215",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2267,"children":2268},{"id":1664},[2269],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":2271,"children":2272},{},[2273,2286,2299,2312],{"type":1133,"tag":1195,"props":2274,"children":2275},{},[2276,2278,2285],{"type":1138,"value":2277},"give the slow RCON command test room for the login (",{"type":1133,"tag":1173,"props":2279,"children":2282},{"href":2280,"rel":2281},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F43f02b54e7a3cc331dcb088a993bc3f3d0d40cbc",[1177],[2283],{"type":1138,"value":2284},"43f02b5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2287,"children":2288},{},[2289,2291,2298],{"type":1138,"value":2290},"clear the agent's start limit between the E2E's quick restarts (",{"type":1133,"tag":1173,"props":2292,"children":2295},{"href":2293,"rel":2294},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F545b94f70eae78407cc44519356b96fe96ae5d83",[1177],[2296],{"type":1138,"value":2297},"545b94f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2300,"children":2301},{},[2302,2304,2311],{"type":1138,"value":2303},"check the Rust agent and its Bun fallback end to end (",{"type":1133,"tag":1173,"props":2305,"children":2308},{"href":2306,"rel":2307},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ffca2124502bd675d5e45d7a9b60011902a36d9",[1177],[2309],{"type":1138,"value":2310},"5ffca21",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2313,"children":2314},{},[2315,2317,2324],{"type":1138,"value":2316},"prove nobody gains or loses access in the permission split (",{"type":1133,"tag":1173,"props":2318,"children":2321},{"href":2319,"rel":2320},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa65a42e3394376b6ae735ee6073dcb98ffa449d6",[1177],[2322],{"type":1138,"value":2323},"a65a42e",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2326,"children":2328},{"id":2327},"other-changes",[2329],{"type":1138,"value":2330},"Other changes",{"type":1133,"tag":1191,"props":2332,"children":2333},{},[2334],{"type":1133,"tag":1195,"props":2335,"children":2336},{},[2337,2339,2346],{"type":1138,"value":2338},"Merge main into feat\u002Fpermission-split (",{"type":1133,"tag":1173,"props":2340,"children":2343},{"href":2341,"rel":2342},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78b8ecec20a29531c5ceacb64b7149628b8ccf36",[1177],[2344],{"type":1138,"value":2345},"78b8ece",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":2348,"children":2349},{},[2350,2354,2355],{"type":1133,"tag":1146,"props":2351,"children":2352},{},[2353],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":2356,"children":2359},{"href":2357,"rel":2358},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.1...v1.4.0",[1177],[2360],{"type":1138,"value":2357},{"data":2362,"body":2363},{},{"type":1130,"children":2364},[2365,2370,2382,2386,2399,2403,2416],{"type":1133,"tag":1134,"props":2366,"children":2367},{},[2368],{"type":1138,"value":2369},"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.",{"type":1133,"tag":1134,"props":2371,"children":2372},{},[2373,2375,2381],{"type":1138,"value":2374},"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 ",{"type":1133,"tag":1173,"props":2376,"children":2379},{"href":2377,"rel":2378},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0-beta.2\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md",[1177],[2380],{"type":1138,"value":1180},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":2383,"children":2384},{"id":1233},[2385],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":2387,"children":2388},{},[2389],{"type":1133,"tag":1195,"props":2390,"children":2391},{},[2392,2393,2398],{"type":1138,"value":2073},{"type":1133,"tag":1173,"props":2394,"children":2396},{"href":2076,"rel":2395},[1177],[2397],{"type":1138,"value":2080},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2400,"children":2401},{"id":7},[2402],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":2404,"children":2405},{},[2406],{"type":1133,"tag":1195,"props":2407,"children":2408},{},[2409,2410,2415],{"type":1138,"value":2140},{"type":1133,"tag":1173,"props":2411,"children":2413},{"href":2143,"rel":2412},[1177],[2414],{"type":1138,"value":2147},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":2417,"children":2418},{},[2419,2423,2424],{"type":1133,"tag":1146,"props":2420,"children":2421},{},[2422],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":2425,"children":2428},{"href":2426,"rel":2427},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.4.0-beta.1...v1.4.0-beta.2",[1177],[2429],{"type":1138,"value":2426},{"data":2431,"body":2432},{},{"type":1130,"children":2433},[2434,2462,2493,2529,2533,2696,2700,2728,2732,2825,2829,2872,2876,2889],{"type":1133,"tag":1134,"props":2435,"children":2436},{},[2437,2439,2443,2445,2449,2450,2454,2456,2460],{"type":1138,"value":2438},"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. ",{"type":1133,"tag":1146,"props":2440,"children":2441},{},[2442],{"type":1138,"value":1739},{"type":1138,"value":2444}," can now show exactly what each person is able to do. A server's ",{"type":1133,"tag":1146,"props":2446,"children":2447},{},[2448],{"type":1138,"value":1746},{"type":1138,"value":1748},{"type":1133,"tag":1146,"props":2451,"children":2452},{},[2453],{"type":1138,"value":1753},{"type":1138,"value":2455}," section, so someone with the new ",{"type":1133,"tag":1146,"props":2457,"children":2458},{},[2459],{"type":1138,"value":1760},{"type":1138,"value":2461}," permission can look after one server's people and invite links without touching the rest.",{"type":1133,"tag":1134,"props":2463,"children":2464},{},[2465,2466,2470,2471,2475,2476,2480,2481,2486,2487,2491],{"type":1138,"value":1767},{"type":1133,"tag":1146,"props":2467,"children":2468},{},[2469],{"type":1138,"value":386},{"type":1138,"value":1773},{"type":1133,"tag":1146,"props":2472,"children":2473},{},[2474],{"type":1138,"value":1778},{"type":1138,"value":1780},{"type":1133,"tag":1146,"props":2477,"children":2478},{},[2479],{"type":1138,"value":1785},{"type":1138,"value":1787},{"type":1133,"tag":1789,"props":2482,"children":2484},{"className":2483},[],[2485],{"type":1138,"value":1794},{"type":1138,"value":1796},{"type":1133,"tag":1146,"props":2488,"children":2489},{},[2490],{"type":1138,"value":1801},{"type":1138,"value":2492}," 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.",{"type":1133,"tag":1134,"props":2494,"children":2495},{},[2496,2497,2501,2502,2507,2508,2513,2515,2521,2522,2528],{"type":1138,"value":1808},{"type":1133,"tag":1146,"props":2498,"children":2499},{},[2500],{"type":1138,"value":1813},{"type":1138,"value":1815},{"type":1133,"tag":1789,"props":2503,"children":2505},{"className":2504},[],[2506],{"type":1138,"value":1821},{"type":1138,"value":1823},{"type":1133,"tag":1789,"props":2509,"children":2511},{"className":2510},[],[2512],{"type":1138,"value":1829},{"type":1138,"value":2514},". This is a beta, so please try it on a test server first. Testing notes are in ",{"type":1133,"tag":1173,"props":2516,"children":2519},{"href":2517,"rel":2518},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md",[1177],[2520],{"type":1138,"value":1180},{"type":1138,"value":1838},{"type":1133,"tag":1173,"props":2523,"children":2526},{"href":2524,"rel":2525},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.4.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[2527],{"type":1138,"value":1845},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":2530,"children":2531},{"id":1186},[2532],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":2534,"children":2535},{},[2536,2546,2556,2566,2576,2586,2596,2606,2616,2626,2636,2646,2656,2666,2676,2686],{"type":1133,"tag":1195,"props":2537,"children":2538},{},[2539,2540,2545],{"type":1138,"value":1858},{"type":1133,"tag":1173,"props":2541,"children":2543},{"href":1861,"rel":2542},[1177],[2544],{"type":1138,"value":1865},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2547,"children":2548},{},[2549,2550,2555],{"type":1138,"value":1871},{"type":1133,"tag":1173,"props":2551,"children":2553},{"href":1874,"rel":2552},[1177],[2554],{"type":1138,"value":1878},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2557,"children":2558},{},[2559,2560,2565],{"type":1138,"value":1884},{"type":1133,"tag":1173,"props":2561,"children":2563},{"href":1887,"rel":2562},[1177],[2564],{"type":1138,"value":1891},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2567,"children":2568},{},[2569,2570,2575],{"type":1138,"value":1897},{"type":1133,"tag":1173,"props":2571,"children":2573},{"href":1900,"rel":2572},[1177],[2574],{"type":1138,"value":1904},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2577,"children":2578},{},[2579,2580,2585],{"type":1138,"value":1910},{"type":1133,"tag":1173,"props":2581,"children":2583},{"href":1913,"rel":2582},[1177],[2584],{"type":1138,"value":1917},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2587,"children":2588},{},[2589,2590,2595],{"type":1138,"value":1923},{"type":1133,"tag":1173,"props":2591,"children":2593},{"href":1926,"rel":2592},[1177],[2594],{"type":1138,"value":1930},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2597,"children":2598},{},[2599,2600,2605],{"type":1138,"value":1936},{"type":1133,"tag":1173,"props":2601,"children":2603},{"href":1939,"rel":2602},[1177],[2604],{"type":1138,"value":1943},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2607,"children":2608},{},[2609,2610,2615],{"type":1138,"value":1949},{"type":1133,"tag":1173,"props":2611,"children":2613},{"href":1952,"rel":2612},[1177],[2614],{"type":1138,"value":1956},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2617,"children":2618},{},[2619,2620,2625],{"type":1138,"value":1962},{"type":1133,"tag":1173,"props":2621,"children":2623},{"href":1965,"rel":2622},[1177],[2624],{"type":1138,"value":1969},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2627,"children":2628},{},[2629,2630,2635],{"type":1138,"value":1975},{"type":1133,"tag":1173,"props":2631,"children":2633},{"href":1978,"rel":2632},[1177],[2634],{"type":1138,"value":1982},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2637,"children":2638},{},[2639,2640,2645],{"type":1138,"value":1988},{"type":1133,"tag":1173,"props":2641,"children":2643},{"href":1991,"rel":2642},[1177],[2644],{"type":1138,"value":1995},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2647,"children":2648},{},[2649,2650,2655],{"type":1138,"value":2001},{"type":1133,"tag":1173,"props":2651,"children":2653},{"href":2004,"rel":2652},[1177],[2654],{"type":1138,"value":2008},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2657,"children":2658},{},[2659,2660,2665],{"type":1138,"value":2014},{"type":1133,"tag":1173,"props":2661,"children":2663},{"href":2017,"rel":2662},[1177],[2664],{"type":1138,"value":2021},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2667,"children":2668},{},[2669,2670,2675],{"type":1138,"value":2027},{"type":1133,"tag":1173,"props":2671,"children":2673},{"href":2030,"rel":2672},[1177],[2674],{"type":1138,"value":2034},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2677,"children":2678},{},[2679,2680,2685],{"type":1138,"value":2040},{"type":1133,"tag":1173,"props":2681,"children":2683},{"href":2043,"rel":2682},[1177],[2684],{"type":1138,"value":2047},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2687,"children":2688},{},[2689,2690,2695],{"type":1138,"value":2053},{"type":1133,"tag":1173,"props":2691,"children":2693},{"href":2056,"rel":2692},[1177],[2694],{"type":1138,"value":2060},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2697,"children":2698},{"id":1233},[2699],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":2701,"children":2702},{},[2703,2713],{"type":1133,"tag":1195,"props":2704,"children":2705},{},[2706,2707,2712],{"type":1138,"value":2086},{"type":1133,"tag":1173,"props":2708,"children":2710},{"href":2089,"rel":2709},[1177],[2711],{"type":1138,"value":2093},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2714,"children":2715},{},[2716,2717,2722,2723],{"type":1138,"value":2099},{"type":1133,"tag":1173,"props":2718,"children":2720},{"href":2102,"rel":2719},[1177],[2721],{"type":1138,"value":2106},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":2724,"children":2726},{"href":2111,"rel":2725},[1177],[2727],{"type":1138,"value":2115},{"type":1133,"tag":1184,"props":2729,"children":2730},{"id":7},[2731],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":2733,"children":2734},{},[2735,2745,2755,2765,2775,2785,2795,2805,2815],{"type":1133,"tag":1195,"props":2736,"children":2737},{},[2738,2739,2744],{"type":1138,"value":2153},{"type":1133,"tag":1173,"props":2740,"children":2742},{"href":2156,"rel":2741},[1177],[2743],{"type":1138,"value":2160},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2746,"children":2747},{},[2748,2749,2754],{"type":1138,"value":2166},{"type":1133,"tag":1173,"props":2750,"children":2752},{"href":2169,"rel":2751},[1177],[2753],{"type":1138,"value":2173},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2756,"children":2757},{},[2758,2759,2764],{"type":1138,"value":2179},{"type":1133,"tag":1173,"props":2760,"children":2762},{"href":2182,"rel":2761},[1177],[2763],{"type":1138,"value":2186},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2766,"children":2767},{},[2768,2769,2774],{"type":1138,"value":2192},{"type":1133,"tag":1173,"props":2770,"children":2772},{"href":2195,"rel":2771},[1177],[2773],{"type":1138,"value":2199},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2776,"children":2777},{},[2778,2779,2784],{"type":1138,"value":2205},{"type":1133,"tag":1173,"props":2780,"children":2782},{"href":2208,"rel":2781},[1177],[2783],{"type":1138,"value":2212},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2786,"children":2787},{},[2788,2789,2794],{"type":1138,"value":2218},{"type":1133,"tag":1173,"props":2790,"children":2792},{"href":2221,"rel":2791},[1177],[2793],{"type":1138,"value":2225},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2796,"children":2797},{},[2798,2799,2804],{"type":1138,"value":2231},{"type":1133,"tag":1173,"props":2800,"children":2802},{"href":2234,"rel":2801},[1177],[2803],{"type":1138,"value":2238},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2806,"children":2807},{},[2808,2809,2814],{"type":1138,"value":2244},{"type":1133,"tag":1173,"props":2810,"children":2812},{"href":2247,"rel":2811},[1177],[2813],{"type":1138,"value":2251},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2816,"children":2817},{},[2818,2819,2824],{"type":1138,"value":2257},{"type":1133,"tag":1173,"props":2820,"children":2822},{"href":2260,"rel":2821},[1177],[2823],{"type":1138,"value":2264},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2826,"children":2827},{"id":1664},[2828],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":2830,"children":2831},{},[2832,2842,2852,2862],{"type":1133,"tag":1195,"props":2833,"children":2834},{},[2835,2836,2841],{"type":1138,"value":2277},{"type":1133,"tag":1173,"props":2837,"children":2839},{"href":2280,"rel":2838},[1177],[2840],{"type":1138,"value":2284},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2843,"children":2844},{},[2845,2846,2851],{"type":1138,"value":2290},{"type":1133,"tag":1173,"props":2847,"children":2849},{"href":2293,"rel":2848},[1177],[2850],{"type":1138,"value":2297},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2853,"children":2854},{},[2855,2856,2861],{"type":1138,"value":2303},{"type":1133,"tag":1173,"props":2857,"children":2859},{"href":2306,"rel":2858},[1177],[2860],{"type":1138,"value":2310},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2863,"children":2864},{},[2865,2866,2871],{"type":1138,"value":2316},{"type":1133,"tag":1173,"props":2867,"children":2869},{"href":2319,"rel":2868},[1177],[2870],{"type":1138,"value":2323},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2873,"children":2874},{"id":2327},[2875],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":2877,"children":2878},{},[2879],{"type":1133,"tag":1195,"props":2880,"children":2881},{},[2882,2883,2888],{"type":1138,"value":2338},{"type":1133,"tag":1173,"props":2884,"children":2886},{"href":2341,"rel":2885},[1177],[2887],{"type":1138,"value":2345},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":2890,"children":2891},{},[2892,2896,2897],{"type":1133,"tag":1146,"props":2893,"children":2894},{},[2895],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":2898,"children":2901},{"href":2899,"rel":2900},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.1...v1.4.0-beta.1",[1177],[2902],{"type":1138,"value":2899},{"data":2904,"body":2905},{},{"type":1130,"children":2906},[2907,2924,2937,2941,2972,2976,3267,3271,3314,3318,3351],{"type":1133,"tag":1134,"props":2908,"children":2909},{},[2910,2915,2917,2922],{"type":1133,"tag":1146,"props":2911,"children":2912},{},[2913],{"type":1138,"value":2914},"The native build of 1.4.1.",{"type":1138,"value":2916}," It's the same code as 1.4.1, published so panels on the ",{"type":1133,"tag":1146,"props":2918,"children":2919},{},[2920],{"type":1138,"value":2921},"Native",{"type":1138,"value":2923}," 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.",{"type":1133,"tag":1134,"props":2925,"children":2926},{},[2927,2929,2935],{"type":1138,"value":2928},"Testing: follow ",{"type":1133,"tag":1173,"props":2930,"children":2933},{"href":2931,"rel":2932},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.1-native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[2934],{"type":1138,"value":1845},{"type":1138,"value":2936}," on a spare VPS.",{"type":1133,"tag":1184,"props":2938,"children":2939},{"id":1186},[2940],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":2942,"children":2943},{},[2944,2958],{"type":1133,"tag":1195,"props":2945,"children":2946},{},[2947,2951,2952,2957],{"type":1133,"tag":1146,"props":2948,"children":2949},{},[2950],{"type":1138,"value":1202},{"type":1138,"value":1204},{"type":1133,"tag":1173,"props":2953,"children":2955},{"href":1207,"rel":2954},[1177],[2956],{"type":1138,"value":1211},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2959,"children":2960},{},[2961,2965,2966,2971],{"type":1133,"tag":1146,"props":2962,"children":2963},{},[2964],{"type":1138,"value":1221},{"type":1138,"value":1204},{"type":1133,"tag":1173,"props":2967,"children":2969},{"href":1225,"rel":2968},[1177],[2970],{"type":1138,"value":1229},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":2973,"children":2974},{"id":1233},[2975],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":2977,"children":2978},{},[2979,2989,3003,3017,3031,3045,3059,3073,3087,3097,3107,3117,3127,3137,3147,3157,3167,3177,3187,3197,3207,3217,3227,3237,3247,3257],{"type":1133,"tag":1195,"props":2980,"children":2981},{},[2982,2983,2988],{"type":1138,"value":1244},{"type":1133,"tag":1173,"props":2984,"children":2986},{"href":1247,"rel":2985},[1177],[2987],{"type":1138,"value":1251},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":2990,"children":2991},{},[2992,2996,2997,3002],{"type":1133,"tag":1146,"props":2993,"children":2994},{},[2995],{"type":1138,"value":1202},{"type":1138,"value":1261},{"type":1133,"tag":1173,"props":2998,"children":3000},{"href":1264,"rel":2999},[1177],[3001],{"type":1138,"value":1268},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3004,"children":3005},{},[3006,3010,3011,3016],{"type":1133,"tag":1146,"props":3007,"children":3008},{},[3009],{"type":1138,"value":1202},{"type":1138,"value":1278},{"type":1133,"tag":1173,"props":3012,"children":3014},{"href":1281,"rel":3013},[1177],[3015],{"type":1138,"value":1285},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3018,"children":3019},{},[3020,3024,3025,3030],{"type":1133,"tag":1146,"props":3021,"children":3022},{},[3023],{"type":1138,"value":1202},{"type":1138,"value":1295},{"type":1133,"tag":1173,"props":3026,"children":3028},{"href":1298,"rel":3027},[1177],[3029],{"type":1138,"value":1302},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3032,"children":3033},{},[3034,3038,3039,3044],{"type":1133,"tag":1146,"props":3035,"children":3036},{},[3037],{"type":1138,"value":1221},{"type":1138,"value":1312},{"type":1133,"tag":1173,"props":3040,"children":3042},{"href":1315,"rel":3041},[1177],[3043],{"type":1138,"value":1319},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3046,"children":3047},{},[3048,3052,3053,3058],{"type":1133,"tag":1146,"props":3049,"children":3050},{},[3051],{"type":1138,"value":1221},{"type":1138,"value":1261},{"type":1133,"tag":1173,"props":3054,"children":3056},{"href":1331,"rel":3055},[1177],[3057],{"type":1138,"value":1335},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3060,"children":3061},{},[3062,3066,3067,3072],{"type":1133,"tag":1146,"props":3063,"children":3064},{},[3065],{"type":1138,"value":1221},{"type":1138,"value":1278},{"type":1133,"tag":1173,"props":3068,"children":3070},{"href":1347,"rel":3069},[1177],[3071],{"type":1138,"value":1351},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3074,"children":3075},{},[3076,3080,3081,3086],{"type":1133,"tag":1146,"props":3077,"children":3078},{},[3079],{"type":1138,"value":1221},{"type":1138,"value":1295},{"type":1133,"tag":1173,"props":3082,"children":3084},{"href":1363,"rel":3083},[1177],[3085],{"type":1138,"value":1367},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3088,"children":3089},{},[3090,3091,3096],{"type":1138,"value":1373},{"type":1133,"tag":1173,"props":3092,"children":3094},{"href":1376,"rel":3093},[1177],[3095],{"type":1138,"value":1380},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3098,"children":3099},{},[3100,3101,3106],{"type":1138,"value":1386},{"type":1133,"tag":1173,"props":3102,"children":3104},{"href":1389,"rel":3103},[1177],[3105],{"type":1138,"value":1393},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3108,"children":3109},{},[3110,3111,3116],{"type":1138,"value":1399},{"type":1133,"tag":1173,"props":3112,"children":3114},{"href":1402,"rel":3113},[1177],[3115],{"type":1138,"value":1406},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3118,"children":3119},{},[3120,3121,3126],{"type":1138,"value":1412},{"type":1133,"tag":1173,"props":3122,"children":3124},{"href":1415,"rel":3123},[1177],[3125],{"type":1138,"value":1419},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3128,"children":3129},{},[3130,3131,3136],{"type":1138,"value":1425},{"type":1133,"tag":1173,"props":3132,"children":3134},{"href":1428,"rel":3133},[1177],[3135],{"type":1138,"value":1432},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3138,"children":3139},{},[3140,3141,3146],{"type":1138,"value":1438},{"type":1133,"tag":1173,"props":3142,"children":3144},{"href":1441,"rel":3143},[1177],[3145],{"type":1138,"value":1445},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3148,"children":3149},{},[3150,3151,3156],{"type":1138,"value":1451},{"type":1133,"tag":1173,"props":3152,"children":3154},{"href":1454,"rel":3153},[1177],[3155],{"type":1138,"value":1458},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3158,"children":3159},{},[3160,3161,3166],{"type":1138,"value":1464},{"type":1133,"tag":1173,"props":3162,"children":3164},{"href":1467,"rel":3163},[1177],[3165],{"type":1138,"value":1471},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3168,"children":3169},{},[3170,3171,3176],{"type":1138,"value":1477},{"type":1133,"tag":1173,"props":3172,"children":3174},{"href":1480,"rel":3173},[1177],[3175],{"type":1138,"value":1484},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3178,"children":3179},{},[3180,3181,3186],{"type":1138,"value":1490},{"type":1133,"tag":1173,"props":3182,"children":3184},{"href":1493,"rel":3183},[1177],[3185],{"type":1138,"value":1497},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3188,"children":3189},{},[3190,3191,3196],{"type":1138,"value":1503},{"type":1133,"tag":1173,"props":3192,"children":3194},{"href":1506,"rel":3193},[1177],[3195],{"type":1138,"value":1510},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3198,"children":3199},{},[3200,3201,3206],{"type":1138,"value":1516},{"type":1133,"tag":1173,"props":3202,"children":3204},{"href":1519,"rel":3203},[1177],[3205],{"type":1138,"value":1523},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3208,"children":3209},{},[3210,3211,3216],{"type":1138,"value":1529},{"type":1133,"tag":1173,"props":3212,"children":3214},{"href":1532,"rel":3213},[1177],[3215],{"type":1138,"value":1536},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3218,"children":3219},{},[3220,3221,3226],{"type":1138,"value":1542},{"type":1133,"tag":1173,"props":3222,"children":3224},{"href":1545,"rel":3223},[1177],[3225],{"type":1138,"value":1549},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3228,"children":3229},{},[3230,3231,3236],{"type":1138,"value":1555},{"type":1133,"tag":1173,"props":3232,"children":3234},{"href":1558,"rel":3233},[1177],[3235],{"type":1138,"value":1562},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3238,"children":3239},{},[3240,3241,3246],{"type":1138,"value":1568},{"type":1133,"tag":1173,"props":3242,"children":3244},{"href":1571,"rel":3243},[1177],[3245],{"type":1138,"value":1575},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3248,"children":3249},{},[3250,3251,3256],{"type":1138,"value":1581},{"type":1133,"tag":1173,"props":3252,"children":3254},{"href":1584,"rel":3253},[1177],[3255],{"type":1138,"value":1588},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3258,"children":3259},{},[3260,3261,3266],{"type":1138,"value":1594},{"type":1133,"tag":1173,"props":3262,"children":3264},{"href":1597,"rel":3263},[1177],[3265],{"type":1138,"value":1601},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":3268,"children":3269},{"id":7},[3270],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":3272,"children":3273},{},[3274,3284,3294,3304],{"type":1133,"tag":1195,"props":3275,"children":3276},{},[3277,3278,3283],{"type":1138,"value":1614},{"type":1133,"tag":1173,"props":3279,"children":3281},{"href":1617,"rel":3280},[1177],[3282],{"type":1138,"value":1621},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3285,"children":3286},{},[3287,3288,3293],{"type":1138,"value":1627},{"type":1133,"tag":1173,"props":3289,"children":3291},{"href":1630,"rel":3290},[1177],[3292],{"type":1138,"value":1634},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3295,"children":3296},{},[3297,3298,3303],{"type":1138,"value":1640},{"type":1133,"tag":1173,"props":3299,"children":3301},{"href":1643,"rel":3300},[1177],[3302],{"type":1138,"value":1647},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3305,"children":3306},{},[3307,3308,3313],{"type":1138,"value":1653},{"type":1133,"tag":1173,"props":3309,"children":3311},{"href":1656,"rel":3310},[1177],[3312],{"type":1138,"value":1660},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":3315,"children":3316},{"id":1664},[3317],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":3319,"children":3320},{},[3321,3331,3341],{"type":1133,"tag":1195,"props":3322,"children":3323},{},[3324,3325,3330],{"type":1138,"value":1675},{"type":1133,"tag":1173,"props":3326,"children":3328},{"href":1678,"rel":3327},[1177],[3329],{"type":1138,"value":1682},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3332,"children":3333},{},[3334,3335,3340],{"type":1138,"value":1688},{"type":1133,"tag":1173,"props":3336,"children":3338},{"href":1691,"rel":3337},[1177],[3339],{"type":1138,"value":1695},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3342,"children":3343},{},[3344,3345,3350],{"type":1138,"value":1701},{"type":1133,"tag":1173,"props":3346,"children":3348},{"href":1704,"rel":3347},[1177],[3349],{"type":1138,"value":1708},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":3352,"children":3353},{},[3354,3358,3359],{"type":1133,"tag":1146,"props":3355,"children":3356},{},[3357],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":3360,"children":3363},{"href":3361,"rel":3362},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.4.0-native.1...native-1.4.1-native.1",[1177],[3364],{"type":1138,"value":3361},{"data":3366,"body":3367},{},{"type":1130,"children":3368},[3369,3385,3396,3400,3413],{"type":1133,"tag":1134,"props":3370,"children":3371},{},[3372,3377,3379,3383],{"type":1133,"tag":1146,"props":3373,"children":3374},{},[3375],{"type":1138,"value":3376},"The native build of 1.4.0.",{"type":1138,"value":3378}," It's the same code as 1.4.0, published so panels on the ",{"type":1133,"tag":1146,"props":3380,"children":3381},{},[3382],{"type":1138,"value":2921},{"type":1138,"value":3384}," 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.",{"type":1133,"tag":1134,"props":3386,"children":3387},{},[3388,3389,3395],{"type":1138,"value":2928},{"type":1133,"tag":1173,"props":3390,"children":3393},{"href":3391,"rel":3392},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.0-native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[3394],{"type":1138,"value":1845},{"type":1138,"value":2936},{"type":1133,"tag":1184,"props":3397,"children":3398},{"id":7},[3399],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":3401,"children":3402},{},[3403],{"type":1133,"tag":1195,"props":3404,"children":3405},{},[3406,3407,3412],{"type":1138,"value":2127},{"type":1133,"tag":1173,"props":3408,"children":3410},{"href":2130,"rel":3409},[1177],[3411],{"type":1138,"value":2134},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":3414,"children":3415},{},[3416,3420,3421],{"type":1133,"tag":1146,"props":3417,"children":3418},{},[3419],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":3422,"children":3425},{"href":3423,"rel":3424},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.4.0-beta.2.native.1...native-1.4.0-native.1",[1177],[3426],{"type":1138,"value":3423},{"data":3428,"body":3429},{},{"type":1130,"children":3430},[3431,3447,3458,3462,3475,3479,3492],{"type":1133,"tag":1134,"props":3432,"children":3433},{},[3434,3439,3441,3445],{"type":1133,"tag":1146,"props":3435,"children":3436},{},[3437],{"type":1138,"value":3438},"The native build of 1.4.0-beta.2.",{"type":1138,"value":3440}," It's the same code as 1.4.0-beta.2, published so panels on the ",{"type":1133,"tag":1146,"props":3442,"children":3443},{},[3444],{"type":1138,"value":2921},{"type":1138,"value":3446}," 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.",{"type":1133,"tag":1134,"props":3448,"children":3449},{},[3450,3451,3457],{"type":1138,"value":2928},{"type":1133,"tag":1173,"props":3452,"children":3455},{"href":3453,"rel":3454},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.0-beta.2.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[3456],{"type":1138,"value":1845},{"type":1138,"value":2936},{"type":1133,"tag":1184,"props":3459,"children":3460},{"id":1233},[3461],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":3463,"children":3464},{},[3465],{"type":1133,"tag":1195,"props":3466,"children":3467},{},[3468,3469,3474],{"type":1138,"value":2073},{"type":1133,"tag":1173,"props":3470,"children":3472},{"href":2076,"rel":3471},[1177],[3473],{"type":1138,"value":2080},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":3476,"children":3477},{"id":7},[3478],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":3480,"children":3481},{},[3482],{"type":1133,"tag":1195,"props":3483,"children":3484},{},[3485,3486,3491],{"type":1138,"value":2140},{"type":1133,"tag":1173,"props":3487,"children":3489},{"href":2143,"rel":3488},[1177],[3490],{"type":1138,"value":2147},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":3493,"children":3494},{},[3495,3499,3500],{"type":1133,"tag":1146,"props":3496,"children":3497},{},[3498],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":3501,"children":3504},{"href":3502,"rel":3503},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.4.0-beta.1.native.1...native-1.4.0-beta.2.native.1",[1177],[3505],{"type":1138,"value":3502},{"data":3507,"body":3508},{},{"type":1130,"children":3509},[3510,3526,3537,3541,3704,3708,3736,3740,3833,3837,3880,3884,3897],{"type":1133,"tag":1134,"props":3511,"children":3512},{},[3513,3518,3520,3524],{"type":1133,"tag":1146,"props":3514,"children":3515},{},[3516],{"type":1138,"value":3517},"The native build of 1.4.0-beta.1.",{"type":1138,"value":3519}," It's the same code as 1.4.0-beta.1, published so panels on the ",{"type":1133,"tag":1146,"props":3521,"children":3522},{},[3523],{"type":1138,"value":2921},{"type":1138,"value":3525}," 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.",{"type":1133,"tag":1134,"props":3527,"children":3528},{},[3529,3530,3536],{"type":1138,"value":2928},{"type":1133,"tag":1173,"props":3531,"children":3534},{"href":3532,"rel":3533},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.4.0-beta.1.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[3535],{"type":1138,"value":1845},{"type":1138,"value":2936},{"type":1133,"tag":1184,"props":3538,"children":3539},{"id":1186},[3540],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":3542,"children":3543},{},[3544,3554,3564,3574,3584,3594,3604,3614,3624,3634,3644,3654,3664,3674,3684,3694],{"type":1133,"tag":1195,"props":3545,"children":3546},{},[3547,3548,3553],{"type":1138,"value":1858},{"type":1133,"tag":1173,"props":3549,"children":3551},{"href":1861,"rel":3550},[1177],[3552],{"type":1138,"value":1865},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3555,"children":3556},{},[3557,3558,3563],{"type":1138,"value":1871},{"type":1133,"tag":1173,"props":3559,"children":3561},{"href":1874,"rel":3560},[1177],[3562],{"type":1138,"value":1878},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3565,"children":3566},{},[3567,3568,3573],{"type":1138,"value":1884},{"type":1133,"tag":1173,"props":3569,"children":3571},{"href":1887,"rel":3570},[1177],[3572],{"type":1138,"value":1891},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3575,"children":3576},{},[3577,3578,3583],{"type":1138,"value":1897},{"type":1133,"tag":1173,"props":3579,"children":3581},{"href":1900,"rel":3580},[1177],[3582],{"type":1138,"value":1904},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3585,"children":3586},{},[3587,3588,3593],{"type":1138,"value":1910},{"type":1133,"tag":1173,"props":3589,"children":3591},{"href":1913,"rel":3590},[1177],[3592],{"type":1138,"value":1917},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3595,"children":3596},{},[3597,3598,3603],{"type":1138,"value":1923},{"type":1133,"tag":1173,"props":3599,"children":3601},{"href":1926,"rel":3600},[1177],[3602],{"type":1138,"value":1930},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3605,"children":3606},{},[3607,3608,3613],{"type":1138,"value":1936},{"type":1133,"tag":1173,"props":3609,"children":3611},{"href":1939,"rel":3610},[1177],[3612],{"type":1138,"value":1943},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3615,"children":3616},{},[3617,3618,3623],{"type":1138,"value":1949},{"type":1133,"tag":1173,"props":3619,"children":3621},{"href":1952,"rel":3620},[1177],[3622],{"type":1138,"value":1956},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3625,"children":3626},{},[3627,3628,3633],{"type":1138,"value":1962},{"type":1133,"tag":1173,"props":3629,"children":3631},{"href":1965,"rel":3630},[1177],[3632],{"type":1138,"value":1969},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3635,"children":3636},{},[3637,3638,3643],{"type":1138,"value":1975},{"type":1133,"tag":1173,"props":3639,"children":3641},{"href":1978,"rel":3640},[1177],[3642],{"type":1138,"value":1982},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3645,"children":3646},{},[3647,3648,3653],{"type":1138,"value":1988},{"type":1133,"tag":1173,"props":3649,"children":3651},{"href":1991,"rel":3650},[1177],[3652],{"type":1138,"value":1995},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3655,"children":3656},{},[3657,3658,3663],{"type":1138,"value":2001},{"type":1133,"tag":1173,"props":3659,"children":3661},{"href":2004,"rel":3660},[1177],[3662],{"type":1138,"value":2008},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3665,"children":3666},{},[3667,3668,3673],{"type":1138,"value":2014},{"type":1133,"tag":1173,"props":3669,"children":3671},{"href":2017,"rel":3670},[1177],[3672],{"type":1138,"value":2021},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3675,"children":3676},{},[3677,3678,3683],{"type":1138,"value":2027},{"type":1133,"tag":1173,"props":3679,"children":3681},{"href":2030,"rel":3680},[1177],[3682],{"type":1138,"value":2034},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3685,"children":3686},{},[3687,3688,3693],{"type":1138,"value":2040},{"type":1133,"tag":1173,"props":3689,"children":3691},{"href":2043,"rel":3690},[1177],[3692],{"type":1138,"value":2047},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3695,"children":3696},{},[3697,3698,3703],{"type":1138,"value":2053},{"type":1133,"tag":1173,"props":3699,"children":3701},{"href":2056,"rel":3700},[1177],[3702],{"type":1138,"value":2060},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":3705,"children":3706},{"id":1233},[3707],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":3709,"children":3710},{},[3711,3721],{"type":1133,"tag":1195,"props":3712,"children":3713},{},[3714,3715,3720],{"type":1138,"value":2086},{"type":1133,"tag":1173,"props":3716,"children":3718},{"href":2089,"rel":3717},[1177],[3719],{"type":1138,"value":2093},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3722,"children":3723},{},[3724,3725,3730,3731],{"type":1138,"value":2099},{"type":1133,"tag":1173,"props":3726,"children":3728},{"href":2102,"rel":3727},[1177],[3729],{"type":1138,"value":2106},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":3732,"children":3734},{"href":2111,"rel":3733},[1177],[3735],{"type":1138,"value":2115},{"type":1133,"tag":1184,"props":3737,"children":3738},{"id":7},[3739],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":3741,"children":3742},{},[3743,3753,3763,3773,3783,3793,3803,3813,3823],{"type":1133,"tag":1195,"props":3744,"children":3745},{},[3746,3747,3752],{"type":1138,"value":2153},{"type":1133,"tag":1173,"props":3748,"children":3750},{"href":2156,"rel":3749},[1177],[3751],{"type":1138,"value":2160},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3754,"children":3755},{},[3756,3757,3762],{"type":1138,"value":2166},{"type":1133,"tag":1173,"props":3758,"children":3760},{"href":2169,"rel":3759},[1177],[3761],{"type":1138,"value":2173},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3764,"children":3765},{},[3766,3767,3772],{"type":1138,"value":2179},{"type":1133,"tag":1173,"props":3768,"children":3770},{"href":2182,"rel":3769},[1177],[3771],{"type":1138,"value":2186},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3774,"children":3775},{},[3776,3777,3782],{"type":1138,"value":2192},{"type":1133,"tag":1173,"props":3778,"children":3780},{"href":2195,"rel":3779},[1177],[3781],{"type":1138,"value":2199},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3784,"children":3785},{},[3786,3787,3792],{"type":1138,"value":2205},{"type":1133,"tag":1173,"props":3788,"children":3790},{"href":2208,"rel":3789},[1177],[3791],{"type":1138,"value":2212},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3794,"children":3795},{},[3796,3797,3802],{"type":1138,"value":2218},{"type":1133,"tag":1173,"props":3798,"children":3800},{"href":2221,"rel":3799},[1177],[3801],{"type":1138,"value":2225},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3804,"children":3805},{},[3806,3807,3812],{"type":1138,"value":2231},{"type":1133,"tag":1173,"props":3808,"children":3810},{"href":2234,"rel":3809},[1177],[3811],{"type":1138,"value":2238},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3814,"children":3815},{},[3816,3817,3822],{"type":1138,"value":2244},{"type":1133,"tag":1173,"props":3818,"children":3820},{"href":2247,"rel":3819},[1177],[3821],{"type":1138,"value":2251},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3824,"children":3825},{},[3826,3827,3832],{"type":1138,"value":2257},{"type":1133,"tag":1173,"props":3828,"children":3830},{"href":2260,"rel":3829},[1177],[3831],{"type":1138,"value":2264},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":3834,"children":3835},{"id":1664},[3836],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":3838,"children":3839},{},[3840,3850,3860,3870],{"type":1133,"tag":1195,"props":3841,"children":3842},{},[3843,3844,3849],{"type":1138,"value":2277},{"type":1133,"tag":1173,"props":3845,"children":3847},{"href":2280,"rel":3846},[1177],[3848],{"type":1138,"value":2284},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3851,"children":3852},{},[3853,3854,3859],{"type":1138,"value":2290},{"type":1133,"tag":1173,"props":3855,"children":3857},{"href":2293,"rel":3856},[1177],[3858],{"type":1138,"value":2297},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3861,"children":3862},{},[3863,3864,3869],{"type":1138,"value":2303},{"type":1133,"tag":1173,"props":3865,"children":3867},{"href":2306,"rel":3866},[1177],[3868],{"type":1138,"value":2310},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3871,"children":3872},{},[3873,3874,3879],{"type":1138,"value":2316},{"type":1133,"tag":1173,"props":3875,"children":3877},{"href":2319,"rel":3876},[1177],[3878],{"type":1138,"value":2323},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":3881,"children":3882},{"id":2327},[3883],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":3885,"children":3886},{},[3887],{"type":1133,"tag":1195,"props":3888,"children":3889},{},[3890,3891,3896],{"type":1138,"value":2338},{"type":1133,"tag":1173,"props":3892,"children":3894},{"href":2341,"rel":3893},[1177],[3895],{"type":1138,"value":2345},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":3898,"children":3899},{},[3900,3904,3905],{"type":1133,"tag":1146,"props":3901,"children":3902},{},[3903],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":3906,"children":3909},{"href":3907,"rel":3908},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.1-native.1...native-1.4.0-beta.1.native.1",[1177],[3910],{"type":1138,"value":3907},{"data":3912,"body":3913},{},{"type":1130,"children":3914},[3915,3930,3941,3945,3974,3978,4007,4011,4027,4031,4047,4051,4067],{"type":1133,"tag":1134,"props":3916,"children":3917},{},[3918,3922,3923,3928],{"type":1133,"tag":1146,"props":3919,"children":3920},{},[3921],{"type":1138,"value":1746},{"type":1138,"value":1838},{"type":1133,"tag":1146,"props":3924,"children":3925},{},[3926],{"type":1138,"value":3927},"World",{"type":1138,"value":3929}," 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.",{"type":1133,"tag":1134,"props":3931,"children":3932},{},[3933,3935,3939],{"type":1138,"value":3934},"On phones, the MOTD editor in ",{"type":1133,"tag":1146,"props":3936,"children":3937},{},[3938],{"type":1138,"value":1746},{"type":1138,"value":3940}," now fits the screen. It used to run off the right-hand side, which made the whole page scroll sideways.",{"type":1133,"tag":1184,"props":3942,"children":3943},{"id":1186},[3944],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":3946,"children":3947},{},[3948,3961],{"type":1133,"tag":1195,"props":3949,"children":3950},{},[3951,3953,3960],{"type":1138,"value":3952},"Settings and World as one page of collapsible sections (",{"type":1133,"tag":1173,"props":3954,"children":3957},{"href":3955,"rel":3956},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F272e2f6735ea9b64f3a2bfe31f6c52bb96e04b4d",[1177],[3958],{"type":1138,"value":3959},"272e2f6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3962,"children":3963},{},[3964,3966,3973],{"type":1138,"value":3965},"collapsible sections component (",{"type":1133,"tag":1173,"props":3967,"children":3970},{"href":3968,"rel":3969},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa1f5f58f9265fe1fc51d7768ac808ab8dbd46121",[1177],[3971],{"type":1138,"value":3972},"a1f5f58",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":3975,"children":3976},{"id":1233},[3977],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":3979,"children":3980},{},[3981,3994],{"type":1133,"tag":1195,"props":3982,"children":3983},{},[3984,3986,3993],{"type":1138,"value":3985},"point notifications, tests and docs at the new sections (",{"type":1133,"tag":1173,"props":3987,"children":3990},{"href":3988,"rel":3989},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73ddb2edfd6c97a9c3418d9b22b26bbcfe855fe3",[1177],[3991],{"type":1138,"value":3992},"73ddb2e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":3995,"children":3996},{},[3997,3999,4006],{"type":1138,"value":3998},"keep the MOTD editor within the screen on phones (",{"type":1133,"tag":1173,"props":4000,"children":4003},{"href":4001,"rel":4002},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3781e2681a86743a8df3c01e2c76c9eb44e6683a",[1177],[4004],{"type":1138,"value":4005},"3781e26",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":4008,"children":4009},{"id":7},[4010],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":4012,"children":4013},{},[4014],{"type":1133,"tag":1195,"props":4015,"children":4016},{},[4017,4019,4026],{"type":1138,"value":4018},"release notes for 1.3.1 and its native build (",{"type":1133,"tag":1173,"props":4020,"children":4023},{"href":4021,"rel":4022},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F60c3dae1277ceeeb57ef8f9cdde6a668fe152eda",[1177],[4024],{"type":1138,"value":4025},"60c3dae",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":4028,"children":4029},{"id":1664},[4030],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":4032,"children":4033},{},[4034],{"type":1133,"tag":1195,"props":4035,"children":4036},{},[4037,4039,4046],{"type":1138,"value":4038},"G B jumps to the Backups section of World (",{"type":1133,"tag":1173,"props":4040,"children":4043},{"href":4041,"rel":4042},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc457fe85ecc74b7172a1ce86ca31493cfabf158a",[1177],[4044],{"type":1138,"value":4045},"c457fe8",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":4048,"children":4049},{"id":2327},[4050],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":4052,"children":4053},{},[4054],{"type":1133,"tag":1195,"props":4055,"children":4056},{},[4057,4059,4066],{"type":1138,"value":4058},"Merge main into feat\u002Fcollapsible-sections (",{"type":1133,"tag":1173,"props":4060,"children":4063},{"href":4061,"rel":4062},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcd76fe6298a6959a7b6e1b5aa30b469a6eba51c4",[1177],[4064],{"type":1138,"value":4065},"cd76fe6",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":4068,"children":4069},{},[4070,4074,4075],{"type":1133,"tag":1146,"props":4071,"children":4072},{},[4073],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":4076,"children":4079},{"href":4077,"rel":4078},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.0...v1.3.1",[1177],[4080],{"type":1138,"value":4077},{"data":4082,"body":4083},{},{"type":1130,"children":4084},[4085,4187,4241,4292,4296,6209,6213,6435,6439,6863,6867,7149,7153,7347],{"type":1133,"tag":1134,"props":4086,"children":4087},{},[4088,4090,4095,4097,4101,4103,4107,4109,4113,4115,4121,4123,4129,4130,4136,4137,4143,4145,4151,4152,4158,4159,4165,4166,4172,4174,4178,4180,4185],{"type":1138,"value":4089},"Flytower 1.3.0 brings your community in. Each server has ",{"type":1133,"tag":1146,"props":4091,"children":4092},{},[4093],{"type":1138,"value":4094},"player stats",{"type":1138,"value":4096},": leaderboards for playtime, deaths, mob kills, distance and blocks mined, and a card for every player, on the ",{"type":1133,"tag":1146,"props":4098,"children":4099},{},[4100],{"type":1138,"value":809},{"type":1138,"value":4102}," tab and, if you like, on the public status page. Connect a ",{"type":1133,"tag":1146,"props":4104,"children":4105},{},[4106],{"type":1138,"value":48},{"type":1138,"value":4108}," on ",{"type":1133,"tag":1146,"props":4110,"children":4111},{},[4112],{"type":1138,"value":1778},{"type":1138,"value":4114}," and your Discord server gets ",{"type":1133,"tag":1789,"props":4116,"children":4118},{"className":4117},[],[4119],{"type":1138,"value":4120},"\u002Fstatus",{"type":1138,"value":4122},", ",{"type":1133,"tag":1789,"props":4124,"children":4126},{"className":4125},[],[4127],{"type":1138,"value":4128},"\u002Fplayers",{"type":1138,"value":4122},{"type":1133,"tag":1789,"props":4131,"children":4133},{"className":4132},[],[4134],{"type":1138,"value":4135},"\u002Fleaderboard",{"type":1138,"value":1838},{"type":1133,"tag":1789,"props":4138,"children":4140},{"className":4139},[],[4141],{"type":1138,"value":4142},"\u002Fstats",{"type":1138,"value":4144},". Give a Discord role a Flytower role and its members can use ",{"type":1133,"tag":1789,"props":4146,"children":4148},{"className":4147},[],[4149],{"type":1138,"value":4150},"\u002Fwhitelist",{"type":1138,"value":4122},{"type":1133,"tag":1789,"props":4153,"children":4155},{"className":4154},[],[4156],{"type":1138,"value":4157},"\u002Frestart",{"type":1138,"value":4122},{"type":1133,"tag":1789,"props":4160,"children":4162},{"className":4161},[],[4163],{"type":1138,"value":4164},"\u002Fbackup",{"type":1138,"value":1838},{"type":1133,"tag":1789,"props":4167,"children":4169},{"className":4168},[],[4170],{"type":1138,"value":4171},"\u002Fsay",{"type":1138,"value":4173},". ",{"type":1133,"tag":1146,"props":4175,"children":4176},{},[4177],{"type":1138,"value":1785},{"type":1138,"value":4179}," posts game chat, joins and leaves, deaths and advancements to a channel. Each server can also have a ",{"type":1133,"tag":1146,"props":4181,"children":4182},{},[4183],{"type":1138,"value":4184},"web map",{"type":1138,"value":4186},", 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.",{"type":1133,"tag":1134,"props":4188,"children":4189},{},[4190,4192,4197,4199,4204,4206,4211,4213,4218,4220,4225,4227,4232,4234,4239],{"type":1138,"value":4191},"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 ",{"type":1133,"tag":1146,"props":4193,"children":4194},{},[4195],{"type":1138,"value":4196},"right-click menus",{"type":1138,"value":4198}," on cards and lists, ",{"type":1133,"tag":1146,"props":4200,"children":4201},{},[4202],{"type":1138,"value":4203},"Ctrl+K",{"type":1138,"value":4205}," to jump to any server, tab or action, ",{"type":1133,"tag":1146,"props":4207,"children":4208},{},[4209],{"type":1138,"value":4210},"keyboard shortcuts",{"type":1138,"value":4212}," (press ",{"type":1133,"tag":1146,"props":4214,"children":4215},{},[4216],{"type":1138,"value":4217},"?",{"type":1138,"value":4219}," to see them), ",{"type":1133,"tag":1146,"props":4221,"children":4222},{},[4223],{"type":1138,"value":4224},"console autocomplete",{"type":1138,"value":4226},", and ",{"type":1133,"tag":1146,"props":4228,"children":4229},{},[4230],{"type":1138,"value":4231},"Help",{"type":1138,"value":4233}," built into the panel. ",{"type":1133,"tag":1146,"props":4235,"children":4236},{},[4237],{"type":1138,"value":4238},"System, Disk",{"type":1138,"value":4240}," 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.",{"type":1133,"tag":1134,"props":4242,"children":4243},{},[4244,4246,4252,4254,4260,4262,4267,4269,4275,4277,4284,4285,4291],{"type":1138,"value":4245},"Flytower now ships parts written in Rust: ",{"type":1133,"tag":1789,"props":4247,"children":4249},{"className":4248},[],[4250],{"type":1138,"value":4251},"flytower-du",{"type":1138,"value":4253}," for disk use, ",{"type":1133,"tag":1789,"props":4255,"children":4257},{"className":4256},[],[4258],{"type":1138,"value":4259},"flytower-map",{"type":1138,"value":4261}," for the web map, and a Rust version of the system helper and updater. That last one stays ",{"type":1133,"tag":1146,"props":4263,"children":4264},{},[4265],{"type":1138,"value":4266},"off",{"type":1138,"value":4268}," unless you switch it on (see ",{"type":1133,"tag":1173,"props":4270,"children":4273},{"href":4271,"rel":4272},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[4274],{"type":1138,"value":1845},{"type":1138,"value":4276},") until 1.4.0. Testing notes are in ",{"type":1133,"tag":1173,"props":4278,"children":4281},{"href":4279,"rel":4280},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md",[1177],[4282],{"type":1138,"value":4283},"testing-1.3.0.md",{"type":1138,"value":1838},{"type":1133,"tag":1173,"props":4286,"children":4289},{"href":4287,"rel":4288},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md",[1177],[4290],{"type":1138,"value":1180},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":4293,"children":4294},{"id":1186},[4295],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":4297,"children":4298},{},[4299,4312,4325,4338,4351,4370,4383,4396,4409,4422,4435,4448,4461,4474,4487,4500,4513,4526,4539,4552,4565,4578,4591,4609,4622,4635,4648,4661,4674,4687,4700,4713,4730,4743,4760,4773,4786,4799,4812,4825,4842,4855,4868,4881,4894,4907,4924,4942,4955,4968,4981,4994,5007,5020,5039,5052,5065,5078,5091,5104,5117,5130,5143,5156,5169,5182,5195,5208,5221,5234,5247,5260,5273,5286,5299,5312,5325,5338,5351,5364,5377,5390,5403,5416,5429,5442,5455,5468,5481,5494,5507,5520,5533,5546,5559,5572,5585,5598,5611,5624,5637,5650,5663,5676,5689,5706,5723,5740,5758,5771,5784,5797,5810,5823,5836,5849,5862,5875,5888,5901,5914,5927,5940,5953,5966,5979,6004,6027,6049,6071,6096,6119,6143,6165,6187],{"type":1133,"tag":1195,"props":4300,"children":4301},{},[4302,4304,4311],{"type":1138,"value":4303},"let each browser turn single-key shortcuts off (",{"type":1133,"tag":1173,"props":4305,"children":4308},{"href":4306,"rel":4307},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffd0c73cfd9db220b8601771980f99270fa789dfe",[1177],[4309],{"type":1138,"value":4310},"fd0c73c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4313,"children":4314},{},[4315,4317,4324],{"type":1138,"value":4316},"show shortcuts in the command palette (",{"type":1133,"tag":1173,"props":4318,"children":4321},{"href":4319,"rel":4320},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78fce4abc2d72e3f12658819fee42240fc0fc997",[1177],[4322],{"type":1138,"value":4323},"78fce4a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4326,"children":4327},{},[4328,4330,4337],{"type":1138,"value":4329},"save Settings and review YAML with Ctrl+S (",{"type":1133,"tag":1173,"props":4331,"children":4334},{"href":4332,"rel":4333},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6860d53a1156f1a1f14fb4bfd88dd77330d26013",[1177],[4335],{"type":1138,"value":4336},"6860d53",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4339,"children":4340},{},[4341,4343,4350],{"type":1138,"value":4342},"move through cards and rows with J\u002FK, Enter, . and Shift+Delete (",{"type":1133,"tag":1173,"props":4344,"children":4347},{"href":4345,"rel":4346},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ce3fd95b6f4760df63f9516524589f28381d2fe",[1177],[4348],{"type":1138,"value":4349},"8ce3fd9",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4352,"children":4353},{},[4354,4356,4360,4362,4369],{"type":1138,"value":4355},"add G-jumps, L for logs, ",{"type":1133,"tag":4357,"props":4358,"children":4359},"span",{},[],{"type":1138,"value":4361}," between servers, \u002F and the ? sheet (",{"type":1133,"tag":1173,"props":4363,"children":4366},{"href":4364,"rel":4365},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdddb3482a82743da362cbe32224b8f24a43d5df6",[1177],[4367],{"type":1138,"value":4368},"dddb348",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4371,"children":4372},{},[4373,4375,4382],{"type":1138,"value":4374},"add one shortcut list for jumps, the sheet and hints (",{"type":1133,"tag":1173,"props":4376,"children":4379},{"href":4377,"rel":4378},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F61abb325a2258f6340647237f95f9b6371b99577",[1177],[4380],{"type":1138,"value":4381},"61abb32",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4384,"children":4385},{},[4386,4388,4395],{"type":1138,"value":4387},"post deaths and advancements to Discord chat (",{"type":1133,"tag":1173,"props":4389,"children":4392},{"href":4390,"rel":4391},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fafd621399238150fc3e98686b17aeb77292adb96",[1177],[4393],{"type":1138,"value":4394},"afd6213",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4397,"children":4398},{},[4399,4401,4408],{"type":1138,"value":4400},"right-click menus on notification channels, with Pause and Resume (",{"type":1133,"tag":1173,"props":4402,"children":4405},{"href":4403,"rel":4404},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01f32a50250fb0c87e551ab7a10473f2833db00b",[1177],[4406],{"type":1138,"value":4407},"01f32a5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4410,"children":4411},{},[4412,4414,4421],{"type":1138,"value":4413},"right-click menus on crashes, with Copy report (",{"type":1133,"tag":1173,"props":4415,"children":4418},{"href":4416,"rel":4417},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e4da7bf968044e36eb644234f80bf36941d0fe8",[1177],[4419],{"type":1138,"value":4420},"0e4da7b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4423,"children":4424},{},[4425,4427,4434],{"type":1138,"value":4426},"right-click menus on world exports and past worlds (",{"type":1133,"tag":1173,"props":4428,"children":4431},{"href":4429,"rel":4430},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F581b7aaa82c6f516b2f71cbde2ce2c9583c2455d",[1177],[4432],{"type":1138,"value":4433},"581b7aa",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4436,"children":4437},{},[4438,4440,4447],{"type":1138,"value":4439},"right-click and ⋯ menus on Players rows (",{"type":1133,"tag":1173,"props":4441,"children":4444},{"href":4442,"rel":4443},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffcf7f7826ac8d693c5692290718c8535aba01a11",[1177],[4445],{"type":1138,"value":4446},"fcf7f78",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4449,"children":4450},{},[4451,4453,4460],{"type":1138,"value":4452},"player action list for right-click menus (",{"type":1133,"tag":1173,"props":4454,"children":4457},{"href":4455,"rel":4456},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5356f9cc759740f3b6c683dcccd366df8d0187b7",[1177],[4458],{"type":1138,"value":4459},"5356f9c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4462,"children":4463},{},[4464,4466,4473],{"type":1138,"value":4465},"map markers glide between player positions (",{"type":1133,"tag":1173,"props":4467,"children":4470},{"href":4468,"rel":4469},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae98c9e070e04fa6623dc9c3090c92019a696060",[1177],[4471],{"type":1138,"value":4472},"ae98c9e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4475,"children":4476},{},[4477,4479,4486],{"type":1138,"value":4478},"ask for player positions every second, and dimensions less often (",{"type":1133,"tag":1173,"props":4480,"children":4483},{"href":4481,"rel":4482},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9fed6c582f22dd8fa094471da1e5b520f03ad1d8",[1177],[4484],{"type":1138,"value":4485},"9fed6c5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4488,"children":4489},{},[4490,4492,4499],{"type":1138,"value":4491},"ship the Rust updater behind the same switch (",{"type":1133,"tag":1173,"props":4493,"children":4496},{"href":4494,"rel":4495},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7fcc88831a839dc75ba557f655b04d2b7607dfb0",[1177],[4497],{"type":1138,"value":4498},"7fcc888",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4501,"children":4502},{},[4503,4505,4512],{"type":1138,"value":4504},"port the updater to Rust (",{"type":1133,"tag":1173,"props":4506,"children":4509},{"href":4507,"rel":4508},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8dfcfc3890ebaaddf3c983eaf653632280098c6",[1177],[4510],{"type":1138,"value":4511},"e8dfcfc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4514,"children":4515},{},[4516,4518,4525],{"type":1138,"value":4517},"command palette on Ctrl + K with servers ahead of help (",{"type":1133,"tag":1173,"props":4519,"children":4522},{"href":4520,"rel":4521},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9048e82e671ed701e6cd9e9ac0af00c070141a36",[1177],[4523],{"type":1138,"value":4524},"9048e82",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4527,"children":4528},{},[4529,4531,4538],{"type":1138,"value":4530},"palette links with recent servers and pages (",{"type":1133,"tag":1173,"props":4532,"children":4535},{"href":4533,"rel":4534},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F11d04b6f086d3bc9203898124026438f7d5693bf",[1177],[4536],{"type":1138,"value":4537},"11d04b6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4540,"children":4541},{},[4542,4544,4551],{"type":1138,"value":4543},"palette entries for servers, their tabs and actions (",{"type":1133,"tag":1173,"props":4545,"children":4548},{"href":4546,"rel":4547},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F292317cec34f80112857839acdcb37bb98b73593",[1177],[4549],{"type":1138,"value":4550},"292317c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4553,"children":4554},{},[4555,4557,4564],{"type":1138,"value":4556},"show a progress bar while the web map is drawn (",{"type":1133,"tag":1173,"props":4558,"children":4561},{"href":4559,"rel":4560},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3bad87a634a128c2afb137a1e44187ce79143d32",[1177],[4562],{"type":1138,"value":4563},"3bad87a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4566,"children":4567},{},[4568,4570,4577],{"type":1138,"value":4569},"the map service passes on how far a draw has got (",{"type":1133,"tag":1173,"props":4571,"children":4574},{"href":4572,"rel":4573},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4dca7380906de90b7e510c09d8e5f511de85cb53",[1177],[4575],{"type":1138,"value":4576},"4dca738",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4579,"children":4580},{},[4581,4583,4590],{"type":1138,"value":4582},"flytower-map reports progress as it draws (",{"type":1133,"tag":1173,"props":4584,"children":4587},{"href":4585,"rel":4586},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbe673477a6664e0941c2d62cc2325aa100cdbced",[1177],[4588],{"type":1138,"value":4589},"be67347",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4592,"children":4593},{},[4594,4599,4601,4608],{"type":1133,"tag":1146,"props":4595,"children":4596},{},[4597],{"type":1138,"value":4598},"panel:",{"type":1138,"value":4600}," head the rest of the machine, and show the journal's size (",{"type":1133,"tag":1173,"props":4602,"children":4605},{"href":4603,"rel":4604},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb34bd3265294031c6b0858f37c9fa98203346abc",[1177],[4606],{"type":1138,"value":4607},"b34bd32",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4610,"children":4611},{},[4612,4614,4621],{"type":1138,"value":4613},"suggestions, ghost text and Tab cycling in the console (",{"type":1133,"tag":1173,"props":4615,"children":4618},{"href":4616,"rel":4617},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1155d74393e9eb286b3b23096d099b47372c168b",[1177],[4619],{"type":1138,"value":4620},"1155d74",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4623,"children":4624},{},[4625,4627,4634],{"type":1138,"value":4626},"complete console commands in the browser (",{"type":1133,"tag":1173,"props":4628,"children":4631},{"href":4629,"rel":4630},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F34257d564582526c89f3be8174ddd6d91b34c474",[1177],[4632],{"type":1138,"value":4633},"34257d5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4636,"children":4637},{},[4638,4640,4647],{"type":1138,"value":4639},"serve each server's command catalogue to the console (",{"type":1133,"tag":1173,"props":4641,"children":4644},{"href":4642,"rel":4643},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe1dc15221ea59e7677a948982dbde9a00d445d34",[1177],[4645],{"type":1138,"value":4646},"e1dc152",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4649,"children":4650},{},[4651,4653,4660],{"type":1138,"value":4652},"read the game's command tree and help for console completion (",{"type":1133,"tag":1173,"props":4654,"children":4657},{"href":4655,"rel":4656},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4db2c17a309470cdac2895efca2491914abddf6d",[1177],[4658],{"type":1138,"value":4659},"4db2c17",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4662,"children":4663},{},[4664,4666,4673],{"type":1138,"value":4665},"right-click and ⋯ menus on Content items (",{"type":1133,"tag":1173,"props":4667,"children":4670},{"href":4668,"rel":4669},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ed0a34c9b10a1ae5d5492eb122667de1ac7cb41",[1177],[4671],{"type":1138,"value":4672},"9ed0a34",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4675,"children":4676},{},[4677,4679,4686],{"type":1138,"value":4678},"right-click menus on Backups rows (",{"type":1133,"tag":1173,"props":4680,"children":4683},{"href":4681,"rel":4682},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00cde07b4e66f42aa71e9d4ec85c34704648f604",[1177],[4684],{"type":1138,"value":4685},"00cde07",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4688,"children":4689},{},[4690,4692,4699],{"type":1138,"value":4691},"right-click menus on Files rows, with Copy path (",{"type":1133,"tag":1173,"props":4693,"children":4696},{"href":4694,"rel":4695},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9d515716adc667c36bbdfd1d7521e6f17cd0682e",[1177],[4697],{"type":1138,"value":4698},"9d51571",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4701,"children":4702},{},[4703,4705,4712],{"type":1138,"value":4704},"download links work from the phone action sheet (",{"type":1133,"tag":1173,"props":4706,"children":4709},{"href":4707,"rel":4708},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb81fa22d897e87c489784dc11ab242702d7e02cb",[1177],[4710],{"type":1138,"value":4711},"b81fa22",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4714,"children":4715},{},[4716,4720,4722,4729],{"type":1133,"tag":1146,"props":4717,"children":4718},{},[4719],{"type":1138,"value":4598},{"type":1138,"value":4721}," show the rest of the machine in parts on System, with Clean up (",{"type":1133,"tag":1173,"props":4723,"children":4726},{"href":4724,"rel":4725},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc698284529266fc5c019bea68ec3f616c83862cc",[1177],[4727],{"type":1138,"value":4728},"c698284",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4731,"children":4732},{},[4733,4735,4742],{"type":1138,"value":4734},"ActionTarget renders the card or row itself, so it works inside tables (",{"type":1133,"tag":1173,"props":4736,"children":4739},{"href":4737,"rel":4738},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F52f8aebb3bd3c83a5ce09b54c5e1959cda427b90",[1177],[4740],{"type":1138,"value":4741},"52f8aeb",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4744,"children":4745},{},[4746,4750,4752,4759],{"type":1133,"tag":1146,"props":4747,"children":4748},{},[4749],{"type":1138,"value":4598},{"type":1138,"value":4751}," measure disk use through the agent, with clean up (",{"type":1133,"tag":1173,"props":4753,"children":4756},{"href":4754,"rel":4755},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81c3de829fef70efcb7c539d5162d6099868afe3",[1177],[4757],{"type":1138,"value":4758},"81c3de8",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4761,"children":4762},{},[4763,4765,4772],{"type":1138,"value":4764},"per-browser switch for right-click menus (",{"type":1133,"tag":1173,"props":4766,"children":4769},{"href":4767,"rel":4768},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe741c14589f2c4c53053fd91ed21db61092209b8",[1177],[4770],{"type":1138,"value":4771},"e741c14",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4774,"children":4775},{},[4776,4778,4785],{"type":1138,"value":4777},"right-click and ⋯ menus on server cards (",{"type":1133,"tag":1173,"props":4779,"children":4782},{"href":4780,"rel":4781},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb626ee49b7dc585e157201850f3e60abafed27ae",[1177],[4783],{"type":1138,"value":4784},"b626ee4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4787,"children":4788},{},[4789,4791,4798],{"type":1138,"value":4790},"open clone, delete and back-up confirms from a link (",{"type":1133,"tag":1173,"props":4792,"children":4795},{"href":4793,"rel":4794},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd064f9b47c9f4f8e21a58aa1b8c4d5f26e31697d",[1177],[4796],{"type":1138,"value":4797},"d064f9b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4800,"children":4801},{},[4802,4804,4811],{"type":1138,"value":4803},"ActionTarget wrapper with keyboard, long-press sheet and browser-menu pass-through (",{"type":1133,"tag":1173,"props":4805,"children":4808},{"href":4806,"rel":4807},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe56e51907b3099ecc83c23817d1acd3801343402",[1177],[4809],{"type":1138,"value":4810},"e56e519",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4813,"children":4814},{},[4815,4817,4824],{"type":1138,"value":4816},"rules for right-click menus and the server action list (",{"type":1133,"tag":1173,"props":4818,"children":4821},{"href":4819,"rel":4820},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fca161c740e81960b56f65728fa746f3ccaa63e95",[1177],[4822],{"type":1138,"value":4823},"ca161c7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4826,"children":4827},{},[4828,4832,4834,4841],{"type":1133,"tag":1146,"props":4829,"children":4830},{},[4831],{"type":1138,"value":1221},{"type":1138,"value":4833}," disk verbs in the Rust agent (",{"type":1133,"tag":1173,"props":4835,"children":4838},{"href":4836,"rel":4837},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22e1a29e5d2f02cc2262e89812234b323390ddbc",[1177],[4839],{"type":1138,"value":4840},"22e1a29",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4843,"children":4844},{},[4845,4847,4854],{"type":1138,"value":4846},"show tick time, memory and CPU on the servers overview, with charts in a pop-up (",{"type":1133,"tag":1173,"props":4848,"children":4851},{"href":4849,"rel":4850},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92a20a2aae5fe97ce0c4d5e5705454297559805a",[1177],[4852],{"type":1138,"value":4853},"92a20a2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4856,"children":4857},{},[4858,4860,4867],{"type":1138,"value":4859},"publish each server's last hour of figures for the servers overview (",{"type":1133,"tag":1173,"props":4861,"children":4864},{"href":4862,"rel":4863},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa4f0f1857832d8214796e74113ac6a0c660e6cca",[1177],[4865],{"type":1138,"value":4866},"a4f0f18",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4869,"children":4870},{},[4871,4873,4880],{"type":1138,"value":4872},"move Stats onto the Players tab (",{"type":1133,"tag":1173,"props":4874,"children":4877},{"href":4875,"rel":4876},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8ca54bdf77640aa295392be33aebc5b2de1aa38",[1177],[4878],{"type":1138,"value":4879},"d8ca54b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4882,"children":4883},{},[4884,4886,4893],{"type":1138,"value":4885},"open logs and crashes in a pop-up from the Console (",{"type":1133,"tag":1173,"props":4887,"children":4890},{"href":4888,"rel":4889},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F462119cae593347b9616b9d0a5ecdbc6cced26b3",[1177],[4891],{"type":1138,"value":4892},"462119c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4895,"children":4896},{},[4897,4899,4906],{"type":1138,"value":4898},"split World and Settings into sections, with Backups, Schedules and YAML inside them (",{"type":1133,"tag":1173,"props":4900,"children":4903},{"href":4901,"rel":4902},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5d4e6b70c68a631107d5e949171e039151cf8a00",[1177],[4904],{"type":1138,"value":4905},"5d4e6b7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4908,"children":4909},{},[4910,4914,4916,4923],{"type":1133,"tag":1146,"props":4911,"children":4912},{},[4913],{"type":1138,"value":1221},{"type":1138,"value":4915}," measure disk use and clean up as root (",{"type":1133,"tag":1173,"props":4917,"children":4920},{"href":4918,"rel":4919},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b0689e89a6e3598347a259cf5230b1bed77869",[1177],[4921],{"type":1138,"value":4922},"b7b0689",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4925,"children":4926},{},[4927,4932,4934,4941],{"type":1133,"tag":1146,"props":4928,"children":4929},{},[4930],{"type":1138,"value":4931},"protocol:",{"type":1138,"value":4933}," disk.usage and three clean-up verbs (",{"type":1133,"tag":1173,"props":4935,"children":4938},{"href":4936,"rel":4937},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F974b2334362224a8a967d3fb6dcb1ca666be5d5a",[1177],[4939],{"type":1138,"value":4940},"974b233",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4943,"children":4944},{},[4945,4947,4954],{"type":1138,"value":4946},"link the map from the public page once it's drawn (",{"type":1133,"tag":1173,"props":4948,"children":4951},{"href":4949,"rel":4950},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F868241199515f6c6816d9d1b78e584fb03312082",[1177],[4952],{"type":1138,"value":4953},"8682411",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4956,"children":4957},{},[4958,4960,4967],{"type":1138,"value":4959},"link a public web map from \u002Fstatus in Discord (",{"type":1133,"tag":1173,"props":4961,"children":4964},{"href":4962,"rel":4963},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabd9cef298617817c50051a862ec574f1990dbed",[1177],[4965],{"type":1138,"value":4966},"abd9cef",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4969,"children":4970},{},[4971,4973,4980],{"type":1138,"value":4972},"link the web map from the public status page (",{"type":1133,"tag":1173,"props":4974,"children":4977},{"href":4975,"rel":4976},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb13438fe42c81a0795e15c28b219895251a63e96",[1177],[4978],{"type":1138,"value":4979},"b13438f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4982,"children":4983},{},[4984,4986,4993],{"type":1138,"value":4985},"include a public web map in the server's public status (",{"type":1133,"tag":1173,"props":4987,"children":4990},{"href":4988,"rel":4989},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fabfa5d15d407d4be0557a0f9c7faeea834e74cb9",[1177],[4991],{"type":1138,"value":4992},"abfa5d1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":4995,"children":4996},{},[4997,4999,5006],{"type":1138,"value":4998},"open and share the map from the World tab (",{"type":1133,"tag":1173,"props":5000,"children":5003},{"href":5001,"rel":5002},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fee78d05a8942a313ae74c7d3d4bfd84fdb0b16",[1177],[5004],{"type":1138,"value":5005},"5fee78d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5008,"children":5009},{},[5010,5012,5019],{"type":1138,"value":5011},"our own web map viewer (",{"type":1133,"tag":1173,"props":5013,"children":5016},{"href":5014,"rel":5015},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff5df022bc7215719e09a9dfb7b5bba7d8dec7c9c",[1177],[5017],{"type":1138,"value":5018},"f5df022",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5021,"children":5022},{},[5023,5025],{"type":1138,"value":5024},"serve the web map at \u002Fs\u002F",{"type":1133,"tag":5026,"props":5027,"children":5028},"name",{},[5029,5031,5038],{"type":1138,"value":5030},"\u002Fmap\u002F (",{"type":1133,"tag":1173,"props":5032,"children":5035},{"href":5033,"rel":5034},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6c37c835ab4544542607d022caa29e18f873ad04",[1177],[5036],{"type":1138,"value":5037},"6c37c83",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5040,"children":5041},{},[5042,5044,5051],{"type":1138,"value":5043},"show the web map on a server's own hostname (",{"type":1133,"tag":1173,"props":5045,"children":5048},{"href":5046,"rel":5047},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6a013b2417f8153e32f4d862222547e57026cf33",[1177],[5049],{"type":1138,"value":5050},"6a013b2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5053,"children":5054},{},[5055,5057,5064],{"type":1138,"value":5056},"ship the Rust agent behind an opt-in switch (",{"type":1133,"tag":1173,"props":5058,"children":5061},{"href":5059,"rel":5060},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8d8ad1fa8b0d9ebf1b7d9a56402c98cea623916b",[1177],[5062],{"type":1138,"value":5063},"8d8ad1f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5066,"children":5067},{},[5068,5070,5077],{"type":1138,"value":5069},"ship flytower-map in the release (",{"type":1133,"tag":1173,"props":5071,"children":5074},{"href":5072,"rel":5073},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a137b443700644fcfdabc0a0575479fb18bb4fe",[1177],[5075],{"type":1138,"value":5076},"3a137b4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5079,"children":5080},{},[5081,5083,5090],{"type":1138,"value":5082},"web map card on the World tab (",{"type":1133,"tag":1173,"props":5084,"children":5087},{"href":5085,"rel":5086},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4261b982f900d8171594b9e4341d23e9c2f9283b",[1177],[5088],{"type":1138,"value":5089},"4261b98",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5092,"children":5093},{},[5094,5096,5103],{"type":1138,"value":5095},"map settings, status and drawing through the API (",{"type":1133,"tag":1173,"props":5097,"children":5100},{"href":5098,"rel":5099},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F948467e73adaf70d19d95d08cc554d935c17aab1",[1177],[5101],{"type":1138,"value":5102},"948467e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5105,"children":5106},{},[5107,5109,5116],{"type":1138,"value":5108},"the panel keeps web maps drawn with flytower-map (",{"type":1133,"tag":1173,"props":5110,"children":5113},{"href":5111,"rel":5112},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdec01b7534aa7e471e72559ece283efb9f3fe703",[1177],[5114],{"type":1138,"value":5115},"dec01b7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5118,"children":5119},{},[5120,5122,5129],{"type":1138,"value":5121},"disk use counts each server's web map (",{"type":1133,"tag":1173,"props":5123,"children":5126},{"href":5124,"rel":5125},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c6a04a16a3071c46c4556d85350b1961a83ab0d",[1177],[5127],{"type":1138,"value":5128},"3c6a04a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5131,"children":5132},{},[5133,5135,5142],{"type":1138,"value":5134},"port the update verbs to the Rust agent (",{"type":1133,"tag":1173,"props":5136,"children":5139},{"href":5137,"rel":5138},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee3b38e37e0cfafe04a0edaab6fda3bc016b79d1",[1177],[5140],{"type":1138,"value":5141},"ee3b38e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5144,"children":5145},{},[5146,5148,5155],{"type":1138,"value":5147},"check release signatures in the Rust agent (",{"type":1133,"tag":1173,"props":5149,"children":5152},{"href":5150,"rel":5151},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd3771dfc0ac493baebd796dce24bc3b66bd19119",[1177],[5153],{"type":1138,"value":5154},"d3771df",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5157,"children":5158},{},[5159,5161,5168],{"type":1138,"value":5160},"the web map has an on switch, off by default (",{"type":1133,"tag":1173,"props":5162,"children":5165},{"href":5163,"rel":5164},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd1c4acc4b882e60c46134cf5e5eb69eca734f250",[1177],[5166],{"type":1138,"value":5167},"d1c4acc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5170,"children":5171},{},[5172,5174,5181],{"type":1138,"value":5173},"carry web map settings in the server spec (",{"type":1133,"tag":1173,"props":5175,"children":5178},{"href":5176,"rel":5177},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9426a4e5b37d425e75192349cc78f181650ef5a2",[1177],[5179],{"type":1138,"value":5180},"9426a4e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5183,"children":5184},{},[5185,5187,5194],{"type":1138,"value":5186},"add per-server web map settings (",{"type":1133,"tag":1173,"props":5188,"children":5191},{"href":5189,"rel":5190},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb49794300575d8ccc259c52e931c1dc2f2adfeb2",[1177],[5192],{"type":1138,"value":5193},"b497943",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5196,"children":5197},{},[5198,5200,5207],{"type":1138,"value":5199},"providers find the client jar for the web map (",{"type":1133,"tag":1173,"props":5201,"children":5204},{"href":5202,"rel":5203},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F827877eecf0b0f78c0b35fef1ddb531346b879ee",[1177],[5205],{"type":1138,"value":5206},"827877e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5209,"children":5210},{},[5211,5213,5220],{"type":1138,"value":5212},"flytower-map palette builds colours from the client jar (",{"type":1133,"tag":1173,"props":5214,"children":5217},{"href":5215,"rel":5216},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65ac095383138fc2084952d4aa40cbc7ea46a53e",[1177],[5218],{"type":1138,"value":5219},"65ac095",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5222,"children":5223},{},[5224,5226,5233],{"type":1138,"value":5225},"flytower-map reads files from the client jar (",{"type":1133,"tag":1173,"props":5227,"children":5230},{"href":5228,"rel":5229},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9954278747a2edfd18ef977f911b737248a6ff77",[1177],[5231],{"type":1138,"value":5232},"9954278",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5235,"children":5236},{},[5237,5239,5246],{"type":1138,"value":5238},"port runtime.install to the Rust agent (",{"type":1133,"tag":1173,"props":5240,"children":5243},{"href":5241,"rel":5242},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ad5a18ca2ab07a9d9cef1be1893a8c7c7b7fa34",[1177],[5244],{"type":1138,"value":5245},"8ad5a18",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5248,"children":5249},{},[5250,5252,5259],{"type":1138,"value":5251},"verified downloads in the Rust agent (",{"type":1133,"tag":1173,"props":5253,"children":5256},{"href":5254,"rel":5255},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F75fc541843c877471d843a354d498e28e8724179",[1177],[5257],{"type":1138,"value":5258},"75fc541",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5261,"children":5262},{},[5263,5265,5272],{"type":1138,"value":5264},"port the SSH verbs to the Rust agent (",{"type":1133,"tag":1173,"props":5266,"children":5269},{"href":5267,"rel":5268},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a9bc9a9d48b537e6159e1e323ecf3e6d0cee55a",[1177],[5270],{"type":1138,"value":5271},"1a9bc9a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5274,"children":5275},{},[5276,5278,5285],{"type":1138,"value":5277},"read ISO times back in the Rust agent (",{"type":1133,"tag":1173,"props":5279,"children":5282},{"href":5280,"rel":5281},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21f9d194acad8ddbc3b18b1c34f7ebddca8e0f24",[1177],[5283],{"type":1138,"value":5284},"21f9d19",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5287,"children":5288},{},[5289,5291,5298],{"type":1138,"value":5290},"port the server lifecycle verbs to the Rust agent (",{"type":1133,"tag":1173,"props":5292,"children":5295},{"href":5293,"rel":5294},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31f905d7e8c6877b58de57f5570d80f02738ac3b",[1177],[5296],{"type":1138,"value":5297},"31f905d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5300,"children":5301},{},[5302,5304,5311],{"type":1138,"value":5303},"share the server unit template between both agents (",{"type":1133,"tag":1173,"props":5305,"children":5308},{"href":5306,"rel":5307},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F916c9567117035c920853184023e2d0b2a8c811d",[1177],[5309],{"type":1138,"value":5310},"916c956",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5313,"children":5314},{},[5315,5317,5324],{"type":1138,"value":5316},"flytower-map command line, with end-to-end tests (",{"type":1133,"tag":1173,"props":5318,"children":5321},{"href":5319,"rel":5320},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8cb56b6ad71ed8c72e982000cf513dd431f4e0af",[1177],[5322],{"type":1138,"value":5323},"8cb56b6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5326,"children":5327},{},[5328,5330,5337],{"type":1138,"value":5329},"flytower-map draws tiles and only redraws what changed (",{"type":1133,"tag":1173,"props":5331,"children":5334},{"href":5332,"rel":5333},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf212a25a35d7f370ce0998d646b02811cc100b7",[1177],[5335],{"type":1138,"value":5336},"df212a2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5339,"children":5340},{},[5341,5343,5350],{"type":1138,"value":5342},"flytower-map decodes chunks against a colour palette (",{"type":1133,"tag":1173,"props":5344,"children":5347},{"href":5345,"rel":5346},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0bee7957a0f1b2cd1f412327695fca261c1d5e6c",[1177],[5348],{"type":1138,"value":5349},"0bee795",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5352,"children":5353},{},[5354,5356,5363],{"type":1138,"value":5355},"flytower-map crate reads NBT and region files (",{"type":1133,"tag":1173,"props":5357,"children":5360},{"href":5358,"rel":5359},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0aeb9cfb4f591eaee75d499aa62c74389fa06395",[1177],[5361],{"type":1138,"value":5362},"0aeb9cf",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5365,"children":5366},{},[5367,5369,5376],{"type":1138,"value":5368},"add \u002Fwhitelist, \u002Frestart, \u002Fbackup and \u002Fsay for Discord staff (",{"type":1133,"tag":1173,"props":5370,"children":5373},{"href":5371,"rel":5372},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7f13fa191456263552c848de1be9dea59faf98c",[1177],[5374],{"type":1138,"value":5375},"e7f13fa",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5378,"children":5379},{},[5380,5382,5389],{"type":1138,"value":5381},"let Discord commands have sub-commands, choices and follow-ups (",{"type":1133,"tag":1173,"props":5383,"children":5386},{"href":5384,"rel":5385},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff93b4b94bfaebea9cf61c230c3b145b77105f19c",[1177],[5387],{"type":1138,"value":5388},"f93b4b9",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5391,"children":5392},{},[5393,5395,5402],{"type":1138,"value":5394},"register the stats commands with the panel's stats rules (",{"type":1133,"tag":1173,"props":5396,"children":5399},{"href":5397,"rel":5398},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e163b4dd75205382d24cd065b5796d97448a4b1",[1177],[5400],{"type":1138,"value":5401},"6e163b4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5404,"children":5405},{},[5406,5408,5415],{"type":1138,"value":5407},"add \u002Fleaderboard and \u002Fstats Discord commands (",{"type":1133,"tag":1173,"props":5409,"children":5412},{"href":5410,"rel":5411},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc05d99cec7f2f7a1bd5384346ae6b4ce86c48f92",[1177],[5413],{"type":1138,"value":5414},"c05d99c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5417,"children":5418},{},[5419,5421,5428],{"type":1138,"value":5420},"let Discord command options offer fixed choices (",{"type":1133,"tag":1173,"props":5422,"children":5425},{"href":5423,"rel":5424},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F937fac070810f9a754d9ae59240dcbb865397985",[1177],[5426],{"type":1138,"value":5427},"937fac0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5430,"children":5431},{},[5432,5434,5441],{"type":1138,"value":5433},"Discord chat card on the server's settings (",{"type":1133,"tag":1173,"props":5435,"children":5438},{"href":5436,"rel":5437},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb7b9e4a1e87adb094e63c8d5ceb6090a9a4584f2",[1177],[5439],{"type":1138,"value":5440},"b7b9e4a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5443,"children":5444},{},[5445,5447,5454],{"type":1138,"value":5446},"relay each server's chat to its Discord channel, with signed player heads (",{"type":1133,"tag":1173,"props":5448,"children":5451},{"href":5449,"rel":5450},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F58b4c0cb70329d6dd705ebb4bc864f01d9f3c4ca",[1177],[5452],{"type":1138,"value":5453},"58b4c0c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5456,"children":5457},{},[5458,5460,5467],{"type":1138,"value":5459},"post game chat to a Discord webhook within its rate limits (",{"type":1133,"tag":1173,"props":5461,"children":5464},{"href":5462,"rel":5463},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2147dfae72fbced1a06f29974e2a4f690096b394",[1177],[5465],{"type":1138,"value":5466},"2147dfa",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5469,"children":5470},{},[5471,5473,5480],{"type":1138,"value":5472},"draw a player's face from their skin for avatars (",{"type":1133,"tag":1173,"props":5474,"children":5477},{"href":5475,"rel":5476},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2fe9c4e8c0c98344efd8ce8a1ce59b4e5d6a0787",[1177],[5478],{"type":1138,"value":5479},"2fe9c4e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5482,"children":5483},{},[5484,5486,5493],{"type":1138,"value":5485},"show leaderboards on the public status page (",{"type":1133,"tag":1173,"props":5487,"children":5490},{"href":5488,"rel":5489},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1915a5c9ecd6373506d473e9aa313e2da99be490",[1177],[5491],{"type":1138,"value":5492},"1915a5c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5495,"children":5496},{},[5497,5499,5506],{"type":1138,"value":5498},"serve public leaderboards and the heads on them (",{"type":1133,"tag":1173,"props":5500,"children":5503},{"href":5501,"rel":5502},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F79e7592f180fc65c863312409c8af1d2db4a825d",[1177],[5504],{"type":1138,"value":5505},"79e7592",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5508,"children":5509},{},[5510,5512,5519],{"type":1138,"value":5511},"add an optional leaderboard setting to the public page (",{"type":1133,"tag":1173,"props":5513,"children":5516},{"href":5514,"rel":5515},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8b1e095de51d8e55e66d3ed95c8319569f1e4c9b",[1177],[5517],{"type":1138,"value":5518},"8b1e095",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5521,"children":5522},{},[5523,5525,5532],{"type":1138,"value":5524},"store a server's Discord chat relay settings (",{"type":1133,"tag":1173,"props":5526,"children":5529},{"href":5527,"rel":5528},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9776cc83143e2e9fc1939639d95897937e09f79",[1177],[5530],{"type":1138,"value":5531},"b9776cc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5534,"children":5535},{},[5536,5538,5545],{"type":1138,"value":5537},"map Discord roles to Flytower roles on the Discord card (",{"type":1133,"tag":1173,"props":5539,"children":5542},{"href":5540,"rel":5541},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F169e7d502626b176e1d876937b6ce6e301a58477",[1177],[5543],{"type":1138,"value":5544},"169e7d5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5547,"children":5548},{},[5549,5551,5558],{"type":1138,"value":5550},"show Discord actions in Activity as \"Name via Discord\" (",{"type":1133,"tag":1173,"props":5552,"children":5555},{"href":5553,"rel":5554},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b56f3707361e60fce0e45b983060d9080604196",[1177],[5556],{"type":1138,"value":5557},"4b56f37",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5560,"children":5561},{},[5562,5564,5571],{"type":1138,"value":5563},"give Discord members the Flytower roles mapped to their Discord roles (",{"type":1133,"tag":1173,"props":5565,"children":5568},{"href":5566,"rel":5567},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F230c9f080ba8d794be6afa0dca578739bd0c59ef",[1177],[5569],{"type":1138,"value":5570},"230c9f0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5573,"children":5574},{},[5575,5577,5584],{"type":1138,"value":5576},"add a Stats tab with leaderboards and player cards (",{"type":1133,"tag":1173,"props":5578,"children":5581},{"href":5579,"rel":5580},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf6823522bfae02331002c47509328f496d6eedf",[1177],[5582],{"type":1138,"value":5583},"df68235",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5586,"children":5587},{},[5588,5590,5597],{"type":1138,"value":5589},"serve a server's leaderboards for all time, this month and this week (",{"type":1133,"tag":1173,"props":5591,"children":5594},{"href":5592,"rel":5593},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7834438c62aad12e923b85f150da135595190dec",[1177],[5595],{"type":1138,"value":5596},"7834438",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5599,"children":5600},{},[5601,5603,5610],{"type":1138,"value":5602},"build leaderboards and player cards from the stats snapshot (",{"type":1133,"tag":1173,"props":5604,"children":5607},{"href":5605,"rel":5606},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18e1bfc24d6fb5c652d73047d377d6f3c2d336f9",[1177],[5608],{"type":1138,"value":5609},"18e1bfc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5612,"children":5613},{},[5614,5616,5623],{"type":1138,"value":5615},"send the command list to Discord when it changes (",{"type":1133,"tag":1173,"props":5617,"children":5620},{"href":5618,"rel":5619},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F867a6f5e9bb81afb3b76d8ce32bc8acf3c1382fe",[1177],[5621],{"type":1138,"value":5622},"867a6f5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5625,"children":5626},{},[5627,5629,5636],{"type":1138,"value":5628},"answer \u002Fstatus and \u002Fplayers from the status page's roster (",{"type":1133,"tag":1173,"props":5630,"children":5633},{"href":5631,"rel":5632},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3d3541b2eee0aacefcf3f9985f765f35b115efe",[1177],[5634],{"type":1138,"value":5635},"c3d3541",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5638,"children":5639},{},[5640,5642,5649],{"type":1138,"value":5641},"add a slash command registry for the Discord app (",{"type":1133,"tag":1173,"props":5643,"children":5646},{"href":5644,"rel":5645},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb3992a57eb3e292c1f9a54359f23d6747ba78634",[1177],[5647],{"type":1138,"value":5648},"b3992a5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5651,"children":5652},{},[5653,5655,5662],{"type":1138,"value":5654},"let people turn stats off and leave players out (",{"type":1133,"tag":1173,"props":5656,"children":5659},{"href":5657,"rel":5658},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb79238aa2c1fc718a1b73f0b4d070801a7bfb6f",[1177],[5660],{"type":1138,"value":5661},"eb79238",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5664,"children":5665},{},[5666,5668,5675],{"type":1138,"value":5667},"carry player stats settings in the server spec (",{"type":1133,"tag":1173,"props":5669,"children":5672},{"href":5670,"rel":5671},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F80071f242dce2fb5fb77f45214c695afdd184d18",[1177],[5673],{"type":1138,"value":5674},"80071f2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5677,"children":5678},{},[5679,5681,5688],{"type":1138,"value":5680},"add per-server player stats settings (",{"type":1133,"tag":1173,"props":5682,"children":5685},{"href":5683,"rel":5684},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e7dad52a747806c97c7b856ab550afaf3648e44",[1177],[5686],{"type":1138,"value":5687},"5e7dad5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5690,"children":5691},{},[5692,5696,5698,5705],{"type":1133,"tag":1146,"props":5693,"children":5694},{},[5695],{"type":1138,"value":4598},{"type":1138,"value":5697}," Learn more links beside settings open the right heading (",{"type":1133,"tag":1173,"props":5699,"children":5702},{"href":5700,"rel":5701},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5bccc33f76939ea45ebe5304b5912c314b29a778",[1177],[5703],{"type":1138,"value":5704},"5bccc33",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5707,"children":5708},{},[5709,5713,5715,5722],{"type":1133,"tag":1146,"props":5710,"children":5711},{},[5712],{"type":1138,"value":4598},{"type":1138,"value":5714}," a ? on every page opens its help beside it (",{"type":1133,"tag":1173,"props":5716,"children":5719},{"href":5717,"rel":5718},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdb2abb3ad21fd173fa822c9803260d7c5878005e",[1177],[5720],{"type":1138,"value":5721},"db2abb3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5724,"children":5725},{},[5726,5730,5732,5739],{"type":1133,"tag":1146,"props":5727,"children":5728},{},[5729],{"type":1138,"value":4598},{"type":1138,"value":5731}," Help, the docs for the installed version, with search (",{"type":1133,"tag":1173,"props":5733,"children":5736},{"href":5734,"rel":5735},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7221347c3eb57ff4183bdc4f672bdd742e7ab6a4",[1177],[5737],{"type":1138,"value":5738},"7221347",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5741,"children":5742},{},[5743,5748,5750,5757],{"type":1133,"tag":1146,"props":5744,"children":5745},{},[5746],{"type":1138,"value":5747},"docs:",{"type":1138,"value":5749}," a shared docs layer for the panel and the website (",{"type":1133,"tag":1173,"props":5751,"children":5754},{"href":5752,"rel":5753},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ee4f18711e83900b4ab266539d091eaa775f34e",[1177],[5755],{"type":1138,"value":5756},"5ee4f18",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5759,"children":5760},{},[5761,5763,5770],{"type":1138,"value":5762},"schedule the stats snapshot and add stats routes (",{"type":1133,"tag":1173,"props":5764,"children":5767},{"href":5765,"rel":5766},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6572cb7d31604dbd99f2c29af89a5aab73149ef0",[1177],[5768],{"type":1138,"value":5769},"6572cb7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5772,"children":5773},{},[5774,5776,5783],{"type":1138,"value":5775},"take a daily snapshot of chosen player stats (",{"type":1133,"tag":1173,"props":5777,"children":5780},{"href":5778,"rel":5779},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fcb69f8d8bfc64ca829ff260af5fc71b765cc81",[1177],[5781],{"type":1138,"value":5782},"5fcb69f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5785,"children":5786},{},[5787,5789,5796],{"type":1138,"value":5788},"add the player stats table (",{"type":1133,"tag":1173,"props":5790,"children":5793},{"href":5791,"rel":5792},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe9ad70e72c260558e9e3176bbc8d62a4055be22e",[1177],[5794],{"type":1138,"value":5795},"e9ad70e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5798,"children":5799},{},[5800,5802,5809],{"type":1138,"value":5801},"add System, Integrations with the Discord app card (",{"type":1133,"tag":1173,"props":5803,"children":5806},{"href":5804,"rel":5805},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae7948e38e56870904d025bcf900ff9f0894a1a0",[1177],[5807],{"type":1138,"value":5808},"ae7948e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5811,"children":5812},{},[5813,5815,5822],{"type":1138,"value":5814},"answer Discord's interactions endpoint (",{"type":1133,"tag":1173,"props":5816,"children":5819},{"href":5817,"rel":5818},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa7bdb5dd51cfc70c22b3b062ee6c4a9771c8b282",[1177],[5820],{"type":1138,"value":5821},"a7bdb5d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5824,"children":5825},{},[5826,5828,5835],{"type":1138,"value":5827},"connect a Discord app from its bot token (",{"type":1133,"tag":1173,"props":5829,"children":5832},{"href":5830,"rel":5831},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffc12f9a3f587a737cef12baeb3689778e58297b7",[1177],[5833],{"type":1138,"value":5834},"fc12f9a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5837,"children":5838},{},[5839,5841,5848],{"type":1138,"value":5840},"check Discord interaction signatures with Ed25519 (",{"type":1133,"tag":1173,"props":5842,"children":5845},{"href":5843,"rel":5844},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6de5a5d20ceb69f5c16169d61fd27539a5f0b0de",[1177],[5846],{"type":1138,"value":5847},"6de5a5d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5850,"children":5851},{},[5852,5854,5861],{"type":1138,"value":5853},"follow the journal for service.wait in the Rust agent (",{"type":1133,"tag":1173,"props":5855,"children":5858},{"href":5856,"rel":5857},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc23ee50fa7415f5e1b6f9f603df6e84505bd96ea",[1177],[5859],{"type":1138,"value":5860},"c23ee50",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5863,"children":5864},{},[5865,5867,5874],{"type":1138,"value":5866},"wire player sessions into crashes, deletes and boot, with a players summary route (",{"type":1133,"tag":1173,"props":5868,"children":5871},{"href":5869,"rel":5870},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1c9c03ca6ead9cbcd003fdb4b477cee8d7deb89",[1177],[5872],{"type":1138,"value":5873},"f1c9c03",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5876,"children":5877},{},[5878,5880,5887],{"type":1138,"value":5879},"record player sessions from join and leave lines (",{"type":1133,"tag":1173,"props":5881,"children":5884},{"href":5882,"rel":5883},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2434b21d58230380674d0c8cbe6626ed668985d4",[1177],[5885],{"type":1138,"value":5886},"2434b21",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5889,"children":5890},{},[5891,5893,5900],{"type":1138,"value":5892},"let the log watcher pass on raw lines (",{"type":1133,"tag":1173,"props":5894,"children":5897},{"href":5895,"rel":5896},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ef8db734d32e317ca18e47c499b13855bf3adbc",[1177],[5898],{"type":1138,"value":5899},"1ef8db7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5902,"children":5903},{},[5904,5906,5913],{"type":1138,"value":5905},"add player sessions and names tables (",{"type":1133,"tag":1173,"props":5907,"children":5910},{"href":5908,"rel":5909},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fed574df594924880cfe2b14678037829526cb53e",[1177],[5911],{"type":1138,"value":5912},"ed574df",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5915,"children":5916},{},[5917,5919,5926],{"type":1138,"value":5918},"port the service verbs to the Rust agent (",{"type":1133,"tag":1173,"props":5920,"children":5923},{"href":5921,"rel":5922},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F25cdd23ec91ed29ebd4618900ebec7dbf9636fae",[1177],[5924],{"type":1138,"value":5925},"25cdd23",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5928,"children":5929},{},[5930,5932,5939],{"type":1138,"value":5931},"run programs from the Rust agent without a shell (",{"type":1133,"tag":1173,"props":5933,"children":5936},{"href":5934,"rel":5935},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F31930426a70860fb95da3575fb3d6a9596190ac7",[1177],[5937],{"type":1138,"value":5938},"3193042",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5941,"children":5942},{},[5943,5945,5952],{"type":1138,"value":5944},"serve the Rust agent on the agent socket with a peer check (",{"type":1133,"tag":1173,"props":5946,"children":5949},{"href":5947,"rel":5948},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3d5669555996305d60c41829af7b861b5b2980a9",[1177],[5950],{"type":1138,"value":5951},"3d56695",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5954,"children":5955},{},[5956,5958,5965],{"type":1138,"value":5957},"dispatch requests and write the audit log in the Rust agent (",{"type":1133,"tag":1173,"props":5959,"children":5962},{"href":5960,"rel":5961},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50413ca3b2cdbea5d9c1513991173cf54a3dd45a",[1177],[5963],{"type":1138,"value":5964},"50413ca",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5967,"children":5968},{},[5969,5971,5978],{"type":1138,"value":5970},"add the Rust agent's protocol types (",{"type":1133,"tag":1173,"props":5972,"children":5975},{"href":5973,"rel":5974},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48b3ce97179e7bd7e7b3ed0619803a624adc433d",[1177],[5976],{"type":1138,"value":5977},"48b3ce9",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":5980,"children":5981},{},[5982,5987,5989,5996,5997],{"type":1133,"tag":1146,"props":5983,"children":5984},{},[5985],{"type":1138,"value":5986},"updates:",{"type":1138,"value":5988}," number native builds after the release they go with (",{"type":1133,"tag":1173,"props":5990,"children":5993},{"href":5991,"rel":5992},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8270b4fc42df6b7a0478d547cddc61989404c4a8",[1177],[5994],{"type":1138,"value":5995},"8270b4f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":5998,"children":6001},{"href":5999,"rel":6000},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F134",[1177],[6002],{"type":1138,"value":6003},"#134",{"type":1133,"tag":1195,"props":6005,"children":6006},{},[6007,6012,6014,6021,6022],{"type":1133,"tag":1146,"props":6008,"children":6009},{},[6010],{"type":1138,"value":6011},"installer:",{"type":1138,"value":6013}," --native installs the newest native build (",{"type":1133,"tag":1173,"props":6015,"children":6018},{"href":6016,"rel":6017},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd79b6ac662e923ad4f1b7df7f95a18b55fe6843e",[1177],[6019],{"type":1138,"value":6020},"d79b6ac",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6023,"children":6025},{"href":5999,"rel":6024},[1177],[6026],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":6028,"children":6029},{},[6030,6034,6036,6043,6044],{"type":1133,"tag":1146,"props":6031,"children":6032},{},[6033],{"type":1138,"value":1221},{"type":1138,"value":6035}," download native builds from their own tag (",{"type":1133,"tag":1173,"props":6037,"children":6040},{"href":6038,"rel":6039},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9b5c93bd7b9ae00bd77beb1b6324059330936895",[1177],[6041],{"type":1138,"value":6042},"9b5c93b",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6045,"children":6047},{"href":5999,"rel":6046},[1177],[6048],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":6050,"children":6051},{},[6052,6056,6058,6065,6066],{"type":1133,"tag":1146,"props":6053,"children":6054},{},[6055],{"type":1138,"value":5986},{"type":1138,"value":6057}," a Native channel for builds of the native branch (",{"type":1133,"tag":1173,"props":6059,"children":6062},{"href":6060,"rel":6061},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F478652b846657641e2ff0cb92ea29ec564447442",[1177],[6063],{"type":1138,"value":6064},"478652b",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6067,"children":6069},{"href":5999,"rel":6068},[1177],[6070],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":6072,"children":6073},{},[6074,6079,6081,6088,6089],{"type":1133,"tag":1146,"props":6075,"children":6076},{},[6077],{"type":1138,"value":6078},"disk:",{"type":1138,"value":6080}," measure with flytower-du when it's there (",{"type":1133,"tag":1173,"props":6082,"children":6085},{"href":6083,"rel":6084},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff1a40d3c2aee36b864556f22d577508c472941d9",[1177],[6086],{"type":1138,"value":6087},"f1a40d3",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6090,"children":6093},{"href":6091,"rel":6092},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F136",[1177],[6094],{"type":1138,"value":6095},"#136",{"type":1133,"tag":1195,"props":6097,"children":6098},{},[6099,6104,6106,6113,6114],{"type":1133,"tag":1146,"props":6100,"children":6101},{},[6102],{"type":1138,"value":6103},"du:",{"type":1138,"value":6105}," add flytower-du, a Rust disk walker (",{"type":1133,"tag":1173,"props":6107,"children":6110},{"href":6108,"rel":6109},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff64592b93a495b1ee154ad346d8be2212118b24f",[1177],[6111],{"type":1138,"value":6112},"f64592b",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6115,"children":6117},{"href":6091,"rel":6116},[1177],[6118],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":6120,"children":6121},{},[6122,6126,6128,6135,6136],{"type":1133,"tag":1146,"props":6123,"children":6124},{},[6125],{"type":1138,"value":6011},{"type":1138,"value":6127}," start the agent through bin\u002Fflytower-agent (",{"type":1133,"tag":1173,"props":6129,"children":6132},{"href":6130,"rel":6131},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd957684c7e9bc0c83ab0fd3cfad2714ba2023a2a",[1177],[6133],{"type":1138,"value":6134},"d957684",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6137,"children":6140},{"href":6138,"rel":6139},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F135",[1177],[6141],{"type":1138,"value":6142},"#135",{"type":1133,"tag":1195,"props":6144,"children":6145},{},[6146,6150,6152,6159,6160],{"type":1133,"tag":1146,"props":6147,"children":6148},{},[6149],{"type":1138,"value":1221},{"type":1138,"value":6151}," start the agent and updater through the stable entry points (",{"type":1133,"tag":1173,"props":6153,"children":6156},{"href":6154,"rel":6155},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd6a6276f337db3fb0e981b0ce504aca36fb71953",[1177],[6157],{"type":1138,"value":6158},"d6a6276",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6161,"children":6163},{"href":6138,"rel":6162},[1177],[6164],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":6166,"children":6167},{},[6168,6172,6174,6181,6182],{"type":1133,"tag":1146,"props":6169,"children":6170},{},[6171],{"type":1138,"value":1221},{"type":1138,"value":6173}," ship stable flytower-agent and flytower-updater entry points (",{"type":1133,"tag":1173,"props":6175,"children":6178},{"href":6176,"rel":6177},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb961480542b64d56c1a3fd8b61fd4fe85fc9f014",[1177],[6179],{"type":1138,"value":6180},"b961480",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6183,"children":6185},{"href":6138,"rel":6184},[1177],[6186],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":6188,"children":6189},{},[6190,6194,6196,6203,6204],{"type":1133,"tag":1146,"props":6191,"children":6192},{},[6193],{"type":1138,"value":4931},{"type":1138,"value":6195}," export the agent protocol as JSON Schema (",{"type":1133,"tag":1173,"props":6197,"children":6200},{"href":6198,"rel":6199},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F85cae8e453941509abad8bd113b44536bd80935b",[1177],[6201],{"type":1138,"value":6202},"85cae8e",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6205,"children":6207},{"href":6138,"rel":6206},[1177],[6208],{"type":1138,"value":6142},{"type":1133,"tag":1184,"props":6210,"children":6211},{"id":1233},[6212],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":6214,"children":6215},{},[6216,6236,6249,6262,6275,6288,6301,6314,6327,6340,6353,6366,6379,6392,6405,6418],{"type":1133,"tag":1195,"props":6217,"children":6218},{},[6219,6221,6226,6228,6235],{"type":1138,"value":6220},"console say, me and msg show under ",{"type":1133,"tag":4357,"props":6222,"children":6223},{},[6224],{"type":1138,"value":6225},"Server",{"type":1138,"value":6227}," and your name, not Rcon (",{"type":1133,"tag":1173,"props":6229,"children":6232},{"href":6230,"rel":6231},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd4a61c670b2c6dde57b7c43747e93c436fb2ee23",[1177],[6233],{"type":1138,"value":6234},"d4a61c6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6237,"children":6238},{},[6239,6241,6248],{"type":1138,"value":6240},"add server hostnames to an old Caddyfile in the Rust agent too (",{"type":1133,"tag":1173,"props":6242,"children":6245},{"href":6243,"rel":6244},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F06bcb26fe8c5e0da878eb2073c1855806245e4e6",[1177],[6246],{"type":1138,"value":6247},"06bcb26",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6250,"children":6251},{},[6252,6254,6261],{"type":1138,"value":6253},"add server hostnames to an old Caddyfile when the agent starts (",{"type":1133,"tag":1173,"props":6255,"children":6258},{"href":6256,"rel":6257},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd728ea086056fc85406a68b8041d4bcbacb6ac79",[1177],[6259],{"type":1138,"value":6260},"d728ea0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6263,"children":6264},{},[6265,6267,6274],{"type":1138,"value":6266},"post joins and leaves as plain text, like the rest of the chat relay (",{"type":1133,"tag":1173,"props":6268,"children":6271},{"href":6269,"rel":6270},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff54de7d589ad735665f9bf5ffb6efc783ad07c42",[1177],[6272],{"type":1138,"value":6273},"f54de7d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6276,"children":6277},{},[6278,6280,6287],{"type":1138,"value":6279},"show join and leave lines in Discord chat (",{"type":1133,"tag":1173,"props":6281,"children":6284},{"href":6282,"rel":6283},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22ee71b477517a33fccd1e3cf7e4c0b266eeae4a",[1177],[6285],{"type":1138,"value":6286},"22ee71b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6289,"children":6290},{},[6291,6293,6300],{"type":1138,"value":6292},"redraw every map once with the fixed renderer (",{"type":1133,"tag":1173,"props":6294,"children":6297},{"href":6295,"rel":6296},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F687ec95270a10de419c20a914e5e9e2a76979ae5",[1177],[6298],{"type":1138,"value":6299},"687ec95",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6302,"children":6303},{},[6304,6306,6313],{"type":1138,"value":6305},"read block names the way Minecraft 26.3 saves them (",{"type":1133,"tag":1173,"props":6307,"children":6310},{"href":6308,"rel":6309},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0b5f92c02a0fa1994bf42222995244ac950e093a",[1177],[6311],{"type":1138,"value":6312},"0b5f92c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6315,"children":6316},{},[6317,6319,6326],{"type":1138,"value":6318},"open the newest log straight away, and keep Back closing the logs pop-up (",{"type":1133,"tag":1173,"props":6320,"children":6323},{"href":6321,"rel":6322},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe888bbcd8f645daa78dd0dd5532ffa1c19908b68",[1177],[6324],{"type":1138,"value":6325},"e888bbc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6328,"children":6329},{},[6330,6332,6339],{"type":1138,"value":6331},"point links, notifications and help at the new server sections (",{"type":1133,"tag":1173,"props":6333,"children":6336},{"href":6334,"rel":6335},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ec964ae354ac61d9ee2e192246ca6b522b55871",[1177],[6337],{"type":1138,"value":6338},"5ec964a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6341,"children":6342},{},[6343,6345,6352],{"type":1138,"value":6344},"give the Rust agent steps inline (",{"type":1133,"tag":1173,"props":6346,"children":6349},{"href":6347,"rel":6348},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc3ca6ac4149c2600f8751cc806c34d4ff8ac175f",[1177],[6350],{"type":1138,"value":6351},"c3ca6ac",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6354,"children":6355},{},[6356,6358,6365],{"type":1138,"value":6357},"wrap the saved webhook on narrow screens (",{"type":1133,"tag":1173,"props":6359,"children":6362},{"href":6360,"rel":6361},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2878c98deec06f248b8ba5b6b34428251fe837d8",[1177],[6363],{"type":1138,"value":6364},"2878c98",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6367,"children":6368},{},[6369,6371,6378],{"type":1138,"value":6370},"give the Discord test status the leaderboard field (",{"type":1133,"tag":1173,"props":6372,"children":6375},{"href":6373,"rel":6374},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf49b5a336da3b31b926c0a5a85e19350f058e6f",[1177],[6376],{"type":1138,"value":6377},"cf49b5a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6380,"children":6381},{},[6382,6384,6391],{"type":1138,"value":6383},"check Manage people first when saving Discord roles (",{"type":1133,"tag":1173,"props":6385,"children":6388},{"href":6386,"rel":6387},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fec63bc1dfa45175b174fe48b9308eda8c9da318e",[1177],[6389],{"type":1138,"value":6390},"ec63bc1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6393,"children":6394},{},[6395,6397,6404],{"type":1138,"value":6396},"list the leaderboards route in the permission table (",{"type":1133,"tag":1173,"props":6398,"children":6401},{"href":6399,"rel":6400},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F64a67ce3900605d3fcd8bded1f165c0a551a6221",[1177],[6402],{"type":1138,"value":6403},"64a67ce",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6406,"children":6407},{},[6408,6410,6417],{"type":1138,"value":6409},"show leaderboard icons and label each figure on player cards (",{"type":1133,"tag":1173,"props":6411,"children":6414},{"href":6412,"rel":6413},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7d8ed23b88728a110579bca2c94aeb5582a88a9",[1177],[6415],{"type":1138,"value":6416},"e7d8ed2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6419,"children":6420},{},[6421,6425,6427,6434],{"type":1133,"tag":1146,"props":6422,"children":6423},{},[6424],{"type":1138,"value":4598},{"type":1138,"value":6426}," serve the help docs' database from its route instead of prerendering it (",{"type":1133,"tag":1173,"props":6428,"children":6431},{"href":6429,"rel":6430},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9ba3eb31d2ba1f7b8d65553566efe58dc193cd6a",[1177],[6432],{"type":1138,"value":6433},"9ba3eb3",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":6436,"children":6437},{"id":7},[6438],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":6440,"children":6441},{},[6442,6455,6468,6481,6494,6507,6520,6533,6546,6559,6572,6585,6598,6611,6624,6637,6650,6663,6676,6689,6702,6715,6728,6741,6754,6767,6780,6793,6806,6819,6832,6845],{"type":1133,"tag":1195,"props":6443,"children":6444},{},[6445,6447,6454],{"type":1138,"value":6446},"release notes for 1.3.0 and its native build (",{"type":1133,"tag":1173,"props":6448,"children":6451},{"href":6449,"rel":6450},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe82f1dfb33f39b3c3f159b30f9b4c69971b8e0ba",[1177],[6452],{"type":1138,"value":6453},"e82f1df",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6456,"children":6457},{},[6458,6460,6467],{"type":1138,"value":6459},"add system disk use to the 1.3.0-beta.3 notes (",{"type":1133,"tag":1173,"props":6461,"children":6464},{"href":6462,"rel":6463},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fab864d149f3afe2fb06645d36436668b456d70ae",[1177],[6465],{"type":1138,"value":6466},"ab864d1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6469,"children":6470},{},[6471,6473,6480],{"type":1138,"value":6472},"keyboard shortcuts page and 1.4.0 testing notes (",{"type":1133,"tag":1173,"props":6474,"children":6477},{"href":6475,"rel":6476},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc457978fd8fdbd03412a5c97987b26604f1d3e9",[1177],[6478],{"type":1138,"value":6479},"cc45797",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6482,"children":6483},{},[6484,6486,6493],{"type":1138,"value":6485},"release notes for 1.3.0-beta.3 and its native build (",{"type":1133,"tag":1173,"props":6487,"children":6490},{"href":6488,"rel":6489},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c1cc31886280a903ca61270af0ee1bda3ba13e4",[1177],[6491],{"type":1138,"value":6492},"4c1cc31",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6495,"children":6496},{},[6497,6499,6506],{"type":1138,"value":6498},"hostnames start working after an update, no installer re-run (",{"type":1133,"tag":1173,"props":6500,"children":6503},{"href":6501,"rel":6502},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53cb5c4e8c5c164559de01e10f286256606a1334",[1177],[6504],{"type":1138,"value":6505},"53cb5c4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6508,"children":6509},{},[6510,6512,6519],{"type":1138,"value":6511},"testing notes for the remaining right-click menus (",{"type":1133,"tag":1173,"props":6513,"children":6516},{"href":6514,"rel":6515},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffdbd9d59f89f025679c36097d0af5ab74bac558e",[1177],[6517],{"type":1138,"value":6518},"fdbd9d5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6521,"children":6522},{},[6523,6525,6532],{"type":1138,"value":6524},"console autocomplete testing notes (",{"type":1133,"tag":1173,"props":6526,"children":6529},{"href":6527,"rel":6528},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf19e3c75aff9294b4bf6aee6912e7baefc233ee",[1177],[6530],{"type":1138,"value":6531},"cf19e3c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6534,"children":6535},{},[6536,6538,6545],{"type":1138,"value":6537},"release summary for 1.3.0-beta.2 (",{"type":1133,"tag":1173,"props":6539,"children":6542},{"href":6540,"rel":6541},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F579cebd84facce001936a7f85e9c3c6edc2c55ad",[1177],[6543],{"type":1138,"value":6544},"579cebd",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6547,"children":6548},{},[6549,6551,6558],{"type":1138,"value":6550},"command palette testing notes (",{"type":1133,"tag":1173,"props":6552,"children":6555},{"href":6553,"rel":6554},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73d333f919d29b4327ecb6db0dc3a5f4391118b5",[1177],[6556],{"type":1138,"value":6557},"73d333f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6560,"children":6561},{},[6562,6564,6571],{"type":1138,"value":6563},"typing commands in the console (",{"type":1133,"tag":1173,"props":6565,"children":6568},{"href":6566,"rel":6567},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48ac8bdaadbec620b4b39188fe894cae09bb7c3a",[1177],[6569],{"type":1138,"value":6570},"48ac8bd",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6573,"children":6574},{},[6575,6577,6584],{"type":1138,"value":6576},"testing notes for list right-click menus (",{"type":1133,"tag":1173,"props":6578,"children":6581},{"href":6579,"rel":6580},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F501ebcccc4e9c61c6661391a48d4af8a5ddc7201",[1177],[6582],{"type":1138,"value":6583},"501ebcc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6586,"children":6587},{},[6588,6590,6597],{"type":1138,"value":6589},"right-click menus and 1.4.0 testing notes (",{"type":1133,"tag":1173,"props":6591,"children":6594},{"href":6592,"rel":6593},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe0ff693b2539cf7fcb2b98d54e1dea6a0e2e9cdb",[1177],[6595],{"type":1138,"value":6596},"e0ff693",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6599,"children":6600},{},[6601,6603,6610],{"type":1138,"value":6602},"native builds come from main now (",{"type":1133,"tag":1173,"props":6604,"children":6607},{"href":6605,"rel":6606},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98f4cc0fd4f7940804deb5fc4533cd48a4f4f9b0",[1177],[6608],{"type":1138,"value":6609},"98f4cc0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6612,"children":6613},{},[6614,6616,6623],{"type":1138,"value":6615},"release notes for 1.3.0-beta.1 and its native build (",{"type":1133,"tag":1173,"props":6617,"children":6620},{"href":6618,"rel":6619},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F915965641b2250e710093e2b5c83faaa7bbf41fd",[1177],[6621],{"type":1138,"value":6622},"9159656",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6625,"children":6626},{},[6627,6629,6636],{"type":1138,"value":6628},"the web map, drawn by Flytower (",{"type":1133,"tag":1173,"props":6630,"children":6633},{"href":6631,"rel":6632},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F22d7b6877ca4e5a9813ff3b3f4357d8a040e501d",[1177],[6634],{"type":1138,"value":6635},"22d7b68",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6638,"children":6639},{},[6640,6642,6649],{"type":1138,"value":6641},"give the player stats page its Help section and order (",{"type":1133,"tag":1173,"props":6643,"children":6646},{"href":6644,"rel":6645},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F28df4c6906d9f669dc9ecd473faf7dc2460af74d",[1177],[6647],{"type":1138,"value":6648},"28df4c6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6651,"children":6652},{},[6653,6655,6662],{"type":1138,"value":6654},"describe the Discord staff commands (",{"type":1133,"tag":1173,"props":6656,"children":6659},{"href":6657,"rel":6658},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd07764b85530440a85c0192c892d89ed1b0b0d2c",[1177],[6660],{"type":1138,"value":6661},"d07764b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6664,"children":6665},{},[6666,6668,6675],{"type":1138,"value":6667},"help frontmatter for the Discord page; move the 1.3.0 test script (",{"type":1133,"tag":1173,"props":6669,"children":6672},{"href":6670,"rel":6671},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe387eb9d16690b2e36d505009d7a7bfdd6578dee",[1177],[6673],{"type":1138,"value":6674},"e387eb9",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6677,"children":6678},{},[6679,6681,6688],{"type":1138,"value":6680},"\u002Fleaderboard and \u002Fstats in Discord (",{"type":1133,"tag":1173,"props":6682,"children":6685},{"href":6683,"rel":6684},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fac16e7b940d2b2d7543dd7f4570fcaa667a758cf",[1177],[6686],{"type":1138,"value":6687},"ac16e7b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6690,"children":6691},{},[6692,6694,6701],{"type":1138,"value":6693},"game chat to Discord, and how to test it (",{"type":1133,"tag":1173,"props":6695,"children":6698},{"href":6696,"rel":6697},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d2d5adb0490ab89fad27f17d6ed76ace247db9c",[1177],[6699],{"type":1138,"value":6700},"4d2d5ad",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6703,"children":6704},{},[6705,6707,6714],{"type":1138,"value":6706},"leaderboards on the public status page (",{"type":1133,"tag":1173,"props":6708,"children":6711},{"href":6709,"rel":6710},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc67c26f34298a8d33da0879da3473e8c84c8b8fe",[1177],[6712],{"type":1138,"value":6713},"c67c26f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6716,"children":6717},{},[6718,6720,6727],{"type":1138,"value":6719},"add Discord roles to the 1.3.0 testing checklist (",{"type":1133,"tag":1173,"props":6721,"children":6724},{"href":6722,"rel":6723},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff909aa5819f72dd70c7e6700caa25c4cb366bbae",[1177],[6725],{"type":1138,"value":6726},"f909aa5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6729,"children":6730},{},[6731,6733,6740],{"type":1138,"value":6732},"explain Discord role mapping (",{"type":1133,"tag":1173,"props":6734,"children":6737},{"href":6735,"rel":6736},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb572a224631d29b55a84ab5a6e68b7b1b9e05628",[1177],[6738],{"type":1138,"value":6739},"b572a22",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6742,"children":6743},{},[6744,6746,6753],{"type":1138,"value":6745},"explain player stats and the leaderboards (",{"type":1133,"tag":1173,"props":6747,"children":6750},{"href":6748,"rel":6749},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe04df362e8b1cf4babfd8828802c48cc9afe36f7",[1177],[6751],{"type":1138,"value":6752},"e04df36",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6755,"children":6756},{},[6757,6759,6766],{"type":1138,"value":6758},"describe the Discord commands and how to test them (",{"type":1133,"tag":1173,"props":6760,"children":6763},{"href":6761,"rel":6762},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc0320920c820b275648b3e80a0921024712bf59d",[1177],[6764],{"type":1138,"value":6765},"c032092",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6768,"children":6769},{},[6770,6772,6779],{"type":1138,"value":6771},"testing notes for Help in the panel (",{"type":1133,"tag":1173,"props":6773,"children":6776},{"href":6774,"rel":6775},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc979d6bddee533e59cba42d9db11b3e7c80b3469",[1177],[6777],{"type":1138,"value":6778},"c979d6b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6781,"children":6782},{},[6783,6785,6792],{"type":1138,"value":6784},"give every page a section, an order and the panel routes it explains (",{"type":1133,"tag":1173,"props":6786,"children":6789},{"href":6787,"rel":6788},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff02f7a32cfed69ddb92dcadf88739ee37974a36c",[1177],[6790],{"type":1138,"value":6791},"f02f7a3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6794,"children":6795},{},[6796,6798,6805],{"type":1138,"value":6797},"move release test scripts into docs\u002Ftesting (",{"type":1133,"tag":1173,"props":6799,"children":6802},{"href":6800,"rel":6801},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9968c23b7262a58c9d9a66a95976f338cb662fb4",[1177],[6803],{"type":1138,"value":6804},"9968c23",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6807,"children":6808},{},[6809,6811,6818],{"type":1138,"value":6810},"explain connecting a Discord app (",{"type":1133,"tag":1173,"props":6812,"children":6815},{"href":6813,"rel":6814},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5b9e5672666b2f7ecfa9ee92586e9c43a6979c6f",[1177],[6816],{"type":1138,"value":6817},"5b9e567",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6820,"children":6821},{},[6822,6824,6831],{"type":1138,"value":6823},"1.2.1-native.1 release summary (",{"type":1133,"tag":1173,"props":6825,"children":6828},{"href":6826,"rel":6827},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F142f156fc7dc38cb4a0274e538a7a413b6796659",[1177],[6829],{"type":1138,"value":6830},"142f156",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6833,"children":6834},{},[6835,6837,6844],{"type":1138,"value":6836},"release summary for 1.2.0-beta.2.native.1 (",{"type":1133,"tag":1173,"props":6838,"children":6841},{"href":6839,"rel":6840},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa51b4ef63a3009c54f587b3c170aef4d82a54d3e",[1177],[6842],{"type":1138,"value":6843},"a51b4ef",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6846,"children":6847},{},[6848,6850,6857,6858],{"type":1138,"value":6849},"record the decision to bring in Rust and Go (",{"type":1133,"tag":1173,"props":6851,"children":6854},{"href":6852,"rel":6853},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b954aba7ba6890cf938201999d8c994e9013d02",[1177],[6855],{"type":1138,"value":6856},"1b954ab",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":6859,"children":6861},{"href":5999,"rel":6860},[1177],[6862],{"type":1138,"value":6003},{"type":1133,"tag":1184,"props":6864,"children":6865},{"id":1664},[6866],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":6868,"children":6869},{},[6870,6883,6896,6909,6922,6939,6952,6965,6978,6991,7004,7017,7030,7043,7056,7073,7091,7109,7127],{"type":1133,"tag":1195,"props":6871,"children":6872},{},[6873,6875,6882],{"type":1138,"value":6874},"go back to the console before the crash banner check (",{"type":1133,"tag":1173,"props":6876,"children":6879},{"href":6877,"rel":6878},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff3fd59c125bb240479b8597f779a797132aecd9",[1177],[6880],{"type":1138,"value":6881},"ff3fd59",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6884,"children":6885},{},[6886,6888,6895],{"type":1138,"value":6887},"share the per-browser on\u002Foff switch (",{"type":1133,"tag":1173,"props":6889,"children":6892},{"href":6890,"rel":6891},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c156189100085a45a4e7a8edf9735bc788a57eb",[1177],[6893],{"type":1138,"value":6894},"4c15618",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6897,"children":6898},{},[6899,6901,6908],{"type":1138,"value":6900},"don't reuse a name the smoke test already declares (",{"type":1133,"tag":1173,"props":6902,"children":6905},{"href":6903,"rel":6904},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd9f516613937e2fed08a24bb9e3689b8cd38bb67",[1177],[6906],{"type":1138,"value":6907},"d9f5166",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6910,"children":6911},{},[6912,6914,6921],{"type":1138,"value":6913},"check console completion against a real server in E2E (",{"type":1133,"tag":1173,"props":6915,"children":6918},{"href":6916,"rel":6917},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Febc1b9605b1a204cdaf2fe7621c74f3ae6d72bba",[1177],[6919],{"type":1138,"value":6920},"ebc1b96",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6923,"children":6924},{},[6925,6929,6931,6938],{"type":1133,"tag":1146,"props":6926,"children":6927},{},[6928],{"type":1138,"value":4598},{"type":1138,"value":6930}," the clean-up route needs system.manage (",{"type":1133,"tag":1173,"props":6932,"children":6935},{"href":6933,"rel":6934},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F30c0a750a02e62e55c905f5e101320e3af2beedd",[1177],[6936],{"type":1138,"value":6937},"30c0a75",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6940,"children":6941},{},[6942,6944,6951],{"type":1138,"value":6943},"share the copy-with-toast helper between menus (",{"type":1133,"tag":1173,"props":6945,"children":6948},{"href":6946,"rel":6947},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ffe81ce3730e3205ef679dd56ba1f883209ffbe",[1177],[6949],{"type":1138,"value":6950},"1ffe81c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6953,"children":6954},{},[6955,6957,6964],{"type":1138,"value":6956},"right-click menu on a running server card in E2E (",{"type":1133,"tag":1173,"props":6958,"children":6961},{"href":6959,"rel":6960},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48e8af35471ced319ecf941f0c566bfc247f2186",[1177],[6962],{"type":1138,"value":6963},"48e8af3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6966,"children":6967},{},[6968,6970,6977],{"type":1138,"value":6969},"give the map's maximum-wait test room on a busy runner (",{"type":1133,"tag":1173,"props":6971,"children":6974},{"href":6972,"rel":6973},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7a1e449f946c2cc1f0615f2dd094394676b6c0ec",[1177],[6975],{"type":1138,"value":6976},"7a1e449",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6979,"children":6980},{},[6981,6983,6990],{"type":1138,"value":6982},"put the stats view in its own component so it can move pages (",{"type":1133,"tag":1173,"props":6984,"children":6987},{"href":6985,"rel":6986},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7cb89d6c104d629054f4e777ee903708828c9f94",[1177],[6988],{"type":1138,"value":6989},"7cb89d6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":6992,"children":6993},{},[6994,6996,7003],{"type":1138,"value":6995},"cover the Discord staff commands (",{"type":1133,"tag":1173,"props":6997,"children":7000},{"href":6998,"rel":6999},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F121aa25655bf9f60416ae9f7745863f7935e209f",[1177],[7001],{"type":1138,"value":7002},"121aa25",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7005,"children":7006},{},[7007,7009,7016],{"type":1138,"value":7008},"share player and power actions between the panel and Discord (",{"type":1133,"tag":1173,"props":7010,"children":7013},{"href":7011,"rel":7012},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa3f388facb2fc6ffc77da177ea1433bc46d3919c",[1177],[7014],{"type":1138,"value":7015},"a3f388f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7018,"children":7019},{},[7020,7022,7029],{"type":1138,"value":7021},"list the Discord role routes in the permission table (",{"type":1133,"tag":1173,"props":7023,"children":7026},{"href":7024,"rel":7025},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb8e731dd943031a0350c2094e6e04448991867f8",[1177],[7027],{"type":1138,"value":7028},"b8e731d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7031,"children":7032},{},[7033,7035,7042],{"type":1138,"value":7034},"cover Discord role mapping, refusals and Activity (",{"type":1133,"tag":1173,"props":7036,"children":7039},{"href":7037,"rel":7038},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2644a19f1ff8f5da504af138ff80269d90b1a887",[1177],[7040],{"type":1138,"value":7041},"2644a19",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7044,"children":7045},{},[7046,7048,7055],{"type":1138,"value":7047},"build a server's public status in one place (",{"type":1133,"tag":1173,"props":7049,"children":7052},{"href":7050,"rel":7051},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb993e3fc3b77a65f0a16bd3fcff6e941b64634b5",[1177],[7053],{"type":1138,"value":7054},"b993e3f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7057,"children":7058},{},[7059,7063,7065,7072],{"type":1133,"tag":1146,"props":7060,"children":7061},{},[7062],{"type":1138,"value":4598},{"type":1138,"value":7064}," rename parseMarkdown to parseNotes (",{"type":1133,"tag":1173,"props":7066,"children":7069},{"href":7067,"rel":7068},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc27e9ee8f86c31c62e7838c3ba8c6ffcc54be4b2",[1177],[7070],{"type":1138,"value":7071},"c27e9ee",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7074,"children":7075},{},[7076,7078,7085,7086],{"type":1138,"value":7077},"recognise native versions like 1.2.0-beta.2.native.1 (",{"type":1133,"tag":1173,"props":7079,"children":7082},{"href":7080,"rel":7081},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8253e5cdf990733ce21fa05f468d42e929bbb3eb",[1177],[7083],{"type":1138,"value":7084},"8253e5c",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":7087,"children":7089},{"href":5999,"rel":7088},[1177],[7090],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":7092,"children":7093},{},[7094,7096,7103,7104],{"type":1138,"value":7095},"release native builds under native- tags (",{"type":1133,"tag":1173,"props":7097,"children":7100},{"href":7098,"rel":7099},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6505c6179b4d93a9d9b1386916b2e70a4f1ab503",[1177],[7101],{"type":1138,"value":7102},"6505c61",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":7105,"children":7107},{"href":5999,"rel":7106},[1177],[7108],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":7110,"children":7111},{},[7112,7114,7121,7122],{"type":1138,"value":7113},"build flytower-du into releases and check it on amd64 and arm64 (",{"type":1133,"tag":1173,"props":7115,"children":7118},{"href":7116,"rel":7117},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5fa527286394087cd76424ff1e675d92ba3a6546",[1177],[7119],{"type":1138,"value":7120},"5fa5272",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":7123,"children":7125},{"href":6091,"rel":7124},[1177],[7126],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":7128,"children":7129},{},[7130,7134,7136,7143,7144],{"type":1133,"tag":1146,"props":7131,"children":7132},{},[7133],{"type":1138,"value":4931},{"type":1138,"value":7135}," shared fixtures every implementation must agree on (",{"type":1133,"tag":1173,"props":7137,"children":7140},{"href":7138,"rel":7139},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0480047f4f211eb631c8aa6ba931b1ad23c0be0",[1177],[7141],{"type":1138,"value":7142},"a048004",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":7145,"children":7147},{"href":6138,"rel":7146},[1177],[7148],{"type":1138,"value":6142},{"type":1133,"tag":1184,"props":7150,"children":7151},{"id":2327},[7152],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":7154,"children":7155},{},[7156,7169,7182,7194,7207,7219,7231,7243,7256,7269,7282,7295,7308,7321,7334],{"type":1133,"tag":1195,"props":7157,"children":7158},{},[7159,7161,7168],{"type":1138,"value":7160},"Merge main into feat\u002Fkeyboard-shortcuts (",{"type":1133,"tag":1173,"props":7162,"children":7165},{"href":7163,"rel":7164},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F284de08565952c7a7a607587edbcb5a10b8eca30",[1177],[7166],{"type":1138,"value":7167},"284de08",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7170,"children":7171},{},[7172,7174,7181],{"type":1138,"value":7173},"Merge main into feat\u002Fright-click-more (",{"type":1133,"tag":1173,"props":7175,"children":7178},{"href":7176,"rel":7177},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F74b5dd33fa9f006b37880b77f3297bb642faaf95",[1177],[7179],{"type":1138,"value":7180},"74b5dd3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7183,"children":7184},{},[7185,7186,7193],{"type":1138,"value":7160},{"type":1133,"tag":1173,"props":7187,"children":7190},{"href":7188,"rel":7189},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdee37e0b956d422c27fd8ed6c28be2d26849bca6",[1177],[7191],{"type":1138,"value":7192},"dee37e0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7195,"children":7196},{},[7197,7199,7206],{"type":1138,"value":7198},"Merge main into feat\u002Fsystem-disk-use (",{"type":1133,"tag":1173,"props":7200,"children":7203},{"href":7201,"rel":7202},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffddc78a4e252aeb84b1c6ceb2d288c36f377f2bd",[1177],[7204],{"type":1138,"value":7205},"fddc78a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7208,"children":7209},{},[7210,7211,7218],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":7212,"children":7215},{"href":7213,"rel":7214},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F18485b32af63d384a89e7d9001621bf93853b6e0",[1177],[7216],{"type":1138,"value":7217},"18485b3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7220,"children":7221},{},[7222,7223,7230],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":7224,"children":7227},{"href":7225,"rel":7226},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F165e561f8cc0f2860efe3ca9843a81591f385564",[1177],[7228],{"type":1138,"value":7229},"165e561",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7232,"children":7233},{},[7234,7235,7242],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":7236,"children":7239},{"href":7237,"rel":7238},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3b03cfca874e1d73e6e2051bd22e3daa28d829cd",[1177],[7240],{"type":1138,"value":7241},"3b03cfc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7244,"children":7245},{},[7246,7248,7255],{"type":1138,"value":7247},"Merge main into feat\u002Fserver-tabs (",{"type":1133,"tag":1173,"props":7249,"children":7252},{"href":7250,"rel":7251},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0ed60579436e733221940ae47dd24dbe96f84656",[1177],[7253],{"type":1138,"value":7254},"0ed6057",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7257,"children":7258},{},[7259,7261,7268],{"type":1138,"value":7260},"Merge main into feat\u002Fmap-public (",{"type":1133,"tag":1173,"props":7262,"children":7265},{"href":7263,"rel":7264},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc45486beb1c0b9714098643626867d0afe2eaf8",[1177],[7266],{"type":1138,"value":7267},"cc45486",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7270,"children":7271},{},[7272,7274,7281],{"type":1138,"value":7273},"Merge main into feat\u002Fmap-panel; renumber the map migration to 0021 (",{"type":1133,"tag":1173,"props":7275,"children":7278},{"href":7276,"rel":7277},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F78d26aaee6f7150d3700486ad4a0667e1c0ea75c",[1177],[7279],{"type":1138,"value":7280},"78d26aa",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7283,"children":7284},{},[7285,7287,7294],{"type":1138,"value":7286},"Merge main into feat\u002Fmap-renderer (",{"type":1133,"tag":1173,"props":7288,"children":7291},{"href":7289,"rel":7290},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F134ffd089ce48b8edcb9baef205fad282b5b3c2d",[1177],[7292],{"type":1138,"value":7293},"134ffd0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7296,"children":7297},{},[7298,7300,7307],{"type":1138,"value":7299},"Merge main into feat\u002Fdiscord-staff-commands (",{"type":1133,"tag":1173,"props":7301,"children":7304},{"href":7302,"rel":7303},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4c27238ca70bcd2cdc9933907559ba99b3fbcdbb",[1177],[7305],{"type":1138,"value":7306},"4c27238",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7309,"children":7310},{},[7311,7313,7320],{"type":1138,"value":7312},"Merge main into feat\u002Fdiscord-roles (",{"type":1133,"tag":1173,"props":7314,"children":7317},{"href":7315,"rel":7316},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2dec38f71d8788640f389223688af29231059e9e",[1177],[7318],{"type":1138,"value":7319},"2dec38f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7322,"children":7323},{},[7324,7326,7333],{"type":1138,"value":7325},"Merge v1.2.1 into native (",{"type":1133,"tag":1173,"props":7327,"children":7330},{"href":7328,"rel":7329},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9edc05ab72c6a6352bbfa46bb7b516086c64d88a",[1177],[7331],{"type":1138,"value":7332},"9edc05a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7335,"children":7336},{},[7337,7339,7346],{"type":1138,"value":7338},"Merge v1.2.0-beta.2 into native (",{"type":1133,"tag":1173,"props":7340,"children":7343},{"href":7341,"rel":7342},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb389c71d2577ee7ca221bbdda32b84aa752ccc90",[1177],[7344],{"type":1138,"value":7345},"b389c71",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":7348,"children":7349},{},[7350,7354,7355],{"type":1133,"tag":1146,"props":7351,"children":7352},{},[7353],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":7356,"children":7359},{"href":7357,"rel":7358},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.1...v1.3.0",[1177],[7360],{"type":1138,"value":7357},{"data":7362,"body":7363},{},{"type":1130,"children":7364},[7365,7416,7454,7476,7502,7506,7863,7867,7930,7934,8017,8021,8088,8092,8145],{"type":1133,"tag":1134,"props":7366,"children":7367},{},[7368,7370,7375,7376,7380,7381,7386,7387,7391,7392,7397,7398,7402,7404,7408,7410,7414],{"type":1138,"value":7369},"The server page is simpler. It now has six tabs instead of twelve: ",{"type":1133,"tag":1146,"props":7371,"children":7372},{},[7373],{"type":1138,"value":7374},"Console",{"type":1138,"value":4122},{"type":1133,"tag":1146,"props":7377,"children":7378},{},[7379],{"type":1138,"value":809},{"type":1138,"value":4122},{"type":1133,"tag":1146,"props":7382,"children":7383},{},[7384],{"type":1138,"value":7385},"Content",{"type":1138,"value":4122},{"type":1133,"tag":1146,"props":7388,"children":7389},{},[7390],{"type":1138,"value":3927},{"type":1138,"value":4122},{"type":1133,"tag":1146,"props":7393,"children":7394},{},[7395],{"type":1138,"value":7396},"Files",{"type":1138,"value":1838},{"type":1133,"tag":1146,"props":7399,"children":7400},{},[7401],{"type":1138,"value":1746},{"type":1138,"value":7403},". Logs and crashes open in a large pop-up from the console, stats sit on the ",{"type":1133,"tag":1146,"props":7405,"children":7406},{},[7407],{"type":1138,"value":809},{"type":1138,"value":7409}," tab, and backups, the web map, past worlds and world tools are grouped in a side menu on ",{"type":1133,"tag":1146,"props":7411,"children":7412},{},[7413],{"type":1138,"value":3927},{"type":1138,"value":7415},". 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.",{"type":1133,"tag":1134,"props":7417,"children":7418},{},[7419,7421,7425,7427,7432,7434,7438,7440,7445,7447,7452],{"type":1138,"value":7420},"The panel is also quicker to get around. Server cards, files, backups and content have ",{"type":1133,"tag":1146,"props":7422,"children":7423},{},[7424],{"type":1138,"value":4196},{"type":1138,"value":7426}," with the same actions as their ",{"type":1133,"tag":1146,"props":7428,"children":7429},{},[7430],{"type":1138,"value":7431},"⋯",{"type":1138,"value":7433}," buttons. On a phone, press and hold to get them. Shift and right-click still gives the browser's own menu. ",{"type":1133,"tag":1146,"props":7435,"children":7436},{},[7437],{"type":1138,"value":4203},{"type":1138,"value":7439}," (⌘K on a Mac) now finds servers, their tabs and actions, and the panel's pages, as well as help. The ",{"type":1133,"tag":1146,"props":7441,"children":7442},{},[7443],{"type":1138,"value":7444},"console",{"type":1138,"value":7446}," suggests commands as you type, including player names, item and block ids, and commands added by mods and plugins. Press ",{"type":1133,"tag":1146,"props":7448,"children":7449},{},[7450],{"type":1138,"value":7451},"Tab",{"type":1138,"value":7453}," to fill one in.",{"type":1133,"tag":1134,"props":7455,"children":7456},{},[7457,7461,7463,7468,7470,7475],{"type":1133,"tag":1146,"props":7458,"children":7459},{},[7460],{"type":1138,"value":4238},{"type":1138,"value":7462}," now breaks down what's outside your servers into Java runtimes, Flytower, system logs, package cache and the operating system. ",{"type":1133,"tag":1146,"props":7464,"children":7465},{},[7466],{"type":1138,"value":7467},"Clean up",{"type":1138,"value":7469}," can shrink the system journal, clear the package cache, or remove old Flytower versions. Each one asks for your passkey and is recorded in ",{"type":1133,"tag":1146,"props":7471,"children":7472},{},[7473],{"type":1138,"value":7474},"Activity",{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":7477,"children":7478},{},[7479,7481,7485,7487,7493,7495,7501],{"type":1138,"value":7480},"Discord chat now posts joins and leaves (they were blank before) and can post deaths and advancements, with a switch for each on the ",{"type":1133,"tag":1146,"props":7482,"children":7483},{},[7484],{"type":1138,"value":1785},{"type":1138,"value":7486}," 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 ",{"type":1133,"tag":1173,"props":7488,"children":7491},{"href":7489,"rel":7490},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.3\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md",[1177],[7492],{"type":1138,"value":4283},{"type":1138,"value":7494},", and disk use is in ",{"type":1133,"tag":1173,"props":7496,"children":7499},{"href":7497,"rel":7498},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.3\u002Fdocs\u002Ftesting\u002Ftesting-1.4.0.md",[1177],[7500],{"type":1138,"value":1180},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":7503,"children":7504},{"id":1186},[7505],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":7507,"children":7508},{},[7509,7519,7529,7539,7549,7559,7569,7579,7589,7603,7613,7623,7633,7643,7653,7663,7673,7683,7697,7707,7721,7731,7741,7751,7761,7771,7785,7795,7805,7815,7825,7835,7849],{"type":1133,"tag":1195,"props":7510,"children":7511},{},[7512,7513,7518],{"type":1138,"value":4387},{"type":1133,"tag":1173,"props":7514,"children":7516},{"href":4390,"rel":7515},[1177],[7517],{"type":1138,"value":4394},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7520,"children":7521},{},[7522,7523,7528],{"type":1138,"value":4465},{"type":1133,"tag":1173,"props":7524,"children":7526},{"href":4468,"rel":7525},[1177],[7527],{"type":1138,"value":4472},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7530,"children":7531},{},[7532,7533,7538],{"type":1138,"value":4478},{"type":1133,"tag":1173,"props":7534,"children":7536},{"href":4481,"rel":7535},[1177],[7537],{"type":1138,"value":4485},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7540,"children":7541},{},[7542,7543,7548],{"type":1138,"value":4491},{"type":1133,"tag":1173,"props":7544,"children":7546},{"href":4494,"rel":7545},[1177],[7547],{"type":1138,"value":4498},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7550,"children":7551},{},[7552,7553,7558],{"type":1138,"value":4504},{"type":1133,"tag":1173,"props":7554,"children":7556},{"href":4507,"rel":7555},[1177],[7557],{"type":1138,"value":4511},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7560,"children":7561},{},[7562,7563,7568],{"type":1138,"value":4517},{"type":1133,"tag":1173,"props":7564,"children":7566},{"href":4520,"rel":7565},[1177],[7567],{"type":1138,"value":4524},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7570,"children":7571},{},[7572,7573,7578],{"type":1138,"value":4530},{"type":1133,"tag":1173,"props":7574,"children":7576},{"href":4533,"rel":7575},[1177],[7577],{"type":1138,"value":4537},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7580,"children":7581},{},[7582,7583,7588],{"type":1138,"value":4543},{"type":1133,"tag":1173,"props":7584,"children":7586},{"href":4546,"rel":7585},[1177],[7587],{"type":1138,"value":4550},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7590,"children":7591},{},[7592,7596,7597,7602],{"type":1133,"tag":1146,"props":7593,"children":7594},{},[7595],{"type":1138,"value":4598},{"type":1138,"value":4600},{"type":1133,"tag":1173,"props":7598,"children":7600},{"href":4603,"rel":7599},[1177],[7601],{"type":1138,"value":4607},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7604,"children":7605},{},[7606,7607,7612],{"type":1138,"value":4613},{"type":1133,"tag":1173,"props":7608,"children":7610},{"href":4616,"rel":7609},[1177],[7611],{"type":1138,"value":4620},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7614,"children":7615},{},[7616,7617,7622],{"type":1138,"value":4626},{"type":1133,"tag":1173,"props":7618,"children":7620},{"href":4629,"rel":7619},[1177],[7621],{"type":1138,"value":4633},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7624,"children":7625},{},[7626,7627,7632],{"type":1138,"value":4639},{"type":1133,"tag":1173,"props":7628,"children":7630},{"href":4642,"rel":7629},[1177],[7631],{"type":1138,"value":4646},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7634,"children":7635},{},[7636,7637,7642],{"type":1138,"value":4652},{"type":1133,"tag":1173,"props":7638,"children":7640},{"href":4655,"rel":7639},[1177],[7641],{"type":1138,"value":4659},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7644,"children":7645},{},[7646,7647,7652],{"type":1138,"value":4665},{"type":1133,"tag":1173,"props":7648,"children":7650},{"href":4668,"rel":7649},[1177],[7651],{"type":1138,"value":4672},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7654,"children":7655},{},[7656,7657,7662],{"type":1138,"value":4678},{"type":1133,"tag":1173,"props":7658,"children":7660},{"href":4681,"rel":7659},[1177],[7661],{"type":1138,"value":4685},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7664,"children":7665},{},[7666,7667,7672],{"type":1138,"value":4691},{"type":1133,"tag":1173,"props":7668,"children":7670},{"href":4694,"rel":7669},[1177],[7671],{"type":1138,"value":4698},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7674,"children":7675},{},[7676,7677,7682],{"type":1138,"value":4704},{"type":1133,"tag":1173,"props":7678,"children":7680},{"href":4707,"rel":7679},[1177],[7681],{"type":1138,"value":4711},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7684,"children":7685},{},[7686,7690,7691,7696],{"type":1133,"tag":1146,"props":7687,"children":7688},{},[7689],{"type":1138,"value":4598},{"type":1138,"value":4721},{"type":1133,"tag":1173,"props":7692,"children":7694},{"href":4724,"rel":7693},[1177],[7695],{"type":1138,"value":4728},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7698,"children":7699},{},[7700,7701,7706],{"type":1138,"value":4734},{"type":1133,"tag":1173,"props":7702,"children":7704},{"href":4737,"rel":7703},[1177],[7705],{"type":1138,"value":4741},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7708,"children":7709},{},[7710,7714,7715,7720],{"type":1133,"tag":1146,"props":7711,"children":7712},{},[7713],{"type":1138,"value":4598},{"type":1138,"value":4751},{"type":1133,"tag":1173,"props":7716,"children":7718},{"href":4754,"rel":7717},[1177],[7719],{"type":1138,"value":4758},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7722,"children":7723},{},[7724,7725,7730],{"type":1138,"value":4764},{"type":1133,"tag":1173,"props":7726,"children":7728},{"href":4767,"rel":7727},[1177],[7729],{"type":1138,"value":4771},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7732,"children":7733},{},[7734,7735,7740],{"type":1138,"value":4777},{"type":1133,"tag":1173,"props":7736,"children":7738},{"href":4780,"rel":7737},[1177],[7739],{"type":1138,"value":4784},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7742,"children":7743},{},[7744,7745,7750],{"type":1138,"value":4790},{"type":1133,"tag":1173,"props":7746,"children":7748},{"href":4793,"rel":7747},[1177],[7749],{"type":1138,"value":4797},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7752,"children":7753},{},[7754,7755,7760],{"type":1138,"value":4803},{"type":1133,"tag":1173,"props":7756,"children":7758},{"href":4806,"rel":7757},[1177],[7759],{"type":1138,"value":4810},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7762,"children":7763},{},[7764,7765,7770],{"type":1138,"value":4816},{"type":1133,"tag":1173,"props":7766,"children":7768},{"href":4819,"rel":7767},[1177],[7769],{"type":1138,"value":4823},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7772,"children":7773},{},[7774,7778,7779,7784],{"type":1133,"tag":1146,"props":7775,"children":7776},{},[7777],{"type":1138,"value":1221},{"type":1138,"value":4833},{"type":1133,"tag":1173,"props":7780,"children":7782},{"href":4836,"rel":7781},[1177],[7783],{"type":1138,"value":4840},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7786,"children":7787},{},[7788,7789,7794],{"type":1138,"value":4846},{"type":1133,"tag":1173,"props":7790,"children":7792},{"href":4849,"rel":7791},[1177],[7793],{"type":1138,"value":4853},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7796,"children":7797},{},[7798,7799,7804],{"type":1138,"value":4859},{"type":1133,"tag":1173,"props":7800,"children":7802},{"href":4862,"rel":7801},[1177],[7803],{"type":1138,"value":4866},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7806,"children":7807},{},[7808,7809,7814],{"type":1138,"value":4872},{"type":1133,"tag":1173,"props":7810,"children":7812},{"href":4875,"rel":7811},[1177],[7813],{"type":1138,"value":4879},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7816,"children":7817},{},[7818,7819,7824],{"type":1138,"value":4885},{"type":1133,"tag":1173,"props":7820,"children":7822},{"href":4888,"rel":7821},[1177],[7823],{"type":1138,"value":4892},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7826,"children":7827},{},[7828,7829,7834],{"type":1138,"value":4898},{"type":1133,"tag":1173,"props":7830,"children":7832},{"href":4901,"rel":7831},[1177],[7833],{"type":1138,"value":4905},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7836,"children":7837},{},[7838,7842,7843,7848],{"type":1133,"tag":1146,"props":7839,"children":7840},{},[7841],{"type":1138,"value":1221},{"type":1138,"value":4915},{"type":1133,"tag":1173,"props":7844,"children":7846},{"href":4918,"rel":7845},[1177],[7847],{"type":1138,"value":4922},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7850,"children":7851},{},[7852,7856,7857,7862],{"type":1133,"tag":1146,"props":7853,"children":7854},{},[7855],{"type":1138,"value":4931},{"type":1138,"value":4933},{"type":1133,"tag":1173,"props":7858,"children":7860},{"href":4936,"rel":7859},[1177],[7861],{"type":1138,"value":4940},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":7864,"children":7865},{"id":1233},[7866],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":7868,"children":7869},{},[7870,7880,7890,7900,7910,7920],{"type":1133,"tag":1195,"props":7871,"children":7872},{},[7873,7874,7879],{"type":1138,"value":6240},{"type":1133,"tag":1173,"props":7875,"children":7877},{"href":6243,"rel":7876},[1177],[7878],{"type":1138,"value":6247},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7881,"children":7882},{},[7883,7884,7889],{"type":1138,"value":6253},{"type":1133,"tag":1173,"props":7885,"children":7887},{"href":6256,"rel":7886},[1177],[7888],{"type":1138,"value":6260},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7891,"children":7892},{},[7893,7894,7899],{"type":1138,"value":6266},{"type":1133,"tag":1173,"props":7895,"children":7897},{"href":6269,"rel":7896},[1177],[7898],{"type":1138,"value":6273},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7901,"children":7902},{},[7903,7904,7909],{"type":1138,"value":6279},{"type":1133,"tag":1173,"props":7905,"children":7907},{"href":6282,"rel":7906},[1177],[7908],{"type":1138,"value":6286},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7911,"children":7912},{},[7913,7914,7919],{"type":1138,"value":6318},{"type":1133,"tag":1173,"props":7915,"children":7917},{"href":6321,"rel":7916},[1177],[7918],{"type":1138,"value":6325},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7921,"children":7922},{},[7923,7924,7929],{"type":1138,"value":6331},{"type":1133,"tag":1173,"props":7925,"children":7927},{"href":6334,"rel":7926},[1177],[7928],{"type":1138,"value":6338},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":7931,"children":7932},{"id":7},[7933],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":7935,"children":7936},{},[7937,7947,7957,7967,7977,7987,7997,8007],{"type":1133,"tag":1195,"props":7938,"children":7939},{},[7940,7941,7946],{"type":1138,"value":6459},{"type":1133,"tag":1173,"props":7942,"children":7944},{"href":6462,"rel":7943},[1177],[7945],{"type":1138,"value":6466},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7948,"children":7949},{},[7950,7951,7956],{"type":1138,"value":6485},{"type":1133,"tag":1173,"props":7952,"children":7954},{"href":6488,"rel":7953},[1177],[7955],{"type":1138,"value":6492},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7958,"children":7959},{},[7960,7961,7966],{"type":1138,"value":6498},{"type":1133,"tag":1173,"props":7962,"children":7964},{"href":6501,"rel":7963},[1177],[7965],{"type":1138,"value":6505},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7968,"children":7969},{},[7970,7971,7976],{"type":1138,"value":6524},{"type":1133,"tag":1173,"props":7972,"children":7974},{"href":6527,"rel":7973},[1177],[7975],{"type":1138,"value":6531},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7978,"children":7979},{},[7980,7981,7986],{"type":1138,"value":6550},{"type":1133,"tag":1173,"props":7982,"children":7984},{"href":6553,"rel":7983},[1177],[7985],{"type":1138,"value":6557},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7988,"children":7989},{},[7990,7991,7996],{"type":1138,"value":6563},{"type":1133,"tag":1173,"props":7992,"children":7994},{"href":6566,"rel":7993},[1177],[7995],{"type":1138,"value":6570},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":7998,"children":7999},{},[8000,8001,8006],{"type":1138,"value":6576},{"type":1133,"tag":1173,"props":8002,"children":8004},{"href":6579,"rel":8003},[1177],[8005],{"type":1138,"value":6583},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8008,"children":8009},{},[8010,8011,8016],{"type":1138,"value":6589},{"type":1133,"tag":1173,"props":8012,"children":8014},{"href":6592,"rel":8013},[1177],[8015],{"type":1138,"value":6596},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":8018,"children":8019},{"id":1664},[8020],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":8022,"children":8023},{},[8024,8034,8044,8054,8068,8078],{"type":1133,"tag":1195,"props":8025,"children":8026},{},[8027,8028,8033],{"type":1138,"value":6874},{"type":1133,"tag":1173,"props":8029,"children":8031},{"href":6877,"rel":8030},[1177],[8032],{"type":1138,"value":6881},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8035,"children":8036},{},[8037,8038,8043],{"type":1138,"value":6900},{"type":1133,"tag":1173,"props":8039,"children":8041},{"href":6903,"rel":8040},[1177],[8042],{"type":1138,"value":6907},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8045,"children":8046},{},[8047,8048,8053],{"type":1138,"value":6913},{"type":1133,"tag":1173,"props":8049,"children":8051},{"href":6916,"rel":8050},[1177],[8052],{"type":1138,"value":6920},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8055,"children":8056},{},[8057,8061,8062,8067],{"type":1133,"tag":1146,"props":8058,"children":8059},{},[8060],{"type":1138,"value":4598},{"type":1138,"value":6930},{"type":1133,"tag":1173,"props":8063,"children":8065},{"href":6933,"rel":8064},[1177],[8066],{"type":1138,"value":6937},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8069,"children":8070},{},[8071,8072,8077],{"type":1138,"value":6943},{"type":1133,"tag":1173,"props":8073,"children":8075},{"href":6946,"rel":8074},[1177],[8076],{"type":1138,"value":6950},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8079,"children":8080},{},[8081,8082,8087],{"type":1138,"value":6956},{"type":1133,"tag":1173,"props":8083,"children":8085},{"href":6959,"rel":8084},[1177],[8086],{"type":1138,"value":6963},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":8089,"children":8090},{"id":2327},[8091],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":8093,"children":8094},{},[8095,8105,8115,8125,8135],{"type":1133,"tag":1195,"props":8096,"children":8097},{},[8098,8099,8104],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":8100,"children":8102},{"href":7201,"rel":8101},[1177],[8103],{"type":1138,"value":7205},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8106,"children":8107},{},[8108,8109,8114],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":8110,"children":8112},{"href":7213,"rel":8111},[1177],[8113],{"type":1138,"value":7217},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8116,"children":8117},{},[8118,8119,8124],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":8120,"children":8122},{"href":7225,"rel":8121},[1177],[8123],{"type":1138,"value":7229},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8126,"children":8127},{},[8128,8129,8134],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":8130,"children":8132},{"href":7237,"rel":8131},[1177],[8133],{"type":1138,"value":7241},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8136,"children":8137},{},[8138,8139,8144],{"type":1138,"value":7247},{"type":1133,"tag":1173,"props":8140,"children":8142},{"href":7250,"rel":8141},[1177],[8143],{"type":1138,"value":7254},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":8146,"children":8147},{},[8148,8152,8153],{"type":1133,"tag":1146,"props":8149,"children":8150},{},[8151],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":8154,"children":8157},{"href":8155,"rel":8156},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.0-beta.2...v1.3.0-beta.3",[1177],[8158],{"type":1138,"value":8155},{"data":8160,"body":8161},{},{"type":1130,"children":8162},[8163,8174,8191,8210,8214,8247,8251,8284,8288,8311],{"type":1133,"tag":1134,"props":8164,"children":8165},{},[8166,8168,8172],{"type":1138,"value":8167},"The ",{"type":1133,"tag":1146,"props":8169,"children":8170},{},[8171],{"type":1138,"value":4184},{"type":1138,"value":8173}," 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.",{"type":1133,"tag":1134,"props":8175,"children":8176},{},[8177,8179,8183,8185,8189],{"type":1138,"value":8178},"While the map is being drawn, the ",{"type":1133,"tag":1146,"props":8180,"children":8181},{},[8182],{"type":1138,"value":68},{"type":1138,"value":8184}," card on the ",{"type":1133,"tag":1146,"props":8186,"children":8187},{},[8188],{"type":1138,"value":3927},{"type":1138,"value":8190}," 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.",{"type":1133,"tag":1134,"props":8192,"children":8193},{},[8194,8196,8201,8203,8209],{"type":1138,"value":8195},"Testing: update, open ",{"type":1133,"tag":1146,"props":8197,"children":8198},{},[8199],{"type":1138,"value":8200},"World → Web map",{"type":1138,"value":8202}," 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 ",{"type":1133,"tag":1173,"props":8204,"children":8207},{"href":8205,"rel":8206},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.2\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md",[1177],[8208],{"type":1138,"value":4283},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":8211,"children":8212},{"id":1186},[8213],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":8215,"children":8216},{},[8217,8227,8237],{"type":1133,"tag":1195,"props":8218,"children":8219},{},[8220,8221,8226],{"type":1138,"value":4556},{"type":1133,"tag":1173,"props":8222,"children":8224},{"href":4559,"rel":8223},[1177],[8225],{"type":1138,"value":4563},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8228,"children":8229},{},[8230,8231,8236],{"type":1138,"value":4569},{"type":1133,"tag":1173,"props":8232,"children":8234},{"href":4572,"rel":8233},[1177],[8235],{"type":1138,"value":4576},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8238,"children":8239},{},[8240,8241,8246],{"type":1138,"value":4582},{"type":1133,"tag":1173,"props":8242,"children":8244},{"href":4585,"rel":8243},[1177],[8245],{"type":1138,"value":4589},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":8248,"children":8249},{"id":1233},[8250],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":8252,"children":8253},{},[8254,8264,8274],{"type":1133,"tag":1195,"props":8255,"children":8256},{},[8257,8258,8263],{"type":1138,"value":6292},{"type":1133,"tag":1173,"props":8259,"children":8261},{"href":6295,"rel":8260},[1177],[8262],{"type":1138,"value":6299},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8265,"children":8266},{},[8267,8268,8273],{"type":1138,"value":6305},{"type":1133,"tag":1173,"props":8269,"children":8271},{"href":6308,"rel":8270},[1177],[8272],{"type":1138,"value":6312},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8275,"children":8276},{},[8277,8278,8283],{"type":1138,"value":6344},{"type":1133,"tag":1173,"props":8279,"children":8281},{"href":6347,"rel":8280},[1177],[8282],{"type":1138,"value":6351},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":8285,"children":8286},{"id":7},[8287],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":8289,"children":8290},{},[8291,8301],{"type":1133,"tag":1195,"props":8292,"children":8293},{},[8294,8295,8300],{"type":1138,"value":6537},{"type":1133,"tag":1173,"props":8296,"children":8298},{"href":6540,"rel":8297},[1177],[8299],{"type":1138,"value":6544},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8302,"children":8303},{},[8304,8305,8310],{"type":1138,"value":6602},{"type":1133,"tag":1173,"props":8306,"children":8308},{"href":6605,"rel":8307},[1177],[8309],{"type":1138,"value":6609},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":8312,"children":8313},{},[8314,8318,8319],{"type":1133,"tag":1146,"props":8315,"children":8316},{},[8317],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":8320,"children":8323},{"href":8321,"rel":8322},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.3.0-beta.1...v1.3.0-beta.2",[1177],[8324],{"type":1138,"value":8321},{"data":8326,"body":8327},{},{"type":1130,"children":8328},[8329,8423,8485,8497,8501,9494,9498,9565,9569,9767,9771,9922,9926,9999],{"type":1133,"tag":1134,"props":8330,"children":8331},{},[8332,8334,8339,8341,8345,8347,8352,8353,8358,8359,8364,8365,8370,8372,8377,8378,8383,8384,8389,8390,8395,8397,8401,8403,8407,8409,8415,8416,8422],{"type":1138,"value":8333},"The first 1.3.0 beta brings your community into Flytower. Each server has a new ",{"type":1133,"tag":1146,"props":8335,"children":8336},{},[8337],{"type":1138,"value":8338},"Stats",{"type":1138,"value":8340}," 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 ",{"type":1133,"tag":1146,"props":8342,"children":8343},{},[8344],{"type":1138,"value":1778},{"type":1138,"value":8346}," with its bot token, and ",{"type":1133,"tag":1789,"props":8348,"children":8350},{"className":8349},[],[8351],{"type":1138,"value":4120},{"type":1138,"value":4122},{"type":1133,"tag":1789,"props":8354,"children":8356},{"className":8355},[],[8357],{"type":1138,"value":4128},{"type":1138,"value":4122},{"type":1133,"tag":1789,"props":8360,"children":8362},{"className":8361},[],[8363],{"type":1138,"value":4135},{"type":1138,"value":1838},{"type":1133,"tag":1789,"props":8366,"children":8368},{"className":8367},[],[8369],{"type":1138,"value":4142},{"type":1138,"value":8371}," work straight away. Give a Discord role a Flytower role and its members can use ",{"type":1133,"tag":1789,"props":8373,"children":8375},{"className":8374},[],[8376],{"type":1138,"value":4150},{"type":1138,"value":4122},{"type":1133,"tag":1789,"props":8379,"children":8381},{"className":8380},[],[8382],{"type":1138,"value":4157},{"type":1138,"value":4122},{"type":1133,"tag":1789,"props":8385,"children":8387},{"className":8386},[],[8388],{"type":1138,"value":4164},{"type":1138,"value":1838},{"type":1133,"tag":1789,"props":8391,"children":8393},{"className":8392},[],[8394],{"type":1138,"value":4171},{"type":1138,"value":8396},", with every command in ",{"type":1133,"tag":1146,"props":8398,"children":8399},{},[8400],{"type":1138,"value":7474},{"type":1138,"value":8402}," as \"Name via Discord\". A server's ",{"type":1133,"tag":1146,"props":8404,"children":8405},{},[8406],{"type":1138,"value":1746},{"type":1138,"value":8408}," can also post game chat, joins and leaves to a Discord channel through a webhook. See ",{"type":1133,"tag":1173,"props":8410,"children":8413},{"href":8411,"rel":8412},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Fstats.md",[1177],[8414],{"type":1138,"value":98},{"type":1138,"value":1838},{"type":1133,"tag":1173,"props":8417,"children":8420},{"href":8418,"rel":8419},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Fdiscord.md",[1177],[8421],{"type":1138,"value":568},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":8424,"children":8425},{},[8426,8428,8432,8434,8438,8440,8444,8446,8450,8452,8456,8458,8463,8465,8469,8470,8476,8478,8484],{"type":1138,"value":8427},"Servers can now have a ",{"type":1133,"tag":1146,"props":8429,"children":8430},{},[8431],{"type":1138,"value":4184},{"type":1138,"value":8433},", 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 ",{"type":1133,"tag":1146,"props":8435,"children":8436},{},[8437],{"type":1138,"value":3927},{"type":1138,"value":8439}," 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 ",{"type":1133,"tag":1146,"props":8441,"children":8442},{},[8443],{"type":1138,"value":4231},{"type":1138,"value":8445}," built in, with the docs for the version you're running in the sidebar, a ",{"type":1133,"tag":1146,"props":8447,"children":8448},{},[8449],{"type":1138,"value":4217},{"type":1138,"value":8451}," on every page and search on Ctrl+K. ",{"type":1133,"tag":1146,"props":8453,"children":8454},{},[8455],{"type":1138,"value":4238},{"type":1138,"value":8457}," now measures with ",{"type":1133,"tag":1789,"props":8459,"children":8461},{"className":8460},[],[8462],{"type":1138,"value":4251},{"type":1138,"value":8464},", a small Rust program that's much quicker on big worlds. The Rust rewrite of the system helper ships too, but it's ",{"type":1133,"tag":1146,"props":8466,"children":8467},{},[8468],{"type":1138,"value":4266},{"type":1138,"value":4268},{"type":1133,"tag":1173,"props":8471,"children":8474},{"href":8472,"rel":8473},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[8475],{"type":1138,"value":1845},{"type":1138,"value":8477},"). See ",{"type":1133,"tag":1173,"props":8479,"children":8482},{"href":8480,"rel":8481},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Fmap.md",[1177],[8483],{"type":1138,"value":68},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":8486,"children":8487},{},[8488,8490,8496],{"type":1138,"value":8489},"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 ",{"type":1133,"tag":1173,"props":8491,"children":8494},{"href":8492,"rel":8493},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.3.0-beta.1\u002Fdocs\u002Ftesting\u002Ftesting-1.3.0.md",[1177],[8495],{"type":1138,"value":4283},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":8498,"children":8499},{"id":1186},[8500],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":8502,"children":8503},{},[8504,8514,8524,8534,8544,8554,8564,8578,8588,8598,8608,8618,8628,8638,8648,8658,8668,8678,8688,8698,8708,8718,8728,8738,8748,8758,8768,8778,8788,8798,8808,8818,8828,8838,8848,8858,8868,8878,8888,8898,8908,8918,8928,8938,8948,8958,8968,8978,8988,8998,9008,9018,9028,9038,9048,9058,9068,9078,9092,9106,9120,9134,9144,9154,9164,9174,9184,9194,9204,9214,9224,9234,9244,9254,9264,9274,9284,9294,9304,9323,9342,9361,9380,9399,9418,9437,9456,9475],{"type":1133,"tag":1195,"props":8505,"children":8506},{},[8507,8508,8513],{"type":1138,"value":4946},{"type":1133,"tag":1173,"props":8509,"children":8511},{"href":4949,"rel":8510},[1177],[8512],{"type":1138,"value":4953},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8515,"children":8516},{},[8517,8518,8523],{"type":1138,"value":4959},{"type":1133,"tag":1173,"props":8519,"children":8521},{"href":4962,"rel":8520},[1177],[8522],{"type":1138,"value":4966},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8525,"children":8526},{},[8527,8528,8533],{"type":1138,"value":4972},{"type":1133,"tag":1173,"props":8529,"children":8531},{"href":4975,"rel":8530},[1177],[8532],{"type":1138,"value":4979},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8535,"children":8536},{},[8537,8538,8543],{"type":1138,"value":4985},{"type":1133,"tag":1173,"props":8539,"children":8541},{"href":4988,"rel":8540},[1177],[8542],{"type":1138,"value":4992},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8545,"children":8546},{},[8547,8548,8553],{"type":1138,"value":4998},{"type":1133,"tag":1173,"props":8549,"children":8551},{"href":5001,"rel":8550},[1177],[8552],{"type":1138,"value":5005},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8555,"children":8556},{},[8557,8558,8563],{"type":1138,"value":5011},{"type":1133,"tag":1173,"props":8559,"children":8561},{"href":5014,"rel":8560},[1177],[8562],{"type":1138,"value":5018},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8565,"children":8566},{},[8567,8568],{"type":1138,"value":5024},{"type":1133,"tag":5026,"props":8569,"children":8570},{},[8571,8572,8577],{"type":1138,"value":5030},{"type":1133,"tag":1173,"props":8573,"children":8575},{"href":5033,"rel":8574},[1177],[8576],{"type":1138,"value":5037},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8579,"children":8580},{},[8581,8582,8587],{"type":1138,"value":5043},{"type":1133,"tag":1173,"props":8583,"children":8585},{"href":5046,"rel":8584},[1177],[8586],{"type":1138,"value":5050},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8589,"children":8590},{},[8591,8592,8597],{"type":1138,"value":5056},{"type":1133,"tag":1173,"props":8593,"children":8595},{"href":5059,"rel":8594},[1177],[8596],{"type":1138,"value":5063},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8599,"children":8600},{},[8601,8602,8607],{"type":1138,"value":5069},{"type":1133,"tag":1173,"props":8603,"children":8605},{"href":5072,"rel":8604},[1177],[8606],{"type":1138,"value":5076},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8609,"children":8610},{},[8611,8612,8617],{"type":1138,"value":5082},{"type":1133,"tag":1173,"props":8613,"children":8615},{"href":5085,"rel":8614},[1177],[8616],{"type":1138,"value":5089},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8619,"children":8620},{},[8621,8622,8627],{"type":1138,"value":5095},{"type":1133,"tag":1173,"props":8623,"children":8625},{"href":5098,"rel":8624},[1177],[8626],{"type":1138,"value":5102},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8629,"children":8630},{},[8631,8632,8637],{"type":1138,"value":5108},{"type":1133,"tag":1173,"props":8633,"children":8635},{"href":5111,"rel":8634},[1177],[8636],{"type":1138,"value":5115},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8639,"children":8640},{},[8641,8642,8647],{"type":1138,"value":5121},{"type":1133,"tag":1173,"props":8643,"children":8645},{"href":5124,"rel":8644},[1177],[8646],{"type":1138,"value":5128},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8649,"children":8650},{},[8651,8652,8657],{"type":1138,"value":5134},{"type":1133,"tag":1173,"props":8653,"children":8655},{"href":5137,"rel":8654},[1177],[8656],{"type":1138,"value":5141},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8659,"children":8660},{},[8661,8662,8667],{"type":1138,"value":5147},{"type":1133,"tag":1173,"props":8663,"children":8665},{"href":5150,"rel":8664},[1177],[8666],{"type":1138,"value":5154},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8669,"children":8670},{},[8671,8672,8677],{"type":1138,"value":5160},{"type":1133,"tag":1173,"props":8673,"children":8675},{"href":5163,"rel":8674},[1177],[8676],{"type":1138,"value":5167},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8679,"children":8680},{},[8681,8682,8687],{"type":1138,"value":5173},{"type":1133,"tag":1173,"props":8683,"children":8685},{"href":5176,"rel":8684},[1177],[8686],{"type":1138,"value":5180},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8689,"children":8690},{},[8691,8692,8697],{"type":1138,"value":5186},{"type":1133,"tag":1173,"props":8693,"children":8695},{"href":5189,"rel":8694},[1177],[8696],{"type":1138,"value":5193},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8699,"children":8700},{},[8701,8702,8707],{"type":1138,"value":5199},{"type":1133,"tag":1173,"props":8703,"children":8705},{"href":5202,"rel":8704},[1177],[8706],{"type":1138,"value":5206},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8709,"children":8710},{},[8711,8712,8717],{"type":1138,"value":5212},{"type":1133,"tag":1173,"props":8713,"children":8715},{"href":5215,"rel":8714},[1177],[8716],{"type":1138,"value":5219},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8719,"children":8720},{},[8721,8722,8727],{"type":1138,"value":5225},{"type":1133,"tag":1173,"props":8723,"children":8725},{"href":5228,"rel":8724},[1177],[8726],{"type":1138,"value":5232},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8729,"children":8730},{},[8731,8732,8737],{"type":1138,"value":5238},{"type":1133,"tag":1173,"props":8733,"children":8735},{"href":5241,"rel":8734},[1177],[8736],{"type":1138,"value":5245},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8739,"children":8740},{},[8741,8742,8747],{"type":1138,"value":5251},{"type":1133,"tag":1173,"props":8743,"children":8745},{"href":5254,"rel":8744},[1177],[8746],{"type":1138,"value":5258},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8749,"children":8750},{},[8751,8752,8757],{"type":1138,"value":5264},{"type":1133,"tag":1173,"props":8753,"children":8755},{"href":5267,"rel":8754},[1177],[8756],{"type":1138,"value":5271},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8759,"children":8760},{},[8761,8762,8767],{"type":1138,"value":5277},{"type":1133,"tag":1173,"props":8763,"children":8765},{"href":5280,"rel":8764},[1177],[8766],{"type":1138,"value":5284},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8769,"children":8770},{},[8771,8772,8777],{"type":1138,"value":5290},{"type":1133,"tag":1173,"props":8773,"children":8775},{"href":5293,"rel":8774},[1177],[8776],{"type":1138,"value":5297},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8779,"children":8780},{},[8781,8782,8787],{"type":1138,"value":5303},{"type":1133,"tag":1173,"props":8783,"children":8785},{"href":5306,"rel":8784},[1177],[8786],{"type":1138,"value":5310},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8789,"children":8790},{},[8791,8792,8797],{"type":1138,"value":5316},{"type":1133,"tag":1173,"props":8793,"children":8795},{"href":5319,"rel":8794},[1177],[8796],{"type":1138,"value":5323},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8799,"children":8800},{},[8801,8802,8807],{"type":1138,"value":5329},{"type":1133,"tag":1173,"props":8803,"children":8805},{"href":5332,"rel":8804},[1177],[8806],{"type":1138,"value":5336},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8809,"children":8810},{},[8811,8812,8817],{"type":1138,"value":5342},{"type":1133,"tag":1173,"props":8813,"children":8815},{"href":5345,"rel":8814},[1177],[8816],{"type":1138,"value":5349},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8819,"children":8820},{},[8821,8822,8827],{"type":1138,"value":5355},{"type":1133,"tag":1173,"props":8823,"children":8825},{"href":5358,"rel":8824},[1177],[8826],{"type":1138,"value":5362},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8829,"children":8830},{},[8831,8832,8837],{"type":1138,"value":5368},{"type":1133,"tag":1173,"props":8833,"children":8835},{"href":5371,"rel":8834},[1177],[8836],{"type":1138,"value":5375},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8839,"children":8840},{},[8841,8842,8847],{"type":1138,"value":5381},{"type":1133,"tag":1173,"props":8843,"children":8845},{"href":5384,"rel":8844},[1177],[8846],{"type":1138,"value":5388},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8849,"children":8850},{},[8851,8852,8857],{"type":1138,"value":5394},{"type":1133,"tag":1173,"props":8853,"children":8855},{"href":5397,"rel":8854},[1177],[8856],{"type":1138,"value":5401},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8859,"children":8860},{},[8861,8862,8867],{"type":1138,"value":5407},{"type":1133,"tag":1173,"props":8863,"children":8865},{"href":5410,"rel":8864},[1177],[8866],{"type":1138,"value":5414},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8869,"children":8870},{},[8871,8872,8877],{"type":1138,"value":5420},{"type":1133,"tag":1173,"props":8873,"children":8875},{"href":5423,"rel":8874},[1177],[8876],{"type":1138,"value":5427},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8879,"children":8880},{},[8881,8882,8887],{"type":1138,"value":5433},{"type":1133,"tag":1173,"props":8883,"children":8885},{"href":5436,"rel":8884},[1177],[8886],{"type":1138,"value":5440},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8889,"children":8890},{},[8891,8892,8897],{"type":1138,"value":5446},{"type":1133,"tag":1173,"props":8893,"children":8895},{"href":5449,"rel":8894},[1177],[8896],{"type":1138,"value":5453},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8899,"children":8900},{},[8901,8902,8907],{"type":1138,"value":5459},{"type":1133,"tag":1173,"props":8903,"children":8905},{"href":5462,"rel":8904},[1177],[8906],{"type":1138,"value":5466},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8909,"children":8910},{},[8911,8912,8917],{"type":1138,"value":5472},{"type":1133,"tag":1173,"props":8913,"children":8915},{"href":5475,"rel":8914},[1177],[8916],{"type":1138,"value":5479},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8919,"children":8920},{},[8921,8922,8927],{"type":1138,"value":5485},{"type":1133,"tag":1173,"props":8923,"children":8925},{"href":5488,"rel":8924},[1177],[8926],{"type":1138,"value":5492},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8929,"children":8930},{},[8931,8932,8937],{"type":1138,"value":5498},{"type":1133,"tag":1173,"props":8933,"children":8935},{"href":5501,"rel":8934},[1177],[8936],{"type":1138,"value":5505},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8939,"children":8940},{},[8941,8942,8947],{"type":1138,"value":5511},{"type":1133,"tag":1173,"props":8943,"children":8945},{"href":5514,"rel":8944},[1177],[8946],{"type":1138,"value":5518},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8949,"children":8950},{},[8951,8952,8957],{"type":1138,"value":5524},{"type":1133,"tag":1173,"props":8953,"children":8955},{"href":5527,"rel":8954},[1177],[8956],{"type":1138,"value":5531},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8959,"children":8960},{},[8961,8962,8967],{"type":1138,"value":5537},{"type":1133,"tag":1173,"props":8963,"children":8965},{"href":5540,"rel":8964},[1177],[8966],{"type":1138,"value":5544},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8969,"children":8970},{},[8971,8972,8977],{"type":1138,"value":5550},{"type":1133,"tag":1173,"props":8973,"children":8975},{"href":5553,"rel":8974},[1177],[8976],{"type":1138,"value":5557},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8979,"children":8980},{},[8981,8982,8987],{"type":1138,"value":5563},{"type":1133,"tag":1173,"props":8983,"children":8985},{"href":5566,"rel":8984},[1177],[8986],{"type":1138,"value":5570},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8989,"children":8990},{},[8991,8992,8997],{"type":1138,"value":5576},{"type":1133,"tag":1173,"props":8993,"children":8995},{"href":5579,"rel":8994},[1177],[8996],{"type":1138,"value":5583},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":8999,"children":9000},{},[9001,9002,9007],{"type":1138,"value":5589},{"type":1133,"tag":1173,"props":9003,"children":9005},{"href":5592,"rel":9004},[1177],[9006],{"type":1138,"value":5596},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9009,"children":9010},{},[9011,9012,9017],{"type":1138,"value":5602},{"type":1133,"tag":1173,"props":9013,"children":9015},{"href":5605,"rel":9014},[1177],[9016],{"type":1138,"value":5609},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9019,"children":9020},{},[9021,9022,9027],{"type":1138,"value":5615},{"type":1133,"tag":1173,"props":9023,"children":9025},{"href":5618,"rel":9024},[1177],[9026],{"type":1138,"value":5622},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9029,"children":9030},{},[9031,9032,9037],{"type":1138,"value":5628},{"type":1133,"tag":1173,"props":9033,"children":9035},{"href":5631,"rel":9034},[1177],[9036],{"type":1138,"value":5635},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9039,"children":9040},{},[9041,9042,9047],{"type":1138,"value":5641},{"type":1133,"tag":1173,"props":9043,"children":9045},{"href":5644,"rel":9044},[1177],[9046],{"type":1138,"value":5648},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9049,"children":9050},{},[9051,9052,9057],{"type":1138,"value":5654},{"type":1133,"tag":1173,"props":9053,"children":9055},{"href":5657,"rel":9054},[1177],[9056],{"type":1138,"value":5661},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9059,"children":9060},{},[9061,9062,9067],{"type":1138,"value":5667},{"type":1133,"tag":1173,"props":9063,"children":9065},{"href":5670,"rel":9064},[1177],[9066],{"type":1138,"value":5674},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9069,"children":9070},{},[9071,9072,9077],{"type":1138,"value":5680},{"type":1133,"tag":1173,"props":9073,"children":9075},{"href":5683,"rel":9074},[1177],[9076],{"type":1138,"value":5687},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9079,"children":9080},{},[9081,9085,9086,9091],{"type":1133,"tag":1146,"props":9082,"children":9083},{},[9084],{"type":1138,"value":4598},{"type":1138,"value":5697},{"type":1133,"tag":1173,"props":9087,"children":9089},{"href":5700,"rel":9088},[1177],[9090],{"type":1138,"value":5704},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9093,"children":9094},{},[9095,9099,9100,9105],{"type":1133,"tag":1146,"props":9096,"children":9097},{},[9098],{"type":1138,"value":4598},{"type":1138,"value":5714},{"type":1133,"tag":1173,"props":9101,"children":9103},{"href":5717,"rel":9102},[1177],[9104],{"type":1138,"value":5721},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9107,"children":9108},{},[9109,9113,9114,9119],{"type":1133,"tag":1146,"props":9110,"children":9111},{},[9112],{"type":1138,"value":4598},{"type":1138,"value":5731},{"type":1133,"tag":1173,"props":9115,"children":9117},{"href":5734,"rel":9116},[1177],[9118],{"type":1138,"value":5738},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9121,"children":9122},{},[9123,9127,9128,9133],{"type":1133,"tag":1146,"props":9124,"children":9125},{},[9126],{"type":1138,"value":5747},{"type":1138,"value":5749},{"type":1133,"tag":1173,"props":9129,"children":9131},{"href":5752,"rel":9130},[1177],[9132],{"type":1138,"value":5756},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9135,"children":9136},{},[9137,9138,9143],{"type":1138,"value":5762},{"type":1133,"tag":1173,"props":9139,"children":9141},{"href":5765,"rel":9140},[1177],[9142],{"type":1138,"value":5769},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9145,"children":9146},{},[9147,9148,9153],{"type":1138,"value":5775},{"type":1133,"tag":1173,"props":9149,"children":9151},{"href":5778,"rel":9150},[1177],[9152],{"type":1138,"value":5782},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9155,"children":9156},{},[9157,9158,9163],{"type":1138,"value":5788},{"type":1133,"tag":1173,"props":9159,"children":9161},{"href":5791,"rel":9160},[1177],[9162],{"type":1138,"value":5795},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9165,"children":9166},{},[9167,9168,9173],{"type":1138,"value":5801},{"type":1133,"tag":1173,"props":9169,"children":9171},{"href":5804,"rel":9170},[1177],[9172],{"type":1138,"value":5808},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9175,"children":9176},{},[9177,9178,9183],{"type":1138,"value":5814},{"type":1133,"tag":1173,"props":9179,"children":9181},{"href":5817,"rel":9180},[1177],[9182],{"type":1138,"value":5821},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9185,"children":9186},{},[9187,9188,9193],{"type":1138,"value":5827},{"type":1133,"tag":1173,"props":9189,"children":9191},{"href":5830,"rel":9190},[1177],[9192],{"type":1138,"value":5834},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9195,"children":9196},{},[9197,9198,9203],{"type":1138,"value":5840},{"type":1133,"tag":1173,"props":9199,"children":9201},{"href":5843,"rel":9200},[1177],[9202],{"type":1138,"value":5847},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9205,"children":9206},{},[9207,9208,9213],{"type":1138,"value":5853},{"type":1133,"tag":1173,"props":9209,"children":9211},{"href":5856,"rel":9210},[1177],[9212],{"type":1138,"value":5860},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9215,"children":9216},{},[9217,9218,9223],{"type":1138,"value":5866},{"type":1133,"tag":1173,"props":9219,"children":9221},{"href":5869,"rel":9220},[1177],[9222],{"type":1138,"value":5873},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9225,"children":9226},{},[9227,9228,9233],{"type":1138,"value":5879},{"type":1133,"tag":1173,"props":9229,"children":9231},{"href":5882,"rel":9230},[1177],[9232],{"type":1138,"value":5886},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9235,"children":9236},{},[9237,9238,9243],{"type":1138,"value":5892},{"type":1133,"tag":1173,"props":9239,"children":9241},{"href":5895,"rel":9240},[1177],[9242],{"type":1138,"value":5899},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9245,"children":9246},{},[9247,9248,9253],{"type":1138,"value":5905},{"type":1133,"tag":1173,"props":9249,"children":9251},{"href":5908,"rel":9250},[1177],[9252],{"type":1138,"value":5912},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9255,"children":9256},{},[9257,9258,9263],{"type":1138,"value":5918},{"type":1133,"tag":1173,"props":9259,"children":9261},{"href":5921,"rel":9260},[1177],[9262],{"type":1138,"value":5925},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9265,"children":9266},{},[9267,9268,9273],{"type":1138,"value":5931},{"type":1133,"tag":1173,"props":9269,"children":9271},{"href":5934,"rel":9270},[1177],[9272],{"type":1138,"value":5938},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9275,"children":9276},{},[9277,9278,9283],{"type":1138,"value":5944},{"type":1133,"tag":1173,"props":9279,"children":9281},{"href":5947,"rel":9280},[1177],[9282],{"type":1138,"value":5951},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9285,"children":9286},{},[9287,9288,9293],{"type":1138,"value":5957},{"type":1133,"tag":1173,"props":9289,"children":9291},{"href":5960,"rel":9290},[1177],[9292],{"type":1138,"value":5964},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9295,"children":9296},{},[9297,9298,9303],{"type":1138,"value":5970},{"type":1133,"tag":1173,"props":9299,"children":9301},{"href":5973,"rel":9300},[1177],[9302],{"type":1138,"value":5977},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9305,"children":9306},{},[9307,9311,9312,9317,9318],{"type":1133,"tag":1146,"props":9308,"children":9309},{},[9310],{"type":1138,"value":5986},{"type":1138,"value":5988},{"type":1133,"tag":1173,"props":9313,"children":9315},{"href":5991,"rel":9314},[1177],[9316],{"type":1138,"value":5995},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9319,"children":9321},{"href":5999,"rel":9320},[1177],[9322],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":9324,"children":9325},{},[9326,9330,9331,9336,9337],{"type":1133,"tag":1146,"props":9327,"children":9328},{},[9329],{"type":1138,"value":6011},{"type":1138,"value":6013},{"type":1133,"tag":1173,"props":9332,"children":9334},{"href":6016,"rel":9333},[1177],[9335],{"type":1138,"value":6020},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9338,"children":9340},{"href":5999,"rel":9339},[1177],[9341],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":9343,"children":9344},{},[9345,9349,9350,9355,9356],{"type":1133,"tag":1146,"props":9346,"children":9347},{},[9348],{"type":1138,"value":1221},{"type":1138,"value":6035},{"type":1133,"tag":1173,"props":9351,"children":9353},{"href":6038,"rel":9352},[1177],[9354],{"type":1138,"value":6042},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9357,"children":9359},{"href":5999,"rel":9358},[1177],[9360],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":9362,"children":9363},{},[9364,9368,9369,9374,9375],{"type":1133,"tag":1146,"props":9365,"children":9366},{},[9367],{"type":1138,"value":5986},{"type":1138,"value":6057},{"type":1133,"tag":1173,"props":9370,"children":9372},{"href":6060,"rel":9371},[1177],[9373],{"type":1138,"value":6064},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9376,"children":9378},{"href":5999,"rel":9377},[1177],[9379],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":9381,"children":9382},{},[9383,9387,9388,9393,9394],{"type":1133,"tag":1146,"props":9384,"children":9385},{},[9386],{"type":1138,"value":6078},{"type":1138,"value":6080},{"type":1133,"tag":1173,"props":9389,"children":9391},{"href":6083,"rel":9390},[1177],[9392],{"type":1138,"value":6087},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9395,"children":9397},{"href":6091,"rel":9396},[1177],[9398],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":9400,"children":9401},{},[9402,9406,9407,9412,9413],{"type":1133,"tag":1146,"props":9403,"children":9404},{},[9405],{"type":1138,"value":6103},{"type":1138,"value":6105},{"type":1133,"tag":1173,"props":9408,"children":9410},{"href":6108,"rel":9409},[1177],[9411],{"type":1138,"value":6112},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9414,"children":9416},{"href":6091,"rel":9415},[1177],[9417],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":9419,"children":9420},{},[9421,9425,9426,9431,9432],{"type":1133,"tag":1146,"props":9422,"children":9423},{},[9424],{"type":1138,"value":6011},{"type":1138,"value":6127},{"type":1133,"tag":1173,"props":9427,"children":9429},{"href":6130,"rel":9428},[1177],[9430],{"type":1138,"value":6134},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9433,"children":9435},{"href":6138,"rel":9434},[1177],[9436],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":9438,"children":9439},{},[9440,9444,9445,9450,9451],{"type":1133,"tag":1146,"props":9441,"children":9442},{},[9443],{"type":1138,"value":1221},{"type":1138,"value":6151},{"type":1133,"tag":1173,"props":9446,"children":9448},{"href":6154,"rel":9447},[1177],[9449],{"type":1138,"value":6158},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9452,"children":9454},{"href":6138,"rel":9453},[1177],[9455],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":9457,"children":9458},{},[9459,9463,9464,9469,9470],{"type":1133,"tag":1146,"props":9460,"children":9461},{},[9462],{"type":1138,"value":1221},{"type":1138,"value":6173},{"type":1133,"tag":1173,"props":9465,"children":9467},{"href":6176,"rel":9466},[1177],[9468],{"type":1138,"value":6180},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9471,"children":9473},{"href":6138,"rel":9472},[1177],[9474],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":9476,"children":9477},{},[9478,9482,9483,9488,9489],{"type":1133,"tag":1146,"props":9479,"children":9480},{},[9481],{"type":1138,"value":4931},{"type":1138,"value":6195},{"type":1133,"tag":1173,"props":9484,"children":9486},{"href":6198,"rel":9485},[1177],[9487],{"type":1138,"value":6202},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9490,"children":9492},{"href":6138,"rel":9491},[1177],[9493],{"type":1138,"value":6142},{"type":1133,"tag":1184,"props":9495,"children":9496},{"id":1233},[9497],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":9499,"children":9500},{},[9501,9511,9521,9531,9541,9551],{"type":1133,"tag":1195,"props":9502,"children":9503},{},[9504,9505,9510],{"type":1138,"value":6357},{"type":1133,"tag":1173,"props":9506,"children":9508},{"href":6360,"rel":9507},[1177],[9509],{"type":1138,"value":6364},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9512,"children":9513},{},[9514,9515,9520],{"type":1138,"value":6370},{"type":1133,"tag":1173,"props":9516,"children":9518},{"href":6373,"rel":9517},[1177],[9519],{"type":1138,"value":6377},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9522,"children":9523},{},[9524,9525,9530],{"type":1138,"value":6383},{"type":1133,"tag":1173,"props":9526,"children":9528},{"href":6386,"rel":9527},[1177],[9529],{"type":1138,"value":6390},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9532,"children":9533},{},[9534,9535,9540],{"type":1138,"value":6396},{"type":1133,"tag":1173,"props":9536,"children":9538},{"href":6399,"rel":9537},[1177],[9539],{"type":1138,"value":6403},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9542,"children":9543},{},[9544,9545,9550],{"type":1138,"value":6409},{"type":1133,"tag":1173,"props":9546,"children":9548},{"href":6412,"rel":9547},[1177],[9549],{"type":1138,"value":6416},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9552,"children":9553},{},[9554,9558,9559,9564],{"type":1133,"tag":1146,"props":9555,"children":9556},{},[9557],{"type":1138,"value":4598},{"type":1138,"value":6426},{"type":1133,"tag":1173,"props":9560,"children":9562},{"href":6429,"rel":9561},[1177],[9563],{"type":1138,"value":6433},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":9566,"children":9567},{"id":7},[9568],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":9570,"children":9571},{},[9572,9582,9592,9602,9612,9622,9632,9642,9652,9662,9672,9682,9692,9702,9712,9722,9732,9742,9752],{"type":1133,"tag":1195,"props":9573,"children":9574},{},[9575,9576,9581],{"type":1138,"value":6615},{"type":1133,"tag":1173,"props":9577,"children":9579},{"href":6618,"rel":9578},[1177],[9580],{"type":1138,"value":6622},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9583,"children":9584},{},[9585,9586,9591],{"type":1138,"value":6628},{"type":1133,"tag":1173,"props":9587,"children":9589},{"href":6631,"rel":9588},[1177],[9590],{"type":1138,"value":6635},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9593,"children":9594},{},[9595,9596,9601],{"type":1138,"value":6641},{"type":1133,"tag":1173,"props":9597,"children":9599},{"href":6644,"rel":9598},[1177],[9600],{"type":1138,"value":6648},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9603,"children":9604},{},[9605,9606,9611],{"type":1138,"value":6654},{"type":1133,"tag":1173,"props":9607,"children":9609},{"href":6657,"rel":9608},[1177],[9610],{"type":1138,"value":6661},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9613,"children":9614},{},[9615,9616,9621],{"type":1138,"value":6667},{"type":1133,"tag":1173,"props":9617,"children":9619},{"href":6670,"rel":9618},[1177],[9620],{"type":1138,"value":6674},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9623,"children":9624},{},[9625,9626,9631],{"type":1138,"value":6680},{"type":1133,"tag":1173,"props":9627,"children":9629},{"href":6683,"rel":9628},[1177],[9630],{"type":1138,"value":6687},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9633,"children":9634},{},[9635,9636,9641],{"type":1138,"value":6693},{"type":1133,"tag":1173,"props":9637,"children":9639},{"href":6696,"rel":9638},[1177],[9640],{"type":1138,"value":6700},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9643,"children":9644},{},[9645,9646,9651],{"type":1138,"value":6706},{"type":1133,"tag":1173,"props":9647,"children":9649},{"href":6709,"rel":9648},[1177],[9650],{"type":1138,"value":6713},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9653,"children":9654},{},[9655,9656,9661],{"type":1138,"value":6719},{"type":1133,"tag":1173,"props":9657,"children":9659},{"href":6722,"rel":9658},[1177],[9660],{"type":1138,"value":6726},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9663,"children":9664},{},[9665,9666,9671],{"type":1138,"value":6732},{"type":1133,"tag":1173,"props":9667,"children":9669},{"href":6735,"rel":9668},[1177],[9670],{"type":1138,"value":6739},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9673,"children":9674},{},[9675,9676,9681],{"type":1138,"value":6745},{"type":1133,"tag":1173,"props":9677,"children":9679},{"href":6748,"rel":9678},[1177],[9680],{"type":1138,"value":6752},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9683,"children":9684},{},[9685,9686,9691],{"type":1138,"value":6758},{"type":1133,"tag":1173,"props":9687,"children":9689},{"href":6761,"rel":9688},[1177],[9690],{"type":1138,"value":6765},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9693,"children":9694},{},[9695,9696,9701],{"type":1138,"value":6771},{"type":1133,"tag":1173,"props":9697,"children":9699},{"href":6774,"rel":9698},[1177],[9700],{"type":1138,"value":6778},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9703,"children":9704},{},[9705,9706,9711],{"type":1138,"value":6784},{"type":1133,"tag":1173,"props":9707,"children":9709},{"href":6787,"rel":9708},[1177],[9710],{"type":1138,"value":6791},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9713,"children":9714},{},[9715,9716,9721],{"type":1138,"value":6797},{"type":1133,"tag":1173,"props":9717,"children":9719},{"href":6800,"rel":9718},[1177],[9720],{"type":1138,"value":6804},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9723,"children":9724},{},[9725,9726,9731],{"type":1138,"value":6810},{"type":1133,"tag":1173,"props":9727,"children":9729},{"href":6813,"rel":9728},[1177],[9730],{"type":1138,"value":6817},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9733,"children":9734},{},[9735,9736,9741],{"type":1138,"value":6823},{"type":1133,"tag":1173,"props":9737,"children":9739},{"href":6826,"rel":9738},[1177],[9740],{"type":1138,"value":6830},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9743,"children":9744},{},[9745,9746,9751],{"type":1138,"value":6836},{"type":1133,"tag":1173,"props":9747,"children":9749},{"href":6839,"rel":9748},[1177],[9750],{"type":1138,"value":6843},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9753,"children":9754},{},[9755,9756,9761,9762],{"type":1138,"value":6849},{"type":1133,"tag":1173,"props":9757,"children":9759},{"href":6852,"rel":9758},[1177],[9760],{"type":1138,"value":6856},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9763,"children":9765},{"href":5999,"rel":9764},[1177],[9766],{"type":1138,"value":6003},{"type":1133,"tag":1184,"props":9768,"children":9769},{"id":1664},[9770],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":9772,"children":9773},{},[9774,9784,9794,9804,9814,9824,9834,9844,9858,9873,9888,9903],{"type":1133,"tag":1195,"props":9775,"children":9776},{},[9777,9778,9783],{"type":1138,"value":6969},{"type":1133,"tag":1173,"props":9779,"children":9781},{"href":6972,"rel":9780},[1177],[9782],{"type":1138,"value":6976},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9785,"children":9786},{},[9787,9788,9793],{"type":1138,"value":6982},{"type":1133,"tag":1173,"props":9789,"children":9791},{"href":6985,"rel":9790},[1177],[9792],{"type":1138,"value":6989},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9795,"children":9796},{},[9797,9798,9803],{"type":1138,"value":6995},{"type":1133,"tag":1173,"props":9799,"children":9801},{"href":6998,"rel":9800},[1177],[9802],{"type":1138,"value":7002},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9805,"children":9806},{},[9807,9808,9813],{"type":1138,"value":7008},{"type":1133,"tag":1173,"props":9809,"children":9811},{"href":7011,"rel":9810},[1177],[9812],{"type":1138,"value":7015},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9815,"children":9816},{},[9817,9818,9823],{"type":1138,"value":7021},{"type":1133,"tag":1173,"props":9819,"children":9821},{"href":7024,"rel":9820},[1177],[9822],{"type":1138,"value":7028},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9825,"children":9826},{},[9827,9828,9833],{"type":1138,"value":7034},{"type":1133,"tag":1173,"props":9829,"children":9831},{"href":7037,"rel":9830},[1177],[9832],{"type":1138,"value":7041},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9835,"children":9836},{},[9837,9838,9843],{"type":1138,"value":7047},{"type":1133,"tag":1173,"props":9839,"children":9841},{"href":7050,"rel":9840},[1177],[9842],{"type":1138,"value":7054},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9845,"children":9846},{},[9847,9851,9852,9857],{"type":1133,"tag":1146,"props":9848,"children":9849},{},[9850],{"type":1138,"value":4598},{"type":1138,"value":7064},{"type":1133,"tag":1173,"props":9853,"children":9855},{"href":7067,"rel":9854},[1177],[9856],{"type":1138,"value":7071},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9859,"children":9860},{},[9861,9862,9867,9868],{"type":1138,"value":7077},{"type":1133,"tag":1173,"props":9863,"children":9865},{"href":7080,"rel":9864},[1177],[9866],{"type":1138,"value":7084},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9869,"children":9871},{"href":5999,"rel":9870},[1177],[9872],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":9874,"children":9875},{},[9876,9877,9882,9883],{"type":1138,"value":7095},{"type":1133,"tag":1173,"props":9878,"children":9880},{"href":7098,"rel":9879},[1177],[9881],{"type":1138,"value":7102},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9884,"children":9886},{"href":5999,"rel":9885},[1177],[9887],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":9889,"children":9890},{},[9891,9892,9897,9898],{"type":1138,"value":7113},{"type":1133,"tag":1173,"props":9893,"children":9895},{"href":7116,"rel":9894},[1177],[9896],{"type":1138,"value":7120},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9899,"children":9901},{"href":6091,"rel":9900},[1177],[9902],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":9904,"children":9905},{},[9906,9910,9911,9916,9917],{"type":1133,"tag":1146,"props":9907,"children":9908},{},[9909],{"type":1138,"value":4931},{"type":1138,"value":7135},{"type":1133,"tag":1173,"props":9912,"children":9914},{"href":7138,"rel":9913},[1177],[9915],{"type":1138,"value":7142},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":9918,"children":9920},{"href":6138,"rel":9919},[1177],[9921],{"type":1138,"value":6142},{"type":1133,"tag":1184,"props":9923,"children":9924},{"id":2327},[9925],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":9927,"children":9928},{},[9929,9939,9949,9959,9969,9979,9989],{"type":1133,"tag":1195,"props":9930,"children":9931},{},[9932,9933,9938],{"type":1138,"value":7260},{"type":1133,"tag":1173,"props":9934,"children":9936},{"href":7263,"rel":9935},[1177],[9937],{"type":1138,"value":7267},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9940,"children":9941},{},[9942,9943,9948],{"type":1138,"value":7273},{"type":1133,"tag":1173,"props":9944,"children":9946},{"href":7276,"rel":9945},[1177],[9947],{"type":1138,"value":7280},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9950,"children":9951},{},[9952,9953,9958],{"type":1138,"value":7286},{"type":1133,"tag":1173,"props":9954,"children":9956},{"href":7289,"rel":9955},[1177],[9957],{"type":1138,"value":7293},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9960,"children":9961},{},[9962,9963,9968],{"type":1138,"value":7299},{"type":1133,"tag":1173,"props":9964,"children":9966},{"href":7302,"rel":9965},[1177],[9967],{"type":1138,"value":7306},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9970,"children":9971},{},[9972,9973,9978],{"type":1138,"value":7312},{"type":1133,"tag":1173,"props":9974,"children":9976},{"href":7315,"rel":9975},[1177],[9977],{"type":1138,"value":7319},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9980,"children":9981},{},[9982,9983,9988],{"type":1138,"value":7325},{"type":1133,"tag":1173,"props":9984,"children":9986},{"href":7328,"rel":9985},[1177],[9987],{"type":1138,"value":7332},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":9990,"children":9991},{},[9992,9993,9998],{"type":1138,"value":7338},{"type":1133,"tag":1173,"props":9994,"children":9996},{"href":7341,"rel":9995},[1177],[9997],{"type":1138,"value":7345},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":10000,"children":10001},{},[10002,10006,10007],{"type":1133,"tag":1146,"props":10003,"children":10004},{},[10005],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":10008,"children":10011},{"href":10009,"rel":10010},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.1...v1.3.0-beta.1",[1177],[10012],{"type":1138,"value":10009},{"data":10014,"body":10015},{},{"type":1130,"children":10016},[10017,10049,10054,10058,10079,10083,10112],{"type":1133,"tag":1134,"props":10018,"children":10019},{},[10020,10022,10028,10030,10035,10036,10041,10043,10048],{"type":1138,"value":10021},"Join and leave notifications work on Minecraft 26.x. Recent versions log joins as ",{"type":1133,"tag":1789,"props":10023,"children":10025},{"className":10024},[],[10026],{"type":1138,"value":10027},"System chat: Steve joined the game",{"type":1138,"value":10029},", 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 ",{"type":1133,"tag":1146,"props":10031,"children":10032},{},[10033],{"type":1138,"value":10034},"A player joined",{"type":1138,"value":1838},{"type":1133,"tag":1146,"props":10037,"children":10038},{},[10039],{"type":1138,"value":10040},"A player left",{"type":1138,"value":10042}," on a notification channel in ",{"type":1133,"tag":1146,"props":10044,"children":10045},{},[10046],{"type":1138,"value":10047},"System → Notifications",{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":10050,"children":10051},{},[10052],{"type":1138,"value":10053},"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.",{"type":1133,"tag":1184,"props":10055,"children":10056},{"id":1233},[10057],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":10059,"children":10060},{},[10061],{"type":1133,"tag":1195,"props":10062,"children":10063},{},[10064,10069,10071,10078],{"type":1133,"tag":1146,"props":10065,"children":10066},{},[10067],{"type":1138,"value":10068},"notify:",{"type":1138,"value":10070}," read joins and leaves that Minecraft 26.x logs as system chat (",{"type":1133,"tag":1173,"props":10072,"children":10075},{"href":10073,"rel":10074},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3f67e660b8007f011e6d3ae9c12c218398941b90",[1177],[10076],{"type":1138,"value":10077},"3f67e66",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":10080,"children":10081},{"id":7},[10082],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":10084,"children":10085},{},[10086,10099],{"type":1133,"tag":1195,"props":10087,"children":10088},{},[10089,10091,10098],{"type":1138,"value":10090},"1.2.1 release summary (",{"type":1133,"tag":1173,"props":10092,"children":10095},{"href":10093,"rel":10094},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1832a406ddf584df409beb47f711fd33471b0b1b",[1177],[10096],{"type":1138,"value":10097},"1832a40",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10100,"children":10101},{},[10102,10104,10111],{"type":1138,"value":10103},"1.2.0 release summary (",{"type":1133,"tag":1173,"props":10105,"children":10108},{"href":10106,"rel":10107},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa8f9750d98146d8718ac12687fff49e90e63c5f9",[1177],[10109],{"type":1138,"value":10110},"a8f9750",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":10113,"children":10114},{},[10115,10119,10120],{"type":1133,"tag":1146,"props":10116,"children":10117},{},[10118],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":10121,"children":10124},{"href":10122,"rel":10123},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.0...v1.2.1",[1177],[10125],{"type":1138,"value":10122},{"data":10127,"body":10128},{},{"type":1130,"children":10129},[10130,10211,10251,10264,10268,11075,11079,11312,11316,11571,11575,11735],{"type":1133,"tag":1134,"props":10131,"children":10132},{},[10133,10135,10139,10141,10145,10147,10152,10153,10158,10160,10165,10167,10172,10174,10178,10180,10185,10187,10193,10195,10201,10203,10209],{"type":1138,"value":10134},"Flytower 1.2.0 is about people and sharing. ",{"type":1133,"tag":1146,"props":10136,"children":10137},{},[10138],{"type":1138,"value":78},{"type":1138,"value":10140},": invite people with a one-time link from the new ",{"type":1133,"tag":1146,"props":10142,"children":10143},{},[10144],{"type":1138,"value":1753},{"type":1138,"value":10146}," page as an ",{"type":1133,"tag":1146,"props":10148,"children":10149},{},[10150],{"type":1138,"value":10151},"Admin",{"type":1138,"value":4122},{"type":1133,"tag":1146,"props":10154,"children":10155},{},[10156],{"type":1138,"value":10157},"Operator",{"type":1138,"value":10159}," or ",{"type":1133,"tag":1146,"props":10161,"children":10162},{},[10163],{"type":1138,"value":10164},"Viewer",{"type":1138,"value":10166},", 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 ",{"type":1133,"tag":1146,"props":10168,"children":10169},{},[10170],{"type":1138,"value":10171},"Owner",{"type":1138,"value":10173}," when you update. ",{"type":1133,"tag":1146,"props":10175,"children":10176},{},[10177],{"type":1138,"value":176},{"type":1138,"value":10179}," (click your name in the sidebar) holds your name, theme, passkeys and recovery codes. Each server can also have a ",{"type":1133,"tag":1146,"props":10181,"children":10182},{},[10183],{"type":1138,"value":10184},"public status page",{"type":1138,"value":10186}," at ",{"type":1133,"tag":1789,"props":10188,"children":10190},{"className":10189},[],[10191],{"type":1138,"value":10192},"\u002Fs\u002F\u003Cserver name>",{"type":1138,"value":10194},", or on its own hostname, showing whether it's up, the address to join, who's online and, on Fabric, a ",{"type":1133,"tag":1789,"props":10196,"children":10198},{"className":10197},[],[10199],{"type":1138,"value":10200},".mrpack",{"type":1138,"value":10202}," modpack to download. Re-run the installer once with the same ",{"type":1133,"tag":1789,"props":10204,"children":10206},{"className":10205},[],[10207],{"type":1138,"value":10208},"--domain",{"type":1138,"value":10210}," for hostnames to work.",{"type":1133,"tag":1134,"props":10212,"children":10213},{},[10214,10216,10221,10223,10228,10230,10235,10237,10242,10244,10249],{"type":1138,"value":10215},"Servers look more like themselves too. There's a rich-text ",{"type":1133,"tag":1146,"props":10217,"children":10218},{},[10219],{"type":1138,"value":10220},"MOTD editor",{"type":1138,"value":10222}," with a live preview of the multiplayer list, an uploaded ",{"type":1133,"tag":1146,"props":10224,"children":10225},{},[10226],{"type":1138,"value":10227},"server icon",{"type":1138,"value":10229},", player ",{"type":1133,"tag":1146,"props":10231,"children":10232},{},[10233],{"type":1138,"value":10234},"heads",{"type":1138,"value":10236}," on the Players tab (fetched by Flytower itself, never by a third-party site), and ",{"type":1133,"tag":1146,"props":10238,"children":10239},{},[10240],{"type":1138,"value":10241},"branding",{"type":1138,"value":10243}," 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 ",{"type":1133,"tag":1146,"props":10245,"children":10246},{},[10247],{"type":1138,"value":10248},"past world",{"type":1138,"value":10250}," 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.",{"type":1133,"tag":1134,"props":10252,"children":10253},{},[10254,10256,10263],{"type":1138,"value":10255},"Testing notes are in ",{"type":1133,"tag":1173,"props":10257,"children":10260},{"href":10258,"rel":10259},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0\u002Fdocs\u002Ftesting-1.2.0.md",[1177],[10261],{"type":1138,"value":10262},"testing-1.2.0.md",{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":10265,"children":10266},{"id":1186},[10267],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":10269,"children":10270},{},[10271,10284,10297,10310,10323,10336,10349,10362,10375,10388,10401,10414,10427,10440,10453,10466,10479,10492,10505,10518,10536,10553,10571,10588,10601,10614,10631,10644,10657,10679,10692,10709,10727,10740,10753,10766,10784,10797,10810,10823,10836,10853,10870,10887,10904,10921,10934,10947,10960,10973,10986,10999,11012,11032,11045,11058],{"type":1133,"tag":1195,"props":10272,"children":10273},{},[10274,10276,10283],{"type":1138,"value":10275},"document the Access page (",{"type":1133,"tag":1173,"props":10277,"children":10280},{"href":10278,"rel":10279},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F23a0acc08591d66590dc3b35c384c1aac5b5f2ba",[1177],[10281],{"type":1138,"value":10282},"23a0acc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10285,"children":10286},{},[10287,10289,10296],{"type":1138,"value":10288},"rename People to Access, with People and Roles tabs (",{"type":1133,"tag":1173,"props":10290,"children":10293},{"href":10291,"rel":10292},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73eda62f892a64d3a4f706ff2c062dc09ed8f608",[1177],[10294],{"type":1138,"value":10295},"73eda62",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10298,"children":10299},{},[10300,10302,10309],{"type":1138,"value":10301},"pick your appearance with the colour mode select (",{"type":1133,"tag":1173,"props":10303,"children":10306},{"href":10304,"rel":10305},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd7abe182c176ee690ba29ce6196a082960ff9a0e",[1177],[10307],{"type":1138,"value":10308},"d7abe18",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10311,"children":10312},{},[10313,10315,10322],{"type":1138,"value":10314},"document Your account and the new People page (",{"type":1133,"tag":1173,"props":10316,"children":10319},{"href":10317,"rel":10318},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc49ced078d7dc56b3985001ac5f401fc4b0d89bf",[1177],[10320],{"type":1138,"value":10321},"c49ced0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10324,"children":10325},{},[10326,10328,10335],{"type":1138,"value":10327},"give People and Your account their own places in the sidebar (",{"type":1133,"tag":1173,"props":10329,"children":10332},{"href":10330,"rel":10331},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F49906334c7cf6e8521f19eb5783e37741e4f2c11",[1177],[10333],{"type":1138,"value":10334},"4990633",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10337,"children":10338},{},[10339,10341,10348],{"type":1138,"value":10340},"let people rename themselves, save their theme and sign out everywhere (",{"type":1133,"tag":1173,"props":10342,"children":10345},{"href":10343,"rel":10344},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbff9e7d0b0f813430146eba07419da1fad69b054",[1177],[10346],{"type":1138,"value":10347},"bff9e7d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10350,"children":10351},{},[10352,10354,10361],{"type":1138,"value":10353},"end older sessions when the session version changes (",{"type":1133,"tag":1173,"props":10355,"children":10358},{"href":10356,"rel":10357},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd87d47759fda479200cebe570fcb409f65a984f8",[1177],[10359],{"type":1138,"value":10360},"d87d477",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10363,"children":10364},{},[10365,10367,10374],{"type":1138,"value":10366},"hide what a person can't use, and show view-only tabs (",{"type":1133,"tag":1173,"props":10368,"children":10371},{"href":10369,"rel":10370},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbed7397e0553203d0a18542803ba87aa09d9db96",[1177],[10372],{"type":1138,"value":10373},"bed7397",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10376,"children":10377},{},[10378,10380,10387],{"type":1138,"value":10379},"role editor on the People page (",{"type":1133,"tag":1173,"props":10381,"children":10384},{"href":10382,"rel":10383},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff59ff2d4a1ef5d6e4ea3f5fca653b351c96bcc7",[1177],[10385],{"type":1138,"value":10386},"ff59ff2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10389,"children":10390},{},[10391,10393,10400],{"type":1138,"value":10392},"custom roles built from the permission list (",{"type":1133,"tag":1173,"props":10394,"children":10397},{"href":10395,"rel":10396},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42eb8df6015c4a9ee4795486b9c0e3153f465b1d",[1177],[10398],{"type":1138,"value":10399},"42eb8df",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10402,"children":10403},{},[10404,10406,10413],{"type":1138,"value":10405},"installer prints a setup link (",{"type":1133,"tag":1173,"props":10407,"children":10410},{"href":10408,"rel":10409},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3635756f825a504e072c12711b6c01db37f1135",[1177],[10411],{"type":1138,"value":10412},"f363575",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10415,"children":10416},{},[10417,10419,10426],{"type":1138,"value":10418},"People page under System (",{"type":1133,"tag":1173,"props":10420,"children":10423},{"href":10421,"rel":10422},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F46d55c1e176bf728ffafbedb33186973898f67f4",[1177],[10424],{"type":1138,"value":10425},"46d55c1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10428,"children":10429},{},[10430,10432,10439],{"type":1138,"value":10431},"setup and invite links fill the token in (",{"type":1133,"tag":1173,"props":10433,"children":10436},{"href":10434,"rel":10435},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe409a45f31d195ed57ab1d8d45a395b18ea39c0c",[1177],[10437],{"type":1138,"value":10438},"e409a45",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10441,"children":10442},{},[10443,10445,10452],{"type":1138,"value":10444},"join through an invite link with a new passkey (",{"type":1133,"tag":1173,"props":10446,"children":10449},{"href":10447,"rel":10448},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0906b29c853aa157036fd459fb52a2402b1619c",[1177],[10450],{"type":1138,"value":10451},"a0906b2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10454,"children":10455},{},[10456,10458,10465],{"type":1138,"value":10457},"invite, change and remove people (",{"type":1133,"tag":1173,"props":10459,"children":10462},{"href":10460,"rel":10461},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe572e4614676ebc5437e4d550c9941515fcbeba1",[1177],[10463],{"type":1138,"value":10464},"e572e46",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10467,"children":10468},{},[10469,10471,10478],{"type":1138,"value":10470},"store invite links (",{"type":1133,"tag":1173,"props":10472,"children":10475},{"href":10473,"rel":10474},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb061ab684d37ed7ecfbb4393919599048e7d89db",[1177],[10476],{"type":1138,"value":10477},"b061ab6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10480,"children":10481},{},[10482,10484,10491],{"type":1138,"value":10483},"send live topics only to people who can see them (",{"type":1133,"tag":1173,"props":10485,"children":10488},{"href":10486,"rel":10487},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcde77d0c3b2be2b05a97e05e59ccd02dcedff551",[1177],[10489],{"type":1138,"value":10490},"cde77d0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10493,"children":10494},{},[10495,10497,10504],{"type":1138,"value":10496},"check a permission on every API route (",{"type":1133,"tag":1173,"props":10498,"children":10501},{"href":10499,"rel":10500},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefaf60a5afc37867a074b4f1ea279561ab4e08ca",[1177],[10502],{"type":1138,"value":10503},"efaf60a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10506,"children":10507},{},[10508,10510,10517],{"type":1138,"value":10509},"add roles, grants and the permission list (",{"type":1133,"tag":1173,"props":10511,"children":10514},{"href":10512,"rel":10513},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff4b32121df1a0219ef491e3522ff78b1c63160d",[1177],[10515],{"type":1138,"value":10516},"ff4b321",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10519,"children":10520},{},[10521,10526,10528,10535],{"type":1133,"tag":1146,"props":10522,"children":10523},{},[10524],{"type":1138,"value":10525},"status:",{"type":1138,"value":10527}," serve the public page on each server's own hostname (",{"type":1133,"tag":1173,"props":10529,"children":10532},{"href":10530,"rel":10531},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F60e3243ba19e6a24cc7c1382acd0749f3ff73b8f",[1177],[10533],{"type":1138,"value":10534},"60e3243",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10537,"children":10538},{},[10539,10543,10545,10552],{"type":1133,"tag":1146,"props":10540,"children":10541},{},[10542],{"type":1138,"value":10525},{"type":1138,"value":10544}," players' modpack download on the public page (",{"type":1133,"tag":1173,"props":10546,"children":10549},{"href":10547,"rel":10548},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F89b902f36520584be0065e32c3b0404902085626",[1177],[10550],{"type":1138,"value":10551},"89b902f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10554,"children":10555},{},[10556,10561,10563,10570],{"type":1133,"tag":1146,"props":10557,"children":10558},{},[10559],{"type":1138,"value":10560},"providers:",{"type":1138,"value":10562}," Modrinth lookups for players' modpacks (",{"type":1133,"tag":1173,"props":10564,"children":10567},{"href":10565,"rel":10566},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8bfec590779b8f1a2b2c932531a09d3588106b0",[1177],[10568],{"type":1138,"value":10569},"d8bfec5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10572,"children":10573},{},[10574,10578,10580,10587],{"type":1133,"tag":1146,"props":10575,"children":10576},{},[10577],{"type":1138,"value":10525},{"type":1138,"value":10579}," show the server icon on the public page (",{"type":1133,"tag":1173,"props":10581,"children":10584},{"href":10582,"rel":10583},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01782e3e798320365892b15620b554450df1b1b8",[1177],[10585],{"type":1138,"value":10586},"01782e3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10589,"children":10590},{},[10591,10593,10600],{"type":1138,"value":10592},"upload a server icon for the multiplayer list (#120) (",{"type":1133,"tag":1173,"props":10594,"children":10597},{"href":10595,"rel":10596},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F76402db2410720075fa0c41cf2c664981f486ef0",[1177],[10598],{"type":1138,"value":10599},"76402db",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10602,"children":10603},{},[10604,10606,10613],{"type":1138,"value":10605},"upload, crop and remove a server icon in Game settings (",{"type":1133,"tag":1173,"props":10607,"children":10610},{"href":10608,"rel":10609},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1833980888c7ba8c5e71ad8fc091f77854bca5f5",[1177],[10611],{"type":1138,"value":10612},"1833980",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10615,"children":10616},{},[10617,10621,10623,10630],{"type":1133,"tag":1146,"props":10618,"children":10619},{},[10620],{"type":1138,"value":10525},{"type":1138,"value":10622}," MOTD and link previews on the public page (",{"type":1133,"tag":1173,"props":10624,"children":10627},{"href":10625,"rel":10626},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F39b917ba29857f74919fd39800ab8170c665aa79",[1177],[10628],{"type":1138,"value":10629},"39b917b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10632,"children":10633},{},[10634,10636,10643],{"type":1138,"value":10635},"set and remove a server's icon through the API (",{"type":1133,"tag":1173,"props":10637,"children":10640},{"href":10638,"rel":10639},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F87c58356415b82a9d0edd71677ad329f112135ed",[1177],[10641],{"type":1138,"value":10642},"87c5835",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10645,"children":10646},{},[10647,10649,10656],{"type":1138,"value":10648},"check server icons as PNGs and keep only their image chunks (",{"type":1133,"tag":1173,"props":10650,"children":10653},{"href":10651,"rel":10652},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f1c83c98dfba5dd704773c51b36520e3fa9c068",[1177],[10654],{"type":1138,"value":10655},"8f1c83c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10658,"children":10659},{},[10660,10664,10666],{"type":1133,"tag":1146,"props":10661,"children":10662},{},[10663],{"type":1138,"value":10525},{"type":1138,"value":10665}," public status page at \u002Fs\u002F",{"type":1133,"tag":5026,"props":10667,"children":10668},{},[10669,10671,10678],{"type":1138,"value":10670}," and its settings card (",{"type":1133,"tag":1173,"props":10672,"children":10675},{"href":10673,"rel":10674},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F05d00a40d3f468bd63bd0094cfa141e4824e96aa",[1177],[10676],{"type":1138,"value":10677},"05d00a4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10680,"children":10681},{},[10682,10684,10691],{"type":1138,"value":10683},"rich text MOTD editor with live preview (#115) (",{"type":1133,"tag":1173,"props":10685,"children":10688},{"href":10686,"rel":10687},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F981b84125f1a82381842cf24a68589287e775ea1",[1177],[10689],{"type":1138,"value":10690},"981b841",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10693,"children":10694},{},[10695,10699,10701,10708],{"type":1133,"tag":1146,"props":10696,"children":10697},{},[10698],{"type":1138,"value":10525},{"type":1138,"value":10700}," public status API with a roster kept from the log (",{"type":1133,"tag":1173,"props":10702,"children":10705},{"href":10703,"rel":10704},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F27a437cc7c6537f26a6c1523f54d551260c88055",[1177],[10706],{"type":1138,"value":10707},"27a437c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10710,"children":10711},{},[10712,10717,10719,10726],{"type":1133,"tag":1146,"props":10713,"children":10714},{},[10715],{"type":1138,"value":10716},"spec:",{"type":1138,"value":10718}," public page settings in the spec and the database (",{"type":1133,"tag":1173,"props":10720,"children":10723},{"href":10721,"rel":10722},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5aafd9c30319cc337d875fe7e308e7711e029abd",[1177],[10724],{"type":1138,"value":10725},"5aafd9c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10728,"children":10729},{},[10730,10732,10739],{"type":1138,"value":10731},"configurable branding: name, colours, font and logo (#118) (",{"type":1133,"tag":1173,"props":10733,"children":10736},{"href":10734,"rel":10735},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9656776f902007802762fe6bba1904817fe5ddca",[1177],[10737],{"type":1138,"value":10738},"9656776",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10741,"children":10742},{},[10743,10745,10752],{"type":1138,"value":10744},"keep past worlds when resetting a world (#114) (",{"type":1133,"tag":1173,"props":10746,"children":10749},{"href":10747,"rel":10748},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F17d98f5fd63e23f89b3632ae8ae9af66b9991c4b",[1177],[10750],{"type":1138,"value":10751},"17d98f5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10754,"children":10755},{},[10756,10758,10765],{"type":1138,"value":10757},"one two-line box for the MOTD instead of two inputs (",{"type":1133,"tag":1173,"props":10759,"children":10762},{"href":10760,"rel":10761},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd66bf8398ae3ec4c11fa6f821105e7de959db2dd",[1177],[10763],{"type":1138,"value":10764},"d66bf83",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10767,"children":10768},{},[10769,10774,10776,10783],{"type":1133,"tag":1146,"props":10770,"children":10771},{},[10772],{"type":1138,"value":10773},"branding:",{"type":1138,"value":10775}," describe branding changes in Activity (",{"type":1133,"tag":1173,"props":10777,"children":10780},{"href":10778,"rel":10779},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5743aa1b8a946458c6de79fee3dbccd26024c7b2",[1177],[10781],{"type":1138,"value":10782},"5743aa1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10785,"children":10786},{},[10787,10789,10796],{"type":1138,"value":10788},"player heads on the Players tab (#113) (",{"type":1133,"tag":1173,"props":10790,"children":10793},{"href":10791,"rel":10792},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb415543b875491f13a60d2c6833cdf44d73eb27",[1177],[10794],{"type":1138,"value":10795},"eb41554",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10798,"children":10799},{},[10800,10802,10809],{"type":1138,"value":10801},"rich text MOTD editor with a second line and Show codes (",{"type":1133,"tag":1173,"props":10803,"children":10806},{"href":10804,"rel":10805},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2429e44c4502296ed2da4f8a33709c40795940f2",[1177],[10807],{"type":1138,"value":10808},"2429e44",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10811,"children":10812},{},[10813,10815,10822],{"type":1138,"value":10814},"preview the server's entry in the multiplayer list (",{"type":1133,"tag":1173,"props":10816,"children":10819},{"href":10817,"rel":10818},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92f6961f1c9b92d1744762a8ba22a0acc2429149",[1177],[10820],{"type":1138,"value":10821},"92f6961",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10824,"children":10825},{},[10826,10828,10835],{"type":1138,"value":10827},"self-host Monocraft for the MOTD preview (",{"type":1133,"tag":1173,"props":10829,"children":10832},{"href":10830,"rel":10831},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe7febbc997c91035cb3a2cb3c855ec0faa8a496d",[1177],[10833],{"type":1138,"value":10834},"e7febbc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10837,"children":10838},{},[10839,10843,10845,10852],{"type":1133,"tag":1146,"props":10840,"children":10841},{},[10842],{"type":1138,"value":10773},{"type":1138,"value":10844}," System > Branding, and the brand across the panel (",{"type":1133,"tag":1173,"props":10846,"children":10849},{"href":10847,"rel":10848},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd50eebe2f0ef9a4b0432714c30c32a6974541fd2",[1177],[10850],{"type":1138,"value":10851},"d50eebe",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10854,"children":10855},{},[10856,10860,10862,10869],{"type":1133,"tag":1146,"props":10857,"children":10858},{},[10859],{"type":1138,"value":10773},{"type":1138,"value":10861}," use the brand in Discord, in-game messages and passkey prompts (",{"type":1133,"tag":1173,"props":10863,"children":10866},{"href":10864,"rel":10865},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F903911f62f4081579035e06f3b6da849de235c91",[1177],[10867],{"type":1138,"value":10868},"903911f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10871,"children":10872},{},[10873,10877,10879,10886],{"type":1133,"tag":1146,"props":10874,"children":10875},{},[10876],{"type":1138,"value":10773},{"type":1138,"value":10878}," store branding and serve the theme, logo and favicon (",{"type":1133,"tag":1173,"props":10880,"children":10883},{"href":10881,"rel":10882},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F09691a2afd8502a27369aa63fd781d248b4d5de1",[1177],[10884],{"type":1138,"value":10885},"09691a2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10888,"children":10889},{},[10890,10894,10896,10903],{"type":1133,"tag":1146,"props":10891,"children":10892},{},[10893],{"type":1138,"value":10773},{"type":1138,"value":10895}," clean uploaded SVG and PNG logos (",{"type":1133,"tag":1173,"props":10897,"children":10900},{"href":10898,"rel":10899},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbae37663b26f7d4cb20bf2bf03f088e99b3f945e",[1177],[10901],{"type":1138,"value":10902},"bae3766",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10905,"children":10906},{},[10907,10911,10913,10920],{"type":1133,"tag":1146,"props":10908,"children":10909},{},[10910],{"type":1138,"value":10773},{"type":1138,"value":10912}," colour scale, contrast checks and theme stylesheet from one accent (",{"type":1133,"tag":1173,"props":10914,"children":10917},{"href":10915,"rel":10916},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a7317bb55d346ba109c7bfe31e678ffe880fe26",[1177],[10918],{"type":1138,"value":10919},"1a7317b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10922,"children":10923},{},[10924,10926,10933],{"type":1138,"value":10925},"past worlds on the World tab, and keep options in the reset dialog (",{"type":1133,"tag":1173,"props":10927,"children":10930},{"href":10928,"rel":10929},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F03c2042f5fb685e6938ba8709df2a3fc1ad88737",[1177],[10931],{"type":1138,"value":10932},"03c2042",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10935,"children":10936},{},[10937,10939,10946],{"type":1138,"value":10938},"start a new server from a past world (",{"type":1133,"tag":1173,"props":10940,"children":10943},{"href":10941,"rel":10942},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc5586357bce30ba58a3565e98a45c9143c93a1da",[1177],[10944],{"type":1138,"value":10945},"c558635",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10948,"children":10949},{},[10950,10952,10959],{"type":1138,"value":10951},"keep the old world and its backup when resetting (",{"type":1133,"tag":1173,"props":10953,"children":10956},{"href":10954,"rel":10955},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa0c6254274a54659e3dc2e46716a2a7440dbfed3",[1177],[10957],{"type":1138,"value":10958},"a0c6254",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10961,"children":10962},{},[10963,10965,10972],{"type":1138,"value":10964},"past worlds, kept as named exports that never expire (",{"type":1133,"tag":1173,"props":10966,"children":10969},{"href":10967,"rel":10968},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7f9aa3b4d9871450456109912295b774e7b77f93",[1177],[10970],{"type":1138,"value":10971},"7f9aa3b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10974,"children":10975},{},[10976,10978,10985],{"type":1138,"value":10977},"backups that retention never deletes (",{"type":1133,"tag":1173,"props":10979,"children":10982},{"href":10980,"rel":10981},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62d06dc4d86df4255279f8be0692becd1fd636e1",[1177],[10983],{"type":1138,"value":10984},"62d06dc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":10987,"children":10988},{},[10989,10991,10998],{"type":1138,"value":10990},"player heads on the Players tab (",{"type":1133,"tag":1173,"props":10992,"children":10995},{"href":10993,"rel":10994},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6487a70191c0a4fb816b8fc13a3ec268c6363a2b",[1177],[10996],{"type":1138,"value":10997},"6487a70",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11000,"children":11001},{},[11002,11004,11011],{"type":1138,"value":11003},"read, write and lay out § formatted MOTDs (",{"type":1133,"tag":1173,"props":11005,"children":11008},{"href":11006,"rel":11007},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb6c3ffec445c0f2ea05900a101b0c7a75bb57406",[1177],[11009],{"type":1138,"value":11010},"b6c3ffe",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11013,"children":11014},{},[11015,11017,11024,11025],{"type":1138,"value":11016},"show client-only switch in content search (",{"type":1133,"tag":1173,"props":11018,"children":11021},{"href":11019,"rel":11020},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbabfeded89f7d332619dda27fcddf8d6867e8df1",[1177],[11022],{"type":1138,"value":11023},"babfede",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":11026,"children":11029},{"href":11027,"rel":11028},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F72",[1177],[11030],{"type":1138,"value":11031},"#72",{"type":1133,"tag":1195,"props":11033,"children":11034},{},[11035,11037,11044],{"type":1138,"value":11036},"UUIDs for online players, from usercache.json (",{"type":1133,"tag":1173,"props":11038,"children":11041},{"href":11039,"rel":11040},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65e2847df6d945d3edadad4d510dbce1ab6005e0",[1177],[11042],{"type":1138,"value":11043},"65e2847",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11046,"children":11047},{},[11048,11050,11057],{"type":1138,"value":11049},"cache player skins on disk and serve them to the panel (",{"type":1133,"tag":1173,"props":11051,"children":11054},{"href":11052,"rel":11053},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8c5a2eb567d668534a29aa5c51f52c18b87d2ea7",[1177],[11055],{"type":1138,"value":11056},"8c5a2eb",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11059,"children":11060},{},[11061,11065,11067,11074],{"type":1133,"tag":1146,"props":11062,"children":11063},{},[11064],{"type":1138,"value":10560},{"type":1138,"value":11066}," read player skins from Mojang's session server (",{"type":1133,"tag":1173,"props":11068,"children":11071},{"href":11069,"rel":11070},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21b3960131cbff23064f076a37b4a27592c9f6d1",[1177],[11072],{"type":1138,"value":11073},"21b3960",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":11076,"children":11077},{"id":1233},[11078],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":11080,"children":11081},{},[11082,11095,11108,11121,11138,11156,11169,11182,11199,11216,11233,11246,11263,11276,11294],{"type":1133,"tag":1195,"props":11083,"children":11084},{},[11085,11087,11094],{"type":1138,"value":11086},"bundle the invites migration again after the merge (",{"type":1133,"tag":1173,"props":11088,"children":11091},{"href":11089,"rel":11090},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F62a3c0d8316ff3379ffddb1eb21785f527a42177",[1177],[11092],{"type":1138,"value":11093},"62a3c0d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11096,"children":11097},{},[11098,11100,11107],{"type":1138,"value":11099},"keep the bundled migrations as generated (",{"type":1133,"tag":1173,"props":11101,"children":11104},{"href":11102,"rel":11103},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6aaecb8387e1008d91b939295562dd4fd16cf968",[1177],[11105],{"type":1138,"value":11106},"6aaecb8",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11109,"children":11110},{},[11111,11113,11120],{"type":1138,"value":11112},"only list disk use and updates for servers a person can see (",{"type":1133,"tag":1173,"props":11114,"children":11117},{"href":11115,"rel":11116},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1b1231fa63eb1a8289b6c9c641e5fc4abd457989",[1177],[11118],{"type":1138,"value":11119},"1b1231f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11122,"children":11123},{},[11124,11128,11130,11137],{"type":1133,"tag":1146,"props":11125,"children":11126},{},[11127],{"type":1138,"value":10068},{"type":1138,"value":11129}," look at the log once more after each change (",{"type":1133,"tag":1173,"props":11131,"children":11134},{"href":11132,"rel":11133},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3c1342728b84ece223514226a92b6bf2a8d8f172",[1177],[11135],{"type":1138,"value":11136},"3c13427",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11139,"children":11140},{},[11141,11146,11148,11155],{"type":1133,"tag":1146,"props":11142,"children":11143},{},[11144],{"type":1138,"value":11145},"console:",{"type":1138,"value":11147}," read the log again when asked during a read (",{"type":1133,"tag":1173,"props":11149,"children":11152},{"href":11150,"rel":11151},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81500eb48ff1ebcb36fdc3f2a370fffae989c04e",[1177],[11153],{"type":1138,"value":11154},"81500eb",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11157,"children":11158},{},[11159,11161,11168],{"type":1138,"value":11160},"bundle the roles migration (",{"type":1133,"tag":1173,"props":11162,"children":11165},{"href":11163,"rel":11164},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3e28cea0eaa181ed28bbc77a80400709445b289",[1177],[11166],{"type":1138,"value":11167},"f3e28ce",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11170,"children":11171},{},[11172,11174,11181],{"type":1138,"value":11173},"install client-only Modrinth projects when asked for (#111) (",{"type":1133,"tag":1173,"props":11175,"children":11178},{"href":11176,"rel":11177},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa524a1c49181eb9b36941f7c6b80ba690ebac43a",[1177],[11179],{"type":1138,"value":11180},"a524a1c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11183,"children":11184},{},[11185,11189,11191,11198],{"type":1133,"tag":1146,"props":11186,"children":11187},{},[11188],{"type":1138,"value":10773},{"type":1138,"value":11190}," line up the form, and keep edits when branding changes elsewhere (",{"type":1133,"tag":1173,"props":11192,"children":11195},{"href":11193,"rel":11194},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F44d685b1284682a61168ffe96c23c0fe9c18a065",[1177],[11196],{"type":1138,"value":11197},"44d685b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11200,"children":11201},{},[11202,11206,11208,11215],{"type":1133,"tag":1146,"props":11203,"children":11204},{},[11205],{"type":1138,"value":10773},{"type":1138,"value":11207}," tidy the Powered by Flytower line (",{"type":1133,"tag":1173,"props":11209,"children":11212},{"href":11210,"rel":11211},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff55db97c7e4337556819b66f0eee2e98695f7f98",[1177],[11213],{"type":1138,"value":11214},"f55db97",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11217,"children":11218},{},[11219,11223,11225,11232],{"type":1133,"tag":1146,"props":11220,"children":11221},{},[11222],{"type":1138,"value":10773},{"type":1138,"value":11224}," fit the name in the sidebar on one line (",{"type":1133,"tag":1173,"props":11226,"children":11229},{"href":11227,"rel":11228},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F941ff96a702c508d74e1677dd211ea4dc4f49991",[1177],[11230],{"type":1138,"value":11231},"941ff96",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11234,"children":11235},{},[11236,11238,11245],{"type":1138,"value":11237},"refresh past worlds after a reset without reloading the page (",{"type":1133,"tag":1173,"props":11239,"children":11242},{"href":11240,"rel":11241},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc2a2288bcd8459feaa5c605994cfea8e38a6c126",[1177],[11243],{"type":1138,"value":11244},"c2a2288",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11247,"children":11248},{},[11249,11253,11255,11262],{"type":1133,"tag":1146,"props":11250,"children":11251},{},[11252],{"type":1138,"value":10773},{"type":1138,"value":11254}," keep a long name on one line and the tab title current (",{"type":1133,"tag":1173,"props":11256,"children":11259},{"href":11257,"rel":11258},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55e8bf38ca8a2f33d4f5342df95ec2fd77ef201a",[1177],[11260],{"type":1138,"value":11261},"55e8bf3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11264,"children":11265},{},[11266,11268,11275],{"type":1138,"value":11267},"keep the MOTD's second line when a server is created (",{"type":1133,"tag":1173,"props":11269,"children":11272},{"href":11270,"rel":11271},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01473e7c5e5390a9810676de9c96e30b8980b8bb",[1177],[11273],{"type":1138,"value":11274},"01473e7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11277,"children":11278},{},[11279,11281,11288,11289],{"type":1138,"value":11280},"show content warnings in plans without blocking apply (",{"type":1133,"tag":1173,"props":11282,"children":11285},{"href":11283,"rel":11284},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F65604c875129e7957eef9bb63430974f94b5e4d9",[1177],[11286],{"type":1138,"value":11287},"65604c8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":11290,"children":11292},{"href":11027,"rel":11291},[1177],[11293],{"type":1138,"value":11031},{"type":1133,"tag":1195,"props":11295,"children":11296},{},[11297,11299,11306,11307],{"type":1138,"value":11298},"install client-only Modrinth projects when asked for, with a warning (",{"type":1133,"tag":1173,"props":11300,"children":11303},{"href":11301,"rel":11302},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6e3a34e29e411a4d36bcf03f96f9338c000a504",[1177],[11304],{"type":1138,"value":11305},"f6e3a34",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":11308,"children":11310},{"href":11027,"rel":11309},[1177],[11311],{"type":1138,"value":11031},{"type":1133,"tag":1184,"props":11313,"children":11314},{"id":7},[11315],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":11317,"children":11318},{},[11319,11332,11345,11358,11371,11384,11397,11410,11423,11436,11449,11462,11475,11488,11501,11514,11527,11540,11553],{"type":1133,"tag":1195,"props":11320,"children":11321},{},[11322,11324,11331],{"type":1138,"value":11323},"fold the people and roles notes into 1.2.0-beta.2 (",{"type":1133,"tag":1173,"props":11325,"children":11328},{"href":11326,"rel":11327},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2268de02da0aaed9c6072c9a7da445e7a88be076",[1177],[11329],{"type":1138,"value":11330},"2268de0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11333,"children":11334},{},[11335,11337,11344],{"type":1138,"value":11336},"custom roles and what people see (",{"type":1133,"tag":1173,"props":11338,"children":11341},{"href":11339,"rel":11340},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4d5788ed803444126382d993ae2ff4f13192d394",[1177],[11342],{"type":1138,"value":11343},"4d5788e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11346,"children":11347},{},[11348,11350,11357],{"type":1138,"value":11349},"people and roles (",{"type":1133,"tag":1173,"props":11351,"children":11354},{"href":11352,"rel":11353},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1d1e8f6cbaad4b60d61ba01134df25f28a456f0c",[1177],[11355],{"type":1138,"value":11356},"1d1e8f6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11359,"children":11360},{},[11361,11363,11370],{"type":1138,"value":11362},"testing notes and release notes for roles groundwork (",{"type":1133,"tag":1173,"props":11364,"children":11367},{"href":11365,"rel":11366},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F48293a3a7e34b3982470fbaea5e06d1871a718de",[1177],[11368],{"type":1138,"value":11369},"48293a3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11372,"children":11373},{},[11374,11376,11383],{"type":1138,"value":11375},"don't name Chunky as server-only; Modrinth marks it optional on clients (",{"type":1133,"tag":1173,"props":11377,"children":11380},{"href":11378,"rel":11379},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F106c067213ff05d3d8f07d0cf6b6aab20d4c598e",[1177],[11381],{"type":1138,"value":11382},"106c067",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11385,"children":11386},{},[11387,11389,11396],{"type":1138,"value":11388},"modpack fields in the YAML reference, testing notes and release summary (",{"type":1133,"tag":1173,"props":11390,"children":11393},{"href":11391,"rel":11392},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc8c7803a9f14e78698a2b00db2f58f3c91fc7335",[1177],[11394],{"type":1138,"value":11395},"c8c7803",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11398,"children":11399},{},[11400,11402,11409],{"type":1138,"value":11401},"players' modpack guide, YAML fields and testing notes (",{"type":1133,"tag":1173,"props":11403,"children":11406},{"href":11404,"rel":11405},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff49ff19ea743ca57ee11211cfa104faa94a017f3",[1177],[11407],{"type":1138,"value":11408},"f49ff19",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11411,"children":11412},{},[11413,11415,11422],{"type":1138,"value":11414},"public status page guide, YAML reference, testing notes and release summary (",{"type":1133,"tag":1173,"props":11416,"children":11419},{"href":11417,"rel":11418},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F470b4d5b70a376deb5f0fb96bd843a2c8b4554d5",[1177],[11420],{"type":1138,"value":11421},"470b4d5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11424,"children":11425},{},[11426,11428,11435],{"type":1138,"value":11427},"release summary for 1.1.0 (",{"type":1133,"tag":1173,"props":11429,"children":11432},{"href":11430,"rel":11431},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F35a69b289fa2c9424ed402134a7c35e7253cd3c0",[1177],[11433],{"type":1138,"value":11434},"35a69b2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11437,"children":11438},{},[11439,11441,11448],{"type":1138,"value":11440},"how to release an older commit (",{"type":1133,"tag":1173,"props":11442,"children":11445},{"href":11443,"rel":11444},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77eb9afd2c0a3eb70fbc011c21c969e8d970d5bc",[1177],[11446],{"type":1138,"value":11447},"77eb9af",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11450,"children":11451},{},[11452,11454,11461],{"type":1138,"value":11453},"server icons, and testing notes (",{"type":1133,"tag":1173,"props":11455,"children":11458},{"href":11456,"rel":11457},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0c1d906c7725f8a968a51b3e2bc79d50edd1e05e",[1177],[11459],{"type":1138,"value":11460},"0c1d906",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11463,"children":11464},{},[11465,11467,11474],{"type":1138,"value":11466},"bring the README up to date for 1.1.0 and 1.2.0 (#119) (",{"type":1133,"tag":1173,"props":11468,"children":11471},{"href":11469,"rel":11470},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd28a5e496f9a650ebf19591d5313bc326656e7a8",[1177],[11472],{"type":1138,"value":11473},"d28a5e4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11476,"children":11477},{},[11478,11480,11487],{"type":1138,"value":11479},"bring the README up to date for 1.1.0 and 1.2.0 (",{"type":1133,"tag":1173,"props":11481,"children":11484},{"href":11482,"rel":11483},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcf33c63d4609aed5d979979ac8cf19d9a9b39488",[1177],[11485],{"type":1138,"value":11486},"cf33c63",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11489,"children":11490},{},[11491,11493,11500],{"type":1138,"value":11492},"release summary for branding (",{"type":1133,"tag":1173,"props":11494,"children":11497},{"href":11495,"rel":11496},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fceab6f597739328d6f33d3f175d9a1ca55622496",[1177],[11498],{"type":1138,"value":11499},"ceab6f5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11502,"children":11503},{},[11504,11506,11513],{"type":1138,"value":11505},"branding, and its testing notes (",{"type":1133,"tag":1173,"props":11507,"children":11510},{"href":11508,"rel":11509},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2cb10cc294c2514e2fc3c3e64593fd7bad45c671",[1177],[11511],{"type":1138,"value":11512},"2cb10cc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11515,"children":11516},{},[11517,11519,11526],{"type":1138,"value":11518},"MOTD editor, codes in the spec, and testing notes (",{"type":1133,"tag":1173,"props":11520,"children":11523},{"href":11521,"rel":11522},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9a6bd0b2978f261bd38cf6a0d766446943a37aca",[1177],[11524],{"type":1138,"value":11525},"9a6bd0b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11528,"children":11529},{},[11530,11532,11539],{"type":1138,"value":11531},"past worlds, kept backups, and testing notes (",{"type":1133,"tag":1173,"props":11533,"children":11536},{"href":11534,"rel":11535},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6da0d7002884598f400b7551f380b94604da8b6c",[1177],[11537],{"type":1138,"value":11538},"6da0d70",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11541,"children":11542},{},[11543,11545,11552],{"type":1138,"value":11544},"release summary and testing notes for player heads (",{"type":1133,"tag":1173,"props":11546,"children":11549},{"href":11547,"rel":11548},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7ddd483792502377b013f2ce65b9ea3573e3e7fa",[1177],[11550],{"type":1138,"value":11551},"7ddd483",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11554,"children":11555},{},[11556,11558,11565,11566],{"type":1138,"value":11557},"client-only mods, testing notes and release summary (",{"type":1133,"tag":1173,"props":11559,"children":11562},{"href":11560,"rel":11561},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F32eb89cb3192270f258f0d8f07dee69127e0788e",[1177],[11563],{"type":1138,"value":11564},"32eb89c",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":11567,"children":11569},{"href":11027,"rel":11568},[1177],[11570],{"type":1138,"value":11031},{"type":1133,"tag":1184,"props":11572,"children":11573},{"id":1664},[11574],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":11576,"children":11577},{},[11578,11591,11604,11617,11630,11643,11661,11674,11692,11705,11722],{"type":1133,"tag":1195,"props":11579,"children":11580},{},[11581,11583,11590],{"type":1138,"value":11582},"custom roles (",{"type":1133,"tag":1173,"props":11584,"children":11587},{"href":11585,"rel":11586},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1e45fd38a07db6598b18fcf1d4467830ff4ade37",[1177],[11588],{"type":1138,"value":11589},"1e45fd3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11592,"children":11593},{},[11594,11596,11603],{"type":1138,"value":11595},"invites, last Owner and people changes (",{"type":1133,"tag":1173,"props":11597,"children":11600},{"href":11598,"rel":11599},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F359bc5e0dacd5431f9b7dfbbaf5da5d02e6b2734",[1177],[11601],{"type":1138,"value":11602},"359bc5e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11605,"children":11606},{},[11607,11609,11616],{"type":1138,"value":11608},"fail when an API route skips its permission check (",{"type":1133,"tag":1173,"props":11610,"children":11613},{"href":11611,"rel":11612},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b429a1279725efb1aa795cc62d65e57759d94ba",[1177],[11614],{"type":1138,"value":11615},"4b429a1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11618,"children":11619},{},[11620,11622,11629],{"type":1138,"value":11621},"release a chosen tag, branch or commit, with a 1.1.0 summary (#121) (",{"type":1133,"tag":1173,"props":11623,"children":11626},{"href":11624,"rel":11625},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb6e14697c7a598d41dea895779ef0513deb12d2f",[1177],[11627],{"type":1138,"value":11628},"b6e1469",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11631,"children":11632},{},[11633,11635,11642],{"type":1138,"value":11634},"the sealer test can't fail when ciphertext happens to contain \"shh\" (",{"type":1133,"tag":1173,"props":11636,"children":11639},{"href":11637,"rel":11638},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe14c73e8155e1dd3087f6b0c0f1904e74b79b89f",[1177],[11640],{"type":1138,"value":11641},"e14c73e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11644,"children":11645},{},[11646,11651,11653,11660],{"type":1133,"tag":1146,"props":11647,"children":11648},{},[11649],{"type":1138,"value":11650},"release:",{"type":1138,"value":11652}," a stable release's notes cover everything since the last stable one (",{"type":1133,"tag":1173,"props":11654,"children":11657},{"href":11655,"rel":11656},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7bda9098a1ad9944afd3294aaba1fed0e085c9d0",[1177],[11658],{"type":1138,"value":11659},"7bda909",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11662,"children":11663},{},[11664,11666,11673],{"type":1138,"value":11665},"release a chosen tag, branch or commit from the Release workflow (",{"type":1133,"tag":1173,"props":11667,"children":11670},{"href":11668,"rel":11669},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fad640a5db98fb5c093afac5a536e0b400593c051",[1177],[11671],{"type":1138,"value":11672},"ad640a5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11675,"children":11676},{},[11677,11682,11684,11691],{"type":1133,"tag":1146,"props":11678,"children":11679},{},[11680],{"type":1138,"value":11681},"e2e:",{"type":1138,"value":11683}," save branding through the UI and reset it (",{"type":1133,"tag":1173,"props":11685,"children":11688},{"href":11686,"rel":11687},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fec38e7d296184087d73fd0c05073fd783f4cd818",[1177],[11689],{"type":1138,"value":11690},"ec38e7d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11693,"children":11694},{},[11695,11697,11704],{"type":1138,"value":11696},"a two-line MOTD with codes round-trips through YAML (",{"type":1133,"tag":1173,"props":11698,"children":11701},{"href":11699,"rel":11700},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92af9e0b4b08fb26b9a787c40e5f6d44315d6006",[1177],[11702],{"type":1138,"value":11703},"92af9e0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11706,"children":11707},{},[11708,11712,11714,11721],{"type":1133,"tag":1146,"props":11709,"children":11710},{},[11711],{"type":1138,"value":10773},{"type":1138,"value":11713}," colours, cleaning, storage and where the brand shows (",{"type":1133,"tag":1173,"props":11715,"children":11718},{"href":11716,"rel":11717},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9fa478d45df5f3ad739697aba5e62d0055c77288",[1177],[11719],{"type":1138,"value":11720},"9fa478d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11723,"children":11724},{},[11725,11727,11734],{"type":1138,"value":11726},"run E2E less often: skip housekeeping-only merges, one upgrade per minor version (",{"type":1133,"tag":1173,"props":11728,"children":11731},{"href":11729,"rel":11730},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa54256edba1032288371ad3d2ecf8d86676fbb05",[1177],[11732],{"type":1138,"value":11733},"a54256e",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":11736,"children":11737},{},[11738,11742,11743],{"type":1133,"tag":1146,"props":11739,"children":11740},{},[11741],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":11744,"children":11747},{"href":11745,"rel":11746},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0...v1.2.0",[1177],[11748],{"type":1138,"value":11745},{"data":11750,"body":11751},{},{"type":1130,"children":11752},[11753,11817,11882,11887,11899,11903,12212,12216,12287,12291,12374,12378,12411],{"type":1133,"tag":1134,"props":11754,"children":11755},{},[11756,11761,11763,11767,11769,11773,11774,11778,11779,11783,11785,11789,11791,11795,11797,11801,11803,11808,11810,11816],{"type":1133,"tag":1146,"props":11757,"children":11758},{},[11759],{"type":1138,"value":11760},"People and roles.",{"type":1138,"value":11762}," Invite people with a one-time link from the new ",{"type":1133,"tag":1146,"props":11764,"children":11765},{},[11766],{"type":1138,"value":1753},{"type":1138,"value":11768}," page in the sidebar, as an ",{"type":1133,"tag":1146,"props":11770,"children":11771},{},[11772],{"type":1138,"value":10151},{"type":1138,"value":4122},{"type":1133,"tag":1146,"props":11775,"children":11776},{},[11777],{"type":1138,"value":10157},{"type":1138,"value":10159},{"type":1133,"tag":1146,"props":11780,"children":11781},{},[11782],{"type":1138,"value":10164},{"type":1138,"value":11784},", for one server or all of them, or make your own roles from a list of permissions on the ",{"type":1133,"tag":1146,"props":11786,"children":11787},{},[11788],{"type":1138,"value":599},{"type":1138,"value":11790}," tab. People see only the servers and buttons they can use, and changes apply straight away. You become the ",{"type":1133,"tag":1146,"props":11792,"children":11793},{},[11794],{"type":1138,"value":10171},{"type":1138,"value":11796}," when you update. Click your name at the bottom of the sidebar for ",{"type":1133,"tag":1146,"props":11798,"children":11799},{},[11800],{"type":1138,"value":176},{"type":1138,"value":11802},": your name, light or dark (remembered on every device), passkeys, recovery codes and signing out everywhere else. SSH now has its own section in ",{"type":1133,"tag":1146,"props":11804,"children":11805},{},[11806],{"type":1138,"value":11807},"System",{"type":1138,"value":11809},", and the installer prints a setup link so first-time setup is one click. See ",{"type":1133,"tag":1173,"props":11811,"children":11814},{"href":11812,"rel":11813},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.2\u002Fdocs\u002Fpeople.md",[1177],[11815],{"type":1138,"value":78},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":11818,"children":11819},{},[11820,11825,11827,11832,11834,11839,11841,11846,11848,11854,11856,11860,11861,11866,11868,11873,11875,11881],{"type":1133,"tag":1146,"props":11821,"children":11822},{},[11823],{"type":1138,"value":11824},"Public status page.",{"type":1138,"value":11826}," Each server can have a page anyone can open without signing in, at ",{"type":1133,"tag":1789,"props":11828,"children":11830},{"className":11829},[],[11831],{"type":1138,"value":10192},{"type":1138,"value":11833},", 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 ",{"type":1133,"tag":1146,"props":11835,"children":11836},{},[11837],{"type":1138,"value":11838},"modpack",{"type":1138,"value":11840}," (",{"type":1133,"tag":1789,"props":11842,"children":11844},{"className":11843},[],[11845],{"type":1138,"value":10200},{"type":1138,"value":11847},") with the server's mods and any client-only extras you add, and a server with its own hostname shows its page at ",{"type":1133,"tag":1789,"props":11849,"children":11851},{"className":11850},[],[11852],{"type":1138,"value":11853},"https:\u002F\u002F\u003Chostname>",{"type":1138,"value":11855},". Turn it on from the server's ",{"type":1133,"tag":1146,"props":11857,"children":11858},{},[11859],{"type":1138,"value":1746},{"type":1138,"value":4122},{"type":1133,"tag":1146,"props":11862,"children":11863},{},[11864],{"type":1138,"value":11865},"Public page",{"type":1138,"value":11867},". Existing installs need the installer re-run once, with the same ",{"type":1133,"tag":1789,"props":11869,"children":11871},{"className":11870},[],[11872],{"type":1138,"value":10208},{"type":1138,"value":11874},", for hostnames to work. See ",{"type":1133,"tag":1173,"props":11876,"children":11879},{"href":11877,"rel":11878},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.2\u002Fdocs\u002Fstatus-page.md",[1177],[11880],{"type":1138,"value":102},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":11883,"children":11884},{},[11885],{"type":1138,"value":11886},"Join and leave notifications are reliable again.",{"type":1133,"tag":1134,"props":11888,"children":11889},{},[11890,11892,11898],{"type":1138,"value":11891},"Testing notes are in the \"Public status page\" and \"People and roles\" sections of ",{"type":1133,"tag":1173,"props":11893,"children":11896},{"href":11894,"rel":11895},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.2\u002Fdocs\u002Ftesting-1.2.0.md",[1177],[11897],{"type":1138,"value":10262},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":11900,"children":11901},{"id":1186},[11902],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":11904,"children":11905},{},[11906,11916,11926,11936,11946,11956,11966,11976,11986,11996,12006,12016,12026,12036,12046,12056,12066,12076,12086,12096,12110,12124,12138,12152,12166,12184,12198],{"type":1133,"tag":1195,"props":11907,"children":11908},{},[11909,11910,11915],{"type":1138,"value":10275},{"type":1133,"tag":1173,"props":11911,"children":11913},{"href":10278,"rel":11912},[1177],[11914],{"type":1138,"value":10282},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11917,"children":11918},{},[11919,11920,11925],{"type":1138,"value":10288},{"type":1133,"tag":1173,"props":11921,"children":11923},{"href":10291,"rel":11922},[1177],[11924],{"type":1138,"value":10295},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11927,"children":11928},{},[11929,11930,11935],{"type":1138,"value":10301},{"type":1133,"tag":1173,"props":11931,"children":11933},{"href":10304,"rel":11932},[1177],[11934],{"type":1138,"value":10308},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11937,"children":11938},{},[11939,11940,11945],{"type":1138,"value":10314},{"type":1133,"tag":1173,"props":11941,"children":11943},{"href":10317,"rel":11942},[1177],[11944],{"type":1138,"value":10321},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11947,"children":11948},{},[11949,11950,11955],{"type":1138,"value":10327},{"type":1133,"tag":1173,"props":11951,"children":11953},{"href":10330,"rel":11952},[1177],[11954],{"type":1138,"value":10334},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11957,"children":11958},{},[11959,11960,11965],{"type":1138,"value":10340},{"type":1133,"tag":1173,"props":11961,"children":11963},{"href":10343,"rel":11962},[1177],[11964],{"type":1138,"value":10347},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11967,"children":11968},{},[11969,11970,11975],{"type":1138,"value":10353},{"type":1133,"tag":1173,"props":11971,"children":11973},{"href":10356,"rel":11972},[1177],[11974],{"type":1138,"value":10360},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11977,"children":11978},{},[11979,11980,11985],{"type":1138,"value":10366},{"type":1133,"tag":1173,"props":11981,"children":11983},{"href":10369,"rel":11982},[1177],[11984],{"type":1138,"value":10373},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11987,"children":11988},{},[11989,11990,11995],{"type":1138,"value":10379},{"type":1133,"tag":1173,"props":11991,"children":11993},{"href":10382,"rel":11992},[1177],[11994],{"type":1138,"value":10386},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":11997,"children":11998},{},[11999,12000,12005],{"type":1138,"value":10392},{"type":1133,"tag":1173,"props":12001,"children":12003},{"href":10395,"rel":12002},[1177],[12004],{"type":1138,"value":10399},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12007,"children":12008},{},[12009,12010,12015],{"type":1138,"value":10405},{"type":1133,"tag":1173,"props":12011,"children":12013},{"href":10408,"rel":12012},[1177],[12014],{"type":1138,"value":10412},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12017,"children":12018},{},[12019,12020,12025],{"type":1138,"value":10418},{"type":1133,"tag":1173,"props":12021,"children":12023},{"href":10421,"rel":12022},[1177],[12024],{"type":1138,"value":10425},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12027,"children":12028},{},[12029,12030,12035],{"type":1138,"value":10431},{"type":1133,"tag":1173,"props":12031,"children":12033},{"href":10434,"rel":12032},[1177],[12034],{"type":1138,"value":10438},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12037,"children":12038},{},[12039,12040,12045],{"type":1138,"value":10444},{"type":1133,"tag":1173,"props":12041,"children":12043},{"href":10447,"rel":12042},[1177],[12044],{"type":1138,"value":10451},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12047,"children":12048},{},[12049,12050,12055],{"type":1138,"value":10457},{"type":1133,"tag":1173,"props":12051,"children":12053},{"href":10460,"rel":12052},[1177],[12054],{"type":1138,"value":10464},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12057,"children":12058},{},[12059,12060,12065],{"type":1138,"value":10470},{"type":1133,"tag":1173,"props":12061,"children":12063},{"href":10473,"rel":12062},[1177],[12064],{"type":1138,"value":10477},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12067,"children":12068},{},[12069,12070,12075],{"type":1138,"value":10483},{"type":1133,"tag":1173,"props":12071,"children":12073},{"href":10486,"rel":12072},[1177],[12074],{"type":1138,"value":10490},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12077,"children":12078},{},[12079,12080,12085],{"type":1138,"value":10496},{"type":1133,"tag":1173,"props":12081,"children":12083},{"href":10499,"rel":12082},[1177],[12084],{"type":1138,"value":10503},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12087,"children":12088},{},[12089,12090,12095],{"type":1138,"value":10509},{"type":1133,"tag":1173,"props":12091,"children":12093},{"href":10512,"rel":12092},[1177],[12094],{"type":1138,"value":10516},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12097,"children":12098},{},[12099,12103,12104,12109],{"type":1133,"tag":1146,"props":12100,"children":12101},{},[12102],{"type":1138,"value":10525},{"type":1138,"value":10527},{"type":1133,"tag":1173,"props":12105,"children":12107},{"href":10530,"rel":12106},[1177],[12108],{"type":1138,"value":10534},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12111,"children":12112},{},[12113,12117,12118,12123],{"type":1133,"tag":1146,"props":12114,"children":12115},{},[12116],{"type":1138,"value":10525},{"type":1138,"value":10544},{"type":1133,"tag":1173,"props":12119,"children":12121},{"href":10547,"rel":12120},[1177],[12122],{"type":1138,"value":10551},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12125,"children":12126},{},[12127,12131,12132,12137],{"type":1133,"tag":1146,"props":12128,"children":12129},{},[12130],{"type":1138,"value":10560},{"type":1138,"value":10562},{"type":1133,"tag":1173,"props":12133,"children":12135},{"href":10565,"rel":12134},[1177],[12136],{"type":1138,"value":10569},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12139,"children":12140},{},[12141,12145,12146,12151],{"type":1133,"tag":1146,"props":12142,"children":12143},{},[12144],{"type":1138,"value":10525},{"type":1138,"value":10579},{"type":1133,"tag":1173,"props":12147,"children":12149},{"href":10582,"rel":12148},[1177],[12150],{"type":1138,"value":10586},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12153,"children":12154},{},[12155,12159,12160,12165],{"type":1133,"tag":1146,"props":12156,"children":12157},{},[12158],{"type":1138,"value":10525},{"type":1138,"value":10622},{"type":1133,"tag":1173,"props":12161,"children":12163},{"href":10625,"rel":12162},[1177],[12164],{"type":1138,"value":10629},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12167,"children":12168},{},[12169,12173,12174],{"type":1133,"tag":1146,"props":12170,"children":12171},{},[12172],{"type":1138,"value":10525},{"type":1138,"value":10665},{"type":1133,"tag":5026,"props":12175,"children":12176},{},[12177,12178,12183],{"type":1138,"value":10670},{"type":1133,"tag":1173,"props":12179,"children":12181},{"href":10673,"rel":12180},[1177],[12182],{"type":1138,"value":10677},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12185,"children":12186},{},[12187,12191,12192,12197],{"type":1133,"tag":1146,"props":12188,"children":12189},{},[12190],{"type":1138,"value":10525},{"type":1138,"value":10700},{"type":1133,"tag":1173,"props":12193,"children":12195},{"href":10703,"rel":12194},[1177],[12196],{"type":1138,"value":10707},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12199,"children":12200},{},[12201,12205,12206,12211],{"type":1133,"tag":1146,"props":12202,"children":12203},{},[12204],{"type":1138,"value":10716},{"type":1138,"value":10718},{"type":1133,"tag":1173,"props":12207,"children":12209},{"href":10721,"rel":12208},[1177],[12210],{"type":1138,"value":10725},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":12213,"children":12214},{"id":1233},[12215],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":12217,"children":12218},{},[12219,12229,12239,12249,12263,12277],{"type":1133,"tag":1195,"props":12220,"children":12221},{},[12222,12223,12228],{"type":1138,"value":11086},{"type":1133,"tag":1173,"props":12224,"children":12226},{"href":11089,"rel":12225},[1177],[12227],{"type":1138,"value":11093},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12230,"children":12231},{},[12232,12233,12238],{"type":1138,"value":11099},{"type":1133,"tag":1173,"props":12234,"children":12236},{"href":11102,"rel":12235},[1177],[12237],{"type":1138,"value":11106},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12240,"children":12241},{},[12242,12243,12248],{"type":1138,"value":11112},{"type":1133,"tag":1173,"props":12244,"children":12246},{"href":11115,"rel":12245},[1177],[12247],{"type":1138,"value":11119},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12250,"children":12251},{},[12252,12256,12257,12262],{"type":1133,"tag":1146,"props":12253,"children":12254},{},[12255],{"type":1138,"value":10068},{"type":1138,"value":11129},{"type":1133,"tag":1173,"props":12258,"children":12260},{"href":11132,"rel":12259},[1177],[12261],{"type":1138,"value":11136},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12264,"children":12265},{},[12266,12270,12271,12276],{"type":1133,"tag":1146,"props":12267,"children":12268},{},[12269],{"type":1138,"value":11145},{"type":1138,"value":11147},{"type":1133,"tag":1173,"props":12272,"children":12274},{"href":11150,"rel":12273},[1177],[12275],{"type":1138,"value":11154},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12278,"children":12279},{},[12280,12281,12286],{"type":1138,"value":11160},{"type":1133,"tag":1173,"props":12282,"children":12284},{"href":11163,"rel":12283},[1177],[12285],{"type":1138,"value":11167},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":12288,"children":12289},{"id":7},[12290],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":12292,"children":12293},{},[12294,12304,12314,12324,12334,12344,12354,12364],{"type":1133,"tag":1195,"props":12295,"children":12296},{},[12297,12298,12303],{"type":1138,"value":11323},{"type":1133,"tag":1173,"props":12299,"children":12301},{"href":11326,"rel":12300},[1177],[12302],{"type":1138,"value":11330},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12305,"children":12306},{},[12307,12308,12313],{"type":1138,"value":11336},{"type":1133,"tag":1173,"props":12309,"children":12311},{"href":11339,"rel":12310},[1177],[12312],{"type":1138,"value":11343},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12315,"children":12316},{},[12317,12318,12323],{"type":1138,"value":11349},{"type":1133,"tag":1173,"props":12319,"children":12321},{"href":11352,"rel":12320},[1177],[12322],{"type":1138,"value":11356},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12325,"children":12326},{},[12327,12328,12333],{"type":1138,"value":11362},{"type":1133,"tag":1173,"props":12329,"children":12331},{"href":11365,"rel":12330},[1177],[12332],{"type":1138,"value":11369},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12335,"children":12336},{},[12337,12338,12343],{"type":1138,"value":11375},{"type":1133,"tag":1173,"props":12339,"children":12341},{"href":11378,"rel":12340},[1177],[12342],{"type":1138,"value":11382},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12345,"children":12346},{},[12347,12348,12353],{"type":1138,"value":11388},{"type":1133,"tag":1173,"props":12349,"children":12351},{"href":11391,"rel":12350},[1177],[12352],{"type":1138,"value":11395},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12355,"children":12356},{},[12357,12358,12363],{"type":1138,"value":11401},{"type":1133,"tag":1173,"props":12359,"children":12361},{"href":11404,"rel":12360},[1177],[12362],{"type":1138,"value":11408},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12365,"children":12366},{},[12367,12368,12373],{"type":1138,"value":11414},{"type":1133,"tag":1173,"props":12369,"children":12371},{"href":11417,"rel":12370},[1177],[12372],{"type":1138,"value":11421},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":12375,"children":12376},{"id":1664},[12377],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":12379,"children":12380},{},[12381,12391,12401],{"type":1133,"tag":1195,"props":12382,"children":12383},{},[12384,12385,12390],{"type":1138,"value":11582},{"type":1133,"tag":1173,"props":12386,"children":12388},{"href":11585,"rel":12387},[1177],[12389],{"type":1138,"value":11589},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12392,"children":12393},{},[12394,12395,12400],{"type":1138,"value":11595},{"type":1133,"tag":1173,"props":12396,"children":12398},{"href":11598,"rel":12397},[1177],[12399],{"type":1138,"value":11602},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12402,"children":12403},{},[12404,12405,12410],{"type":1138,"value":11608},{"type":1133,"tag":1173,"props":12406,"children":12408},{"href":11611,"rel":12407},[1177],[12409],{"type":1138,"value":11615},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":12412,"children":12413},{},[12414,12418,12419],{"type":1133,"tag":1146,"props":12415,"children":12416},{},[12417],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":12420,"children":12423},{"href":12421,"rel":12422},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.0-beta.1...v1.2.0-beta.2",[1177],[12424],{"type":1138,"value":12421},{"data":12426,"body":12427},{},{"type":1130,"children":12428},[12429,12448,12474,12512,12531,12566,12599,12611,12615,12941,12945,13064,13068,13186,13190,13285],{"type":1133,"tag":1134,"props":12430,"children":12431},{},[12432,12434,12438,12440,12446],{"type":1138,"value":12433},"Players now have faces. Every list on the ",{"type":1133,"tag":1146,"props":12435,"children":12436},{},[12437],{"type":1138,"value":809},{"type":1138,"value":12439}," 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 ",{"type":1133,"tag":1789,"props":12441,"children":12443},{"className":12442},[],[12444],{"type":1138,"value":12445},"\u002Fvar\u002Flib\u002Fflytower\u002Fskins",{"type":1138,"value":12447},", 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.",{"type":1133,"tag":1134,"props":12449,"children":12450},{},[12451,12453,12458,12460,12465,12467,12473],{"type":1138,"value":12452},"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 ",{"type":1133,"tag":1146,"props":12454,"children":12455},{},[12456],{"type":1138,"value":12457},"Add content",{"type":1138,"value":12459}," with the new ",{"type":1133,"tag":1146,"props":12461,"children":12462},{},[12463],{"type":1138,"value":12464},"Show client-only",{"type":1138,"value":12466}," 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 ",{"type":1133,"tag":1173,"props":12468,"children":12471},{"href":12469,"rel":12470},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Fcontent.md#client-only-mods",[1177],[12472],{"type":1138,"value":293},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":12475,"children":12476},{},[12477,12479,12483,12485,12489,12491,12496,12498,12503,12505,12511],{"type":1138,"value":12478},"Resetting a world can now end a season instead of throwing it away. The reset dialog offers to keep the old world as a ",{"type":1133,"tag":1146,"props":12480,"children":12481},{},[12482],{"type":1138,"value":10248},{"type":1138,"value":12484}," 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 ",{"type":1133,"tag":1146,"props":12486,"children":12487},{},[12488],{"type":1138,"value":3927},{"type":1138,"value":12490}," tab until you delete them, where each can be downloaded, shared with a link, renamed, or turned into a new server through ",{"type":1133,"tag":1146,"props":12492,"children":12493},{},[12494],{"type":1138,"value":12495},"Import",{"type":1138,"value":12497},". Any backup can also be marked ",{"type":1133,"tag":1146,"props":12499,"children":12500},{},[12501],{"type":1138,"value":12502},"Keep forever",{"type":1138,"value":12504}," from its menu. See ",{"type":1133,"tag":1173,"props":12506,"children":12509},{"href":12507,"rel":12508},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Fbackups.md#past-worlds",[1177],[12510],{"type":1138,"value":239},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":12513,"children":12514},{},[12515,12517,12522,12524,12530],{"type":1138,"value":12516},"Flytower can now wear your own brand. On ",{"type":1133,"tag":1146,"props":12518,"children":12519},{},[12520],{"type":1138,"value":12521},"System → Branding",{"type":1138,"value":12523},", 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 ",{"type":1133,"tag":1173,"props":12525,"children":12528},{"href":12526,"rel":12527},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Fbranding.md",[1177],[12529],{"type":1138,"value":32},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":12532,"children":12533},{},[12534,12536,12541,12543,12548,12550,12556,12558,12564],{"type":1138,"value":12535},"The message of the day has a proper editor. ",{"type":1133,"tag":1146,"props":12537,"children":12538},{},[12539],{"type":1138,"value":12540},"Game settings",{"type":1138,"value":12542}," 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. ",{"type":1133,"tag":1146,"props":12544,"children":12545},{},[12546],{"type":1138,"value":12547},"Show codes",{"type":1138,"value":12549}," shows the raw ",{"type":1133,"tag":1789,"props":12551,"children":12553},{"className":12552},[],[12554],{"type":1138,"value":12555},"§",{"type":1138,"value":12557}," codes for anyone who'd rather type them. The MOTD is still the same ",{"type":1133,"tag":1789,"props":12559,"children":12561},{"className":12560},[],[12562],{"type":1138,"value":12563},"motd:",{"type":1138,"value":12565}," string in YAML, so specs, clones and imports are unchanged, and an MOTD with codes written by hand opens already formatted.",{"type":1133,"tag":1134,"props":12567,"children":12568},{},[12569,12571,12576,12578,12582,12584,12590,12592,12597],{"type":1138,"value":12570},"Servers can have their own icon in the multiplayer list. ",{"type":1133,"tag":1146,"props":12572,"children":12573},{},[12574],{"type":1138,"value":12575},"Upload",{"type":1138,"value":12577}," a picture in ",{"type":1133,"tag":1146,"props":12579,"children":12580},{},[12581],{"type":1138,"value":12540},{"type":1138,"value":12583},", crop it square and save: Flytower scales it to the 64×64 ",{"type":1133,"tag":1789,"props":12585,"children":12587},{"className":12586},[],[12588],{"type":1138,"value":12589},"server-icon.png",{"type":1138,"value":12591}," Minecraft reads, keeps only the image (none of the file's metadata), and shows it in the MOTD preview. ",{"type":1133,"tag":1146,"props":12593,"children":12594},{},[12595],{"type":1138,"value":12596},"Remove",{"type":1138,"value":12598}," goes back to the default, and clones keep the icon. Like the MOTD, it shows after the next restart.",{"type":1133,"tag":1134,"props":12600,"children":12601},{},[12602,12604,12610],{"type":1138,"value":12603},"Testing notes are in the \"Player heads\", \"Client-only mods\", \"Past worlds\", \"Branding\", \"MOTD editor\" and \"Server icon\" sections of ",{"type":1133,"tag":1173,"props":12605,"children":12608},{"href":12606,"rel":12607},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.2.0-beta.1\u002Fdocs\u002Ftesting-1.2.0.md",[1177],[12609],{"type":1138,"value":10262},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":12612,"children":12613},{"id":1186},[12614],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":12616,"children":12617},{},[12618,12628,12638,12648,12658,12668,12678,12688,12698,12712,12722,12732,12742,12752,12766,12780,12794,12808,12822,12832,12842,12852,12862,12872,12882,12892,12907,12917,12927],{"type":1133,"tag":1195,"props":12619,"children":12620},{},[12621,12622,12627],{"type":1138,"value":10592},{"type":1133,"tag":1173,"props":12623,"children":12625},{"href":10595,"rel":12624},[1177],[12626],{"type":1138,"value":10599},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12629,"children":12630},{},[12631,12632,12637],{"type":1138,"value":10605},{"type":1133,"tag":1173,"props":12633,"children":12635},{"href":10608,"rel":12634},[1177],[12636],{"type":1138,"value":10612},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12639,"children":12640},{},[12641,12642,12647],{"type":1138,"value":10635},{"type":1133,"tag":1173,"props":12643,"children":12645},{"href":10638,"rel":12644},[1177],[12646],{"type":1138,"value":10642},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12649,"children":12650},{},[12651,12652,12657],{"type":1138,"value":10648},{"type":1133,"tag":1173,"props":12653,"children":12655},{"href":10651,"rel":12654},[1177],[12656],{"type":1138,"value":10655},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12659,"children":12660},{},[12661,12662,12667],{"type":1138,"value":10683},{"type":1133,"tag":1173,"props":12663,"children":12665},{"href":10686,"rel":12664},[1177],[12666],{"type":1138,"value":10690},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12669,"children":12670},{},[12671,12672,12677],{"type":1138,"value":10731},{"type":1133,"tag":1173,"props":12673,"children":12675},{"href":10734,"rel":12674},[1177],[12676],{"type":1138,"value":10738},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12679,"children":12680},{},[12681,12682,12687],{"type":1138,"value":10744},{"type":1133,"tag":1173,"props":12683,"children":12685},{"href":10747,"rel":12684},[1177],[12686],{"type":1138,"value":10751},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12689,"children":12690},{},[12691,12692,12697],{"type":1138,"value":10757},{"type":1133,"tag":1173,"props":12693,"children":12695},{"href":10760,"rel":12694},[1177],[12696],{"type":1138,"value":10764},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12699,"children":12700},{},[12701,12705,12706,12711],{"type":1133,"tag":1146,"props":12702,"children":12703},{},[12704],{"type":1138,"value":10773},{"type":1138,"value":10775},{"type":1133,"tag":1173,"props":12707,"children":12709},{"href":10778,"rel":12708},[1177],[12710],{"type":1138,"value":10782},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12713,"children":12714},{},[12715,12716,12721],{"type":1138,"value":10788},{"type":1133,"tag":1173,"props":12717,"children":12719},{"href":10791,"rel":12718},[1177],[12720],{"type":1138,"value":10795},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12723,"children":12724},{},[12725,12726,12731],{"type":1138,"value":10801},{"type":1133,"tag":1173,"props":12727,"children":12729},{"href":10804,"rel":12728},[1177],[12730],{"type":1138,"value":10808},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12733,"children":12734},{},[12735,12736,12741],{"type":1138,"value":10814},{"type":1133,"tag":1173,"props":12737,"children":12739},{"href":10817,"rel":12738},[1177],[12740],{"type":1138,"value":10821},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12743,"children":12744},{},[12745,12746,12751],{"type":1138,"value":10827},{"type":1133,"tag":1173,"props":12747,"children":12749},{"href":10830,"rel":12748},[1177],[12750],{"type":1138,"value":10834},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12753,"children":12754},{},[12755,12759,12760,12765],{"type":1133,"tag":1146,"props":12756,"children":12757},{},[12758],{"type":1138,"value":10773},{"type":1138,"value":10844},{"type":1133,"tag":1173,"props":12761,"children":12763},{"href":10847,"rel":12762},[1177],[12764],{"type":1138,"value":10851},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12767,"children":12768},{},[12769,12773,12774,12779],{"type":1133,"tag":1146,"props":12770,"children":12771},{},[12772],{"type":1138,"value":10773},{"type":1138,"value":10861},{"type":1133,"tag":1173,"props":12775,"children":12777},{"href":10864,"rel":12776},[1177],[12778],{"type":1138,"value":10868},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12781,"children":12782},{},[12783,12787,12788,12793],{"type":1133,"tag":1146,"props":12784,"children":12785},{},[12786],{"type":1138,"value":10773},{"type":1138,"value":10878},{"type":1133,"tag":1173,"props":12789,"children":12791},{"href":10881,"rel":12790},[1177],[12792],{"type":1138,"value":10885},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12795,"children":12796},{},[12797,12801,12802,12807],{"type":1133,"tag":1146,"props":12798,"children":12799},{},[12800],{"type":1138,"value":10773},{"type":1138,"value":10895},{"type":1133,"tag":1173,"props":12803,"children":12805},{"href":10898,"rel":12804},[1177],[12806],{"type":1138,"value":10902},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12809,"children":12810},{},[12811,12815,12816,12821],{"type":1133,"tag":1146,"props":12812,"children":12813},{},[12814],{"type":1138,"value":10773},{"type":1138,"value":10912},{"type":1133,"tag":1173,"props":12817,"children":12819},{"href":10915,"rel":12818},[1177],[12820],{"type":1138,"value":10919},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12823,"children":12824},{},[12825,12826,12831],{"type":1138,"value":10925},{"type":1133,"tag":1173,"props":12827,"children":12829},{"href":10928,"rel":12828},[1177],[12830],{"type":1138,"value":10932},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12833,"children":12834},{},[12835,12836,12841],{"type":1138,"value":10938},{"type":1133,"tag":1173,"props":12837,"children":12839},{"href":10941,"rel":12838},[1177],[12840],{"type":1138,"value":10945},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12843,"children":12844},{},[12845,12846,12851],{"type":1138,"value":10951},{"type":1133,"tag":1173,"props":12847,"children":12849},{"href":10954,"rel":12848},[1177],[12850],{"type":1138,"value":10958},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12853,"children":12854},{},[12855,12856,12861],{"type":1138,"value":10964},{"type":1133,"tag":1173,"props":12857,"children":12859},{"href":10967,"rel":12858},[1177],[12860],{"type":1138,"value":10971},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12863,"children":12864},{},[12865,12866,12871],{"type":1138,"value":10977},{"type":1133,"tag":1173,"props":12867,"children":12869},{"href":10980,"rel":12868},[1177],[12870],{"type":1138,"value":10984},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12873,"children":12874},{},[12875,12876,12881],{"type":1138,"value":10990},{"type":1133,"tag":1173,"props":12877,"children":12879},{"href":10993,"rel":12878},[1177],[12880],{"type":1138,"value":10997},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12883,"children":12884},{},[12885,12886,12891],{"type":1138,"value":11003},{"type":1133,"tag":1173,"props":12887,"children":12889},{"href":11006,"rel":12888},[1177],[12890],{"type":1138,"value":11010},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12893,"children":12894},{},[12895,12896,12901,12902],{"type":1138,"value":11016},{"type":1133,"tag":1173,"props":12897,"children":12899},{"href":11019,"rel":12898},[1177],[12900],{"type":1138,"value":11023},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":12903,"children":12905},{"href":11027,"rel":12904},[1177],[12906],{"type":1138,"value":11031},{"type":1133,"tag":1195,"props":12908,"children":12909},{},[12910,12911,12916],{"type":1138,"value":11036},{"type":1133,"tag":1173,"props":12912,"children":12914},{"href":11039,"rel":12913},[1177],[12915],{"type":1138,"value":11043},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12918,"children":12919},{},[12920,12921,12926],{"type":1138,"value":11049},{"type":1133,"tag":1173,"props":12922,"children":12924},{"href":11052,"rel":12923},[1177],[12925],{"type":1138,"value":11056},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12928,"children":12929},{},[12930,12934,12935,12940],{"type":1133,"tag":1146,"props":12931,"children":12932},{},[12933],{"type":1138,"value":10560},{"type":1138,"value":11066},{"type":1133,"tag":1173,"props":12936,"children":12938},{"href":11069,"rel":12937},[1177],[12939],{"type":1138,"value":11073},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":12942,"children":12943},{"id":1233},[12944],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":12946,"children":12947},{},[12948,12958,12972,12986,13000,13010,13024,13034,13049],{"type":1133,"tag":1195,"props":12949,"children":12950},{},[12951,12952,12957],{"type":1138,"value":11173},{"type":1133,"tag":1173,"props":12953,"children":12955},{"href":11176,"rel":12954},[1177],[12956],{"type":1138,"value":11180},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12959,"children":12960},{},[12961,12965,12966,12971],{"type":1133,"tag":1146,"props":12962,"children":12963},{},[12964],{"type":1138,"value":10773},{"type":1138,"value":11190},{"type":1133,"tag":1173,"props":12967,"children":12969},{"href":11193,"rel":12968},[1177],[12970],{"type":1138,"value":11197},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12973,"children":12974},{},[12975,12979,12980,12985],{"type":1133,"tag":1146,"props":12976,"children":12977},{},[12978],{"type":1138,"value":10773},{"type":1138,"value":11207},{"type":1133,"tag":1173,"props":12981,"children":12983},{"href":11210,"rel":12982},[1177],[12984],{"type":1138,"value":11214},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":12987,"children":12988},{},[12989,12993,12994,12999],{"type":1133,"tag":1146,"props":12990,"children":12991},{},[12992],{"type":1138,"value":10773},{"type":1138,"value":11224},{"type":1133,"tag":1173,"props":12995,"children":12997},{"href":11227,"rel":12996},[1177],[12998],{"type":1138,"value":11231},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13001,"children":13002},{},[13003,13004,13009],{"type":1138,"value":11237},{"type":1133,"tag":1173,"props":13005,"children":13007},{"href":11240,"rel":13006},[1177],[13008],{"type":1138,"value":11244},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13011,"children":13012},{},[13013,13017,13018,13023],{"type":1133,"tag":1146,"props":13014,"children":13015},{},[13016],{"type":1138,"value":10773},{"type":1138,"value":11254},{"type":1133,"tag":1173,"props":13019,"children":13021},{"href":11257,"rel":13020},[1177],[13022],{"type":1138,"value":11261},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13025,"children":13026},{},[13027,13028,13033],{"type":1138,"value":11267},{"type":1133,"tag":1173,"props":13029,"children":13031},{"href":11270,"rel":13030},[1177],[13032],{"type":1138,"value":11274},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13035,"children":13036},{},[13037,13038,13043,13044],{"type":1138,"value":11280},{"type":1133,"tag":1173,"props":13039,"children":13041},{"href":11283,"rel":13040},[1177],[13042],{"type":1138,"value":11287},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13045,"children":13047},{"href":11027,"rel":13046},[1177],[13048],{"type":1138,"value":11031},{"type":1133,"tag":1195,"props":13050,"children":13051},{},[13052,13053,13058,13059],{"type":1138,"value":11298},{"type":1133,"tag":1173,"props":13054,"children":13056},{"href":11301,"rel":13055},[1177],[13057],{"type":1138,"value":11305},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13060,"children":13062},{"href":11027,"rel":13061},[1177],[13063],{"type":1138,"value":11031},{"type":1133,"tag":1184,"props":13065,"children":13066},{"id":7},[13067],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":13069,"children":13070},{},[13071,13081,13091,13101,13111,13121,13131,13141,13151,13161,13171],{"type":1133,"tag":1195,"props":13072,"children":13073},{},[13074,13075,13080],{"type":1138,"value":11427},{"type":1133,"tag":1173,"props":13076,"children":13078},{"href":11430,"rel":13077},[1177],[13079],{"type":1138,"value":11434},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13082,"children":13083},{},[13084,13085,13090],{"type":1138,"value":11440},{"type":1133,"tag":1173,"props":13086,"children":13088},{"href":11443,"rel":13087},[1177],[13089],{"type":1138,"value":11447},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13092,"children":13093},{},[13094,13095,13100],{"type":1138,"value":11453},{"type":1133,"tag":1173,"props":13096,"children":13098},{"href":11456,"rel":13097},[1177],[13099],{"type":1138,"value":11460},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13102,"children":13103},{},[13104,13105,13110],{"type":1138,"value":11466},{"type":1133,"tag":1173,"props":13106,"children":13108},{"href":11469,"rel":13107},[1177],[13109],{"type":1138,"value":11473},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13112,"children":13113},{},[13114,13115,13120],{"type":1138,"value":11479},{"type":1133,"tag":1173,"props":13116,"children":13118},{"href":11482,"rel":13117},[1177],[13119],{"type":1138,"value":11486},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13122,"children":13123},{},[13124,13125,13130],{"type":1138,"value":11492},{"type":1133,"tag":1173,"props":13126,"children":13128},{"href":11495,"rel":13127},[1177],[13129],{"type":1138,"value":11499},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13132,"children":13133},{},[13134,13135,13140],{"type":1138,"value":11505},{"type":1133,"tag":1173,"props":13136,"children":13138},{"href":11508,"rel":13137},[1177],[13139],{"type":1138,"value":11512},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13142,"children":13143},{},[13144,13145,13150],{"type":1138,"value":11518},{"type":1133,"tag":1173,"props":13146,"children":13148},{"href":11521,"rel":13147},[1177],[13149],{"type":1138,"value":11525},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13152,"children":13153},{},[13154,13155,13160],{"type":1138,"value":11531},{"type":1133,"tag":1173,"props":13156,"children":13158},{"href":11534,"rel":13157},[1177],[13159],{"type":1138,"value":11538},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13162,"children":13163},{},[13164,13165,13170],{"type":1138,"value":11544},{"type":1133,"tag":1173,"props":13166,"children":13168},{"href":11547,"rel":13167},[1177],[13169],{"type":1138,"value":11551},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13172,"children":13173},{},[13174,13175,13180,13181],{"type":1138,"value":11557},{"type":1133,"tag":1173,"props":13176,"children":13178},{"href":11560,"rel":13177},[1177],[13179],{"type":1138,"value":11564},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13182,"children":13184},{"href":11027,"rel":13183},[1177],[13185],{"type":1138,"value":11031},{"type":1133,"tag":1184,"props":13187,"children":13188},{"id":1664},[13189],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":13191,"children":13192},{},[13193,13203,13213,13227,13237,13251,13261,13275],{"type":1133,"tag":1195,"props":13194,"children":13195},{},[13196,13197,13202],{"type":1138,"value":11621},{"type":1133,"tag":1173,"props":13198,"children":13200},{"href":11624,"rel":13199},[1177],[13201],{"type":1138,"value":11628},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13204,"children":13205},{},[13206,13207,13212],{"type":1138,"value":11634},{"type":1133,"tag":1173,"props":13208,"children":13210},{"href":11637,"rel":13209},[1177],[13211],{"type":1138,"value":11641},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13214,"children":13215},{},[13216,13220,13221,13226],{"type":1133,"tag":1146,"props":13217,"children":13218},{},[13219],{"type":1138,"value":11650},{"type":1138,"value":11652},{"type":1133,"tag":1173,"props":13222,"children":13224},{"href":11655,"rel":13223},[1177],[13225],{"type":1138,"value":11659},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13228,"children":13229},{},[13230,13231,13236],{"type":1138,"value":11665},{"type":1133,"tag":1173,"props":13232,"children":13234},{"href":11668,"rel":13233},[1177],[13235],{"type":1138,"value":11672},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13238,"children":13239},{},[13240,13244,13245,13250],{"type":1133,"tag":1146,"props":13241,"children":13242},{},[13243],{"type":1138,"value":11681},{"type":1138,"value":11683},{"type":1133,"tag":1173,"props":13246,"children":13248},{"href":11686,"rel":13247},[1177],[13249],{"type":1138,"value":11690},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13252,"children":13253},{},[13254,13255,13260],{"type":1138,"value":11696},{"type":1133,"tag":1173,"props":13256,"children":13258},{"href":11699,"rel":13257},[1177],[13259],{"type":1138,"value":11703},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13262,"children":13263},{},[13264,13268,13269,13274],{"type":1133,"tag":1146,"props":13265,"children":13266},{},[13267],{"type":1138,"value":10773},{"type":1138,"value":11713},{"type":1133,"tag":1173,"props":13270,"children":13272},{"href":11716,"rel":13271},[1177],[13273],{"type":1138,"value":11720},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13276,"children":13277},{},[13278,13279,13284],{"type":1138,"value":11726},{"type":1133,"tag":1173,"props":13280,"children":13282},{"href":11729,"rel":13281},[1177],[13283],{"type":1138,"value":11733},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":13286,"children":13287},{},[13288,13292,13293],{"type":1133,"tag":1146,"props":13289,"children":13290},{},[13291],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":13294,"children":13297},{"href":13295,"rel":13296},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0...v1.2.0-beta.1",[1177],[13298],{"type":1138,"value":13295},{"data":13300,"body":13301},{},{"type":1130,"children":13302},[13303,13328,13367,13372,13384,13388,14214,14218,14536,14540,14768,14772,14918,14922,14958],{"type":1133,"tag":1134,"props":13304,"children":13305},{},[13306,13308,13312,13314,13319,13321,13326],{"type":1138,"value":13307},"Flytower 1.1.0 is about knowing what your servers are doing without watching them. ",{"type":1133,"tag":1146,"props":13309,"children":13310},{},[13311],{"type":1138,"value":73},{"type":1138,"value":13313}," 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. ",{"type":1133,"tag":1146,"props":13315,"children":13316},{},[13317],{"type":1138,"value":13318},"Crash detection",{"type":1138,"value":13320}," follows systemd's journal, keeps each crash's cause, report and last log lines under ",{"type":1133,"tag":1146,"props":13322,"children":13323},{},[13324],{"type":1138,"value":13325},"Logs → Crashes",{"type":1138,"value":13327},", stops a crash loop after three crashes in ten minutes, and can restart a server that stops responding.",{"type":1133,"tag":1134,"props":13329,"children":13330},{},[13331,13333,13338,13340,13345,13347,13351,13353,13357,13359,13365],{"type":1138,"value":13332},"Servers can now run things on a ",{"type":1133,"tag":1146,"props":13334,"children":13335},{},[13336],{"type":1138,"value":13337},"schedule",{"type":1138,"value":13339}," from the new ",{"type":1133,"tag":1146,"props":13341,"children":13342},{},[13343],{"type":1138,"value":13344},"Schedules",{"type":1138,"value":13346}," tab: a restart with a countdown in chat, a console command, or an announcement, in the server's own time zone. ",{"type":1133,"tag":1146,"props":13348,"children":13349},{},[13350],{"type":1138,"value":917},{"type":1138,"value":13352}," show newer mods, plugins, datapacks, Java builds and Flytower itself, and never install anything by themselves. ",{"type":1133,"tag":1146,"props":13354,"children":13355},{},[13356],{"type":1138,"value":11807},{"type":1138,"value":13358}," shows where the disk has gone, warns at 85% and skips scheduled backups past 95%. Secrets such as ",{"type":1133,"tag":1789,"props":13360,"children":13362},{"className":13361},[],[13363],{"type":1138,"value":13364},"management-server-secret",{"type":1138,"value":13366}," 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.",{"type":1133,"tag":1134,"props":13368,"children":13369},{},[13370],{"type":1138,"value":13371},"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.",{"type":1133,"tag":1134,"props":13373,"children":13374},{},[13375,13376,13383],{"type":1138,"value":10255},{"type":1133,"tag":1173,"props":13377,"children":13380},{"href":13378,"rel":13379},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0\u002Fdocs\u002Ftesting-1.1.0.md",[1177],[13381],{"type":1138,"value":13382},"testing-1.1.0.md",{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":13385,"children":13386},{"id":1186},[13387],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":13389,"children":13390},{},[13391,13404,13417,13437,13460,13482,13505,13523,13546,13569,13591,13604,13617,13630,13643,13656,13669,13682,13695,13708,13721,13734,13747,13760,13773,13786,13799,13812,13825,13838,13851,13864,13877,13890,13903,13916,13929,13942,13955,13968,13981,13994,14007,14024,14037,14057,14081,14104,14126,14148,14170,14192],{"type":1133,"tag":1195,"props":13392,"children":13393},{},[13394,13396,13403],{"type":1138,"value":13395},"scheduled restarts, commands and announcements (#105) (",{"type":1133,"tag":1173,"props":13397,"children":13400},{"href":13398,"rel":13399},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F566d8120a1c96af9c6408a5a0100e6a910e1c144",[1177],[13401],{"type":1138,"value":13402},"566d812",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13405,"children":13406},{},[13407,13409,13416],{"type":1138,"value":13408},"disk use per server, and low disk warnings (#103) (",{"type":1133,"tag":1173,"props":13410,"children":13413},{"href":13411,"rel":13412},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F070a41359f5deeef7e929b8d5f113b1b5f1d8557",[1177],[13414],{"type":1138,"value":13415},"070a413",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13418,"children":13419},{},[13420,13422,13429,13430],{"type":1138,"value":13421},"call off a restart while it counts down (",{"type":1133,"tag":1173,"props":13423,"children":13426},{"href":13424,"rel":13425},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa72a1b12d3b03fca38dd524c7e9d2b3cd1ded3f0",[1177],[13427],{"type":1138,"value":13428},"a72a1b1",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13431,"children":13434},{"href":13432,"rel":13433},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F58",[1177],[13435],{"type":1138,"value":13436},"#58",{"type":1133,"tag":1195,"props":13438,"children":13439},{},[13440,13445,13447,13454,13455],{"type":1133,"tag":1146,"props":13441,"children":13442},{},[13443],{"type":1138,"value":13444},"ui:",{"type":1138,"value":13446}," a Schedules tab to add, edit and run scheduled tasks (",{"type":1133,"tag":1173,"props":13448,"children":13451},{"href":13449,"rel":13450},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e94840cd1bd3f5906d45667e94878b59c65e656",[1177],[13452],{"type":1138,"value":13453},"0e94840",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13456,"children":13458},{"href":13432,"rel":13457},[1177],[13459],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":13461,"children":13462},{},[13463,13467,13469,13476,13477],{"type":1133,"tag":1146,"props":13464,"children":13465},{},[13466],{"type":1138,"value":10716},{"type":1138,"value":13468}," schedules in plans, apply, the YAML tab, new servers and clones (",{"type":1133,"tag":1173,"props":13470,"children":13473},{"href":13471,"rel":13472},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a9890971da00029610dbc8aa8c3f86d1f594d39",[1177],[13474],{"type":1138,"value":13475},"3a98909",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13478,"children":13480},{"href":13432,"rel":13479},[1177],[13481],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":13483,"children":13484},{},[13485,13490,13492,13499,13500],{"type":1133,"tag":1146,"props":13486,"children":13487},{},[13488],{"type":1138,"value":13489},"api:",{"type":1138,"value":13491}," list, save and run scheduled tasks (",{"type":1133,"tag":1173,"props":13493,"children":13496},{"href":13494,"rel":13495},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6357e75f47e497ba70395ee6c4c559062da2eab6",[1177],[13497],{"type":1138,"value":13498},"6357e75",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13501,"children":13503},{"href":13432,"rel":13502},[1177],[13504],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":13506,"children":13507},{},[13508,13510,13517,13518],{"type":1138,"value":13509},"run scheduled restarts, commands and announcements (",{"type":1133,"tag":1173,"props":13511,"children":13514},{"href":13512,"rel":13513},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e0ccf80d5d173f2682e29d3dfeb86bca0659875",[1177],[13515],{"type":1138,"value":13516},"5e0ccf8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13519,"children":13521},{"href":13432,"rel":13520},[1177],[13522],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":13524,"children":13525},{},[13526,13531,13533,13540,13541],{"type":1133,"tag":1146,"props":13527,"children":13528},{},[13529],{"type":1138,"value":13530},"backups:",{"type":1138,"value":13532}," wait for a server's lock to be let go (",{"type":1133,"tag":1173,"props":13534,"children":13537},{"href":13535,"rel":13536},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff42d36b5ce5852b194fb906f097efa5e0f2e9574",[1177],[13538],{"type":1138,"value":13539},"f42d36b",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13542,"children":13544},{"href":13432,"rel":13543},[1177],[13545],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":13547,"children":13548},{},[13549,13554,13556,13563,13564],{"type":1133,"tag":1146,"props":13550,"children":13551},{},[13552],{"type":1138,"value":13553},"db:",{"type":1138,"value":13555}," a schedules table and a time zone per server (",{"type":1133,"tag":1173,"props":13557,"children":13560},{"href":13558,"rel":13559},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F26a390d848e05468d1307cb995b1d37159db4c83",[1177],[13561],{"type":1138,"value":13562},"26a390d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13565,"children":13567},{"href":13432,"rel":13566},[1177],[13568],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":13570,"children":13571},{},[13572,13576,13578,13585,13586],{"type":1133,"tag":1146,"props":13573,"children":13574},{},[13575],{"type":1138,"value":10716},{"type":1138,"value":13577}," schedules and timezone in server specs (",{"type":1133,"tag":1173,"props":13579,"children":13582},{"href":13580,"rel":13581},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55da5d7de22723ac394f964f09f6f9937d808c66",[1177],[13583],{"type":1138,"value":13584},"55da5d7",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":13587,"children":13589},{"href":13432,"rel":13588},[1177],[13590],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":13592,"children":13593},{},[13594,13596,13603],{"type":1138,"value":13595},"update badges for Flytower, content, Minecraft and Java (#101) (",{"type":1133,"tag":1173,"props":13597,"children":13600},{"href":13598,"rel":13599},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa27a67e685529f5a8c00c33a3499c761dbe2228",[1177],[13601],{"type":1138,"value":13602},"aa27a67",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13605,"children":13606},{},[13607,13609,13616],{"type":1138,"value":13608},"warn before a manual backup on a nearly full disk (",{"type":1133,"tag":1173,"props":13610,"children":13613},{"href":13611,"rel":13612},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42fc0aebaf5460e4b03c48e97fd38444cb747f52",[1177],[13614],{"type":1138,"value":13615},"42fc0ae",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13618,"children":13619},{},[13620,13622,13629],{"type":1138,"value":13621},"banner on every page while the disk is 95% full (",{"type":1133,"tag":1173,"props":13623,"children":13626},{"href":13624,"rel":13625},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdf669166c125c48d091c4c9da6f57165e0c440a4",[1177],[13627],{"type":1138,"value":13628},"df66916",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13631,"children":13632},{},[13633,13635,13642],{"type":1138,"value":13634},"disk use breakdown on each server's Settings tab (",{"type":1133,"tag":1173,"props":13636,"children":13639},{"href":13637,"rel":13638},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc141d1fa77debc7962bfcebf24a67ad4fc3a9e2e",[1177],[13640],{"type":1138,"value":13641},"c141d1f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13644,"children":13645},{},[13646,13648,13655],{"type":1138,"value":13647},"disk bar on System, split by server, with free space and a table (",{"type":1133,"tag":1173,"props":13649,"children":13652},{"href":13650,"rel":13651},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36cf41ab7516251499ca1f4091c2e659f810a0f2",[1177],[13653],{"type":1138,"value":13654},"36cf41a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13657,"children":13658},{},[13659,13661,13668],{"type":1138,"value":13660},"include display names in the System disk report (",{"type":1133,"tag":1173,"props":13662,"children":13665},{"href":13663,"rel":13664},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5cec5ef353a0834409c945088aa797084664b2cf",[1177],[13666],{"type":1138,"value":13667},"5cec5ef",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13670,"children":13671},{},[13672,13674,13681],{"type":1138,"value":13673},"skip scheduled backups when the disk is 95% full (",{"type":1133,"tag":1173,"props":13675,"children":13678},{"href":13676,"rel":13677},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe82bed3495ae3726646a184d588350333b6c48ed",[1177],[13679],{"type":1138,"value":13680},"e82bed3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13683,"children":13684},{},[13685,13687,13694],{"type":1138,"value":13686},"disk use API for the System page and each server (",{"type":1133,"tag":1173,"props":13688,"children":13691},{"href":13689,"rel":13690},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F608cb892b3be36869787824b222e4c1248c9405d",[1177],[13692],{"type":1138,"value":13693},"608cb89",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13696,"children":13697},{},[13698,13700,13707],{"type":1138,"value":13699},"measure disk use in the background, hourly and after each job (",{"type":1133,"tag":1173,"props":13701,"children":13704},{"href":13702,"rel":13703},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feb81b805a081bc399e821a4d5d54eb943deb8a9a",[1177],[13705],{"type":1138,"value":13706},"eb81b80",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13709,"children":13710},{},[13711,13713,13720],{"type":1138,"value":13712},"announce every finished job on the bus (",{"type":1133,"tag":1173,"props":13714,"children":13717},{"href":13715,"rel":13716},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2792ba9d621b60844317b4a7f4412a6eba89083f",[1177],[13718],{"type":1138,"value":13719},"2792ba9",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13722,"children":13723},{},[13724,13726,13733],{"type":1138,"value":13725},"measure each server's disk use by group, without following symlinks (",{"type":1133,"tag":1173,"props":13727,"children":13730},{"href":13728,"rel":13729},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2e95f0346a392c1bfcac13dd9a68b2c1421bc700",[1177],[13731],{"type":1138,"value":13732},"2e95f03",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13735,"children":13736},{},[13737,13739,13746],{"type":1138,"value":13738},"System shows Flytower and Java updates, with a badge in the sidebar (",{"type":1133,"tag":1173,"props":13740,"children":13743},{"href":13741,"rel":13742},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77825b603b2ec2397b3dced2970ee386dfda4c8c",[1177],[13744],{"type":1138,"value":13745},"77825b6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13748,"children":13749},{},[13750,13752,13759],{"type":1138,"value":13751},"Content tab mentions a newer Minecraft and says quietly when a check failed (",{"type":1133,"tag":1173,"props":13753,"children":13756},{"href":13754,"rel":13755},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbc87cfd57f5f8f42cee31a025ffad382fc9fbf16",[1177],[13757],{"type":1138,"value":13758},"bc87cfd",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13761,"children":13762},{},[13763,13765,13772],{"type":1138,"value":13764},"update badges on the servers list and the Content tab (",{"type":1133,"tag":1173,"props":13766,"children":13769},{"href":13767,"rel":13768},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8b82843fc0c60309e557fe08cb08b63a361cb5f8",[1177],[13770],{"type":1138,"value":13771},"8b82843",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13774,"children":13775},{},[13776,13778,13785],{"type":1138,"value":13777},"updates WebSocket topic and API, kept in step with the Content tab and System (",{"type":1133,"tag":1173,"props":13779,"children":13782},{"href":13780,"rel":13781},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff46f101baa0d8eb746fd5ad6f8d7ae5012e110ab",[1177],[13783],{"type":1138,"value":13784},"f46f101",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13787,"children":13788},{},[13789,13791,13798],{"type":1138,"value":13790},"check for updates every six hours and when the panel is opened (",{"type":1133,"tag":1173,"props":13792,"children":13795},{"href":13793,"rel":13794},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0eea61ce23fa48e90dff83f649f0767682b4977c",[1177],[13796],{"type":1138,"value":13797},"0eea61c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13800,"children":13801},{},[13802,13804,13811],{"type":1138,"value":13803},"background update checker that keeps the last good result (",{"type":1133,"tag":1173,"props":13805,"children":13808},{"href":13806,"rel":13807},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21692828d00df78bdd45b59f5bd0dcaad5a3b10d",[1177],[13809],{"type":1138,"value":13810},"2169282",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13813,"children":13814},{},[13815,13817,13824],{"type":1138,"value":13816},"compare installed Java runtimes with Adoptium's newest builds (",{"type":1133,"tag":1173,"props":13818,"children":13821},{"href":13819,"rel":13820},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F334f933633e76032122ce2e5be23136b6f25b01b",[1177],[13822],{"type":1138,"value":13823},"334f933",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13826,"children":13827},{},[13828,13830,13837],{"type":1138,"value":13829},"update_status table for the background update check (",{"type":1133,"tag":1173,"props":13831,"children":13834},{"href":13832,"rel":13833},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6aeb63d5620b8f186b20be22f05127588547a455",[1177],[13835],{"type":1138,"value":13836},"6aeb63d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13839,"children":13840},{},[13841,13843,13850],{"type":1138,"value":13842},"Start and Target dates on the Projects board (#96) (",{"type":1133,"tag":1173,"props":13844,"children":13847},{"href":13845,"rel":13846},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36992d3f3c0443aac95b829a19c9175ae3e1b41f",[1177],[13848],{"type":1138,"value":13849},"36992d3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13852,"children":13853},{},[13854,13856,13863],{"type":1138,"value":13855},"re-sync the board when a milestone's due date changes (",{"type":1133,"tag":1173,"props":13857,"children":13860},{"href":13858,"rel":13859},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F94fe5dd25de30526bce44d8c2c29e11e8286553c",[1177],[13861],{"type":1138,"value":13862},"94fe5dd",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13865,"children":13866},{},[13867,13869,13876],{"type":1138,"value":13868},"board-sync fills in Start date and Target date for the Roadmap (",{"type":1133,"tag":1173,"props":13870,"children":13873},{"href":13871,"rel":13872},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffa2a4a45cf36497999bf97ab62b315427696a48b",[1177],[13874],{"type":1138,"value":13875},"fa2a4a4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13878,"children":13879},{},[13880,13882,13889],{"type":1138,"value":13881},"keep the Projects board's Status in sync automatically (#95) (",{"type":1133,"tag":1173,"props":13883,"children":13886},{"href":13884,"rel":13885},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F57173e422de62ed53f6b4962b9c5e0fa1b27bc56",[1177],[13887],{"type":1138,"value":13888},"57173e4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13891,"children":13892},{},[13893,13895,13902],{"type":1138,"value":13894},"Board workflow keeps the Projects board in sync as issues and PRs change (",{"type":1133,"tag":1173,"props":13896,"children":13899},{"href":13897,"rel":13898},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F021c48e2b2c321a3b0c0f6aa791e250b2c5fb491",[1177],[13900],{"type":1138,"value":13901},"021c48e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13904,"children":13905},{},[13906,13908,13915],{"type":1138,"value":13907},"board-sync script that sets each board item's Status from the repository (",{"type":1133,"tag":1173,"props":13909,"children":13912},{"href":13910,"rel":13911},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5607ae411934adb25cffce3510f370d4291e7e06",[1177],[13913],{"type":1138,"value":13914},"5607ae4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13917,"children":13918},{},[13919,13921,13928],{"type":1138,"value":13920},"show the Assistant's reply in the run summary for dispatched runs (#92) (",{"type":1133,"tag":1173,"props":13922,"children":13925},{"href":13923,"rel":13924},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F37b3df39dedb80a5276b4f6c353de2e31099331a",[1177],[13926],{"type":1138,"value":13927},"37b3df3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13930,"children":13931},{},[13932,13934,13941],{"type":1138,"value":13933},"show the Assistant's reply in the run summary for dispatched runs (",{"type":1133,"tag":1173,"props":13935,"children":13938},{"href":13936,"rel":13937},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2464b3c3c3007fadd2949e956ce9909889399a47",[1177],[13939],{"type":1138,"value":13940},"2464b3c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13943,"children":13944},{},[13945,13947,13954],{"type":1138,"value":13946},"let the Assistant workflow use a Claude subscription token (#91) (",{"type":1133,"tag":1173,"props":13948,"children":13951},{"href":13949,"rel":13950},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff763b94feb577408958125830847fd34545ac55",[1177],[13952],{"type":1138,"value":13953},"ff763b9",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13956,"children":13957},{},[13958,13960,13967],{"type":1138,"value":13959},"let the Assistant workflow use a Claude subscription token (",{"type":1133,"tag":1173,"props":13961,"children":13964},{"href":13962,"rel":13963},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2505f815d6010c7c8c95575d0073f86626372f0d",[1177],[13965],{"type":1138,"value":13966},"2505f81",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13969,"children":13970},{},[13971,13973,13980],{"type":1138,"value":13972},"release notes start with a written summary (#87) (",{"type":1133,"tag":1173,"props":13974,"children":13977},{"href":13975,"rel":13976},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F54e2dd5ca6f5539cc6eec7b3b3c39363143b1231",[1177],[13978],{"type":1138,"value":13979},"54e2dd5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13982,"children":13983},{},[13984,13986,13993],{"type":1138,"value":13985},"Assistant workflow for releases and the Projects board (#88) (",{"type":1133,"tag":1173,"props":13987,"children":13990},{"href":13988,"rel":13989},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fca67a5327249301e78a7b9dff395636d2ac1780d",[1177],[13991],{"type":1138,"value":13992},"ca67a53",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":13995,"children":13996},{},[13997,13999,14006],{"type":1138,"value":13998},"Assistant workflow for releases and the Projects board (",{"type":1133,"tag":1173,"props":14000,"children":14003},{"href":14001,"rel":14002},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa9983c81a094dfebae355df57816757f407c962",[1177],[14004],{"type":1138,"value":14005},"aa9983c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14008,"children":14009},{},[14010,14014,14016,14023],{"type":1133,"tag":1146,"props":14011,"children":14012},{},[14013],{"type":1138,"value":11650},{"type":1138,"value":14015}," start notes with a written summary, and list commits that aren't Conventional Commits (",{"type":1133,"tag":1173,"props":14017,"children":14020},{"href":14018,"rel":14019},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8918df40014d9c6fbab36f4658b1860b7f8ec678",[1177],[14021],{"type":1138,"value":14022},"8918df4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14025,"children":14026},{},[14027,14029,14036],{"type":1138,"value":14028},"license Flytower under AGPL-3.0 (#84) (",{"type":1133,"tag":1173,"props":14030,"children":14033},{"href":14031,"rel":14032},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8474e8357e2ef431753d1ae393db317f65b03219",[1177],[14034],{"type":1138,"value":14035},"8474e83",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14038,"children":14039},{},[14040,14042,14049,14050],{"type":1138,"value":14041},"crash detection, crash loops and \"not responding\" (#78) (",{"type":1133,"tag":1173,"props":14043,"children":14046},{"href":14044,"rel":14045},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F74555bae65241aaa2b57a320b474f18d4d86fed8",[1177],[14047],{"type":1138,"value":14048},"74555ba",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14051,"children":14054},{"href":14052,"rel":14053},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F57",[1177],[14055],{"type":1138,"value":14056},"#57",{"type":1133,"tag":1195,"props":14058,"children":14059},{},[14060,14064,14066,14073,14074],{"type":1133,"tag":1146,"props":14061,"children":14062},{},[14063],{"type":1138,"value":10068},{"type":1138,"value":14065}," the new-version notice follows the update channel, so Stable installs aren't told about betas (",{"type":1133,"tag":1173,"props":14067,"children":14070},{"href":14068,"rel":14069},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb67c6841d741d2a959a8068917b8c74385450c09",[1177],[14071],{"type":1138,"value":14072},"b67c684",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14075,"children":14078},{"href":14076,"rel":14077},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F56",[1177],[14079],{"type":1138,"value":14080},"#56",{"type":1133,"tag":1195,"props":14082,"children":14083},{},[14084,14088,14090],{"type":1133,"tag":1146,"props":14085,"children":14086},{},[14087],{"type":1138,"value":6011},{"type":1138,"value":14089}," --pr ",{"type":1133,"tag":14091,"props":14092,"children":14093},"number",{},[14094,14096,14103],{"type":1138,"value":14095}," installs a pull request's signed test build (",{"type":1133,"tag":1173,"props":14097,"children":14100},{"href":14098,"rel":14099},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F88ad47f2dd8ff05036998ba22441f54b056fbd62",[1177],[14101],{"type":1138,"value":14102},"88ad47f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14105,"children":14106},{},[14107,14111,14113,14120,14121],{"type":1133,"tag":1146,"props":14108,"children":14109},{},[14110],{"type":1138,"value":10068},{"type":1138,"value":14112}," Notifications card on System to add, edit, test and remove channels (",{"type":1133,"tag":1173,"props":14114,"children":14117},{"href":14115,"rel":14116},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F627f40a2ca8ff54b463defe09f0d25de96aa223a",[1177],[14118],{"type":1138,"value":14119},"627f40a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14122,"children":14124},{"href":14076,"rel":14123},[1177],[14125],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":14127,"children":14128},{},[14129,14133,14135,14142,14143],{"type":1133,"tag":1146,"props":14130,"children":14131},{},[14132],{"type":1138,"value":10068},{"type":1138,"value":14134}," API to list, add, change, test and remove channels, with passkey checks and activity entries (",{"type":1133,"tag":1173,"props":14136,"children":14139},{"href":14137,"rel":14138},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2dae95209d95b0201cb810685078ce3317d44334",[1177],[14140],{"type":1138,"value":14141},"2dae952",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14144,"children":14146},{"href":14076,"rel":14145},[1177],[14147],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":14149,"children":14150},{},[14151,14155,14157,14164,14165],{"type":1133,"tag":1146,"props":14152,"children":14153},{},[14154],{"type":1138,"value":10068},{"type":1138,"value":14156}," report failed backups and off-site copies, the disk filling, updates, starts, stops, joins and leaves (",{"type":1133,"tag":1173,"props":14158,"children":14161},{"href":14159,"rel":14160},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F215aeea5e3a65b25487de8b7f8e792c3c5717d83",[1177],[14162],{"type":1138,"value":14163},"215aeea",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14166,"children":14168},{"href":14076,"rel":14167},[1177],[14169],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":14171,"children":14172},{},[14173,14177,14179,14186,14187],{"type":1133,"tag":1146,"props":14174,"children":14175},{},[14176],{"type":1138,"value":10068},{"type":1138,"value":14178}," send to Discord, ntfy and signed JSON webhooks, with quiet periods and retries (",{"type":1133,"tag":1173,"props":14180,"children":14183},{"href":14181,"rel":14182},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcc9ea0d4b8eb4ae09ab66d8560a58e0b2f27b3dd",[1177],[14184],{"type":1138,"value":14185},"cc9ea0d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14188,"children":14190},{"href":14076,"rel":14189},[1177],[14191],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":14193,"children":14194},{},[14195,14199,14201,14208,14209],{"type":1133,"tag":1146,"props":14196,"children":14197},{},[14198],{"type":1138,"value":10068},{"type":1138,"value":14200}," tables for notification channels and what has been sent (",{"type":1133,"tag":1173,"props":14202,"children":14205},{"href":14203,"rel":14204},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffe04ce74a77f943704e0814f06f66c60815c0582",[1177],[14206],{"type":1138,"value":14207},"fe04ce7",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14210,"children":14212},{"href":14076,"rel":14211},[1177],[14213],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":14215,"children":14216},{"id":1233},[14217],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":14219,"children":14220},{},[14221,14234,14251,14269,14282,14295,14308,14321,14334,14347,14360,14373,14386,14399,14412,14425,14438,14451,14468,14481,14494,14516],{"type":1133,"tag":1195,"props":14222,"children":14223},{},[14224,14226,14233],{"type":1138,"value":14225},"re-running the installer no longer fails writing the setup token (#110) (",{"type":1133,"tag":1173,"props":14227,"children":14230},{"href":14228,"rel":14229},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fab6b0418b8834cf98111f76af7d3912cecdba368",[1177],[14231],{"type":1138,"value":14232},"ab6b041",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14235,"children":14236},{},[14237,14241,14243,14250],{"type":1133,"tag":1146,"props":14238,"children":14239},{},[14240],{"type":1138,"value":6011},{"type":1138,"value":14242}," write the setup token hash where a starting panel can't take it mid-write (",{"type":1133,"tag":1173,"props":14244,"children":14247},{"href":14245,"rel":14246},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F894ce57f293205322129adc67c5cb17d159d9f4a",[1177],[14248],{"type":1138,"value":14249},"894ce57",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14252,"children":14253},{},[14254,14256,14263,14264],{"type":1138,"value":14255},"schedule previews show times in the schedule's own time zone (",{"type":1133,"tag":1173,"props":14257,"children":14260},{"href":14258,"rel":14259},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Feddeb197ae6416c64962868d559a5cebfeabecd9",[1177],[14261],{"type":1138,"value":14262},"eddeb19",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14265,"children":14267},{"href":13432,"rel":14266},[1177],[14268],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":14270,"children":14271},{},[14272,14274,14281],{"type":1138,"value":14273},"hide management-server-secret and other secret properties (#100) (",{"type":1133,"tag":1173,"props":14275,"children":14278},{"href":14276,"rel":14277},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e7ad41233a774405d5aa098fb9765c6681e49c3",[1177],[14279],{"type":1138,"value":14280},"5e7ad41",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14283,"children":14284},{},[14285,14287,14294],{"type":1138,"value":14286},"a cloned server gets fresh secrets instead of the original's (",{"type":1133,"tag":1173,"props":14288,"children":14291},{"href":14289,"rel":14290},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F98a317af254a3aa1101c15afc7204b5adbe28634",[1177],[14292],{"type":1138,"value":14293},"98a317a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14296,"children":14297},{},[14298,14300,14307],{"type":1138,"value":14299},"the properties API hides secrets and refuses edits to them (",{"type":1133,"tag":1173,"props":14301,"children":14304},{"href":14302,"rel":14303},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffc5809cbfe7327575efe5ee0f532051dc581f00b",[1177],[14305],{"type":1138,"value":14306},"fc5809c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14309,"children":14310},{},[14311,14313,14320],{"type":1138,"value":14312},"keep secret properties such as management-server-secret out of specs (",{"type":1133,"tag":1173,"props":14314,"children":14317},{"href":14315,"rel":14316},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F81094804fd345c7009135c7890152fd45d3d75c9",[1177],[14318],{"type":1138,"value":14319},"8109480",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14322,"children":14323},{},[14324,14326,14333],{"type":1138,"value":14325},"backups skip files they can't read instead of failing (#98) (",{"type":1133,"tag":1173,"props":14327,"children":14330},{"href":14328,"rel":14329},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F543c3fcc8d309c41f7c53fbdab26d33e5ffb72ff",[1177],[14331],{"type":1138,"value":14332},"543c3fc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14335,"children":14336},{},[14337,14339,14346],{"type":1138,"value":14338},"backups skip files they can't read instead of failing (",{"type":1133,"tag":1173,"props":14340,"children":14343},{"href":14341,"rel":14342},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa8c2daa4ba4a698c2bf2690add1b087c8438635",[1177],[14344],{"type":1138,"value":14345},"aa8c2da",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14348,"children":14349},{},[14350,14352,14359],{"type":1138,"value":14351},"board-sync finds fields by listing them, since asking for a missing one is an error (",{"type":1133,"tag":1173,"props":14353,"children":14356},{"href":14354,"rel":14355},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7170cc7e5dfd7d03f78ab0cc133d062991161c23",[1177],[14357],{"type":1138,"value":14358},"7170cc7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14361,"children":14362},{},[14363,14365,14372],{"type":1138,"value":14364},"board-sync asks for plain fields on issue and PR connections (",{"type":1133,"tag":1173,"props":14366,"children":14369},{"href":14367,"rel":14368},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa6330dc56ca7dfa8b5b83805d9b8f9160dce0250",[1177],[14370],{"type":1138,"value":14371},"a6330dc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14374,"children":14375},{},[14376,14378,14385],{"type":1138,"value":14377},"let the Assistant write GraphQL queries to files (#94) (",{"type":1133,"tag":1173,"props":14379,"children":14382},{"href":14380,"rel":14381},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbefe831a0fcc7da5d67ff22d3a7da00ae895b4c2",[1177],[14383],{"type":1138,"value":14384},"befe831",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14387,"children":14388},{},[14389,14391,14398],{"type":1138,"value":14390},"let the Assistant write GraphQL queries to files (",{"type":1133,"tag":1173,"props":14392,"children":14395},{"href":14393,"rel":14394},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2702fb7b7db8790f95e4c2266649c37f8ed187d9",[1177],[14396],{"type":1138,"value":14397},"2702fb7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14400,"children":14401},{},[14402,14404,14411],{"type":1138,"value":14403},"let the Assistant reach the Projects board with PROJECTS_TOKEN (#93) (",{"type":1133,"tag":1173,"props":14405,"children":14408},{"href":14406,"rel":14407},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faffad7bd0c95960e4f2b586f0fb32495b15e3910",[1177],[14409],{"type":1138,"value":14410},"affad7b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14413,"children":14414},{},[14415,14417,14424],{"type":1138,"value":14416},"pass PROJECTS_TOKEN under its own name, since the action overwrites GH_TOKEN (",{"type":1133,"tag":1173,"props":14418,"children":14421},{"href":14419,"rel":14420},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc015409dfce0f2e6a095b952e23fea9933d8c1ff",[1177],[14422],{"type":1138,"value":14423},"c015409",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14426,"children":14427},{},[14428,14430,14437],{"type":1138,"value":14429},"run board commands with PROJECTS_TOKEN through a gh wrapper (",{"type":1133,"tag":1173,"props":14431,"children":14434},{"href":14432,"rel":14433},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F047d0da7437c96f1a4844ba4537d4783219dd79a",[1177],[14435],{"type":1138,"value":14436},"047d0da",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14439,"children":14440},{},[14441,14443,14450],{"type":1138,"value":14442},"release notes from 1.1.0-beta.2 onwards match the earlier format (#90) (",{"type":1133,"tag":1173,"props":14444,"children":14447},{"href":14445,"rel":14446},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff421421f1527e00a9bfb2e7bab24a0c57b707b78",[1177],[14448],{"type":1138,"value":14449},"f421421",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14452,"children":14453},{},[14454,14458,14460,14467],{"type":1133,"tag":1146,"props":14455,"children":14456},{},[14457],{"type":1138,"value":11650},{"type":1138,"value":14459}," split squash merges back into their commits in release notes (",{"type":1133,"tag":1173,"props":14461,"children":14464},{"href":14462,"rel":14463},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F687ac10a9f70abfdfd35af933ff2db8cd303eab2",[1177],[14465],{"type":1138,"value":14466},"687ac10",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14469,"children":14470},{},[14471,14473,14480],{"type":1138,"value":14472},"say why an Assistant run failed (#89) (",{"type":1133,"tag":1173,"props":14474,"children":14477},{"href":14475,"rel":14476},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc7dff7063736c384f1dc63c093c224902ec0e84e",[1177],[14478],{"type":1138,"value":14479},"c7dff70",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14482,"children":14483},{},[14484,14486,14493],{"type":1138,"value":14485},"say why an Assistant run failed (",{"type":1133,"tag":1173,"props":14487,"children":14490},{"href":14488,"rel":14489},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e2a1f003bacac50798ea887250d0b53397c3580",[1177],[14491],{"type":1138,"value":14492},"6e2a1f0",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14495,"children":14496},{},[14497,14501,14503,14510,14511],{"type":1133,"tag":1146,"props":14498,"children":14499},{},[14500],{"type":1138,"value":10068},{"type":1138,"value":14502}," notice quick stops and starts from the status poller, not only the minute sampler (",{"type":1133,"tag":1173,"props":14504,"children":14507},{"href":14505,"rel":14506},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42940a4be7bcf63dd6f7cd36db1f8fe1d35862d2",[1177],[14508],{"type":1138,"value":14509},"42940a4",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14512,"children":14514},{"href":14076,"rel":14513},[1177],[14515],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":14517,"children":14518},{},[14519,14523,14525,14530,14531],{"type":1133,"tag":1146,"props":14520,"children":14521},{},[14522],{"type":1138,"value":10068},{"type":1138,"value":14524}," hear starts, stops, restarts, joins and leaves from the server log through inotify, with no polling (",{"type":1133,"tag":1173,"props":14526,"children":14528},{"href":14505,"rel":14527},[1177],[14529],{"type":1138,"value":14509},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14532,"children":14534},{"href":14076,"rel":14533},[1177],[14535],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":14537,"children":14538},{"id":7},[14539],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":14541,"children":14542},{},[14543,14561,14579,14592,14605,14618,14631,14644,14657,14670,14683,14700,14713,14730,14750],{"type":1133,"tag":1195,"props":14544,"children":14545},{},[14546,14548,14555,14556],{"type":1138,"value":14547},"release summary for scheduled tasks (",{"type":1133,"tag":1173,"props":14549,"children":14552},{"href":14550,"rel":14551},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0a19487e540e095f8302bf95354750f02d48ddd",[1177],[14553],{"type":1138,"value":14554},"d0a1948",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14557,"children":14559},{"href":13432,"rel":14558},[1177],[14560],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":14562,"children":14563},{},[14564,14566,14573,14574],{"type":1138,"value":14565},"scheduled tasks, the spec's schedules and timezone, and testing notes (",{"type":1133,"tag":1173,"props":14567,"children":14570},{"href":14568,"rel":14569},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F285413e1067ef45425e2019e4a05680e16b672c4",[1177],[14571],{"type":1138,"value":14572},"285413e",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14575,"children":14577},{"href":13432,"rel":14576},[1177],[14578],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":14580,"children":14581},{},[14582,14584,14591],{"type":1138,"value":14583},"disk space guide, testing notes and release summary for disk use (",{"type":1133,"tag":1173,"props":14585,"children":14588},{"href":14586,"rel":14587},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb34297adff950df692877ff7946f017b999b8e56",[1177],[14589],{"type":1138,"value":14590},"b34297a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14593,"children":14594},{},[14595,14597,14604],{"type":1138,"value":14596},"release summary for update badges (",{"type":1133,"tag":1173,"props":14598,"children":14601},{"href":14599,"rel":14600},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbe6ab4c251916c413cf4a7f5b535ae74bb322ad0",[1177],[14602],{"type":1138,"value":14603},"be6ab4c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14606,"children":14607},{},[14608,14610,14617],{"type":1138,"value":14609},"update badges, with 1.1.0 testing notes (",{"type":1133,"tag":1173,"props":14611,"children":14614},{"href":14612,"rel":14613},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8f691d287a423bad5465e643a912c79b142b4e9",[1177],[14615],{"type":1138,"value":14616},"e8f691d",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14619,"children":14620},{},[14621,14623,14630],{"type":1138,"value":14622},"release summary for hidden secrets (",{"type":1133,"tag":1173,"props":14624,"children":14627},{"href":14625,"rel":14626},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F078fef76153dd8c669fdee7e98ee8621ef6bee44",[1177],[14628],{"type":1138,"value":14629},"078fef7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14632,"children":14633},{},[14634,14636,14643],{"type":1138,"value":14635},"list the properties Flytower manages or hides, with testing notes (",{"type":1133,"tag":1173,"props":14637,"children":14640},{"href":14638,"rel":14639},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F45dae88e4d6ee3a3dd09406c39065d341aba21b3",[1177],[14641],{"type":1138,"value":14642},"45dae88",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14645,"children":14646},{},[14647,14649,14656],{"type":1138,"value":14648},"release summary for 1.1.0-beta.5 (",{"type":1133,"tag":1173,"props":14650,"children":14653},{"href":14651,"rel":14652},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7132c631d016ce2fa2629a831d6148c5f1d98d20",[1177],[14654],{"type":1138,"value":14655},"7132c63",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14658,"children":14659},{},[14660,14662,14669],{"type":1138,"value":14661},"what backups leave out, and testing notes for skipped files (",{"type":1133,"tag":1173,"props":14663,"children":14666},{"href":14664,"rel":14665},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa43828447b9b8303b08fe1b96952acfed4ddf027",[1177],[14667],{"type":1138,"value":14668},"a438284",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14671,"children":14672},{},[14673,14675,14682],{"type":1138,"value":14674},"line up the Assistant workflow's secrets list (",{"type":1133,"tag":1173,"props":14676,"children":14679},{"href":14677,"rel":14678},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbb152176a9c9f95ae45a22db086b5bc18cb2f8d2",[1177],[14680],{"type":1138,"value":14681},"bb15217",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14684,"children":14685},{},[14686,14690,14692,14699],{"type":1133,"tag":1146,"props":14687,"children":14688},{},[14689],{"type":1138,"value":11650},{"type":1138,"value":14691}," summaries for 1.0.1 to beta.4 share one shape: short paragraphs and a testing link (",{"type":1133,"tag":1173,"props":14693,"children":14696},{"href":14694,"rel":14695},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe2c6a116849883529fd87e6dedc93d4ba27aa73d",[1177],[14697],{"type":1138,"value":14698},"e2c6a11",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14701,"children":14702},{},[14703,14705,14712],{"type":1138,"value":14704},"write the house rules for the Assistant workflow (",{"type":1133,"tag":1173,"props":14706,"children":14709},{"href":14707,"rel":14708},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F976fccdb31f5194b5dcae39db1d6f4db1180f31b",[1177],[14710],{"type":1138,"value":14711},"976fccd",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14714,"children":14715},{},[14716,14720,14722,14729],{"type":1133,"tag":1146,"props":14717,"children":14718},{},[14719],{"type":1138,"value":11650},{"type":1138,"value":14721}," summaries for 1.0.1 and 1.1.0-beta.1 to beta.4 (",{"type":1133,"tag":1173,"props":14723,"children":14726},{"href":14724,"rel":14725},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff31b4541e42e72762de6eb4ecb23d22ec751a203",[1177],[14727],{"type":1138,"value":14728},"f31b454",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14731,"children":14732},{},[14733,14737,14739,14744,14745],{"type":1133,"tag":1146,"props":14734,"children":14735},{},[14736],{"type":1138,"value":10068},{"type":1138,"value":14738}," activity comes from the log as it happens, and restart alerts (",{"type":1133,"tag":1173,"props":14740,"children":14742},{"href":14505,"rel":14741},[1177],[14743],{"type":1138,"value":14509},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14746,"children":14748},{"href":14076,"rel":14747},[1177],[14749],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":14751,"children":14752},{},[14753,14755,14762,14763],{"type":1138,"value":14754},"notifications, and 1.1.0 testing notes starting with them (",{"type":1133,"tag":1173,"props":14756,"children":14759},{"href":14757,"rel":14758},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd5b32a7310d171a4f84478652e64c601b2bfa734",[1177],[14760],{"type":1138,"value":14761},"d5b32a7",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14764,"children":14766},{"href":14076,"rel":14765},[1177],[14767],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":14769,"children":14770},{"id":1664},[14771],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":14773,"children":14774},{},[14775,14797,14815,14833,14846,14859,14879,14896],{"type":1133,"tag":1195,"props":14776,"children":14777},{},[14778,14782,14784,14791,14792],{"type":1133,"tag":1146,"props":14779,"children":14780},{},[14781],{"type":1138,"value":11681},{"type":1138,"value":14783}," a scheduled restart with a warning, and a command's reply (",{"type":1133,"tag":1173,"props":14785,"children":14788},{"href":14786,"rel":14787},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5901cd3c4b7109c41c6341474803eb004586e62e",[1177],[14789],{"type":1138,"value":14790},"5901cd3",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14793,"children":14795},{"href":13432,"rel":14794},[1177],[14796],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":14798,"children":14799},{},[14800,14802,14809,14810],{"type":1138,"value":14801},"schedules in plans and apply (",{"type":1133,"tag":1173,"props":14803,"children":14806},{"href":14804,"rel":14805},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1dbdd6e16e87f5b3d92079c9d91fb069fe948897",[1177],[14807],{"type":1138,"value":14808},"1dbdd6e",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14811,"children":14813},{"href":13432,"rel":14812},[1177],[14814],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":14816,"children":14817},{},[14818,14820,14827,14828],{"type":1138,"value":14819},"one set of cron timers for backups and scheduled tasks (",{"type":1133,"tag":1173,"props":14821,"children":14824},{"href":14822,"rel":14823},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5a6362aac03fbbcfb0867dd826baa91dd041b7e7",[1177],[14825],{"type":1138,"value":14826},"5a6362a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14829,"children":14831},{"href":13432,"rel":14830},[1177],[14832],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":14834,"children":14835},{},[14836,14838,14845],{"type":1138,"value":14837},"smoke checks the System page measures the test server (",{"type":1133,"tag":1173,"props":14839,"children":14842},{"href":14840,"rel":14841},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd8e516a0643302977c05bc2006a5c53e938d4bed",[1177],[14843],{"type":1138,"value":14844},"d8e516a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14847,"children":14848},{},[14849,14851,14858],{"type":1138,"value":14850},"Release notes workflow rewrites an existing release's notes from main (",{"type":1133,"tag":1173,"props":14852,"children":14855},{"href":14853,"rel":14854},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F53eae732c6365a0c1484aebbf0571cd421639c4f",[1177],[14856],{"type":1138,"value":14857},"53eae73",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14860,"children":14861},{},[14862,14866,14868,14873,14874],{"type":1133,"tag":1146,"props":14863,"children":14864},{},[14865],{"type":1138,"value":10068},{"type":1138,"value":14867}," drop the status-poll feed, and let a log tailer run without a timer (",{"type":1133,"tag":1173,"props":14869,"children":14871},{"href":14505,"rel":14870},[1177],[14872],{"type":1138,"value":14509},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14875,"children":14877},{"href":14076,"rel":14876},[1177],[14878],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":14880,"children":14881},{},[14882,14884],{"type":1138,"value":14883},"build and sign each pull request as a test build under pr-",{"type":1133,"tag":14091,"props":14885,"children":14886},{},[14887,14888,14895],{"type":1138,"value":11840},{"type":1133,"tag":1173,"props":14889,"children":14892},{"href":14890,"rel":14891},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F27914384d5f4c1fea86a12f38fd85a8147ef3799",[1177],[14893],{"type":1138,"value":14894},"2791438",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":14897,"children":14898},{},[14899,14903,14905,14912,14913],{"type":1133,"tag":1146,"props":14900,"children":14901},{},[14902],{"type":1138,"value":11681},{"type":1138,"value":14904}," add a webhook channel through the form and check its test arrives signed (",{"type":1133,"tag":1173,"props":14906,"children":14909},{"href":14907,"rel":14908},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4c79002a4613d0e701da73f2eabf6c73be54570",[1177],[14910],{"type":1138,"value":14911},"b4c7900",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14914,"children":14916},{"href":14076,"rel":14915},[1177],[14917],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":14919,"children":14920},{"id":2327},[14921],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":14923,"children":14924},{},[14925,14945],{"type":1133,"tag":1195,"props":14926,"children":14927},{},[14928,14930,14937,14938],{"type":1138,"value":14929},"UI pass: display fixes, consistent layout, phone layout, System sections (#83) (",{"type":1133,"tag":1173,"props":14931,"children":14934},{"href":14932,"rel":14933},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1253de532c19ce46c9bed0a5765284a510348e1a",[1177],[14935],{"type":1138,"value":14936},"1253de5",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":14939,"children":14942},{"href":14940,"rel":14941},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F79",[1177],[14943],{"type":1138,"value":14944},"#79",{"type":1133,"tag":1195,"props":14946,"children":14947},{},[14948,14950,14957],{"type":1138,"value":14949},"Merge main (update channel, 1.0.1) into feat\u002Fnotifications; notifications move to migration 0008 (",{"type":1133,"tag":1173,"props":14951,"children":14954},{"href":14952,"rel":14953},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F651ac73082b89498eef5ee99d891bd6bec123836",[1177],[14955],{"type":1138,"value":14956},"651ac73",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":14959,"children":14960},{},[14961,14965,14966],{"type":1133,"tag":1146,"props":14962,"children":14963},{},[14964],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":14967,"children":14970},{"href":14968,"rel":14969},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.0.1...v1.1.0",[1177],[14971],{"type":1138,"value":14968},{"data":14973,"body":14974},{},{"type":1130,"children":14975},[14976,15006,15061,15073,15106,15118,15122,15479,15483,15565,15569,15652,15656,15718],{"type":1133,"tag":1134,"props":14977,"children":14978},{},[14979,14981,14985,14987,14991,14993,14998,15000,15004],{"type":1138,"value":14980},"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 ",{"type":1133,"tag":1146,"props":14982,"children":14983},{},[14984],{"type":1138,"value":7385},{"type":1138,"value":14986}," tab for newer mods, plugins and datapacks, a count on ",{"type":1133,"tag":1146,"props":14988,"children":14989},{},[14990],{"type":1138,"value":11807},{"type":1138,"value":14992}," and a banner when a new Flytower is out, and the newest Temurin build for each installed Java under ",{"type":1133,"tag":1146,"props":14994,"children":14995},{},[14996],{"type":1138,"value":14997},"System → Updates",{"type":1138,"value":14999},". Nothing is ever installed by itself. The ",{"type":1133,"tag":1146,"props":15001,"children":15002},{},[15003],{"type":1138,"value":7385},{"type":1138,"value":15005}," 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.",{"type":1133,"tag":1134,"props":15007,"children":15008},{},[15009,15011,15017,15019,15024,15026,15031,15033,15039,15040,15046,15048,15052,15054,15059],{"type":1138,"value":15010},"Secrets in ",{"type":1133,"tag":1789,"props":15012,"children":15014},{"className":15013},[],[15015],{"type":1138,"value":15016},"server.properties",{"type":1138,"value":15018}," are now hidden. On Minecraft 1.21.9 and later, ",{"type":1133,"tag":1789,"props":15020,"children":15022},{"className":15021},[],[15023],{"type":1138,"value":13364},{"type":1138,"value":15025}," showed in the ",{"type":1133,"tag":1146,"props":15027,"children":15028},{},[15029],{"type":1138,"value":15030},"YAML",{"type":1138,"value":15032}," 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 ",{"type":1133,"tag":1789,"props":15034,"children":15036},{"className":15035},[],[15037],{"type":1138,"value":15038},"secret",{"type":1138,"value":10159},{"type":1133,"tag":1789,"props":15041,"children":15043},{"className":15042},[],[15044],{"type":1138,"value":15045},"password",{"type":1138,"value":15047}," is hidden the same way. The ",{"type":1133,"tag":1146,"props":15049,"children":15050},{},[15051],{"type":1138,"value":7396},{"type":1138,"value":15053}," tab still shows ",{"type":1133,"tag":1789,"props":15055,"children":15057},{"className":15056},[],[15058],{"type":1138,"value":15016},{"type":1138,"value":15060}," 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.",{"type":1133,"tag":1134,"props":15062,"children":15063},{},[15064,15066,15071],{"type":1138,"value":15065},"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 ",{"type":1133,"tag":1146,"props":15067,"children":15068},{},[15069],{"type":1138,"value":15070},"Back up now",{"type":1138,"value":15072}," asks first.",{"type":1133,"tag":1134,"props":15074,"children":15075},{},[15076,15078,15082,15084,15090,15092,15097,15099,15105],{"type":1138,"value":15077},"Servers can now run things on a schedule, from the new ",{"type":1133,"tag":1146,"props":15079,"children":15080},{},[15081],{"type":1138,"value":13344},{"type":1138,"value":15083}," tab or ",{"type":1133,"tag":1789,"props":15085,"children":15087},{"className":15086},[],[15088],{"type":1138,"value":15089},"schedules:",{"type":1138,"value":15091}," 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 ",{"type":1133,"tag":1146,"props":15093,"children":15094},{},[15095],{"type":1138,"value":15096},"A scheduled restart, command or announcement failed",{"type":1138,"value":15098}," notification is ticked on channels that already take problem alerts. See ",{"type":1133,"tag":1173,"props":15100,"children":15103},{"href":15101,"rel":15102},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.6\u002Fdocs\u002Fschedules.md",[1177],[15104],{"type":1138,"value":83},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":15107,"children":15108},{},[15109,15111,15117],{"type":1138,"value":15110},"Testing notes are in the \"Update badges\", \"Hidden secrets\", \"Disk use\" and \"Scheduled tasks\" sections of ",{"type":1133,"tag":1173,"props":15112,"children":15115},{"href":15113,"rel":15114},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.6\u002Fdocs\u002Ftesting-1.1.0.md",[1177],[15116],{"type":1138,"value":13382},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":15119,"children":15120},{"id":1186},[15121],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":15123,"children":15124},{},[15125,15135,15145,15160,15179,15198,15217,15232,15251,15270,15289,15299,15309,15319,15329,15339,15349,15359,15369,15379,15389,15399,15409,15419,15429,15439,15449,15459,15469],{"type":1133,"tag":1195,"props":15126,"children":15127},{},[15128,15129,15134],{"type":1138,"value":13395},{"type":1133,"tag":1173,"props":15130,"children":15132},{"href":13398,"rel":15131},[1177],[15133],{"type":1138,"value":13402},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15136,"children":15137},{},[15138,15139,15144],{"type":1138,"value":13408},{"type":1133,"tag":1173,"props":15140,"children":15142},{"href":13411,"rel":15141},[1177],[15143],{"type":1138,"value":13415},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15146,"children":15147},{},[15148,15149,15154,15155],{"type":1138,"value":13421},{"type":1133,"tag":1173,"props":15150,"children":15152},{"href":13424,"rel":15151},[1177],[15153],{"type":1138,"value":13428},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15156,"children":15158},{"href":13432,"rel":15157},[1177],[15159],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15161,"children":15162},{},[15163,15167,15168,15173,15174],{"type":1133,"tag":1146,"props":15164,"children":15165},{},[15166],{"type":1138,"value":13444},{"type":1138,"value":13446},{"type":1133,"tag":1173,"props":15169,"children":15171},{"href":13449,"rel":15170},[1177],[15172],{"type":1138,"value":13453},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15175,"children":15177},{"href":13432,"rel":15176},[1177],[15178],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15180,"children":15181},{},[15182,15186,15187,15192,15193],{"type":1133,"tag":1146,"props":15183,"children":15184},{},[15185],{"type":1138,"value":10716},{"type":1138,"value":13468},{"type":1133,"tag":1173,"props":15188,"children":15190},{"href":13471,"rel":15189},[1177],[15191],{"type":1138,"value":13475},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15194,"children":15196},{"href":13432,"rel":15195},[1177],[15197],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15199,"children":15200},{},[15201,15205,15206,15211,15212],{"type":1133,"tag":1146,"props":15202,"children":15203},{},[15204],{"type":1138,"value":13489},{"type":1138,"value":13491},{"type":1133,"tag":1173,"props":15207,"children":15209},{"href":13494,"rel":15208},[1177],[15210],{"type":1138,"value":13498},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15213,"children":15215},{"href":13432,"rel":15214},[1177],[15216],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15218,"children":15219},{},[15220,15221,15226,15227],{"type":1138,"value":13509},{"type":1133,"tag":1173,"props":15222,"children":15224},{"href":13512,"rel":15223},[1177],[15225],{"type":1138,"value":13516},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15228,"children":15230},{"href":13432,"rel":15229},[1177],[15231],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15233,"children":15234},{},[15235,15239,15240,15245,15246],{"type":1133,"tag":1146,"props":15236,"children":15237},{},[15238],{"type":1138,"value":13530},{"type":1138,"value":13532},{"type":1133,"tag":1173,"props":15241,"children":15243},{"href":13535,"rel":15242},[1177],[15244],{"type":1138,"value":13539},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15247,"children":15249},{"href":13432,"rel":15248},[1177],[15250],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15252,"children":15253},{},[15254,15258,15259,15264,15265],{"type":1133,"tag":1146,"props":15255,"children":15256},{},[15257],{"type":1138,"value":13553},{"type":1138,"value":13555},{"type":1133,"tag":1173,"props":15260,"children":15262},{"href":13558,"rel":15261},[1177],[15263],{"type":1138,"value":13562},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15266,"children":15268},{"href":13432,"rel":15267},[1177],[15269],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15271,"children":15272},{},[15273,15277,15278,15283,15284],{"type":1133,"tag":1146,"props":15274,"children":15275},{},[15276],{"type":1138,"value":10716},{"type":1138,"value":13577},{"type":1133,"tag":1173,"props":15279,"children":15281},{"href":13580,"rel":15280},[1177],[15282],{"type":1138,"value":13584},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15285,"children":15287},{"href":13432,"rel":15286},[1177],[15288],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15290,"children":15291},{},[15292,15293,15298],{"type":1138,"value":13595},{"type":1133,"tag":1173,"props":15294,"children":15296},{"href":13598,"rel":15295},[1177],[15297],{"type":1138,"value":13602},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15300,"children":15301},{},[15302,15303,15308],{"type":1138,"value":13608},{"type":1133,"tag":1173,"props":15304,"children":15306},{"href":13611,"rel":15305},[1177],[15307],{"type":1138,"value":13615},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15310,"children":15311},{},[15312,15313,15318],{"type":1138,"value":13621},{"type":1133,"tag":1173,"props":15314,"children":15316},{"href":13624,"rel":15315},[1177],[15317],{"type":1138,"value":13628},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15320,"children":15321},{},[15322,15323,15328],{"type":1138,"value":13634},{"type":1133,"tag":1173,"props":15324,"children":15326},{"href":13637,"rel":15325},[1177],[15327],{"type":1138,"value":13641},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15330,"children":15331},{},[15332,15333,15338],{"type":1138,"value":13647},{"type":1133,"tag":1173,"props":15334,"children":15336},{"href":13650,"rel":15335},[1177],[15337],{"type":1138,"value":13654},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15340,"children":15341},{},[15342,15343,15348],{"type":1138,"value":13660},{"type":1133,"tag":1173,"props":15344,"children":15346},{"href":13663,"rel":15345},[1177],[15347],{"type":1138,"value":13667},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15350,"children":15351},{},[15352,15353,15358],{"type":1138,"value":13673},{"type":1133,"tag":1173,"props":15354,"children":15356},{"href":13676,"rel":15355},[1177],[15357],{"type":1138,"value":13680},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15360,"children":15361},{},[15362,15363,15368],{"type":1138,"value":13686},{"type":1133,"tag":1173,"props":15364,"children":15366},{"href":13689,"rel":15365},[1177],[15367],{"type":1138,"value":13693},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15370,"children":15371},{},[15372,15373,15378],{"type":1138,"value":13699},{"type":1133,"tag":1173,"props":15374,"children":15376},{"href":13702,"rel":15375},[1177],[15377],{"type":1138,"value":13706},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15380,"children":15381},{},[15382,15383,15388],{"type":1138,"value":13712},{"type":1133,"tag":1173,"props":15384,"children":15386},{"href":13715,"rel":15385},[1177],[15387],{"type":1138,"value":13719},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15390,"children":15391},{},[15392,15393,15398],{"type":1138,"value":13725},{"type":1133,"tag":1173,"props":15394,"children":15396},{"href":13728,"rel":15395},[1177],[15397],{"type":1138,"value":13732},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15400,"children":15401},{},[15402,15403,15408],{"type":1138,"value":13738},{"type":1133,"tag":1173,"props":15404,"children":15406},{"href":13741,"rel":15405},[1177],[15407],{"type":1138,"value":13745},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15410,"children":15411},{},[15412,15413,15418],{"type":1138,"value":13751},{"type":1133,"tag":1173,"props":15414,"children":15416},{"href":13754,"rel":15415},[1177],[15417],{"type":1138,"value":13758},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15420,"children":15421},{},[15422,15423,15428],{"type":1138,"value":13764},{"type":1133,"tag":1173,"props":15424,"children":15426},{"href":13767,"rel":15425},[1177],[15427],{"type":1138,"value":13771},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15430,"children":15431},{},[15432,15433,15438],{"type":1138,"value":13777},{"type":1133,"tag":1173,"props":15434,"children":15436},{"href":13780,"rel":15435},[1177],[15437],{"type":1138,"value":13784},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15440,"children":15441},{},[15442,15443,15448],{"type":1138,"value":13790},{"type":1133,"tag":1173,"props":15444,"children":15446},{"href":13793,"rel":15445},[1177],[15447],{"type":1138,"value":13797},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15450,"children":15451},{},[15452,15453,15458],{"type":1138,"value":13803},{"type":1133,"tag":1173,"props":15454,"children":15456},{"href":13806,"rel":15455},[1177],[15457],{"type":1138,"value":13810},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15460,"children":15461},{},[15462,15463,15468],{"type":1138,"value":13816},{"type":1133,"tag":1173,"props":15464,"children":15466},{"href":13819,"rel":15465},[1177],[15467],{"type":1138,"value":13823},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15470,"children":15471},{},[15472,15473,15478],{"type":1138,"value":13829},{"type":1133,"tag":1173,"props":15474,"children":15476},{"href":13832,"rel":15475},[1177],[15477],{"type":1138,"value":13836},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":15480,"children":15481},{"id":1233},[15482],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":15484,"children":15485},{},[15486,15496,15510,15525,15535,15545,15555],{"type":1133,"tag":1195,"props":15487,"children":15488},{},[15489,15490,15495],{"type":1138,"value":14225},{"type":1133,"tag":1173,"props":15491,"children":15493},{"href":14228,"rel":15492},[1177],[15494],{"type":1138,"value":14232},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15497,"children":15498},{},[15499,15503,15504,15509],{"type":1133,"tag":1146,"props":15500,"children":15501},{},[15502],{"type":1138,"value":6011},{"type":1138,"value":14242},{"type":1133,"tag":1173,"props":15505,"children":15507},{"href":14245,"rel":15506},[1177],[15508],{"type":1138,"value":14249},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15511,"children":15512},{},[15513,15514,15519,15520],{"type":1138,"value":14255},{"type":1133,"tag":1173,"props":15515,"children":15517},{"href":14258,"rel":15516},[1177],[15518],{"type":1138,"value":14262},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15521,"children":15523},{"href":13432,"rel":15522},[1177],[15524],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15526,"children":15527},{},[15528,15529,15534],{"type":1138,"value":14273},{"type":1133,"tag":1173,"props":15530,"children":15532},{"href":14276,"rel":15531},[1177],[15533],{"type":1138,"value":14280},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15536,"children":15537},{},[15538,15539,15544],{"type":1138,"value":14286},{"type":1133,"tag":1173,"props":15540,"children":15542},{"href":14289,"rel":15541},[1177],[15543],{"type":1138,"value":14293},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15546,"children":15547},{},[15548,15549,15554],{"type":1138,"value":14299},{"type":1133,"tag":1173,"props":15550,"children":15552},{"href":14302,"rel":15551},[1177],[15553],{"type":1138,"value":14306},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15556,"children":15557},{},[15558,15559,15564],{"type":1138,"value":14312},{"type":1133,"tag":1173,"props":15560,"children":15562},{"href":14315,"rel":15561},[1177],[15563],{"type":1138,"value":14319},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":15566,"children":15567},{"id":7},[15568],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":15570,"children":15571},{},[15572,15587,15602,15612,15622,15632,15642],{"type":1133,"tag":1195,"props":15573,"children":15574},{},[15575,15576,15581,15582],{"type":1138,"value":14547},{"type":1133,"tag":1173,"props":15577,"children":15579},{"href":14550,"rel":15578},[1177],[15580],{"type":1138,"value":14554},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15583,"children":15585},{"href":13432,"rel":15584},[1177],[15586],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15588,"children":15589},{},[15590,15591,15596,15597],{"type":1138,"value":14565},{"type":1133,"tag":1173,"props":15592,"children":15594},{"href":14568,"rel":15593},[1177],[15595],{"type":1138,"value":14572},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15598,"children":15600},{"href":13432,"rel":15599},[1177],[15601],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15603,"children":15604},{},[15605,15606,15611],{"type":1138,"value":14583},{"type":1133,"tag":1173,"props":15607,"children":15609},{"href":14586,"rel":15608},[1177],[15610],{"type":1138,"value":14590},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15613,"children":15614},{},[15615,15616,15621],{"type":1138,"value":14596},{"type":1133,"tag":1173,"props":15617,"children":15619},{"href":14599,"rel":15618},[1177],[15620],{"type":1138,"value":14603},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15623,"children":15624},{},[15625,15626,15631],{"type":1138,"value":14609},{"type":1133,"tag":1173,"props":15627,"children":15629},{"href":14612,"rel":15628},[1177],[15630],{"type":1138,"value":14616},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15633,"children":15634},{},[15635,15636,15641],{"type":1138,"value":14622},{"type":1133,"tag":1173,"props":15637,"children":15639},{"href":14625,"rel":15638},[1177],[15640],{"type":1138,"value":14629},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15643,"children":15644},{},[15645,15646,15651],{"type":1138,"value":14635},{"type":1133,"tag":1173,"props":15647,"children":15649},{"href":14638,"rel":15648},[1177],[15650],{"type":1138,"value":14642},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":15653,"children":15654},{"id":1664},[15655],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":15657,"children":15658},{},[15659,15678,15693,15708],{"type":1133,"tag":1195,"props":15660,"children":15661},{},[15662,15666,15667,15672,15673],{"type":1133,"tag":1146,"props":15663,"children":15664},{},[15665],{"type":1138,"value":11681},{"type":1138,"value":14783},{"type":1133,"tag":1173,"props":15668,"children":15670},{"href":14786,"rel":15669},[1177],[15671],{"type":1138,"value":14790},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15674,"children":15676},{"href":13432,"rel":15675},[1177],[15677],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15679,"children":15680},{},[15681,15682,15687,15688],{"type":1138,"value":14801},{"type":1133,"tag":1173,"props":15683,"children":15685},{"href":14804,"rel":15684},[1177],[15686],{"type":1138,"value":14808},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15689,"children":15691},{"href":13432,"rel":15690},[1177],[15692],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15694,"children":15695},{},[15696,15697,15702,15703],{"type":1138,"value":14819},{"type":1133,"tag":1173,"props":15698,"children":15700},{"href":14822,"rel":15699},[1177],[15701],{"type":1138,"value":14826},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":15704,"children":15706},{"href":13432,"rel":15705},[1177],[15707],{"type":1138,"value":13436},{"type":1133,"tag":1195,"props":15709,"children":15710},{},[15711,15712,15717],{"type":1138,"value":14837},{"type":1133,"tag":1173,"props":15713,"children":15715},{"href":14840,"rel":15714},[1177],[15716],{"type":1138,"value":14844},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":15719,"children":15720},{},[15721,15725,15726],{"type":1133,"tag":1146,"props":15722,"children":15723},{},[15724],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":15727,"children":15730},{"href":15728,"rel":15729},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.5...v1.1.0-beta.6",[1177],[15731],{"type":1138,"value":15728},{"data":15733,"body":15734},{},{"type":1130,"children":15735},[15736,15749,15761,15765,15912,15916,16053,16057,16128,16132,16145],{"type":1133,"tag":1134,"props":15737,"children":15738},{},[15739,15741,15747],{"type":1138,"value":15740},"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 ",{"type":1133,"tag":1789,"props":15742,"children":15744},{"className":15743},[],[15745],{"type":1138,"value":15746},".tmp",{"type":1138,"value":15748},", 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.",{"type":1133,"tag":1134,"props":15750,"children":15751},{},[15752,15754,15760],{"type":1138,"value":15753},"Testing notes are in the last section of ",{"type":1133,"tag":1173,"props":15755,"children":15758},{"href":15756,"rel":15757},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.5\u002Fdocs\u002Ftesting-1.1.0.md",[1177],[15759],{"type":1138,"value":13382},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":15762,"children":15763},{"id":1186},[15764],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":15766,"children":15767},{},[15768,15778,15788,15798,15808,15818,15828,15838,15848,15858,15868,15878,15888,15898],{"type":1133,"tag":1195,"props":15769,"children":15770},{},[15771,15772,15777],{"type":1138,"value":13842},{"type":1133,"tag":1173,"props":15773,"children":15775},{"href":13845,"rel":15774},[1177],[15776],{"type":1138,"value":13849},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15779,"children":15780},{},[15781,15782,15787],{"type":1138,"value":13855},{"type":1133,"tag":1173,"props":15783,"children":15785},{"href":13858,"rel":15784},[1177],[15786],{"type":1138,"value":13862},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15789,"children":15790},{},[15791,15792,15797],{"type":1138,"value":13868},{"type":1133,"tag":1173,"props":15793,"children":15795},{"href":13871,"rel":15794},[1177],[15796],{"type":1138,"value":13875},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15799,"children":15800},{},[15801,15802,15807],{"type":1138,"value":13881},{"type":1133,"tag":1173,"props":15803,"children":15805},{"href":13884,"rel":15804},[1177],[15806],{"type":1138,"value":13888},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15809,"children":15810},{},[15811,15812,15817],{"type":1138,"value":13894},{"type":1133,"tag":1173,"props":15813,"children":15815},{"href":13897,"rel":15814},[1177],[15816],{"type":1138,"value":13901},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15819,"children":15820},{},[15821,15822,15827],{"type":1138,"value":13907},{"type":1133,"tag":1173,"props":15823,"children":15825},{"href":13910,"rel":15824},[1177],[15826],{"type":1138,"value":13914},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15829,"children":15830},{},[15831,15832,15837],{"type":1138,"value":13920},{"type":1133,"tag":1173,"props":15833,"children":15835},{"href":13923,"rel":15834},[1177],[15836],{"type":1138,"value":13927},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15839,"children":15840},{},[15841,15842,15847],{"type":1138,"value":13933},{"type":1133,"tag":1173,"props":15843,"children":15845},{"href":13936,"rel":15844},[1177],[15846],{"type":1138,"value":13940},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15849,"children":15850},{},[15851,15852,15857],{"type":1138,"value":13946},{"type":1133,"tag":1173,"props":15853,"children":15855},{"href":13949,"rel":15854},[1177],[15856],{"type":1138,"value":13953},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15859,"children":15860},{},[15861,15862,15867],{"type":1138,"value":13959},{"type":1133,"tag":1173,"props":15863,"children":15865},{"href":13962,"rel":15864},[1177],[15866],{"type":1138,"value":13966},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15869,"children":15870},{},[15871,15872,15877],{"type":1138,"value":13972},{"type":1133,"tag":1173,"props":15873,"children":15875},{"href":13975,"rel":15874},[1177],[15876],{"type":1138,"value":13979},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15879,"children":15880},{},[15881,15882,15887],{"type":1138,"value":13985},{"type":1133,"tag":1173,"props":15883,"children":15885},{"href":13988,"rel":15884},[1177],[15886],{"type":1138,"value":13992},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15889,"children":15890},{},[15891,15892,15897],{"type":1138,"value":13998},{"type":1133,"tag":1173,"props":15893,"children":15895},{"href":14001,"rel":15894},[1177],[15896],{"type":1138,"value":14005},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15899,"children":15900},{},[15901,15905,15906,15911],{"type":1133,"tag":1146,"props":15902,"children":15903},{},[15904],{"type":1138,"value":11650},{"type":1138,"value":14015},{"type":1133,"tag":1173,"props":15907,"children":15909},{"href":14018,"rel":15908},[1177],[15910],{"type":1138,"value":14022},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":15913,"children":15914},{"id":1233},[15915],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":15917,"children":15918},{},[15919,15929,15939,15949,15959,15969,15979,15989,15999,16009,16019,16033,16043],{"type":1133,"tag":1195,"props":15920,"children":15921},{},[15922,15923,15928],{"type":1138,"value":14325},{"type":1133,"tag":1173,"props":15924,"children":15926},{"href":14328,"rel":15925},[1177],[15927],{"type":1138,"value":14332},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15930,"children":15931},{},[15932,15933,15938],{"type":1138,"value":14338},{"type":1133,"tag":1173,"props":15934,"children":15936},{"href":14341,"rel":15935},[1177],[15937],{"type":1138,"value":14345},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15940,"children":15941},{},[15942,15943,15948],{"type":1138,"value":14351},{"type":1133,"tag":1173,"props":15944,"children":15946},{"href":14354,"rel":15945},[1177],[15947],{"type":1138,"value":14358},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15950,"children":15951},{},[15952,15953,15958],{"type":1138,"value":14364},{"type":1133,"tag":1173,"props":15954,"children":15956},{"href":14367,"rel":15955},[1177],[15957],{"type":1138,"value":14371},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15960,"children":15961},{},[15962,15963,15968],{"type":1138,"value":14377},{"type":1133,"tag":1173,"props":15964,"children":15966},{"href":14380,"rel":15965},[1177],[15967],{"type":1138,"value":14384},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15970,"children":15971},{},[15972,15973,15978],{"type":1138,"value":14390},{"type":1133,"tag":1173,"props":15974,"children":15976},{"href":14393,"rel":15975},[1177],[15977],{"type":1138,"value":14397},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15980,"children":15981},{},[15982,15983,15988],{"type":1138,"value":14403},{"type":1133,"tag":1173,"props":15984,"children":15986},{"href":14406,"rel":15985},[1177],[15987],{"type":1138,"value":14410},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":15990,"children":15991},{},[15992,15993,15998],{"type":1138,"value":14416},{"type":1133,"tag":1173,"props":15994,"children":15996},{"href":14419,"rel":15995},[1177],[15997],{"type":1138,"value":14423},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16000,"children":16001},{},[16002,16003,16008],{"type":1138,"value":14429},{"type":1133,"tag":1173,"props":16004,"children":16006},{"href":14432,"rel":16005},[1177],[16007],{"type":1138,"value":14436},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16010,"children":16011},{},[16012,16013,16018],{"type":1138,"value":14442},{"type":1133,"tag":1173,"props":16014,"children":16016},{"href":14445,"rel":16015},[1177],[16017],{"type":1138,"value":14449},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16020,"children":16021},{},[16022,16026,16027,16032],{"type":1133,"tag":1146,"props":16023,"children":16024},{},[16025],{"type":1138,"value":11650},{"type":1138,"value":14459},{"type":1133,"tag":1173,"props":16028,"children":16030},{"href":14462,"rel":16029},[1177],[16031],{"type":1138,"value":14466},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16034,"children":16035},{},[16036,16037,16042],{"type":1138,"value":14472},{"type":1133,"tag":1173,"props":16038,"children":16040},{"href":14475,"rel":16039},[1177],[16041],{"type":1138,"value":14479},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16044,"children":16045},{},[16046,16047,16052],{"type":1138,"value":14485},{"type":1133,"tag":1173,"props":16048,"children":16050},{"href":14488,"rel":16049},[1177],[16051],{"type":1138,"value":14492},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16054,"children":16055},{"id":7},[16056],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":16058,"children":16059},{},[16060,16070,16080,16090,16104,16114],{"type":1133,"tag":1195,"props":16061,"children":16062},{},[16063,16064,16069],{"type":1138,"value":14648},{"type":1133,"tag":1173,"props":16065,"children":16067},{"href":14651,"rel":16066},[1177],[16068],{"type":1138,"value":14655},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16071,"children":16072},{},[16073,16074,16079],{"type":1138,"value":14661},{"type":1133,"tag":1173,"props":16075,"children":16077},{"href":14664,"rel":16076},[1177],[16078],{"type":1138,"value":14668},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16081,"children":16082},{},[16083,16084,16089],{"type":1138,"value":14674},{"type":1133,"tag":1173,"props":16085,"children":16087},{"href":14677,"rel":16086},[1177],[16088],{"type":1138,"value":14681},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16091,"children":16092},{},[16093,16097,16098,16103],{"type":1133,"tag":1146,"props":16094,"children":16095},{},[16096],{"type":1138,"value":11650},{"type":1138,"value":14691},{"type":1133,"tag":1173,"props":16099,"children":16101},{"href":14694,"rel":16100},[1177],[16102],{"type":1138,"value":14698},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16105,"children":16106},{},[16107,16108,16113],{"type":1138,"value":14704},{"type":1133,"tag":1173,"props":16109,"children":16111},{"href":14707,"rel":16110},[1177],[16112],{"type":1138,"value":14711},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16115,"children":16116},{},[16117,16121,16122,16127],{"type":1133,"tag":1146,"props":16118,"children":16119},{},[16120],{"type":1138,"value":11650},{"type":1138,"value":14721},{"type":1133,"tag":1173,"props":16123,"children":16125},{"href":14724,"rel":16124},[1177],[16126],{"type":1138,"value":14728},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16129,"children":16130},{"id":1664},[16131],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":16133,"children":16134},{},[16135],{"type":1133,"tag":1195,"props":16136,"children":16137},{},[16138,16139,16144],{"type":1138,"value":14850},{"type":1133,"tag":1173,"props":16140,"children":16142},{"href":14853,"rel":16141},[1177],[16143],{"type":1138,"value":14857},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":16146,"children":16147},{},[16148,16152,16153],{"type":1133,"tag":1146,"props":16149,"children":16150},{},[16151],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":16154,"children":16157},{"href":16155,"rel":16156},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.4...v1.1.0-beta.5",[1177],[16158],{"type":1138,"value":16155},{"data":16160,"body":16161},{},{"type":1130,"children":16162},[16163,16174,16213,16218,16230,16234,16262],{"type":1133,"tag":1134,"props":16164,"children":16165},{},[16166,16168,16172],{"type":1138,"value":16167},"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, ",{"type":1133,"tag":1146,"props":16169,"children":16170},{},[16171],{"type":1138,"value":13325},{"type":1138,"value":16173}," keeps 30 days of history, and new alerts cover crashes, crash loops and servers that stop responding.",{"type":1133,"tag":1134,"props":16175,"children":16176},{},[16177,16179,16184,16185,16190,16192,16196,16198,16203,16205,16211],{"type":1138,"value":16178},"After three crashes in ten minutes a server is left stopped instead of restarting forever, and ",{"type":1133,"tag":1146,"props":16180,"children":16181},{},[16182],{"type":1138,"value":16183},"Start",{"type":1138,"value":10159},{"type":1133,"tag":1146,"props":16186,"children":16187},{},[16188],{"type":1138,"value":16189},"Restart",{"type":1138,"value":16191}," clears it. A server that misses five console answers in a row is marked ",{"type":1133,"tag":1146,"props":16193,"children":16194},{},[16195],{"type":1138,"value":334},{"type":1138,"value":16197},", and can be restarted automatically under ",{"type":1133,"tag":1146,"props":16199,"children":16200},{},[16201],{"type":1138,"value":16202},"Settings → Crashes",{"type":1138,"value":16204},". Stops and restarts from Flytower, or a ",{"type":1133,"tag":1789,"props":16206,"children":16208},{"className":16207},[],[16209],{"type":1138,"value":16210},"stop",{"type":1138,"value":16212}," typed in the console, never count as crashes.",{"type":1133,"tag":1134,"props":16214,"children":16215},{},[16216],{"type":1138,"value":16217},"Flytower is now free software under the GNU AGPL v3.0.",{"type":1133,"tag":1134,"props":16219,"children":16220},{},[16221,16223,16229],{"type":1138,"value":16222},"Testing notes are in section 2 of ",{"type":1133,"tag":1173,"props":16224,"children":16227},{"href":16225,"rel":16226},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.4\u002Fdocs\u002Ftesting-1.1.0.md",[1177],[16228],{"type":1138,"value":13382},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":16231,"children":16232},{"id":1186},[16233],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":16235,"children":16236},{},[16237,16247],{"type":1133,"tag":1195,"props":16238,"children":16239},{},[16240,16241,16246],{"type":1138,"value":14028},{"type":1133,"tag":1173,"props":16242,"children":16244},{"href":14031,"rel":16243},[1177],[16245],{"type":1138,"value":14035},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16248,"children":16249},{},[16250,16251,16256,16257],{"type":1138,"value":14041},{"type":1133,"tag":1173,"props":16252,"children":16254},{"href":14044,"rel":16253},[1177],[16255],{"type":1138,"value":14048},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":16258,"children":16260},{"href":14052,"rel":16259},[1177],[16261],{"type":1138,"value":14056},{"type":1133,"tag":1134,"props":16263,"children":16264},{},[16265,16269,16270],{"type":1133,"tag":1146,"props":16266,"children":16267},{},[16268],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":16271,"children":16274},{"href":16272,"rel":16273},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.3...v1.1.0-beta.4",[1177],[16275],{"type":1138,"value":16272},{"data":16277,"body":16278},{},{"type":1130,"children":16279},[16280,16285,16324,16342,16346,16364],{"type":1133,"tag":1134,"props":16281,"children":16282},{},[16283],{"type":1138,"value":16284},"A tidy-up of the whole panel after the UI audit. Nothing about how servers run has changed.",{"type":1133,"tag":1134,"props":16286,"children":16287},{},[16288,16290,16295,16297,16302,16303,16308,16310,16315,16317,16322],{"type":1138,"value":16289},"On phones, server cards fit the screen, Start, Restart and Stop sit in a ",{"type":1133,"tag":1146,"props":16291,"children":16292},{},[16293],{"type":1138,"value":16294},"Power",{"type":1138,"value":16296}," 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 ",{"type":1133,"tag":1146,"props":16298,"children":16299},{},[16300],{"type":1138,"value":16301},"Discard",{"type":1138,"value":1838},{"type":1133,"tag":1146,"props":16304,"children":16305},{},[16306],{"type":1138,"value":16307},"Save",{"type":1138,"value":16309}," bar while you have unsaved changes, ",{"type":1133,"tag":1146,"props":16311,"children":16312},{},[16313],{"type":1138,"value":16314},"Export world",{"type":1138,"value":16316}," 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 ",{"type":1133,"tag":1146,"props":16318,"children":16319},{},[16320],{"type":1138,"value":16321},"Address",{"type":1138,"value":16323}," card shows the server's hostname.",{"type":1133,"tag":1134,"props":16325,"children":16326},{},[16327,16329,16334,16335,16341],{"type":1138,"value":16328},"Testing notes are under ",{"type":1133,"tag":1146,"props":16330,"children":16331},{},[16332],{"type":1138,"value":16333},"UI pass",{"type":1138,"value":1823},{"type":1133,"tag":1173,"props":16336,"children":16339},{"href":16337,"rel":16338},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.3\u002Fdocs\u002Ftesting-1.1.0.md",[1177],[16340],{"type":1138,"value":13382},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":16343,"children":16344},{"id":2327},[16345],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":16347,"children":16348},{},[16349],{"type":1133,"tag":1195,"props":16350,"children":16351},{},[16352,16353,16358,16359],{"type":1138,"value":14929},{"type":1133,"tag":1173,"props":16354,"children":16356},{"href":14932,"rel":16355},[1177],[16357],{"type":1138,"value":14936},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":16360,"children":16362},{"href":14940,"rel":16361},[1177],[16363],{"type":1138,"value":14944},{"type":1133,"tag":1134,"props":16365,"children":16366},{},[16367,16371,16372],{"type":1133,"tag":1146,"props":16368,"children":16369},{},[16370],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":16373,"children":16376},{"href":16374,"rel":16375},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.2...v1.1.0-beta.3",[1177],[16377],{"type":1138,"value":16374},{"data":16379,"body":16380},{},{"type":1130,"children":16381},[16382,16398,16402,16425,16429,16452,16456,16469,16473,16486,16490,16503],{"type":1133,"tag":1134,"props":16383,"children":16384},{},[16385,16390,16392,16396],{"type":1133,"tag":1146,"props":16386,"children":16387},{},[16388],{"type":1138,"value":16389},"The native build of 1.3.1.",{"type":1138,"value":16391}," It's the same code as 1.3.1, published so panels on the ",{"type":1133,"tag":1146,"props":16393,"children":16394},{},[16395],{"type":1138,"value":2921},{"type":1138,"value":16397}," 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.",{"type":1133,"tag":1184,"props":16399,"children":16400},{"id":1186},[16401],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":16403,"children":16404},{},[16405,16415],{"type":1133,"tag":1195,"props":16406,"children":16407},{},[16408,16409,16414],{"type":1138,"value":3952},{"type":1133,"tag":1173,"props":16410,"children":16412},{"href":3955,"rel":16411},[1177],[16413],{"type":1138,"value":3959},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16416,"children":16417},{},[16418,16419,16424],{"type":1138,"value":3965},{"type":1133,"tag":1173,"props":16420,"children":16422},{"href":3968,"rel":16421},[1177],[16423],{"type":1138,"value":3972},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16426,"children":16427},{"id":1233},[16428],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":16430,"children":16431},{},[16432,16442],{"type":1133,"tag":1195,"props":16433,"children":16434},{},[16435,16436,16441],{"type":1138,"value":3985},{"type":1133,"tag":1173,"props":16437,"children":16439},{"href":3988,"rel":16438},[1177],[16440],{"type":1138,"value":3992},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16443,"children":16444},{},[16445,16446,16451],{"type":1138,"value":3998},{"type":1133,"tag":1173,"props":16447,"children":16449},{"href":4001,"rel":16448},[1177],[16450],{"type":1138,"value":4005},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16453,"children":16454},{"id":7},[16455],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":16457,"children":16458},{},[16459],{"type":1133,"tag":1195,"props":16460,"children":16461},{},[16462,16463,16468],{"type":1138,"value":4018},{"type":1133,"tag":1173,"props":16464,"children":16466},{"href":4021,"rel":16465},[1177],[16467],{"type":1138,"value":4025},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16470,"children":16471},{"id":1664},[16472],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":16474,"children":16475},{},[16476],{"type":1133,"tag":1195,"props":16477,"children":16478},{},[16479,16480,16485],{"type":1138,"value":4038},{"type":1133,"tag":1173,"props":16481,"children":16483},{"href":4041,"rel":16482},[1177],[16484],{"type":1138,"value":4045},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16487,"children":16488},{"id":2327},[16489],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":16491,"children":16492},{},[16493],{"type":1133,"tag":1195,"props":16494,"children":16495},{},[16496,16497,16502],{"type":1138,"value":4058},{"type":1133,"tag":1173,"props":16498,"children":16500},{"href":4061,"rel":16499},[1177],[16501],{"type":1138,"value":4065},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":16504,"children":16505},{},[16506,16510,16511],{"type":1133,"tag":1146,"props":16507,"children":16508},{},[16509],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":16512,"children":16515},{"href":16513,"rel":16514},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.0-native.1...native-1.3.1-native.1",[1177],[16516],{"type":1138,"value":16513},{"data":16518,"body":16519},{},{"type":1130,"children":16520},[16521,16557,16569,16573,16690,16694,16712,16716,16749,16753,16766,16770,16803],{"type":1133,"tag":1134,"props":16522,"children":16523},{},[16524,16529,16531,16535,16537,16543,16544,16549,16551,16555],{"type":1133,"tag":1146,"props":16525,"children":16526},{},[16527],{"type":1138,"value":16528},"The native build of 1.3.0.",{"type":1138,"value":16530}," It's the same code as 1.3.0, published so panels on the ",{"type":1133,"tag":1146,"props":16532,"children":16533},{},[16534],{"type":1138,"value":2921},{"type":1138,"value":16536}," channel get it. With ",{"type":1133,"tag":1789,"props":16538,"children":16540},{"className":16539},[],[16541],{"type":1138,"value":16542},"rust",{"type":1138,"value":1823},{"type":1133,"tag":1789,"props":16545,"children":16547},{"className":16546},[],[16548],{"type":1138,"value":1829},{"type":1138,"value":16550},", every job the system helper does, along with updates and ",{"type":1133,"tag":1146,"props":16552,"children":16553},{},[16554],{"type":1138,"value":1157},{"type":1138,"value":16556},", runs in Rust. It's still off unless you switch it on. 1.4.0 plans to make it the default.",{"type":1133,"tag":1134,"props":16558,"children":16559},{},[16560,16562,16568],{"type":1138,"value":16561},"Testing: on a spare VPS, switch Rust on and follow ",{"type":1133,"tag":1173,"props":16563,"children":16566},{"href":16564,"rel":16565},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.3.0-native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[16567],{"type":1138,"value":1845},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":16570,"children":16571},{"id":1186},[16572],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":16574,"children":16575},{},[16576,16586,16596,16606,16616,16630,16640,16650,16660,16670,16680],{"type":1133,"tag":1195,"props":16577,"children":16578},{},[16579,16580,16585],{"type":1138,"value":4303},{"type":1133,"tag":1173,"props":16581,"children":16583},{"href":4306,"rel":16582},[1177],[16584],{"type":1138,"value":4310},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16587,"children":16588},{},[16589,16590,16595],{"type":1138,"value":4316},{"type":1133,"tag":1173,"props":16591,"children":16593},{"href":4319,"rel":16592},[1177],[16594],{"type":1138,"value":4323},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16597,"children":16598},{},[16599,16600,16605],{"type":1138,"value":4329},{"type":1133,"tag":1173,"props":16601,"children":16603},{"href":4332,"rel":16602},[1177],[16604],{"type":1138,"value":4336},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16607,"children":16608},{},[16609,16610,16615],{"type":1138,"value":4342},{"type":1133,"tag":1173,"props":16611,"children":16613},{"href":4345,"rel":16612},[1177],[16614],{"type":1138,"value":4349},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16617,"children":16618},{},[16619,16620,16623,16624,16629],{"type":1138,"value":4355},{"type":1133,"tag":4357,"props":16621,"children":16622},{},[],{"type":1138,"value":4361},{"type":1133,"tag":1173,"props":16625,"children":16627},{"href":4364,"rel":16626},[1177],[16628],{"type":1138,"value":4368},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16631,"children":16632},{},[16633,16634,16639],{"type":1138,"value":4374},{"type":1133,"tag":1173,"props":16635,"children":16637},{"href":4377,"rel":16636},[1177],[16638],{"type":1138,"value":4381},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16641,"children":16642},{},[16643,16644,16649],{"type":1138,"value":4400},{"type":1133,"tag":1173,"props":16645,"children":16647},{"href":4403,"rel":16646},[1177],[16648],{"type":1138,"value":4407},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16651,"children":16652},{},[16653,16654,16659],{"type":1138,"value":4413},{"type":1133,"tag":1173,"props":16655,"children":16657},{"href":4416,"rel":16656},[1177],[16658],{"type":1138,"value":4420},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16661,"children":16662},{},[16663,16664,16669],{"type":1138,"value":4426},{"type":1133,"tag":1173,"props":16665,"children":16667},{"href":4429,"rel":16666},[1177],[16668],{"type":1138,"value":4433},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16671,"children":16672},{},[16673,16674,16679],{"type":1138,"value":4439},{"type":1133,"tag":1173,"props":16675,"children":16677},{"href":4442,"rel":16676},[1177],[16678],{"type":1138,"value":4446},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16681,"children":16682},{},[16683,16684,16689],{"type":1138,"value":4452},{"type":1133,"tag":1173,"props":16685,"children":16687},{"href":4455,"rel":16686},[1177],[16688],{"type":1138,"value":4459},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16691,"children":16692},{"id":1233},[16693],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":16695,"children":16696},{},[16697],{"type":1133,"tag":1195,"props":16698,"children":16699},{},[16700,16701,16705,16706,16711],{"type":1138,"value":6220},{"type":1133,"tag":4357,"props":16702,"children":16703},{},[16704],{"type":1138,"value":6225},{"type":1138,"value":6227},{"type":1133,"tag":1173,"props":16707,"children":16709},{"href":6230,"rel":16708},[1177],[16710],{"type":1138,"value":6234},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16713,"children":16714},{"id":7},[16715],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":16717,"children":16718},{},[16719,16729,16739],{"type":1133,"tag":1195,"props":16720,"children":16721},{},[16722,16723,16728],{"type":1138,"value":6446},{"type":1133,"tag":1173,"props":16724,"children":16726},{"href":6449,"rel":16725},[1177],[16727],{"type":1138,"value":6453},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16730,"children":16731},{},[16732,16733,16738],{"type":1138,"value":6472},{"type":1133,"tag":1173,"props":16734,"children":16736},{"href":6475,"rel":16735},[1177],[16737],{"type":1138,"value":6479},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16740,"children":16741},{},[16742,16743,16748],{"type":1138,"value":6511},{"type":1133,"tag":1173,"props":16744,"children":16746},{"href":6514,"rel":16745},[1177],[16747],{"type":1138,"value":6518},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16750,"children":16751},{"id":1664},[16752],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":16754,"children":16755},{},[16756],{"type":1133,"tag":1195,"props":16757,"children":16758},{},[16759,16760,16765],{"type":1138,"value":6887},{"type":1133,"tag":1173,"props":16761,"children":16763},{"href":6890,"rel":16762},[1177],[16764],{"type":1138,"value":6894},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":16767,"children":16768},{"id":2327},[16769],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":16771,"children":16772},{},[16773,16783,16793],{"type":1133,"tag":1195,"props":16774,"children":16775},{},[16776,16777,16782],{"type":1138,"value":7160},{"type":1133,"tag":1173,"props":16778,"children":16780},{"href":7163,"rel":16779},[1177],[16781],{"type":1138,"value":7167},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16784,"children":16785},{},[16786,16787,16792],{"type":1138,"value":7173},{"type":1133,"tag":1173,"props":16788,"children":16790},{"href":7176,"rel":16789},[1177],[16791],{"type":1138,"value":7180},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16794,"children":16795},{},[16796,16797,16802],{"type":1138,"value":7160},{"type":1133,"tag":1173,"props":16798,"children":16800},{"href":7188,"rel":16799},[1177],[16801],{"type":1138,"value":7192},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":16804,"children":16805},{},[16806,16810,16811],{"type":1133,"tag":1146,"props":16807,"children":16808},{},[16809],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":16812,"children":16815},{"href":16813,"rel":16814},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.0-beta.3.native.1...native-1.3.0-native.1",[1177],[16816],{"type":1138,"value":16813},{"data":16818,"body":16819},{},{"type":1130,"children":16820},[16821,16850,16863,16867,17254,17258,17351,17355,17458,17462,17529,17533,17586],{"type":1133,"tag":1134,"props":16822,"children":16823},{},[16824,16829,16831,16835,16837,16842,16843,16848],{"type":1133,"tag":1146,"props":16825,"children":16826},{},[16827],{"type":1138,"value":16828},"The native build of 1.3.0-beta.3.",{"type":1138,"value":16830}," It's the same code as 1.3.0-beta.3, published so panels on the ",{"type":1133,"tag":1146,"props":16832,"children":16833},{},[16834],{"type":1138,"value":2921},{"type":1138,"value":16836}," channel get it. The updater has now been rewritten in Rust as well, so with ",{"type":1133,"tag":1789,"props":16838,"children":16840},{"className":16839},[],[16841],{"type":1138,"value":16542},{"type":1138,"value":1823},{"type":1133,"tag":1789,"props":16844,"children":16846},{"className":16845},[],[16847],{"type":1138,"value":1829},{"type":1138,"value":16849}," 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.",{"type":1133,"tag":1134,"props":16851,"children":16852},{},[16853,16855,16861],{"type":1138,"value":16854},"Testing: on a spare VPS, switch Rust on, then follow ",{"type":1133,"tag":1173,"props":16856,"children":16859},{"href":16857,"rel":16858},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.3.0-beta.3.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[16860],{"type":1138,"value":1845},{"type":1138,"value":16862},", including the update and rollback checks.",{"type":1133,"tag":1184,"props":16864,"children":16865},{"id":1186},[16866],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":16868,"children":16869},{},[16870,16880,16890,16900,16910,16920,16930,16940,16950,16960,16970,16980,16994,17004,17014,17024,17034,17044,17054,17064,17074,17088,17098,17112,17122,17132,17142,17152,17162,17176,17186,17196,17206,17216,17226,17240],{"type":1133,"tag":1195,"props":16871,"children":16872},{},[16873,16874,16879],{"type":1138,"value":4387},{"type":1133,"tag":1173,"props":16875,"children":16877},{"href":4390,"rel":16876},[1177],[16878],{"type":1138,"value":4394},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16881,"children":16882},{},[16883,16884,16889],{"type":1138,"value":4465},{"type":1133,"tag":1173,"props":16885,"children":16887},{"href":4468,"rel":16886},[1177],[16888],{"type":1138,"value":4472},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16891,"children":16892},{},[16893,16894,16899],{"type":1138,"value":4478},{"type":1133,"tag":1173,"props":16895,"children":16897},{"href":4481,"rel":16896},[1177],[16898],{"type":1138,"value":4485},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16901,"children":16902},{},[16903,16904,16909],{"type":1138,"value":4491},{"type":1133,"tag":1173,"props":16905,"children":16907},{"href":4494,"rel":16906},[1177],[16908],{"type":1138,"value":4498},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16911,"children":16912},{},[16913,16914,16919],{"type":1138,"value":4504},{"type":1133,"tag":1173,"props":16915,"children":16917},{"href":4507,"rel":16916},[1177],[16918],{"type":1138,"value":4511},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16921,"children":16922},{},[16923,16924,16929],{"type":1138,"value":4517},{"type":1133,"tag":1173,"props":16925,"children":16927},{"href":4520,"rel":16926},[1177],[16928],{"type":1138,"value":4524},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16931,"children":16932},{},[16933,16934,16939],{"type":1138,"value":4530},{"type":1133,"tag":1173,"props":16935,"children":16937},{"href":4533,"rel":16936},[1177],[16938],{"type":1138,"value":4537},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16941,"children":16942},{},[16943,16944,16949],{"type":1138,"value":4543},{"type":1133,"tag":1173,"props":16945,"children":16947},{"href":4546,"rel":16946},[1177],[16948],{"type":1138,"value":4550},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16951,"children":16952},{},[16953,16954,16959],{"type":1138,"value":4556},{"type":1133,"tag":1173,"props":16955,"children":16957},{"href":4559,"rel":16956},[1177],[16958],{"type":1138,"value":4563},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16961,"children":16962},{},[16963,16964,16969],{"type":1138,"value":4569},{"type":1133,"tag":1173,"props":16965,"children":16967},{"href":4572,"rel":16966},[1177],[16968],{"type":1138,"value":4576},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16971,"children":16972},{},[16973,16974,16979],{"type":1138,"value":4582},{"type":1133,"tag":1173,"props":16975,"children":16977},{"href":4585,"rel":16976},[1177],[16978],{"type":1138,"value":4589},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16981,"children":16982},{},[16983,16987,16988,16993],{"type":1133,"tag":1146,"props":16984,"children":16985},{},[16986],{"type":1138,"value":4598},{"type":1138,"value":4600},{"type":1133,"tag":1173,"props":16989,"children":16991},{"href":4603,"rel":16990},[1177],[16992],{"type":1138,"value":4607},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":16995,"children":16996},{},[16997,16998,17003],{"type":1138,"value":4613},{"type":1133,"tag":1173,"props":16999,"children":17001},{"href":4616,"rel":17000},[1177],[17002],{"type":1138,"value":4620},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17005,"children":17006},{},[17007,17008,17013],{"type":1138,"value":4626},{"type":1133,"tag":1173,"props":17009,"children":17011},{"href":4629,"rel":17010},[1177],[17012],{"type":1138,"value":4633},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17015,"children":17016},{},[17017,17018,17023],{"type":1138,"value":4639},{"type":1133,"tag":1173,"props":17019,"children":17021},{"href":4642,"rel":17020},[1177],[17022],{"type":1138,"value":4646},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17025,"children":17026},{},[17027,17028,17033],{"type":1138,"value":4652},{"type":1133,"tag":1173,"props":17029,"children":17031},{"href":4655,"rel":17030},[1177],[17032],{"type":1138,"value":4659},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17035,"children":17036},{},[17037,17038,17043],{"type":1138,"value":4665},{"type":1133,"tag":1173,"props":17039,"children":17041},{"href":4668,"rel":17040},[1177],[17042],{"type":1138,"value":4672},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17045,"children":17046},{},[17047,17048,17053],{"type":1138,"value":4678},{"type":1133,"tag":1173,"props":17049,"children":17051},{"href":4681,"rel":17050},[1177],[17052],{"type":1138,"value":4685},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17055,"children":17056},{},[17057,17058,17063],{"type":1138,"value":4691},{"type":1133,"tag":1173,"props":17059,"children":17061},{"href":4694,"rel":17060},[1177],[17062],{"type":1138,"value":4698},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17065,"children":17066},{},[17067,17068,17073],{"type":1138,"value":4704},{"type":1133,"tag":1173,"props":17069,"children":17071},{"href":4707,"rel":17070},[1177],[17072],{"type":1138,"value":4711},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17075,"children":17076},{},[17077,17081,17082,17087],{"type":1133,"tag":1146,"props":17078,"children":17079},{},[17080],{"type":1138,"value":4598},{"type":1138,"value":4721},{"type":1133,"tag":1173,"props":17083,"children":17085},{"href":4724,"rel":17084},[1177],[17086],{"type":1138,"value":4728},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17089,"children":17090},{},[17091,17092,17097],{"type":1138,"value":4734},{"type":1133,"tag":1173,"props":17093,"children":17095},{"href":4737,"rel":17094},[1177],[17096],{"type":1138,"value":4741},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17099,"children":17100},{},[17101,17105,17106,17111],{"type":1133,"tag":1146,"props":17102,"children":17103},{},[17104],{"type":1138,"value":4598},{"type":1138,"value":4751},{"type":1133,"tag":1173,"props":17107,"children":17109},{"href":4754,"rel":17108},[1177],[17110],{"type":1138,"value":4758},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17113,"children":17114},{},[17115,17116,17121],{"type":1138,"value":4764},{"type":1133,"tag":1173,"props":17117,"children":17119},{"href":4767,"rel":17118},[1177],[17120],{"type":1138,"value":4771},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17123,"children":17124},{},[17125,17126,17131],{"type":1138,"value":4777},{"type":1133,"tag":1173,"props":17127,"children":17129},{"href":4780,"rel":17128},[1177],[17130],{"type":1138,"value":4784},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17133,"children":17134},{},[17135,17136,17141],{"type":1138,"value":4790},{"type":1133,"tag":1173,"props":17137,"children":17139},{"href":4793,"rel":17138},[1177],[17140],{"type":1138,"value":4797},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17143,"children":17144},{},[17145,17146,17151],{"type":1138,"value":4803},{"type":1133,"tag":1173,"props":17147,"children":17149},{"href":4806,"rel":17148},[1177],[17150],{"type":1138,"value":4810},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17153,"children":17154},{},[17155,17156,17161],{"type":1138,"value":4816},{"type":1133,"tag":1173,"props":17157,"children":17159},{"href":4819,"rel":17158},[1177],[17160],{"type":1138,"value":4823},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17163,"children":17164},{},[17165,17169,17170,17175],{"type":1133,"tag":1146,"props":17166,"children":17167},{},[17168],{"type":1138,"value":1221},{"type":1138,"value":4833},{"type":1133,"tag":1173,"props":17171,"children":17173},{"href":4836,"rel":17172},[1177],[17174],{"type":1138,"value":4840},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17177,"children":17178},{},[17179,17180,17185],{"type":1138,"value":4846},{"type":1133,"tag":1173,"props":17181,"children":17183},{"href":4849,"rel":17182},[1177],[17184],{"type":1138,"value":4853},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17187,"children":17188},{},[17189,17190,17195],{"type":1138,"value":4859},{"type":1133,"tag":1173,"props":17191,"children":17193},{"href":4862,"rel":17192},[1177],[17194],{"type":1138,"value":4866},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17197,"children":17198},{},[17199,17200,17205],{"type":1138,"value":4872},{"type":1133,"tag":1173,"props":17201,"children":17203},{"href":4875,"rel":17202},[1177],[17204],{"type":1138,"value":4879},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17207,"children":17208},{},[17209,17210,17215],{"type":1138,"value":4885},{"type":1133,"tag":1173,"props":17211,"children":17213},{"href":4888,"rel":17212},[1177],[17214],{"type":1138,"value":4892},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17217,"children":17218},{},[17219,17220,17225],{"type":1138,"value":4898},{"type":1133,"tag":1173,"props":17221,"children":17223},{"href":4901,"rel":17222},[1177],[17224],{"type":1138,"value":4905},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17227,"children":17228},{},[17229,17233,17234,17239],{"type":1133,"tag":1146,"props":17230,"children":17231},{},[17232],{"type":1138,"value":1221},{"type":1138,"value":4915},{"type":1133,"tag":1173,"props":17235,"children":17237},{"href":4918,"rel":17236},[1177],[17238],{"type":1138,"value":4922},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17241,"children":17242},{},[17243,17247,17248,17253],{"type":1133,"tag":1146,"props":17244,"children":17245},{},[17246],{"type":1138,"value":4931},{"type":1138,"value":4933},{"type":1133,"tag":1173,"props":17249,"children":17251},{"href":4936,"rel":17250},[1177],[17252],{"type":1138,"value":4940},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":17255,"children":17256},{"id":1233},[17257],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":17259,"children":17260},{},[17261,17271,17281,17291,17301,17311,17321,17331,17341],{"type":1133,"tag":1195,"props":17262,"children":17263},{},[17264,17265,17270],{"type":1138,"value":6240},{"type":1133,"tag":1173,"props":17266,"children":17268},{"href":6243,"rel":17267},[1177],[17269],{"type":1138,"value":6247},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17272,"children":17273},{},[17274,17275,17280],{"type":1138,"value":6253},{"type":1133,"tag":1173,"props":17276,"children":17278},{"href":6256,"rel":17277},[1177],[17279],{"type":1138,"value":6260},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17282,"children":17283},{},[17284,17285,17290],{"type":1138,"value":6266},{"type":1133,"tag":1173,"props":17286,"children":17288},{"href":6269,"rel":17287},[1177],[17289],{"type":1138,"value":6273},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17292,"children":17293},{},[17294,17295,17300],{"type":1138,"value":6279},{"type":1133,"tag":1173,"props":17296,"children":17298},{"href":6282,"rel":17297},[1177],[17299],{"type":1138,"value":6286},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17302,"children":17303},{},[17304,17305,17310],{"type":1138,"value":6292},{"type":1133,"tag":1173,"props":17306,"children":17308},{"href":6295,"rel":17307},[1177],[17309],{"type":1138,"value":6299},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17312,"children":17313},{},[17314,17315,17320],{"type":1138,"value":6305},{"type":1133,"tag":1173,"props":17316,"children":17318},{"href":6308,"rel":17317},[1177],[17319],{"type":1138,"value":6312},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17322,"children":17323},{},[17324,17325,17330],{"type":1138,"value":6318},{"type":1133,"tag":1173,"props":17326,"children":17328},{"href":6321,"rel":17327},[1177],[17329],{"type":1138,"value":6325},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17332,"children":17333},{},[17334,17335,17340],{"type":1138,"value":6331},{"type":1133,"tag":1173,"props":17336,"children":17338},{"href":6334,"rel":17337},[1177],[17339],{"type":1138,"value":6338},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17342,"children":17343},{},[17344,17345,17350],{"type":1138,"value":6344},{"type":1133,"tag":1173,"props":17346,"children":17348},{"href":6347,"rel":17347},[1177],[17349],{"type":1138,"value":6351},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":17352,"children":17353},{"id":7},[17354],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":17356,"children":17357},{},[17358,17368,17378,17388,17398,17408,17418,17428,17438,17448],{"type":1133,"tag":1195,"props":17359,"children":17360},{},[17361,17362,17367],{"type":1138,"value":6459},{"type":1133,"tag":1173,"props":17363,"children":17365},{"href":6462,"rel":17364},[1177],[17366],{"type":1138,"value":6466},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17369,"children":17370},{},[17371,17372,17377],{"type":1138,"value":6485},{"type":1133,"tag":1173,"props":17373,"children":17375},{"href":6488,"rel":17374},[1177],[17376],{"type":1138,"value":6492},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17379,"children":17380},{},[17381,17382,17387],{"type":1138,"value":6498},{"type":1133,"tag":1173,"props":17383,"children":17385},{"href":6501,"rel":17384},[1177],[17386],{"type":1138,"value":6505},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17389,"children":17390},{},[17391,17392,17397],{"type":1138,"value":6524},{"type":1133,"tag":1173,"props":17393,"children":17395},{"href":6527,"rel":17394},[1177],[17396],{"type":1138,"value":6531},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17399,"children":17400},{},[17401,17402,17407],{"type":1138,"value":6537},{"type":1133,"tag":1173,"props":17403,"children":17405},{"href":6540,"rel":17404},[1177],[17406],{"type":1138,"value":6544},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17409,"children":17410},{},[17411,17412,17417],{"type":1138,"value":6550},{"type":1133,"tag":1173,"props":17413,"children":17415},{"href":6553,"rel":17414},[1177],[17416],{"type":1138,"value":6557},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17419,"children":17420},{},[17421,17422,17427],{"type":1138,"value":6563},{"type":1133,"tag":1173,"props":17423,"children":17425},{"href":6566,"rel":17424},[1177],[17426],{"type":1138,"value":6570},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17429,"children":17430},{},[17431,17432,17437],{"type":1138,"value":6576},{"type":1133,"tag":1173,"props":17433,"children":17435},{"href":6579,"rel":17434},[1177],[17436],{"type":1138,"value":6583},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17439,"children":17440},{},[17441,17442,17447],{"type":1138,"value":6589},{"type":1133,"tag":1173,"props":17443,"children":17445},{"href":6592,"rel":17444},[1177],[17446],{"type":1138,"value":6596},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17449,"children":17450},{},[17451,17452,17457],{"type":1138,"value":6602},{"type":1133,"tag":1173,"props":17453,"children":17455},{"href":6605,"rel":17454},[1177],[17456],{"type":1138,"value":6609},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":17459,"children":17460},{"id":1664},[17461],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":17463,"children":17464},{},[17465,17475,17485,17495,17509,17519],{"type":1133,"tag":1195,"props":17466,"children":17467},{},[17468,17469,17474],{"type":1138,"value":6874},{"type":1133,"tag":1173,"props":17470,"children":17472},{"href":6877,"rel":17471},[1177],[17473],{"type":1138,"value":6881},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17476,"children":17477},{},[17478,17479,17484],{"type":1138,"value":6900},{"type":1133,"tag":1173,"props":17480,"children":17482},{"href":6903,"rel":17481},[1177],[17483],{"type":1138,"value":6907},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17486,"children":17487},{},[17488,17489,17494],{"type":1138,"value":6913},{"type":1133,"tag":1173,"props":17490,"children":17492},{"href":6916,"rel":17491},[1177],[17493],{"type":1138,"value":6920},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17496,"children":17497},{},[17498,17502,17503,17508],{"type":1133,"tag":1146,"props":17499,"children":17500},{},[17501],{"type":1138,"value":4598},{"type":1138,"value":6930},{"type":1133,"tag":1173,"props":17504,"children":17506},{"href":6933,"rel":17505},[1177],[17507],{"type":1138,"value":6937},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17510,"children":17511},{},[17512,17513,17518],{"type":1138,"value":6943},{"type":1133,"tag":1173,"props":17514,"children":17516},{"href":6946,"rel":17515},[1177],[17517],{"type":1138,"value":6950},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17520,"children":17521},{},[17522,17523,17528],{"type":1138,"value":6956},{"type":1133,"tag":1173,"props":17524,"children":17526},{"href":6959,"rel":17525},[1177],[17527],{"type":1138,"value":6963},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":17530,"children":17531},{"id":2327},[17532],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":17534,"children":17535},{},[17536,17546,17556,17566,17576],{"type":1133,"tag":1195,"props":17537,"children":17538},{},[17539,17540,17545],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":17541,"children":17543},{"href":7201,"rel":17542},[1177],[17544],{"type":1138,"value":7205},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17547,"children":17548},{},[17549,17550,17555],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":17551,"children":17553},{"href":7213,"rel":17552},[1177],[17554],{"type":1138,"value":7217},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17557,"children":17558},{},[17559,17560,17565],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":17561,"children":17563},{"href":7225,"rel":17562},[1177],[17564],{"type":1138,"value":7229},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17567,"children":17568},{},[17569,17570,17575],{"type":1138,"value":7198},{"type":1133,"tag":1173,"props":17571,"children":17573},{"href":7237,"rel":17572},[1177],[17574],{"type":1138,"value":7241},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17577,"children":17578},{},[17579,17580,17585],{"type":1138,"value":7247},{"type":1133,"tag":1173,"props":17581,"children":17583},{"href":7250,"rel":17582},[1177],[17584],{"type":1138,"value":7254},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":17587,"children":17588},{},[17589,17593,17594],{"type":1133,"tag":1146,"props":17590,"children":17591},{},[17592],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":17595,"children":17598},{"href":17596,"rel":17597},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.3.0-beta.1.native.1...native-1.3.0-beta.3.native.1",[1177],[17599],{"type":1138,"value":17596},{"data":17601,"body":17602},{},{"type":1130,"children":17603},[17604,17628,17640,17644,18447,18451,18518,18522,18685,18689,18776,18780,18833],{"type":1133,"tag":1134,"props":17605,"children":17606},{},[17607,17612,17614,17618,17620,17626],{"type":1133,"tag":1146,"props":17608,"children":17609},{},[17610],{"type":1138,"value":17611},"The native build of 1.3.0-beta.1.",{"type":1138,"value":17613}," It's the same code as 1.3.0-beta.1, published so panels on the ",{"type":1133,"tag":1146,"props":17615,"children":17616},{},[17617],{"type":1138,"value":2921},{"type":1138,"value":17619}," 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 ",{"type":1133,"tag":1789,"props":17621,"children":17623},{"className":17622},[],[17624],{"type":1138,"value":17625},"main",{"type":1138,"value":17627},", 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.",{"type":1133,"tag":1134,"props":17629,"children":17630},{},[17631,17632,17638],{"type":1138,"value":2928},{"type":1133,"tag":1173,"props":17633,"children":17636},{"href":17634,"rel":17635},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.3.0-beta.1.native.1\u002Fdocs\u002Ftesting\u002Ftesting-rust-agent.md",[1177],[17637],{"type":1138,"value":1845},{"type":1138,"value":17639}," on a spare VPS, and check that switching back to the Bun agent still works.",{"type":1133,"tag":1184,"props":17641,"children":17642},{"id":1186},[17643],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":17645,"children":17646},{},[17647,17657,17667,17677,17687,17697,17707,17721,17731,17741,17751,17761,17771,17781,17791,17801,17811,17821,17831,17841,17851,17861,17871,17881,17891,17901,17911,17921,17931,17941,17951,17961,17971,17981,17991,18001,18011,18021,18031,18041,18051,18061,18071,18081,18091,18101,18111,18121,18131,18141,18151,18161,18171,18181,18191,18201,18211,18221,18235,18249,18263,18277,18287,18297,18307,18317,18327,18337,18347,18357,18367,18377,18387,18397,18407,18417,18427,18437],{"type":1133,"tag":1195,"props":17648,"children":17649},{},[17650,17651,17656],{"type":1138,"value":4946},{"type":1133,"tag":1173,"props":17652,"children":17654},{"href":4949,"rel":17653},[1177],[17655],{"type":1138,"value":4953},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17658,"children":17659},{},[17660,17661,17666],{"type":1138,"value":4959},{"type":1133,"tag":1173,"props":17662,"children":17664},{"href":4962,"rel":17663},[1177],[17665],{"type":1138,"value":4966},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17668,"children":17669},{},[17670,17671,17676],{"type":1138,"value":4972},{"type":1133,"tag":1173,"props":17672,"children":17674},{"href":4975,"rel":17673},[1177],[17675],{"type":1138,"value":4979},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17678,"children":17679},{},[17680,17681,17686],{"type":1138,"value":4985},{"type":1133,"tag":1173,"props":17682,"children":17684},{"href":4988,"rel":17683},[1177],[17685],{"type":1138,"value":4992},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17688,"children":17689},{},[17690,17691,17696],{"type":1138,"value":4998},{"type":1133,"tag":1173,"props":17692,"children":17694},{"href":5001,"rel":17693},[1177],[17695],{"type":1138,"value":5005},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17698,"children":17699},{},[17700,17701,17706],{"type":1138,"value":5011},{"type":1133,"tag":1173,"props":17702,"children":17704},{"href":5014,"rel":17703},[1177],[17705],{"type":1138,"value":5018},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17708,"children":17709},{},[17710,17711],{"type":1138,"value":5024},{"type":1133,"tag":5026,"props":17712,"children":17713},{},[17714,17715,17720],{"type":1138,"value":5030},{"type":1133,"tag":1173,"props":17716,"children":17718},{"href":5033,"rel":17717},[1177],[17719],{"type":1138,"value":5037},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17722,"children":17723},{},[17724,17725,17730],{"type":1138,"value":5043},{"type":1133,"tag":1173,"props":17726,"children":17728},{"href":5046,"rel":17727},[1177],[17729],{"type":1138,"value":5050},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17732,"children":17733},{},[17734,17735,17740],{"type":1138,"value":5056},{"type":1133,"tag":1173,"props":17736,"children":17738},{"href":5059,"rel":17737},[1177],[17739],{"type":1138,"value":5063},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17742,"children":17743},{},[17744,17745,17750],{"type":1138,"value":5069},{"type":1133,"tag":1173,"props":17746,"children":17748},{"href":5072,"rel":17747},[1177],[17749],{"type":1138,"value":5076},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17752,"children":17753},{},[17754,17755,17760],{"type":1138,"value":5082},{"type":1133,"tag":1173,"props":17756,"children":17758},{"href":5085,"rel":17757},[1177],[17759],{"type":1138,"value":5089},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17762,"children":17763},{},[17764,17765,17770],{"type":1138,"value":5095},{"type":1133,"tag":1173,"props":17766,"children":17768},{"href":5098,"rel":17767},[1177],[17769],{"type":1138,"value":5102},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17772,"children":17773},{},[17774,17775,17780],{"type":1138,"value":5108},{"type":1133,"tag":1173,"props":17776,"children":17778},{"href":5111,"rel":17777},[1177],[17779],{"type":1138,"value":5115},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17782,"children":17783},{},[17784,17785,17790],{"type":1138,"value":5121},{"type":1133,"tag":1173,"props":17786,"children":17788},{"href":5124,"rel":17787},[1177],[17789],{"type":1138,"value":5128},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17792,"children":17793},{},[17794,17795,17800],{"type":1138,"value":5134},{"type":1133,"tag":1173,"props":17796,"children":17798},{"href":5137,"rel":17797},[1177],[17799],{"type":1138,"value":5141},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17802,"children":17803},{},[17804,17805,17810],{"type":1138,"value":5147},{"type":1133,"tag":1173,"props":17806,"children":17808},{"href":5150,"rel":17807},[1177],[17809],{"type":1138,"value":5154},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17812,"children":17813},{},[17814,17815,17820],{"type":1138,"value":5160},{"type":1133,"tag":1173,"props":17816,"children":17818},{"href":5163,"rel":17817},[1177],[17819],{"type":1138,"value":5167},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17822,"children":17823},{},[17824,17825,17830],{"type":1138,"value":5173},{"type":1133,"tag":1173,"props":17826,"children":17828},{"href":5176,"rel":17827},[1177],[17829],{"type":1138,"value":5180},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17832,"children":17833},{},[17834,17835,17840],{"type":1138,"value":5186},{"type":1133,"tag":1173,"props":17836,"children":17838},{"href":5189,"rel":17837},[1177],[17839],{"type":1138,"value":5193},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17842,"children":17843},{},[17844,17845,17850],{"type":1138,"value":5199},{"type":1133,"tag":1173,"props":17846,"children":17848},{"href":5202,"rel":17847},[1177],[17849],{"type":1138,"value":5206},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17852,"children":17853},{},[17854,17855,17860],{"type":1138,"value":5212},{"type":1133,"tag":1173,"props":17856,"children":17858},{"href":5215,"rel":17857},[1177],[17859],{"type":1138,"value":5219},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17862,"children":17863},{},[17864,17865,17870],{"type":1138,"value":5225},{"type":1133,"tag":1173,"props":17866,"children":17868},{"href":5228,"rel":17867},[1177],[17869],{"type":1138,"value":5232},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17872,"children":17873},{},[17874,17875,17880],{"type":1138,"value":5238},{"type":1133,"tag":1173,"props":17876,"children":17878},{"href":5241,"rel":17877},[1177],[17879],{"type":1138,"value":5245},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17882,"children":17883},{},[17884,17885,17890],{"type":1138,"value":5251},{"type":1133,"tag":1173,"props":17886,"children":17888},{"href":5254,"rel":17887},[1177],[17889],{"type":1138,"value":5258},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17892,"children":17893},{},[17894,17895,17900],{"type":1138,"value":5264},{"type":1133,"tag":1173,"props":17896,"children":17898},{"href":5267,"rel":17897},[1177],[17899],{"type":1138,"value":5271},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17902,"children":17903},{},[17904,17905,17910],{"type":1138,"value":5277},{"type":1133,"tag":1173,"props":17906,"children":17908},{"href":5280,"rel":17907},[1177],[17909],{"type":1138,"value":5284},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17912,"children":17913},{},[17914,17915,17920],{"type":1138,"value":5290},{"type":1133,"tag":1173,"props":17916,"children":17918},{"href":5293,"rel":17917},[1177],[17919],{"type":1138,"value":5297},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17922,"children":17923},{},[17924,17925,17930],{"type":1138,"value":5303},{"type":1133,"tag":1173,"props":17926,"children":17928},{"href":5306,"rel":17927},[1177],[17929],{"type":1138,"value":5310},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17932,"children":17933},{},[17934,17935,17940],{"type":1138,"value":5316},{"type":1133,"tag":1173,"props":17936,"children":17938},{"href":5319,"rel":17937},[1177],[17939],{"type":1138,"value":5323},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17942,"children":17943},{},[17944,17945,17950],{"type":1138,"value":5329},{"type":1133,"tag":1173,"props":17946,"children":17948},{"href":5332,"rel":17947},[1177],[17949],{"type":1138,"value":5336},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17952,"children":17953},{},[17954,17955,17960],{"type":1138,"value":5342},{"type":1133,"tag":1173,"props":17956,"children":17958},{"href":5345,"rel":17957},[1177],[17959],{"type":1138,"value":5349},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17962,"children":17963},{},[17964,17965,17970],{"type":1138,"value":5355},{"type":1133,"tag":1173,"props":17966,"children":17968},{"href":5358,"rel":17967},[1177],[17969],{"type":1138,"value":5362},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17972,"children":17973},{},[17974,17975,17980],{"type":1138,"value":5368},{"type":1133,"tag":1173,"props":17976,"children":17978},{"href":5371,"rel":17977},[1177],[17979],{"type":1138,"value":5375},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17982,"children":17983},{},[17984,17985,17990],{"type":1138,"value":5381},{"type":1133,"tag":1173,"props":17986,"children":17988},{"href":5384,"rel":17987},[1177],[17989],{"type":1138,"value":5388},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":17992,"children":17993},{},[17994,17995,18000],{"type":1138,"value":5394},{"type":1133,"tag":1173,"props":17996,"children":17998},{"href":5397,"rel":17997},[1177],[17999],{"type":1138,"value":5401},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18002,"children":18003},{},[18004,18005,18010],{"type":1138,"value":5407},{"type":1133,"tag":1173,"props":18006,"children":18008},{"href":5410,"rel":18007},[1177],[18009],{"type":1138,"value":5414},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18012,"children":18013},{},[18014,18015,18020],{"type":1138,"value":5420},{"type":1133,"tag":1173,"props":18016,"children":18018},{"href":5423,"rel":18017},[1177],[18019],{"type":1138,"value":5427},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18022,"children":18023},{},[18024,18025,18030],{"type":1138,"value":5433},{"type":1133,"tag":1173,"props":18026,"children":18028},{"href":5436,"rel":18027},[1177],[18029],{"type":1138,"value":5440},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18032,"children":18033},{},[18034,18035,18040],{"type":1138,"value":5446},{"type":1133,"tag":1173,"props":18036,"children":18038},{"href":5449,"rel":18037},[1177],[18039],{"type":1138,"value":5453},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18042,"children":18043},{},[18044,18045,18050],{"type":1138,"value":5459},{"type":1133,"tag":1173,"props":18046,"children":18048},{"href":5462,"rel":18047},[1177],[18049],{"type":1138,"value":5466},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18052,"children":18053},{},[18054,18055,18060],{"type":1138,"value":5472},{"type":1133,"tag":1173,"props":18056,"children":18058},{"href":5475,"rel":18057},[1177],[18059],{"type":1138,"value":5479},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18062,"children":18063},{},[18064,18065,18070],{"type":1138,"value":5485},{"type":1133,"tag":1173,"props":18066,"children":18068},{"href":5488,"rel":18067},[1177],[18069],{"type":1138,"value":5492},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18072,"children":18073},{},[18074,18075,18080],{"type":1138,"value":5498},{"type":1133,"tag":1173,"props":18076,"children":18078},{"href":5501,"rel":18077},[1177],[18079],{"type":1138,"value":5505},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18082,"children":18083},{},[18084,18085,18090],{"type":1138,"value":5511},{"type":1133,"tag":1173,"props":18086,"children":18088},{"href":5514,"rel":18087},[1177],[18089],{"type":1138,"value":5518},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18092,"children":18093},{},[18094,18095,18100],{"type":1138,"value":5524},{"type":1133,"tag":1173,"props":18096,"children":18098},{"href":5527,"rel":18097},[1177],[18099],{"type":1138,"value":5531},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18102,"children":18103},{},[18104,18105,18110],{"type":1138,"value":5537},{"type":1133,"tag":1173,"props":18106,"children":18108},{"href":5540,"rel":18107},[1177],[18109],{"type":1138,"value":5544},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18112,"children":18113},{},[18114,18115,18120],{"type":1138,"value":5550},{"type":1133,"tag":1173,"props":18116,"children":18118},{"href":5553,"rel":18117},[1177],[18119],{"type":1138,"value":5557},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18122,"children":18123},{},[18124,18125,18130],{"type":1138,"value":5563},{"type":1133,"tag":1173,"props":18126,"children":18128},{"href":5566,"rel":18127},[1177],[18129],{"type":1138,"value":5570},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18132,"children":18133},{},[18134,18135,18140],{"type":1138,"value":5576},{"type":1133,"tag":1173,"props":18136,"children":18138},{"href":5579,"rel":18137},[1177],[18139],{"type":1138,"value":5583},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18142,"children":18143},{},[18144,18145,18150],{"type":1138,"value":5589},{"type":1133,"tag":1173,"props":18146,"children":18148},{"href":5592,"rel":18147},[1177],[18149],{"type":1138,"value":5596},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18152,"children":18153},{},[18154,18155,18160],{"type":1138,"value":5602},{"type":1133,"tag":1173,"props":18156,"children":18158},{"href":5605,"rel":18157},[1177],[18159],{"type":1138,"value":5609},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18162,"children":18163},{},[18164,18165,18170],{"type":1138,"value":5615},{"type":1133,"tag":1173,"props":18166,"children":18168},{"href":5618,"rel":18167},[1177],[18169],{"type":1138,"value":5622},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18172,"children":18173},{},[18174,18175,18180],{"type":1138,"value":5628},{"type":1133,"tag":1173,"props":18176,"children":18178},{"href":5631,"rel":18177},[1177],[18179],{"type":1138,"value":5635},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18182,"children":18183},{},[18184,18185,18190],{"type":1138,"value":5641},{"type":1133,"tag":1173,"props":18186,"children":18188},{"href":5644,"rel":18187},[1177],[18189],{"type":1138,"value":5648},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18192,"children":18193},{},[18194,18195,18200],{"type":1138,"value":5654},{"type":1133,"tag":1173,"props":18196,"children":18198},{"href":5657,"rel":18197},[1177],[18199],{"type":1138,"value":5661},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18202,"children":18203},{},[18204,18205,18210],{"type":1138,"value":5667},{"type":1133,"tag":1173,"props":18206,"children":18208},{"href":5670,"rel":18207},[1177],[18209],{"type":1138,"value":5674},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18212,"children":18213},{},[18214,18215,18220],{"type":1138,"value":5680},{"type":1133,"tag":1173,"props":18216,"children":18218},{"href":5683,"rel":18217},[1177],[18219],{"type":1138,"value":5687},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18222,"children":18223},{},[18224,18228,18229,18234],{"type":1133,"tag":1146,"props":18225,"children":18226},{},[18227],{"type":1138,"value":4598},{"type":1138,"value":5697},{"type":1133,"tag":1173,"props":18230,"children":18232},{"href":5700,"rel":18231},[1177],[18233],{"type":1138,"value":5704},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18236,"children":18237},{},[18238,18242,18243,18248],{"type":1133,"tag":1146,"props":18239,"children":18240},{},[18241],{"type":1138,"value":4598},{"type":1138,"value":5714},{"type":1133,"tag":1173,"props":18244,"children":18246},{"href":5717,"rel":18245},[1177],[18247],{"type":1138,"value":5721},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18250,"children":18251},{},[18252,18256,18257,18262],{"type":1133,"tag":1146,"props":18253,"children":18254},{},[18255],{"type":1138,"value":4598},{"type":1138,"value":5731},{"type":1133,"tag":1173,"props":18258,"children":18260},{"href":5734,"rel":18259},[1177],[18261],{"type":1138,"value":5738},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18264,"children":18265},{},[18266,18270,18271,18276],{"type":1133,"tag":1146,"props":18267,"children":18268},{},[18269],{"type":1138,"value":5747},{"type":1138,"value":5749},{"type":1133,"tag":1173,"props":18272,"children":18274},{"href":5752,"rel":18273},[1177],[18275],{"type":1138,"value":5756},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18278,"children":18279},{},[18280,18281,18286],{"type":1138,"value":5762},{"type":1133,"tag":1173,"props":18282,"children":18284},{"href":5765,"rel":18283},[1177],[18285],{"type":1138,"value":5769},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18288,"children":18289},{},[18290,18291,18296],{"type":1138,"value":5775},{"type":1133,"tag":1173,"props":18292,"children":18294},{"href":5778,"rel":18293},[1177],[18295],{"type":1138,"value":5782},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18298,"children":18299},{},[18300,18301,18306],{"type":1138,"value":5788},{"type":1133,"tag":1173,"props":18302,"children":18304},{"href":5791,"rel":18303},[1177],[18305],{"type":1138,"value":5795},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18308,"children":18309},{},[18310,18311,18316],{"type":1138,"value":5801},{"type":1133,"tag":1173,"props":18312,"children":18314},{"href":5804,"rel":18313},[1177],[18315],{"type":1138,"value":5808},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18318,"children":18319},{},[18320,18321,18326],{"type":1138,"value":5814},{"type":1133,"tag":1173,"props":18322,"children":18324},{"href":5817,"rel":18323},[1177],[18325],{"type":1138,"value":5821},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18328,"children":18329},{},[18330,18331,18336],{"type":1138,"value":5827},{"type":1133,"tag":1173,"props":18332,"children":18334},{"href":5830,"rel":18333},[1177],[18335],{"type":1138,"value":5834},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18338,"children":18339},{},[18340,18341,18346],{"type":1138,"value":5840},{"type":1133,"tag":1173,"props":18342,"children":18344},{"href":5843,"rel":18343},[1177],[18345],{"type":1138,"value":5847},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18348,"children":18349},{},[18350,18351,18356],{"type":1138,"value":5853},{"type":1133,"tag":1173,"props":18352,"children":18354},{"href":5856,"rel":18353},[1177],[18355],{"type":1138,"value":5860},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18358,"children":18359},{},[18360,18361,18366],{"type":1138,"value":5866},{"type":1133,"tag":1173,"props":18362,"children":18364},{"href":5869,"rel":18363},[1177],[18365],{"type":1138,"value":5873},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18368,"children":18369},{},[18370,18371,18376],{"type":1138,"value":5879},{"type":1133,"tag":1173,"props":18372,"children":18374},{"href":5882,"rel":18373},[1177],[18375],{"type":1138,"value":5886},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18378,"children":18379},{},[18380,18381,18386],{"type":1138,"value":5892},{"type":1133,"tag":1173,"props":18382,"children":18384},{"href":5895,"rel":18383},[1177],[18385],{"type":1138,"value":5899},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18388,"children":18389},{},[18390,18391,18396],{"type":1138,"value":5905},{"type":1133,"tag":1173,"props":18392,"children":18394},{"href":5908,"rel":18393},[1177],[18395],{"type":1138,"value":5912},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18398,"children":18399},{},[18400,18401,18406],{"type":1138,"value":5918},{"type":1133,"tag":1173,"props":18402,"children":18404},{"href":5921,"rel":18403},[1177],[18405],{"type":1138,"value":5925},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18408,"children":18409},{},[18410,18411,18416],{"type":1138,"value":5931},{"type":1133,"tag":1173,"props":18412,"children":18414},{"href":5934,"rel":18413},[1177],[18415],{"type":1138,"value":5938},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18418,"children":18419},{},[18420,18421,18426],{"type":1138,"value":5944},{"type":1133,"tag":1173,"props":18422,"children":18424},{"href":5947,"rel":18423},[1177],[18425],{"type":1138,"value":5951},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18428,"children":18429},{},[18430,18431,18436],{"type":1138,"value":5957},{"type":1133,"tag":1173,"props":18432,"children":18434},{"href":5960,"rel":18433},[1177],[18435],{"type":1138,"value":5964},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18438,"children":18439},{},[18440,18441,18446],{"type":1138,"value":5970},{"type":1133,"tag":1173,"props":18442,"children":18444},{"href":5973,"rel":18443},[1177],[18445],{"type":1138,"value":5977},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":18448,"children":18449},{"id":1233},[18450],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":18452,"children":18453},{},[18454,18464,18474,18484,18494,18504],{"type":1133,"tag":1195,"props":18455,"children":18456},{},[18457,18458,18463],{"type":1138,"value":6357},{"type":1133,"tag":1173,"props":18459,"children":18461},{"href":6360,"rel":18460},[1177],[18462],{"type":1138,"value":6364},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18465,"children":18466},{},[18467,18468,18473],{"type":1138,"value":6370},{"type":1133,"tag":1173,"props":18469,"children":18471},{"href":6373,"rel":18470},[1177],[18472],{"type":1138,"value":6377},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18475,"children":18476},{},[18477,18478,18483],{"type":1138,"value":6383},{"type":1133,"tag":1173,"props":18479,"children":18481},{"href":6386,"rel":18480},[1177],[18482],{"type":1138,"value":6390},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18485,"children":18486},{},[18487,18488,18493],{"type":1138,"value":6396},{"type":1133,"tag":1173,"props":18489,"children":18491},{"href":6399,"rel":18490},[1177],[18492],{"type":1138,"value":6403},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18495,"children":18496},{},[18497,18498,18503],{"type":1138,"value":6409},{"type":1133,"tag":1173,"props":18499,"children":18501},{"href":6412,"rel":18500},[1177],[18502],{"type":1138,"value":6416},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18505,"children":18506},{},[18507,18511,18512,18517],{"type":1133,"tag":1146,"props":18508,"children":18509},{},[18510],{"type":1138,"value":4598},{"type":1138,"value":6426},{"type":1133,"tag":1173,"props":18513,"children":18515},{"href":6429,"rel":18514},[1177],[18516],{"type":1138,"value":6433},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":18519,"children":18520},{"id":7},[18521],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":18523,"children":18524},{},[18525,18535,18545,18555,18565,18575,18585,18595,18605,18615,18625,18635,18645,18655,18665,18675],{"type":1133,"tag":1195,"props":18526,"children":18527},{},[18528,18529,18534],{"type":1138,"value":6615},{"type":1133,"tag":1173,"props":18530,"children":18532},{"href":6618,"rel":18531},[1177],[18533],{"type":1138,"value":6622},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18536,"children":18537},{},[18538,18539,18544],{"type":1138,"value":6628},{"type":1133,"tag":1173,"props":18540,"children":18542},{"href":6631,"rel":18541},[1177],[18543],{"type":1138,"value":6635},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18546,"children":18547},{},[18548,18549,18554],{"type":1138,"value":6641},{"type":1133,"tag":1173,"props":18550,"children":18552},{"href":6644,"rel":18551},[1177],[18553],{"type":1138,"value":6648},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18556,"children":18557},{},[18558,18559,18564],{"type":1138,"value":6654},{"type":1133,"tag":1173,"props":18560,"children":18562},{"href":6657,"rel":18561},[1177],[18563],{"type":1138,"value":6661},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18566,"children":18567},{},[18568,18569,18574],{"type":1138,"value":6667},{"type":1133,"tag":1173,"props":18570,"children":18572},{"href":6670,"rel":18571},[1177],[18573],{"type":1138,"value":6674},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18576,"children":18577},{},[18578,18579,18584],{"type":1138,"value":6680},{"type":1133,"tag":1173,"props":18580,"children":18582},{"href":6683,"rel":18581},[1177],[18583],{"type":1138,"value":6687},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18586,"children":18587},{},[18588,18589,18594],{"type":1138,"value":6693},{"type":1133,"tag":1173,"props":18590,"children":18592},{"href":6696,"rel":18591},[1177],[18593],{"type":1138,"value":6700},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18596,"children":18597},{},[18598,18599,18604],{"type":1138,"value":6706},{"type":1133,"tag":1173,"props":18600,"children":18602},{"href":6709,"rel":18601},[1177],[18603],{"type":1138,"value":6713},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18606,"children":18607},{},[18608,18609,18614],{"type":1138,"value":6719},{"type":1133,"tag":1173,"props":18610,"children":18612},{"href":6722,"rel":18611},[1177],[18613],{"type":1138,"value":6726},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18616,"children":18617},{},[18618,18619,18624],{"type":1138,"value":6732},{"type":1133,"tag":1173,"props":18620,"children":18622},{"href":6735,"rel":18621},[1177],[18623],{"type":1138,"value":6739},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18626,"children":18627},{},[18628,18629,18634],{"type":1138,"value":6745},{"type":1133,"tag":1173,"props":18630,"children":18632},{"href":6748,"rel":18631},[1177],[18633],{"type":1138,"value":6752},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18636,"children":18637},{},[18638,18639,18644],{"type":1138,"value":6758},{"type":1133,"tag":1173,"props":18640,"children":18642},{"href":6761,"rel":18641},[1177],[18643],{"type":1138,"value":6765},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18646,"children":18647},{},[18648,18649,18654],{"type":1138,"value":6771},{"type":1133,"tag":1173,"props":18650,"children":18652},{"href":6774,"rel":18651},[1177],[18653],{"type":1138,"value":6778},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18656,"children":18657},{},[18658,18659,18664],{"type":1138,"value":6784},{"type":1133,"tag":1173,"props":18660,"children":18662},{"href":6787,"rel":18661},[1177],[18663],{"type":1138,"value":6791},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18666,"children":18667},{},[18668,18669,18674],{"type":1138,"value":6797},{"type":1133,"tag":1173,"props":18670,"children":18672},{"href":6800,"rel":18671},[1177],[18673],{"type":1138,"value":6804},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18676,"children":18677},{},[18678,18679,18684],{"type":1138,"value":6810},{"type":1133,"tag":1173,"props":18680,"children":18682},{"href":6813,"rel":18681},[1177],[18683],{"type":1138,"value":6817},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":18686,"children":18687},{"id":1664},[18688],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":18690,"children":18691},{},[18692,18702,18712,18722,18732,18742,18752,18762],{"type":1133,"tag":1195,"props":18693,"children":18694},{},[18695,18696,18701],{"type":1138,"value":6969},{"type":1133,"tag":1173,"props":18697,"children":18699},{"href":6972,"rel":18698},[1177],[18700],{"type":1138,"value":6976},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18703,"children":18704},{},[18705,18706,18711],{"type":1138,"value":6982},{"type":1133,"tag":1173,"props":18707,"children":18709},{"href":6985,"rel":18708},[1177],[18710],{"type":1138,"value":6989},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18713,"children":18714},{},[18715,18716,18721],{"type":1138,"value":6995},{"type":1133,"tag":1173,"props":18717,"children":18719},{"href":6998,"rel":18718},[1177],[18720],{"type":1138,"value":7002},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18723,"children":18724},{},[18725,18726,18731],{"type":1138,"value":7008},{"type":1133,"tag":1173,"props":18727,"children":18729},{"href":7011,"rel":18728},[1177],[18730],{"type":1138,"value":7015},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18733,"children":18734},{},[18735,18736,18741],{"type":1138,"value":7021},{"type":1133,"tag":1173,"props":18737,"children":18739},{"href":7024,"rel":18738},[1177],[18740],{"type":1138,"value":7028},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18743,"children":18744},{},[18745,18746,18751],{"type":1138,"value":7034},{"type":1133,"tag":1173,"props":18747,"children":18749},{"href":7037,"rel":18748},[1177],[18750],{"type":1138,"value":7041},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18753,"children":18754},{},[18755,18756,18761],{"type":1138,"value":7047},{"type":1133,"tag":1173,"props":18757,"children":18759},{"href":7050,"rel":18758},[1177],[18760],{"type":1138,"value":7054},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18763,"children":18764},{},[18765,18769,18770,18775],{"type":1133,"tag":1146,"props":18766,"children":18767},{},[18768],{"type":1138,"value":4598},{"type":1138,"value":7064},{"type":1133,"tag":1173,"props":18771,"children":18773},{"href":7067,"rel":18772},[1177],[18774],{"type":1138,"value":7071},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":18777,"children":18778},{"id":2327},[18779],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":18781,"children":18782},{},[18783,18793,18803,18813,18823],{"type":1133,"tag":1195,"props":18784,"children":18785},{},[18786,18787,18792],{"type":1138,"value":7260},{"type":1133,"tag":1173,"props":18788,"children":18790},{"href":7263,"rel":18789},[1177],[18791],{"type":1138,"value":7267},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18794,"children":18795},{},[18796,18797,18802],{"type":1138,"value":7273},{"type":1133,"tag":1173,"props":18798,"children":18800},{"href":7276,"rel":18799},[1177],[18801],{"type":1138,"value":7280},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18804,"children":18805},{},[18806,18807,18812],{"type":1138,"value":7286},{"type":1133,"tag":1173,"props":18808,"children":18810},{"href":7289,"rel":18809},[1177],[18811],{"type":1138,"value":7293},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18814,"children":18815},{},[18816,18817,18822],{"type":1138,"value":7299},{"type":1133,"tag":1173,"props":18818,"children":18820},{"href":7302,"rel":18819},[1177],[18821],{"type":1138,"value":7306},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18824,"children":18825},{},[18826,18827,18832],{"type":1138,"value":7312},{"type":1133,"tag":1173,"props":18828,"children":18830},{"href":7315,"rel":18829},[1177],[18831],{"type":1138,"value":7319},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":18834,"children":18835},{},[18836,18840,18841],{"type":1133,"tag":1146,"props":18837,"children":18838},{},[18839],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":18842,"children":18845},{"href":18843,"rel":18844},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.2.1-native.1...native-1.3.0-beta.1.native.1",[1177],[18846],{"type":1138,"value":18843},{"data":18848,"body":18849},{},{"type":1130,"children":18850},[18851,18888,18918,18935,18939,18956,18960,18993,18997,19010],{"type":1133,"tag":1134,"props":18852,"children":18853},{},[18854,18859,18861,18865,18867,18872,18874,18880,18881,18887],{"type":1133,"tag":1146,"props":18855,"children":18856},{},[18857],{"type":1138,"value":18858},"Native build of 1.2.1.",{"type":1138,"value":18860}," 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 ",{"type":1133,"tag":1146,"props":18862,"children":18863},{},[18864],{"type":1138,"value":2921},{"type":1138,"value":18866}," channel under ",{"type":1133,"tag":1146,"props":18868,"children":18869},{},[18870],{"type":1138,"value":18871},"System, Updates",{"type":1138,"value":18873}," (or with ",{"type":1133,"tag":1789,"props":18875,"children":18877},{"className":18876},[],[18878],{"type":1138,"value":18879},"install.sh --native",{"type":1138,"value":8477},{"type":1133,"tag":1173,"props":18882,"children":18885},{"href":18883,"rel":18884},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.2.1-native.1\u002Fdocs\u002Fupdating.md#native-builds",[1177],[18886],{"type":1138,"value":897},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":18889,"children":18890},{},[18891,18896,18897,18901,18903,18908,18910,18916],{"type":1133,"tag":1146,"props":18892,"children":18893},{},[18894],{"type":1138,"value":18895},"Faster disk use.",{"type":1138,"value":1719},{"type":1133,"tag":1146,"props":18898,"children":18899},{},[18900],{"type":1138,"value":4238},{"type":1138,"value":18902}," measures with ",{"type":1133,"tag":1789,"props":18904,"children":18906},{"className":18905},[],[18907],{"type":1138,"value":4251},{"type":1138,"value":18909},", 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 ",{"type":1133,"tag":1789,"props":18911,"children":18913},{"className":18912},[],[18914],{"type":1138,"value":18915},"bin\u002Fflytower-agent",{"type":1138,"value":18917},", ready for the Rust agent in a later native build.",{"type":1133,"tag":1134,"props":18919,"children":18920},{},[18921,18923,18927,18929,18933],{"type":1138,"value":18922},"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 ",{"type":1133,"tag":1146,"props":18924,"children":18925},{},[18926],{"type":1138,"value":4238},{"type":1138,"value":18928}," shows the same figures as before, and that ",{"type":1133,"tag":1146,"props":18930,"children":18931},{},[18932],{"type":1138,"value":1157},{"type":1138,"value":18934}," 1.2.0-beta.2.native.1 still works.",{"type":1133,"tag":1184,"props":18936,"children":18937},{"id":1233},[18938],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":18940,"children":18941},{},[18942],{"type":1133,"tag":1195,"props":18943,"children":18944},{},[18945,18949,18950,18955],{"type":1133,"tag":1146,"props":18946,"children":18947},{},[18948],{"type":1138,"value":10068},{"type":1138,"value":10070},{"type":1133,"tag":1173,"props":18951,"children":18953},{"href":10073,"rel":18952},[1177],[18954],{"type":1138,"value":10077},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":18957,"children":18958},{"id":7},[18959],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":18961,"children":18962},{},[18963,18973,18983],{"type":1133,"tag":1195,"props":18964,"children":18965},{},[18966,18967,18972],{"type":1138,"value":6823},{"type":1133,"tag":1173,"props":18968,"children":18970},{"href":6826,"rel":18969},[1177],[18971],{"type":1138,"value":6830},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18974,"children":18975},{},[18976,18977,18982],{"type":1138,"value":10090},{"type":1133,"tag":1173,"props":18978,"children":18980},{"href":10093,"rel":18979},[1177],[18981],{"type":1138,"value":10097},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":18984,"children":18985},{},[18986,18987,18992],{"type":1138,"value":10103},{"type":1133,"tag":1173,"props":18988,"children":18990},{"href":10106,"rel":18989},[1177],[18991],{"type":1138,"value":10110},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":18994,"children":18995},{"id":2327},[18996],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":18998,"children":18999},{},[19000],{"type":1133,"tag":1195,"props":19001,"children":19002},{},[19003,19004,19009],{"type":1138,"value":7325},{"type":1133,"tag":1173,"props":19005,"children":19007},{"href":7328,"rel":19006},[1177],[19008],{"type":1138,"value":7332},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":19011,"children":19012},{},[19013,19017,19018],{"type":1133,"tag":1146,"props":19014,"children":19015},{},[19016],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":19019,"children":19022},{"href":19020,"rel":19021},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fnative-1.2.0-beta.2.native.1...native-1.2.1-native.1",[1177],[19023],{"type":1138,"value":19020},{"data":19025,"body":19026},{},{"type":1130,"children":19027},[19028,19064,19091,19139,19143,19642,19646,19717,19721,19829,19833,19930,19934,19947],{"type":1133,"tag":1134,"props":19029,"children":19030},{},[19031,19036,19038,19043,19045,19049,19051,19055,19057,19063],{"type":1133,"tag":1146,"props":19032,"children":19033},{},[19034],{"type":1138,"value":19035},"The first native build.",{"type":1138,"value":19037}," 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 ",{"type":1133,"tag":1789,"props":19039,"children":19041},{"className":19040},[],[19042],{"type":1138,"value":18879},{"type":1138,"value":19044},", or choose ",{"type":1133,"tag":1146,"props":19046,"children":19047},{},[19048],{"type":1138,"value":2921},{"type":1138,"value":19050}," under ",{"type":1133,"tag":1146,"props":19052,"children":19053},{},[19054],{"type":1138,"value":18871},{"type":1138,"value":19056},". Native builds are only offered on the Native channel, and Beta and Stable never see them. See ",{"type":1133,"tag":1173,"props":19058,"children":19061},{"href":19059,"rel":19060},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fnative-1.2.0-beta.2.native.1\u002Fdocs\u002Fupdating.md#native-builds",[1177],[19062],{"type":1138,"value":897},{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":19065,"children":19066},{},[19067,19071,19072,19076,19077,19082,19084,19089],{"type":1133,"tag":1146,"props":19068,"children":19069},{},[19070],{"type":1138,"value":18895},{"type":1138,"value":1719},{"type":1133,"tag":1146,"props":19073,"children":19074},{},[19075],{"type":1138,"value":4238},{"type":1138,"value":8457},{"type":1133,"tag":1789,"props":19078,"children":19080},{"className":19079},[],[19081],{"type":1138,"value":4251},{"type":1138,"value":19083},", 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 ",{"type":1133,"tag":1789,"props":19085,"children":19087},{"className":19086},[],[19088],{"type":1138,"value":18915},{"type":1138,"value":19090},", so a later native build can swap in the Rust version. Going back to an older release still works.",{"type":1133,"tag":1134,"props":19092,"children":19093},{},[19094,19096,19100,19102,19108,19110,19115,19117,19123,19125,19131,19133,19137],{"type":1138,"value":19095},"Testing: check that ",{"type":1133,"tag":1146,"props":19097,"children":19098},{},[19099],{"type":1138,"value":4238},{"type":1138,"value":19101}," shows the same figures as before, that ",{"type":1133,"tag":1789,"props":19103,"children":19105},{"className":19104},[],[19106],{"type":1138,"value":19107},"ls \u002Fopt\u002Fflytower\u002Fcurrent\u002Fbin",{"type":1138,"value":19109}," lists ",{"type":1133,"tag":1789,"props":19111,"children":19113},{"className":19112},[],[19114],{"type":1138,"value":4251},{"type":1138,"value":19116},", that ",{"type":1133,"tag":1789,"props":19118,"children":19120},{"className":19119},[],[19121],{"type":1138,"value":19122},"systemctl cat flytower-agent",{"type":1138,"value":19124}," shows ",{"type":1133,"tag":1789,"props":19126,"children":19128},{"className":19127},[],[19129],{"type":1138,"value":19130},"ExecStart=\u002Fopt\u002Fflytower\u002Fcurrent\u002Fbin\u002Fflytower-agent",{"type":1138,"value":19132},", and that ",{"type":1133,"tag":1146,"props":19134,"children":19135},{},[19136],{"type":1138,"value":1157},{"type":1138,"value":19138}," 1.2.0-beta.2 still works.",{"type":1133,"tag":1184,"props":19140,"children":19141},{"id":1186},[19142],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":19144,"children":19145},{},[19146,19165,19184,19203,19222,19232,19242,19252,19271,19290,19309,19328,19347,19357,19367,19377,19387,19406,19416,19426,19436,19446,19456,19466,19476,19486,19496,19506,19516,19526,19540,19554,19568,19582,19596,19614,19628],{"type":1133,"tag":1195,"props":19147,"children":19148},{},[19149,19153,19154,19159,19160],{"type":1133,"tag":1146,"props":19150,"children":19151},{},[19152],{"type":1138,"value":5986},{"type":1138,"value":5988},{"type":1133,"tag":1173,"props":19155,"children":19157},{"href":5991,"rel":19156},[1177],[19158],{"type":1138,"value":5995},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19161,"children":19163},{"href":5999,"rel":19162},[1177],[19164],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":19166,"children":19167},{},[19168,19172,19173,19178,19179],{"type":1133,"tag":1146,"props":19169,"children":19170},{},[19171],{"type":1138,"value":6011},{"type":1138,"value":6013},{"type":1133,"tag":1173,"props":19174,"children":19176},{"href":6016,"rel":19175},[1177],[19177],{"type":1138,"value":6020},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19180,"children":19182},{"href":5999,"rel":19181},[1177],[19183],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":19185,"children":19186},{},[19187,19191,19192,19197,19198],{"type":1133,"tag":1146,"props":19188,"children":19189},{},[19190],{"type":1138,"value":1221},{"type":1138,"value":6035},{"type":1133,"tag":1173,"props":19193,"children":19195},{"href":6038,"rel":19194},[1177],[19196],{"type":1138,"value":6042},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19199,"children":19201},{"href":5999,"rel":19200},[1177],[19202],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":19204,"children":19205},{},[19206,19210,19211,19216,19217],{"type":1133,"tag":1146,"props":19207,"children":19208},{},[19209],{"type":1138,"value":5986},{"type":1138,"value":6057},{"type":1133,"tag":1173,"props":19212,"children":19214},{"href":6060,"rel":19213},[1177],[19215],{"type":1138,"value":6064},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19218,"children":19220},{"href":5999,"rel":19219},[1177],[19221],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":19223,"children":19224},{},[19225,19226,19231],{"type":1138,"value":10275},{"type":1133,"tag":1173,"props":19227,"children":19229},{"href":10278,"rel":19228},[1177],[19230],{"type":1138,"value":10282},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19233,"children":19234},{},[19235,19236,19241],{"type":1138,"value":10288},{"type":1133,"tag":1173,"props":19237,"children":19239},{"href":10291,"rel":19238},[1177],[19240],{"type":1138,"value":10295},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19243,"children":19244},{},[19245,19246,19251],{"type":1138,"value":10301},{"type":1133,"tag":1173,"props":19247,"children":19249},{"href":10304,"rel":19248},[1177],[19250],{"type":1138,"value":10308},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19253,"children":19254},{},[19255,19259,19260,19265,19266],{"type":1133,"tag":1146,"props":19256,"children":19257},{},[19258],{"type":1138,"value":6078},{"type":1138,"value":6080},{"type":1133,"tag":1173,"props":19261,"children":19263},{"href":6083,"rel":19262},[1177],[19264],{"type":1138,"value":6087},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19267,"children":19269},{"href":6091,"rel":19268},[1177],[19270],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":19272,"children":19273},{},[19274,19278,19279,19284,19285],{"type":1133,"tag":1146,"props":19275,"children":19276},{},[19277],{"type":1138,"value":6103},{"type":1138,"value":6105},{"type":1133,"tag":1173,"props":19280,"children":19282},{"href":6108,"rel":19281},[1177],[19283],{"type":1138,"value":6112},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19286,"children":19288},{"href":6091,"rel":19287},[1177],[19289],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":19291,"children":19292},{},[19293,19297,19298,19303,19304],{"type":1133,"tag":1146,"props":19294,"children":19295},{},[19296],{"type":1138,"value":6011},{"type":1138,"value":6127},{"type":1133,"tag":1173,"props":19299,"children":19301},{"href":6130,"rel":19300},[1177],[19302],{"type":1138,"value":6134},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19305,"children":19307},{"href":6138,"rel":19306},[1177],[19308],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":19310,"children":19311},{},[19312,19316,19317,19322,19323],{"type":1133,"tag":1146,"props":19313,"children":19314},{},[19315],{"type":1138,"value":1221},{"type":1138,"value":6151},{"type":1133,"tag":1173,"props":19318,"children":19320},{"href":6154,"rel":19319},[1177],[19321],{"type":1138,"value":6158},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19324,"children":19326},{"href":6138,"rel":19325},[1177],[19327],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":19329,"children":19330},{},[19331,19335,19336,19341,19342],{"type":1133,"tag":1146,"props":19332,"children":19333},{},[19334],{"type":1138,"value":1221},{"type":1138,"value":6173},{"type":1133,"tag":1173,"props":19337,"children":19339},{"href":6176,"rel":19338},[1177],[19340],{"type":1138,"value":6180},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19343,"children":19345},{"href":6138,"rel":19344},[1177],[19346],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":19348,"children":19349},{},[19350,19351,19356],{"type":1138,"value":10314},{"type":1133,"tag":1173,"props":19352,"children":19354},{"href":10317,"rel":19353},[1177],[19355],{"type":1138,"value":10321},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19358,"children":19359},{},[19360,19361,19366],{"type":1138,"value":10327},{"type":1133,"tag":1173,"props":19362,"children":19364},{"href":10330,"rel":19363},[1177],[19365],{"type":1138,"value":10334},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19368,"children":19369},{},[19370,19371,19376],{"type":1138,"value":10340},{"type":1133,"tag":1173,"props":19372,"children":19374},{"href":10343,"rel":19373},[1177],[19375],{"type":1138,"value":10347},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19378,"children":19379},{},[19380,19381,19386],{"type":1138,"value":10353},{"type":1133,"tag":1173,"props":19382,"children":19384},{"href":10356,"rel":19383},[1177],[19385],{"type":1138,"value":10360},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19388,"children":19389},{},[19390,19394,19395,19400,19401],{"type":1133,"tag":1146,"props":19391,"children":19392},{},[19393],{"type":1138,"value":4931},{"type":1138,"value":6195},{"type":1133,"tag":1173,"props":19396,"children":19398},{"href":6198,"rel":19397},[1177],[19399],{"type":1138,"value":6202},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19402,"children":19404},{"href":6138,"rel":19403},[1177],[19405],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":19407,"children":19408},{},[19409,19410,19415],{"type":1138,"value":10366},{"type":1133,"tag":1173,"props":19411,"children":19413},{"href":10369,"rel":19412},[1177],[19414],{"type":1138,"value":10373},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19417,"children":19418},{},[19419,19420,19425],{"type":1138,"value":10379},{"type":1133,"tag":1173,"props":19421,"children":19423},{"href":10382,"rel":19422},[1177],[19424],{"type":1138,"value":10386},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19427,"children":19428},{},[19429,19430,19435],{"type":1138,"value":10392},{"type":1133,"tag":1173,"props":19431,"children":19433},{"href":10395,"rel":19432},[1177],[19434],{"type":1138,"value":10399},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19437,"children":19438},{},[19439,19440,19445],{"type":1138,"value":10405},{"type":1133,"tag":1173,"props":19441,"children":19443},{"href":10408,"rel":19442},[1177],[19444],{"type":1138,"value":10412},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19447,"children":19448},{},[19449,19450,19455],{"type":1138,"value":10418},{"type":1133,"tag":1173,"props":19451,"children":19453},{"href":10421,"rel":19452},[1177],[19454],{"type":1138,"value":10425},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19457,"children":19458},{},[19459,19460,19465],{"type":1138,"value":10431},{"type":1133,"tag":1173,"props":19461,"children":19463},{"href":10434,"rel":19462},[1177],[19464],{"type":1138,"value":10438},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19467,"children":19468},{},[19469,19470,19475],{"type":1138,"value":10444},{"type":1133,"tag":1173,"props":19471,"children":19473},{"href":10447,"rel":19472},[1177],[19474],{"type":1138,"value":10451},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19477,"children":19478},{},[19479,19480,19485],{"type":1138,"value":10457},{"type":1133,"tag":1173,"props":19481,"children":19483},{"href":10460,"rel":19482},[1177],[19484],{"type":1138,"value":10464},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19487,"children":19488},{},[19489,19490,19495],{"type":1138,"value":10470},{"type":1133,"tag":1173,"props":19491,"children":19493},{"href":10473,"rel":19492},[1177],[19494],{"type":1138,"value":10477},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19497,"children":19498},{},[19499,19500,19505],{"type":1138,"value":10483},{"type":1133,"tag":1173,"props":19501,"children":19503},{"href":10486,"rel":19502},[1177],[19504],{"type":1138,"value":10490},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19507,"children":19508},{},[19509,19510,19515],{"type":1138,"value":10496},{"type":1133,"tag":1173,"props":19511,"children":19513},{"href":10499,"rel":19512},[1177],[19514],{"type":1138,"value":10503},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19517,"children":19518},{},[19519,19520,19525],{"type":1138,"value":10509},{"type":1133,"tag":1173,"props":19521,"children":19523},{"href":10512,"rel":19522},[1177],[19524],{"type":1138,"value":10516},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19527,"children":19528},{},[19529,19533,19534,19539],{"type":1133,"tag":1146,"props":19530,"children":19531},{},[19532],{"type":1138,"value":10525},{"type":1138,"value":10527},{"type":1133,"tag":1173,"props":19535,"children":19537},{"href":10530,"rel":19536},[1177],[19538],{"type":1138,"value":10534},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19541,"children":19542},{},[19543,19547,19548,19553],{"type":1133,"tag":1146,"props":19544,"children":19545},{},[19546],{"type":1138,"value":10525},{"type":1138,"value":10544},{"type":1133,"tag":1173,"props":19549,"children":19551},{"href":10547,"rel":19550},[1177],[19552],{"type":1138,"value":10551},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19555,"children":19556},{},[19557,19561,19562,19567],{"type":1133,"tag":1146,"props":19558,"children":19559},{},[19560],{"type":1138,"value":10560},{"type":1138,"value":10562},{"type":1133,"tag":1173,"props":19563,"children":19565},{"href":10565,"rel":19564},[1177],[19566],{"type":1138,"value":10569},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19569,"children":19570},{},[19571,19575,19576,19581],{"type":1133,"tag":1146,"props":19572,"children":19573},{},[19574],{"type":1138,"value":10525},{"type":1138,"value":10579},{"type":1133,"tag":1173,"props":19577,"children":19579},{"href":10582,"rel":19578},[1177],[19580],{"type":1138,"value":10586},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19583,"children":19584},{},[19585,19589,19590,19595],{"type":1133,"tag":1146,"props":19586,"children":19587},{},[19588],{"type":1138,"value":10525},{"type":1138,"value":10622},{"type":1133,"tag":1173,"props":19591,"children":19593},{"href":10625,"rel":19592},[1177],[19594],{"type":1138,"value":10629},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19597,"children":19598},{},[19599,19603,19604],{"type":1133,"tag":1146,"props":19600,"children":19601},{},[19602],{"type":1138,"value":10525},{"type":1138,"value":10665},{"type":1133,"tag":5026,"props":19605,"children":19606},{},[19607,19608,19613],{"type":1138,"value":10670},{"type":1133,"tag":1173,"props":19609,"children":19611},{"href":10673,"rel":19610},[1177],[19612],{"type":1138,"value":10677},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19615,"children":19616},{},[19617,19621,19622,19627],{"type":1133,"tag":1146,"props":19618,"children":19619},{},[19620],{"type":1138,"value":10525},{"type":1138,"value":10700},{"type":1133,"tag":1173,"props":19623,"children":19625},{"href":10703,"rel":19624},[1177],[19626],{"type":1138,"value":10707},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19629,"children":19630},{},[19631,19635,19636,19641],{"type":1133,"tag":1146,"props":19632,"children":19633},{},[19634],{"type":1138,"value":10716},{"type":1138,"value":10718},{"type":1133,"tag":1173,"props":19637,"children":19639},{"href":10721,"rel":19638},[1177],[19640],{"type":1138,"value":10725},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":19643,"children":19644},{"id":1233},[19645],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":19647,"children":19648},{},[19649,19659,19669,19679,19693,19707],{"type":1133,"tag":1195,"props":19650,"children":19651},{},[19652,19653,19658],{"type":1138,"value":11086},{"type":1133,"tag":1173,"props":19654,"children":19656},{"href":11089,"rel":19655},[1177],[19657],{"type":1138,"value":11093},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19660,"children":19661},{},[19662,19663,19668],{"type":1138,"value":11099},{"type":1133,"tag":1173,"props":19664,"children":19666},{"href":11102,"rel":19665},[1177],[19667],{"type":1138,"value":11106},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19670,"children":19671},{},[19672,19673,19678],{"type":1138,"value":11112},{"type":1133,"tag":1173,"props":19674,"children":19676},{"href":11115,"rel":19675},[1177],[19677],{"type":1138,"value":11119},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19680,"children":19681},{},[19682,19686,19687,19692],{"type":1133,"tag":1146,"props":19683,"children":19684},{},[19685],{"type":1138,"value":10068},{"type":1138,"value":11129},{"type":1133,"tag":1173,"props":19688,"children":19690},{"href":11132,"rel":19689},[1177],[19691],{"type":1138,"value":11136},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19694,"children":19695},{},[19696,19700,19701,19706],{"type":1133,"tag":1146,"props":19697,"children":19698},{},[19699],{"type":1138,"value":11145},{"type":1138,"value":11147},{"type":1133,"tag":1173,"props":19702,"children":19704},{"href":11150,"rel":19703},[1177],[19705],{"type":1138,"value":11154},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19708,"children":19709},{},[19710,19711,19716],{"type":1138,"value":11160},{"type":1133,"tag":1173,"props":19712,"children":19714},{"href":11163,"rel":19713},[1177],[19715],{"type":1138,"value":11167},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":19718,"children":19719},{"id":7},[19720],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":19722,"children":19723},{},[19724,19734,19744,19759,19769,19779,19789,19799,19809,19819],{"type":1133,"tag":1195,"props":19725,"children":19726},{},[19727,19728,19733],{"type":1138,"value":6836},{"type":1133,"tag":1173,"props":19729,"children":19731},{"href":6839,"rel":19730},[1177],[19732],{"type":1138,"value":6843},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19735,"children":19736},{},[19737,19738,19743],{"type":1138,"value":11323},{"type":1133,"tag":1173,"props":19739,"children":19741},{"href":11326,"rel":19740},[1177],[19742],{"type":1138,"value":11330},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19745,"children":19746},{},[19747,19748,19753,19754],{"type":1138,"value":6849},{"type":1133,"tag":1173,"props":19749,"children":19751},{"href":6852,"rel":19750},[1177],[19752],{"type":1138,"value":6856},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19755,"children":19757},{"href":5999,"rel":19756},[1177],[19758],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":19760,"children":19761},{},[19762,19763,19768],{"type":1138,"value":11336},{"type":1133,"tag":1173,"props":19764,"children":19766},{"href":11339,"rel":19765},[1177],[19767],{"type":1138,"value":11343},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19770,"children":19771},{},[19772,19773,19778],{"type":1138,"value":11349},{"type":1133,"tag":1173,"props":19774,"children":19776},{"href":11352,"rel":19775},[1177],[19777],{"type":1138,"value":11356},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19780,"children":19781},{},[19782,19783,19788],{"type":1138,"value":11362},{"type":1133,"tag":1173,"props":19784,"children":19786},{"href":11365,"rel":19785},[1177],[19787],{"type":1138,"value":11369},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19790,"children":19791},{},[19792,19793,19798],{"type":1138,"value":11375},{"type":1133,"tag":1173,"props":19794,"children":19796},{"href":11378,"rel":19795},[1177],[19797],{"type":1138,"value":11382},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19800,"children":19801},{},[19802,19803,19808],{"type":1138,"value":11388},{"type":1133,"tag":1173,"props":19804,"children":19806},{"href":11391,"rel":19805},[1177],[19807],{"type":1138,"value":11395},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19810,"children":19811},{},[19812,19813,19818],{"type":1138,"value":11401},{"type":1133,"tag":1173,"props":19814,"children":19816},{"href":11404,"rel":19815},[1177],[19817],{"type":1138,"value":11408},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19820,"children":19821},{},[19822,19823,19828],{"type":1138,"value":11414},{"type":1133,"tag":1173,"props":19824,"children":19826},{"href":11417,"rel":19825},[1177],[19827],{"type":1138,"value":11421},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":19830,"children":19831},{"id":1664},[19832],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":19834,"children":19835},{},[19836,19851,19866,19881,19900,19910,19920],{"type":1133,"tag":1195,"props":19837,"children":19838},{},[19839,19840,19845,19846],{"type":1138,"value":7077},{"type":1133,"tag":1173,"props":19841,"children":19843},{"href":7080,"rel":19842},[1177],[19844],{"type":1138,"value":7084},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19847,"children":19849},{"href":5999,"rel":19848},[1177],[19850],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":19852,"children":19853},{},[19854,19855,19860,19861],{"type":1138,"value":7095},{"type":1133,"tag":1173,"props":19856,"children":19858},{"href":7098,"rel":19857},[1177],[19859],{"type":1138,"value":7102},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19862,"children":19864},{"href":5999,"rel":19863},[1177],[19865],{"type":1138,"value":6003},{"type":1133,"tag":1195,"props":19867,"children":19868},{},[19869,19870,19875,19876],{"type":1138,"value":7113},{"type":1133,"tag":1173,"props":19871,"children":19873},{"href":7116,"rel":19872},[1177],[19874],{"type":1138,"value":7120},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19877,"children":19879},{"href":6091,"rel":19878},[1177],[19880],{"type":1138,"value":6095},{"type":1133,"tag":1195,"props":19882,"children":19883},{},[19884,19888,19889,19894,19895],{"type":1133,"tag":1146,"props":19885,"children":19886},{},[19887],{"type":1138,"value":4931},{"type":1138,"value":7135},{"type":1133,"tag":1173,"props":19890,"children":19892},{"href":7138,"rel":19891},[1177],[19893],{"type":1138,"value":7142},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":19896,"children":19898},{"href":6138,"rel":19897},[1177],[19899],{"type":1138,"value":6142},{"type":1133,"tag":1195,"props":19901,"children":19902},{},[19903,19904,19909],{"type":1138,"value":11582},{"type":1133,"tag":1173,"props":19905,"children":19907},{"href":11585,"rel":19906},[1177],[19908],{"type":1138,"value":11589},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19911,"children":19912},{},[19913,19914,19919],{"type":1138,"value":11595},{"type":1133,"tag":1173,"props":19915,"children":19917},{"href":11598,"rel":19916},[1177],[19918],{"type":1138,"value":11602},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":19921,"children":19922},{},[19923,19924,19929],{"type":1138,"value":11608},{"type":1133,"tag":1173,"props":19925,"children":19927},{"href":11611,"rel":19926},[1177],[19928],{"type":1138,"value":11615},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":19931,"children":19932},{"id":2327},[19933],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":19935,"children":19936},{},[19937],{"type":1133,"tag":1195,"props":19938,"children":19939},{},[19940,19941,19946],{"type":1138,"value":7338},{"type":1133,"tag":1173,"props":19942,"children":19944},{"href":7341,"rel":19943},[1177],[19945],{"type":1138,"value":7345},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":19948,"children":19949},{},[19950,19954,19955],{"type":1133,"tag":1146,"props":19951,"children":19952},{},[19953],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":19956,"children":19959},{"href":19957,"rel":19958},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.2.0-beta.1...native-1.2.0-beta.2.native.1",[1177],[19960],{"type":1138,"value":19957},{"data":19962,"body":19963},{},{"type":1130,"children":19964},[19965,19983,20007,20019,20023,20064,20068,20090,20094,20116],{"type":1133,"tag":1134,"props":19966,"children":19967},{},[19968,19970,19975,19976,19981],{"type":1138,"value":19969},"Fixes the missing and late ",{"type":1133,"tag":1146,"props":19971,"children":19972},{},[19973],{"type":1138,"value":19974},"Server started",{"type":1138,"value":1838},{"type":1133,"tag":1146,"props":19977,"children":19978},{},[19979],{"type":1138,"value":19980},"Server stopped",{"type":1138,"value":19982}," notifications from 1.1.0-beta.1, and adds restart alerts.",{"type":1133,"tag":1134,"props":19984,"children":19985},{},[19986,19988,19992,19994,19999,20001,20005],{"type":1138,"value":19987},"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. ",{"type":1133,"tag":1146,"props":19989,"children":19990},{},[19991],{"type":1138,"value":19974},{"type":1138,"value":19993}," is sent once players can actually join, and chat or ",{"type":1133,"tag":1789,"props":19995,"children":19997},{"className":19996},[],[19998],{"type":1138,"value":4171},{"type":1138,"value":20000}," can't fake any of these events. ",{"type":1133,"tag":1146,"props":20002,"children":20003},{},[20004],{"type":1138,"value":16189},{"type":1138,"value":20006}," from the panel now sends \"Server restarting\" and then \"Server restarted\", instead of a separate stop and start.",{"type":1133,"tag":1134,"props":20008,"children":20009},{},[20010,20012,20018],{"type":1138,"value":20011},"Testing notes are in section 1 of ",{"type":1133,"tag":1173,"props":20013,"children":20016},{"href":20014,"rel":20015},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.2\u002Fdocs\u002Ftesting-1.1.0.md",[1177],[20017],{"type":1138,"value":13382},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":20020,"children":20021},{"id":1233},[20022],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":20024,"children":20025},{},[20026,20045],{"type":1133,"tag":1195,"props":20027,"children":20028},{},[20029,20033,20034,20039,20040],{"type":1133,"tag":1146,"props":20030,"children":20031},{},[20032],{"type":1138,"value":10068},{"type":1138,"value":14502},{"type":1133,"tag":1173,"props":20035,"children":20037},{"href":14505,"rel":20036},[1177],[20038],{"type":1138,"value":14509},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20041,"children":20043},{"href":14076,"rel":20042},[1177],[20044],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":20046,"children":20047},{},[20048,20052,20053,20058,20059],{"type":1133,"tag":1146,"props":20049,"children":20050},{},[20051],{"type":1138,"value":10068},{"type":1138,"value":14524},{"type":1133,"tag":1173,"props":20054,"children":20056},{"href":14505,"rel":20055},[1177],[20057],{"type":1138,"value":14509},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20060,"children":20062},{"href":14076,"rel":20061},[1177],[20063],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":20065,"children":20066},{"id":7},[20067],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":20069,"children":20070},{},[20071],{"type":1133,"tag":1195,"props":20072,"children":20073},{},[20074,20078,20079,20084,20085],{"type":1133,"tag":1146,"props":20075,"children":20076},{},[20077],{"type":1138,"value":10068},{"type":1138,"value":14738},{"type":1133,"tag":1173,"props":20080,"children":20082},{"href":14505,"rel":20081},[1177],[20083],{"type":1138,"value":14509},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20086,"children":20088},{"href":14076,"rel":20087},[1177],[20089],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":20091,"children":20092},{"id":1664},[20093],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":20095,"children":20096},{},[20097],{"type":1133,"tag":1195,"props":20098,"children":20099},{},[20100,20104,20105,20110,20111],{"type":1133,"tag":1146,"props":20101,"children":20102},{},[20103],{"type":1138,"value":10068},{"type":1138,"value":14867},{"type":1133,"tag":1173,"props":20106,"children":20108},{"href":14505,"rel":20107},[1177],[20109],{"type":1138,"value":14509},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20112,"children":20114},{"href":14076,"rel":20113},[1177],[20115],{"type":1138,"value":14080},{"type":1133,"tag":1134,"props":20117,"children":20118},{},[20119,20123,20124],{"type":1133,"tag":1146,"props":20120,"children":20121},{},[20122],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":20125,"children":20128},{"href":20126,"rel":20127},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.1.0-beta.1...v1.1.0-beta.2",[1177],[20129],{"type":1138,"value":20126},{"data":20131,"body":20132},{},{"type":1130,"children":20133},[20134,20146,20158,20169,20173,20308,20312,20330,20334,20370,20374,20387],{"type":1133,"tag":1134,"props":20135,"children":20136},{},[20137,20139,20144],{"type":1138,"value":20138},"The first 1.1 beta brings ",{"type":1133,"tag":1146,"props":20140,"children":20141},{},[20142],{"type":1138,"value":20143},"notifications",{"type":1138,"value":20145},". 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.",{"type":1133,"tag":1134,"props":20147,"children":20148},{},[20149,20151,20157],{"type":1138,"value":20150},"Every pull request now also gets a signed test build, which the installer can install with ",{"type":1133,"tag":1789,"props":20152,"children":20154},{"className":20153},[],[20155],{"type":1138,"value":20156},"--pr \u003Cnumber>",{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":20159,"children":20160},{},[20161,20162,20168],{"type":1138,"value":20011},{"type":1133,"tag":1173,"props":20163,"children":20166},{"href":20164,"rel":20165},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.1.0-beta.1\u002Fdocs\u002Ftesting-1.1.0.md",[1177],[20167],{"type":1138,"value":13382},{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":20170,"children":20171},{"id":1186},[20172],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":20174,"children":20175},{},[20176,20195,20213,20232,20251,20270,20289],{"type":1133,"tag":1195,"props":20177,"children":20178},{},[20179,20183,20184,20189,20190],{"type":1133,"tag":1146,"props":20180,"children":20181},{},[20182],{"type":1138,"value":10068},{"type":1138,"value":14065},{"type":1133,"tag":1173,"props":20185,"children":20187},{"href":14068,"rel":20186},[1177],[20188],{"type":1138,"value":14072},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20191,"children":20193},{"href":14076,"rel":20192},[1177],[20194],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":20196,"children":20197},{},[20198,20202,20203],{"type":1133,"tag":1146,"props":20199,"children":20200},{},[20201],{"type":1138,"value":6011},{"type":1138,"value":14089},{"type":1133,"tag":14091,"props":20204,"children":20205},{},[20206,20207,20212],{"type":1138,"value":14095},{"type":1133,"tag":1173,"props":20208,"children":20210},{"href":14098,"rel":20209},[1177],[20211],{"type":1138,"value":14102},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20214,"children":20215},{},[20216,20220,20221,20226,20227],{"type":1133,"tag":1146,"props":20217,"children":20218},{},[20219],{"type":1138,"value":10068},{"type":1138,"value":14112},{"type":1133,"tag":1173,"props":20222,"children":20224},{"href":14115,"rel":20223},[1177],[20225],{"type":1138,"value":14119},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20228,"children":20230},{"href":14076,"rel":20229},[1177],[20231],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":20233,"children":20234},{},[20235,20239,20240,20245,20246],{"type":1133,"tag":1146,"props":20236,"children":20237},{},[20238],{"type":1138,"value":10068},{"type":1138,"value":14134},{"type":1133,"tag":1173,"props":20241,"children":20243},{"href":14137,"rel":20242},[1177],[20244],{"type":1138,"value":14141},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20247,"children":20249},{"href":14076,"rel":20248},[1177],[20250],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":20252,"children":20253},{},[20254,20258,20259,20264,20265],{"type":1133,"tag":1146,"props":20255,"children":20256},{},[20257],{"type":1138,"value":10068},{"type":1138,"value":14156},{"type":1133,"tag":1173,"props":20260,"children":20262},{"href":14159,"rel":20261},[1177],[20263],{"type":1138,"value":14163},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20266,"children":20268},{"href":14076,"rel":20267},[1177],[20269],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":20271,"children":20272},{},[20273,20277,20278,20283,20284],{"type":1133,"tag":1146,"props":20274,"children":20275},{},[20276],{"type":1138,"value":10068},{"type":1138,"value":14178},{"type":1133,"tag":1173,"props":20279,"children":20281},{"href":14181,"rel":20280},[1177],[20282],{"type":1138,"value":14185},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20285,"children":20287},{"href":14076,"rel":20286},[1177],[20288],{"type":1138,"value":14080},{"type":1133,"tag":1195,"props":20290,"children":20291},{},[20292,20296,20297,20302,20303],{"type":1133,"tag":1146,"props":20293,"children":20294},{},[20295],{"type":1138,"value":10068},{"type":1138,"value":14200},{"type":1133,"tag":1173,"props":20298,"children":20300},{"href":14203,"rel":20299},[1177],[20301],{"type":1138,"value":14207},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20304,"children":20306},{"href":14076,"rel":20305},[1177],[20307],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":20309,"children":20310},{"id":7},[20311],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":20313,"children":20314},{},[20315],{"type":1133,"tag":1195,"props":20316,"children":20317},{},[20318,20319,20324,20325],{"type":1138,"value":14754},{"type":1133,"tag":1173,"props":20320,"children":20322},{"href":14757,"rel":20321},[1177],[20323],{"type":1138,"value":14761},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20326,"children":20328},{"href":14076,"rel":20327},[1177],[20329],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":20331,"children":20332},{"id":1664},[20333],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":20335,"children":20336},{},[20337,20351],{"type":1133,"tag":1195,"props":20338,"children":20339},{},[20340,20341],{"type":1138,"value":14883},{"type":1133,"tag":14091,"props":20342,"children":20343},{},[20344,20345,20350],{"type":1138,"value":11840},{"type":1133,"tag":1173,"props":20346,"children":20348},{"href":14890,"rel":20347},[1177],[20349],{"type":1138,"value":14894},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20352,"children":20353},{},[20354,20358,20359,20364,20365],{"type":1133,"tag":1146,"props":20355,"children":20356},{},[20357],{"type":1138,"value":11681},{"type":1138,"value":14904},{"type":1133,"tag":1173,"props":20360,"children":20362},{"href":14907,"rel":20361},[1177],[20363],{"type":1138,"value":14911},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20366,"children":20368},{"href":14076,"rel":20367},[1177],[20369],{"type":1138,"value":14080},{"type":1133,"tag":1184,"props":20371,"children":20372},{"id":2327},[20373],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":20375,"children":20376},{},[20377],{"type":1133,"tag":1195,"props":20378,"children":20379},{},[20380,20381,20386],{"type":1138,"value":14949},{"type":1133,"tag":1173,"props":20382,"children":20384},{"href":14952,"rel":20383},[1177],[20385],{"type":1138,"value":14956},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":20388,"children":20389},{},[20390,20394,20395],{"type":1133,"tag":1146,"props":20391,"children":20392},{},[20393],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":20396,"children":20399},{"href":20397,"rel":20398},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv1.0.1...v1.1.0-beta.1",[1177],[20400],{"type":1138,"value":20397},{"data":20402,"body":20403},{},{"type":1130,"children":20404},[20405,20424,20436,20440,20598,20602,20623,20627,20697,20701,20717],{"type":1133,"tag":1134,"props":20406,"children":20407},{},[20408,20410,20415,20417,20423],{"type":1138,"value":20409},"Adds ",{"type":1133,"tag":1146,"props":20411,"children":20412},{},[20413],{"type":1138,"value":20414},"update channels",{"type":1138,"value":20416},". 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 ",{"type":1133,"tag":1789,"props":20418,"children":20420},{"className":20419},[],[20421],{"type":1138,"value":20422},"--beta",{"type":1138,"value":1182},{"type":1133,"tag":1134,"props":20425,"children":20426},{},[20427,20428,20435],{"type":1138,"value":10255},{"type":1133,"tag":1173,"props":20429,"children":20432},{"href":20430,"rel":20431},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fblob\u002Fv1.0.1\u002Fdocs\u002Ftesting-1.0.1.md",[1177],[20433],{"type":1138,"value":20434},"testing-1.0.1.md",{"type":1138,"value":1182},{"type":1133,"tag":1184,"props":20437,"children":20438},{"id":1186},[20439],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":20441,"children":20442},{},[20443,20467,20489,20511,20533,20556,20578],{"type":1133,"tag":1195,"props":20444,"children":20445},{},[20446,20450,20452,20459,20460],{"type":1133,"tag":1146,"props":20447,"children":20448},{},[20449],{"type":1138,"value":6011},{"type":1138,"value":20451}," install the newest stable release by default, and betas with --beta (",{"type":1133,"tag":1173,"props":20453,"children":20456},{"href":20454,"rel":20455},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F64482566da9d98e7b431d15a04bf7f055ccb867d",[1177],[20457],{"type":1138,"value":20458},"6448256",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20461,"children":20464},{"href":20462,"rel":20463},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F74",[1177],[20465],{"type":1138,"value":20466},"#74",{"type":1133,"tag":1195,"props":20468,"children":20469},{},[20470,20474,20476,20483,20484],{"type":1133,"tag":1146,"props":20471,"children":20472},{},[20473],{"type":1138,"value":5986},{"type":1138,"value":20475}," Stable or Beta switch on the System page, with a Beta badge on offered betas (",{"type":1133,"tag":1173,"props":20477,"children":20480},{"href":20478,"rel":20479},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fda5c3726b834868ee94a19c5d531efe7c43ab106",[1177],[20481],{"type":1138,"value":20482},"da5c372",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20485,"children":20487},{"href":20462,"rel":20486},[1177],[20488],{"type":1138,"value":20466},{"type":1133,"tag":1195,"props":20490,"children":20491},{},[20492,20496,20498,20505,20506],{"type":1133,"tag":1146,"props":20493,"children":20494},{},[20495],{"type":1138,"value":5986},{"type":1138,"value":20497}," choose the update channel through the API, with an activity entry (",{"type":1133,"tag":1173,"props":20499,"children":20502},{"href":20500,"rel":20501},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7f170525c0fb3324a3b4dd26f75c1e96bef0ed65",[1177],[20503],{"type":1138,"value":20504},"7f17052",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20507,"children":20509},{"href":20462,"rel":20508},[1177],[20510],{"type":1138,"value":20466},{"type":1133,"tag":1195,"props":20512,"children":20513},{},[20514,20518,20520,20527,20528],{"type":1133,"tag":1146,"props":20515,"children":20516},{},[20517],{"type":1138,"value":5986},{"type":1138,"value":20519}," filter releases by channel, and order beta.10 after beta.9 (",{"type":1133,"tag":1173,"props":20521,"children":20524},{"href":20522,"rel":20523},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F87083484e662ffef8d46590dad47956f2c49f0c8",[1177],[20525],{"type":1138,"value":20526},"8708348",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20529,"children":20531},{"href":20462,"rel":20530},[1177],[20532],{"type":1138,"value":20466},{"type":1133,"tag":1195,"props":20534,"children":20535},{},[20536,20541,20543,20550,20551],{"type":1133,"tag":1146,"props":20537,"children":20538},{},[20539],{"type":1138,"value":20540},"settings:",{"type":1138,"value":20542}," typed helpers to read and write panel settings (",{"type":1133,"tag":1173,"props":20544,"children":20547},{"href":20545,"rel":20546},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff82a76d0b2b161b670efe90a5689a111e2935c56",[1177],[20548],{"type":1138,"value":20549},"f82a76d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20552,"children":20554},{"href":20462,"rel":20553},[1177],[20555],{"type":1138,"value":20466},{"type":1133,"tag":1195,"props":20557,"children":20558},{},[20559,20563,20565,20572,20573],{"type":1133,"tag":1146,"props":20560,"children":20561},{},[20562],{"type":1138,"value":20540},{"type":1138,"value":20564}," a table for panel-wide settings (",{"type":1133,"tag":1173,"props":20566,"children":20569},{"href":20567,"rel":20568},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2600049b1e431fea1ada84ac3a1ea019597c17fa",[1177],[20570],{"type":1138,"value":20571},"2600049",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20574,"children":20576},{"href":20462,"rel":20575},[1177],[20577],{"type":1138,"value":20466},{"type":1133,"tag":1195,"props":20579,"children":20580},{},[20581,20585,20586],{"type":1133,"tag":1146,"props":20582,"children":20583},{},[20584],{"type":1138,"value":6011},{"type":1138,"value":14089},{"type":1133,"tag":14091,"props":20587,"children":20588},{},[20589,20590,20597],{"type":1138,"value":14095},{"type":1133,"tag":1173,"props":20591,"children":20594},{"href":20592,"rel":20593},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F58f36b95cd2e3d1df22aa5f45e320e123dcf57cb",[1177],[20595],{"type":1138,"value":20596},"58f36b9",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":20599,"children":20600},{"id":7},[20601],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":20603,"children":20604},{},[20605],{"type":1133,"tag":1195,"props":20606,"children":20607},{},[20608,20610,20617,20618],{"type":1138,"value":20609},"update channels, publishing betas, and 1.0.1 testing notes (",{"type":1133,"tag":1173,"props":20611,"children":20614},{"href":20612,"rel":20613},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73587b5003a259c96552a45a2904b0158eb40e96",[1177],[20615],{"type":1138,"value":20616},"73587b5",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20619,"children":20621},{"href":20462,"rel":20620},[1177],[20622],{"type":1138,"value":20466},{"type":1133,"tag":1184,"props":20624,"children":20625},{"id":1664},[20626],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":20628,"children":20629},{},[20630,20647,20664,20681],{"type":1133,"tag":1195,"props":20631,"children":20632},{},[20633,20637,20639,20646],{"type":1133,"tag":1146,"props":20634,"children":20635},{},[20636],{"type":1138,"value":11681},{"type":1138,"value":20638}," read the chosen channel from its card, which has no label element (",{"type":1133,"tag":1173,"props":20640,"children":20643},{"href":20641,"rel":20642},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1e9d38a56a08e59f542a1b4e9e39ab759a62eb9a",[1177],[20644],{"type":1138,"value":20645},"1e9d38a",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20648,"children":20649},{},[20650,20654,20656,20663],{"type":1133,"tag":1146,"props":20651,"children":20652},{},[20653],{"type":1138,"value":11681},{"type":1138,"value":20655}," upgrade only from releases, not pull request test builds (",{"type":1133,"tag":1173,"props":20657,"children":20660},{"href":20658,"rel":20659},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa5e08d609e234e2c063cce874380d3906fe2f653",[1177],[20661],{"type":1138,"value":20662},"a5e08d6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20665,"children":20666},{},[20667,20671,20673,20680],{"type":1133,"tag":1146,"props":20668,"children":20669},{},[20670],{"type":1138,"value":11681},{"type":1138,"value":20672}," choose the Beta channel on the System page and check it's kept (",{"type":1133,"tag":1173,"props":20674,"children":20677},{"href":20675,"rel":20676},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2f4f4a45a18098d946cae3c8b4f0ff27a41e828c",[1177],[20678],{"type":1138,"value":20679},"2f4f4a4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20682,"children":20683},{},[20684,20685],{"type":1138,"value":14883},{"type":1133,"tag":14091,"props":20686,"children":20687},{},[20688,20689,20696],{"type":1138,"value":11840},{"type":1133,"tag":1173,"props":20690,"children":20693},{"href":20691,"rel":20692},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa8cf9c1ea1df54ab8129a3a85bb2bb9dfb4138c9",[1177],[20694],{"type":1138,"value":20695},"a8cf9c1",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":20698,"children":20699},{"id":2327},[20700],{"type":1138,"value":2330},{"type":1133,"tag":1191,"props":20702,"children":20703},{},[20704],{"type":1133,"tag":1195,"props":20705,"children":20706},{},[20707,20709,20716],{"type":1138,"value":20708},"Update channel: choose Stable or Beta releases (#75) (",{"type":1133,"tag":1173,"props":20710,"children":20713},{"href":20711,"rel":20712},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fccbd6a9d185208c53b02b2d29cf20d8e867dd3e5",[1177],[20714],{"type":1138,"value":20715},"ccbd6a9",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":20718,"children":20719},{},[20720,20724,20725],{"type":1133,"tag":1146,"props":20721,"children":20722},{},[20723],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":20726,"children":20729},{"href":20727,"rel":20728},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.5.0...v1.0.1",[1177],[20730],{"type":1138,"value":20727},{"data":20732,"body":20733},{},{"type":1130,"children":20734},[20735,20739,21105,21109,21220,21224,21286,21290,21402],{"type":1133,"tag":1184,"props":20736,"children":20737},{"id":1186},[20738],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":20740,"children":20741},{},[20742,20767,20785,20802,20819,20843,20867,20884,20909,20926,20951,20968,20985,21010,21035,21057,21081],{"type":1133,"tag":1195,"props":20743,"children":20744},{},[20745,20750,20752,20759,20760],{"type":1133,"tag":1146,"props":20746,"children":20747},{},[20748],{"type":1138,"value":20749},"account:",{"type":1138,"value":20751}," list, add and remove passkeys, and make new recovery codes, on the System page (",{"type":1133,"tag":1173,"props":20753,"children":20756},{"href":20754,"rel":20755},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe8b500299e610e1f259b8fadeb6469d8ac2dd77a",[1177],[20757],{"type":1138,"value":20758},"e8b5002",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20761,"children":20764},{"href":20762,"rel":20763},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F55",[1177],[20765],{"type":1138,"value":20766},"#55",{"type":1133,"tag":1195,"props":20768,"children":20769},{},[20770,20775,20777,20784],{"type":1133,"tag":1146,"props":20771,"children":20772},{},[20773],{"type":1138,"value":20774},"security:",{"type":1138,"value":20776}," deleting a backup asks for your passkey, since it takes the off-site copy too (",{"type":1133,"tag":1173,"props":20778,"children":20781},{"href":20779,"rel":20780},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F468b8fa94e8edeeeca7b4daef828cb32877cf26f",[1177],[20782],{"type":1138,"value":20783},"468b8fa",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20786,"children":20787},{},[20788,20792,20794,20801],{"type":1133,"tag":1146,"props":20789,"children":20790},{},[20791],{"type":1138,"value":20774},{"type":1138,"value":20793}," HSTS when the panel is reached over HTTPS (",{"type":1133,"tag":1173,"props":20795,"children":20798},{"href":20796,"rel":20797},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7b49304bfce438254b8552f381616b23345bac9b",[1177],[20799],{"type":1138,"value":20800},"7b49304",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20803,"children":20804},{},[20805,20809,20811,20818],{"type":1133,"tag":1146,"props":20806,"children":20807},{},[20808],{"type":1138,"value":20774},{"type":1138,"value":20810}," send a content security policy and anti-framing headers on every response (",{"type":1133,"tag":1173,"props":20812,"children":20815},{"href":20813,"rel":20814},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F965fb22cc14ae7c50159f5ab34e8118b1b621e0f",[1177],[20816],{"type":1138,"value":20817},"965fb22",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20820,"children":20821},{},[20822,20826,20828,20835,20836],{"type":1133,"tag":1146,"props":20823,"children":20824},{},[20825],{"type":1138,"value":10716},{"type":1138,"value":20827}," choose off-site storage by name in the server YAML (",{"type":1133,"tag":1173,"props":20829,"children":20832},{"href":20830,"rel":20831},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F116fa26ccf34e69a4ec98ca63a6cd77be98a04bc",[1177],[20833],{"type":1138,"value":20834},"116fa26",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20837,"children":20840},{"href":20838,"rel":20839},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F54",[1177],[20841],{"type":1138,"value":20842},"#54",{"type":1133,"tag":1195,"props":20844,"children":20845},{},[20846,20850,20852,20859,20860],{"type":1133,"tag":1146,"props":20847,"children":20848},{},[20849],{"type":1138,"value":13530},{"type":1138,"value":20851}," Off-site storage on System and a per-server choice on Backups, with upload status (",{"type":1133,"tag":1173,"props":20853,"children":20856},{"href":20854,"rel":20855},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F320fca8cba7fe6b803c329302c4b634c4da34bd0",[1177],[20857],{"type":1138,"value":20858},"320fca8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20861,"children":20864},{"href":20862,"rel":20863},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F50",[1177],[20865],{"type":1138,"value":20866},"#50",{"type":1133,"tag":1195,"props":20868,"children":20869},{},[20870,20874,20876,20883],{"type":1133,"tag":1146,"props":20871,"children":20872},{},[20873],{"type":1138,"value":13530},{"type":1138,"value":20875}," copy backups to S3-compatible storage, retry failed uploads, restore from the copy (",{"type":1133,"tag":1173,"props":20877,"children":20880},{"href":20878,"rel":20879},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00206e72ac1bcd06c4dba2d4bade21b9069dc486",[1177],[20881],{"type":1138,"value":20882},"00206e7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20885,"children":20886},{},[20887,20892,20894,20901,20902],{"type":1133,"tag":1146,"props":20888,"children":20889},{},[20890],{"type":1138,"value":20891},"content:",{"type":1138,"value":20893}," plugins from Hangar, checked by sha256, and Chunky pre-generation on Paper (",{"type":1133,"tag":1173,"props":20895,"children":20898},{"href":20896,"rel":20897},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe91456735f182814443950452e2b39ed1d518333",[1177],[20899],{"type":1138,"value":20900},"e914567",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20903,"children":20906},{"href":20904,"rel":20905},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F49",[1177],[20907],{"type":1138,"value":20908},"#49",{"type":1133,"tag":1195,"props":20910,"children":20911},{},[20912,20916,20918,20925],{"type":1133,"tag":1146,"props":20913,"children":20914},{},[20915],{"type":1138,"value":20891},{"type":1138,"value":20917}," Paper plugins from Modrinth, installed into plugins\u002F through plan and apply (",{"type":1133,"tag":1173,"props":20919,"children":20922},{"href":20920,"rel":20921},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5c14fa3a5c7eb61ac03234acba8a4c6953813783",[1177],[20923],{"type":1138,"value":20924},"5c14fa3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20927,"children":20928},{},[20929,20934,20936,20943,20944],{"type":1133,"tag":1146,"props":20930,"children":20931},{},[20932],{"type":1138,"value":20933},"servers:",{"type":1138,"value":20935}," run Paper, from New server, the Version card and imports (",{"type":1133,"tag":1173,"props":20937,"children":20940},{"href":20938,"rel":20939},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F608f0b8d7857837a6d87c017667ca839c5d3dc89",[1177],[20941],{"type":1138,"value":20942},"608f0b8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":20945,"children":20948},{"href":20946,"rel":20947},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F48",[1177],[20949],{"type":1138,"value":20950},"#48",{"type":1133,"tag":1195,"props":20952,"children":20953},{},[20954,20958,20960,20967],{"type":1133,"tag":1146,"props":20955,"children":20956},{},[20957],{"type":1138,"value":10560},{"type":1138,"value":20959}," Paper builds from PaperMC's Fill API, checked by sha256 (",{"type":1133,"tag":1173,"props":20961,"children":20964},{"href":20962,"rel":20963},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdc2bda5f7717d611ad7bf41719a5abc804c82ebf",[1177],[20965],{"type":1138,"value":20966},"dc2bda5",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20969,"children":20970},{},[20971,20975,20977,20984],{"type":1133,"tag":1146,"props":20972,"children":20973},{},[20974],{"type":1138,"value":6011},{"type":1138,"value":20976}," Flytower's release signing key (",{"type":1133,"tag":1173,"props":20978,"children":20981},{"href":20979,"rel":20980},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8689f900abc2af8c01bac85478664b206bd73b35",[1177],[20982],{"type":1138,"value":20983},"8689f90",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":20986,"children":20987},{},[20988,20993,20995,21002,21003],{"type":1133,"tag":1146,"props":20989,"children":20990},{},[20991],{"type":1138,"value":20992},"metrics:",{"type":1138,"value":20994}," a week of CPU, memory, players and tick time, charted on a Performance tab and the System page (",{"type":1133,"tag":1173,"props":20996,"children":20999},{"href":20997,"rel":20998},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb9d76c433ab67860df23592b56557a824b89f91",[1177],[21000],{"type":1138,"value":21001},"fb9d76c",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21004,"children":21007},{"href":21005,"rel":21006},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F46",[1177],[21008],{"type":1138,"value":21009},"#46",{"type":1133,"tag":1195,"props":21011,"children":21012},{},[21013,21018,21020,21027,21028],{"type":1133,"tag":1146,"props":21014,"children":21015},{},[21016],{"type":1138,"value":21017},"system:",{"type":1138,"value":21019}," Updates card to install a newer Flytower or go back, following the restart (",{"type":1133,"tag":1173,"props":21021,"children":21024},{"href":21022,"rel":21023},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9a0a4da366b55b49db481ef7c8c90196af4fdd00",[1177],[21025],{"type":1138,"value":21026},"9a0a4da",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21029,"children":21032},{"href":21030,"rel":21031},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F45",[1177],[21033],{"type":1138,"value":21034},"#45",{"type":1133,"tag":1195,"props":21036,"children":21037},{},[21038,21042,21044,21051,21052],{"type":1133,"tag":1146,"props":21039,"children":21040},{},[21041],{"type":1138,"value":1221},{"type":1138,"value":21043}," install signed releases and switch to them with an updater that rolls back (",{"type":1133,"tag":1173,"props":21045,"children":21048},{"href":21046,"rel":21047},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73bcae2516c66c1447e97c7a1fa251bf09ddafca",[1177],[21049],{"type":1138,"value":21050},"73bcae2",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21053,"children":21055},{"href":21030,"rel":21054},[1177],[21056],{"type":1138,"value":21034},{"type":1133,"tag":1195,"props":21058,"children":21059},{},[21060,21064,21066,21073,21074],{"type":1133,"tag":1146,"props":21061,"children":21062},{},[21063],{"type":1138,"value":11650},{"type":1138,"value":21065}," sign SHA256SUMS with Ed25519 and check it in the installer and agent (",{"type":1133,"tag":1173,"props":21067,"children":21070},{"href":21068,"rel":21069},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5e02a4afd81b82e34047ebc9b91fb34eaa4d7902",[1177],[21071],{"type":1138,"value":21072},"5e02a4a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21075,"children":21078},{"href":21076,"rel":21077},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F44",[1177],[21079],{"type":1138,"value":21080},"#44",{"type":1133,"tag":1195,"props":21082,"children":21083},{},[21084,21088,21090,21097,21098],{"type":1133,"tag":1146,"props":21085,"children":21086},{},[21087],{"type":1138,"value":4598},{"type":1138,"value":21089}," Activity page listing who did what, with filters (",{"type":1133,"tag":1173,"props":21091,"children":21094},{"href":21092,"rel":21093},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe91aa8c767a3db941023a402bae374df353270e8",[1177],[21095],{"type":1138,"value":21096},"e91aa8c",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21099,"children":21102},{"href":21100,"rel":21101},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F47",[1177],[21103],{"type":1138,"value":21104},"#47",{"type":1133,"tag":1184,"props":21106,"children":21107},{"id":1233},[21108],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":21110,"children":21111},{},[21112,21134,21151,21168,21185,21203],{"type":1133,"tag":1195,"props":21113,"children":21114},{},[21115,21119,21121,21128,21129],{"type":1133,"tag":1146,"props":21116,"children":21117},{},[21118],{"type":1138,"value":20774},{"type":1138,"value":21120}," adding a passkey while signed in needs a passkey check (",{"type":1133,"tag":1173,"props":21122,"children":21125},{"href":21123,"rel":21124},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F54f0a03cbce92e310f1cc365ca07a8e996d991df",[1177],[21126],{"type":1138,"value":21127},"54f0a03",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21130,"children":21132},{"href":20762,"rel":21131},[1177],[21133],{"type":1138,"value":20766},{"type":1133,"tag":1195,"props":21135,"children":21136},{},[21137,21141,21143,21150],{"type":1133,"tag":1146,"props":21138,"children":21139},{},[21140],{"type":1138,"value":13530},{"type":1138,"value":21142}," off-site uploads never started after a sweep that found nothing to do (",{"type":1133,"tag":1173,"props":21144,"children":21147},{"href":21145,"rel":21146},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffd8fb3542f1c672f64d562663866d7a3c7150e22",[1177],[21148],{"type":1138,"value":21149},"fd8fb35",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21152,"children":21153},{},[21154,21158,21160,21167],{"type":1133,"tag":1146,"props":21155,"children":21156},{},[21157],{"type":1138,"value":11145},{"type":1138,"value":21159}," strip Paper's hex colour codes from replies (",{"type":1133,"tag":1173,"props":21161,"children":21164},{"href":21162,"rel":21163},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa2780d49233e6adaa75ae7a01411df53d1168989",[1177],[21165],{"type":1138,"value":21166},"a2780d4",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21169,"children":21170},{},[21171,21175,21177,21184],{"type":1133,"tag":1146,"props":21172,"children":21173},{},[21174],{"type":1138,"value":20891},{"type":1138,"value":21176}," label plugins in the content list (",{"type":1133,"tag":1173,"props":21178,"children":21181},{"href":21179,"rel":21180},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F374606e4372d42fdc7e87ec4d1627f0de42aad7b",[1177],[21182],{"type":1138,"value":21183},"374606e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21186,"children":21187},{},[21188,21193,21195,21202],{"type":1133,"tag":1146,"props":21189,"children":21190},{},[21191],{"type":1138,"value":21192},"updater:",{"type":1138,"value":21194}," give restored database files back to the panel's user on rollback (",{"type":1133,"tag":1173,"props":21196,"children":21199},{"href":21197,"rel":21198},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff6ecb06c55f1e456620b1b98846645086f9ce8ec",[1177],[21200],{"type":1138,"value":21201},"f6ecb06",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21204,"children":21205},{},[21206,21210,21212,21219],{"type":1133,"tag":1146,"props":21207,"children":21208},{},[21209],{"type":1138,"value":1221},{"type":1138,"value":21211}," tidy an unused assignment in the updater (",{"type":1133,"tag":1173,"props":21213,"children":21216},{"href":21214,"rel":21215},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc8ef61737ef291161cf4b7bf3d42eb2fe65aeba6",[1177],[21217],{"type":1138,"value":21218},"c8ef617",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":21221,"children":21222},{"id":7},[21223],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":21225,"children":21226},{},[21227,21240,21260,21273],{"type":1133,"tag":1195,"props":21228,"children":21229},{},[21230,21232,21239],{"type":1138,"value":21231},"testing notes for 1.0.0 (",{"type":1133,"tag":1173,"props":21233,"children":21236},{"href":21234,"rel":21235},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F37284bf0baf92dd792461ee200691f4b7737b0d1",[1177],[21237],{"type":1138,"value":21238},"37284bf",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21241,"children":21242},{},[21243,21245,21252,21253],{"type":1138,"value":21244},"documentation for 1.0, from installing to recovering the panel (",{"type":1133,"tag":1173,"props":21246,"children":21249},{"href":21247,"rel":21248},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13fc391732e179aa24925a9a7c5c2dd1a4da7573",[1177],[21250],{"type":1138,"value":21251},"13fc391",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21254,"children":21257},{"href":21255,"rel":21256},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F53",[1177],[21258],{"type":1138,"value":21259},"#53",{"type":1133,"tag":1195,"props":21261,"children":21262},{},[21263,21265,21272],{"type":1138,"value":21264},"testing notes for 0.6.0 (",{"type":1133,"tag":1173,"props":21266,"children":21269},{"href":21267,"rel":21268},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faa9b15381f4ee1f402890eb96f1a2ca96fd39315",[1177],[21270],{"type":1138,"value":21271},"aa9b153",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21274,"children":21275},{},[21276,21278,21285],{"type":1138,"value":21277},"testing notes for 0.5.0; installer says when the signature checked out (",{"type":1133,"tag":1173,"props":21279,"children":21282},{"href":21280,"rel":21281},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8c3d9d65c13a103a5544b5a0325e3e7571f653ee",[1177],[21283],{"type":1138,"value":21284},"8c3d9d6",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":21287,"children":21288},{"id":1664},[21289],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":21291,"children":21292},{},[21293,21317,21334,21351,21368,21385],{"type":1133,"tag":1195,"props":21294,"children":21295},{},[21296,21300,21302,21309,21310],{"type":1133,"tag":1146,"props":21297,"children":21298},{},[21299],{"type":1138,"value":11681},{"type":1138,"value":21301}," upgrade from every published release, checking migrations and data come through (",{"type":1133,"tag":1173,"props":21303,"children":21306},{"href":21304,"rel":21305},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9749521b5c99f6c01787dc77dbc573221c998099",[1177],[21307],{"type":1138,"value":21308},"9749521",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21311,"children":21314},{"href":21312,"rel":21313},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F52",[1177],[21315],{"type":1138,"value":21316},"#52",{"type":1133,"tag":1195,"props":21318,"children":21319},{},[21320,21324,21326,21333],{"type":1133,"tag":1146,"props":21321,"children":21322},{},[21323],{"type":1138,"value":11650},{"type":1138,"value":21325}," accept the signing key as pasted (flattened PEM, escaped newlines, or an OpenSSH key) (",{"type":1133,"tag":1173,"props":21327,"children":21330},{"href":21328,"rel":21329},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7636f6859dc921d19b0c67387d22e0d4794cecf0",[1177],[21331],{"type":1138,"value":21332},"7636f68",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21335,"children":21336},{},[21337,21341,21343,21350],{"type":1133,"tag":1146,"props":21338,"children":21339},{},[21340],{"type":1138,"value":11681},{"type":1138,"value":21342}," stop on a failed off-site upload and show every backup's state; log upload failures (",{"type":1133,"tag":1173,"props":21344,"children":21347},{"href":21345,"rel":21346},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5ef5a7914bd7ddedb8ab92f60a11c6b2218c78a7",[1177],[21348],{"type":1138,"value":21349},"5ef5a79",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21352,"children":21353},{},[21354,21358,21360,21367],{"type":1133,"tag":1146,"props":21355,"children":21356},{},[21357],{"type":1138,"value":11681},{"type":1138,"value":21359}," use S3Mock for off-site storage; MinIO's images are no longer public (",{"type":1133,"tag":1173,"props":21361,"children":21364},{"href":21362,"rel":21363},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc448f7b670d61fda63340c78906b3d351a5757a1",[1177],[21365],{"type":1138,"value":21366},"c448f7b",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21369,"children":21370},{},[21371,21375,21377,21384],{"type":1133,"tag":1146,"props":21372,"children":21373},{},[21374],{"type":1138,"value":11650},{"type":1138,"value":21376}," say plainly when the signing key secret can't be read or doesn't match (",{"type":1133,"tag":1173,"props":21378,"children":21381},{"href":21379,"rel":21380},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb0202f1a7a7c5192c0b31d31c9bd0140d215d211",[1177],[21382],{"type":1138,"value":21383},"b0202f1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21386,"children":21387},{},[21388,21392,21394,21401],{"type":1133,"tag":1146,"props":21389,"children":21390},{},[21391],{"type":1138,"value":11681},{"type":1138,"value":21393}," update to a signed release, and roll back one whose panel won't start (",{"type":1133,"tag":1173,"props":21395,"children":21398},{"href":21396,"rel":21397},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbf49f0b653bab0dbfb425bfdf41cd7c26697f90f",[1177],[21399],{"type":1138,"value":21400},"bf49f0b",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":21403,"children":21404},{},[21405,21409,21410],{"type":1133,"tag":1146,"props":21406,"children":21407},{},[21408],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":21411,"children":21414},{"href":21412,"rel":21413},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.4.0...v1.0.0",[1177],[21415],{"type":1138,"value":21412},{"data":21417,"body":21418},{},{"type":1130,"children":21419},[21420,21424,21715,21719,21811,21815,21863,21867,21959],{"type":1133,"tag":1184,"props":21421,"children":21422},{"id":1186},[21423],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":21425,"children":21426},{},[21427,21446,21460,21474,21488,21507,21526,21540,21559,21573,21592,21606,21620,21639,21658,21677,21696],{"type":1133,"tag":1195,"props":21428,"children":21429},{},[21430,21434,21435,21440,21441],{"type":1133,"tag":1146,"props":21431,"children":21432},{},[21433],{"type":1138,"value":20749},{"type":1138,"value":20751},{"type":1133,"tag":1173,"props":21436,"children":21438},{"href":20754,"rel":21437},[1177],[21439],{"type":1138,"value":20758},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21442,"children":21444},{"href":20762,"rel":21443},[1177],[21445],{"type":1138,"value":20766},{"type":1133,"tag":1195,"props":21447,"children":21448},{},[21449,21453,21454,21459],{"type":1133,"tag":1146,"props":21450,"children":21451},{},[21452],{"type":1138,"value":20774},{"type":1138,"value":20776},{"type":1133,"tag":1173,"props":21455,"children":21457},{"href":20779,"rel":21456},[1177],[21458],{"type":1138,"value":20783},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21461,"children":21462},{},[21463,21467,21468,21473],{"type":1133,"tag":1146,"props":21464,"children":21465},{},[21466],{"type":1138,"value":20774},{"type":1138,"value":20793},{"type":1133,"tag":1173,"props":21469,"children":21471},{"href":20796,"rel":21470},[1177],[21472],{"type":1138,"value":20800},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21475,"children":21476},{},[21477,21481,21482,21487],{"type":1133,"tag":1146,"props":21478,"children":21479},{},[21480],{"type":1138,"value":20774},{"type":1138,"value":20810},{"type":1133,"tag":1173,"props":21483,"children":21485},{"href":20813,"rel":21484},[1177],[21486],{"type":1138,"value":20817},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21489,"children":21490},{},[21491,21495,21496,21501,21502],{"type":1133,"tag":1146,"props":21492,"children":21493},{},[21494],{"type":1138,"value":10716},{"type":1138,"value":20827},{"type":1133,"tag":1173,"props":21497,"children":21499},{"href":20830,"rel":21498},[1177],[21500],{"type":1138,"value":20834},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21503,"children":21505},{"href":20838,"rel":21504},[1177],[21506],{"type":1138,"value":20842},{"type":1133,"tag":1195,"props":21508,"children":21509},{},[21510,21514,21515,21520,21521],{"type":1133,"tag":1146,"props":21511,"children":21512},{},[21513],{"type":1138,"value":13530},{"type":1138,"value":20851},{"type":1133,"tag":1173,"props":21516,"children":21518},{"href":20854,"rel":21517},[1177],[21519],{"type":1138,"value":20858},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21522,"children":21524},{"href":20862,"rel":21523},[1177],[21525],{"type":1138,"value":20866},{"type":1133,"tag":1195,"props":21527,"children":21528},{},[21529,21533,21534,21539],{"type":1133,"tag":1146,"props":21530,"children":21531},{},[21532],{"type":1138,"value":13530},{"type":1138,"value":20875},{"type":1133,"tag":1173,"props":21535,"children":21537},{"href":20878,"rel":21536},[1177],[21538],{"type":1138,"value":20882},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21541,"children":21542},{},[21543,21547,21548,21553,21554],{"type":1133,"tag":1146,"props":21544,"children":21545},{},[21546],{"type":1138,"value":20891},{"type":1138,"value":20893},{"type":1133,"tag":1173,"props":21549,"children":21551},{"href":20896,"rel":21550},[1177],[21552],{"type":1138,"value":20900},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21555,"children":21557},{"href":20904,"rel":21556},[1177],[21558],{"type":1138,"value":20908},{"type":1133,"tag":1195,"props":21560,"children":21561},{},[21562,21566,21567,21572],{"type":1133,"tag":1146,"props":21563,"children":21564},{},[21565],{"type":1138,"value":20891},{"type":1138,"value":20917},{"type":1133,"tag":1173,"props":21568,"children":21570},{"href":20920,"rel":21569},[1177],[21571],{"type":1138,"value":20924},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21574,"children":21575},{},[21576,21580,21581,21586,21587],{"type":1133,"tag":1146,"props":21577,"children":21578},{},[21579],{"type":1138,"value":20933},{"type":1138,"value":20935},{"type":1133,"tag":1173,"props":21582,"children":21584},{"href":20938,"rel":21583},[1177],[21585],{"type":1138,"value":20942},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21588,"children":21590},{"href":20946,"rel":21589},[1177],[21591],{"type":1138,"value":20950},{"type":1133,"tag":1195,"props":21593,"children":21594},{},[21595,21599,21600,21605],{"type":1133,"tag":1146,"props":21596,"children":21597},{},[21598],{"type":1138,"value":10560},{"type":1138,"value":20959},{"type":1133,"tag":1173,"props":21601,"children":21603},{"href":20962,"rel":21602},[1177],[21604],{"type":1138,"value":20966},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21607,"children":21608},{},[21609,21613,21614,21619],{"type":1133,"tag":1146,"props":21610,"children":21611},{},[21612],{"type":1138,"value":6011},{"type":1138,"value":20976},{"type":1133,"tag":1173,"props":21615,"children":21617},{"href":20979,"rel":21616},[1177],[21618],{"type":1138,"value":20983},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21621,"children":21622},{},[21623,21627,21628,21633,21634],{"type":1133,"tag":1146,"props":21624,"children":21625},{},[21626],{"type":1138,"value":20992},{"type":1138,"value":20994},{"type":1133,"tag":1173,"props":21629,"children":21631},{"href":20997,"rel":21630},[1177],[21632],{"type":1138,"value":21001},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21635,"children":21637},{"href":21005,"rel":21636},[1177],[21638],{"type":1138,"value":21009},{"type":1133,"tag":1195,"props":21640,"children":21641},{},[21642,21646,21647,21652,21653],{"type":1133,"tag":1146,"props":21643,"children":21644},{},[21645],{"type":1138,"value":21017},{"type":1138,"value":21019},{"type":1133,"tag":1173,"props":21648,"children":21650},{"href":21022,"rel":21649},[1177],[21651],{"type":1138,"value":21026},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21654,"children":21656},{"href":21030,"rel":21655},[1177],[21657],{"type":1138,"value":21034},{"type":1133,"tag":1195,"props":21659,"children":21660},{},[21661,21665,21666,21671,21672],{"type":1133,"tag":1146,"props":21662,"children":21663},{},[21664],{"type":1138,"value":1221},{"type":1138,"value":21043},{"type":1133,"tag":1173,"props":21667,"children":21669},{"href":21046,"rel":21668},[1177],[21670],{"type":1138,"value":21050},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21673,"children":21675},{"href":21030,"rel":21674},[1177],[21676],{"type":1138,"value":21034},{"type":1133,"tag":1195,"props":21678,"children":21679},{},[21680,21684,21685,21690,21691],{"type":1133,"tag":1146,"props":21681,"children":21682},{},[21683],{"type":1138,"value":11650},{"type":1138,"value":21065},{"type":1133,"tag":1173,"props":21686,"children":21688},{"href":21068,"rel":21687},[1177],[21689],{"type":1138,"value":21072},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21692,"children":21694},{"href":21076,"rel":21693},[1177],[21695],{"type":1138,"value":21080},{"type":1133,"tag":1195,"props":21697,"children":21698},{},[21699,21703,21704,21709,21710],{"type":1133,"tag":1146,"props":21700,"children":21701},{},[21702],{"type":1138,"value":4598},{"type":1138,"value":21089},{"type":1133,"tag":1173,"props":21705,"children":21707},{"href":21092,"rel":21706},[1177],[21708],{"type":1138,"value":21096},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21711,"children":21713},{"href":21100,"rel":21712},[1177],[21714],{"type":1138,"value":21104},{"type":1133,"tag":1184,"props":21716,"children":21717},{"id":1233},[21718],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":21720,"children":21721},{},[21722,21741,21755,21769,21783,21797],{"type":1133,"tag":1195,"props":21723,"children":21724},{},[21725,21729,21730,21735,21736],{"type":1133,"tag":1146,"props":21726,"children":21727},{},[21728],{"type":1138,"value":20774},{"type":1138,"value":21120},{"type":1133,"tag":1173,"props":21731,"children":21733},{"href":21123,"rel":21732},[1177],[21734],{"type":1138,"value":21127},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21737,"children":21739},{"href":20762,"rel":21738},[1177],[21740],{"type":1138,"value":20766},{"type":1133,"tag":1195,"props":21742,"children":21743},{},[21744,21748,21749,21754],{"type":1133,"tag":1146,"props":21745,"children":21746},{},[21747],{"type":1138,"value":13530},{"type":1138,"value":21142},{"type":1133,"tag":1173,"props":21750,"children":21752},{"href":21145,"rel":21751},[1177],[21753],{"type":1138,"value":21149},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21756,"children":21757},{},[21758,21762,21763,21768],{"type":1133,"tag":1146,"props":21759,"children":21760},{},[21761],{"type":1138,"value":11145},{"type":1138,"value":21159},{"type":1133,"tag":1173,"props":21764,"children":21766},{"href":21162,"rel":21765},[1177],[21767],{"type":1138,"value":21166},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21770,"children":21771},{},[21772,21776,21777,21782],{"type":1133,"tag":1146,"props":21773,"children":21774},{},[21775],{"type":1138,"value":20891},{"type":1138,"value":21176},{"type":1133,"tag":1173,"props":21778,"children":21780},{"href":21179,"rel":21779},[1177],[21781],{"type":1138,"value":21183},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21784,"children":21785},{},[21786,21790,21791,21796],{"type":1133,"tag":1146,"props":21787,"children":21788},{},[21789],{"type":1138,"value":21192},{"type":1138,"value":21194},{"type":1133,"tag":1173,"props":21792,"children":21794},{"href":21197,"rel":21793},[1177],[21795],{"type":1138,"value":21201},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21798,"children":21799},{},[21800,21804,21805,21810],{"type":1133,"tag":1146,"props":21801,"children":21802},{},[21803],{"type":1138,"value":1221},{"type":1138,"value":21211},{"type":1133,"tag":1173,"props":21806,"children":21808},{"href":21214,"rel":21807},[1177],[21809],{"type":1138,"value":21218},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":21812,"children":21813},{"id":7},[21814],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":21816,"children":21817},{},[21818,21828,21843,21853],{"type":1133,"tag":1195,"props":21819,"children":21820},{},[21821,21822,21827],{"type":1138,"value":21231},{"type":1133,"tag":1173,"props":21823,"children":21825},{"href":21234,"rel":21824},[1177],[21826],{"type":1138,"value":21238},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21829,"children":21830},{},[21831,21832,21837,21838],{"type":1138,"value":21244},{"type":1133,"tag":1173,"props":21833,"children":21835},{"href":21247,"rel":21834},[1177],[21836],{"type":1138,"value":21251},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21839,"children":21841},{"href":21255,"rel":21840},[1177],[21842],{"type":1138,"value":21259},{"type":1133,"tag":1195,"props":21844,"children":21845},{},[21846,21847,21852],{"type":1138,"value":21264},{"type":1133,"tag":1173,"props":21848,"children":21850},{"href":21267,"rel":21849},[1177],[21851],{"type":1138,"value":21271},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21854,"children":21855},{},[21856,21857,21862],{"type":1138,"value":21277},{"type":1133,"tag":1173,"props":21858,"children":21860},{"href":21280,"rel":21859},[1177],[21861],{"type":1138,"value":21284},{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":21864,"children":21865},{"id":1664},[21866],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":21868,"children":21869},{},[21870,21889,21903,21917,21931,21945],{"type":1133,"tag":1195,"props":21871,"children":21872},{},[21873,21877,21878,21883,21884],{"type":1133,"tag":1146,"props":21874,"children":21875},{},[21876],{"type":1138,"value":11681},{"type":1138,"value":21301},{"type":1133,"tag":1173,"props":21879,"children":21881},{"href":21304,"rel":21880},[1177],[21882],{"type":1138,"value":21308},{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":21885,"children":21887},{"href":21312,"rel":21886},[1177],[21888],{"type":1138,"value":21316},{"type":1133,"tag":1195,"props":21890,"children":21891},{},[21892,21896,21897,21902],{"type":1133,"tag":1146,"props":21893,"children":21894},{},[21895],{"type":1138,"value":11650},{"type":1138,"value":21325},{"type":1133,"tag":1173,"props":21898,"children":21900},{"href":21328,"rel":21899},[1177],[21901],{"type":1138,"value":21332},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21904,"children":21905},{},[21906,21910,21911,21916],{"type":1133,"tag":1146,"props":21907,"children":21908},{},[21909],{"type":1138,"value":11681},{"type":1138,"value":21342},{"type":1133,"tag":1173,"props":21912,"children":21914},{"href":21345,"rel":21913},[1177],[21915],{"type":1138,"value":21349},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21918,"children":21919},{},[21920,21924,21925,21930],{"type":1133,"tag":1146,"props":21921,"children":21922},{},[21923],{"type":1138,"value":11681},{"type":1138,"value":21359},{"type":1133,"tag":1173,"props":21926,"children":21928},{"href":21362,"rel":21927},[1177],[21929],{"type":1138,"value":21366},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21932,"children":21933},{},[21934,21938,21939,21944],{"type":1133,"tag":1146,"props":21935,"children":21936},{},[21937],{"type":1138,"value":11650},{"type":1138,"value":21376},{"type":1133,"tag":1173,"props":21940,"children":21942},{"href":21379,"rel":21941},[1177],[21943],{"type":1138,"value":21383},{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":21946,"children":21947},{},[21948,21952,21953,21958],{"type":1133,"tag":1146,"props":21949,"children":21950},{},[21951],{"type":1138,"value":11681},{"type":1138,"value":21393},{"type":1133,"tag":1173,"props":21954,"children":21956},{"href":21396,"rel":21955},[1177],[21957],{"type":1138,"value":21400},{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":21960,"children":21961},{},[21962,21966,21967],{"type":1133,"tag":1146,"props":21963,"children":21964},{},[21965],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":21968,"children":21971},{"href":21969,"rel":21970},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.4.0...v0.5.0",[1177],[21972],{"type":1138,"value":21969},{"data":21974,"body":21975},{},{"type":1130,"children":21976},[21977,21981,22193,22197,22213,22217,22237],{"type":1133,"tag":1184,"props":21978,"children":21979},{"id":1186},[21980],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":21982,"children":21983},{},[21984,22009,22031,22055,22077,22101,22125,22147,22171],{"type":1133,"tag":1195,"props":21985,"children":21986},{},[21987,21992,21994,22001,22002],{"type":1133,"tag":1146,"props":21988,"children":21989},{},[21990],{"type":1138,"value":21991},"world:",{"type":1138,"value":21993}," Copy a world in card on the World tab (",{"type":1133,"tag":1173,"props":21995,"children":21998},{"href":21996,"rel":21997},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F825ca0ac6d92cacf39824df8285586c623967123",[1177],[21999],{"type":1138,"value":22000},"825ca0a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22003,"children":22006},{"href":22004,"rel":22005},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F20",[1177],[22007],{"type":1138,"value":22008},"#20",{"type":1133,"tag":1195,"props":22010,"children":22011},{},[22012,22016,22018,22025,22026],{"type":1133,"tag":1146,"props":22013,"children":22014},{},[22015],{"type":1138,"value":21991},{"type":1138,"value":22017}," copy another server's world over this one, after a backup (",{"type":1133,"tag":1173,"props":22019,"children":22022},{"href":22020,"rel":22021},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3ccb6abc382d78e9f536142510a9ee6c21da7c15",[1177],[22023],{"type":1138,"value":22024},"3ccb6ab",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22027,"children":22029},{"href":22004,"rel":22028},[1177],[22030],{"type":1138,"value":22008},{"type":1133,"tag":1195,"props":22032,"children":22033},{},[22034,22038,22040,22047,22048],{"type":1133,"tag":1146,"props":22035,"children":22036},{},[22037],{"type":1138,"value":20540},{"type":1138,"value":22039}," Clone card to copy a server, with or without its world (",{"type":1133,"tag":1173,"props":22041,"children":22044},{"href":22042,"rel":22043},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0999fdd5098bb33fa95cb793fb2a8012779e1397",[1177],[22045],{"type":1138,"value":22046},"0999fdd",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22049,"children":22052},{"href":22050,"rel":22051},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F43",[1177],[22053],{"type":1138,"value":22054},"#43",{"type":1133,"tag":1195,"props":22056,"children":22057},{},[22058,22062,22064,22071,22072],{"type":1133,"tag":1146,"props":22059,"children":22060},{},[22061],{"type":1138,"value":4598},{"type":1138,"value":22063}," clone a server through the create job, with or without its world (",{"type":1133,"tag":1173,"props":22065,"children":22068},{"href":22066,"rel":22067},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F87a5247d8e4b31c8ff56dbfd488bd63797c756a6",[1177],[22069],{"type":1138,"value":22070},"87a5247",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22073,"children":22075},{"href":22050,"rel":22074},[1177],[22076],{"type":1138,"value":22054},{"type":1133,"tag":1195,"props":22078,"children":22079},{},[22080,22084,22086,22093,22094],{"type":1133,"tag":1146,"props":22081,"children":22082},{},[22083],{"type":1138,"value":4598},{"type":1138,"value":22085}," DNS record helper for server hostnames (",{"type":1133,"tag":1173,"props":22087,"children":22090},{"href":22088,"rel":22089},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0248669cd0c827d7f9294b71474c77b71bcf393d",[1177],[22091],{"type":1138,"value":22092},"0248669",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22095,"children":22098},{"href":22096,"rel":22097},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F41",[1177],[22099],{"type":1138,"value":22100},"#41",{"type":1133,"tag":1195,"props":22102,"children":22103},{},[22104,22108,22110,22117,22118],{"type":1133,"tag":1146,"props":22105,"children":22106},{},[22107],{"type":1138,"value":4598},{"type":1138,"value":22109}," Address card in Settings, and copyable addresses on cards and the header (",{"type":1133,"tag":1173,"props":22111,"children":22114},{"href":22112,"rel":22113},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8cb915ce925a14c7660af9fd6e1dbb841df8fb2e",[1177],[22115],{"type":1138,"value":22116},"8cb915c",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22119,"children":22122},{"href":22120,"rel":22121},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F40",[1177],[22123],{"type":1138,"value":22124},"#40",{"type":1133,"tag":1195,"props":22126,"children":22127},{},[22128,22132,22134,22141,22142],{"type":1133,"tag":1146,"props":22129,"children":22130},{},[22131],{"type":1138,"value":4598},{"type":1138,"value":22133}," per-server hostnames in the database, spec, plans and resources (",{"type":1133,"tag":1173,"props":22135,"children":22138},{"href":22136,"rel":22137},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F16d20acf26e7629b9b8341d4e7b264bc27ac0634",[1177],[22139],{"type":1138,"value":22140},"16d20ac",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22143,"children":22145},{"href":22120,"rel":22144},[1177],[22146],{"type":1138,"value":22124},{"type":1133,"tag":1195,"props":22148,"children":22149},{},[22150,22154,22156,22163,22164],{"type":1133,"tag":1146,"props":22151,"children":22152},{},[22153],{"type":1138,"value":4598},{"type":1138,"value":22155}," show the memory budget on Servers and System, and cap sliders to it (",{"type":1133,"tag":1173,"props":22157,"children":22160},{"href":22158,"rel":22159},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4363df54f080875bf79402b7e814b51c84463b32",[1177],[22161],{"type":1138,"value":22162},"4363df5",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22165,"children":22168},{"href":22166,"rel":22167},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F42",[1177],[22169],{"type":1138,"value":22170},"#42",{"type":1133,"tag":1195,"props":22172,"children":22173},{},[22174,22178,22180,22187,22188],{"type":1133,"tag":1146,"props":22175,"children":22176},{},[22177],{"type":1138,"value":4598},{"type":1138,"value":22179}," a memory budget for create, import, plans and resources (",{"type":1133,"tag":1173,"props":22181,"children":22184},{"href":22182,"rel":22183},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2055f7f3125fa1a0040ef49264a7bcd36b46a820",[1177],[22185],{"type":1138,"value":22186},"2055f7f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22189,"children":22191},{"href":22166,"rel":22190},[1177],[22192],{"type":1138,"value":22170},{"type":1133,"tag":1184,"props":22194,"children":22195},{"id":7},[22196],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":22198,"children":22199},{},[22200],{"type":1133,"tag":1195,"props":22201,"children":22202},{},[22203,22205,22212],{"type":1138,"value":22204},"testing guide for 0.4.0 (",{"type":1133,"tag":1173,"props":22206,"children":22209},{"href":22207,"rel":22208},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0e60ad0c0a5340188befed5cdb8dc0fced8607c1",[1177],[22210],{"type":1138,"value":22211},"0e60ad0",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":22214,"children":22215},{"id":1664},[22216],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":22218,"children":22219},{},[22220],{"type":1133,"tag":1195,"props":22221,"children":22222},{},[22223,22227,22229,22236],{"type":1133,"tag":1146,"props":22224,"children":22225},{},[22226],{"type":1138,"value":11681},{"type":1138,"value":22228}," clone a running server with its world, and refuse an over-budget clone (",{"type":1133,"tag":1173,"props":22230,"children":22233},{"href":22231,"rel":22232},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fae62b83d691e758a85b40c728ebd1f69831f50d5",[1177],[22234],{"type":1138,"value":22235},"ae62b83",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":22238,"children":22239},{},[22240,22244,22245],{"type":1133,"tag":1146,"props":22241,"children":22242},{},[22243],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":22246,"children":22249},{"href":22247,"rel":22248},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.3.0...v0.4.0",[1177],[22250],{"type":1138,"value":22247},{"data":22252,"body":22253},{},{"type":1130,"children":22254},[22255,22259,22762,22766,22803,22807,22823,22827,22891],{"type":1133,"tag":1184,"props":22256,"children":22257},{"id":1186},[22258],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":22260,"children":22261},{},[22262,22286,22308,22332,22354,22376,22400,22422,22444,22468,22490,22512,22536,22558,22580,22604,22626,22648,22670,22694,22716,22740],{"type":1133,"tag":1195,"props":22263,"children":22264},{},[22265,22269,22271,22278,22279],{"type":1133,"tag":1146,"props":22266,"children":22267},{},[22268],{"type":1138,"value":21991},{"type":1138,"value":22270}," World tab with pre-generation progress and world reset (",{"type":1133,"tag":1173,"props":22272,"children":22275},{"href":22273,"rel":22274},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbecddd3a75924bff34f6b323052e4ff1c59cdca8",[1177],[22276],{"type":1138,"value":22277},"becddd3",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22280,"children":22283},{"href":22281,"rel":22282},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F39",[1177],[22284],{"type":1138,"value":22285},"#39",{"type":1133,"tag":1195,"props":22287,"children":22288},{},[22289,22293,22295,22302,22303],{"type":1133,"tag":1146,"props":22290,"children":22291},{},[22292],{"type":1138,"value":21991},{"type":1138,"value":22294}," Chunky pre-generation and world reset service and API (",{"type":1133,"tag":1173,"props":22296,"children":22299},{"href":22297,"rel":22298},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F939a22aa4af2f02e79097ec9dd0fc6297d19f962",[1177],[22300],{"type":1138,"value":22301},"939a22a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22304,"children":22306},{"href":22281,"rel":22305},[1177],[22307],{"type":1138,"value":22285},{"type":1133,"tag":1195,"props":22309,"children":22310},{},[22311,22315,22317,22324,22325],{"type":1133,"tag":1146,"props":22312,"children":22313},{},[22314],{"type":1138,"value":20540},{"type":1138,"value":22316}," Version card to change Minecraft version or loader (",{"type":1133,"tag":1173,"props":22318,"children":22321},{"href":22319,"rel":22320},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2070d467c5c6b9cd0a7b5a155c8529b86f9e6c1d",[1177],[22322],{"type":1138,"value":22323},"2070d46",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22326,"children":22329},{"href":22327,"rel":22328},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F38",[1177],[22330],{"type":1138,"value":22331},"#38",{"type":1133,"tag":1195,"props":22333,"children":22334},{},[22335,22339,22341,22348,22349],{"type":1133,"tag":1146,"props":22336,"children":22337},{},[22338],{"type":1138,"value":10716},{"type":1138,"value":22340}," change the Minecraft version or loader through a plan (",{"type":1133,"tag":1173,"props":22342,"children":22345},{"href":22343,"rel":22344},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbb56bc61150f04f4a4badc7b84e4050742fdf092",[1177],[22346],{"type":1138,"value":22347},"bb56bc6",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22350,"children":22352},{"href":22327,"rel":22351},[1177],[22353],{"type":1138,"value":22331},{"type":1133,"tag":1195,"props":22355,"children":22356},{},[22357,22361,22363,22370,22371],{"type":1133,"tag":1146,"props":22358,"children":22359},{},[22360],{"type":1138,"value":1221},{"type":1138,"value":22362}," server.configure can switch the server's Java (",{"type":1133,"tag":1173,"props":22364,"children":22367},{"href":22365,"rel":22366},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faf77a6431892ac55d5e810defc373a858f929cab",[1177],[22368],{"type":1138,"value":22369},"af77a64",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22372,"children":22374},{"href":22327,"rel":22373},[1177],[22375],{"type":1138,"value":22331},{"type":1133,"tag":1195,"props":22377,"children":22378},{},[22379,22383,22385,22392,22393],{"type":1133,"tag":1146,"props":22380,"children":22381},{},[22382],{"type":1138,"value":4598},{"type":1138,"value":22384}," pick Vanilla Tweaks packs from the Content tab (",{"type":1133,"tag":1173,"props":22386,"children":22389},{"href":22387,"rel":22388},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2de5c02891cf40954861dae7dd2951d50c9d5579",[1177],[22390],{"type":1138,"value":22391},"2de5c02",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22394,"children":22397},{"href":22395,"rel":22396},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F37",[1177],[22398],{"type":1138,"value":22399},"#37",{"type":1133,"tag":1195,"props":22401,"children":22402},{},[22403,22407,22409,22416,22417],{"type":1133,"tag":1146,"props":22404,"children":22405},{},[22406],{"type":1138,"value":4598},{"type":1138,"value":22408}," install Vanilla Tweaks packs through the spec, unwrapping their zips (",{"type":1133,"tag":1173,"props":22410,"children":22413},{"href":22411,"rel":22412},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fee4444ffed5eae52d34f3cf86a61dbb726c3cdb1",[1177],[22414],{"type":1138,"value":22415},"ee4444f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22418,"children":22420},{"href":22395,"rel":22419},[1177],[22421],{"type":1138,"value":22399},{"type":1133,"tag":1195,"props":22423,"children":22424},{},[22425,22429,22431,22438,22439],{"type":1133,"tag":1146,"props":22426,"children":22427},{},[22428],{"type":1138,"value":10560},{"type":1138,"value":22430}," add Vanilla Tweaks datapacks and crafting tweaks (",{"type":1133,"tag":1173,"props":22432,"children":22435},{"href":22433,"rel":22434},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9c2dbc3ca3dc5992a4088efaa22d6409fb94d45a",[1177],[22436],{"type":1138,"value":22437},"9c2dbc3",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22440,"children":22442},{"href":22395,"rel":22441},[1177],[22443],{"type":1138,"value":22399},{"type":1133,"tag":1195,"props":22445,"children":22446},{},[22447,22451,22453,22460,22461],{"type":1133,"tag":1146,"props":22448,"children":22449},{},[22450],{"type":1138,"value":4598},{"type":1138,"value":22452}," add the Content tab, with every change reviewed as a plan (",{"type":1133,"tag":1173,"props":22454,"children":22457},{"href":22455,"rel":22456},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5af6ee5e4faee8cd3a1884c5b19ffc2624df66d2",[1177],[22458],{"type":1138,"value":22459},"5af6ee5",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22462,"children":22465},{"href":22463,"rel":22464},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F36",[1177],[22466],{"type":1138,"value":22467},"#36",{"type":1133,"tag":1195,"props":22469,"children":22470},{},[22471,22475,22477,22484,22485],{"type":1133,"tag":1146,"props":22472,"children":22473},{},[22474],{"type":1138,"value":4598},{"type":1138,"value":22476}," list, search and check updates for a server's content (",{"type":1133,"tag":1173,"props":22478,"children":22481},{"href":22479,"rel":22480},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0679c8325db6f833fac524363590f4e3380b903",[1177],[22482],{"type":1138,"value":22483},"d0679c8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22486,"children":22488},{"href":22463,"rel":22487},[1177],[22489],{"type":1138,"value":22467},{"type":1133,"tag":1195,"props":22491,"children":22492},{},[22493,22497,22499,22506,22507],{"type":1133,"tag":1146,"props":22494,"children":22495},{},[22496],{"type":1138,"value":4598},{"type":1138,"value":22498}," let the Modrinth address be set, for mirrors and tests (",{"type":1133,"tag":1173,"props":22500,"children":22503},{"href":22501,"rel":22502},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F77b9196f6e98a0cec82fa1059d2329f957b9ed98",[1177],[22504],{"type":1138,"value":22505},"77b9196",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22508,"children":22510},{"href":22463,"rel":22509},[1177],[22511],{"type":1138,"value":22467},{"type":1133,"tag":1195,"props":22513,"children":22514},{},[22515,22519,22521,22528,22529],{"type":1133,"tag":1146,"props":22516,"children":22517},{},[22518],{"type":1138,"value":4598},{"type":1138,"value":22520}," edit, review and apply a server's spec from its YAML tab (",{"type":1133,"tag":1173,"props":22522,"children":22525},{"href":22523,"rel":22524},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2cc711fa9dfa5b5dadf8cf594bc76fa10ff19dbb",[1177],[22526],{"type":1138,"value":22527},"2cc711f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22530,"children":22533},{"href":22531,"rel":22532},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F35",[1177],[22534],{"type":1138,"value":22535},"#35",{"type":1133,"tag":1195,"props":22537,"children":22538},{},[22539,22543,22545,22552,22553],{"type":1133,"tag":1146,"props":22540,"children":22541},{},[22542],{"type":1138,"value":4598},{"type":1138,"value":22544}," add a YAML editor and a plan view (",{"type":1133,"tag":1173,"props":22546,"children":22549},{"href":22547,"rel":22548},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F92f941a25e3b55a8cf7b47606b4b574b569f7a63",[1177],[22550],{"type":1138,"value":22551},"92f941a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22554,"children":22556},{"href":22531,"rel":22555},[1177],[22557],{"type":1138,"value":22535},{"type":1133,"tag":1195,"props":22559,"children":22560},{},[22561,22565,22567,22574,22575],{"type":1133,"tag":1146,"props":22562,"children":22563},{},[22564],{"type":1138,"value":4598},{"type":1138,"value":22566}," create a server from a YAML spec (",{"type":1133,"tag":1173,"props":22568,"children":22571},{"href":22569,"rel":22570},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffb608cb3557cbc1da287a57cd86efd5aaa61edfa",[1177],[22572],{"type":1138,"value":22573},"fb608cb",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22576,"children":22578},{"href":22531,"rel":22577},[1177],[22579],{"type":1138,"value":22535},{"type":1133,"tag":1195,"props":22581,"children":22582},{},[22583,22587,22589,22596,22597],{"type":1133,"tag":1146,"props":22584,"children":22585},{},[22586],{"type":1138,"value":4598},{"type":1138,"value":22588}," add plan and apply endpoints (",{"type":1133,"tag":1173,"props":22590,"children":22593},{"href":22591,"rel":22592},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F571f001fe32851889cd4018948e57af411ca696e",[1177],[22594],{"type":1138,"value":22595},"571f001",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22598,"children":22601},{"href":22599,"rel":22600},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F34",[1177],[22602],{"type":1138,"value":22603},"#34",{"type":1133,"tag":1195,"props":22605,"children":22606},{},[22607,22611,22613,22620,22621],{"type":1133,"tag":1146,"props":22608,"children":22609},{},[22610],{"type":1138,"value":4598},{"type":1138,"value":22612}," plan a spec change and apply it as a job (",{"type":1133,"tag":1173,"props":22614,"children":22617},{"href":22615,"rel":22616},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fac647ca3199f7788beeadd10d53b34bf894656ac",[1177],[22618],{"type":1138,"value":22619},"ac647ca",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22622,"children":22624},{"href":22599,"rel":22623},[1177],[22625],{"type":1138,"value":22603},{"type":1133,"tag":1195,"props":22627,"children":22628},{},[22629,22633,22635,22642,22643],{"type":1133,"tag":1146,"props":22630,"children":22631},{},[22632],{"type":1138,"value":4598},{"type":1138,"value":22634}," store a server's content list and read its lockfile (",{"type":1133,"tag":1173,"props":22636,"children":22639},{"href":22637,"rel":22638},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F778c6404ef6048201227dc314759db4165d9e63c",[1177],[22640],{"type":1138,"value":22641},"778c640",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22644,"children":22646},{"href":22599,"rel":22645},[1177],[22647],{"type":1138,"value":22603},{"type":1133,"tag":1195,"props":22649,"children":22650},{},[22651,22655,22657,22664,22665],{"type":1133,"tag":1146,"props":22652,"children":22653},{},[22654],{"type":1138,"value":10560},{"type":1138,"value":22656}," keep locked versions when resolving content (",{"type":1133,"tag":1173,"props":22658,"children":22661},{"href":22659,"rel":22660},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc66643f7c1066e4c085cfb2114a30a85871267a0",[1177],[22662],{"type":1138,"value":22663},"c66643f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22666,"children":22668},{"href":22599,"rel":22667},[1177],[22669],{"type":1138,"value":22603},{"type":1133,"tag":1195,"props":22671,"children":22672},{},[22673,22677,22679,22686,22687],{"type":1133,"tag":1146,"props":22674,"children":22675},{},[22676],{"type":1138,"value":10560},{"type":1138,"value":22678}," add link content and resolve dependencies across a content list (",{"type":1133,"tag":1173,"props":22680,"children":22683},{"href":22681,"rel":22682},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb9a67701d1a7bef0693267c5253bcf81f5286c85",[1177],[22684],{"type":1138,"value":22685},"b9a6770",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22688,"children":22691},{"href":22689,"rel":22690},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F33",[1177],[22692],{"type":1138,"value":22693},"#33",{"type":1133,"tag":1195,"props":22695,"children":22696},{},[22697,22701,22703,22710,22711],{"type":1133,"tag":1146,"props":22698,"children":22699},{},[22700],{"type":1138,"value":10560},{"type":1138,"value":22702}," find and resolve mods and datapacks on Modrinth (",{"type":1133,"tag":1173,"props":22704,"children":22707},{"href":22705,"rel":22706},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa333920ed9fa7273810a2b4eb3f47e0d4918d93f",[1177],[22708],{"type":1138,"value":22709},"a333920",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22712,"children":22714},{"href":22689,"rel":22713},[1177],[22715],{"type":1138,"value":22693},{"type":1133,"tag":1195,"props":22717,"children":22718},{},[22719,22723,22725,22732,22733],{"type":1133,"tag":1146,"props":22720,"children":22721},{},[22722],{"type":1138,"value":4598},{"type":1138,"value":22724}," serve each server's spec, a spec checker and the JSON Schema (",{"type":1133,"tag":1173,"props":22726,"children":22729},{"href":22727,"rel":22728},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7a0c5567df49feee6eb3e8611c5257d5a41ce82f",[1177],[22730],{"type":1138,"value":22731},"7a0c556",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22734,"children":22737},{"href":22735,"rel":22736},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F32",[1177],[22738],{"type":1138,"value":22739},"#32",{"type":1133,"tag":1195,"props":22741,"children":22742},{},[22743,22747,22749,22756,22757],{"type":1133,"tag":1146,"props":22744,"children":22745},{},[22746],{"type":1138,"value":4598},{"type":1138,"value":22748}," describe a server as a YAML spec (",{"type":1133,"tag":1173,"props":22750,"children":22753},{"href":22751,"rel":22752},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd016bbf240716c4742c3cf41d484a3e02bfde33a",[1177],[22754],{"type":1138,"value":22755},"d016bbf",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22758,"children":22760},{"href":22735,"rel":22759},[1177],[22761],{"type":1138,"value":22739},{"type":1133,"tag":1184,"props":22763,"children":22764},{"id":1233},[22765],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":22767,"children":22768},{},[22769,22786],{"type":1133,"tag":1195,"props":22770,"children":22771},{},[22772,22776,22778,22785],{"type":1133,"tag":1146,"props":22773,"children":22774},{},[22775],{"type":1138,"value":13530},{"type":1138,"value":22777}," wait for RCON when a server has only just started (",{"type":1133,"tag":1173,"props":22779,"children":22782},{"href":22780,"rel":22781},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5591b62e1399d92518b4291641d4a29e97673e97",[1177],[22783],{"type":1138,"value":22784},"5591b62",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":22787,"children":22788},{},[22789,22793,22795,22802],{"type":1133,"tag":1146,"props":22790,"children":22791},{},[22792],{"type":1138,"value":4598},{"type":1138,"value":22794}," give two backups taken in the same second different names (",{"type":1133,"tag":1173,"props":22796,"children":22799},{"href":22797,"rel":22798},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F749a0ad2e3e1c43494e892a74b3548c7b166d034",[1177],[22800],{"type":1138,"value":22801},"749a0ad",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":22804,"children":22805},{"id":7},[22806],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":22808,"children":22809},{},[22810],{"type":1133,"tag":1195,"props":22811,"children":22812},{},[22813,22815,22822],{"type":1138,"value":22814},"testing guide for 0.3.0 (",{"type":1133,"tag":1173,"props":22816,"children":22819},{"href":22817,"rel":22818},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc699e7515fbc55c6c2980c4c64ae00833b53c794",[1177],[22820],{"type":1138,"value":22821},"c699e75",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":22824,"children":22825},{"id":1664},[22826],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":22828,"children":22829},{},[22830,22847,22869],{"type":1133,"tag":1195,"props":22831,"children":22832},{},[22833,22837,22839,22846],{"type":1133,"tag":1146,"props":22834,"children":22835},{},[22836],{"type":1138,"value":11681},{"type":1138,"value":22838}," add Chunky through a plan and pre-generate a small area (",{"type":1133,"tag":1173,"props":22840,"children":22843},{"href":22841,"rel":22842},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbaef1add79e4637053c5d37e1b7daf7321572b0f",[1177],[22844],{"type":1138,"value":22845},"baef1ad",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":22848,"children":22849},{},[22850,22854,22856,22863,22864],{"type":1133,"tag":1146,"props":22851,"children":22852},{},[22853],{"type":1138,"value":11681},{"type":1138,"value":22855}," try a Vanilla Tweaks pack, reporting rather than failing if the site changed (",{"type":1133,"tag":1173,"props":22857,"children":22860},{"href":22858,"rel":22859},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcee50e9696fb8656848c33e883a3670c59d39b10",[1177],[22861],{"type":1138,"value":22862},"cee50e9",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22865,"children":22867},{"href":22395,"rel":22866},[1177],[22868],{"type":1138,"value":22399},{"type":1133,"tag":1195,"props":22870,"children":22871},{},[22872,22876,22878,22885,22886],{"type":1133,"tag":1146,"props":22873,"children":22874},{},[22875],{"type":1138,"value":11681},{"type":1138,"value":22877}," add a Modrinth mod through plan and apply (",{"type":1133,"tag":1173,"props":22879,"children":22882},{"href":22880,"rel":22881},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ffdddaddeec44785862d3d57b0c2cee4187df3100",[1177],[22883],{"type":1138,"value":22884},"fdddadd",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22887,"children":22889},{"href":22599,"rel":22888},[1177],[22890],{"type":1138,"value":22603},{"type":1133,"tag":1134,"props":22892,"children":22893},{},[22894,22898,22899],{"type":1133,"tag":1146,"props":22895,"children":22896},{},[22897],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":22900,"children":22903},{"href":22901,"rel":22902},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.2.0...v0.3.0",[1177],[22904],{"type":1138,"value":22901},{"data":22906,"body":22907},{},{"type":1130,"children":22908},[22909,22913,23595,23599,23697,23701,23717,23721,23914],{"type":1133,"tag":1184,"props":22910,"children":22911},{"id":1186},[22912],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":22914,"children":22915},{},[22916,22940,22962,22986,23008,23030,23052,23074,23096,23118,23140,23164,23188,23210,23232,23254,23276,23298,23320,23343,23365,23389,23411,23435,23457,23481,23503,23527,23549,23571],{"type":1133,"tag":1195,"props":22917,"children":22918},{},[22919,22923,22925,22932,22933],{"type":1133,"tag":1146,"props":22920,"children":22921},{},[22922],{"type":1138,"value":4598},{"type":1138,"value":22924}," manage SSH access from System (",{"type":1133,"tag":1173,"props":22926,"children":22929},{"href":22927,"rel":22928},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1a9f7db0d7a764b921e0cabfbb8b4c10c1a0b1da",[1177],[22930],{"type":1138,"value":22931},"1a9f7db",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22934,"children":22937},{"href":22935,"rel":22936},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F28",[1177],[22938],{"type":1138,"value":22939},"#28",{"type":1133,"tag":1195,"props":22941,"children":22942},{},[22943,22947,22949,22956,22957],{"type":1133,"tag":1146,"props":22944,"children":22945},{},[22946],{"type":1138,"value":1221},{"type":1138,"value":22948}," close SSH, or open it for a while with a timer that survives restarts (",{"type":1133,"tag":1173,"props":22950,"children":22953},{"href":22951,"rel":22952},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F259f03d377e895e4220a45351c43090e0e529235",[1177],[22954],{"type":1138,"value":22955},"259f03d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22958,"children":22960},{"href":22935,"rel":22959},[1177],[22961],{"type":1138,"value":22939},{"type":1133,"tag":1195,"props":22963,"children":22964},{},[22965,22969,22971,22978,22979],{"type":1133,"tag":1146,"props":22966,"children":22967},{},[22968],{"type":1138,"value":4598},{"type":1138,"value":22970}," add import page (",{"type":1133,"tag":1173,"props":22972,"children":22975},{"href":22973,"rel":22974},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbd8d33ae391261f9fe1e4741c81fc8c5e60b993a",[1177],[22976],{"type":1138,"value":22977},"bd8d33a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":22980,"children":22983},{"href":22981,"rel":22982},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F27",[1177],[22984],{"type":1138,"value":22985},"#27",{"type":1133,"tag":1195,"props":22987,"children":22988},{},[22989,22993,22995,23002,23003],{"type":1133,"tag":1146,"props":22990,"children":22991},{},[22992],{"type":1138,"value":4598},{"type":1138,"value":22994}," add import API (",{"type":1133,"tag":1173,"props":22996,"children":22999},{"href":22997,"rel":22998},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6d3cf006bd73ac7ff667a00dc08b6f4b21d2a8e9",[1177],[23000],{"type":1138,"value":23001},"6d3cf00",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23004,"children":23006},{"href":22981,"rel":23005},[1177],[23007],{"type":1138,"value":22985},{"type":1133,"tag":1195,"props":23009,"children":23010},{},[23011,23015,23017,23024,23025],{"type":1133,"tag":1146,"props":23012,"children":23013},{},[23014],{"type":1138,"value":4598},{"type":1138,"value":23016}," stage imports from chunked uploads, links and deleted servers (",{"type":1133,"tag":1173,"props":23018,"children":23021},{"href":23019,"rel":23020},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2c8349fb8833a1daefcfe4c8e04f85379eb2e7ea",[1177],[23022],{"type":1138,"value":23023},"2c8349f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23026,"children":23028},{"href":22981,"rel":23027},[1177],[23029],{"type":1138,"value":22985},{"type":1133,"tag":1195,"props":23031,"children":23032},{},[23033,23037,23039,23046,23047],{"type":1133,"tag":1146,"props":23034,"children":23035},{},[23036],{"type":1138,"value":1221},{"type":1138,"value":23038}," keep deleted servers' archives readable by the panel (",{"type":1133,"tag":1173,"props":23040,"children":23043},{"href":23041,"rel":23042},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F73717edc03118c1dcd34ff0a29971c2b97a66979",[1177],[23044],{"type":1138,"value":23045},"73717ed",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23048,"children":23050},{"href":22981,"rel":23049},[1177],[23051],{"type":1138,"value":22985},{"type":1133,"tag":1195,"props":23053,"children":23054},{},[23055,23059,23061,23068,23069],{"type":1133,"tag":1146,"props":23056,"children":23057},{},[23058],{"type":1138,"value":4598},{"type":1138,"value":23060}," create a server from imported files (",{"type":1133,"tag":1173,"props":23062,"children":23065},{"href":23063,"rel":23064},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0595d95c4c842b7994f7da5b9013829a5c4c88a9",[1177],[23066],{"type":1138,"value":23067},"0595d95",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23070,"children":23072},{"href":22981,"rel":23071},[1177],[23073],{"type":1138,"value":22985},{"type":1133,"tag":1195,"props":23075,"children":23076},{},[23077,23081,23083,23090,23091],{"type":1133,"tag":1146,"props":23078,"children":23079},{},[23080],{"type":1138,"value":4598},{"type":1138,"value":23082}," work out what an imported folder is (",{"type":1133,"tag":1173,"props":23084,"children":23087},{"href":23085,"rel":23086},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fedb865e8ae191f10d7a4c488206c9a37f2f773fb",[1177],[23088],{"type":1138,"value":23089},"edb865e",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23092,"children":23094},{"href":22981,"rel":23093},[1177],[23095],{"type":1138,"value":22985},{"type":1133,"tag":1195,"props":23097,"children":23098},{},[23099,23103,23105,23112,23113],{"type":1133,"tag":1146,"props":23100,"children":23101},{},[23102],{"type":1138,"value":4598},{"type":1138,"value":23104}," read a world's Minecraft version from level.dat (",{"type":1133,"tag":1173,"props":23106,"children":23109},{"href":23107,"rel":23108},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F55844f3d014dac49a666f3ba7c947ae2337178c2",[1177],[23110],{"type":1138,"value":23111},"55844f3",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23114,"children":23116},{"href":22981,"rel":23115},[1177],[23117],{"type":1138,"value":22985},{"type":1133,"tag":1195,"props":23119,"children":23120},{},[23121,23125,23127,23134,23135],{"type":1133,"tag":1146,"props":23122,"children":23123},{},[23124],{"type":1138,"value":4598},{"type":1138,"value":23126}," add a zip reader for untrusted uploads (",{"type":1133,"tag":1173,"props":23128,"children":23131},{"href":23129,"rel":23130},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F13a5e19bc3b3425751088b9f5616579e22d7d760",[1177],[23132],{"type":1138,"value":23133},"13a5e19",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23136,"children":23138},{"href":22981,"rel":23137},[1177],[23139],{"type":1138,"value":22985},{"type":1133,"tag":1195,"props":23141,"children":23142},{},[23143,23147,23149,23156,23157],{"type":1133,"tag":1146,"props":23144,"children":23145},{},[23146],{"type":1138,"value":1221},{"type":1138,"value":23148}," restore the panel's group access to a server folder (",{"type":1133,"tag":1173,"props":23150,"children":23153},{"href":23151,"rel":23152},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F50b734689fc68906872f062927d6839d1ed4521f",[1177],[23154],{"type":1138,"value":23155},"50b7346",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23158,"children":23161},{"href":23159,"rel":23160},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F26",[1177],[23162],{"type":1138,"value":23163},"#26",{"type":1133,"tag":1195,"props":23165,"children":23166},{},[23167,23171,23173,23180,23181],{"type":1133,"tag":1146,"props":23168,"children":23169},{},[23170],{"type":1138,"value":4598},{"type":1138,"value":23172}," add export world card with share links (",{"type":1133,"tag":1173,"props":23174,"children":23177},{"href":23175,"rel":23176},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F980717ee1df0a575306afceba5e4ccd5681b5027",[1177],[23178],{"type":1138,"value":23179},"980717e",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23182,"children":23185},{"href":23183,"rel":23184},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F19",[1177],[23186],{"type":1138,"value":23187},"#19",{"type":1133,"tag":1195,"props":23189,"children":23190},{},[23191,23195,23197,23204,23205],{"type":1133,"tag":1146,"props":23192,"children":23193},{},[23194],{"type":1138,"value":4598},{"type":1138,"value":23196}," add export API and public share downloads (",{"type":1133,"tag":1173,"props":23198,"children":23201},{"href":23199,"rel":23200},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7c93418145f877f01bfdaada45856a5cacc04b5e",[1177],[23202],{"type":1138,"value":23203},"7c93418",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23206,"children":23208},{"href":23183,"rel":23207},[1177],[23209],{"type":1138,"value":23187},{"type":1133,"tag":1195,"props":23211,"children":23212},{},[23213,23217,23219,23226,23227],{"type":1133,"tag":1146,"props":23214,"children":23215},{},[23216],{"type":1138,"value":4598},{"type":1138,"value":23218}," export worlds as zips with expiring share links (",{"type":1133,"tag":1173,"props":23220,"children":23223},{"href":23221,"rel":23222},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F86de0d8258a337d92150485a3e1deb09b1725620",[1177],[23224],{"type":1138,"value":23225},"86de0d8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23228,"children":23230},{"href":23183,"rel":23229},[1177],[23231],{"type":1138,"value":23187},{"type":1133,"tag":1195,"props":23233,"children":23234},{},[23235,23239,23241,23248,23249],{"type":1133,"tag":1146,"props":23236,"children":23237},{},[23238],{"type":1138,"value":4598},{"type":1138,"value":23240}," add a streaming zip writer with zip64 (",{"type":1133,"tag":1173,"props":23242,"children":23245},{"href":23243,"rel":23244},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F56d114d248a06eb8b71273a9a589d898293baaab",[1177],[23246],{"type":1138,"value":23247},"56d114d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23250,"children":23252},{"href":23183,"rel":23251},[1177],[23253],{"type":1138,"value":23187},{"type":1133,"tag":1195,"props":23255,"children":23256},{},[23257,23261,23263,23270,23271],{"type":1133,"tag":1146,"props":23258,"children":23259},{},[23260],{"type":1138,"value":4598},{"type":1138,"value":23262}," add backups tab with schedule, restore and download (",{"type":1133,"tag":1173,"props":23264,"children":23267},{"href":23265,"rel":23266},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6d78997bce08fe6d6fea9448548aa0e3d568b26b",[1177],[23268],{"type":1138,"value":23269},"6d78997",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23272,"children":23274},{"href":23159,"rel":23273},[1177],[23275],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23277,"children":23278},{},[23279,23283,23285,23292,23293],{"type":1133,"tag":1146,"props":23280,"children":23281},{},[23282],{"type":1138,"value":4598},{"type":1138,"value":23284}," add backup API and scheduled backups (",{"type":1133,"tag":1173,"props":23286,"children":23289},{"href":23287,"rel":23288},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff44a9242a62d769c577f18f071131cfef0600ee8",[1177],[23290],{"type":1138,"value":23291},"f44a924",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23294,"children":23296},{"href":23159,"rel":23295},[1177],[23297],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23299,"children":23300},{},[23301,23305,23307,23314,23315],{"type":1133,"tag":1146,"props":23302,"children":23303},{},[23304],{"type":1138,"value":4598},{"type":1138,"value":23306}," back up and restore servers as jobs (",{"type":1133,"tag":1173,"props":23308,"children":23311},{"href":23309,"rel":23310},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F67dc9efe41a1a5e2121ca11ebe97836afe233543",[1177],[23312],{"type":1138,"value":23313},"67dc9ef",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23316,"children":23318},{"href":23159,"rel":23317},[1177],[23319],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23321,"children":23322},{},[23323,23328,23330,23337,23338],{"type":1133,"tag":1146,"props":23324,"children":23325},{},[23326],{"type":1138,"value":23327},"rcon:",{"type":1138,"value":23329}," allow a longer timeout for one slow command (",{"type":1133,"tag":1173,"props":23331,"children":23334},{"href":23332,"rel":23333},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9cfc87ceaab320f1d36ee40aed76e6fffd4e9578",[1177],[23335],{"type":1138,"value":23336},"9cfc87c",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23339,"children":23341},{"href":23159,"rel":23340},[1177],[23342],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23344,"children":23345},{},[23346,23350,23352,23359,23360],{"type":1133,"tag":1146,"props":23347,"children":23348},{},[23349],{"type":1138,"value":4598},{"type":1138,"value":23351}," archive server folders with tar and zstd, and prune by retention (",{"type":1133,"tag":1173,"props":23353,"children":23356},{"href":23354,"rel":23355},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd0b8f03b9adf92c0a25606c771ced88900074e7d",[1177],[23357],{"type":1138,"value":23358},"d0b8f03",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23361,"children":23363},{"href":23159,"rel":23362},[1177],[23364],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23366,"children":23367},{},[23368,23372,23374,23381,23382],{"type":1133,"tag":1146,"props":23369,"children":23370},{},[23371],{"type":1138,"value":4598},{"type":1138,"value":23373}," add logs tab with search and download (",{"type":1133,"tag":1173,"props":23375,"children":23378},{"href":23376,"rel":23377},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdd29f7a908ba218caef619c0276c4296429aadbe",[1177],[23379],{"type":1138,"value":23380},"dd29f7a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23383,"children":23386},{"href":23384,"rel":23385},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F25",[1177],[23387],{"type":1138,"value":23388},"#25",{"type":1133,"tag":1195,"props":23390,"children":23391},{},[23392,23396,23398,23405,23406],{"type":1133,"tag":1146,"props":23393,"children":23394},{},[23395],{"type":1138,"value":4598},{"type":1138,"value":23397}," read and search server logs (",{"type":1133,"tag":1173,"props":23399,"children":23402},{"href":23400,"rel":23401},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F843e18fc23d80eef3aceebd521b1c90d930faccd",[1177],[23403],{"type":1138,"value":23404},"843e18f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23407,"children":23409},{"href":23384,"rel":23408},[1177],[23410],{"type":1138,"value":23388},{"type":1133,"tag":1195,"props":23412,"children":23413},{},[23414,23418,23420,23427,23428],{"type":1133,"tag":1146,"props":23415,"children":23416},{},[23417],{"type":1138,"value":4598},{"type":1138,"value":23419}," add file manager tab (",{"type":1133,"tag":1173,"props":23421,"children":23424},{"href":23422,"rel":23423},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fceb343dc49ae66093d0d5b4284e4a36881bd6299",[1177],[23425],{"type":1138,"value":23426},"ceb343d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23429,"children":23432},{"href":23430,"rel":23431},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F24",[1177],[23433],{"type":1138,"value":23434},"#24",{"type":1133,"tag":1195,"props":23436,"children":23437},{},[23438,23442,23444,23451,23452],{"type":1133,"tag":1146,"props":23439,"children":23440},{},[23441],{"type":1138,"value":4598},{"type":1138,"value":23443}," confine file operations to the server folder (",{"type":1133,"tag":1173,"props":23445,"children":23448},{"href":23446,"rel":23447},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6460ae82e3cbaa221a40d198007a66f189df0821",[1177],[23449],{"type":1138,"value":23450},"6460ae8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23453,"children":23455},{"href":23430,"rel":23454},[1177],[23456],{"type":1138,"value":23434},{"type":1133,"tag":1195,"props":23458,"children":23459},{},[23460,23464,23466,23473,23474],{"type":1133,"tag":1146,"props":23461,"children":23462},{},[23463],{"type":1138,"value":4598},{"type":1138,"value":23465}," add players tab for who's online, whitelist, ops and bans (",{"type":1133,"tag":1173,"props":23467,"children":23470},{"href":23468,"rel":23469},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F1ded1efd87f4639ce8e51a56594d2e34c991bd04",[1177],[23471],{"type":1138,"value":23472},"1ded1ef",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23475,"children":23478},{"href":23476,"rel":23477},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F23",[1177],[23479],{"type":1138,"value":23480},"#23",{"type":1133,"tag":1195,"props":23482,"children":23483},{},[23484,23488,23490,23497,23498],{"type":1133,"tag":1146,"props":23485,"children":23486},{},[23487],{"type":1138,"value":10560},{"type":1138,"value":23489}," look up players with Mojang and derive offline UUIDs (",{"type":1133,"tag":1173,"props":23491,"children":23494},{"href":23492,"rel":23493},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5cfb14d1c913da441dc086071ffa0ced923b90c7",[1177],[23495],{"type":1138,"value":23496},"5cfb14d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23499,"children":23501},{"href":23476,"rel":23500},[1177],[23502],{"type":1138,"value":23480},{"type":1133,"tag":1195,"props":23504,"children":23505},{},[23506,23510,23512,23519,23520],{"type":1133,"tag":1146,"props":23507,"children":23508},{},[23509],{"type":1138,"value":4598},{"type":1138,"value":23511}," add settings tab for game settings, memory and port (",{"type":1133,"tag":1173,"props":23513,"children":23516},{"href":23514,"rel":23515},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefe655fa75c88c53b78db8d7220a5bc3f0c4b886",[1177],[23517],{"type":1138,"value":23518},"efe655f",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23521,"children":23524},{"href":23522,"rel":23523},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F22",[1177],[23525],{"type":1138,"value":23526},"#22",{"type":1133,"tag":1195,"props":23528,"children":23529},{},[23530,23534,23536,23543,23544],{"type":1133,"tag":1146,"props":23531,"children":23532},{},[23533],{"type":1138,"value":4598},{"type":1138,"value":23535}," edit server.properties without disturbing the file (",{"type":1133,"tag":1173,"props":23537,"children":23540},{"href":23538,"rel":23539},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbbea2158f983e9f45db88f823679e13a438927fb",[1177],[23541],{"type":1138,"value":23542},"bbea215",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23545,"children":23547},{"href":23522,"rel":23546},[1177],[23548],{"type":1138,"value":23526},{"type":1133,"tag":1195,"props":23550,"children":23551},{},[23552,23556,23558,23565,23566],{"type":1133,"tag":1146,"props":23553,"children":23554},{},[23555],{"type":1138,"value":1221},{"type":1138,"value":23557}," add server.configure for memory and port changes (",{"type":1133,"tag":1173,"props":23559,"children":23562},{"href":23560,"rel":23561},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F4b997dd9462e81f0e566ee92f09a4953d9080c67",[1177],[23563],{"type":1138,"value":23564},"4b997dd",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23567,"children":23569},{"href":23522,"rel":23568},[1177],[23570],{"type":1138,"value":23526},{"type":1133,"tag":1195,"props":23572,"children":23573},{},[23574,23578,23580,23587,23588],{"type":1133,"tag":1146,"props":23575,"children":23576},{},[23577],{"type":1138,"value":4598},{"type":1138,"value":23579}," delete a server with a typed name and passkey check (",{"type":1133,"tag":1173,"props":23581,"children":23584},{"href":23582,"rel":23583},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3be86d0e4a340a4b43b2d7a4afd69e6fe7653015",[1177],[23585],{"type":1138,"value":23586},"3be86d0",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23589,"children":23592},{"href":23590,"rel":23591},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F21",[1177],[23593],{"type":1138,"value":23594},"#21",{"type":1133,"tag":1184,"props":23596,"children":23597},{"id":1233},[23598],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":23600,"children":23601},{},[23602,23619,23636,23658,23680],{"type":1133,"tag":1195,"props":23603,"children":23604},{},[23605,23609,23611,23618],{"type":1133,"tag":1146,"props":23606,"children":23607},{},[23608],{"type":1138,"value":4598},{"type":1138,"value":23610}," restore into a server folder the panel doesn't own (",{"type":1133,"tag":1173,"props":23612,"children":23615},{"href":23613,"rel":23614},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F01c9ff34fc870f2e9c753c56668a0a16a3f82ae1",[1177],[23616],{"type":1138,"value":23617},"01c9ff3",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":23620,"children":23621},{},[23622,23626,23628,23635],{"type":1133,"tag":1146,"props":23623,"children":23624},{},[23625],{"type":1138,"value":4598},{"type":1138,"value":23627}," keep the cause when a cross-disk copy fails (",{"type":1133,"tag":1173,"props":23629,"children":23632},{"href":23630,"rel":23631},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbaf49462e84440060da5577af15a1c845b9c8eb9",[1177],[23633],{"type":1138,"value":23634},"baf4946",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":23637,"children":23638},{},[23639,23643,23645,23652,23653],{"type":1133,"tag":1146,"props":23640,"children":23641},{},[23642],{"type":1138,"value":4598},{"type":1138,"value":23644}," fix file permissions before backups, restores and file reads (",{"type":1133,"tag":1173,"props":23646,"children":23649},{"href":23647,"rel":23648},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2d8ea45ba61596974effe721af9c7c8ce9b8050d",[1177],[23650],{"type":1138,"value":23651},"2d8ea45",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23654,"children":23656},{"href":23159,"rel":23655},[1177],[23657],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23659,"children":23660},{},[23661,23665,23667,23674,23675],{"type":1133,"tag":1146,"props":23662,"children":23663},{},[23664],{"type":1138,"value":23327},{"type":1138,"value":23666}," send one packet at a time and end replies by size (",{"type":1133,"tag":1173,"props":23668,"children":23671},{"href":23669,"rel":23670},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9886e136921b09287af79811d3ef03e07d02ebbd",[1177],[23672],{"type":1138,"value":23673},"9886e13",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23676,"children":23678},{"href":23159,"rel":23677},[1177],[23679],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23681,"children":23682},{},[23683,23687,23689,23696],{"type":1133,"tag":1146,"props":23684,"children":23685},{},[23686],{"type":1138,"value":4598},{"type":1138,"value":23688}," keep the server name visible on phones (",{"type":1133,"tag":1173,"props":23690,"children":23693},{"href":23691,"rel":23692},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6a85e8c6fbff42d8d286118b0d1df085a2ecf335",[1177],[23694],{"type":1138,"value":23695},"6a85e8c",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":23698,"children":23699},{"id":7},[23700],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":23702,"children":23703},{},[23704],{"type":1133,"tag":1195,"props":23705,"children":23706},{},[23707,23709,23716],{"type":1138,"value":23708},"add testing notes for 0.2.0 (",{"type":1133,"tag":1173,"props":23710,"children":23713},{"href":23711,"rel":23712},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff3b55e865fca7b1c55944f6141cbd36d7b2f1d04",[1177],[23714],{"type":1138,"value":23715},"f3b55e8",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":23718,"children":23719},{"id":1664},[23720],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":23722,"children":23723},{},[23724,23741,23758,23775,23797,23814,23836,23858,23880,23897],{"type":1133,"tag":1195,"props":23725,"children":23726},{},[23727,23731,23733,23740],{"type":1133,"tag":1146,"props":23728,"children":23729},{},[23730],{"type":1138,"value":11681},{"type":1138,"value":23732}," open SSH by port, as the test image has no OpenSSH ufw profile (",{"type":1133,"tag":1173,"props":23734,"children":23737},{"href":23735,"rel":23736},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F93645b6e0529d565877fa137c89165ef2e0c4ce8",[1177],[23738],{"type":1138,"value":23739},"93645b6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":23742,"children":23743},{},[23744,23748,23750,23757],{"type":1133,"tag":1146,"props":23745,"children":23746},{},[23747],{"type":1138,"value":11681},{"type":1138,"value":23749}," turn ufw on, allowing everything, for the emergency SSH check (",{"type":1133,"tag":1173,"props":23751,"children":23754},{"href":23752,"rel":23753},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F21de4f62e49417b6e8e6ac635924edba443d141f",[1177],[23755],{"type":1138,"value":23756},"21de4f6",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":23759,"children":23760},{},[23761,23765,23767,23774],{"type":1133,"tag":1146,"props":23762,"children":23763},{},[23764],{"type":1138,"value":11681},{"type":1138,"value":23766}," confirm the restore with a native click inside the dialog, and report toasts (",{"type":1133,"tag":1173,"props":23768,"children":23771},{"href":23769,"rel":23770},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F63ee3c120e5e29058a0b5811815ac9e6bd2aa5a7",[1177],[23772],{"type":1138,"value":23773},"63ee3c1",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":23776,"children":23777},{},[23778,23782,23784,23791,23792],{"type":1133,"tag":1146,"props":23779,"children":23780},{},[23781],{"type":1138,"value":11681},{"type":1138,"value":23783}," check emergency SSH closes on time across an agent restart (",{"type":1133,"tag":1173,"props":23785,"children":23788},{"href":23786,"rel":23787},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Ff8cf8157b94e3926c110e16601001019e0d93e72",[1177],[23789],{"type":1138,"value":23790},"f8cf815",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23793,"children":23795},{"href":22935,"rel":23794},[1177],[23796],{"type":1138,"value":22939},{"type":1133,"tag":1195,"props":23798,"children":23799},{},[23800,23804,23806,23813],{"type":1133,"tag":1146,"props":23801,"children":23802},{},[23803],{"type":1138,"value":11681},{"type":1138,"value":23805}," open the backup menu with a native click (",{"type":1133,"tag":1173,"props":23807,"children":23810},{"href":23808,"rel":23809},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fc57495e3a55c20f17e58da03bb99fedaf31016f4",[1177],[23811],{"type":1138,"value":23812},"c57495e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":23815,"children":23816},{},[23817,23821,23823,23830,23831],{"type":1133,"tag":1146,"props":23818,"children":23819},{},[23820],{"type":1138,"value":11681},{"type":1138,"value":23822}," export a world and fetch it through a share link (",{"type":1133,"tag":1173,"props":23824,"children":23827},{"href":23825,"rel":23826},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbd5eaa8a98d6178236f4855ffa7b7f3f7f258cbe",[1177],[23828],{"type":1138,"value":23829},"bd5eaa8",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23832,"children":23834},{"href":23183,"rel":23833},[1177],[23835],{"type":1138,"value":23187},{"type":1133,"tag":1195,"props":23837,"children":23838},{},[23839,23843,23845,23852,23853],{"type":1133,"tag":1146,"props":23840,"children":23841},{},[23842],{"type":1138,"value":4598},{"type":1138,"value":23844}," share the save pause, lock and space check (",{"type":1133,"tag":1173,"props":23846,"children":23849},{"href":23847,"rel":23848},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F36176c22942d1658628c8fa319bafd85065ecfcb",[1177],[23850],{"type":1138,"value":23851},"36176c2",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23854,"children":23856},{"href":23183,"rel":23855},[1177],[23857],{"type":1138,"value":23187},{"type":1133,"tag":1195,"props":23859,"children":23860},{},[23861,23865,23867,23874,23875],{"type":1133,"tag":1146,"props":23862,"children":23863},{},[23864],{"type":1138,"value":11681},{"type":1138,"value":23866}," back up a running server and restore it through the UI (",{"type":1133,"tag":1173,"props":23868,"children":23871},{"href":23869,"rel":23870},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fceb80ade21706a9d7d1b4d193b6849db9bd98d83",[1177],[23872],{"type":1138,"value":23873},"ceb80ad",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23876,"children":23878},{"href":23159,"rel":23877},[1177],[23879],{"type":1138,"value":23163},{"type":1133,"tag":1195,"props":23881,"children":23882},{},[23883,23887,23889,23896],{"type":1133,"tag":1146,"props":23884,"children":23885},{},[23886],{"type":1138,"value":1221},{"type":1138,"value":23888}," fake Minecraft answers player commands and keeps list files (",{"type":1133,"tag":1173,"props":23890,"children":23893},{"href":23891,"rel":23892},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fff804184e670f02510a6dcb343e7ca91b481b612",[1177],[23894],{"type":1138,"value":23895},"ff80418",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":23898,"children":23899},{},[23900,23904,23906,23913],{"type":1133,"tag":1146,"props":23901,"children":23902},{},[23903],{"type":1138,"value":4598},{"type":1138,"value":23905}," give the server page tabs with nested routes (",{"type":1133,"tag":1173,"props":23907,"children":23910},{"href":23908,"rel":23909},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fcdad2b3034bfa9b0ec09b958848ce44999684f0e",[1177],[23911],{"type":1138,"value":23912},"cdad2b3",{"type":1138,"value":1213},{"type":1133,"tag":1134,"props":23915,"children":23916},{},[23917,23921,23922],{"type":1133,"tag":1146,"props":23918,"children":23919},{},[23920],{"type":1138,"value":1717},{"type":1138,"value":1719},{"type":1133,"tag":1173,"props":23923,"children":23926},{"href":23924,"rel":23925},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcompare\u002Fv0.1.0...v0.2.0",[1177],[23927],{"type":1138,"value":23924},{"data":23929,"body":23930},{},{"type":1130,"children":23931},[23932,23936,24373,24377,24426,24430,24466,24470],{"type":1133,"tag":1184,"props":23933,"children":23934},{"id":1186},[23935],{"type":1138,"value":1189},{"type":1133,"tag":1191,"props":23937,"children":23938},{},[23939,23963,23987,24009,24031,24055,24077,24101,24123,24145,24169,24201,24223,24247,24271,24288,24305,24322,24339,24356],{"type":1133,"tag":1195,"props":23940,"children":23941},{},[23942,23946,23948,23955,23956],{"type":1133,"tag":1146,"props":23943,"children":23944},{},[23945],{"type":1138,"value":6011},{"type":1138,"value":23947}," add one-line installer for Ubuntu and Debian (",{"type":1133,"tag":1173,"props":23949,"children":23952},{"href":23950,"rel":23951},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a9b32a5b274c7e85d77e4b0cb5e7379e25a6406",[1177],[23953],{"type":1138,"value":23954},"3a9b32a",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23957,"children":23960},{"href":23958,"rel":23959},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F14",[1177],[23961],{"type":1138,"value":23962},"#14",{"type":1133,"tag":1195,"props":23964,"children":23965},{},[23966,23970,23972,23979,23980],{"type":1133,"tag":1146,"props":23967,"children":23968},{},[23969],{"type":1138,"value":4598},{"type":1138,"value":23971}," add live server console with RCON commands (",{"type":1133,"tag":1173,"props":23973,"children":23976},{"href":23974,"rel":23975},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8ed4952a3893ad15f89d0bc28ca05b41ba22ced3",[1177],[23977],{"type":1138,"value":23978},"8ed4952",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":23981,"children":23984},{"href":23982,"rel":23983},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F13",[1177],[23985],{"type":1138,"value":23986},"#13",{"type":1133,"tag":1195,"props":23988,"children":23989},{},[23990,23994,23996,24003,24004],{"type":1133,"tag":1146,"props":23991,"children":23992},{},[23993],{"type":1138,"value":4598},{"type":1138,"value":23995}," add log tailer and console hub (",{"type":1133,"tag":1173,"props":23997,"children":24000},{"href":23998,"rel":23999},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F66e0575bece128d5c8902bb1792290e91f53db14",[1177],[24001],{"type":1138,"value":24002},"66e0575",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24005,"children":24007},{"href":23982,"rel":24006},[1177],[24008],{"type":1138,"value":23986},{"type":1133,"tag":1195,"props":24010,"children":24011},{},[24012,24016,24018,24025,24026],{"type":1133,"tag":1146,"props":24013,"children":24014},{},[24015],{"type":1138,"value":23327},{"type":1138,"value":24017}," add a Minecraft RCON client (",{"type":1133,"tag":1173,"props":24019,"children":24022},{"href":24020,"rel":24021},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F93792f6b0bfaa3452a68146f950db05ddfbce290",[1177],[24023],{"type":1138,"value":24024},"93792f6",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24027,"children":24029},{"href":23982,"rel":24028},[1177],[24030],{"type":1138,"value":23986},{"type":1133,"tag":1195,"props":24032,"children":24033},{},[24034,24038,24040,24047,24048],{"type":1133,"tag":1146,"props":24035,"children":24036},{},[24037],{"type":1138,"value":4598},{"type":1138,"value":24039}," add servers list and server page with live status (",{"type":1133,"tag":1173,"props":24041,"children":24044},{"href":24042,"rel":24043},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F7cd7da9b6eb8853a87ee9096d44a7f0998f17de5",[1177],[24045],{"type":1138,"value":24046},"7cd7da9",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24049,"children":24052},{"href":24050,"rel":24051},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F12",[1177],[24053],{"type":1138,"value":24054},"#12",{"type":1133,"tag":1195,"props":24056,"children":24057},{},[24058,24062,24064,24071,24072],{"type":1133,"tag":1146,"props":24059,"children":24060},{},[24061],{"type":1138,"value":4598},{"type":1138,"value":24063}," add server list, detail and power endpoints (",{"type":1133,"tag":1173,"props":24065,"children":24068},{"href":24066,"rel":24067},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2733094a4fec60c2caec70f252976fbb9ee06be3",[1177],[24069],{"type":1138,"value":24070},"2733094",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24073,"children":24075},{"href":24050,"rel":24074},[1177],[24076],{"type":1138,"value":24054},{"type":1133,"tag":1195,"props":24078,"children":24079},{},[24080,24084,24086,24093,24094],{"type":1133,"tag":1146,"props":24081,"children":24082},{},[24083],{"type":1138,"value":4598},{"type":1138,"value":24085}," add create-server wizard with live progress (",{"type":1133,"tag":1173,"props":24087,"children":24090},{"href":24088,"rel":24089},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3f30553c8668b9dbbb38dd5285be5a8cd3b94f3c",[1177],[24091],{"type":1138,"value":24092},"3f30553",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24095,"children":24098},{"href":24096,"rel":24097},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F11",[1177],[24099],{"type":1138,"value":24100},"#11",{"type":1133,"tag":1195,"props":24102,"children":24103},{},[24104,24108,24110,24117,24118],{"type":1133,"tag":1146,"props":24105,"children":24106},{},[24107],{"type":1138,"value":4598},{"type":1138,"value":24109}," add server creation API and job WebSocket (",{"type":1133,"tag":1173,"props":24111,"children":24114},{"href":24112,"rel":24113},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F40e9442cd5b645388fb2ff03ec9797f552e92650",[1177],[24115],{"type":1138,"value":24116},"40e9442",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24119,"children":24121},{"href":24096,"rel":24120},[1177],[24122],{"type":1138,"value":24100},{"type":1133,"tag":1195,"props":24124,"children":24125},{},[24126,24130,24132,24139,24140],{"type":1133,"tag":1146,"props":24127,"children":24128},{},[24129],{"type":1138,"value":4598},{"type":1138,"value":24131}," add job runner for creating servers (",{"type":1133,"tag":1173,"props":24133,"children":24136},{"href":24134,"rel":24135},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe0bfb000030721aae7a76d711d27513a43efa808",[1177],[24137],{"type":1138,"value":24138},"e0bfb00",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24141,"children":24143},{"href":24096,"rel":24142},[1177],[24144],{"type":1138,"value":24100},{"type":1133,"tag":1195,"props":24146,"children":24147},{},[24148,24152,24154,24161,24162],{"type":1133,"tag":1146,"props":24149,"children":24150},{},[24151],{"type":1138,"value":10560},{"type":1138,"value":24153}," add Mojang vanilla and Fabric loader providers (",{"type":1133,"tag":1173,"props":24155,"children":24158},{"href":24156,"rel":24157},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F260b75579dd0158373976799f13dcc4982b6a0ed",[1177],[24159],{"type":1138,"value":24160},"260b755",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24163,"children":24166},{"href":24164,"rel":24165},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F10",[1177],[24167],{"type":1138,"value":24168},"#10",{"type":1133,"tag":1195,"props":24170,"children":24171},{},[24172,24176,24178,24185,24186,24193,24194],{"type":1133,"tag":1146,"props":24173,"children":24174},{},[24175],{"type":1138,"value":4598},{"type":1138,"value":24177}," first-run setup, passkey sign-in, recovery codes and step-up (",{"type":1133,"tag":1173,"props":24179,"children":24182},{"href":24180,"rel":24181},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fefc2afcd33a9732cc0648cff61d15a14dd912b35",[1177],[24183],{"type":1138,"value":24184},"efc2afc",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24187,"children":24190},{"href":24188,"rel":24189},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F8",[1177],[24191],{"type":1138,"value":24192},"#8",{"type":1138,"value":4122},{"type":1133,"tag":1173,"props":24195,"children":24198},{"href":24196,"rel":24197},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F9",[1177],[24199],{"type":1138,"value":24200},"#9",{"type":1133,"tag":1195,"props":24202,"children":24203},{},[24204,24208,24210,24217,24218],{"type":1133,"tag":1146,"props":24205,"children":24206},{},[24207],{"type":1138,"value":4598},{"type":1138,"value":24209}," add passkey, recovery code, setup token and challenge modules (",{"type":1133,"tag":1173,"props":24211,"children":24214},{"href":24212,"rel":24213},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa07123c88f39189c366c2ca5515558480d89c788",[1177],[24215],{"type":1138,"value":24216},"a07123c",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24219,"children":24221},{"href":24188,"rel":24220},[1177],[24222],{"type":1138,"value":24192},{"type":1133,"tag":1195,"props":24224,"children":24225},{},[24226,24230,24232,24239,24240],{"type":1133,"tag":1146,"props":24227,"children":24228},{},[24229],{"type":1138,"value":4598},{"type":1138,"value":24231}," add bun:sqlite database with Drizzle schema and bundled migrations (",{"type":1133,"tag":1173,"props":24233,"children":24236},{"href":24234,"rel":24235},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Faacb730ebb7d82748b310487f3de221b185b13cc",[1177],[24237],{"type":1138,"value":24238},"aacb730",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24241,"children":24244},{"href":24242,"rel":24243},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F7",[1177],[24245],{"type":1138,"value":24246},"#7",{"type":1133,"tag":1195,"props":24248,"children":24249},{},[24250,24254,24256,24263,24264],{"type":1133,"tag":1146,"props":24251,"children":24252},{},[24253],{"type":1138,"value":4598},{"type":1138,"value":24255}," scaffold Nuxt 4 SPA on Bun with Flytower branding and health check (",{"type":1133,"tag":1173,"props":24257,"children":24260},{"href":24258,"rel":24259},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fe03bcbc456ea2e5ae6411149499b8817060055ce",[1177],[24261],{"type":1138,"value":24262},"e03bcbc",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24265,"children":24268},{"href":24266,"rel":24267},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F6",[1177],[24269],{"type":1138,"value":24270},"#6",{"type":1133,"tag":1195,"props":24272,"children":24273},{},[24274,24278,24280,24287],{"type":1133,"tag":1146,"props":24275,"children":24276},{},[24277],{"type":1138,"value":4931},{"type":1138,"value":24279}," add a typed agent client with timeouts (",{"type":1133,"tag":1173,"props":24281,"children":24284},{"href":24282,"rel":24283},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00cdc4297f9fe8494f3b11701a41d165c233644e",[1177],[24285],{"type":1138,"value":24286},"00cdc42",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24289,"children":24290},{},[24291,24295,24297,24304],{"type":1133,"tag":1146,"props":24292,"children":24293},{},[24294],{"type":1138,"value":1221},{"type":1138,"value":24296}," create and delete servers with per-server users, limits and firewall rules (",{"type":1133,"tag":1173,"props":24298,"children":24301},{"href":24299,"rel":24300},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F10fe1dfae3d1e0c3fa11b22482b26a0e5da9a3dd",[1177],[24302],{"type":1138,"value":24303},"10fe1df",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24306,"children":24307},{},[24308,24312,24314,24321],{"type":1133,"tag":1146,"props":24309,"children":24310},{},[24311],{"type":1138,"value":1221},{"type":1138,"value":24313}," install Temurin runtimes from Adoptium with checksum verification (",{"type":1133,"tag":1173,"props":24315,"children":24318},{"href":24316,"rel":24317},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0b9152f70ca9cccf151fdbe43c1b05bcd8078726",[1177],[24319],{"type":1138,"value":24320},"0b9152f",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24323,"children":24324},{},[24325,24329,24331,24338],{"type":1133,"tag":1146,"props":24326,"children":24327},{},[24328],{"type":1138,"value":1221},{"type":1138,"value":24330}," serve requests over a group-restricted Unix socket (",{"type":1133,"tag":1173,"props":24332,"children":24335},{"href":24333,"rel":24334},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd4b3f319babd33043d5e8046b32942bd9a7d1d9b",[1177],[24336],{"type":1138,"value":24337},"d4b3f31",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24340,"children":24341},{},[24342,24346,24348,24355],{"type":1133,"tag":1146,"props":24343,"children":24344},{},[24345],{"type":1138,"value":1221},{"type":1138,"value":24347}," add request dispatcher, audit hook and service verbs (",{"type":1133,"tag":1173,"props":24349,"children":24352},{"href":24350,"rel":24351},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F2c304d74bab7b6cbb472fc027c1ee113213ffa88",[1177],[24353],{"type":1138,"value":24354},"2c304d7",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24357,"children":24358},{},[24359,24363,24365,24372],{"type":1133,"tag":1146,"props":24360,"children":24361},{},[24362],{"type":1138,"value":4931},{"type":1138,"value":24364}," add agent verb schemas, envelopes and line framing (",{"type":1133,"tag":1173,"props":24366,"children":24369},{"href":24367,"rel":24368},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F5bac7f53e6dc6c7834e7c15ff50775f200d97ec0",[1177],[24370],{"type":1138,"value":24371},"5bac7f5",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":24374,"children":24375},{"id":1233},[24376],{"type":1138,"value":1236},{"type":1133,"tag":1191,"props":24378,"children":24379},{},[24380,24404],{"type":1133,"tag":1195,"props":24381,"children":24382},{},[24383,24387,24389,24396,24397],{"type":1133,"tag":1146,"props":24384,"children":24385},{},[24386],{"type":1138,"value":11650},{"type":1138,"value":24388}," copy real files instead of Nitro's absolute symlinks (",{"type":1133,"tag":1173,"props":24390,"children":24393},{"href":24391,"rel":24392},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fdb7e4b323840b92cb7f96de99d769fbbcd11bba5",[1177],[24394],{"type":1138,"value":24395},"db7e4b3",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24398,"children":24401},{"href":24399,"rel":24400},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F15",[1177],[24402],{"type":1138,"value":24403},"#15",{"type":1133,"tag":1195,"props":24405,"children":24406},{},[24407,24411,24413,24420,24421],{"type":1133,"tag":1146,"props":24408,"children":24409},{},[24410],{"type":1138,"value":4598},{"type":1138,"value":24412}," keep wizard port and progress steps readable (",{"type":1133,"tag":1173,"props":24414,"children":24417},{"href":24415,"rel":24416},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa6e80bc96cebce8368ab8112b72b5dc35ccbf3d7",[1177],[24418],{"type":1138,"value":24419},"a6e80bc",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24422,"children":24424},{"href":24096,"rel":24423},[1177],[24425],{"type":1138,"value":24100},{"type":1133,"tag":1184,"props":24427,"children":24428},{"id":7},[24429],{"type":1138,"value":5},{"type":1133,"tag":1191,"props":24431,"children":24432},{},[24433,24453],{"type":1133,"tag":1195,"props":24434,"children":24435},{},[24436,24438,24445,24446],{"type":1138,"value":24437},"add install guide, 0.1.0 test script and feedback template (",{"type":1133,"tag":1173,"props":24439,"children":24442},{"href":24440,"rel":24441},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8f3538348ca495f0c07118c4dd3de50739cafcd2",[1177],[24443],{"type":1138,"value":24444},"8f35383",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24447,"children":24450},{"href":24448,"rel":24449},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F17",[1177],[24451],{"type":1138,"value":24452},"#17",{"type":1133,"tag":1195,"props":24454,"children":24455},{},[24456,24458,24465],{"type":1138,"value":24457},"add README (",{"type":1133,"tag":1173,"props":24459,"children":24462},{"href":24460,"rel":24461},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F00c0f5d190371d8b8abbd97904fd2b1c6744bb8d",[1177],[24463],{"type":1138,"value":24464},"00c0f5d",{"type":1138,"value":1213},{"type":1133,"tag":1184,"props":24467,"children":24468},{"id":1664},[24469],{"type":1138,"value":1667},{"type":1133,"tag":1191,"props":24471,"children":24472},{},[24473,24486,24510,24528,24545,24562,24575,24592,24614,24638,24660,24682,24695,24708,24721,24734,24747],{"type":1133,"tag":1195,"props":24474,"children":24475},{},[24476,24478,24485],{"type":1138,"value":24477},"allow releasing from the Actions tab (",{"type":1133,"tag":1173,"props":24479,"children":24482},{"href":24480,"rel":24481},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F3a0af4e598d5129399b81d513a80d7df46b3e480",[1177],[24483],{"type":1138,"value":24484},"3a0af4e",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24487,"children":24488},{},[24489,24493,24495,24502,24503],{"type":1133,"tag":1146,"props":24490,"children":24491},{},[24492],{"type":1138,"value":11681},{"type":1138,"value":24494}," install into a systemd container and drive it with Bun.WebView (",{"type":1133,"tag":1173,"props":24496,"children":24499},{"href":24497,"rel":24498},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F42d1332de4b6a43f3f8fc711c4a411e0a18f955f",[1177],[24500],{"type":1138,"value":24501},"42d1332",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24504,"children":24507},{"href":24505,"rel":24506},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F16",[1177],[24508],{"type":1138,"value":24509},"#16",{"type":1133,"tag":1195,"props":24511,"children":24512},{},[24513,24515,24522,24523],{"type":1138,"value":24514},"build and publish release tarballs on version tags (",{"type":1133,"tag":1173,"props":24516,"children":24519},{"href":24517,"rel":24518},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F691f756a4dd461127168d154fdf0e68a73aee0bc",[1177],[24520],{"type":1138,"value":24521},"691f756",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24524,"children":24526},{"href":24399,"rel":24525},[1177],[24527],{"type":1138,"value":24403},{"type":1133,"tag":1195,"props":24529,"children":24530},{},[24531,24535,24537,24544],{"type":1133,"tag":1146,"props":24532,"children":24533},{},[24534],{"type":1138,"value":4598},{"type":1138,"value":24536}," give the recovery-code test room on slow runners (",{"type":1133,"tag":1173,"props":24538,"children":24541},{"href":24539,"rel":24540},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fbb0ff87ccdf4633479a7113a587df6e35fe2b6f6",[1177],[24542],{"type":1138,"value":24543},"bb0ff87",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24546,"children":24547},{},[24548,24552,24554,24561],{"type":1133,"tag":1146,"props":24549,"children":24550},{},[24551],{"type":1138,"value":1221},{"type":1138,"value":24553}," simulate logs and RCON in the fake agent (",{"type":1133,"tag":1173,"props":24555,"children":24558},{"href":24556,"rel":24557},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F340b60cbc0955f1dad892341beee942c71bd619e",[1177],[24559],{"type":1138,"value":24560},"340b60c",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24563,"children":24564},{},[24565,24567,24574],{"type":1138,"value":24566},"await every rejects assertion (",{"type":1133,"tag":1173,"props":24568,"children":24571},{"href":24569,"rel":24570},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F9f71960d5ddf9ed0de59f50b416dcfdaa74dadae",[1177],[24572],{"type":1138,"value":24573},"9f71960",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24576,"children":24577},{},[24578,24582,24584,24591],{"type":1133,"tag":1146,"props":24579,"children":24580},{},[24581],{"type":1138,"value":1221},{"type":1138,"value":24583}," add a fake agent for local panel development (",{"type":1133,"tag":1173,"props":24585,"children":24588},{"href":24586,"rel":24587},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8bfffe2d0d75646927a5dd933729ed172dc1d5af",[1177],[24589],{"type":1138,"value":24590},"8bfffe2",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24593,"children":24594},{},[24595,24599,24601,24608,24609],{"type":1133,"tag":1146,"props":24596,"children":24597},{},[24598],{"type":1138,"value":4598},{"type":1138,"value":24600}," list public server fields explicitly (",{"type":1133,"tag":1173,"props":24602,"children":24605},{"href":24603,"rel":24604},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa76631d349307dfa7e6572e53309b33687b7f96e",[1177],[24606],{"type":1138,"value":24607},"a76631d",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24610,"children":24612},{"href":24050,"rel":24611},[1177],[24613],{"type":1138,"value":24054},{"type":1133,"tag":1195,"props":24615,"children":24616},{},[24617,24621,24623,24630,24631],{"type":1133,"tag":1146,"props":24618,"children":24619},{},[24620],{"type":1138,"value":4931},{"type":1138,"value":24622}," connect to the agent with Bun.connect (",{"type":1133,"tag":1173,"props":24624,"children":24627},{"href":24625,"rel":24626},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F6e6460e796bd4ca4fd9d98f69cf7eaede8a99f15",[1177],[24628],{"type":1138,"value":24629},"6e6460e",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24632,"children":24635},{"href":24633,"rel":24634},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fissues\u002F18",[1177],[24636],{"type":1138,"value":24637},"#18",{"type":1133,"tag":1195,"props":24639,"children":24640},{},[24641,24645,24647,24654,24655],{"type":1133,"tag":1146,"props":24642,"children":24643},{},[24644],{"type":1138,"value":1221},{"type":1138,"value":24646}," serve the socket with Bun.listen and decode frames as a stream (",{"type":1133,"tag":1173,"props":24648,"children":24651},{"href":24649,"rel":24650},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb5a583725679d2dfb91e9d3889d0a52e6c13aa88",[1177],[24652],{"type":1138,"value":24653},"b5a5837",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24656,"children":24658},{"href":24633,"rel":24657},[1177],[24659],{"type":1138,"value":24637},{"type":1133,"tag":1195,"props":24661,"children":24662},{},[24663,24667,24669,24676,24677],{"type":1133,"tag":1146,"props":24664,"children":24665},{},[24666],{"type":1138,"value":1221},{"type":1138,"value":24668}," run commands with Bun.spawn and hash downloads with Bun.CryptoHasher (",{"type":1133,"tag":1173,"props":24670,"children":24673},{"href":24671,"rel":24672},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8e6c6943cd74e7bdb3b54977f051f332a5985eb9",[1177],[24674],{"type":1138,"value":24675},"8e6c694",{"type":1138,"value":2108},{"type":1133,"tag":1173,"props":24678,"children":24680},{"href":24633,"rel":24679},[1177],[24681],{"type":1138,"value":24637},{"type":1133,"tag":1195,"props":24683,"children":24684},{},[24685,24687,24694],{"type":1138,"value":24686},"ignore Nuxt build output and lockfiles in Prettier (",{"type":1133,"tag":1173,"props":24688,"children":24691},{"href":24689,"rel":24690},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F05f814138da8c0af3bde2be6cf9e58d9c2a01ab7",[1177],[24692],{"type":1138,"value":24693},"05f8141",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24696,"children":24697},{},[24698,24700,24707],{"type":1138,"value":24699},"switch runtime, package manager and tests to Bun (",{"type":1133,"tag":1173,"props":24701,"children":24704},{"href":24702,"rel":24703},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F8d5e6eeeb7a34d2251149f081aaab2dedcb9e720",[1177],[24705],{"type":1138,"value":24706},"8d5e6ee",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24709,"children":24710},{},[24711,24713,24720],{"type":1138,"value":24712},"rename working name to Flytower (",{"type":1133,"tag":1173,"props":24714,"children":24717},{"href":24715,"rel":24716},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fb4b10583ec93ee86a142b84758bd7b5ee9c64540",[1177],[24718],{"type":1138,"value":24719},"b4b1058",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24722,"children":24723},{},[24724,24726,24733],{"type":1138,"value":24725},"check formatting in lint, ignore lockfile (",{"type":1133,"tag":1173,"props":24727,"children":24730},{"href":24728,"rel":24729},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002F0a00026f2ceb9984abb6b2eea5573e56ec6c7e41",[1177],[24731],{"type":1138,"value":24732},"0a00026",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24735,"children":24736},{},[24737,24739,24746],{"type":1138,"value":24738},"add TypeScript, ESLint, Prettier, Vitest and CI (",{"type":1133,"tag":1173,"props":24740,"children":24743},{"href":24741,"rel":24742},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fd404edc375fbe8d67b5027734a3fdaebb94302fd",[1177],[24744],{"type":1138,"value":24745},"d404edc",{"type":1138,"value":1213},{"type":1133,"tag":1195,"props":24748,"children":24749},{},[24750,24752,24759],{"type":1138,"value":24751},"initialise pnpm workspace (",{"type":1133,"tag":1173,"props":24753,"children":24756},{"href":24754,"rel":24755},"https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Fcommit\u002Fa533b88e76537b55e64a3a3f66c56dbff343925a",[1177],[24757],{"type":1138,"value":24758},"a533b88",{"type":1138,"value":1213},{"data":24761,"body":24762},{},{"type":1130,"children":24763},[24764,24783,24788,24800,24805],{"type":1133,"tag":1134,"props":24765,"children":24766},{},[24767,24769,24775,24776,24781],{"type":1138,"value":24768},"Test build of #85 at 1eb9dd769db5d3f727042fa878a819bdc016515a, version ",{"type":1133,"tag":1789,"props":24770,"children":24772},{"className":24771},[],[24773],{"type":1138,"value":24774},"1.1.0-pr.85.19",{"type":1138,"value":4173},{"type":1133,"tag":1146,"props":24777,"children":24778},{},[24779],{"type":1138,"value":24780},"Not a release",{"type":1138,"value":24782},": for testing on a spare VPS.",{"type":1133,"tag":1134,"props":24784,"children":24785},{},[24786],{"type":1138,"value":24787},"Install or upgrade to it with:",{"type":1133,"tag":24789,"props":24790,"children":24795},"pre",{"className":24791,"code":24792,"language":24793,"meta":432,"style":24794},"language-sh","curl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Fdownload\u002Fpr-85\u002Finstall.sh \\\n  | sudo bash -s -- --pr 85 --domain panel.example.com\n","sh","undefined",[24796],{"type":1133,"tag":1789,"props":24797,"children":24798},{"__ignoreMap":432},[24799],{"type":1138,"value":24792},{"type":1133,"tag":1134,"props":24801,"children":24802},{},[24803],{"type":1138,"value":24804},"It's deleted when the pull request closes.",{"type":1133,"tag":24806,"props":24807,"children":24808},"style",{},[24809],{"type":1138,"value":432},{"data":24811,"body":24812},{},{"type":1130,"children":24813},[24814,24831,24835,24843,24847],{"type":1133,"tag":1134,"props":24815,"children":24816},{},[24817,24819,24825,24826,24830],{"type":1138,"value":24818},"Test build of #132 at 2268de02da0aaed9c6072c9a7da445e7a88be076, version ",{"type":1133,"tag":1789,"props":24820,"children":24822},{"className":24821},[],[24823],{"type":1138,"value":24824},"1.2.0-pr.132.115",{"type":1138,"value":4173},{"type":1133,"tag":1146,"props":24827,"children":24828},{},[24829],{"type":1138,"value":24780},{"type":1138,"value":24782},{"type":1133,"tag":1134,"props":24832,"children":24833},{},[24834],{"type":1138,"value":24787},{"type":1133,"tag":24789,"props":24836,"children":24838},{"className":24791,"code":24837,"language":24793,"meta":432,"style":24794},"curl -fsSL https:\u002F\u002Fgithub.com\u002FMattA-Official\u002Fmc-panel\u002Freleases\u002Fdownload\u002Fpr-132\u002Finstall.sh \\\n  | sudo bash -s -- --pr 132 --domain panel.example.com\n",[24839],{"type":1133,"tag":1789,"props":24840,"children":24841},{"__ignoreMap":432},[24842],{"type":1138,"value":24837},{"type":1133,"tag":1134,"props":24844,"children":24845},{},[24846],{"type":1138,"value":24804},{"type":1133,"tag":24806,"props":24848,"children":24849},{},[24850],{"type":1138,"value":432},1794483546775]