Skip to content

Releases: JanSharp/VRCLockstep

v1.1.1

Choose a tag to compare

@JanSharp JanSharp released this 04 Apr 16:35

Installing

Go to the VCC Listing page and follow the instructions there.

Changelog

1.1.1 - 2026-04-04

Fixed

  • Update com.jansharp.common dependency to 1.3.1 (2869f3c)

Zip sha256 checksum

b52a1d7ec544fc33039379e14dd1d2240e38ddcbd23406e2df6fb0ac62a42613

v1.1.0

Choose a tag to compare

@JanSharp JanSharp released this 04 Apr 00:07

Installing

Go to the VCC Listing page and follow the instructions there.

Changelog

1.1.0 - 2026-04-04

For migration regarding OnInit, OnClientBeginCatchUp, OnImportFinishingUp and (separately) export string format changes see migrations-1.1.0.md.

Changed

  • Breaking: Make InitWidgetData run sooner on the first client, which is more consistent with late joiners (6fa9a0c)
  • Breaking: Add a signature and internal data version to export strings (2e9614a)
  • Breaking: Make export/import and their options APIs only usable once all OnInit or all OnClientBeginCatchUp listeners have been run to prevent systems getting events or callbacks relating to these APIs before they've even been initialized (6033282)
  • Breaking: Allow OnClientBeginCatchUp to be spread out across frames (6132b9e, 6033282)
  • Breaking: Allow OnInit to be spread out across frames (c141304, cac2eca, 6033282)
  • Breaking: Make InGameStateSafeEvent more useful when cross system interactions are involved (ec65c14)
  • Improve performance of write and read custom class functions (5b9d9a8)
  • Make cancelling of ongoing late joiner sync less aggressive to reduce how long clients may have to wait before receiving late joiner data (8609a29)
  • Remove potential unintentional additional delay before late joiner data gets sent (c4eb771)
  • Clarify xml annotations for WriteSmall variants (d163cfd)
  • Make lifecycle docs more accurate reflecting initialization changes (7a33972)
  • Improve wording for singleton input action docs (7cf5f0c)
  • Remember import options consistently in GameStatesUI, like including remembering even when not confirming the import (aac3961)
  • Prevent nonsensical generic value editor UI fade animations in GameStatesUI (8fa5e2a)
  • Make export game states info in GameStatesUI collapsed by default and remember the fold out state (0c0ca11)
  • Only fold out import info in GameStatesUI if there are any warnings (af7ac67)
  • Make "not in imported data" in GameStatesUI red instead of gray for consistency (fdd525f, f576900)
  • Support StartExport being called with allExportOptions being null (df89663)
  • Make StartExport no longer call ResetWriteStream (fe58894)
  • Support GameStatesUI being disabled in the hierarchy by default (d5fdc3f)
  • Improve GameStatesUI import info text generation performance (4c8f8d9)
  • Allow multiple games states to derive from the same abstract base class (be413e1)
  • Update IsInitialized docs due to initialization life cycle changes (4f3a27f, 6033282)
  • Update IsImporting docs due to initialization life cycle changes (6033282)
  • Remove pointless delay between deserializing of game states for late joiners (8d20b25)
  • Make IsDeserializingForImport docs clearer (609389b)
  • Properly mention IsExporting in StartExport annotations (3ec9669)
  • Further elaborate in a comment in the game state example in the documentation (b3835f6)
  • Mention SingletonDependencyAttribute alongside SingletonReferenceAttribute when describing LockstepGameStateDependencyAttribute (d7e8125)

