Skip to content

Pillar v0.1.0 — First light

Pre-release
Pre-release

Choose a tag to compare

@vinicius-paraujo vinicius-paraujo released this 08 Jul 13:49
· 66 commits to main since this release

Pre-release. Pillar is in early, iterative development. The public surface is
unstable (0.x) and this build is for validation, not production. See Known limitations.

Pillar is the control plane of the network — it knows the fleet and carries
cross-server messages. This first release lays the communication foundation that later
iterations build routing and health decisions on. A single artifact runs on both Paper
(game servers) and Velocity (proxies).

Highlights

  • Fleet presence — nodes announce themselves via expiring heartbeat keys; a dead
    node drops from every view within ~9 s through native Redis TTL. No central registry.
  • Stream transport — JSON envelopes over Redis Streams, one consumer group per
    node, with poison-entry drop and handler-failure isolation.
  • Correlated request/response — non-blocking CompletableFuture API with scheduled
    timeouts; results hop back to the main thread safely.
  • Diagnostics/pillar fleet, /pillar status (connection, pending inbox,
    recent log), /pillar ping <server>, /pillar reload. Localized (en-us, pt-br).

Requirements

  • Paper 26.1.2 and/or Velocity 3.4.0
  • Java 25
  • A reachable Redis 7 instance

Install

  1. Drop Pillar-0.1.0.jar into each server's and the proxy's plugins/ folder.
  2. Start once to generate config.yml / config-velocity.yml; set the node name,
    role, and Redis connection.
  3. Restart. Verify with /pillar fleet.

A ready-made local topology (proxy + 2 Paper nodes + Redis) lives in test-topology/.

Known limitations

  • Messages delivered but unacknowledged when a JVM is killed (kill -9) stay pending
    until PEL reclaim lands (planned).
  • A node pinging itself is misrouted (self-send); use ping between distinct nodes.
  • Message handling is single-threaded per node — fine for this release's light traffic,
    being reworked before heavier handlers arrive.
  • Extracted lang/ files are not overwritten on update; delete them to pick up new keys.

What's next (Iteration 2)

Health snapshots (MSPT/memory/players) and placement/routing decisions over them.