Changelog
[2026.05.25] - Restrict Managed Gateway DNS
Changed
- Publish shared Gateway DNS records only for official Connect gateway servers with public-routable IP targets.
- Keep public and self-claimed gateway registrations active without granting them managed DNS records.
- Strip caller-supplied
x-uebliche-user-idbefore config-gateway proxy requests reach upstream services.
[2026.05.01] - Stabilize public Minecraft gateway
Fixed
- Add the public game hostnames to the deployed Gateway alias list so SRV and direct host handshakes route to the active Connect tunnel instead of showing
Gateway offline. - Keep tunnel frame reads isolated from session command handling so cancelled waits cannot corrupt the stream and falsely mark the route offline.
[2026.04.30] - Route SRV target aliases
Fixed
- Allow single-route Gateways to publish configured hostname aliases, so Minecraft clients that send an SRV target hostname in the handshake still reach the intended Connect tunnel route.
[2026.04.30] - Recover stale Connect tunnels
Fixed
- Retire stale Connect tunnel sessions when stream or datagram opens time out, so gateway routes can force a fresh server reconnect instead of serving
Gateway offlinebehind an apparently active route.
[2026.04.27] - Document Public Route DNS Repair
Changed
- Clarify that Public API now manages the
uebliche.ggapex Worker record and keeps public route DNS repaired on startup and periodic syncs.
[2026.04.21] - Make route owners explicit
Added
- Add explicit
ownerGatewayIdpersistence and route responses in the Connect gateway control plane while keepinggatewayIdavailable as a compatibility alias.
Changed
- Backfill legacy gateway route documents with
ownerGatewayIdon startup and resolve heartbeat/admin route ownership from the explicit owner field instead of relying on the legacy alias alone.
[2026.04.21] - Add MOTD cache and real client forwarding
Added
- Add per-route
forwardingModeandmotdCachePolicyhandling to the Public API heartbeat snapshot, watcher-renderedroutes.json, andmcproxyruntime so gateway routes can explicitly opt into real client forwarding and sharedminecraft-tcpMOTD caching. - Add a client-aware tunnel
OPENpayload plus astatus observecontrol frame so Connect receives the original client address, requested host/port, protocol version, cache-hit information, and optional MOTD cache token. - Add a
10sshared MOTD cache keyed by requested host, public port, protocol version, and route identity instead of only the route label, so multi-host routes do not bleed status payloads into each other.
Changed
- Switch TCP forwarding to explicit forwarding modes, using PROXY protocol v2 for
proxy-protocol-v2/connect-nativebackends instead of the old text-header proxy flag. - Invalidate cached MOTDs whenever the watcher publishes a new route snapshot so removed or changed routes cannot keep serving stale cached status payloads.
- Reject
udp-peer-contextroutes unless they resolve to a tunnel backend, keeping generic direct UDP routes fail-closed instead of pretending to preserve real peer addresses. - Log MOTD cache hits, misses, and failed status-observer dispatches in the gateway dataplane so operators can verify whether a route is really running with cache and client-IP forwarding enabled.
[2026.04.21] - Add service-based gateway tunnels
Added
- Add service-based route snapshots with
serviceId,protocol, andpublicPortso Gateways can distinguishminecraft-tcpand optionalvoice-udpownership. - Add reverse UDP tunnel sessions with per-peer datagram forwarding and default-deny routing for published
voice-udpservices. - Add a dedicated gateway Swarm cluster bootstrap script plus deploy env template so new Linux nodes can be turned into a labeled gateway region from an IP list instead of manual one-off Docker setup.
- Add a dedicated one-node gateway worker bootstrap script so future Linux hosts can join an existing regional gateway cluster from just IP, SSH user, and password.
- Add a
swarm-loadgateway publish mode that streams the built image directly onto the Gateway Swarm nodes over SSH before deploy, so dedicated clusters can roll out even when the registry is unavailable.
Changed
- Render separate TCP and UDP mcproxy route tables from the watcher heartbeat snapshot instead of treating every route as one Minecraft TCP stream.
- Open tunnel streams with explicit service metadata so Connect can map incoming gateway traffic to the correct local service instead of one static target.
- Expose optional UDP listener configuration via
MCPROXY_UDP_BIND_ADDRSand keep route matching bound to the published public port. - Report routed UDP sessions into the existing
uebliche.onlinetraffic ingest as well, and tag gateway buckets by transport so TCP gameplay and voice UDP no longer collapse into one opaque stream. - Restrict the production Gateway Swarm stack to nodes labeled for the selected gateway region and publish the default UDP voice port in host mode alongside the existing TCP ports.
- Extend the gateway local deploy script with a plain-HTTP registry fallback plus direct node-image loading, and make generated cluster env files default to the direct
swarm-loadrollout path.
Fixed
- Resolve the generated
MCPROXY_UDP_BIND_ADDRSvalue explicitly for Gateway Swarm deploys somcproxyno longer receives a literal${GATEWAY_UDP_PORT}placeholder and the UDP dataplane actually starts. - Use
stop-firstupdates for the Gateway Swarm service so single-node host-port rollouts do not deadlock onport already in useduring deploys. - Accept older heartbeat route snapshots that still omit
serviceId,protocol, andpublicPort, so already deployed API control planes continue to feed TCP routes intomcproxyinstead of leaving the Gateway stuck in offline mode.
Removed
- Remove the legacy top-level Velocity proxy runtime, its old
Dockerfile.proxyimage build, and the matchinguebliche-proxy-devcompose service now that Gateway traffic is handled exclusively bywatcher + mcproxy.
[2026.04.19] - Add gateway traffic reporting
Added
- Aggregate mcproxy traffic into anonymized source-country buckets and push them to
uebliche.onlinefor the public live world-map surface.
Changed
- Let mcproxy optionally use a local GeoLite2 City database plus the shared
ONLINE_TRAFFIC_INGEST_*contract so gateway traffic can be reported without exposing raw player IPs or hostnames.
[2026.02.18] - Clean up legacy gateway documentation
Changed
- Rewrite Gateway docs to match the current headless architecture (
watcher + mcproxy) and API-driven control plane. - Replace legacy watcher-UI/canvas/auth descriptions with current guides for identity, routing lifecycle, DNS automation, and operations.
- Update getting-started/deployment pages to the current 3-port runtime contract (
25565,9001,80) and dedicated stack context flow.
Removed
- Remove outdated references to local gateway dashboard workflows and in-gateway Cloudflare management UI behavior.
[2026.02.16] - API-driven gateway control plane
Changed
- Replace the legacy Nginx/UI-first stack with a headless
watcher + mcproxyruntime. - Remove gateway-local dashboard/auth flows and source route state from public API heartbeat snapshots.
- Limit gateway data-plane handling to Minecraft TCP and render
routes.jsonformcproxyfrom API payloads. - Standardize gateway exposure to exactly three ports: Minecraft (
25565/tcp), Connect control (9001/tcp), and health (80/tcp). - Use an explicit
GATEWAY_IMAGE/GATEWAY_IMAGE_TAGdeployment contract for Swarm so Gateway can be published from the same private image repository flow as Public API. - Move Swarm deployment to a dedicated docker stack file (
docker/stacks/gateway/docker-stack-gateway.yml) to mirror the Public API deployment structure. - Default Gateway production deploys to the dedicated Swarm stack name
connect-gatewayand keep gateway credentials on a stable named volume across stack migrations. - Prefer a dedicated Gateway deploy Docker context (
GATEWAY_DOCKER_CONTEXT) so Gateway rollouts can run isolated from other stack deploy contexts.
Added
- Add gateway auto-registration support with persisted credentials (
CONNECT_GATEWAY_CREDENTIALS_PATH). - Add runtime status endpoints (
/healthz,/status) and unknown-host intake for mcproxy telemetry (/minecraft/unknown-hosts). - Add
/healthalias on the watcher health endpoint for simpler external checks.
[2026.02.01] - Gateway docs migration
Added
- Add Gateway docs to the global documentation site.
- Add a feature checklist for Gateway.
- JWT-based authentication with password & TOTP, including bootstrap admin seeding and session refresh endpoints.
- Capture the protocol for upstream registry entries and expose it through the watcher API.
- Cloudflare credential management endpoints with zone caching and DNS record CRUD (UI + API).
- Optional Cloudflare zone scopes so tokens, die nur einzelne Zonen sehen duerfen, funktionieren via Fallback (
/zones/{id}) weiterhin. - Cloudflare zone creation endpoint/UI mit Suche & Account-Auswahl ueber die neuen Dropdown-Header.
- Automatisches Anlegen der benoetigten Cloudflare-DNS-Records direkt beim Speichern einer Route (TXT-Token, optional CNAME fuer HTTP und SRV fuer Minecraft).
- Automatically ingest Docker containers into upstream nodes and backend groups via the
gateway.upstreamslabel; generated resources carry anAUTOtag for traceability. - Automatically provision HTTP routes from the
gateway.routeslabel and keep them in sync. - Optional MOTD caching for the Minecraft proxy via
MCPROXY_MOTD_CACHE_TTL_SECS, reducing repeated status hits against upstream servers. - Surface Minecraft upstream status info (version, MOTD, players) across route and backend group views via mcproxy status snapshots.
- Auto-create a development Minecraft route when an auto-managed backend group is discovered so the stack works immediately after
docker compose up.
Changed
- Remove the host port binding from the dev Mongo container so
docker compose upsucceeds even when other local Mongo instances are running. - Keep backend groups populated even when upstream DNS lookups fail so default routes remain available during local development.
- Watcher API endpoints now require Bearer tokens; the UI provides a login flow with token-aware polling and SSE reconnection.
- Backend-group editing now locks the protocol field to the first selected upstream and filters further selections to matching protocols in the UI.
- Upstream creation/edit modals require an explicit protocol so persisted backend groups remain consistent with their upstream targets.
- The dashboard adds a dedicated Cloudflare panel so tokens, zones, and DNS records can be maintained directly inside the watcher UI.
- Route hostnames now reuse Cloudflare DNS records; the manual hostname modal and attach/detach flows were replaced with inline selection plus optional manual overrides in the route editor.
- HTTP-CNAME-Eintraege uebernehmen automatisch
PUBLIC_CNAME_TARGET, sofern kein individuelles Ziel hinterlegt wird. - UI surfaces an
AUTObadge for automatically managed upstreams and backend groups and disables edit/delete actions so they remain read-only. - Auto-create a development Minecraft route when an auto-managed backend group is discovered so the stack works immediately after
docker compose up. - Configure the watcher admin interface domains via
WATCHER_ADMIN_URLS(comma-separated), automatically wiring routes to the watcher service. - Remove the direct host port mapping for the watcher container; reach the admin UI exclusively through the configured gateway domains instead of
localhost:8080. - Drop the dedicated host port for the UI dev server and rely on the gateway to expose the Vite frontend during local development.
- Add a
velocity-testcontainer (Velocity proxy) on the dev network so routing toward Velocity backends can be exercised locally.
[2025.10.10-a] - 2025-10-10
Added
- Integrated Vue Router so the browser address bar mirrors the current editor context for routes, backend groups, notes, and upstream nodes.
- Added detailed console debug logging around note and upstream editing flows, covering canvas editors and modal submissions.
Changed
- Surface note and upstream save failures via toast notifications to simplify debugging.
- Prioritise a single overlay when hydrating URL parameters and automatically collapse any others when navigation clears the query.
- Ensure the hostname creation dialog closes whenever other editors open and expose its state via the router query.
- Replaced the Rete-based canvas with the built-in topology panel, removing all Rete assets, auto-aligning nodes left-to-right, and wrapping modal markup in
<template>guards to keep the UI stable during mount. - Topology nodes display live throughput (up/down rates and totals) inline so traffic is visible without opening the analytics tab, and link animations accelerate with higher throughput to highlight busy paths.
- Restyled topology nodes with neon glassmorphism to match the dashboard theme (type badges, animated icons, enriched note previews).