Echo
Echo replicates other players’ characters as CFrame snapshots at 20 Hz (default). The server packs f32 CFrame buffers into UnreliableRemoteEvent packets; the client interpolates toward the last snapshot and skips LocalPlayer by default. Clock uses workspace:GetServerTimeNow().
Header: #include <clpp/libs/echo.clh>. Runtime: CluauppLibs.Echo.
- Not Heartbeat spam on your own remotes. Default 20 Hz publish loop; tune with
Echo.Config. - Buffers, not JSON character tables.
WriteCFrame/ReadCFrameand packed snapshot records (UserId + 48-byte CFrame). - Server creates remotes; client
WaitForChild.Stats()counters update live.
Echo smooths visuals; it does not replace server authority on position validation.
Example
Section titled “Example”#include <clpp/libs/echo.clh>
void init() { Echo.Config(EchoConfig { .Rate = 20, .Interpolate = 12, .MaxDistance = 400, }); Echo.Start();}On the client, read poses with Echo.Holder().Get(player) and tear down with Sweep when characters remove.
Echo.Start
Section titled “Echo.Start”Returns: nothing (idempotent).
When: Once per place — server publishes snapshots on Heartbeat at Config.Rate; client listens and interpolates.
Echo.Start();Echo.Holder
Section titled “Echo.Holder”Returns: EchoHolder table with Get and All.
When: Read latest replicated pose per player on client or server mirror tables.
EchoEntity ent = Echo.Holder().Get(player);EchoHolder.Get
Section titled “EchoHolder.Get”Returns: EchoEntity — Player, CFrame, Clock (or nil if unknown).
When: Drive nametags, shadows, or off-screen proxies for remote players.
EchoEntity ent = Echo.Holder().Get(player);EchoHolder.All
Section titled “EchoHolder.All”Returns: EchoEntity map keyed by Player (runtime table of all tracked entities).
When: Iterate everyone Echo knows about (debug HUD, batch effects).
EchoEntity all = Echo.Holder().All();Echo.Entity
Section titled “Echo.Entity”Returns: EchoEntityLib with new_(player).
When: Ensure an entity record exists before snapshots arrive.
EchoEntityLib lib = Echo.Entity();EchoEntity e = lib.new_(player);EchoEntityLib.new_
Section titled “EchoEntityLib.new_”Returns: EchoEntity for the given player.
When: Same as ensureEntity — rarely needed if Start and snapshots already run.
EchoEntity e = Echo.Entity().new_(player);Echo.WriteCFrame
Section titled “Echo.WriteCFrame”Returns: buffer — 48 bytes, twelve f32 CFrame components.
When: Custom packing that must match Echo’s on-wire layout.
buffer buf = Echo.WriteCFrame(root.CFrame);Echo.ReadCFrame
Section titled “Echo.ReadCFrame”Returns: CFrame from a 48-byte buffer written by WriteCFrame.
When: Decode a single CFrame payload outside the snapshot packet.
CFrame cf = Echo.ReadCFrame(buf);Echo.Stats
Section titled “Echo.Stats”Returns: EchoStats — Packets, PacketsSent, PacketsReceived, BytesSent, BytesReceived, Snapshots.
When: Studio overlay or Lens window for bandwidth tuning.
EchoStats s = Echo.Stats();Echo.Config
Section titled “Echo.Config”Returns: EchoConfig — Rate, Interpolate, MaxDistance (pass a patch table to merge, then returns live config).
When: Set publish rate (Hz), client lerp stiffness, and optional cull distance (0 = no cull).
Echo.Config(EchoConfig { .Rate = 20, .Interpolate = 16 });auto cfg = Echo.Config();Echo.ReplicationRules
Section titled “Echo.ReplicationRules”Returns: EchoRules — SkipLocal (pass patch to update).
When: Default skips local player replication; disable only if you intentionally drive LocalPlayer from Echo.
Echo.ReplicationRules(EchoRules { .SkipLocal = true });Echo.Events
Section titled “Echo.Events”Returns: Folder — EchoRemotes under ReplicatedStorage (server creates, client waits).
When: Advanced wiring next to the snapshot remote.
Folder folder = Echo.Events();Echo.Snapshots
Section titled “Echo.Snapshots”Returns: auto — last { CFrame, Clock } per player (runtime table).
When: Debug compare raw snapshot vs interpolated root.
auto last = Echo.Snapshots();Echo.ServerClock
Section titled “Echo.ServerClock”Returns: double — workspace:GetServerTimeNow().
When: Align client effects to the same clock stamped on snapshot packets.
double t = Echo.ServerClock();Echo.Player
Section titled “Echo.Player”Returns: Player — Players.LocalPlayer.
When: Client-only helpers without re-fetching the service.
Player me = Echo.Player();