PUN Classic (v1)、PUN 2 和 Bolt 處於維護模式。 PUN 2 將支援 Unity 2019 至 2022,但不會添加新功能。 當然,您所有的 PUN & Bolt 專案可以用已知性能繼續運行使用。 對於任何即將開始或新的專案:請切換到 Photon Fusion 或 Quantum。

Bolt SDK & Release History

Getting the Bolt SDK

Check the overview page in order to get the download links for the Photon Bolt SDK.


Unity Editor
  • Bolt 1.2.14: Minimum Unity 2017.4.x LTS
  • Bolt 1.3 and newer: Minimum Unity 2019.4.x LTS
  • Recommended Unity 2019.4.x LTS
  • Tested up to Unity 2020.3.x LTS
  • Beta versions are not recommended/supported
Code Editor
  • Visual Studio 2017
  • Visual Studio Code
  • JetBrains Rider
Development Platforms
  • Microsoft Windows
  • Mac OS X
Supported Platforms
  • Microsoft Windows
  • MacOS X
  • Android
  • iOS
  • Playstation 4
  • Xbox One
  • Nintendo Switch

SDK contents

Photon Bolt SDK is distributed as an Unity Package, that can be imported directly into an Unity Project. The current files and folders included in the SDK:

  • Assets/Photon/PhotonBolt: main SDK folder, contains all Bolt content and binaries.
  • Assets/Photon/PhotonBolt/assemblies: contains all DLLs files that compose the SDK.
  • Assets/Photon/PhotonBolt/packages: internal unity packages with extra content used to install all SDK dependencies and samples.
  • Assets/Photon/PhotonBolt/resources: consist of a list of images, icons, and objects necessary during the usage of Bolt.
  • Assets/Photon/PhotonBolt/scenes: currently accomodate the BoltDebugScene.unity used by Bolt Scenes, a debugging feature.
  • Assets/Photon/PhotonBolt/scripts: have some utility and bridge scripts that make part of the integration of Bolt with the Unity Editor.
  • Assets/Photon/PhotonBolt/release_history.txt: describes a Change Log of Bolt updates.
  • Assets/Photon/PhotonBolt/project.json: consists of all custom assets created for the projects, like Commands and Events.
  • Assets/Gizmos: hold some Gizmos used to mark Bolt Entities on Scenes.
  • Assets/Plugins: extra plugins used by the SDK.
  • Assets/Photon/PhotonLibs: Photon Realtime SDK DLLs used by Bolt in order to connect to Photon Cloud.
  • Assets/Photon/PhotonRealtime: Photon Realtime SDK source files.

Release Notes

If the latest release is not shown here, check within Bolt package for release_history.txt.


Check the What's new in v1.3 page for more info.

Added: Cache for incoming/outgoing EndPoints, in order to reduce memory allocation when sending/receiving data from the internal sockets.
Added: Cache for Assemblies in the project for quick loading GlobalEventListener after a restart.
Added: New property in the Bolt Settings to control the Stream Package Size.
Added: Object pooling for data blocks used by the Stream System, in order to reduce memory allocations.
Added: BoltNetwork.FindConnection to retrieve a Connection reference based on the Connection ID. Works only if the peer contains the Connection on the internal list.

Changed: Complete refactor of Bolt namespaces [breaking change].
Changed: Minimal supported Unity version is now 2019.4 LTS.
Changed: Realtime SDK to version v4.1.5.4.
Changed: Major refactoring on NAT Punch System.
Changed: Bolt SDK now targets .NET Framework 4.6.2, meaning that your Unity project must support this target (.NET 4.x or .NET Standard 2.0).
Changed: Refactor in the Stream System to reduced memory allocations.
Changed: Entity Proxy creation request behavior. Instead of a request on every package, now it waits for a confirmation or a lost package to re-send the request.
Changed: Auto registration of PhotonRoomProperties Protocol Token.
Changed: An exception will be raised if two or more Prefabs share the same name.
Changed: Review on the Prefab Database Loading Async Process, Prefabs can be loaded asynchronously before starting Bolt.

Fixed: NullReference Exception when passing an invalid Session reference to Matchmaking Join.
Fixed: NullReference when Shutdown Bolt in SinglePlayer mode.
Fixed: IndexException if more than 32 hitboxes (max) are registered on a single entity.
Fixed: Using specific IPv4 passed as an argument when starting Bolt, instead of using the one from the first valid network adapter.
Fixed: Invalid Operation check when creating or joining a session.
Fixed: Exception in Log System when running Bolt in non-English systems.

Removed: Obsolete methods from GlobalEventListener.
Removed: Outdated plugins from the SDK package.


Fixed: Entity Detach Token being null on remote peers, but not on owner.


Check the What's new in v1.2.14 page for more info.

Added: Help links to Bolt Settings window.
Added: New Protocol Token Type (PooledProtocolToken) that makes use of a new pooling system just for Tokens. The Pooling system works with Commands and Events for now.
Added: New Protocol Token Registry. This will scan the project looking for IProtocolToken implementations and register automatically when Bolt starts.
Added: Explicit log message when the peer receives an unknown IProtocolToken ID.
Added: Option to show BoltHitboxBody snapshot history for debugging purposes.

Changed: Project JSON file is now saved only with the indented formatting. This helps when merging the file using a Source Control Version System.
Changed: Boolean properties optimization to speed up lookup and modifications. This can have an impact if the network layout makes extensive use of booleans.
Changed: Bolt Physics Pooling System for BoltPhysicsHit, grating better memory management.
Changed: Refresh BoltHitbox Component UI.
Changed: Photon Realtime version to v4.1.4.4.

Fixed: High memory allocation when running Bolt Physics checks, mainly on raycasts against spheres.
Fixed: High memory allocation when creating Commands. Updated pooling system.
Fixed: Memory allocation by the Bolt GUI elements.
Fixed: Events Pooling System. Before only received events were pooled, now local raised events are also pooled.
Fixed: Internal UdpEndPoint fields order, fixing issues with the endpoint serialization representation in native format.
Fixed: Delay to shutdown client when the game server shutdown. Now, when the client detects the server is leaving the session, it will shutdown too.
Fixed: Instant Commands. Now instant commands will execute all previous command on the queue before running, keeping the consistency on the insertion order.
Fixed: PS4 internal serialization methods for native translation of EndPoints.
Fixed: Reliable Stream receiver order. This prevents the receiving peer to discard packets of not fully completed streams.
Fixed: NullReferenceException when disposing data packets.
Fixed: Return Error code instead of OK when joining a session and the action expires due timeout.


Check the What's new in v1.2.13 page for more info.

Added: Fallback connection protocol. If the peer is not able to connect via UDP, it will switch to a TCP connection with the Photon Cloud.
Added: Packet Encryption system.
Added: Optional Scene IProtocolToken argument when creating a new Session using the BoltMatchmaking API.
Added: Support for Gameye Session Hosting.
Added: New Events API.
Added: New metadata field to the matchmaking API with information about the current connected Lobby, like the number of players and number of rooms.

Changed: BoltEntity property of the search algorithm for IPriorityCalculator and IReplicationFilter. Now it's set to NONE by default, as most of the time, those implementations are not used.
Changed: When you start Bolt, and there are GlobalListenners for the current scene, they will be loaded and receive events, which includes 'SceneLoadLocalDone', for example.
Changed: Bolt Debug Start window. Now it's possible to select the build type (Development and/or with Scripts Only), and a small UI refresh.
Changed: GlobalListenner 'SessionCreated' to 'SessionCreatedOrUpdated'.
Changed: Included a warning when running Bolt without a valid AppID.
Changed: Reverted GlobalEventListener checks on Scene load. Now it's using again a Regex check to load or unload the Script automatically.
Changed: Included warning if Bolt Packet Size is set above 1200 bytes, as this is the max size recommended.

Fixed: Shutdown procedure when the Server disconnects from a Relayed Connection. Now the client shutdown itself when it detects the server leaving the room.
Fixed: EnableLANBroadcast issue when shutdown and restart, the client tries to connect to an old LAN Server.
Fixed: Double library initialization in the PlayFab Sample.
Fixed: Unable to restart Bolt from the BoltShutdownBegin callback.
Fixed: Support to the Unity New Input System when using the Bolt Debug logs.
Fixed: PS4 Connection instability when running more than 1 console per network.
Fixed: Exception when checking Single Player mode with Bolt not started.
Fixed: High CPU usage when displaying Array property values from BoltEntities. Now the UI counts with a dropdown system and is lighter.
Fixed: Difference between the Lag Compensated frame running on Client and on Server.
Fixed: Debug Start does not load Scene when running as Client on Unity Editor.
Fixed: Bolt does not Compile in Release Mode.
Fixed: Changing state properties from inside another property callback can be missed and never be synchronized.
Fixed: NullReference on BoltEntity Inspector Drawer when dealing with String properties.
Fixed: SceneLoadRemoteDone callback Token that was passing the wrong token.
Fixed: BoltNetwork.RemoveGlobalEventCallback does not remove previously registered callback.
Fixed: DebugStart not starting as Server and not connecting to Game Server as Client.

