Release notes

Changelog

Every version of Owl, from the first fork of Knit to the current stable release v1.1.2, shipped August 3, 2026.

v1.1.2

Latest

Service Proxy & Player Token Fixes

  • FixedClient Service Proxy - resolved argument shifting when calling methods with colon syntax (`:`) by filtering implicit `self` injection before network dispatch.
  • FixedClient Service Proxy - fixed RemoteFunction binding by correctly routing `Owl_RF` folders to `ClientComm:GetFunction` instead of `GetProperty`.
  • FixedPlayer Tokens - eliminated race condition causing `GetPlrToken` to randomly return `nil` on early client requests by adding lazy on-demand token generation.

v1.0.4

First release

  • AddedOwlAction declarative, priority-based input binding on top of ContextActionService with ActionMaps and Extensions.
  • AddedOwl.SpawnPlr(plr) for manual character loading when Players.CharacterAutoLoads is disabled.
  • AddedOwl.OnStart() resolves immediately if already started, otherwise the next time Owl.Start() resolves.
  • ChangedOwl.Config is now frozen (table.freeze) the instant Owl.Start() resolves, instead of staying mutable for the whole session.
  • FixedA rare race condition where a Service's parallel OwlStart could run before a sibling's OwlInit had fully released the thread.

v0.8.0

OwlData rewrite

  • AddedOwlData the new persistence subsystem with a modular adapter architecture (ProfileStoreAdapter, DataStoreAdapter).
  • AddedAutomatic backend fallback: if the configured adapter's library is missing, OwlData switches to the other one instead of crashing.
  • Addedprofile:Observe(key, fn) with wildcard ("*") support for reacting to any key change.
  • Changedprofile:Save() now returns a Promise instead of firing a callback, for consistency with the rest of the framework's async API.
  • FixedA session lock could remain held for up to 60 seconds if a player rejoined a new server faster than the old one finished releasing it.
  • RemovedThe old DataService boilerplate pattern from pre-0.9 example projects superseded entirely by OwlData.Load/Get/Await.

v0.5.0

Components 2.0

  • AddedComponent Extensions reusable Constructing/Constructed/Starting/Started/Stopping/Stopped hooks, shareable across Component types.
  • AddedExplicit Type field ("Server" | "Client" | "Shared") on every Component, enforced at :Watch() time.
  • AddedComponent:WaitFor(instance, timeout?) Promise-based, instead of manually polling :Get() in a loop.
  • ChangedComponent:Get() and :GetAll() now warn and return nil/{} when called from a context the Component's Type doesn't allow, instead of silently returning stale data.
  • FixedA Component's Trove wasn't always destroyed before Destroy() ran on rapid tag removal, occasionally leaking connections.
  • RemovedComponent:Init() renamed to Component:Construct() to avoid confusion with Owl's own OwlInit lifecycle phase.

v0.4.0

Security hardening

  • AddedOwl.Util.RateLimiter sliding-window rate limiting with perPlayer/global/strict shortcuts and opt-in progressive penalties.
  • AddedOwl.Util.TypeChecker schema-based argument and return-value validation, usable as middleware or standalone via .validate/.compile.
  • AddedOwl.GetPlrToken(plr) to confirm a Player argument genuinely matches the caller of the current remote invocation.
  • ChangedMiddleware now cascades explicitly: Global, then per-Service, then per-remote previously the order between Global and Service-level was unspecified.

v0.2.0

Communication rewrite

  • AddedOwl.CreateSignal() and Owl.CreateProperty() declarative markers replacing manual RemoteEvent/RemoteFunction instance management.
  • AddedProperty targeting: SetFor, SetForList, SetFilter, ClearFor, ClearFilter for per-player and per-group state.
  • ChangedEvery Service.Client entry is now automatically hashed (Owl.HashName) before being turned into a remote, reducing replicated instance-name footprint.

v0.1.0

Dependency graph

  • AddedTopological sort for OwlInit a Service's declared Dependencies now guarantee initialization order, computed automatically.
  • AddedExplicit error messages for unresolved or circular dependencies at startup, instead of a silent hang.
  • FixedServices occasionally finished OwlInit out of order under load, causing intermittent nil references in Services that depended on each other.

v0.0.5

Initial fork from Knit

  • AddedCore Services/Controllers pattern, forked and modernized from Knit.
  • AddedOwlInit / OwlStart / OwlDestroy lifecycle and the first automatic hooks: OwlOnPlayerAdded, OwlOnPlayerRemoving.
  • AddedOwl.AddServices / Owl.AddControllers for folder-based module loading.