Skip to content

Fledge v0.5.1.1 ​

Disk limits the kernel actually enforces, uploads that work without object storage, node agents that update from the panel, and storage, SFTP and image settings you manage in the panel instead of .env.

Highlights ​

  • Kernel-enforced disk allowances. Each server's files live in a size-limited volume, so a game that fills its allowance gets no space left on device instead of eating the node's disk. The limit applies to the game, SFTP and the panel alike, and the server page shows when it is a hard limit.
  • Uploads and downloads without S3. Browser file transfers no longer need object storage. Previously the Files tab failed with “File streaming requires object storage”.
  • Agent updates from the panel. Nodes show their agent version and Update to x.y.z.w when a newer one is published. One button updates a node, another updates all of them, and a switch does it automatically. Downloads are SHA-256-verified, trial-run, and rolled back if the new version won't start.
  • Everything configurable in the panel. Object storage (with a Test connection button), SFTP on/off and port, allowed Docker images, disk-limit mode, update repository and agent release source — all under Settings → Panel. Changes reach the API immediately and every node within seconds. Secrets are stored encrypted.
  • Backups without stopping the game. On nodes with disk volumes, a running server is archived from a frozen point-in-time copy of its volume (Minecraft flushes and pauses saving first). A backup of a running test server took about one second and did not restart it.

Added ​

  • Settings → Panel with Object storage, Game nodes and Updates cards. Bundled SeaweedFS is now opt-in: docker compose --profile bundled-s3 up -d. Object storage is off until you turn it on.
  • Backups show a clear “Backups are off” notice (and a disabled button) while object storage is off.
  • Agent versioning and updates: fledge-agent --version, versions and platform reported on every heartbeat, GET /api/agent-releases, per-node and bulk update endpoints, an optional auto-update mode, and a release source that is either the GitHub release of your repository or your own URL (VERSION, SHA256SUMS, fledge-agent_linux_amd64|arm64). The release workflow now publishes VERSION.
  • Nodes page: agent version, Update buttons, a disk-limit status line, and an editable Public address that SFTP credentials display with the port.
  • Disk allowance changes now apply to the node: growing is live where the kernel allows, shrinking briefly stops the server, and the panel refuses to shrink below current use.
  • Servers created before this release move into a volume when they are next restarted (their files are copied, and the move is refused if they don't fit).
  • Pterodactyl egg import now keeps the startup command ( becomes ${VAR}; SERVER_MEMORY, SERVER_PORT and SERVER_IP are provided) and the stop command (^C sends SIGINT; anything else is typed into the console, with Docker's stop as a fallback). Templates have a stopCommand field.
  • connect.sh warns when e2fsprogs/util-linux tools needed for disk limits are missing.

Changed ​

  • ALLOWED_IMAGE_PREFIXES, S3_* and GITHUB_* in .env now only seed the panel's settings before the first save. After that, the panel is the source of truth.
  • SFTP is on by default at port 2022 on agents (it was off unless SFTP_LISTEN was set). Open that port on node firewalls, or turn SFTP off in Settings. SFTP_LISTEN is no longer read.
  • Restores into a volume build a fresh volume and swap it in, rolling back if the game fails to start.
  • Transfers spool in TRANSFER_DIR (a Compose volume) when object storage is off, and uploaded data is deleted as soon as the node has imported it.

Fixed ​

  • Panel file uploads failing with “That didn't work / File streaming requires object storage”.
  • Changing only a server's disk size queued no work on the node.
  • Backups of servers whose game ignores Docker's stop signal no longer fail on volume nodes (they use a snapshot).

Verified ​

Run against real components in a sandbox, no mocked data: PostgreSQL, the API, the panel UI, the Go agent and Docker containers.

  • A 64 MB allowance stopped a 100 MB write at the limit; grow and shrink worked; shrinking below use was refused; migration of an existing directory kept its data.
  • 5 MB upload and download without object storage matched byte for byte, also through the browser.
  • Agent self-update from the panel 0.5.1.1 → 0.5.1.2 → 0.5.1.3; a wrong checksum installed nothing; crash-loop rollback is covered by unit tests.
  • Storage configured, tested (including failure cases) and enabled from the panel against an S3-protocol test server; backup and restore of a running server on a volume.
  • Template stop command shut a game down in 2.6 s; deleting a server removed its volume and container.
  • Go tests, API tests (CORS, templates), type checks and the production build.

Known limits ​

Not validated: real AWS S3 retention, a Valheim boot, a two-host recovery drill, SFTP with third-party clients on a dedicated node, load testing, and rootless operation.

  • Disk limits cover the data directory only, need root, loop devices and e2fsprogs on the node, and usable space is about 2 % under the allowance. Where unsupported the agent falls back to soft limits unless you chose Require enforcement.
  • Snapshot backups are crash-consistent, not game-aware (apart from the Minecraft save flush). Agents older than 0.5.1.1 can't update themselves and must be reconnected once.
  • Automatic failover and live migration are still not implemented; cross-node recovery is a manual restore. Several API replicas without object storage need a shared transfer directory. Egg install scripts and daemon images are not executed.
  • Database migrations are not reversed automatically; the agent still has root-equivalent Docker access.

Upgrading ​

Update from Updates in the panel, or with update.sh / update.ps1. The database gains a settings table and a few columns automatically. After updating:

  1. Existing S3_* values are used until you save Settings → Panel → Object storage. Check the card and press Test connection.
  2. Update agents from Nodes. Agents older than 0.5.1.1 need one reconnect with the connector, after which they update themselves.
  3. Open the SFTP port (default 2022) on nodes, or turn SFTP off in Settings.
  4. Install e2fsprogs on nodes that lack it to get disk limits.

Released under the AGPL-3.0-only license.