Skip to main content

ColdStarter

ColdStarter automatically wakes your server when players connect, then puts it to sleep when idle. You only pay for active time.

How It Works

  1. Idle: No players → server sleeps (minimal cost)
  2. Connect: Player tries to join → ColdStarter intercepts
  3. Wake: Server starts in background (10-30 seconds)
  4. Play: Player connects to running server

Your server still shows as "online" in server browsers while sleeping.

Cost Savings

Typical hobby server:

  • Without ColdStarter: 720 hours/month (24/7)
  • With ColdStarter: 100 hours/month (actual playtime)

Result: ~85% cost reduction

Configuration

Configured per-scroll via scroll.yaml:

ports:
- name: game
port: 25565
protocol: tcp
sleep_handler: packet_handler/minecraft.lua
start_delay: 10
check_activity: true

Port Options

  • sleep_handler - Path to Lua packet handler (required for ColdStarter)
  • start_delay - Seconds to wait before port is ready
  • check_activity - Enable idle detection
  • finish_after_command - Wait for command to finish before opening port

Packet Handlers

Lua handlers respond to game protocols while server is asleep.

Example: minecraft.lua

Lua API

-- Send data to client
sendData(string)

-- Trigger server wake
finish()

-- Get snapshot/queue status
get_queue()
get_snapshot_percentage()
get_finish_sec()

Supported Games

All 95 published scrolls support ColdStarter:

  • Minecraft (all variants)
  • Rust (Vanilla, Oxide)
  • Hytale
  • 10 LGSM games (Palworld, ARK, CS2, etc.)

Custom Handlers

Create packet_handler/game.lua in your scroll:

function handle(ctx, data)
-- Parse packet
if isStatusRequest(data) then
sendData("Server starting...")
end

-- Wake on connect
if isConnectionAttempt(data) then
finish()
end
end