Skip to contentSeptember 28, 2026
- Connect plugin Upgrade A tunneled Spigot login that stalls before Connect now names where it stopped. A packet-level login plugin can consume
LOGIN_START before connect_data_handler, so Connect's offline-login cycle never runs and the client waits without a login response; before 0.15.16 the connector recorded no cause, leaving only the backend's later, cause-blind login timeout. 0.15.16 installs a watchdog before the consuming handler: ten seconds after the handshake it writes exactly one warning with the player, session, endpoint and packet count, names the probable packet-pipeline cause, and explains why a passthrough connect-player exemption is not a fix. This is attribution only — it does not kick the player, fabricate a packet, complete the login or change a healthy session.
September 27, 2026
- Connect plugin Upgrade Chat from a tunneled player no longer kills the session on current Paper/Spigot backends. Connect's Spigot chat filter rebuilds each serverbound chat packet to strip its unsigned-chat component, and it resolved the replacement constructor by hard-coded parameter types, while backends from 1.21.5 on — the Minecraft 26.3 line included — carry
Optional<MessageSignature>. The lookup threw inside the injected pipeline for every plain chat message, and because the filter only ever sees post-login traffic no login failed: the connection closed right after spawn and the failure surfaced as a generic internal-server exception with no plugin-log line, so a session on 0.15.14 or earlier that dies this way reads as an unexplained teardown. 0.15.15 resolves the constructor from the runtime value the packet exposes, so one path serves the raw and the Optional shape, and a shape nothing matches now names the missing accessor and the types observed instead of a bare reflection error. It is one deterministic defect on that path, not an explanation for every post-spawn closure reported on current backends. 0.15.14 changes only the release pipeline (one apostrophe in a merged commit subject no longer stalls the release-please auto-merge), so it adds no plugin behaviour of its own; install 0.15.15, which contains the fix. - Gate Upgrade A backend packet Gate cannot decode now names the packet that closed the connection. When a backend sent a packet Gate recognised but could not decode, Gate silently closed the backend socket at default verbosity, the backend logged nothing and the player saw only
Internal server connection error; on a Connect tunnel there was nowhere else to attribute the close. v0.74.28 writes one error on that backend-side close with the peer, packet type, packet ID and protocol. It is observability only: unknown or malformed client-side traffic stays quiet so an untrusted client cannot turn the diagnostic into a log-flood primitive. - GeyserLite Upgrade GeyserLite accepts the current Bedrock clients again, and a native GeyserLite loads its own config. v0.5.28 carries the upstream Geyser revision that registers Bedrock 26.50/26.51 — every GeyserLite up to v0.5.27 stops at Bedrock 26.45, which made GeyserLite, the Connect edge and any Gate
bedrock: true listener built on it reject every current Bedrock client — but v0.5.28 published no downloadable build, so do not pin it. v0.5.29 registers the config classes Geyser's annotation processor generates, which the native-image build was dropping: without them every Geyser config load failed, presenting as a restart loop in standalone/subprocess mode and as a silent exit when embedded. v0.5.30 raises the purego dependency and v0.5.31 changes only the release pipeline. Install v0.5.31, which contains them all with builds attached. - Gate Upgrade Stopping or reloading Gate no longer leaves a Connect runtime behind. v0.74.19 stops and joins the Connect runtime Gate started, both on shutdown and before a config reload replaces it; previously the superseded runtime was swapped out without being stopped, so two connectors could watch the same endpoint and write the same token file, and Gate reported itself stopped while that runtime was still running. v0.74.20 refuses to start a runtime once Gate has been asked to stop, and v0.74.21 runs Gate's event manager on a race-free wrapper — the manager Gate used could silently drop a config update when a delivery overlapped a sibling subscriber's unsubscribe, with no log line at all. Install v0.74.21.
- Gate Upgrade A Windows editor or deploy tool can save Gate's config while Gate is reading it. Gate opened its config with a handle that shares read and write but not delete, so an editor's or deploy tool's atomic
ReplaceFileW save of gate.yml was refused with ERROR_SHARING_VIOLATION for as long as one of Gate's own reads was in flight — on Windows, 1208 of 3000 replacements failed on that read path and none on the delete-sharing handle Gate already used for fingerprints. v0.74.26 reads the config content with the delete-sharing handle, and v0.74.27 covers the discovered config.yml path, which viper read on its own. Install v0.74.27, which contains both. - Gate Upgrade Gate names the runtime that died, the backend that never answered, and the version it actually resolved. v0.74.12 logs the ViaLite runtime Gate resolved at startup — version, how it was resolved (download, cache, pin, explicit path) and where it runs from — so the live translation build is readable instead of inferred from the runtime's own output. v0.74.18 reports a managed ViaLite runtime that exits after startup: one error naming the component, the resolved version and the backends that runtime owned, and joins then fail saying protocol translation is down instead of the runtime module's bare
server not started, which reads like a configuration mistake. v0.74.23 bounds and names the bridge dial of a dynamic, tunnel-backed backend the translation bridge cannot reach — that dial is detached from the join's deadline on purpose, so a stalled backend blocked the join forever and ended as a generic closed-connection message with nothing naming the backend. Install v0.74.23. - Gate Upgrade A hung Gate now tells you how to get a stack dump.
kill -QUIT is listed in Gate's termination signals, so os/signal consumes it: Gate shuts down gracefully and prints zero goroutine lines — following the usual advice ends the run and returns nothing. v0.74.25 prints the working instruction (kill -ABRT <pid>, which also ends the run, so capture the console first) on the graceful-shutdown line, and a new troubleshooting page gives the signal table, what the dump looks like, and why neither net/http/pprof nor a debugger is an alternative on a release build.
September 26, 2026
- Gate Upgrade A Bedrock port conflict no longer costs ten minutes and your Java players. With managed Bedrock enabled on a host where another process already holds the Bedrock UDP port, the managed runtime could never bind: Gate waited the full ten-minute startup timeout, the public Bedrock listener never answered, and Gate then shut the proxy down and disconnected every Java player with it — a Bedrock-only misconfiguration taking down Java. v0.74.16 reports the held port within seconds and fails fast, so it is a startup error instead of a silently degraded proxy.
September 21, 2026
- Gate Upgrade Gate reads ports as the unsigned 16-bit values they are. The handshake port is unsigned on the wire and Gate decoded it as signed, so a client declaring a port of 32768 or more arrived as a negative number — and that value is not merely logged, it is formatted into the virtual host the connection routes on, so
65535 became the host host:-1. v0.74.7 decodes it unsigned, v0.74.9 rejects an out-of-range port with an error instead of silently wrapping it into a different port that was never in the address (host:70000 became 4464, and host:65536 was accepted as the no-port sentinel), and v0.74.10 writes BungeeCord's ServerIP port as the unsigned value it is. Install v0.74.10, which contains all three. - Gate Upgrade Gate's login RSA key size is configurable.
auth.privateKeyBits in config.yml now sets the key Gate generates for the Java login handshake. Before v0.74.8 the option existed, was documented and was never read, so every gate generated a fresh 1024-bit key at startup with no way to raise it from configuration — and the login packet decoders capped the key fields at exactly one 1024-bit block, so a larger key could not have completed a login at all. The default stays 1024 bits; install v0.74.8 to set your own.
September 19, 2026
- Gate Upgrade Gate's vulnerable dependency set is refreshed. v0.74.1 bumps every manifest and lockfile that pinned a version with an open Dependabot advisory — 51 alerts, 13 of them high, none against Gate's own code. The part that ships inside the proxy binary is
go.mod: grpc 1.82.1 to 1.84.0, x/net 0.53.0 to 0.59.0 (CVE-2026-25680), x/image 0.18.0 to 0.46.0, and the OTLP exporters 1.38.0 to 1.46.0. The docs site and API-example lockfiles are refreshed in the same release.
September 18, 2026
- Gate Upgrade Gate knows Minecraft 26.3. v0.74.0 adds 26.3 (protocol 777) to Gate's version table and fails closed on a protocol it does not know. Before it, an unknown protocol fell through to the minimum-version packet registry: a 26.3 login was encoded with pre-1.8 rules, the client failed to decode
minecraft:hello, and the version check accepted every numeric protocol because it only rejected the unknown sentinel. Anyone running their own Gate in front of current Java clients needs this release.