AutoStopper
2.3.0Empty servers sleep. Players wake them. AutoStopper starts mapped Docker backends on demand and stops them after inactivity.
2.3.0latestAutoStopper 2.3.05 days ago Added
- AutoStopper talks to the Docker Engine API directly over the Unix socket or plain TCP, so the proxy no longer needs the Docker CLI. The newdocker.backend(auto,api,cli) anddocker.endpoint(auto,unix://…,tcp://…) settings are validated on load and reload.backend: autouses the API, finding the daemon throughDOCKER_HOST, then anautostopper-dockersocket-proxy sidecar, then/var/run/docker.sock. It falls back to the CLI forssh://or TLSDOCKER_HOST, a selected Docker context, or Windows. The selected backend and endpoint are logged and shown at the end of/autostopper status. Existing deployments that mount the Docker socket keep working unchanged (#143).Changed
- The examples give Velocity Docker access through anautostopper-dockersocket proxy (wollomatic/socket-proxy, pinned by digest) on an internal network. The proxy allows only container inspect, start, and stop, and only from thevelocityservice. Velocity runs the stockitzg/mc-proxyimage with no custom entrypoint, no socket mount, and no host-specific values. The README, security, troubleshooting, and configuration docs describe this setup, and a new [2.2.0 to 2.3.0 migration guide](https://github.com/Criseda/AutoStopper/blob/2.3.0/docs/mi… covers moving an existing deployment. The customdocker-entrypoint.shpattern and the Docker CLI backend (docker.backend: cli) are deprecated and planned for removal in 3.0.0. Mounting the socket directly remains supported (#144). - The examples and README install AutoStopper from Modrinth at startup through the proxy image'sMODRINTH_PROJECTS, pinned to one release, withMINECRAFT_VERSIONset as the image requires. There is no JAR to download; upgrading means changing the pin. The proxy contacts Modrinth on every start. Installing the JAR manually remains documented as the alternative; use one method only (#142).Removed
-docker-entrypoint.shfrom the examples. Existing deployments that use it keep working (#144).2.2.0AutoStopper 2.2.0last week Added
- Failed/autostopper start,stop, andrestartcommands now state the cause in chat. In game, hovering shows the remediation and the typed outcome code (matchingoutcome=invelocity.log), clicking opens the matching troubleshooting section, and a suggested next command (the retry or/autostopper status) follows the line. Console senders get the same cause, remediation, outcome, and link as plain text. Player connection messages are unchanged (#124). -/autostopper helpfor operators, and/autostopper statuswhen any server has failed, end withTroubleshooting · Get helplinks. Documentation links are pinned to the running release (#124). -docs/troubleshooting.mddocuments every manual command failure outcome (#124). -docs/troubleshooting.mdhas an outcome reference covering everyoutcome=code in lifecycle log lines, including player connection outcomes,NO_MAPPING,PROXY_SHUTDOWN, and success codes (#123). -/autostopper status <server>shows one server in detail: state and, while waking, the startup stage, hold, waiting players, time since activity, and the last failure with its age, cause, and fix. The console prints the exact failure time; players hover the age for it. It inspects only that server's container and tab-completes mapped server names. In game, clicking a server name in/autostopper statusopens its detail view (#125). -/autostopper status <server>lists the server's last 10 completed lifecycle operations, newest first: startups, manual starts, stops, and restarts, and automatic stops, each with its age, who started it, its typed outcome (matchingoutcome=invelocity.log), and its duration. The history is in memory only; a proxy restart clears it, and a reload clears it for servers whose mapping was removed, added, or changed (#129).Changed
-/autostopper statusshows the last failure's age (last failure 3m ago during …) instead of a raw ISO-8601 timestamp, and leaves the remediation to/autostopper status <server>. Activity and failure ages share one format, and ages of a day or more read2d 3h ago(#125). - Velocity 4.1.0 (build 22) and 4.2.0 (build 30) are now tested stable runtimes alongside 4.0.0, with 4.2.0 the recommended production line and the stable example. The preview line now validates Velocity 4.2.1-SNAPSHOT (build 41). The packaged-runtime CI matrix, smoke profiles (stable-4.0,stable-4.1,stable,preview), release-candidate E2E, and release metadata were updated to match. Pull requests run onlylegacy,stable, andpreview; the release gate also runsstable-4.0andstable-4.1(#134). -/autostoppernow shows clickable Docs, GitHub, Modrinth, and Changelog links to everyone, and the version opens the release notes; console senders get the URLs as plain text. Documentation and changelog links are pinned to the running release (#131). -/autostopper helpgroups commands under General, Lifecycle, and Holds, uses consistent imperative descriptions (also used by usage messages), drops the/autostopperand/autostopper helpentries, and shows each command's permission on hover. Sources without operator commands get the project links instead of an empty list (#131). - A cancelled manual stop now reportsStopping server <name> was cancelled.instead of the start wording (#124). - Readiness checks no longer hold an AutoStopper worker for the whole readiness window. Each attempt runs as a short, individually bounded task, and the probe interval between attempts waits on a timer instead of a sleeping worker. Concurrent startups no longer delay other servers' status checks, startups, stops, the inactivity scan, or/autostopper status. Readiness deadlines, probe intervals, outcomes, cancellation, and shutdown are unchanged. If AutoStopper is saturated before the first attempt, the startup still reportsOVERLOADED; a later attempt skipped for saturation is retried at the next interval within the same deadline (#95). - The canonical build is the checksummed Maven 3.10.0 Wrapper. Maven's auto-discovered repository prefix filter is disabled in.mvn/maven.configbecause the PaperMC repository can publish a prefix file that omitscom.velocitypowered, which blocks Velocity API resolution.Fixed
- A startup opened by/autostopper startor/autostopper restartnow logsorigin=MANUAL_COMMANDin itsop=STARTUPlifecycle line instead oforigin=PLAYER_CONNECTION(#129). - A startup whose next step throws unexpectedly now fails with the stage's error outcome, so the server becomesFAILEDinstead of staying inSTARTINGuntil the proxy restarts. A manual restart in that case reportsSTART_FAILEDinstead of never completing (#118). - A manual stop that loses its server to another operation now endsCANCELLEDand leaves that operation's state alone, instead of stopping the container or returning the server toREADY(#119).2.1.1AutoStopper 2.1.14 weeks ago Fixed
- Servers whose container stops outside AutoStopper (backend crash, in-game/stop, manualdocker stop) no longer stayREADYafter a prior successful connection. The inactivity scan and refused connection attempts now reconcile the stopped container through the revision-guarded lifecycle path, so the next player connection wakes the server again (#93). - Stops now honor the container's own stop grace period (StopTimeout, Composestop_grace_period) instead of cuttingdocker stopoff at a fixed 10-second deadline. The deadline is the grace period plus the Docker command timeout, with Docker's 10-second default when unset and a 10-minute cap. A stop whose CLI still times out is re-inspected and reported as stopped when the container has already exited. The stop command remainsdocker stop <container>(#94). - The examples give managed backendsstop_grace_period: 60sso large worlds can finish saving.2.1.0AutoStopper 2.1.0Aug 16, 2026 Added
- Added coordinator-owned operator lifecycle commands for mapped servers:/autostopper start <server>,/autostopper stop <server>,/autostopper restart <server>,/autostopper hold <server>, and/autostopper release <server>. - Added command-specific permission nodes (autostopper.command.start,autostopper.command.stop,autostopper.command.restart,autostopper.command.hold,autostopper.command.release) while retainingautostopper.adminas an explicit umbrella. - Implemented runtime shutdown holds that suppress automatic inactivity shutdown without blocking manual commands or player-driven wake-up. Holds survive unchanged reloads and clear on proxy restart, mapping removal, or mapping replacement. - Manual stop and restart enforce strict safety invariants, refusing execution if connected players or lifecycle waiters are present, with an immediate deterministic pre-Docker safety re-check on the worker thread. - Manual restart runs as one atomic coordinator-owned stop → start → readiness sequence under a single authoritative future. - Surfaced hold state in/autostopper statusand updated/autostopper helpwith permission-filtered entries and argument tab completion. - Pinned stable Velocity 4.0.0 build 6 as the production support line on Java 25, tested by the packaged-runtime system tests and the release-candidate Docker/Minecraft gate. Velocity 3.5.1 on Java 21 remains the tested minimum/floor, and Velocity 4.1.0-SNAPSHOT on Java 25 remains clearly labelled preview validation. - Added theRUNNING_UNVERIFIEDoperational state so a Docker-running container is not reported as ready until AutoStopper has completed the configured readiness contract for the current mapping lifecycle. - Connecting players now receive authoritative inspection, startup, readiness, connection, and terminal lifecycle messages. Late arrivals see the current shared stage and unique waiter count. - Redesigned command and chat presentation around the brand identity ("Empty servers sleep. Players wake them."). Replaced legacy bracketed prefixes with clean brand prompts (AutoStopper ›,AutoStopper ✓,AutoStopper !), added scannable deterministic status rows with humanized states and durations, and introduced permission-filtered help with fuzzy command matching. - Added contributor-facing message style guide (docs/message-style-guide.md). - Added structured, typed lifecycle telemetry and bounded process-lifetime observability (#74). Authoritative lifecycle operations emit machine-parsableINFOlog lines (op=,server=,origin=,outcome=,elapsed_ms=,waiters=) with monotonic duration measurement, and intermediate stage durations emitDEBUGlogs. Simultaneous waiters receive 1 shared startup record plus individual connection wait records. Aggregates use thread-safe bounded memory with strictly zero PII and observational exception insulation.Changed
- Operational status now reconciles Docker observations lazily with mapping-aware lifecycle revisions. Active transitions remain authoritative, stopped/degraded Docker state overrides stale quiescent state, and results captured before reload, mapping replacement, or newer lifecycle work are discarded without eager startup readiness probing.Fixed
- Restored command and lifecycle messages on Velocity 3.5.1 by avoiding the Adventure 5 component-builder ABI incompatibility and validating every message factory against the pinned Velocity runtimes.2.0.0AutoStopper 2.0.0Aug 13, 2026 Added
- Tested support lines for Velocity 3.5.1 build 615 on Java 21 and Velocity 4.1.0-SNAPSHOT build 16 on Java 25, using one Java 21 bytecode plugin JAR. - Explicit, isolatedserver_nametocontainer_namemappings with startup/reload preflight. - Real readiness strategies: Minecraft status protocol, Docker health, or either signal, all with bounded per-server deadlines. - Shared lifecycle coordination so simultaneous players use one startup/readiness operation and stop/start/reload races have legal, deterministic outcomes. - Bounded off-thread Docker execution, bounded plugin shutdown, cancellation, and saturated-worker handling without blocking Velocity event or command workers. - Capped exponential retry for failed automatic stops while preserving activity until a confirmed stop. - Atomic configuration reload: an invalid candidate is rejected completely and the previous immutable snapshot remains active. - Permission nodesautostopper.command.statusandautostopper.command.reload, plus the explicitautostopper.adminumbrella. - Typed operational state and sanitized/autostopper statusdiagnostics with operator actions; raw Docker stderr remains in operator logs. - Pinned legacy/current Compose examples, packaged Velocity runtime tests, a real Docker/Compose/Minecraft release-candidate gate, reproducible Maven Wrapper builds, strict dependency/package checks, SpotBugs, JaCoCo, and deterministic CI gates. - Installation, security, configuration, troubleshooting, Modrinth, and 1.1.2 migration documentation.Changed
- Generated inactivity timeout and public documentation now agree on300seconds. - New installations generate no monitored mappings instead of controlling example containers by default. - Velocity's actual lowercase data path is documented asplugins/autostopper/config.yml. - A running Docker container must pass configured readiness before waiting players are connected. - Inactivity scans retain activity on Docker failures and stop only explicitly mapped, running, player-free servers. - Managed containers are expected to exist in advance and userestart: "no"; unmonitored hubs remain outside AutoStopper's lifecycle. - Docker socket/group access is explicitly documented as a privileged, host-root-equivalent trust boundary rather than ordinary non-root isolation. - The canonical build is the checksummed Maven 3.9.16 Wrapper on JDK 21 through 25.Removed
- The prototype's custom/servercommand/interceptor. Velocity owns/serverand its permissions; AutoStopper now observes normal pre-connect events. - Unbounded fixed-delay startup behavior, blocking Docker work on platform workers, and partial or silent configuration fallback.Migration
Read the complete [1.1.2 to 2.0.0 migration guide](https://github.com/Criseda/AutoStopper/blob/2.0.0/docs/mi… before replacing the artifact. The runtime matrix, lowercase data path, permissions, readiness policy, explicit mappings, pinned examples, and Docker security boundary all require operator review.1.1.2AutoStopper 1.1.2Jan 14, 2026 1.1.2: - Fixed permission denied issues from docker - Fixed autocomplete in chat - Fixed error dump when trying to enter a portal that has a server that is booting up, you get a message instead1.1.1AutoStopper 1.1.1Apr 7, 2025 Add functionality to work with external plugins that call velocity api directly to join different servers.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta