Skip to content

Core Stability & Safety Update

Latest

Choose a tag to compare

@Nextinel Nextinel released this 26 Oct 23:33
· 1 commit to main since this release
e1ec27a

Added

  • FrameworkConfig Module: A centralized configuration file for the entire framework. You can now change debug mode, timeouts, rate limits, and sync hooks in one place without touching the core scripts
  • Safe Zones for update: If a module's update function crashes or yields for too long, it will no longer lag or crash the server. The framework will catch the error, retry it up to 3 times with exponential backoff, and then gracefully suspend the broken module
  • Synchronous Lifecycle Hooks (SYNC_HOOKS): Critical hooks (like playerAdded, characterAdded, humanoidAdded, and characterLoaded) now wait for all modules to finish before moving to the next hook. This guarantees strict execution order (e.g., characterAdded always finishes before humanoidAdded starts)

Improved

  • Non-Blocking YieldWatchdog: Completely rewrote the Watchdog. It no longer uses task.cancel or blocks the Heartbeat thread. Hung modules are now warned about without killing the thread, allowing them to safely finish their background tasks
  • Zero Thread Churn: Removed task.delay creation from the update loop. The framework now uses a single timing check, drastically reducing garbage collection overhead and memory spikes
  • Player Removing Safety: playerRemoving hooks are now guaranteed to finish before the player's profile is closed and the player instance is destroyed, preventing data loss
  • Optimized UI Updates: Added a new updateRawValue helper. When you call profile:add(), :set(), :addAt(), etc., the framework now updates only the specific ValueBase linked to that key/path, instead of recalculating the entire leaderstats table

Fixed

  • HangWatcher Collision: init and asyncInit no longer overwrite each other's tracking data (now uses unique keys like moduleName + init).
  • Missing Dependencies: Missing dependencies now fail fast. In SHOULD_DEBUG = true, it throws a hard error immediately. In production, it logs a clear warning
  • Client Loading Loop: Added a timeout for the client's loading screen if the server fails to attach the SERVER_LOADED_TAG

Notes

  • No breaking API changes: Your existing module logic works as-is. The framework just handles it much more safely now
  • Upgrading from v2.2.0? Don't forget to grab the new FrameworkConfig module and place it in ReplicatedStorage.Modules.Global (if you haven't already)