> For the complete documentation index, see [llms.txt](https://dotsnet.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dotsnet.gitbook.io/docs/overview/changelog.md).

# Changelog

## V1.44 \[2022-07-05]

* **fix**: Benchmark movement destinations set around start, not around position. prevents them from stopping to move because of the wander off protection.
* **Upgraded** to Unity 2021.3.4
* **Upgraded** to DOTS 0.51

## V1.43 \[2022-03-30]

* breaking: upgraded to DOTS 0.50, Unity 2020.3.30, Scriptable Render Pipeline (URP)
* breaking: FlatByteArrays functions moved to Utils
* GUIConsole: now shows for warnings too
* PrefabSystem moved into InitializationSystemGroup. no need to show it in SimulationSystemGroup next to regularly updated systems, as it's just distracting
* DependencyInjectionSystem moved into InitializationSystemGroup. no need to show it in SimulationSystemGroup next to regularly updated systems, as it's just distracting
* NetworkComponentSerializers moved into LateSimulationSystemGroup next to NetworkServer/NetworkClientSystem, because it's explicitly updated from those.

## V1.42 \[2022-01-28]

* **fix**: ConvertTo.ToInt32 changed to ToInt64 to still support entities far from origin <https://github.com/vis2k/DOTSNET/issues/59>

## V1.41

* Upgraded to **Unity 2021.2.8** for Apple Silicon support
* **fix**: kcp2k V1.17
  * MaxRetransmit aka dead\_link is now configurable. fixes issues where dead\_link may have been too low causing premature disconnects. Default is now '40' instead of Kcp.DEAD\_LINK '20'.
  * dead\_link disconnect message improved to show exact retransmit count
  * perf: server/client MaximizeSendReceiveBuffersToOSLimit option to set send/recv buffer sizes to OS limit. avoids drops due to small buffers under heavy load.
  * fix: SendUnreliable respects ArraySegment.Offset
  * fix: potential bug with negative length (see PR #2)
  * breaking: removed pause handling because it's not necessary for Mirror anymore
* DeltaCompression: MaxOverhead/MaxPatchSize renamed
* **fix**: Write/ReadBlittable throwing NullReferenceException in some rare android systems which don't support *(T*) unaligned reads/writes

## V1.39 \[2021-12-03]

* **fix**: kcp2k V1.14&#x20;
  * fix: perf: uncork max message size from 144 KB to as much as we want based on receive window size. fixes <https://github.com/vis2k/kcp2k/issues/22> fixes <https://github.com/skywind3000/kcp/pull/291>
  * feature: OnData now includes channel it was received on
  * fix: Send() now throws an exception for messages which require > 255 fragments
  * fix: ReliableMaxMessageSize is now limited to messages which require <= 255 fragments
* **fix**: Delta Snapshots don't use quaternion smallest-three compression anymore. fixes #57
* **fix**: #28 - client now properly destroys NetworkIdentities with LinkedEntityGroup too
* **fix**: NetworkClient.OnTransportData now rejects messages while disconnected. this previously could cause odd situations in tests.
* **fix**: #53 involuntary client disconnect now clears .spawned too
* **packages**: Burst updated to 1.6.3

## V1.38 \[2021-11-26]

* **feature**: NativeHashMap.SortKeys extension & tests
* **feature**: Utils.Partition to partition NativeHashMap last/current into added/kept/removed
* **feature**: Utils.max3
* **fix**: NativeSliceToArraySegment / ArraySegmentToNativeSlice unsafe memcpy could write into random memory if segment/slice was larger than buffer size. Added a test to prevent it from ever happening again.
* **fix**: TransportSystem creates NativeSlice to ArraySegment conversion buffers in OnStartRunning instead of OnCreate. fixes a bug where a custom message size > default would cause errors because the buffers were initialized with the default in OnCreate, before the custom was set later from authoring Awake.
* **fix**: Telepathy transport send rate now shows in NetworkStatistics GUI

## V1.37 \[2021-11-23]

* **fix:** DeltaCompression.Decompress() only reads up to the comparing block's length, instead of reading up to 'blockSize' if 'patch' still had more data.

  \=> added a test to guarantee it never happens again.
* **feature**: NetworkReader/Writer VarInt extensions (useful for delta compression)
* **perf:** delta snapshots metadata per entity reduced from 1 byte 'bool delta' per entity to 8 bytes per WorldMessage in total.

  \=> Reduces Benchmark bandwidth for non moving monsters at radius=30 from 303 KB/s => 275 KB/s (10%)

  \=> a lot more compression optimizations are coming soon!

## V1.36 \[2021-11-21]

* **perf**: Delta Snapshots & Delta Compression
* **feature:** NetworkReader/Writer FixedList\<T> support

## V1.35 \[2021-10-31]

* *Happy halloween!*
* **perf**: Server/Client: Send split into RawSend(NativeSlice) and Send so we can serialize large messages with burst if necessary.
* **breaking:** BitReader/Writer replaced with **NetworkReader**/**Writer** (byte level) to prepare for Delta Compression. It's faster and easier to use as well (no more .BitPosition).
  * *Make sure to pass NetworkReader/Writer instead of BitReader/Writer to your NetworkMessage/NetworkComponent OnSerialize functions everywhere!*
* **feature**: Writer WriteBytes(NativeSlice) for burst support
* **feature:** Reader ReadBytes(byte\*) for burst support
* **perf:** NetworkMessages can now optionally be serialized & deserialized with burst to prepare for huge WorldState messages for Delta Snapshots
  * **feature**: PackMessageHeader() we can pack a NetworkMessage with burst
  * **perf**: Server/Client RegisterHandler can now pass a custom deserializer for burst support
  * **feature**: NetworkServer/ClientMessageSystem: virtual MessageDeserializer() that can be overwritten to explicitly deserialize with burst
* **perf**: SnapshotServerMessageSystem changed from iterating all Entities.ForEach to a bursted .spawned lookup. Significantly faster with large amounts of entities (1 million monsters: 5-14 ms => 3-8 ms)
* **perf**: SnapshotServer/ClientMessageSystem: use messages.IsEmpty instead of messages.Count()
* **fix**: NetworkServer OnTransportDisconnected only runs disconnect code if the connection still exists
* **feature:** NativeHashMap.CopyTo extension
* **feature**: Utils.QuaternionAngle until DOTS quaternion has .Angle() function
* **feature:** FlatByteArrays.CompareBytes16 nonalloc
* **feature**: NativeSlice ToContentString() Extension like BitConverter.GetString()

## V1.34 \[2021-10-16]

* **feature**: NativeMultiMap.ContainsKeyAndValue extension
* **perf**: ConnectionState.owned moved to NetworkServerSystem.ownedPerConnection as NativeMultiHashMap which can be used within burst
* **perf**: DistanceInterestManagement.RebuildObservers: parsing connections is now bursted thanks to server.ownedPerConnection being a native collection
* **perf**: NetworkClient/ServerSystem.spawned changed from Dictionary to NativeHashMap so we can use it in burst
* **feature**: NetworkClient/ServerSystem.RegisterHandler custom allocator for reusable messages to prepare for large WorldState etc.
* **feature**: NetworkClient/ServerMessageSystem provides virtual MessageAllocator that can be overwritten to reuse large messages
* **perf**: FlatByteArrays BytesToArray functions now use memcpy for up to 10x performance improvement
* **perf**: FlatByteArrays ArrayToBytes functions now use memcpy for up to 10x performance improvement
* Transport.GetMaxPacketSize Channel parameter added to increase kcp reliable channel max message size from 1200 bytes to 140 KB
* **removed** Batching: won't be necessary with Delta Snapshots, and it allocated by boxing NetworkMessages anyway
* **feature**: ConnectionState.mainPlayer for convenience, set by JoinWorld
* **feature**: NetworkServerSystem.GetMainPlayerPosition(connectionId) for convenience
* **perf**: MonsterMovementSystem now runs via ScheduleParallel() for significant performance improvement when scaling to 500k+ entities
* **perf**: BitWriter.WriteBytes16 improved. runs twice as fast now.
* **perf**: BitReader.ReadBytes16 improved. runs 25% faster.
* **fix**: NetworkServerSystem OnTransportConnect/Data/Disconnect callbacks now check if server is active. fixes a bug where Transport Update would be called just after stopping, then NRE would be thrown because OnTransportDisconnect would still try to remove from connections which is already null.
* **fix**: StopServer() now clears ownedPerConnection to fix a bug where StartServer()->ConnectClient()->StopServer()->StartServer would throw an exception about old entities
* **perf**: BitReader/Writer now use NativeArray/NativeSlice instead of byte\[] and ArraySegment to be burstable. Transport OnData() now uses NativeSlice too.

## V1.33 \[2021-10-05]

* **breaking**: NetworkMessage messageId size increased to 2 bytes
* **feature:** NetworkMessageMeta.**GetId\<T>** for automated message ids
* **perf:** NetworkMessage.De/Serialize parameter changed from IBitReader/Writer to BitReader/Writer to avoid runtime allocations when casting to interfaces
* **perf**: Batching now always flushes at the end of the frame in order to minimize latency
* **breaking**: removed libuv & LiteNetLib. use kcp/Telepathy instead, which are both stable & fast enough for DOTSNET
* **Transports:** initialization moved to Start()/Connect()
* **kcp2k** updated to V1.12
* **Network Loop**: Process Incoming -> Update World -> Process Outgoing
  * adjusted Transports for Early / LateUpdate
  * adjusted NetworkServer/ClientSystem update order
  * adjusted Interest Management update order
  * added LateSimulationGroups

## V1.32 \[2021-09-27]

* **fix**: Quaternion Compression LargestAbsoluteComponentIndex wrong largest initialization&#x20;
* **packages**: updated to Burst 1.6.0 for apple silicon support
* **packages:** updated latest .previews of remaining packages

## V1.31 \[2021-07-20]

* perf: **kcp2k** V1.11
  * perf: where-allocation (<https://github.com/vis2k/where-allocation>):

    nearly removes all socket.SendTo/ReceiveFrom allocations
  * perf: Segment MemoryStream initial capacity set to MTU to avoid early runtime

    resizing/allocations
* **fix**: Utils.RoundBitsToFullBytes(0) now returns 0 bytes
* Upgraded to **Unity 2020.3.12f1** LTS for latest fixes
* **fix**: Benchmark 'Ground' object is now converted to network entity, not to regular entity (<https://github.com/vis2k/DOTSNET/issues/44>)
* **feature**: BitReader/Writer: float2 support

## V1.30 \[2021-05-29]

* **BitWriter128**: rewrite to use int\[] directly instead of scratch
* **BitWriter128**: allow setting .BitPosition from the outside
* **BitReader128**: expose .BitPosition
* **TransportServerSystem**.Disconnect return value changed to void because the bool wasn't used anywhere.
* **packages**: burst updated to 1.4.8 verified
* **kcp2k V1.10**
  * **feature**: configurable Timeout
  * allocations explained with comments (C# ReceiveFrom / IPEndPoint.GetHashCode)
  * **fix**: #17 KcpConnection.ReceiveNextReliable now assigns message default so it works in .net too
  * **fix**: Segment pool is not static anymore. Each kcp instance now has it's own Pool. fixes #18 concurrency issues
* **fix**: Transport initializations moved from OnCreate to OnStartRunning. Fixes a bug where kcp server would always run with default configuration because SelectiveSystemAuthoring Awake() configuration is called AFTER OnCreate(). **Fixes kcp not handling much bandwidth** because CongestionWindow was always enabled, limiting send queue to send buffer copying to around 60 items per tick due to congestion control.
* Disabled some **log** messages on startup

## V1.29 \[2021-04-30]

* Upgrade to **Unity 2020.3 LTS** again
* breaking: **Snapshots** (raw). replaces Broadcast systems. Prepares for NetworkComponents.
* **breaking**: NetworkEntity renamed to NetworkIdentity because that's what it is
* **fix**: PongServerSystem.OnUpdate() now calls base.OnUpdate() too. Fixes a bug where batched messages wouldn't be flushed in the Pong example.
* NetworkServerSystem.**Send(List)** obsoleted. It was only used by InterestManagementSystem, and the implementation simply calls Send(message) for each list entry.
* **perf**: InterestManagement uses Send(message) instead of Send(list). previously it would sort messages into a list, call Send(list), then Send(List) would call Send(message) for each list entry, which is redundant.
* **fix**: libuv replaced with kcp everywhere. libuv obsoleted. fixes 2020.3 LTS build bug.
* **feature**: NetworkComponents

## V1.28 \[2021-04-15]

* fix: downgraded to Unity 2020.1.16 to avoid ‘no available transport’ error in builds.
  * Let’s stay on this version until I have time to look into the bug
* packages: Burst 1.4.7 (verified)
* batching simplified and fully moved to update
* BruteForceInterestManagementSystem renamed to DistanceInterestManagementSystem
* NetworkMessageMeta.Pack/UnpackMessage helper functions so client & server are guaranteed to use the same packing code
* BitWriter: smaller improvements
* BitWriter/Reader: float3 support added for convenience
* BitReader/Writer: Read/WriterBytesBitSize fixed\* version for 'fixed byte\[]' support
* IBitReader/Writer interface added to prepare for NetworkComponents
* BitReader/Writer128 (burstable) added to prepare for NetworkComponents
* fix: Benchmark scene PlayerMovement SelectiveSystemAuthoring component moved from NetworkServer GameObject to NetworkClient GameObject

## V1.27 \[2021-03-29]

* Unity updated to 2020.3 LTS for stability
* fix: Telepathy updated to V1.6: lots of fixes & improvements
* fix: kcp2k V1.8: fixes empty message sending/receiving undefined behaviour and fixes IPv6 errors on Nintendo Switch
* packages: burst updated to 1.4.6
* packages: code coverage 1.0.0
* packages: entity 0.17.0; hybrid renderer 0.11.0; dots editor 0.12.0
* packages: test framework 1.1.24
* packages: unity.physics 0.6.0

## V1.26 \[2021-01-29]

* Telepathy transport added
* packages: DOTS Editor V0.11.0 added
* BitReader: ReadBytesBitSize added
* fix: Batch.lastSendTime is now initialized to current time so that first elapsed time calculation doesn't use "now - 0" which would always be a lot
* libuv2k V0.19
  * fix: deadlock/crash when closing loop inside a uv\_run call is now detected and an error is logged instead of allowing libuv to crash Unity.
  * added more tests
  * fix: Shutdown now clears nativeLookup after logging about them not being disposed. fixes a bug where if one test/session would miss disposing, the values would stay in there and make all future tests fail until the next domain reload.
  * fix: TcpStream.OnCloseHandle doesn't invalidate the handle before the OnClosed callback anymore
  * fix: libuv Transport OnLibuvServerClosed doesn't access the disposed handle's usertoken anymore. we get the connectionId before disposing now.
  * fix: libuv Transport loops are created/disposed only once in OnCreate/OnDestroy. we should not dispose a loop while events are being called from a loop's uv\_run
  * fix: libuv Transport now Updates even if server/client are null. fixes ClientVoluntaryDisconnect test not passing because client.Disconnect()->uv\_close callback would only be called in next loop update, which would never happen if we don't update after the client was disposed.
  * fix: libuv Transport doesn't manually dispose the handle in OnLibuvError anymore. libuv2k does it internally already, and calling it twice is actually not a good idea.
  * fix: libuv Transport manually dispose the handle in OnLibuvClosed anymore. libuv2k does it internally already, and calling it Dispose() instead of a Dispose() call is just a bad idea. potentially fixes memory/crash issues.
  * fix: libuv Transport OnLibuvError/Closed checks null before invoking OnDisconnected. fixes a bug where stopping the Editor while client and server are running would clean up loop -> call OnClosed -> DOTSNET already removed the Transport events but libuv Transport still tried to access them.

## V1.25 \[2021-01-21]

* perf: BitReader uses fast method when copying 4 bytes, slow method otherwise.
* perf: BitWriter uses fast method when copying 4 bytes, slow method otherwise.
* fix: kcp2k V1.7
  * lots of fixes(!)
  * performance improvements
  * unreliable channel support(!)
  * DOTSNET Transport: Send/Receive window defaults increased 4096(!)
  * statistics logging for headless servers
* fix: libuv2k V0.18:
  * NativeHandle major rewrite to improve C#<->C interface
  * Fixed several memory issues
  * Improved performance
  * Hugely simplified code
  * NativeHandle memory leaks are now detected on shutdown
* fix: netId is now ulong again instead of uint to avoid situations where Version would be larger than 0xF too quickly (e.g. after a monster respawned 16 times). Added comment so this is never changed again.

## V1.24 \[2021-01-11]

* perf: kcp2k V1.6
  * unreliable channel
  * better recv/send window size defaults
  * show max send/recv rate in debug gui
  * lots of improvements
* fix: KcpTransport uses OnCreate to set up kcp, and wraps the callbacks in lazy functions. fixes a bug where starting in headless would cause a NullReferenceException because Kcp OnStartRunning is called after Server OnStartRunning.
* perf: ServerActiveSimulationSystemGroup foreach allocations removed by using for-int
* perf: ClientConnectSimulationSystemGroup foreach allocations removed by using for-int
* BitWriter: support buffer sizes that aren't multiples of 4 for convenience

## V1.23 \[2021-01-06]

* perf: Bitpacking to compress values down to the bit. Use BitWriter.WriteUInt(level, 1, 60) to compress a level from range 1..60 down to only 6 bits.
* perf: Batching on a per-connection basis for every send function. This is a lot easier than Send(NativeList) only batching. And it actually batches every Send, not just Send(NativeList).
* perf: NetworkEntity.netId 4 bytes uint instead of 8 bytes ulong. Reduces 10k Benchmark bandwidth from 2.48 MB/s to 2.1 MB/s.
* perf: NetworkMessage.GetId() 2 bytes ushort reduced to 1 byte. Reduces 10k Benchmark Bandwidth from 2.10 MB/s to 2.00 MB/s. 256 message ids should be enough for every project.
* perf: NetworkServer/Client WrapHandler uses 'default' instead of new T() in combination with 'where T : struct' to avoid heavy allocations of 88 KB / frame in 10k benchmark.
* Network/ServerClientSystem hooks into Transport events via += instead of = to not overwrite anyone else's hooks. Prepares for NetworkStatistics.
* Transport.OnSend for statistics etc.
* NetworkStatistics to measure bandwidth via NetworkServer/ClientStatisticsAuthoring components, see Benchmark example.
* fix: NetworkClientSystem.OnTransportData now disconnects if it's called with an empty ArraySegment
* Packages: Burst updated from 1.3.0 to 1.4.3 \[verified]

## V1.22 \[2020-12-12]

* perf: Unity Server Build doesn't update ClientWorld anymore, but still creates it for convenience and to avoid #if UNITY\_SERVER checks all over DOTSNET. (<https://github.com/vis2k/DOTSNET/issues/33>)
* perf: KcpTransport: use 'turbo mode' configuration as recommended by original kcp repository
* breaking: automated NetworkMessage serialization reverted. Back to custom Serialize/Deserialize methods. We still keep <\<messageId,amount,messages>> batching & bandwidth savings from Send(NativeArray). Prepares for Bitpacker and solves for Array serialization like <https://github.com/vis2k/DOTSNET/issues/3> . Make sure to add Serialize/Deserialize methods to your NetworkMessages when upgrading.

## V1.21 \[2020-12-09]

* kcp2k V1.2: smaller fixes, MaxMessageSize increased from 1200 bytes to 145KB
* packages: Entities updated from 0.14.0 to 0.16.0
* packages: Hybrid Renderer updated to 0.10.0
* packages: Unity.Physics updated to 0.5.1
* Upgraded to Unity 2020.1.16
* fix: LiteNetLibServer/ClientTransport: IPv6 disabled again because it caused a SocketException when connecting
* LiteNetLib updated to 0.9.4

## V1.20 \[2020-11-03]

* kcp Transport

## V1.19 \[2020-10-09]

* LiteNetLib Transport: enable IPv6
* libuv2k V0.15: removed send/recv allocations, IL2CPP support, no more ConcurrentPool, fixed potential WriteRequest.Release deadlock
* perf: BruteForceInterestManagement update time is now set in RebuildAll instead of Update. Avoids unnecessary updates if someone just called RebuildAll anyway

## V1.18b \[2020-09-25]

* libuv2k V0.12: fixes, perf, libuv binaries bumped to V1.39.0, windows release build to fix DllNotFoundException
* breaking: Apathy Transport replaced by libuv2k everywhere because it’s better in every single way (performance, stability, architecture, etc.)
* Packages: Entities updated to 0.14.0
* Packages: HybridRenderer updated to 0.8.0
* LiteNetLib Transport: exposed latency simulation properties

## V1.17 \[2020-08-25]

* Upgraded to Unity 2020.1.2f1 for ECS package updates
* fix: NetworkServerSystem.StartServer starts transport before settings server to active to avoid [potential race conditions](https://forum.unity.com/threads/dotsnet-high-performance-unity-ecs-networking-from-the-creator-of-mirror.880777/page-2#post-6210908)
* NetworkClientSystem: OnConnected/OnDisconnected virtual functions added for classes that inherit from NetworkClientSystem
* NetworkServerSystem: OnConnected/OnDisconnected virtual functions added for classes that inherit from NetworkServerSystem
* fix: ChatClientSystem uses OnDisconnected instead of OnStartRunning to reset state. fixes [issue 25](https://github.com/vis2k/DOTSNET/issues/25) (note: works with MemoryTransport, doesn't work with Apathy yet because OnDisconnect isn't called on client for some reason)
* fix: Apathy updated to V1.16. Fixes a bug where calling client.Disconnect() voluntarily would never call Transport.OnDisconnected.

## V1.16 \[2020-08-12]

* NetworkTransformAuthoring component instead of auto generated. Make sure to reassign it on your prefabs and reassign sync direction. This was needed for [some workflows](https://forum.unity.com/threads/dotsnet-high-performance-unity-ecs-networking-from-the-creator-of-mirror.880777/page-2#post-6193515).

## V1.15 \[2020-08-08]

* Upgraded to Unity 2020.1 for latest ECS package updates
* Packages: Entities updated to 0.13.0
* Packages: HybridRenderer updated to 0.7.0 to fix errors
* Packages: Unity.Physics updated to 0.4.1
* sharp\_uv updated to 0.5 to fix Unsafe is now internal error introduced by HybridRenderer 0.7.0

## V1.14 \[2020-07-27]

* Quaternion compression to significantly reduce bandwidth. Apathy can now send 20k networked entities to a single connection easily without buffers getting full
* Upgraded to Unity 2019.4.4f1
* fix: HybridRenderer V2 can only be added to one world, otherwise we get 'material registered twice' errors. Bootstrap now only adds it to the client world.
* fix: Bootstrap adds Companion systems to unitySystems
* fix: DestroyAllNetworkEntities now works for Entities with LinkedEntityGroups too
* fix: Apathy updated to V1.15. fixes iOS XCode build errors

## V1.13 \[2020-07-21]

* New server->client message protocol to optimize bandwidth/performance
* Message Packing for giant performance improvements for all transports:
  * ![](https://lh3.googleusercontent.com/eD3k6dPzyXjQWJXH-GxrdDy4z-3Fl9M2uClA2YpO1xu54AaFWzej_26Zr9d5bS7xgn2dHJftTBum0gDsl02umnhTbe3yhrAU2yx9TcQxnvxXj35SSOdud0EnxFDQ4j6A1veo4THk)
  * NetworkServerSystem.Send(connectionId, NativeList) for high performance message sending with automated chunking to respect Transport MaxMessageSize
  * NetworkTransformServerSystem uses Send(NativeList) for high performance
  * InterestManagementSystem uses Send(NativeList) for high performance
  * Apathy Server Transport: send queueing removed because DOTSNET handles it
  * Libuv Server Transport: send queueing removed because DOTSNET handles it
* fix: LiteNetLib Transport uses correct MTU to avoid TooBigPacketException when packing messages
* Apathy Transport: NoDelay = true by default because Apathy is buffer size limited, and we want to empty it out asap

## V1.12 \[2020-07-20]

* libuv Transport added

## V1.11 \[2020-07-12]

* LiteNetLib Transport added
* Apathy updated to V1.13 (deterministic send/recv buffer behaviour. fixes the Linux bug)
* NetworkServer/ClientSystem.Send(): added Channel parameter
* NetworkTransformServerSystem uses Unreliable channel now

## V1.10 \[2020-06-25]

* breaking: NetworkTransformClient/ServerSystem is not created automatically anymore. Make sure to have the authoring components attached to each scene’s NetworkClient/Server GameObject
* breaking: TransformClient/ServerMessageSystem is not created automatically anymore. Make sure to have the authoring components attached to each scene’s NetworkClient/Server GameObject
* breaking: Spawn/UnspawnMessageSystem is not created automatically anymore. Make sure to have the authoring components attached to each scene’s NetworkClient GameObject
* feature: DependencyInjection now runs before OnCreate
* fix: ClientConnectedSimulationSystemGroup: client null check for cases where there is no NetworkClientAuthoring component in the scene
* fix: ServerActiveSimulationSystemGroup: client null check for cases where there is no NetworkClientAuthoring component in the scene

## V1.9 \[2020-06-23]

* fix: TransformClientMessageSystem overwrites OnCreate/OnDestroy but didn't call ClientMessageSystem's base.OnCreate/OnDestroy, causing bugs if we actually use OnCreate/OnDestroy in ClientMessageSystem
* fix: NetworkClient/ServerMessageSystem uses OnCreate to register messages. Fixes a bug where a message would come in before the handler was registered, because we are in ConnectedGroup/ActiveGroup, so it only registered after connected and after the message was already received.
* Range slider is now only shown while server is running (and not on client anymore)

## V1.8 \[2020-06-20]

* Extensions: NativeMultiHashMap.TryIterator for easier iterations
* InterestManagementSystem: removed obsolete SendUn/SpawnMessage functions
* NetworkClientSystem.Send(NativeList) for Burst/Job support added
* perf: NetworkTransformClientSystem uses Burst. For 75k Entities it reduces system time from 11ms to 0.33ms. So it's 30x faster.
* SegmentReader.ReadBytes4094 added
* SegmentWriter.WriteBytes4094 added
* breaking: NetworkServerSystem.Send parameters switched for consistency and ease of use
* fix: TransportServer/ClientSystems are now updated in LateSimulationSystemGroup after all other systems. Fixes a bug where the Chat demo wouldn't work because Transport.OnStartRunning would set apathy's OnConnected/OnData hooks before Client.OnStartRunning would set the Transport hooks, causing them to be not set. Also avoids similar bugs in the future because update order is now deterministic.

## V1.7 \[2020-06-15]

* Apathy updated to the latest version. Reduces memory usage per connection from around 2GB to 64KB and removes the 1-3s allocation freeze when clicking the client connect button.
* Benchmark Example: fix MonsterMovementSystem seed is never zero anymore to avoid ArgumentException in Unity.Mathematics

## V1.6 \[2020-06-11]

* Upgraded to Unity 2019.4 LTS
* perf: NetworkTransformServerSystem Burst compiled. For 10k Entities with interval=0, it required 20-22ms without Burst and 5-6ms with Burst now.
* perf: InterestManagement uses NativeMultiMaps to buffer Spawn/Unspawn messages instead of using DynamicBuffers. With 10k Entities at interval=0, it reduces system time from 8ms to 1ms.
* Chat Example: added interest management to avoid DependencyInjection warning.
* fix: NetworkTransform interpolation on clients is applied in main thread instead of Job. Movement is smooth again, especially noticeable in the Pong demo.
* \=> [10k Benchmark is now running at 130 FPS](https://gyazo.com/6be30495909a1be819af750bd0e0e0bc) on a Laptop

## V1.5 \[2020-06-08]

* fix: Bootstrap.Initialize calls TypeManager.Initialize before using types. Fixes a bug where development builds on some platforms would throw a "The TypeManager must be initialized before the TypeManager can be used" Assertion failure.
* perf: TransformClientMessageSystem batch processes all new TransformMessages with an Entities.ForEach call in each Update. This is a lot better than calling TryGetValue and SetComponentData 10k times.
* perf: TransformClientMessageSystem runs in a Job. Applying TransformMessages on the client for 50k Entities reduced from originally 200ms for OnMessage SetComponentData to 0.05ms with Job/Burst.
* NetworkServerSystem.Send NativeMultiHashMap function added for Jobs
* Extensions: DynamicBuffer.Contains modified for Job support
* InterestManagement restructured for Burst support. When rebuilding every frame with 10k Entities, the system time was reduced from 339ms per Update to 5.89ms per Update.
* 10k Example renamed to Benchmark with configurable spawn amount in the new SpawnSystemAuthoring component.
* Benchmark Example: added Slider to modify visibility radius at runtime.

## V1.4 \[2020-06-01]

* NetworkMessage serialization automated, and it’s faster now.
* Increased test coverage internally
* NetworkServer/Client message handlers use generic message delegates so that NetworkServer/ClientMessageSystem don’t need the OnMessageInternal workaround anymore.
* perf: SegmentWriter.WriteBytes: use UnsafeUtility.MemCpy instead of Array.Copy because it's 25% faster
* perf: Entities.ForEach queries read-only parameters are now marked as ‘in’ everywhere

## V1.3 \[2020-06-01]

* Unity updated to 2019.3.14
* Entities/Burst Packages updated to latest versions
* fix: SegmentReader.Remaining calculation now works with ArraySegments that start at an offset
* fix: ApathyTransportServer/ClientSystem now applies configuration in OnStartRunning instead of OnCreate so that Authoring settings are actually applied&#x20;
* performance: Apathy uncorked. Apathy performance is now on par with MemoryTransport. At least 20x faster than before. Try the 10k Demo with max visibility.
* usability: NetworkServer/ClientMessageSystem: OnMessage parameter is the actual message type instead of NetworkMessage now

## V1.2 \[2020-05-25]

* SegmentReader made 5x faster: 1mio x ReadFloat3 down from 2765ms to 538ms
* SegmentWriter made 3x faster: 1mio x WriteFloat3 down from 922ms to 345ms

## V1.1 \[2020-05-25]

* Unity.Physics support
* (Job)ComponentSystems converted to SystemBase
* Pong/Chat/Physics demos added
* Fixed clients not despawning other disconnected client’s players
* Smaller fixes & improvements

## V1.0 \[2020-05-25]

* Initial release.
