- Web Documentation
- PDF Documentation - available to download from assets
- Forum release thread
- Forum development thread
Client libraries:
Changes
Server
- Fix server version reported to clients (read from
KRPC.dllnotKRPC.Core.dll) (#848) - Fix Logger to write to both
KSP.logandPlayer.log(#780) - Improve RPC and stream update performance (#879)
- Fix Stream RPCs Executed and Stream RPC Rate always showing 0 in the info window (#879)
- Improve the server window UI (#919)
- Fix incorrect unit shown for "max. time per update" and "receive timeout" (#919)
- Support switching the game scene by setting
KRPC.GameScene(#897) - Fix repeated toolbar icons appearing in some situations (#939)
Core
- Add
Versionproperty toCore, set by the server plugin on startup (#848) - Enable
TCP_NODELAYon client TCP connections, reducing RPC round-trip latency (#879) - Surface deprecated members (annotated with
[Obsolete]) in the service definition and over the wire (#904) - Add
KRPC.GameSceneand make it settable to switch the current game scene (#897) - Deprecated:
KRPC.CurrentGameScene, kept as a read-only alias ofKRPC.GameScene(#897) - Add
AstronautComplex,MissionControl,ResearchAndDevelopment,AdministrationandMissionBuildergame scenes (#897) - Fix the game scenes a procedure is available in never being sent by
GetServices; thegame_scenesfield of every procedure was always empty (#991) - Reduce copying and allocation overhead receiving protobuf messages (#972)
- Fix the websocket servers rejecting connection requests that are split across multiple reads (#973)
- Fix websocket connection URL query parameter parsing (#973)
- Fix locale issues with type codes in the service description, and HTTP and websocket protocol tokens (#993)
DockingCamera service
- Fix
DockingCamera.Availableincorrectly reporting false in game scenes other than flight (#937)
InfernalRobotics service
- Add to
Servo:UID,Mode(with a newServoModeenum),TargetPosition,TargetSpeed,CommandedPosition,DefaultPosition,ForceLimit,MaxForce,MaxAcceleration,MaxSpeed,ElectricChargeRequired,SpringPower,DampingPower,RotorAcceleration,IsLimited,IsRotational,IsServo,CanHaveLimits,HasSpring,IsRunning,PresetPositions,AddPreset,RemovePresetAtandSortPresets(#942) - Add to
ServoGroup:Vessel,MovingDirection,AdvancedMode,ElectricChargeRequired,BuildAidandIKActive(#942) - Fix
Servo.MinPositionandMaxPositionto return the position limits set in the tweak menu, rather than the fixed range from the part configuration (#942) - Support controlling servos on any loaded vessel, not just the active vessel (#943)
- Fix
Servo.MoveLeft,MoveCenterandMoveRightfailing with the latest version of IR (#941) - Make
InfernalRobotics.Availablereport correctly in all game scenes (#941) - Fix
InfernalRobotics.Readyreporting false when queried before IR has finished loading (#941)
KerbalAlarmClock service
- Make available in all game scenes (#944)
- Add
AlarmType.ScienceLab(#982) - Add
AlarmAction.CustomandAlarmAction.Converted(#982) - Add
Alarm.Enabled,Alarm.PlaySound,Alarm.Triggered,Alarm.SupportsRepeatandAlarm.SupportsRepeatPeriod(#982) - Fix
Alarm.Remainingalways failing with an invalid cast error (#982) - Fix alarm equality, so the same alarm obtained twice compares equal (#982)
- Fix accessing an alarm after it has been removed; it now fails with an "Alarm does not exist" error (#982)
LiDAR service
- Fix
LiDAR.Availableincorrectly reporting false in game scenes other than flight (#937)
RemoteTech service
- Fix
RemoteTech.Availableincorrectly reporting false in game scenes other than flight (#937)
SpaceCenter service
- Space center
- Add
SpaceCenter.Expansionsto report the installed KSP expansions (#985) - Add
SpaceCenter.AltimeterModeand anAltimeterModeenumeration to get and set the mode of the in-game altimeter (#808) SpaceCenter.ActiveVesselnow returns null when there is no active vessel, instead of raising an error (#821)- Breaking: Make
LaunchVesselcrew parameter non-optional to work around protocol issue (#824) - Deprecated:
SpaceCenter.LoadSpaceCenter, superseded by settingKRPC.GameScene(#897)
- Add
- Vessels and crew
- Add
Vessel.LoadedandVessel.Packedto report a vessel's loading and on-rails state (#967) - Add
Vessel.PhysicsRangeto set how far from the active vessel a vessel keeps running its physics simulation, so that it stays controllable beyond the game's default range. The range applies to that vessel only, and persists until it is set back to zero or the game is exited (#987) - Add RPCs for getting acceleration to
FlightandVesselclasses (#581) - Fix
Vessel.AvailableTorquedue to sign inconsistency in KSP'sITorqueProviderimplementations (#525) - Add
CrewMember.Partand per-partCrewCapacityandCrewproperties (#1001)
- Add
- Staging
- Add staging API giving per-stage delta-v and resource information (#920)
- Deprecated:
Parts.InStage,Parts.InDecoupleStageandVessel.ResourcesInDecoupleStage, superseded by the staging API (#920) - Fix
Part.DecoupledAtnot considering if a decoupler is enabled (#818) - Fix
Part.DecoupledAtreturning the wrong stage when the part is decoupled by a decoupler on its parent part (#800) - Fix
Decoupler.AttachedPartraising an error when no part is attached to the decoupler's node; it now returns null (#822)
- Autopilot
- Rework the
AutoPilotfor smoother, more accurate pointing across a wide range of craft, from small probes to large flexible launchers, with no per-craft tuning (#882, #571, #394, #220, #248, #542) - The
AutoPilotnow controls pitch and yaw together, so the nose tracks a straight path to the target and holding a roll no longer curves that path (#882) - The
AutoPilotnow detects and damps structural oscillations on long or flexible craft automatically; rigid craft are unaffected (#882) - Replace
AutoPilot.EngageandDisengagewith theAutoPilot.Engagedproperty (#882) - Add
AutoPilot.TargetRotationto command a full target orientation (direction and roll) (#882) - Add
AutoPilot.SetDirectionAndUpto aim the nose along a direction while keeping the roof aligned to an up vector, so an orientation can be held through a maneuver without the singularity the old roll control hit at the vertical (#882) - Add
AutoPilot.UpReference, a persistent reference thatAutoPilot.TargetRollis measured against, and makeTargetRollwell-defined through the vertical (#882) - Add
AutoPilot.AttitudeErrorfor a singularity-free (pitch, yaw, roll) attitude error;PitchErrorandHeadingErrornow use the same well-defined decomposition (#882) - Fix
AutoPilot.RollErrorreturning spurious large values near vertical (#564) - Document
Flight.Pitch,HeadingandRolland the scalar target pitch/heading/roll as ill-defined near vertical, pointing to the rotation and error readouts instead (#882) - Add
AutoPilot.TargetSmoothingTimeto slew the target smoothly when it changes, with matchingCurrent*readouts of the smoothed target actually being tracked (#882) - Add
AutoPilot.SoftStartTimeto fade in control output on engagement (#882) - Add
AutoPilot.Resetto disengage and restore all settings to their defaults (#882) - Add
AutoPilot.ShowInfoUIto show an in-game autopilot info window (#882) - Replace
AutoPilot.RollThresholdwithRollStartAngleandRollEngageAngle(#882) - Replace
AutoPilot.StoppingTimeandDecelerationTimewithAutoPilot.MaxAngularVelocity(#882) - Replace
AutoPilot.AttenuationAnglewithPitchYawAttenuationAngleandRollAttenuationAngle(#882) - Add controls to tune and observe the
AutoPilot's oscillation mitigation (rate filter, bandwidth floor, feedforward-cut and output-filter modes, and manual structural-frequency settings) (#882) - Add
AutoPilot.StoppingAngleThresholdandStoppingVelocityThresholdto control whenAutoPilot.Wait()returns (#882) - Add an optional timeout to
AutoPilot.Wait(), throwingTimeoutExceptionif it expires (#882) - Add
AutoPilot.DiagnosticLoggingandDiagnosticLogfor per-tick controller diagnostics (#882) - On client disconnect the
AutoPilotis now disengaged but its settings and target are kept (#882) - Fix
AutoPilot.Errorto return the absolute value of the normalized angle (#893) - Fix the auto-pilot no longer controlling the vessel after a Revert to Launch when a client keeps its auto-pilot object across the reload (it appeared engaged but stopped driving the vessel until the game was restarted) (#958)
- Fix
AutoPilot.ReferenceFrameraising an error when set to a docking port reference frame (#882)
- Rework the
- Reference frames
- Fix
ManeuverandManeuverOrbitalreference frame velocity (previously returned zero; now returns the orbital velocity at the node UT) (#880) - Fix angular velocity for
VesselSurface,VesselSurfaceVelocity,CelestialBodyOrbital,Maneuver,ManeuverOrbital,Part,PartCenterOfMass,DockingPortandThrustreference frames (previously returned zero) (#880) - Fix
VesselOrbitalreference frame angular velocity (missing Coriolis correction) (#823) - Fix reference frame velocity being incorrect at non-equatorial latitudes (#454)
- Fix
Vessel/Part/Hybridreference frame rotation precision (#880) - Fix
ReferenceFrame.CreateHybridusing velocity frame's angular velocity instead of theangularVelocityframe (#880) - Fix
VesselSurfaceVelocityreference frame producing NaN when surface velocity is near zero; now throwsInvalidOperationException(#880) - Fix
PartCenterOfMassreference frame throwingInvalidOperationExceptionon velocity transforms (#880) - Fix
Maneuverreference frame forward-vector fallback using unnormalized burn vector in collinearity check (#880) - Fix
LookRotation2producing NaN for rotations near 180° by using Shepperd's method (#880) - Fix maneuver node reference frame positions being computed relative to the active vessel, giving wrong positions for maneuver nodes on other vessels (#880)
- Improve performance of
CommNode.IsVessel,CommNode.Vessel,Vessel.AngularVelocityand reference frame angular velocities (#975)
- Fix
- Orbits, nodes and bodies
- Add
Orbit.OrbitalEnergy(#303) - Add
Orbit.NextClosestApproachandOrbit.ClosestApproaches, and aClosestApproachclass exposing the time, distance, positions, velocities, relative position/velocity and relative speed at a close approach with a target orbit, plus the vessels or bodies involved (#334) - Deprecated:
Orbit.TimeOfClosestApproach,Orbit.DistanceAtClosestApproachandOrbit.ListClosestApproaches, superseded byOrbit.NextClosestApproachandOrbit.ClosestApproaches(#334) - Add
Node.Rotation(#880) - Fix
Nodeobjects whose maneuver node was removed byControl.RemoveNodes, anotherNodeobject or the in-game UI: all members now raise an error, instead of silently reading and writing the detached node (#975) - Fix
CelestialBody.Rotationreturning incorrect values before a flight scene loads (#890)
- Add
- Flight and aerodynamics
- Breaking: Add a rotation parameter to
Flight.SimulateAerodynamicForceAtto set the vessel attitude (angle of attack and sideslip) independently of velocity. Pass the current rotation for the previous behavior (#915) - Add
Flight.SurfaceProgradeandFlight.SurfaceRetrogradedirection vectors (surface-relative velocity direction, matching navball surface mode) (#582) - Fix
Flight.AngleOfAttackandFlight.SideslipAngletreating dot product as radians instead of usingasin(#880) - Add
Flight.AerodynamicTorque, the live counterpart toFlight.AerodynamicForce, giving the net aerodynamic torque acting on the vessel about its center of mass on the current physics frame; not available with FAR (#914) - Add
Flight.SimulateAerodynamicTorqueAtto simulate the aerodynamic torque about the vessel's center of mass, for a hypothetical attitude and angular velocity, with both stock aerodynamics and FAR, in newton-meters. The torque includes both damping mechanisms the game applies: the change in each part's local airflow due to rotation, and the per-part rigidbody angular drag (#825, #914, #429) - Add
Flight.SimulateAerodynamicWrenchAtto evaluate stock aerodynamic force and torque together at a hypothetical center-of-mass state, attitude, body rate and atmospheric ephemeris time (#914) - Add
Part.DragandPart.Liftreturning the aerodynamic drag and lift forces acting on an individual part (#459) - Fix
Flight.SimulateAerodynamicForceAtignoring the current deflection of aerodynamic control surfaces, including deployed airbrakes (#622) - Fix
Flight.SimulateAerodynamicForceAtoverestimating drag at low altitude and subsonic speed by applying KSP's pseudo-Reynolds drag multiplier to cube drag (#912) - Fix
Flight.SimulateAerodynamicForceAtreturning force in kilonewtons instead of newtons when FAR is installed (#915) - Fix
Flight.SimulateAerodynamicForceAtcomputing incorrect lift for command pods and other parts with a perpendicular-only lifting-surface module: cube body lift was applied even where the game disables it (a pod with a heatshield occupying its bottom node has none), and lifting-surface modules were evaluated against stale internal airflow state, so results depended on the game context the call was made from (landed, in vacuum, or in atmospheric flight) (#914) - Fix
Part.Lift,Flight.LiftandFlight.AerodynamicForceincluding stale body lift for parts whose body lift the game suppresses, e.g. a pod with a heatshield attached (#971)
- Breaking: Add a rotation parameter to
- Control
- Breaking:
Control.SASnow throws an exception when set to true while the autopilot is engaged, matchingAutoPilot.SAS. Previously the write was accepted and the autopilot silently switched SAS back off on the next physics tick (#492) - Fix
Control.SASModebeing dropped when set in the same physics tick as enabling SAS (#236) - Add
Control.PitchTrim,Control.YawTrimandControl.RollTrimto get/set the persistent pitch, yaw and roll trim of the active vessel (#863) - Add
Control.AeroSurfacesto enable/disable pitch, yaw and roll on all control surfaces (#827) - Add
Control.EngineGimbalsto enable/disable gimbal on all gimballed engines (#827) - Add
Control.ThrustReversersto engage/disengage thrust reversers on all engines (#865) - Add
Control.GetActionGroupActionsto list the part actions assigned to an action group (#864) - Add direct control of engine gimbals, RCS and control surfaces (#917)
- Fix
Control.CustomAxis01-04being applied to the active vessel instead of the target vessel, and the getters not reading back the value that was set (#938) - Fix throttle being applied to a vessel with no RemoteTech control connection (#938)
- Breaking:
- Engines
- Add
Engine.Flameout(#311) - Add
Engine.CanReverseThrust,Engine.ThrustReversedandEngine.ToggleThrustReversalto control thrust reversal on stock and recognized mod engines (#865) - Fix
Engine.Propellantsfailing for non-active mode on multi-mode engines with different propellants (#833) - Fix
Engine.AvailableThrustandMaxThrustfor air-breathing engines at supersonic speeds (#924)
- Add
- Reaction wheels, RCS and control surfaces
- Add
ReactionWheel.AuthorityLimiter(#909) - Fix
ReactionWheel.AvailableTorquenot considering authority limiter setting (#909) - Fix RCS force and torque vector calculations using max thrust rather than available thrust (#909)
- Fix
RCS.MaxTorquedocumentation error - it considers thrust limit set to 100% (#909) - Fix
RCS.Activereporting a shielded thruster as inactive when it is able to thrust while shielded (#975) - Fix
ControlSurface.AvailableTorquereturning inconsistent signs (ModuleControlSurfacenegates the roll axis); now normalized to positive/negative torque like other parts (#881)
- Add
- Parachutes and wheels
- Fix
Parachute.Deploybeing a silent no-op for RealChute parachutes (#382) - Add
Parachute.SafeStatereporting whether it is currently safe to deploy the parachute (safe, risky, unsafe, or not applicable) (#977) - Add
Wheel.SteeringAngleAutoto get/set automatic speed-based steering angle limiting (#975)
- Fix
- Deployable parts
- Breaking: Replace the
RadiatorState,SolarPanelState,AntennaState,LegState,WheelStateandCargoBayStateenumerations with a singleDeployableStateenumeration, whose members areDeployed,Retracted,Deploying,RetractingandBroken.Radiator.StateandSolarPanel.Statenow reportDeployedandDeployingin place ofExtendedandExtending, andCargoBay.StatereportsDeployed,Retracted,DeployingandRetractingin place ofOpen,Closed,OpeningandClosing. The underlying values are unchanged, so only the enumeration and member names need updating (#986) - Breaking:
ResourceHarvester.Stateis now aDeployableStateand no longer reportsActive; useResourceHarvester.Activeto check whether the harvester is drilling. TheResourceHarvesterStateenumeration is removed and its values renumbered, so clients using it must be regenerated (#986) - Fix
CargoBay.StatereportingDeployedfor a closed cargo ramp, and reporting a resting state while the bay was still moving (#986)
- Breaking: Replace the
- Robotic parts
- Breaking:
RoboticController.AddAxis,AddKeyFrameandClearAxisnow identify an axis by the name of its field, for exampletargetAngle, instead of by the label shown in the part's menu, for example "Target Angle". The names now match those returned byRoboticController.Axes, which previously could not be passed back in, and no longer change with the language the game is running in (#993) - Add
Parts.RoboticControllers(#985) - Add to
RoboticController:Enabled,Playing,Position,Length,PlaySpeed,PlayandStop(#985) - Add to
RoboticHinge:MinAngle,MaxAngleandIsMoving(#985) - Add to
RoboticPiston:MinExtension,MaxExtensionandIsMoving(#985) - Add to
RoboticRotation:MinAngle,MaxAngle,AllowFullRotationandIsMoving(#985) - Add to
RoboticRotor:MaxTorque,BrakePercentageandIsMoving(#985) - Fix
RoboticRotation.CurrentAngleandRoboticRotor.CurrentRPMreturning stale values in flight (the KSP fields they read are only refreshed while the part action window is open) (#985)
- Breaking:
- Resource harvesters and converters
- Fix
ResourceHarvester.Activebeing silently ignored when set while the harvester is deploying; the requested state is now applied when the deploy completes (#983) - Fix
ResourceHarvester.ExtractionRatereturning 0 when part action window is not open (#889) - Fix
ResourceConverter.StateandResourceHarvester.ThermalEfficiencymisreading the KSP status string (#892) - Fix
Sensor.Valuereturning zero when the part action window is not open (#883)
- Fix
- Part modules, fields and configuration
- Add
PartField,PartEventandPartActionAPI (#859) - Deprecated: the string-dictionary
Modulefield, event and action members (#859) - Allow
Module.HasFieldWithId,GetFieldById,SetFieldIntById,SetFieldFloatById,SetFieldStringById,SetFieldBoolByIdandResetFieldByIdto also access fields not visible in the UI (#858) - Add
Part.Config,Module.ConfigandConfigNodefor accessing part and module static configuration (#831)
- Add
- Science, contracts and waypoints
- Fix
Experiment.Resetnot clearing the science data stored by DMagic experiments, which caused the next call toRunto fail with "Experiment already contains data" (#550) - Add
Contract.DateAccepted,DateDeadline,DateExpireandDateFinished(#977) - Guard
ContractManageragainst nullContractSystemin non-career game modes (#819) - Fix
Waypoint.MeanAltitudereturning the altitude relative to the terrain below the waypoint instead of relative to sea level (#801) - Fix
Waypoint.MeanAltitude,SurfaceAltitudeandBedrockAltitudenot round-tripping: the setters did not account for KSP storing waypoint altitudes relative to the bedrock height, so the altitude read back differed from the value set (#891)
- Fix
- Alarms
- Breaking:
Alarm.Typenow returns anAlarmTypeenumeration value instead of a string (#853) - Add to
Alarm:Node,OriginBody,DestinationBody,WarpAction,MessageAction,PlaySound,DeleteOnDismiss,TriggeredandActioned(#853) - Add
AlarmType,AlarmWarpActionandAlarmMessageActionenumerations (#853) - Add
Alarm.Removeto delete an alarm (#853) - Add
AlarmManager.AlarmWithName,AlarmManager.AlarmsWithTypeandAlarmManager.AddTransferWindowAlarm(#853) - Fix
NullReferenceExceptionraised every frame after creating or removing an alarm (#853)
- Breaking:
- Camera
- Add
Camera.FoVto get and set the camera field of view, and read-onlyCamera.MinFoV,Camera.MaxFoVandCamera.DefaultFoV(#804) - Add
Camera.NextCamera,Camera.PreviousCameraandCamera.FocussedCrewMemberto cycle and select IVA cameras (#804) - Fix
CameraDistance,Pitch,HeadingandFoVsetters being lost when set during a camera mode switch (#318)
- Add
- Client disconnect cleanup
- Remove forces added by
Part.AddForcewhen the client that added them disconnects (#934) - Cancel in-progress resource transfers when the client that started them disconnects; a canceled transfer is marked as complete (#934)
- Fix part highlighting leaking a client-disconnect event handler each time the flight scene is loaded (#934)
- Remove forces added by
- Localization
- Fix
DockingPort.Undockdoing nothing when the game is not running in English (#993) - Fix
Fairing.Jettisondoing nothing, andFairing.Jettisonedalways reporting true, when the game is not running in English (#993) - Fix
CargoBay.Openneither opening nor closing the bay when the game is not running in English (#993) - Fix
ResourceConverter.Stateonly ever reportingRunningwhen the game is not running in English, leavingMissingResource,StorageFullandCapacityunreachable (#993) - Fix
DockingPort.StatereportingShieldedinstead ofMovingwhile a shield is opening or closing, when the game is not running in English (#993) - Fix part module field values being formatted using the machine's locale, so that
Module.Fields,Module.GetFieldandPartField.Valuereturned numbers that clients running under a locale that writes decimals with a comma could not parse (#993)
- Fix
UI service
- Fix locale issues with
UI.Message(#993)
C# client
- Breaking: Requires .NET Framework 4.7.2 or later (#948)
- Update to protobuf v3.35.1 (#850)
- Mark deprecated members with the
[Obsolete]attribute (#904) - Disposing a connection now stops and joins the stream update thread (#1005)
- An error from a service whose exception types were never registered now raises an
RPCExceptiondescribing it (#1005) - An exception thrown by a stream or event callback no longer escapes the stream update thread (#1005)
- Fix a deadlock between the stream update thread and a thread waiting for an update (#1005)
C++ client
- Update to protobuf v35.1 (#850)
- Update to ASIO 1.38.0 (#850)
- Distribute via vcpkg (#874)
- Breaking: Drop autotools build; CMake is now the only supported build system (#851)
- Breaking: Modernise CMake build: require CMake 3.15+, C++17, target-based usage requirements (#834)
- Add CMake package config so consumers can use
find_package(krpc CONFIG REQUIRED)(#851) - CMake dependency options (
KRPC_FETCH_DEPS,KRPC_FETCH_PROTOBUF,KRPC_FETCH_ASIO,KRPC_FETCH_ABSL): when OFF (default) the system install is required; when ONFetchContentis used. (#857) - Mark deprecated members with the
[[deprecated]]attribute (#904) - An error from a service whose generated header is not included now throws an
RPCErrordescribing it (#1007) - An exception thrown by a stream or event callback no longer escapes the stream update thread (#1007)
- Fix a data race on the exception thrower map between constructing a service and handling an error (#1007)
- Fix stream update notifications being lost, which could leave
Client::wait_for_stream_updatesleeping through the update it was waiting for (#974) - Fix
Client::freeze_streamsblocking forever when no stream is producing updates (#974)
C-nano client
- Distribute via vcpkg (#874)
- Breaking: Drop autotools build; CMake is now the only supported build system (#870)
- Breaking: Modernize CMake build: require CMake 3.15+, target-based usage requirements (#834)
- Breaking: nanopb is now an external dependency (fetched via
FetchContentor found on the system) rather than being bundled in the release archive; the Arduino package still bundles nanopb (#870) - Breaking: Pre-generated protocol buffer code and
krpc.protoare bundled in the release archive; setKRPC_REGENERATE_PROTO=ONto regenerate the code fromkrpc.protousing the nanopb generator (#872) - Add CMake package config so consumers can use
find_package(krpc_cnano CONFIG REQUIRED)(#870) - CMake dependency options (
KRPC_FETCH_DEPS,KRPC_FETCH_PROTOBUF,KRPC_FETCH_NANOPB): when OFF (default) the system install is required; when ONFetchContentis used. (#870) - Add support for serial port communication on Windows (#872)
- Mark deprecated functions with the
KRPC_DEPRECATEDattribute macro (#904) - Generated functions are now defined as static inline, so the generated service headers can be safely included from multiple translation units (#948)
- Breaking: On Arduino, a read now fails with
KRPC_ERROR_EOFwhen the serial timeout elapses instead of retrying forever (#1002) - Add
KRPC_ERROR_MESSAGESoption, which captures the message describing an error returned by the server so that it can be read usingkrpc_get_error_message. (#1002) - Fix corruption of received data on POSIX systems when a serial read returns fewer bytes than were asked for (#1002)
Java client
- Update to protobuf v4.35.1, guava 33.4.8-jre, antlr4-runtime 4.13.2 (#850)
- Mark deprecated members with the
@Deprecatedannotation and an@deprecatedjavadoc tag (#904) - Reduce copying when encoding values (#979)
- Fix
Stream.getRatealways returning zero, whatever the rate had been set to (#1004) - Fix looking up the method to stream or call (#1004)
- An exception thrown by a stream or event callback no longer ends the stream update thread (#1004)
- Fix a deadlock between the stream update thread and a thread waiting for an update (#1004)
- An error from a service with no generated stubs loaded now raises an
RPCExceptiondescribing it (#1004)
Lua client
- Fix
attributesmodule to always return boolean foris_a_class_memberandis_a_class_property_accessor(#850) - Fix service, method and property names being converted to snake case using the machine's locale (#993)
- Calling a procedure with an argument that needs coercing no longer leaves a global named
okbehind (#1003) - Remove
encoder.client_name; a leftover from before the protocol used protocol buffers (#1003)
Python client
- Breaking: Requires Python 3.10+ (#837)
- Update to protobuf v7.35.1 (#850)
- Allow calling static class methods from a class instance (#832)
- Emit a
DeprecationWarningwhen calling a deprecated member, and note deprecation in docstrings (#904) - Fix static class method calls being sent to the wrong connection when multiple clients are connected (#979)
- An exception raised by a stream or event callback no longer ends the stream update thread (#1008)
- Fix a deadlock between the stream update thread and a thread waiting for an update (#1008)
- An error from a service this client does not know about now raises an
RPCErrordescribing it (#1008) - Fix decoding of
sint64values at or above2**62(#1008) - A closed connection is now reported instead of being mistaken for no data having arrived (#1008)
- Removing a stream, or closing the client, now wakes threads waiting for an update on it, which previously waited for an update that could never arrive (#1008)
- The client can now be closed from a stream or event callback, which raised
RuntimeErrorand left the client half closed (#1008) - Fix a stream returning
Nonerather than its value, or the error saying it has none, when read as its first update was being stored (#1008)
krpctools
- Breaking: Requires Python 3.10+
- Breaking:
krpc-servicedefsnow runs theServiceDefinitionstool on the .NET 8 runtime; Mono is no longer required - Surface deprecated members in generated documentation and client stubs (#904)
- Fix generated Java clients failing to compile when a service has enough procedures to push the generated type tables past the JVM's method size limit
- Generated C-nano functions are now defined as static inline, so the generated service headers can be safely included from multiple translation units
- Fix C-nano client generation emitting zero-sized argument arrays for procedures with no parameters
- Fix C-nano documentation rendering an entire service's API as an indented block quote
- Fix
docgendropping remarks in service-level documentation - Fix cross-service member references not resolving in generated C# and Lua documentation (#897)
- Fix member references in generated Python documentation using lowerCamelCase instead of snake_case
- Fix generating client stubs and documentation from a KSP install failing when the machine's locale is not UTF-8 and a service's documentation contains non-ASCII characters