Removed: Zeuz support.
Removed: BoltNetwork.Connect(UdpSession, IProtocolToken), use instead BoltMatchmaking.Join(UdpSession, ...)


Check the What's new in v1.2.12 page for more info.

Added: Option to pass an IProtocolToken when connecting to a localhost Game Server. This is useful when using the Debug Start utility to pass a token when connecting.
Added: StreamDataStarted callback to Reliable Stream System. The callback fires when a new data stream started to be received.
Added: StreamDataProgress callback to Reliable Stream System. The callback fires when a new piece of data from an incoming stream has been received.
Added: StreamDataAborted callback to Reliable Stream System. The callback fires when an incoming stream of data has been aborted. This can happen because the remote peer was disconnected or the hash check fails.
Added: Button in the Debug Start to run the Build in Single Player mode.
Added: Support for Custom Authentication. Now you will be able to pass Authentication Values before starting Bolt, and then check the credentials of your players using your own auth service.
Added: Photon Platform metadata now includes more properties: UserId, Nickname and Data. All information is related to the Custom Authentication support.
Added: BoltStartFailed callback with a UdpConnectionDisconnectReason as argument, signaling the fail reason. This callback will replace the normal callback without the argument on future versions.
Added: SessionConnectFailed callback with a UdpSessionError to signal errors when trying to join a new Game Session. This callback will replace the normal callback without the argument on future versions.
Added: SessionCreationFailed callback with a UdpSessionError to signal errors when trying to create a new Game Session. This callback will replace the normal callback without the argument on future versions.

Changed: Deprecated BoltShutdownBegin callback without UdpConnectionDisconnectReason as argument.
Changed: Deprecated SceneLoad callbacks without IProtocolToken as an argument. This change aims to follow the Bolt pattern of using callbacks with the "IProtocolToken".
Changed: Update version of Photon Realtime to
Changed: Package Overflow check. It warns the user when trying to package a ProtocolToken that exceeds the maximum package size.
Changed: Warning when Photon Application ID is not set.
Changed: Update Console integrations with the latest Bolt SDK.
Changed: Photon Platform metadata key for the current Region: from region to Region. The lowercase version still exists but will be removed on future versions.

Fixed: Timeout connection in the background. The application will continue to ping the Game Server in the background, maintaining the connection.
Fixed: Data Stream in Reliable Mode. The major issue was a Memory Leak after finishing the transmission.
Fixed: Source Provider MissingMethodException that may occur on some versions of the Unity Editor.
Fixed: Bolt Compiler does not work in Release Mode.
Fixed: Bolt cannot be started if invoking ShutdownImmediate before BoltStartDone.

Removed: Overload BoltNetwork.Connect(udpSession, userJoinToken). You should use the method from the BoltMatchmaking API in order to join a Game Session (BoltMatchmaking.JoinSession(udpSession, userJoinToken)).


Check the What's new in v1.2.11 page for more info.

Added: GlobalEventListener callback documentation.
Added: Support for PlayFab Servers 2.0 (Thunderhead).
Added: Support for Source Control Systems like Perforce.
Added: Option to force the External/Public binding endpoint of the Game Server. Useful when running a Headless server on restricted network infrastructure.
Added: New Thread Pool manager, responsible for the creation and usage of Threads inside the SDK. It guarantees an on-demand initialization, recycling, and destruction of Threads, optimizing processing power and memory consumption.

Changed: Optimizations to the Punchthrough process. Bolt will check if both peers seem to be on the same sub-network, if not, it will skip local/private endpoints.
Changed: Update Photon Realtime version to
Changed: By default, the A2S Service will be off.
Changed: Start Session Creation timeout only after the Creation Request was sent. Before it started right at the beginning of the Session Creation behavior.
Changed: Reliable Data Stream API deprecated. The streaming system is not working properly when running in RELIABLE mode and is deprecated until fixed. The UNRELIABLE mode still works fine.
Changed: UdpKit namespaces to follow the official naming convention. Most of the namespaces were named in lowercase, now are all in PascalCase, as described on the MS Documentation. Major changes: "UdpKit.platform" to "UdpKit.Platform", "UdpKit.platform.photon" to "UdpKit.Platform.Photon".
Changed: All UdpKit Platforms (DotNet, Photon, XboxOne, PS4, Null) were moved to "UdpKit.Platform" namespace.
Changed: Bolt now finishes the startup only after the current Platform signals it has completed all async operations. This solves desynchronizations between foreground and background setup on the Platforms.

Fixed: NullReferenceException when trying to access the CurrentAsyncOperation with the "Auto Scene Load" disabled.
Fixed: NullReferenceException on the Photon integration when stopping Bolt while it stills connecting the Best Region.
Fixed: Null-check in BoltCore.BeginShutdown when trying to Destroy an Entity already detached.
Fixed: BoltNetwork.ServerFrame performance. This property is cached internally now leading to better performance when using it.
Fixed: Photon Platform metadata, like Region, is set only when valid. Any invalid value will be removed from the metadata dictionary.
Fixed: False error logged when running as SinglePlayer and ShutdownImmediate is invoked.
Fixed: Create "Development Builds" when using Bolt Scene window to Debug builds.
Fixed: Unable to load new scenes after a mid-load disconnection. Now any in-progress scene loading info is cleared on shutdown.


Check the What's new in v1.2.10 page for more info.

Added: Public API for Connection Packet count metrics: Sent, Received and Lost.
Added: BoltConnection has now a "ConnectionType" field, that signals when the connection is Direct or Relayed.
Added: New API call to force sync scenes between client and server (BoltNetwork.LoadSceneSync()). Useful if the "Auto Scene Load" is disabled.
Added: Search Path feature to Bolt Assets. Now you can select the desired locations where Bolt will search for Entity Prefabs.
Added: Sample "A2S Protocol Service".
Added: Sample "Area Of Interest".
Added: UDP Platforms can expose custom meta data about it's internal state (BoltMatchmaking.CurrentMetadata). PhotonPlatform exposes the current connected Photon Region.

Changed: Normalization of UdpKit project namespace. Now all related projects reside inside the "UdpKit" namespace.
Changed: On Release Mode, Shutdown and Start exceptions are now warnings messages.
Changed: "Disable Auto Scene Load" removed from Bolt Settings Window, but still available through code. Use the "disableAutoSceneLoading" property on the BoltRuntime settings.
Changed: Review Photon Lobby Sample.

Fixed: When switching control over an entity (using AssignControl) several times causes an entity freeze with a full input queue. Now, it will only execute for different connection other than the current one.
Fixed: Manually removing from scope an entity from its controller succeeds on the server and causes the client to error. By default, the scope can only be set to other connections different from the controller.
Fixed: Current Session/Room Player count.
Fixed: High CPU usage when running a Headless server with NAT PunchThrough disabled.
Fixed: UdpPlatform double initialization. Starting Bolt multiple times will not cause a duplicated instantiation of the active Platform.
Fixed: Compile error (unable to build User data) after switching to Release Mode. Related to old Debugging Symbols of the "bolt.user.dll" file.
Fixed: Warnings messages created by reference conflicts with compiled user data. Specifically warning "CS0436".

Removed: All API marked as obsolete since Photon Bolt 1.2.8.


Check the What's new in v1.2.9 page for more info.

Added: Extended Entity API.
Added: New callback SessionConnected to Bolt.GlobalEventListener.
Added: New BoltMatchmaking utility class.

Changed: Bolt folder hierarchy to maintain the consistency among the Photon projects.
Changed: Bolt physics classes to Bolt.LagCompensation namespace.
Changed: Improved Session List update procedure. Now the callback SessionListUpdated is invoked when the session info changes, instead of on interval.
Changed: Updated Photon Realtime version to

Fixed: Support to Assembly Definitions. Photon Bolt also has its own assembly definition now.
Fixed: Issues when including Photon Bolt and Photon Voice in the same project.
Fixed: Restarting the server from a different scene, future clients won't change to correct scene.
Fixed: Join Lobby is only allowed when on a certain state.
Fixed: Logs reveal app-id when debugging.
Fixed: When using Bolt.RaycastAll the ray length (hit.distance) is incorrect when Transform of object scaled.
Fixed: IP Discovery. Filter out non-private IPs when running the PunchThrough procedure.
Fixed: PhotonRoomProperties custom properties. Only signed numeric and string types are supported.
Fixed: ThreadAbortException when Starting Bolt using IL2CPP and .NET 4.0.
Fixed: NAT PunchThrough enabled/disabled mismatch between Server and Client.
Fixed: State callback doesn't fire when using an Entity as property type.
Fixed: Compiling Bolt with deleted scenes in Build Settings throws an exception.
Fixed: Switch Bolt to Debug or Release mode throws an exception.
Fixed: Child GameObject's Transform not in sync until first update.
Fixed: BoltShutdownBegin with wrong UdpConnectionDisconnectReason.


Check the What's new in v1.2.8 page for more info.

Added: Option to Join a room by name, instead of using only the Photon Session. Now you will be able to create a "PhotonSession" passing the room name you want to join and connect to it as usual.
Added: Option to disable the A2S Service on Bolt Pro.

