ggscale follows semantic versioning at the SaaS-product level: MAJOR.MINOR. Breaking changes to the OSS Go core, SDK API surface, or public HTTP/gRPC API bump MAJOR. New capabilities bump MINOR.
Status legend: [in progress], [committed], [planned], [exploratory].
Milestone: MVP (v1.0)
Status: [in progress]. Target: launch.
The full scope is in docs/mvp.md.
flowchart LR
M1["Milestone 1
Foundations
[done]"] --> M2["Milestone 2
Tenanted API
[in progress]"]
M2 --> M3["Milestone 3
Realtime + Fleet
[next]"]
M3 --> M4["Milestone 4
Billing + Compliance
[planned]"]
M4 --> M5["Milestone 5
Public Beta
[planned]"]
classDef done fill:#d4edda,stroke:#28a745,color:#000
classDef active fill:#fff3cd,stroke:#ffc107,color:#000
classDef planned fill:#e2e3e5,stroke:#6c757d,color:#000
class M1 done
class M2 active
class M3,M4,M5 planned
Included at launch:
- Multi-tenant control plane: auth, storage, leaderboards, friends
- Realtime: WebSocket lobbies and matchmaking
- Hybrid Networking pillar: Agones authoritative fleet (competitive/ranked) and pion/turn STUN/TURN relay (co-op/casual). Both are co-equal launch capabilities
- Go SDK and C# SDK (Unity-verified at launch)
- Pluggable
TransportandAuthenticatorinterfaces; binary transports land in a later milestone without breaking integrators - Stripe billing across Free / PAYG / Premium tiers; Prometheus-driven CCU metering
- 3 OVH regions:
us-east-1(write hub),us-west-1,eu-1, behind Cloudflare LB - Self-host migration guide (
pg_dump,docker save, published compose) - Apache 2.0 OSS core
Milestone: Product Fast-Follows (v1.1)
Status: [committed]. Target: post-MVP fast-follows.
Deliberately deferred from MVP to keep launch shippable. All product and operational work; no foundational rewrites.
- C# SDK: full Godot 4.x and MonoGame verified samples and packaging
- Dynamic K3s node autoscaler: Go reconciler provisions and drains OVH VMs automatically via OVH API and kubeadm-join; replaces alert-driven manual scaling
- Audit-log dashboard UI: filterable view with CSV export
- Player moderation primitives: ban/kick/report endpoints, tenant-scoped ban lists, webhook for custom pipelines
- Game-server log-streaming UI: per-tenant log viewer in dashboard,
ggscale logs --tailCLI, backed by Loki - Grafana + Loki + Promtail: local dev dashboarding stack returns; dev parity matches production
- Postgres HA via Patroni: closes the launch-time Postgres write SPOF; synchronous standby with etcd quorum; sub-30-second automatic failover
- Self-hosted vs. brokered TURN decision: revisited once doomerang-mp produces real bandwidth and cost data
Milestone: High-Performance UDP Transport (v1.2)
Status: [committed]. Target: later.
The technical wedge from foundational research, delivered without breaking the launch SDK contract.
- Server-side
gnetevent loop for raw UDP ingress: 100k+ concurrent UDP flows per VM at sub-millisecond syscall overhead - FlatBuffers schemas for high-frequency game-state messages: zero-allocation decode on both server and client
- Custom UDP reliability layer: ack/retry, jitter buffer, ordering semantics
- SDK opt-in:
ggscale.WithHighPerformanceTransport(); existing call-sites unchanged - Public benchmark: end-to-end latency and GC-pause numbers against the launch stdnet+JSON baseline
The stdnet+JSON transport from launch remains the default; high-performance is opt-in and never deprecated.
Milestone: Shared C-ABI Core (v1.3)
Status: [exploratory] (committed only after the prior milestone’s prototype validates).
Cross-engine network parity via a single C-ABI library. Gated by a prototype proving cgo --buildmode=c-shared loads stably in Unity Editor and IL2CPP Windows standalone without runtime conflicts.
If the prototype passes:
- Single
libggscalewith stable C ABI (Windows/Linux/macOS) - Engine adapters: C# via P/Invoke, Rust/Bevy via
extern "C"and UniFFI, TypeScript/Three.js via WebAssembly - Android
.aarpackaging with ABI splits
If the prototype fails:
- Pure-managed C# SDK improvements via
System.IO.Pipelines - Rust SDK with hand-rolled HTTP and WebSocket bindings
- Full shared-core story defers to a major-version milestone (no pretending otherwise)
Milestone: VM-Based Single-Tenant Substrate (v1.4+)
Status: [exploratory]. Target: later.
A second orchestration substrate alongside K3s+Agones for workloads that don’t fit a shared multi-tenant container substrate.
graph LR
CP["ggscale Control Plane
same matchmaker, same identity, same SDK"] --> K8s
CP --> VM
subgraph K8s["Substrate A: K3s + Agones (default)"]
direction TB
Fleet["Agones Fleet
containerized, Linux
multi-tenant"]
end
subgraph VM["Substrate B: OVH OpenStack + Packer (Premium)"]
direction TB
VMInst["Packer-baked VM
Windows or Linux
single-tenant by construction"]
end
K8s -->|"~95% of workloads"| Tenants["Indie / mid-tier
default path"]
VM -->|"Premium escape hatch"| Premium["Windows servers
Kernel-level anti-cheat
CPU-pinned high-perf
BYO-OpenStack"]
Scope:
- Packer-built VM images (immutable; updates ship as a new image plus re-provision)
- OVH Public Cloud provisioner via OpenStack API (Nova/Neutron/Cinder)
- BYO-OpenStack as a follow-on; same provisioner, pointed at your own private cloud
- Lifecycle integration: same Prometheus scrape and Stripe billing pipeline as Agones pods
Use cases: Windows-only game servers, anti-cheat with kernel drivers (EAC/BattlEye), high-perf physics simulation (CPU pinning, NUMA), heavily-modded sandbox servers (ARK, Minecraft modpacks), compliance/single-tenancy mandates.
Milestone: Edge Expansion and Premium Networking (v1.5+)
Status: [planned]. Target: later.
- Additional OVH regions: APAC (Singapore, Sydney) and LatAm
- OVH bare-metal Game DDoS for UDP traffic (Cloudflare doesn’t proxy UDP; game-server UDP today relies on OVH’s default network filtering)
- Third-party TURN brokering: Twilio / Xirsys / Cloudflare Calls integration as an alternative to self-hosted pion/turn
Milestone: SDK Coverage Expansion (v1.6+)
Status: [planned]. Target: later.
- Godot 4.x native GDScript bindings (beyond C# adapter)
- Unreal Engine 5 native C++ plugin
- TypeScript/JavaScript SDK for browser-based games
Milestone: Matchmaking and Social Graph (v1.7+)
Status: [planned]. Target: later.
- Skill-based matchmaking (SBMM) with configurable rating systems (Elo, TrueSkill, Glicko-2)
- Friends and social graph: friend requests, online presence, activity feed
- Clans/guilds: first-class tenant-scoped group entity with roster, roles, and messaging
- Cross-title identity: single player identity across multiple games under one publisher
Milestone: Game Data and Economy (v1.8+)
Status: [planned]. Target: later.
- Virtual economy primitives: wallets, currencies, item catalogs, transactions
- Cloud saves: versioned player-save blobs with conflict resolution
- Leaderboard expansion: seasonal resets, custom scoring functions, regional boards
- Remote config and A/B testing: tenant-scoped feature flags and experiment framework
Milestone: Lifecycle SKUs (v1.9+)
Status: [planned]. Target: later.
Productized GTM motions on top of the launch platform. No new substrate; additive product offerings inside the same semver lane.
ggscale Sunset (B2B): Port a shutting-down live-service title to ggscale-OSS so the player community can self-host. Satisfies CA AB 2426 and Protect Our Games Act. Fixed-fee tiers (Small / Medium / Large) tied to game complexity. Two delivery paths: (A) port to ggscale-OSS, (B) offline-mode patch when porting is infeasible.
ggscale Community Hosting (B2C): Consumer-facing storefront renting private dedicated server instances of sunset titles. Players pay a monthly subscription; royalty flows back to the publisher. Reuses launch infrastructure end-to-end; no new substrate.
Milestone: Hyperscale (v2.0)
Status: [exploratory]. Target: years away.
- Multi-region Postgres writes: closes the launch-era
us-east-1write hub SPOF; requires distributed-transactions work - gRPC API surface alongside the existing REST and WebSocket API
- Any breaking changes to the OSS Go core or SDK API surface
v2.0 is years away. Everything possible ships before then.