Added

  • Add OpenGameStateUnsafeScope and CloseGameStateUnsafeScope to give systems limited control over the value of InGameStateSafeContext specifically in conjunction with running foreign code (c5c97bd)
  • Add editor scripting to ensure classes deriving from LockstepGameStateOptionsUI define appropriate currentOptions and optionsToValidate fields (5d38363)
  • Add MaxWorkMSPerFrame, MaxWorkMSPerFrameLong, MaxWorkSecondsPerFrame and OnMaxWorkMSPerFrameChanged, used both by lockstep as well as for other systems which implement logic which gets spread out across frames (0275e05)
  • Specifically state IsDeserializingForImport always being false in ShowOptionsEditor (f445ec9)
  • Add SelfLoadsBeforeDependency to LockstepGameStateDependencyAttribute (a2f170b)
  • Add migration docs, including editor scripting to convert old export strings (72f0d8b, 2e9614a)
  • Add list of game states to export to GameStatesUI (6a2e120)
  • Add int and uint variants for tick rate constants (510c739)
  • Add LockstepIsInitialized to better handle OnInit now being spread out across frames (6033282)
  • Add IsPartOfCurrentImport and CurrentImportedDataVersion to LockstepGameState (2f058b1)
  • Add OnImportFinishingUp which can be spread out across frames (5eddc9b, 268a851, 6033282, 43bfa07)
  • Add OnPostClientBeginCatchUp to not lose out on old functionality (6132b9e, 6033282, 75bfa25)
  • Add OnInitFinished to not lose out on old functionality (c141304, 6033282, 75bfa25)
  • Fix outdated OnClientBeginCatchUp xml annotations due to the existence of OnPreClientJoined (2ad1b22)
  • Add `GetGameStateBei...
Read more

v1.0.2

Choose a tag to compare

@JanSharp JanSharp released this 08 Sep 19:57

Installing

Go to the VCC Listing page and follow the instructions there.

Changelog

1.0.2 - 2025-09-08

Changed

  • Update com.jansharp.common dependency to v1.3.0 for the RNG WannaBeClass (0cfdea7)
  • Change late joiner game state serialization to only one game state per frame to prevent 10 second timeouts. This is now consistent with how exports do serialization (0cee39e)
  • Add another approach to latency hiding to the docs (8d27716)
  • Update docs since network events can have params (ee9ce80)
  • Clean up grammar mistakes in the documentation (e79a833)

Added

Fixed

  • Fix ReadCustomClass(string) returning wrong result when called recursively (ac30c75)
  • Fix ReadCustomClass(string) passing effectively random data version to SerializableWannaBeClass.Deserialize (ff05a04)

Zip sha256 checksum

2144bf969c8e713f03d2312971695b2db8fad81c5750a1377e15f4faa0fa83b9

v1.0.1

Choose a tag to compare

@JanSharp JanSharp released this 15 Aug 23:31

Installing

Go to the VCC Listing page and follow the instructions there.

Changelog

1.0.1 - 2025-08-15

Changed

  • Rename LockstepDebug define to LOCKSTEP_DEBUG (9b0e8c6)
  • Remove "unchanged" postfix when GS is not in imported data which more accurate (71ff040)
  • Change "to import" to "supports import" in GS UI which is more accurate (4d7a7b7)
  • Reset Sending-PlayerId/-UniqueId/-Time once an IA ran to help catch unintentional api misuse (373a9a5)
  • Use OnBuildUtil api to properly destroy objects, requires com.jansharp.common v1.2.0 (09af531, 7a09bc5)

Added

  • Add byte count & base64 length to exported window (b3a0fd1)
  • Add ExportByteCount to LockstepAPI (5d58b7e)

Fixed

  • Fix import error caused by unused prefabs which were remnants from using the player object pool (609a096)

Zip sha256 checksum

1df445d8e76fdb679f4250edb9ea9ce2583982d9412a84c0c5ec85fc69e944d4

v1.0.0

Choose a tag to compare

@JanSharp JanSharp released this 24 Apr 23:58

Installing

Go to the VCC Listing page and follow the instructions there.

Changelog

1.0.0 - 2025-04-24

A few additions to the API got their own mentions in this list, however a lot of the API is not explicitly stated in this changelog entry. The whole list of API functions does not belong here.

Added

Read more