Changed: Dynamic Region List. When you use the "Best Region" feature, you can select the available regions using the White List configuration on the Photon Cloud Dashboard. If you are using a China AppID, only the China region will be available.
Changed: Skip button on Photon Cloud configuration inside the Bolt Wizard window for Bolt Pro version.
Changed: Public API Naming of BoltEntity. Several methods and functions were refactored to agree with the C# Coding Guidelines. The old symbols are still present, but with an obsolete marking and will be removed in a future version.
Changed: "SessionListUpdated" callback is not called when running as Bolt Server.
Changed: "SessionListUpdated" is always called, even if there is not session available.

Fixed: JoinRoomTimeout issue. After the specified timeout, if the peer is not able to connect/join a room, the "SessionConnectFailed" callback will be raised.
Fixed: Bolt Wizard window menu item disappear when Updating Bolt if there are any errors on the scripts.
Fixed: No callback when the client attempts to connect to a full server or to a closed room. When the target room is full, you will receive a "SessionConnectFailed" callback.
Fixed: Wrong callback called when the max CCU limit is reached. When this occurs, the peer will receive a "BoltShutdownBegin" with the "UdpConnectionDisconnectReason.MaxCCUReached" as "disconnectReason".
Fixed: Wrong callback called when the connection is refused. When the server refuses the connection, the "ConnectRefused" callback will be raised.
Fixed: Server authoritative movement in Bolt hackable. It was added the option "Enable Frame Limit" to all commands, that limit the queue/execution to only one command per frame (on client and server).
Fixed: "SessionListUpdated" not called anymore after connection attempt is refused.
Fixed: Issues with "InvalidRegion" after latest update of Photon Realtime.
Fixed: Latency simulation only works from client to server. Now it works as expected on both ends of the connection.
Fixed: No callback when the client attempts to connect to a recent shutdown server. When you attempt to connect to a nonexistent session, the "SessionConnectFailed" will be invoked.
Fixed: "SetParent" bug reset position back to the old position before parented. We recommend using the Transform Space as "Local".
Fixed: Smoothing/interpolation issues on state properties. Solved for "Array of Floats", "Array of Quaternions", Quaternion, "Array of Vectors".

Removed: Old project.bytes and backup files.


Fixed: Room Update Rate settings. The minimum update rate is 500ms.
Fixed: BoltRuntimeSettings asset creation issue when importing Bolt using the Wizard Window.
Fixed: Clear SessionList after Shutdown. Now, when the peer is shutdown, the session list will be cleaned.

Changed: The client will be shutdown when is not possible to establish a connection with a Photon Master Server when using Photon integration.


Check the What's new in v1.2.6 page for more info.

Fixed: Exception (KeyNotFoundException) when creating and raising events after Bolt was shutdown. Now, if it's not possible to create a particular Event (by using it's Factory), the Create() method will return null.
Fixed: Update the Animator properties every update has bad performance. Now the update process is performed only on the value changes.
Fixed: Removing all Bolt Logging from settings doesn't work. Removed the check that forces at least one logger.
Fixed: Issues with Bolt and the new Prefab System on Unity 2018.3.x.
Fixed: Exception when compiling Bolt with a State Asset with a missing parent. Now, if a State has a parent and this is deleted, the child State will be updated properly to an empty parent GUID.
Fixed: Issue when trying to register the same IProtocolToken when reloading a scene. Now the registration of the same Token is just ignored, without raising an exception.
Fixed: Server frame will reset on shutdown.

Changed: Prompt developers to run the Bolt Compile Assembly after finishing the Wizard, this prevents errors when importing the samples package.
Changed: Bolt Menu Items are now merged. The access point to Bolt Settings, Assets and other windows are now inside a Bolt menu on the top-level of the toolbar.
Changed: When using a PhotonRoomProperties to setup the Photon Room, it is now by default Open and Visible. Before it was Closed and Invisible.
Changed: Bolt now has support to IPv6.
Changed: Updated internal Photon Realtime to vesion
Changed: Removed hardcoded paths when creating new assets on Bolt, and uses relative paths instead.

Added: Leave Review button on the Wizard Window.
Added: Bolt now has a new default serialization method. All Bolt Assets will be serialized into JSON format, removing the need for XML or binary formats.
Added: Add new Binary channel to BoltConnection. Look at the new StreamingData Sample to see how to use it.
Added: New GlobalEventListener.ShutdownBegin with an extra parameter describing the Shutdown reason.
Added: New Bolt Setting to disable remote scene autoloading. By default, when the Bolt Host changes scenes, all clients will load the same scene, now you can disable this behavior.


Fixed: Connect Token null on the host when using Accept Mode Manual.
Fixed: Issues with Bolt IDs when using Unity 2018.3 with the new Prefabs Workflow.
Fixed: DLLs naming collisions.


Fixed: Exception in Debug Start.
Fixed: Initial position issue.
Fixed: Samples are now compatible with both Unity 2017 and 2018.
Fixed: Bolt Wizard shows current App ID correctly.
Fixed: Exception in A2SManager when restarting Bolt server.
Fixed: Issue on UI when running Client using BoltInit.
Fixed: Failed Punch not fallback to Relay connection

