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
- Idle: No players → server sleeps (minimal cost)
- Connect: Player tries to join → ColdStarter intercepts
- Wake: Server starts in background (10-30 seconds)
- 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 readycheck_activity- Enable idle detectionfinish_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