All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Bridge:step()
has been replaced byBridge:beginFrame
andBridge:endFrame
which separates the logic behind the Incoming and Outgoing queuesYetAnotherNet.createHook()
now returns two functions, abeginFrame
and aendFrame
function which separates scheduling logic
- QueryResult filter stops iteration, causing packets to not be queried
- Documentation for using Squash 2.0.0
- Setup Darklua and rules
- Add
.vscode
settings for luau-lsp - Add Lint script
- Add GitHub CI Workflow
- Mention roblox-project-template in README.md
- Add release scripts for Wally and NPM
- Added a CONTRIBUTING.md guide
- All files have been migrated to
.luau
and GitHub Linguist to Luau - Updated note on Ratelimiting in Documentation
SendRequest:to()
no longer callsRunService:IsClient()
andRunService:IsRunning()
every invocation- BrickColor, EnumItem, and boolean serde is now cached
- Changed order and added issue links to the Setup section in Documentation
- Renamed shell scripts
- Switched to String (alias/path) Requires
- Update Stylua configuration and apply changes
- Set exclusions in
selene.toml
- Exclude docs in
tsconfig.json
- Changed what is included in Wally and NPM package releases
- Luau types for Middleware are no longer strict due to inaccuracy of the type system
- Typescript types for Middleware have been improved to allow for more use cases
- Instance Changes when sent over the network would turn into a Mixed Table, resulting in incorrect Instances being deserialized
./examples
directly was named incorrectly as./example
which resulted in broken links- Documentation for
Configuration
now specifies what is optional - Links to BridgeNet2 were outdated and resulted in 404 pages
getSerDes
function is no longer a bottleneck for serialization and now runs roughly 2x more efficiently- EnumItem serde no longer iterates through all Enums and EnumItems, resulting in it running roughly 4.5x more efficiently
deserializeBuffer
function did not utilize Native Code Generation- Fixed a type error with incoming middleware in internal code
- Unit tests with Jest
- For Identifier
- For SendRequest
- For QueryResult
- For Route
- For Bridge
- Bridge, Route, Player, and RemoteEvent Mocking
- Script for Installing Wally and Exporting Wally Types
- Script for running Jest tests using run-in-roblox
- Warning for attempting to send an invalid string as a recipient
- An Internal Ser/Des Library
- Automatic Compression for the Bridge
- Documentation for the Bridge
- Updated Rojo to v7.4.0
- Updated Jest-Lua to v0.6.1-rc.2
- Migrate from Aftman to Foreman
SendRequest:to()
no longer returns if called on the Client- Refactored Bridge to better allow for unit tests
- Reduced the average call time of
Route:send()
by 50-60% - Documentation no longer references Compression with Middleware
- Rewrote the Bridge to support Buffers
- Refactored the Bridge to better support Mocking
- Identifiers are now represented as Buffers instead of packed strings
- Bridge:snapshot() now returns a frozen table instead of a cloned table
- QueryResult does not filter senders
- Incorrect types for Incoming Middleware
- Incorrect and inconsistent Roblox-TS Types
- Default Channel is never applied when no
configuration
parameter was supplied - Outdated use of
Net.start
in Documentation SendRequest:to()
will show a client warning when using run-in-roblox- Incorrect Unit Test for Outgoing Middleware
- Roblox Typescript API
- Module now returns a Namespace
- Middleware now uses two separate functions instead of configuration
- Refactored internals
- Improved implementation of a default channel
- Channel Validation fails when Channel is Unreliable
- QueryResult returns the incorrect position
- Middleware
- Complete overhaul of the Documentation site
- Incoming packets do not respect their channel
- New Routes API
- Strict Typing
- Unreliable Channel
- Hooks
- Complete API Overhaul
- Rewrote
Net:query()
to use the newQueryResult
type - Rewrote
Net:send()
to use the newSendRequest
type - Exported and internal types are now more strict and are just generally improved
Priority
artifacts in documentation- Matter example game has outdated paths
- Matter example game Replication & Formatting (#3)
- Rojo deletes Remotes when live-syncing (#4)
- Matter Example Game AttackOfTheKillerRoombas, adapted from the official Matter Example Game.
- TestEZ Unit Tests to separate branch
- Removed the
ReliableOrdered
andReliableUnordered
Channels in favor for the newReliable
Channel. ReliableUnordered already sent and received packets in order, rendering ReliableOrdered useless and wasteful.
- Query never filters Players, typecheck would always fail because
typeof(Player)
returnsInstance
- Query filtering all Players on the server when no Player was given in the QueryParams
- Middleware in the
start
method runs only once every two frames - Iterator filter fails to properly filter key-value pairs by @IntegralsGetYouArea in #1
- Iterator filter should also take a key with it's value
- Identifiers always have the same position when the
pos
parameter is not given
- Updated the Getting Started page in Documentation to highlight the need to setup on both the Server and Client with the same configuration.
- The typecheck in Bridge when processing the outgoing queue always fails when the recipient is of type Player.
- Internal Naming of Functions for support for Roblox Debugging tools such as ScriptProfiler.
- The iterator always defaulting to sending all packet information regardless if an
returnFilter
was provided. Net:query()
returning the Sender on Clients despite the Sender always being known on the Client asNet.Server
.- The internal filter of
Net:query()
never returning the Sender when type{ Player }
is provided as a QueryParam and only onePlayer
has sent packets. - The internal filter of
Net:query()
filtering out Server Packets on the Client. - The internal
QueryParams
Parser mistaking theNet.Server
Recipient as an Identifier.
Net:start()
now utilizes middleware in Matter to schedule networking code.
- Minor issues in the Documentation.
- Configuration for Event, Priority, and the ReliableOrdered & ReliableUnordered Channels.
- ReliableUnordered Channel
- Bridge using the wrong RemoteEvents.
SendParams
to theNet:send()
method. See the documentation on Sending Data for information on how to use them.- Guard Clauses and associated Warnings to the
Bridge:send()
method to prevent incorrect data entering the queue. Net.Server
key to represent the key associated with the Server.
- Internal Configuration type to reflect the appropriate Channel types.
- Bridge creating an additional RemoteEvent that is never used.
- Linguist Syntax Highlighting and Language Stats.