Changed: Public API Naming. Several methods and functions were refactored to agree with the C# Coding Guidelines. The old symbols are still present, but with a obsolete marking and will be removed in a future version.
Changed: Semantic versioning (1.2.4 instead of

Added: Command can now be marked as Instant. This forces immediate execution of all its inputs upon reaching server.
Added: Optional Enable Frame Limit for command. This allows to queue only one input per command per frame, preventing speed hacks.
Added: Delta Compression for command inputs and results.
Added: Link to license terms.

Removed: Custom Hosted (On Premises Photon Server) is no longer supported.

Fixed: Update Photon session info (token or properties) after room creation
Fixed: Single Player mode
Fixed: MaxConnection session property always 0
Fixed: Use BoltLog in all debug messages

Changed: Steam sample are now available only on the Bolt Samples repository

Added: Property names are now generated into BoltAssets class
Added: Support to create new AppIds directly from Wizard Window using just an email
Added: Best Region support when connecting to Photon Cloud
Added: Single player sample script
Added: Getting Started Sample
Added: Exposed Photon Room timeout settings (create and join)

Fixed: BoltLauncher selecting the wrong UdpPlatform on Bolt initialization.
Fixed: Bolt Wizard window popup on Play Mode.
Fixed: Bolt naming and version labels.
Fixed: Text coloring on Bolt Wizard window when using Unity Pro.
Fixed: Bolt Single player.
Fixed: Bolt Builds for Android.
Fixed: Bolt Debug Start.
Fixed: BoltInit script and MainMenu scene.

Added: Support to China region when connecting to Photon Cloud.
Added: Headless Server sample.

Fixed: .NET 4.x issue when dealing with Bolt Assets.

Fixed: Issues with IL2CPP using .NET 4.0.
Fixed: LanBroadcast using PhotonPlatform.
Fixed: General refactoring on Photon services to improve reliability and performance.
Fixed: Maintain connection with Photon cloud even when the game is paused.
Fixed: Support mobile platforms: Android and iOS.
Fixed: MaxConnection when using PhotonPlatform to use the general Bolt Settings.

Changed: Incorporation of all Photon related code to internal DLLs.
Changed: Exposed session type when listing all available sessions from Bolt.

Added: New Wizard window with basic steps to get Bolt running.
Added: Bolt setting for enabling Client Metrics.

Fixed: Assembly load errors with various thirdparty non-bolt dlls.

Fixed: Some non-Bolt .DLL files would be confused with Bolt .DLL files causing errors.

Fixed: Fixed issue with registering a bolt shutdown callback after BoltStartFailed occured.
Fixed: NullReferenceException that would happen when sending an event to a specific connection if that connection was disconnected.
Fixed: Bolt will now check for duplicate asset name during compilation and log an error if duplicates were detected.
Fixed: Steam Lobby sample.
Added: Exposed BoltConnection.DisconnectReason so user code can inspect the reason a connection was disconnected.
Changed: If an exception is thrown by internal code during event dispatch it's now logged which event caused the exception to make it easier to track down.
Changed: Exception for missing to register a protocol token and then trying to use it now also shows when Bolt runs in release mode.

Fixed: Latency Simulation.
Fixed: Scene async load.
Fixed: Sample game "Level1" scene.
Added: Exposed connection stats from Bolt Connection by type (States, Events and Commands).

Fixed: Debug start for Unity 2018.
Fixed: Exception when LoadBalancingClient is destroyed while joining and Bolt is shutdown.
Fixed: Inactive GameObject with Animators attached were showing warnings messages about calling of animator functions.
Fixed: BoltStartFailed callback doesn't work.
Fixed: Some Property types do not display correct arrow for expanded/collapsed properties.
Fixed: SetServerInfo() throws a NullReferenceException when called inside BoltStartDone() callback.
Fixed: SetServerInfo() being called but BoltNetwork.SessionList stays at 0.
Fixed: Error on macOS when using Experimental Scripting Runtime Version (.Net 4.6 Equivalent) and NAT punchthrough enabled.
Fixed: Building for macOS targets are invalid while attempting to test server/clients using DebutStart.
Added: Exposed the current progress of async scene loading in currentAsyncOperation.
Added: Lobby Manager example to be used with Photon platform. It's possible to create, list and join rooms.
Added: Missing Regions for Photon Cloud.
Added: Scroll panel for Bolt Welcome Window. This is useful when dealing with small screens.
Changed: Updated API naming related to the use of "Host" and "Server" names. All references that uses "Host" were replaced with a "Server" version.
Removed: RegisterShutdownDoneCallback (dead code that never did anything).

Fixed: Old DLL files from internal udpkit library replaced to latest version.
Fixed: Removed hardcoded configuration from Photon Cloud integration with Bolt for PunchThrough.

Changed: Implemented IEquatable<> for structs to avoid boxing costs and memory allocations, specifically when in Dictionaries
Fixed: Per tick memory allocation in FreezeProxies with a cached List <>
Changed: IBoltListNode to IBoltListNode, removed the implementation from BoltObject, implemented it on everything that needed it and removed casts in the lists that are no longer needed
Added: Options for querying IEntityBehaviour, IReplicationFilter, and IPriorityFilter as global options as well as allowing per-prefab overrides
Changed: Reversed the QueryComponentOptions to have global options that can be overridden by prefabs on a per-prefab basis. This is cleaner.

Added: New PunchThrough code using the Photon Servers as relay. This removes the need of Zeus.
Removed: Zeus support and settings.

Fixed: Miscellaneous Photon Cloud improvements and fixes
Fixed: Quaternion state property with smoothing
Changed: iOS Xcode improvements

Fixed: Removed JS files to keep compliance with Unity 2017.2

Added: New "Welcome" experience and installer.
Added: BoltNetwork.SetNetworkSimulation method to change the loss/ping simulation localy on one device.
Fixed: Issue with events sometimes being re-used too early.
Fixed: Issue with smoothing of quaternion properties
Fixed: Header text for inspectors should now be readable in the Unity light skin.
Fixed: Console being toggled on any key when "None" was selected as the toggle key.
Fixed: Issue with the float number formatting in the Bolt compiler on Unity 2017 under certain cultures causing compilation errors.
Changed: "Instantiate Mode" setting has been revamped, you can now
select between "Per Prefab", "Server Only" and "Everyone".

Fixed: 2017.1 compatibility
Added: State.SetTeleport
Changed: Samples moved into separate package within main package

Fixed: Photon Cloud reliability and improvements
Added: Server Monitor sample

Fixed: Photon Cloud NativePlatform issue
Added: Photon Cloud support for tokens (see Photon Cloud doc for details)

Removed: Network arrays of transforms

Changed: Internal improvements

Fixed: Issue for Photon Cloud on mobile platforms
Fixed: Warnings for samples

Added: Included support for Photon Cloud and Photon Server
Changed: Replaced Zeus master-server settings by the new Photon settings


Changed: Bolt internals for relay and matchmaking
Fixed: Bolt installation will no longer delete console integrations
Fixed: State.SetTransforms (transform,null) will no longer cause an error
Added: Bolt Swarm SDK


Added: PositionAtFrame which returns the position of a Bolt hitbox at a given frame


Fixed: Issue with Bolt assets not saving
Changed: Smoothing for quarternion result smoothing temporarily disabled
Changed: Improvements for Bolt samples


Fixed: Event issue introduced in last release
Fixed: Hitbox issue introduced in last release
Fixed: Issue for Unity 5.4 on OSX
Fixed: Render transform
Fixed: Miscellaneous sample fixes


Added: New Samples (3rd person sample client and server auth, click to move server auth)
Changed: XLM Serialization
Changed: Miscellaneous optimizations
Fixed: Issue with correction interpolation for commands pooling and initial values compression


Fixed: Improvements to Bolt physics for lag compensation
Fixed: Bolt will now import properly when upgrading or switching tween debug and release mode
Fixed: Will no longer lose Global Illumination on Bolt scene load
Fixed: iOS improvements


Fixed: Entities instantiating at wrong position
Fixed: Zeus not updating lobby count when clients connect (was only on disconnect)
Fixed: Command correction interpolation for Vector3 and Quaternion, and exposed SnapMagnitude in the editor UI
Added: Smoothing for floats


Fixed: Bolt will no longer delete Steam integration files when installing Bolt
Fixed: Entity Events will no longer be discarded when Bolt is not under load
Fixed: Bolt log issue
Fixed: Excessive acks for steaming bytes
Fixed: State property triggers
Changed: ShutDownImmediate now works so the behvaiour is consistent with a non-immediate shutdown
Added: New Entity function: RemoveAllCallbacks
Added: New API Docs @WebApiDocsBaseUrlbolt/current/index.html


Fixed: Bolt Scenes errors due to Unity 5.3
Fixed: UPNP Button
Fixed: Control tokens
Fixed: Help button doc links
Added: Check to make sure you have installed for the current Bolt you are using


Fixed: Zeus punchthough issue resolved
Changed: Removed Pro dependency for async level loading
Added: API for adding C# delegates as event callbacks


Fixed: IL2CPP, relevant to iOS and tvOS
Fixed: BoltInit.cs was out of date
Added: MainMenu scene with BoltInit.cs included with package


Fixed: Bolt will no longer call methods on disabled scripts
Fixed: Bolt will now default to the new Zeus development master server
Fixed: A couple of entity settings were missing from the new UI, they are now back
Fixed: Spelling error in the bolt settings window
Fixed: Bolt will now automatically save the current scene when you click "edit" in Bolt Scenes
Added: You can now select replication mode + mecanim mode when importing a mecanim state
Added: Added .isControllerOrOwner to BoltEntity
Removed: Removed the .mdb files


Changed: Improved the performance of SetDynamic and GetDynamic substantially.
Changed: Added proper error reporting to SetDynamic if property queried for does not exist.
Changed: Deprecated NetworkTransform.SetTransforms, see: IState.SetTransforms and NetworkTransform.ChangeTransforms.
Changed: Any errors thrown inside Bolt will now always be logged to unitys Debug.LogException no matter if Bolt is in debug mode or if you have 'Unity' logging enbled in Bolt. Changed: BoltNetwork.Destroy can now be used when Bolt is not running, it will simply destroy the object normally using Unity's GameObject.Destroy.

Added: TrySetDynamic and TryGetDynamic that does not log errors if properties dont exists, but instead return a bool true/false.
Added: Added IState.SetTransforms to replace NetworkTransform.SetTransforms, this new methods works around the issue of position snapping for entities when their position updates are delayed.
Added: NetworkTransform.ChangeTransform to replace the previous NetworkTransform.SetTransforms for changing the transform target for interpolation after it's been set once.
Added: IState.ForceTransform that lets you over-write all currently received position and rotation values of a transform completely, this is usefull for working around issue #242 when loosing control of an entity and its position will snap back, you can now force it to stay at the correct location in world until proper position updates arrive.
Added: Bolt.EntityTargets.OnlyControllerAndOwner event target.
Added: BoltEntity.isControlled property.
Added: BoltEntityExtensions which contains extensions method for IsAttached, IsOwner, IsControlled, IsSceneObject, IsFrozen and HasControl the methods properly handle the case where Bolt is not running, the entity is null or detached without throwing exceptions.

Fixed: GitHub Issue #224 (see: IState.SetTransforms, NetworkTransform.ChangeTransform)
Fixed: GitHub Issue #243
Fixed: GitHub Issue #259


Fixed: Issue causing servers to disconnect from Zeus after a specific interval was resolved.


Added: Bolt Release build to the package. It's a unitypackage in Assets\bolt-release folder. If you want only the release build, please unpack into an empty project and then import the .unitypackage where needed.
Note: This version is just a re-packaging of to add the Release build. No new features.


Fixed: Entities getting frozen on clients after 10 seconds.
Fixed: Int compression not being applied.
Fixed: Delay on Zeus session list request after re-connecting.
Fixed: ZeusDisconnected callback not being invoked if Zeus times out.


Fixed: Issue with setting Animator to null causing crashes.
Fixed: Issue with array properties not properly checking if the value actually changed before flagging a value for re-sending.
Fixed: Issue with entity inspector not showing debug values.
Fixed: Some smaller performance issues related to garbage generated in various places in code.

Improved the performance of the initial scene object search algorithm.


Fixed: Entity event unreliability issues where too many events would get discarded.
Fixed: Debug Start will now respect 64 bit windows build settings.
Fixed: Control of an entity will now be handed over properly in all circumstances.
Fixed: ‘Proxy When Frozen’ should now work properly.
Fixed: RemoveCallback will now work properly.

Added: New settings on the Bolt Entity component called ‘Detach Parent On Disconnect’ which if enabled automatically finds nested entities and de-parents them when the parent is detached.
Added: New overloads to BoltLauncher.StartServer which takes a scene name as last parameter for a scene that will automatically loaded when server has started.
Added: New method called BoltNetwork.PreLoadPrefabDb() which can be called as soon as the game starts to limit the lag spike that happens when starting Bolt.


Added: Bolt.IEntityReplicationFilter that allows you direct boolean control over if an entity should be written into a packet or not.
Added: Added the ability to pick between local and world transform replication.
Added: You can now create IProtocolToken properties on events.
Added: Added WriteBoltEntity and ReadBoltEntity extension methods for UdpPacket to easily write/read BoltEntity objects in IProtocolToken Read/Write method.
Added: Added support for Matrix4x4, Color32 and GUID properties.
Added: Two new Global callbacks exist EntityFrozen and EntityThawed for handling entities being frozen/thawed on a global level.

Fixed: Disconnect tokens are now available on the BoltConnection object.
Fixed: ProtocolToken passed into BoltNetwork.Attached is not replaced by null by mistake anymore.
Fixed: Resolved interpolation issues for properties on Commands.
Fixed: The issues with connecting through Zeus should be solved.
Fixed: Resolved several issues in related to nesting Bolt entities during run-time and Bolt callback methods such as Attached, etc.
Fixed: BoltPhysicsHit now contains the approximate distance between the hitbox and sphere overlap origin instead of -Infinity.

Changed: Changed the way priority is accumulated for entities to give smoother data delivery.
Changed: Changed the editor layout of the ‘Bolt Entity’ script on game objects.


Added: Added two new settings on the Bolt Entity component, ‘Detach on disable’ allows you to disable the default Bolt behavior of detaching entities when their game object was disabled. The second property called ‘Allow Replicate When Frozen’ allows you to have entities perform their initial replication(s) to clients even when frozen.

Fixed: You can now only register 254 token classes instead of the previous 255, which would let you register a ‘zero’ value.
Fixed: A performance issue that would happen with a lot of entities active due to BoltEntity having an Update() method has been resolved.
Fixed: Most issues with BoltEntity.SetParent has been fixed, there are a couple of smaller lingering ones left which will be fixed during the 0.4.3.x release cycle.

Changed: The internal concept of a ‘Server’ in Bolt is being re-named to ‘host’ to differentiate it from the ‘Zeus Server’, some APIs have been marked as deprecated and been replaced with ‘HostXYZ’ versions instead.
Changed: Updated the font and colors of the Bolt console.
Changed: Cleaned up large parts of the internal UdpKit API, this should not affect any public APIs but if you were compiling Bolt from source with your own changes UdpKit has been majorly re-worked internally.

Breaking: Most of the old and deprecated APIs have been removed, including the Modify() syntax for states and the “using (var ev …)” syntax for events.

Breaking: Most method overloads which receives a Bolt.IProtocolToken for connections and entities have been removed, you can now instead access the following tokens directly on the BoltConnection and BoltEntity objects instead:

  • BoltEntity.AttachToken
  • BoltEntity.DetachToken
  • BoltEntity.ControlGainedToken
  • BoltEntity.ControlLostToken
  • BoltConnection.ConnectToken
  • BoltConnection.AcceptToken
    This means that you have access to the protocol tokens for connections and entities at all times.

Breaking: The BoltStartup/BoltShutdown callbacks have been removed and replaced with the following ones:

  • BoltStartBegin
  • BoltStartDone
  • BoltStartFailed
  • BoltShutdownBegin(Bolt.AddCallback registerDoneCallback)
    You can call the delegate passed into BoltShutdownBegin and register your own callbacks which will be fired when Bolt has shutdown properly.

Breaking: The way Bolt runs it start-up and shutdown sequences have been completely re-worked, you can now call Shutdown/Start back-to-back and it will be handled properly. The new start-up sequence is completely asynchronous and happens in the background. You know if the start-up succeeded or failed based on the BoltStartDone and BoltStartFailed callbacks.

Breaking: The RegisterStreamChannels callback has been removed, you should now register the stream channels in the BoltStartBegin callback. You should also register any Bolt.IProtocolToken classes in the same spot.

Breaking: The method signatures of ConnectFailed, ConnectRequest, ConnectRefused and ConnectAttempt have all been normalized, they now all take both an UdpKit.UdpEndPoint and a Bolt.IProtocolToken as their parameters.

Breaking: The SessionConnectFailed has been changed to always take a Bolt.IProtocolToken as the second parameter.


Fixed: Implemented IState.GetDynamic for transform properties.


Fixed: Resolved an issue which would cause a crash on Android with byte code stripping.
Fixed: Frozen entities can now be destroyed properly.
Fixed: Controller state of entities will replicate properly for frozen entities.
Fixed: Added #pragma ignore for obsolete warning in BoltConsoleWriter.cs

Changed: Re-ordered the ‘New Event’ and ‘New Command’ options in the ‘Bolt Assets’ right click window.

Added: You can now press Ctrl+Enter to compile Bolt if you are focusing any of the ‘Bolt’ windows in the Unity editor.


Fixed: Resolved an issue where the LAN broadcasting would return an incorrect port for the host.
Fixed: An issue causing compilation errors on Windows under .NET2.0 Subset has been fixed.
Fixed: Issue where entities being nested during runtime would cause issues when shutting down Bolt.
Fixed: Frozen entities don’t exist in a twilight-zone anymore where some methods would not work on them.
Fixed: Bolt will no longer send already corrected command results, in earlier versions this could happen in edge cases with a lot of lag.
Fixed: When installing a fresh version of Bolt a proper game id will be generated for Zeus.

Changed: The default name of mecanim layers imported into a state is now ‘MecanimLayer_N_Weight’
Changed: Bolt will now automatically disconnect from Zeus when shutdown.
Changed: Commands, States and Events will now recycle the backing data structure used for storing all values, leading to a lot less GC pressure.
Changed: BoltNetwork.maxConnections now returns ‘0’ when in running bolt in single player and -1 when Bolt is not started.
Changed: When a client connects to a game it will now automatically disconnect from Zeus.

Added: Preview of Windows Phone 8 Support.
Added: New property BoltNetwork.IsSinglePlayer which lets you check if bolt is running in single player mode.
Added: New overload to BoltLauncher.Shutdown() which lets you pass in true/false if you want to wait for socket shutdown.
Added: BoltConnection.ScopedTo is a new property that contains all entities that are currently scoped to a specific connection.
Added: BoltConnection.SourceOf is a new property that contains all entities received from this connection.
Added: BoltConnection.ExistsOnRemote is a new method which lets you query if an entity exists on the remote end of a connection or not, possible return values are: No, Yes, Maybe.
Added: BoltConnection.HasControlOf which is a list of the entities this connection is controlling currently.
Added: Zeus.IsConnected which lets you query if you are connected to Zeus or not.
Added: Zeus.Hosts, Zeus.ClientsInGames and Zeus.ClientsInZeus properties which contain the current counts of peers for each category.
Added: Zeus.RequestInfo() which lets you request an update to Zeus.Hosts, Zeus.ClientsInGames and Zeus.ClientsInZeus.


Fixed: Resolved an issue in the default round-robin priority calculator which would cause to incorrectly prioritize some objects.
Fixed: Resolved an issue where using ‘Manual’ prefab mode would cause Bolt to think that normally instantiated prefabs were scene objects.


Fixed: An issue where property indexes for states would take up too much space has been fixed, this should lower bandwidth usage substantially for everyone.
Fixed: The mecanim import functionality on state assets will now properly import mecanim layers again.
Fixed: Could not connect to a session that was received over LAN Broadcasting.
Fixed: A bug which would cause the IProtocolToken to not get sent when connecting to a UdpSession.
Fixed: An issue where extrapolation of quaternions will sometimes start spitting out (NaN, NaN, NaN, NaN) results.
Fixed: The ‘Bolt Assets’ window will now properly respond to Cmd/Ctrl+LeftClick on OS X to open the right click menu.

Added: ‘Collapse All’/’Expand All’ for all properties in an asset.
Added: A duplicate button is now available for assets in the Bolt Editor window.

Changed: DebugInfo dialog will now display more information about the entity and state.

Breaking Change: The IPriorityCalculator.Always property has been removed, it was not being utilized internally.


Added: You can now select ‘Strict Comparison’ for transform, vector and quaternion properties which works around the ‘loose’ equality that Unity implements by default.
Added: You can now specify ‘Auto Freeze Frames’ on each entity, which allows you tell Bolt to automatically freeze a proxy of an entity if it has not received any update for that amount of frames.
Added: There is a new menu option at ‘Window/Bolt/Prefabs’ for editing the prefab database when in ‘Manual’ mode (see the ‘Changed’ line below).

Changed: Prefab mode can now be set to ‘Automatic Scan’, ‘Manual Scan’ and ‘Manual’ where you can manually edit the prefab database.
Changed: Entities which are frozen will automatically be thawed when they receive a state update.

Fixed: Frozen entities will now receive events and can be found through BoltNetwork.FindEntity.


Fixed: Hosts will now properly update the current/max connection values of their session to Zeus.
Fixed: BoltLauncher.Shutdown now returns the correct ManualResetEvent Value.
Fixed: The headers in the ‘Bolt Settings’ window have the correct backgrounds.
Fixed: Resolved an issue where Environment.StackTrace would cause issues when called in weird places.

Added: The in-game debug info window will now display layers, animation clips and weights for the active Animator.
Added: IProtocolToken can now be sent together with BoltNetwork.LoadScene.
Added: There is a new setting in the ‘Bolt Settings’ which lets you disable the default behavior which overrides Time.timeScale to 1.0f.
Added: You can now call BoltScenes.AddScene to dynamically add scenes to the Bolt scene loader during runtime.
Added: New overload for BoltLauncher.Shutdown which takes an System.Action delegate that will be invoked once Bolt has finished shutting down is now available.
Added: A new callback called ‘BoltStartFailed’ is now available, this will be invoked if Bolt fails to start or bind the socket, after this callback has been invoked Bolt will automatically shut down.

Changed: The confirm-delete dialog for assets and properties will now list both the name and type of item you are deleting.
Changed: Several internal classes which were previously public have been made internal.
Changed: New properties added to states/objects will now default to the ‘Everyone’ replication setting.
Changed: The ‘Window/Bolt Engine/…’ menu has been renamed to ‘Window/Bolt/…’.

Breaking Change: The ‘MissingCommand’ callback now does not let you queue new commands, instead it assumes you execute any replacement logic inside of the callback itself. You will still get the last (if any) received command passed in as a reference.
Breaking Change: The ‘BoltStarted’ callback will now happen once the socket is fully started and bound, instead of right after the StartServer, StartClient and StartSinglePlayer call returns.


Fixed: Interpolation issue for floats where they would always come out as zero on remote peers is resolved.


Fixed: On transform properties position and rotation axes which are set to not sync will no longer be-overwritten with zeros.
Fixed: On transform properties if position or rotation is completely disabled Bolt will let you control them locally for each peer.
Fixed: Fixed several issues relating to Zeus and connectivity to remote hosts.
Fixed: An issue that would cause the networking thread to lock up when calling Zeus.Disconnect() has been fixed.

Changed: In the GUI the replication setting for a property previous called ‘Only Owner’ and then ‘Local’ is gotten its final name: ‘Local For Each Player’.

Added: If you enable interpolation for floats you can now set it to interpolate as an angle instead of regular interpolation.
Added: If you enable compression on floats, ints or vectors their values will be clamped to the min/max compression values.
Added: Added BoltNetwork.SetDedicatedServerInfo to complement BoltNetwork.SetHostInfo, if you use SetDedicatedServerInfo both Bolt and Zeus will assume that the server has correct port-forwarding setup and will never attempt NAT-punchthrough to it.
Added: You can now access the LAN, WAN and Socket bound endpoints through BoltNetwork.UdpSocket.SocketEndPoint, BoltNetwork.UdpSocket.LanEndPoint, BoltNetwork.UdpSocket.WanEndPoint.


Fixed: Several issues with WebPlayer builds have been resolved.

Added: BoltLauncher.StartSinglePlayer() is now available for starting Bolt in non-networked mode.


This is the first release of Bolt which has a binary Unity 5 release.

Fixed: An issue where UdpKit.Protocol.ProbeFeatures would be sent forever from the client to Zeus.
Fixed: Several issues on Android when communicating with the Zeus server should now be solved.

Added: UdpIpv4Address now exposes a Broadcast property which contains the generic broadcast address.
Added: Detection of LAN address now works properly.

Changed: The GetProtocolToken() extension method on UdpSession is now in the global namespace, no need to import it with “using Bolt;” anymore.
Changed: The Build.fsx script has been changed to support Unity 5.


Fixed: SessionListUpdated callback will now be invoked even if there are no new sessions available.
Fixed: Bolt will now correctly handle an incorrect Game Id or Zeus EndPoint.
Fixed: Errors received from Zeus will now be printed in the Bolt Console.
Fixed: The UdpSession.WanEndPoint object will now hold the correct endpoint instead of

Added: You can now get the protocol token of a UdpSession with the GetProtocolToken() method.

Changed: All ‘MasterServer’ methods were removed from BoltNetwork. Use the new ‘Bolt.Zeus’ class to Connect, Disconnect and retrieve the session list with RequestSessionList.
Changed: Renamed all MasterServer methods on Bolt.GlobalEventListener to ‘Zeus’ instead.

Removed: Removed the ‘automatic’ session list request upon connection to Zeus, you have to always manually call Bolt.Zeus.RequestSessionList().


Fixed: Several issues with Android and iOS should now be resolved.
Fixed: Issue with trigges invoking the incorrect callback fixed.
Fixed: Issue where some properties would not be synced on first connect is solved.

Changed: The in-game debug info now also shows the name of the Animator component in use.
Changed: BoltLauncher.Shutdown now returns a ‘ManualResetEvent’ you can wait on until the shutdown is complete.

Added: UdpKit.UdpIPv4Address now exposes several properties that lets you check if it’s a LAN, WAN, Broadcast or Localhost IP address.
Added: BoltNetwork.UdpSocket lets you get the low level UdpSocket object used by Bolt.
Added: You can now manually set the UdpPlatform to use with BoltLauncher.SetUdpPlatform.
Added: All bolt arrays now implement the IEnumerable<T> interface.

Removed: The ‘accept token size’ setting has been removed (this setting was not used anywhere in the code).

Feature: The master server (named Zeus) is now available.


This is the first real public release of the 0.4.x series of Bolt, mostly due to time constraints caused by starting up Bolt as a full time company over the fall. Before this release 0.4.x has only existed inside the GitHub repository, but from now on all releases will be done on the website.
There are a lot of changes from 0.3.x to 0.4.x and the first part of the release notes are for the broader 0.3.x to 0.4.x changes, while the second part is for the specific changes on

0.3.x to 0.4.x changes

Changed: Revamped the entire asset system, you now use the ‘Bolt Assets’ window to define new assets for Bolt instead of the Unity Project View.
Changed: The entire replication engine has been rebuilt ground up to support more property types and very complex states.
Changed: Most of the public API of Bolt has moved into the Bolt namespace.
Changed: The entire editor UI has been re-done.

Feature: Support for PSVita and PlayStation 4.
Feature: Added support for attaching arbitrary user-data to most protocol level actions, by using the IProtocolToken interface, check the wiki for samples on this. changes

Fixed: Resolved the issue where rarely clients would report ‘Assigned Connection Id 0′ error when connecting to a server, and then getting disconnected.
Fixed: The UdpKit native sockets for iOS and Android will now respect the EINTR interrupt when doing a POSIX socket call.
Fixed: The font size in the console window will not be unreadable on high PPI devices anymore.
Fixed: Several issues relating to scene objects have been resolved.
Fixed: Fixed an issue where the ‘MissingCommand’ callback would stop the client from being able to send any more commands at all.
Fixed: Fixed an issue with an incorrect check if you were both owner and controller of an entity and tried to assign a state property.

Changed: Improved display of properties in arrays/nested objects in the in-game debug info dialog.
Changed: Most of the API has had all properties changed to ‘PascalCase’ from ‘camelCase’, the old ‘camelCase’ properties are still there but marked as obsolete.
Changed: The event ‘Raise’ method has been renamed to ‘Create’, the old ‘Raise’ method is still available but marked as obsolete.
Changed: Throttled the mecanim warnings Bolt would spit out if you had not assigned an Animator.
Changed: The ‘Only Owner’ replication mode has been renamed to ‘Local’.
Changed: Changed the editor UI for the ‘Bolt Entity’ component.
Changed: All references to the old ‘Structs’ concept from Bolt 0.4.0.x has been removed, all places now refer to ‘Objects’ instead.
Changed: Changed the way unreliable binary streams are sent to better handle real time data such as voice and video.
Changed: The in-game debug info will now use the mouse cursor instead of the middle of the screen for picking the entity to display debug info for.

Feature: Both ‘Global Senders’ and ‘Entity Senders’ can now be set to ‘None’ on events, which will stop Bolt from generating the methods associated with raising the event in that way.
Feature: Added a new ‘Help’ button on several places in the UI which takes you to an article on the Wiki about the subject, more of these will be added as development goes on.
Feature: Added a new option in ‘Bolt Settings’ to turn of the new ‘Help’ buttons.
Feature: Bolt will now ask the users to save the scene when switching scenes with the ‘Edit’ button in the ‘Bolt Scenes’ window.
Feature: Added support for IProtocolToken properties no states.

Removed: Removed the different sorting methods for properties in the ‘Bolt Editor’ window as it was causing issues with the unity editor GUI functions.
Removed: The BoltConsole.WriteReal method is now internal.

Beta 0.3.4

Fixed: Resolved a bug which would cause compilation to crash unity by loading too many assets.
Fixed: Bolt will no longer let non-owners destroy proxy objects.
Fixed: There is now a slight delay between the scene being done loading and Bolt invoking the callbacks, this should resolves several issues with objects being destroyed prematurely.

Changed: Build script has been updated to work better on OS X (again).
Changed: The BoltInit script now always uses the port from the debug settings.
Changed: The port used by the BoltInit script is now visible on Unity Free also.
Changed: All raycasting methods have been moved from BoltPhysics to BoltNetwork.
Changed: Default port is now 25000 instead of 40000.
Changed: The menu items have been re-arranged.

  • Bolt/Compile is now located at Assets/Compile Bolt Assets.
  • Bolt/Install is now located at Edit/Install Bolt.
    Feature: Bolt now has alpha-level PlayStation 4 support.
    Feature: BoltNetwork now exposes a property called globalObject which contains the Bolt global game object.

Beta 0.3.1

Fixed: The bolt compiler now correctly handles the same scene being added to the unity Build Settings twice.
Fixed: Fixed a bug with scene load which would cause clients who re-connected without restarting the application to not properly load the scene.
Fixed: Entities will no properly re-replicate over the wire after being out-of-scope after the first replication.
Fixed: Re-enabled file logging on desktop platforms and editor.
Fixed: Bolt will now correctly allow you to have “rogue” assemblies in your project without crashing during reflection.
Fixed: Remove the annoying Debug.Log messages in the mecanim reflection extensions.
Fixed: The property editors now display all properties correctly (no more missing fields).
Fixed: Bolt will no longer override your connection timeout settings in release mode.

Changed: The compiler does it best to convert prefab names and scene names to valid C# identifiers now.
Changed: Re-worked the naming of the properties on BoltEntity that lets you query ownership and control of an entity, the new solution which we will not change again is as follows:

  • isOwner – Returns true if this entity was instantiated on the current computer.
  • hasControl – Returns true if you have control over this entity.
    All other properties, including isProxy have been removed.

Feature: You can now toggle network simulation with a checkbox from the ‘Bolt Settings’ window, allow you to save your simulation settings but playing without wiping them.
Feature: The max packet size is now configurable via the ‘Bolt Settings’ window, do not touch this if you are unsure of what it does, a higher number is not ‘better’ than a lower number, allowed values are 1024 – 4096 (1kb to 4kb).
Feature: Added the ability to toggle of the assembly checksum check, there’s a checkbox to the right of the checksum that disables it.
Feature: Bolt now comes with a brand new installer, after unpacking the package into your main project run Bolt/Install Bolt from the menu and Bolt takes care of the rest.

Beta 0.3

Fixed: Fixed several small bugs with the BoltGlobalBehaviour attribute, it should now work properly in all different configurations.
Fixed: Resolved several issues with the Build.bat and Build.sh scripts, they should now work better on both Windows and OS X, there’s still more work to be done here but it’s getting better.
Fixed: The bolt compiler will not automatically open and focus the scene window when you compile Bolt anymore.
Fixed: Fixed a bug in the dead reckoning code which stopped it from working.
Fixed: Fixed a bug with entity destruction not replicating properly in all situations.
Fixed: Several issue with the new application identifier and assembly hash have been resolved.
Fixed: Resolved compilation issues for Web Player builds.

Changed: BoltMapNames has been deprecated.
Changed: BoltMaps replaces BoltMapNames and is a public static class with const fields on it.
Changed: BoltPrefabs is now a static class with const fields on it, instead of an enum.
Changed: Map loading has been re-worked, in general it works the same way but the internal workings have been change to eliminate a bunch of subtle quirks. The callbacks for map loading have been changed and renamed to more clearly symbol what they do, the new callbacks are:

  • MapLoadLocalBegin(string map): Called when a map is begining to load locally
  • MapLoadLocalDone(string map): Called when a map is done loading locally
  • MapLoadRemoteDone(BoltConnection connection, string map): Called when a map is done loading on a remote computer, called for both the server on the clients and for all clients on the server.

Changed: Reworked the way BoltLog works, you can now implement your own class that inherits from BoltLog.IWriter to provide custom logging functionality. Bolt comes with four default loggers: Unity Console, System Console, File and Bolt Console.
Changed: The window previously called ‘Bolt Connections’ has had it’s look and feel updated and is now called ‘Bolt Remotes’, more features will be added to this window in future updates.

Feature: Reworked the asset editor GUIs with a new style.
Feature: Bolt can now replicate mecanim layer weights, toggle the ‘Replicate Layer Weights’ checkbox on your Bolt mecanim asset to enable this.
Feature: Bolt provides new extension methods for mecanim for using Bolt with legacy mecanim code, they are found in the BoltMecanimReflectionExtensions class.
Feature: Added several new options for logging and the console to the ‘Bolt Settings’ window.
Feature: Bolt will now make sure that two peers connecting to each other are using the same application guid and that their bolt.user.dll assembly has the same hash value.
Feature: Bolt now allows you to use a session wide unique id for your entities, enable this by checking the ‘Use Unique Ids’ option in the ‘Bolt Settings’ window, each BoltEntity now exposes a property called ‘uniqueId’ which is gurantueed to always be unique. Find a BoltEntity by it’s unique id using BoltNetwork.FindEntity(id);
Feature: You can now set the instantiate and destroy functions bolt should use with the new SetInstantiateDestroyCallbacks method on the BoltNetwork class.
Feature: BoltNetwork.Connect has gotten a new parameter called “token”, this is a byte[] array of size of up to 768 which gets sent from the client to the server when it’s connecting, if you are using manual connection acception this allows you to inspect the token data before hand and do things such as user authentication and verification.
Feature: You can now disable Clients from being able to instantiate certain bolt entities, on the Bolt Entity component you can toggle this on and off on a per-prefab basis.


Fixed: Android projects should now compile properly again.
Fixed: iOS projects should not crash with an AOT/JIT error anymore.
Fixed: Compilation errors in the startupshutdown sample is gone.
Fixed: Quaternion properties should now replicate properly.
Fixed: You can now enable interpolation for Vector2, Vector3, Vector4 and Quaternion.
Fixed: unsigned 32 bit integers of 9-16 bits should now replicate properly.
Fixed: InScope should not crash anymore when you destroy an entity on the owner.
Fixed: Numerous other small quirks and bugs.

Changed: Bolt will now load less prefabs into memory while looking for entities and assets to compile, this should speed up compilation and allow for compilation of very large projects without any issue.
Changed: BoltMapAsset are gone, Bolt does not use the “Map” asset at all any more and instead just deals with scenes like Unity does.
Changed: BoltConfigAssets are gone, Configuration is now done through the new ‘Bolt Settings’ window which you find under Window/Bolt Settings.
Changed: BoltEditorSettings are gone, it has been merged into BoltRuntimeSettings.
Changed: BoltClearScene is gone, it is not required any more.
Changed: The ‘Map Launcher’ window has been renamed to ‘Bolt Scenes’. The auto-starter has been removed if you are using the free version of Unity. The BoltDebugNonPro scene is gone because of this.
Changed: BoltEntity has gotten four new properties to query the state of the entity, they are ment to replace the old isOwner, isProxy and isControlling.

  • BoltEntity.hasAuthority: is you have full authority over this entity or not.
  • BoltEntity.hasControl: if you can control this entity.
  • BoltEntity.spawnedRemotely: if this was spawned by someone else than you.
  • BoltEntity.isDummy: if you are neither authority or in control of this entity.

Changed: Android and iOS builds now always use native sockets. The native socket plugins will also install automatically when needed and the menu option for installing them is gone.
Changed: The UdpPlatformAndroid and UdpPlatformIOS have been merged into one class called UdpPlatformMobile.
Changed: The udpkit platform assemblies have been moved into the unity project at .cs files instead to once and for all rid any issues with compiling for different platforms.
Changed: Due to the growing size of the project, the source .zip has been removed from the main download package, we instead provide direct access to our private GitHub repository.

Feature: BoltConsole now exposes a properly called ‘writable’ which you can be set to false to stop the console from consuming so much CPU.
Feature: Bolt now allows you to accept/refuse a connection before it is established, set the Accept Mode property in the ‘Bolt Setttings’ window to manual. Override the ConnectRequest method on an object which inherits from BoltCallbacks, then call BoltNetwork.Accept or BoltNetwork.Refuse.
Feature: BoltEntityBehaviour now exposes a ControlGained/ControlLost callback methods which you can override.
Feature: Since you can no longer set a Server and Client object on the configuration asset (since its gone) we have added new functionality for having behaviours which instantiate with the server/client and specific maps. All you need to do is to mark any MonoBehaviour with the BoltGlobalBehaviourAttribute, you can then specify if you want it for the server and client – or both. You can also specify if it should only be created and available during a specific map. Check the sample projects in bolt/samples for examples.


Fixed: Mecanim parameters will not be set if the Animator component is disabled.
Fixed: Resolved exception thrown when a destroyed entity got a lost or delivered packet notifiication.
Fixed: Fixed an issue with the BoltConfig constructor which would cause unity to throw errors when access a configuration asset in Awake().
Fixed: Bolt will now correctly disconnect all connections when shutting down.
Fixed: Fixed several subtle quirks causing Shutdown to act differently depending on when it was called.

Changed: ShutdownDone has been removed from BoltCallbacks since it would never get called as all objects would be destroyed before the callback would fire, BoltNetwork now exposes a .NET event called “ShutdownComplete” which you can subscribe to. Note that after each invocation of the event it will clear it’s callbacks so you have to re-register them every time.

Sample: There’s a new sample in the bolts/samples/shutdownstartup folder which demonstrates a clean shutdown-startup cycle for both the client and server. To run it set up your build settings to that the scenes are in this order:

  • StartupShutdown_Menu.scene
  • StartupShutdown_MapGreen.scene
  • StartupShutdown_MapRed.scene
  • BoltClearScene.scene

Run Bolt/Compile and then build the project like you normally would (not using the map launcher), and start as many instances as you want and connect them together.


Important: UdpKit source code is now included in the source package, note that this source code is under the same license as the rest of the Bolt package, it is not open source.

Fixed: The BoltDebugStartNonPro script will now correctly select the proper configuration file.
Fixed: Prefabs should no longer accidentaly be marked as Scene Objects.
Fixed: Resolved numerous issues in the native sockets code for mobile free users.
Fixed: Resolved an issue where uint32 and int32 values of 9-16 bits would not serialize correctly
Changed: Reworked the entire build system, it’s now a lot easier to build on both OS X and Windows. All build scripts and other tools are also bundled with Bolt now. The new system uses the F# FAKE build tool which allows for easier building of the entire project at once, run the Build.fsx script with FAKE. Requires Mono 3.4.x on OS X.

Feature: Local LAN/WiFi discovery is now available. A simple example is available in bolt/samples/lanbroadcast. The new methods available are:

  • BoltNetwork.EnableLanBroadcast(): Enables the lan broadcasting feature, call this on both the client and server.
  • BoltNetwork.DisableLanBroadcast(): Disables the lan broadcasting. When you connect to a server on the client this is called implicitly, on the server you have to call it yourself to stop broadcasting your session.
  • BoltNetwork.GetSessions(): Call on the client to get a list of sessions found on the local lan, note that this method allocates a new array every time you call it because the data comes from the UdpKit background thread.
  • BoltNetwork.SetSessionInfo(string serverName, string userData): Call on the server for setting a server name and custom data that is transmitted with it’s session broadcast, which can then be found on UdpSession.ServerName and UdpSession.UserData on the session structs returned from GetSessions() on the client.

Feature: Two new overloads for BoltNetwork.Raise exist: Raise(IBoltEvent evnt, IEnumerable connections) and Raise(IBoltEvent evnt, params BoltConnection[] connections), this lets you raise a specific event on your own local machine and on the specified remote connections.


Fixed: Resolved an issue where the entity packer would sometimes throw an exception when you tried to teleport a character.
Fixed: The BoltDebugStart and BoltDebugStartNonPro scripts now correctly use the port you configured in the map launcher.
Fixed: The BoltDebugStart and BoltDebugStartNonPro scripts now correctly selects a proper configuration file.
Fixed: Resolved an issue where if you were rotating an entity and the delta value per frame was small enough the rotation would not replicate properly.
Fixed: BoltDebugStartNonPro will correctly handle if no map has been specified.
Fixed: Entity scoping now correctly takes into account where an entity originated from.
Fixed: When an entity is attached it will now be scoped right away for all connections, so that events can be sent to it directly after Attached() is done.
Fixed: BoltDefaultConfig is no longer linked to the ServerObject/ClientObject prefabs in one of the sample projects.
Fixed: Removed all dependencies on the sample projects.

Feature: Added a new method called “AttachedLate” on the BoltEntitySerializer class, you can override this method in your own serializer. The method will be called after all Attached() methods have been called on both the serializer and any entity behaviour, and after scoping of the entity has taken place.
Feature: Bolt will now display a warning in the Map Launcher if the “Run In Background” player setting is not enabled.


Fixed: Byte arrays now serialize properly.

Changed: The default space in the name of a new asset, ‘New State’ for example, has been removed.

Feature: You can now see the port the Map Launcher will try to use, and press “refresh” to get a new random port number.


Fixed: Bolt now properly asks you if you want to save the current scene before launching through the Map Launcher window.
Fixed: The Map Launcher should now work properly on Unity 4.5 on OS X.
Fixed: Debugging with breakpoints from Unity-MonoDevelop should now work properly, without either client or server crashing and with no timeouts. Tested on Unity 4.3.4f1 and 4.5.0 on both Windows and OS X. Note: If you are having problems with the editor or locking/crashing when you start with the debugger attached, try to attach the debugger from Mono Develop after the editor has started play mode completely.

Removed: BoltMecanimAnimator.CopyProperties has been removed as it served no purpose.
Removed: The configuration setting from the Map Launcher has been removed, if you want a specific configuration to your maps you should set it on the map asset itself instead.

Changed: The default connection timeout in debug mode is now 600 seconds (10 minutes), giving you a lot more time to debug before the client/server disconnects when one side is paused.
Changed: The origin of an entity is now replicated to all proxies also.
Changed: BoltEntity objects placed in the scene now attach in Start() instead of Awake() on the server
Changed: The BoltNetwork class now correctly exposes Attach(BoltEntity entity) and Detach(BoltEntity entity) for manually attaching/detaching an object from Bolt
Changed: The ‘invoking [event]’ message will now only be raised if the event is actually being received
Changed: Reduced the size of the package by converting textures from .tga to .jpeg

Feature: A new property type was added: Byte Array, this type can only be selected on events and allows you to send a normal byte array through an event, max length of array is 256.
Feature: The current version of Bolt is now displayed at the top of the Map Launcher window.
Feature: The current amount of assets requiring compilation is now displayed at the top of the Map Launcher window, with a ‘Compile’ button next to it
Feature: GNU/Linux support is now official, Bolt will now run properly in both normal and headless mode under GNU/Linux.
Feature: The BoltEntity component now has a setting called ‘Controller Prediction’ which should be on if you are using a controlling scheme which allows client side prediction and off if you’re not using client side prediction in your controller script. Note that this setting does not enable or disable client side prediction, it simply tells Bolt if this entity is or isn’t using client side prediction so that Bolt can adjust it’s internal state accordingly.
Feature: New sample with a third person character that can run around, get into cars, drive the cars and then get out of them. Other players can also stand on the cars while they drive around.


Fixed: Bolt will now properly save the current scene before starting through the Map Launcher.
Fixed: Default configuration doesn’t have 150ms simulated ping and 2% simulated packet loss anymore.
Fixed: Resolved a bug in the transform snapshot interpolator that would cause entities to stop updating their position when using a very low de-jitter delay and a specific timing occurred.
Fixed: Resolved a bug where you would sometimes execute the same command twice when you were controlling the an entity you were also the owner of.

Changed: Damping parameter on float properties on mecanim assets now use the built in damping functionality of mecanim instead of it’s own logic. This makes sure that animations replicated through Bolt produce the exact same result as animations played locally with mecanim.
Changed: Renamed the ‘Type’ setting in the event editor to ‘Target’, so it’s not confused with the ‘Type’ setting for properties.
Changed: Corrected the name of the file BoltGUII.cs to BoltGUI.cs
Changed: Non-state assets will not let you select the “Custom” property type anymore, as they are only supported in ‘State’ assets.
Changed: BoltRingBuffer<T> now implements IEnumerable<T>.

Feature: The BoltNetwork class now exposes a ‘serverTime’ property which on the server returns the local frame count translated to seconds. On clients it returns the estimated server frame translated to seconds.
Feature: The BoltEntity class now exposes a method called SetOrigin(Transform origin), this method allows you to set the origin transform of an entity. Bolt requires the transform to be mapped to an integer value for serialization over the network, by default Bolt allows you to add a BoltOrigin component to your transform and then assign it a unique id. If you don’t want to use the BoltOrigin component and prefer to do the tansform to id mapping yourself you can set the two callbacks available on BoltNetwork called resolveTransform and resolveTransformId. See the new sample called ‘TeleportAndElevators” found in bolt/samples.


Fixed: TutorialPlayerMotor.cs script now correctly applies gravity to the character.
Fixed: Compiler can now handle paths with space characters in them.
Fixed: Disabling the built-in transform or mecanim properties in the state editor will not disable the rest of the properties below them anymore.
Fixed: The BoltNetwork class now correctly exposes the Destroy(GameObject go) and Destroy(BoltEntity entity) methods.
Fixed: Queueing an unreliable event that was raised on the server to all connected clients should now work properly.

Changed: Renamed several labels of settings in the state editor. ‘Mode’ on each property is now called ‘Sync When’. The ‘Once’ option on ‘Sync When’ is now called ‘Once On Init’. ‘Notify’ is now called ‘Changed Callback’, ‘Smooth Time’ on mecanim float properties are now called ‘Damping’, ‘Smooth’ in Float, Vector2, Vector3, Vector4 and Quaternion properties is now called ‘Interpolate’.
Changed: Removed the ability to accidentaly create new properties of the transform, mecanim and trigger types. This would break the state asset making it unusable.
Changed: All methods in the BoltStateTransformDeadReckoning and BoltStateTransformInterpolatedSnapshots are now public/protected and virtual to allow for easier extension of the classes.
Changed: All internal fields and properties in the BoltStateTransformDeadReckoning, BoltStateTransformInterpolatedSnapshots and BoltStateTransform classes are now protected or public, to allow for easier extending of these classes.

Feature: Added the ability to teleport entities to a new location, which gives a clean transition from the old to the new position without any interpolation. Two new methods called Teleport(Vector3 pos, Quaternion rot) and Teleport(Vector3 pos) are available on the BoltEntity class.


Fixed: Assembly references from bolt.dll and bolt.editor.dll pointing on an old version of udpkit.dll


Initial public release

Back to top