kOS: Scriptable Autopilot System CKAN

License: GPLv3

Game Version: 1.3.1

Downloads: 10,274

Followers: 226

Information Changelog Stats


kOS is a scriptable autopilot Mod for Kerbal Space Program. It allows you write small programs that automate specific tasks.

Documentation : http://ksp-kos.github.io/KOS_DOC/

Addon release thread: http://forum.kerbalspaceprogram.com/index.php?/topic/61827-/

Addon development thread: http://forum.kerbalspaceprogram.com/index.php?/topic/61834-/

Version v1.1.3.2 for Kerbal Space Program 1.3.1

Released on 2017-10-16

for KSP v1.3.1 Downloads this release This version is functionally identical to v1.1.3.0, however the binaries are compiled against KSP 1.3.1 to allow it to properly load with the updated version of KSP


  • This build will not work on previous versions of KSP.






Version v1.1.3.1 for Kerbal Space Program 1.2.2

Released on 2017-09-19

ONLY USE THIS RELEASE FOR PEOPLE STUCK ON KSP 1.2.2. If you are on KSP 1.3, then use v1.1.3.0 instead. This is a port of v1.1.3.0 backward to KSP 1.2.2.


Version v1.1.3.0 for Kerbal Space Program 1.3.0

Released on 2017-09-19

v1.1.3.0 (for KSP 1.3) Bug Swatting Release

For this release we instituted a rule partway through that only bug fixes should be allowed (some of the first few changes were enhancements rather than bug fixes, but after that, its all bug fixes). This was in a vain hope that doing so would get a release out faster than normal.


(Can't think of any.)


  • Terminal input using any Unicode character, not just ASCII. (Technically not a new feature, but a bug fix to a feature from the previous version, but since the bug made the feature never work at all in the past, it feels like a new feature). pull request
  • New StartTracking suffix for "unknown objects" (asteroids). pull request


  • A large refactor of how the various flight control methods track which vessel they control. This appears to have fixed a lot of bugs where kOS lost the ability to control the ship unless you reloaded the scene. (After a docking, undocking, staging, vessel switch, or scene switch, this would sometimes happen, but not consistently enough to be easy to debug). pull request pull request
  • Program aborts caused by external events such as poweroff, shutdown, or control-C no longer leave garbage behind in memory still hooked into parts of kOS. pull request
  • Documentation now more explicitly mentions how SAS and lock steering fight with each other. pull request
  • Documentation for GUIskin:add() was wrong. Fixed. pull request
  • The waypoint() constructor used to fail on waypoints which were not part of a cluster yet were named as if they were part of a cluster anyway ("my waypoint Alpha", "my waypoint Beta", "my waypoint Gamma", etc). This doesn't happen in stock, but does happen with several mods that use ContractConfigurator. kOS will now deal with such waypoints. pull request
  • Documentation that claimed obsoleted TERMVELOCITY still exists has been removed or edited. pull request
  • Trying to examine the NoDelegate object no longer causes nullref error. pull request
  • Equality operator ( == ) when comparing a Path to a Path now fires off correctly. pull request
  • GUI's ONRADIOCHANGE callback hook now no longer depends on the existence of an ONTOGGLE hook to fire off. pull request
  • Compiler no longer creates incorrect opcodes for indexed collections used as arguments to a function call that's on the lefthand side of an assignment statement. pull request
  • Font resizing in scripts no longer causes the terminal to mangle its size and width/height character count pull request
  • Signal delay progress bar (when using Remote Tech) will now resize properly when you have a nonstandard sized terminal window. pull request
  • Compile command now works properly when run from the interpreter. pull request
  • Vessel:isDead working properly now pull request
  • Stretching the terminal to a large size no longer causes the rounded corner to obscure text in the window. pull request
  • Full unicode keyboard and file save support was getting mangled by wiping out the high byte leaving only the 8-bit ASCII part left. Fixed. pull request
  • Toolbar Panel setting changes no longer require there to exist a kOS part loaded into the scene. pull request


Version v1.1.2 for Kerbal Space Program 1.3.0

Released on 2017-06-21

CKAN info inside the ZIP was wrong for v1.1.1 (it had a max version number smaller than current version number, so CKAN refused to pick it up). This corrects that problem.


Version v1.1.1 for Kerbal Space Program 1.3.0

Released on 2017-06-20

Now ready for official full release for KSP 1.3.


Version v1.1.0 for Kerbal Space Program 1.2.2

Released on 2017-06-13


  • Because of changes to make the terminal use a real font from your OS, we had to obsolete TERMINAL:CHARWIDTH. You can only choose TERMINAL:CHARHEIGHT. Each font has its own hardcoded notion of how wide a letter will be at a given height, which you can't override.
  • CONFIG:BRIGHTNESS was moved back to the global config section, and is no longer set on the "difficulty" options screen, because it's not supposed to be a per-saved-game setting, but a user-interface preference that spans all saved games.
  • ATM:SEALEVELPRESSURE now gives the answer in different units than it used to. (It was in KiloPascals even though the documentation claimed it was in atmospheres. Now it's in atmospheres to agree with the documentation.)


  • GUI-making toolkit. You are now able to make a GUI window that your kerboscript code can control, including buttons, sliders, toggles, checkboxes, etc. It uses the KSP game's default skin (kind of big letters) but the skin can be customized by the script a bit to change things. pull request pull request documentation: search for "GUI" (http://ksp-kos.github.io/KOS_DOC/structures/gui.html).
  • Background compilation. Now the game continues its simulation normally and physical events keep happening, while kOS is taking a few seconds to compile a script. (Gets rid of that familiar frozen game effect when you first issue a RUN command.) pull request
  • Terminal Font. Now the kOS in-game terminal window uses a real font from your OS itself to render the text terminal. (This allows the display of any Unicode character the font can render, and it allows nicer looking font size changes.) Previously kOS painted images for letters from a hardcoded texture image file. pull request 1 pull request 2
  • Allow any unicode. The kerboscript parser now allows identifiers and literal strings to contain letters outside the limited ASCII-only range it used to accept. The in-game terminal now allows you to type any letter your keyboard can type. (But it does not implement the ALT-numpad technique of entering characters. You have to have a keyboard that types the character directly. However, the ALT-numpad technique will work through the telnet terminal, if your telnet client's window can do it.) pull request
  • Regular expression part searches for part/tag names. pull request, documenation: search for "PARTSTAGGEDPATTERN" (http://ksp-kos.github.io/ KOS_DOC/structures/vessels/vessel.html#method:VESSEL:PARTSTAGGEDPATTERN).
  • Choose the IP address of the telnet server, from the ones your computer has available, instead of kOS picking one arbitrarily. pull request
  • Allow local variables in triggers In order to support the kOS callback system used by the GUI, we also finally had to add support for proper local variable scoping to triggers like WHEN and ON. A trigger's condition
  • Pressure at a given altitude is now something you can query from an atmosphere. pull request, documentation: search for "ALTITUDEPRESSURE" (http://ksp-kos.github.io/K OS_DOC/structures/celestial_bodies/atmosphere.html#method:ATMOSPHERE:ALTITUDEPRESSURE).
  • Get a LATLNG for some other body than the current one. pull request, documentation: search for "GEOPOSITIONLATLNG" (http://ksp-kos.github.io/ KOS_DOC/structures/celestial_bodies/body.html#method:BODY:GEOPOSITIONLATLNG).


  • Fix kOS toolbar button sometimes failing to appear in Blizzy Toolbar Mod. pull request
  • Fix SKID Chip emulator's sync lag when physics is slow. pull request
  • Fix SKID Chip emulator unable to use voices 6 through 9 because of how they were initialized. pull request
  • Forgot to document GETMODULEBYINDEX. pull request
  • Fix inability of a script to SET TARGET when KSP game is not the focused window. pull request
  • Fix iterator that lets you walk the characters in a string with "for" loop. pull request
  • Removed some Unity hooks that despite being empty and doing nothing, nonetheless still ate up a bit of time to pointlessly call and return from. pull request
  • Fix use of the min()/max() function on string comparisons pull request
  • Fix science data transmissions pull request
  • Fix unnessary duplicated of clones of vessel objects (was causing large garbage collection hangs). pull request
  • Fixed several small documentation errors: pull request pull request pull request
  • Fixed float->boolean mapping error. The values no longer round to integer before becoming boolean. (i.e. 0.01 should be True, not get rounded to False (0) like it used to.) pull request
  • Fixed ATM:SEALEVELPRESSURE units to agree with the documentation. pull request
  • Fixed bug that had made the sounds fail to emit for beep and keyclick. pull request
  • Fixed vessel:TOSTRING to return "Vessel(blarg)" instead of "Ship(blarg"). pull request
  • Fixed null-ref errors when using NEXTPATCH when there is no next patch. pull request
  • Fixed a few bugs related to kOS cleaning up after itself when the vessel splits into two or two vessels join together, or a vessel blows up. pull request


Version v1.0.3 for Kerbal Space Program 1.2.2

Released on 2016-12-08

v1.0.3 (for KSP 1.2.2) Make a little noise! (Part Deux)

for KSP v1.2.2


This release is nearly identical to v1.0.2, except that it was compiled against binaries from KSP v1.2.2 (released just before we published) and the version numbers have been advanced. While it appears that kOS v1.0.2 is compatible with KSP v1.2.2, we wanted to err on the side of caution and provide an explicitly compatible release. Please review the changelog for v1.0.2 if you are upgrading from an earlier version.


Version v1.0.2 for Kerbal Space Program 1.2.1

Released on 2016-12-07

v1.0.2 Make A Little Noise!

for KSP v1.2.1 Downloads this release


  • As always, if you use the compiler feature to make KSM files, you should recompile the KSM files when using a new release of kOS or results will be unpredictable.
  • Most in game settings are now integrated with KSP's difficulty settings window. You will be prompted to migrate existing settings when you load your save game. Telnet settings are still stored in the old config file, but everything else is now stored within the save file. pull request | documentation
  • Calls to resource suffixes on the stage bound variable are no longer rounded to 2 decimal places. Previously they were rounded to assist in detecting "zero" fuel, but they cause inequality issues when comparing to the newer stage:resources list or stage:resourceslex values.
  • The behavior of the resource suffixes on the stage bound variable has changed with regard to asparagus staging. If you have smaller tanks that can be staged, stage:liquidfuel will return 0 even if you still have an engine firing. This is a break from previous versions of kOS, but is aligned with the current UI design. Previous versions also aligned with the KSP UI, but the UI mechanic was updated with KSP 1.2.x


  • Official release for KSP version 1.2.1!
  • kOS now has a procedural sound system! You can use it to play customized error tones or make your own musical notes. pull request | documentation
  • Support for CommNet and modifications to make RemoteTech and CommNet use similar systems. pull request | documentation
  • Trajectories integration enabled via new ADDONS:TR pull request | documentation
  • Added new setting for default terminal brightnes, and updated default value to 70% pull request | documentation
  • Added VELOCITY and ALTITUDEVELOCITY suffixes to `geocoordinates pull request | documentation
  • Added TONUMBER and TOSCALAR suffixes to string values for parsing numerical values pull request | documentation
  • New steeringmanager suffix ROLLCONTROLANGLERANGE to dictate the maximum value of ANGLEERROR for which the manager will attempt to control roll commit | documentation
  • KSM files are now gzip compressed internally, dramatically reducing the file size. Existing KSM files should still load, but see above for the recommendation to recompile all KSM files. pull request


  • Fix for throwing errors when another mod uses dynamic assembly pull request
  • Update Blizzy toolbar wrapper to the most recent version pull request
  • Fix for local kOS hard disks breaking when loading with 4 byte long files pull request
  • kOS no longer uses a write-only lock when writing to the archive, preventing an error when accessing a file opened for reading by another program pull request
  • Fix for duplicate functions/locks breaking ksm files pull request
  • Fix for null ref error when editing node suffixes on KSP 1.2.1 pull request
  • Fix for issue where a body with the same name as one of our bound variables would block access to said variable (specifically Eta in Galileo's Planet Pack blocked the eta bound variable) pull request
  • Fix for getting the science value and transmit value in sandbox mode pull request
  • Fix error where unlock all inside a trigger will try to unlock functions too pull request


Version v1.0.1 for Kerbal Space Program 1.1.3

Released on 2016-10-11

v1.0.1 (for KSP 1.1.3) Let's take some input!

Why 1.1.3 and not 1.2?

We wanted to get the last bug fixes and new features into the hands of any users who might not update KSP to 1.2 right away. Traditionally there are some mods that take a while to update when KSP releases a new version, and many users choose to wait for all of their favorite mods to update before upgrading KSP. By releasing in conjunction with the update, we can ensure that as many users as possible have access to these latest updates. We will be releasing a version of kOS that is compatible with KSP 1.2 as soon as possible after the final build is released to the public.


  • As always, if you use the compiler feature to make KSM files, you should recompile the KSM files when using a new release of kOS or results will be unpredictable.
  • The stage command/function now implements the yield behavior, waiting until the next physics tick to return. This ensures that all vessel stats are updated together. (https://github.com/KSP-KOS/KOS/pull/1807)


  • Functions and opcodes can now tell the CPU to yield (wait) based on their own arbitrary logic. This allows future functions to be "blocking" (preventing further execution) without blocking KSP itself. (https://github.com/KSP-KOS/KOS/issues/1805, https://github.com/KSP-KOS/KOS/pull/1807, and https://github.com/KSP-KOS/KOS/pull/1820)
  • New timewarp structure, available on the kuniverse bound variable. This structure provides additional information and control over time warp. The old warp bound variables remain in place. (https://github.com/KSP-KOS/KOS/issues/1790 and https://github.com/KSP-KOS/KOS/pull/1820)
  • Introducing a new terminalinput structure for keyboard interaction from within scripts! Currently support is only provided for getting single characters. (https://github.com/KSP-KOS/KOS/pull/1830)

Please check http://ksp-kos.github.io/KOS_DOC/changes.html for more detailed explanations for the new features.


  • Fix for formatting of time:clock to pad zeros (https://github.com/KSP-KOS/KOS/issues/1771 and https://github.com/KSP-KOS/KOS/pull/1772)
  • Fix for not being able to construct a vessel("foo") if "foo" is the name of the current vessel (https://github.com/KSP-KOS/KOS/issues/1565 and https://github.com/KSP-KOS/KOS/pull/1802)
  • RemoteTech steering should be fixed. At worst you may see a 1sec gap with the controls, as we now refresh the steering callback about once per second. (https://github.com/KSP-KOS/KOS/issues/1806 and https://github.com/KSP-KOS/KOS/pull/1809)
  • Named functions defined within anonymous functions will no longer throw an error (https://github.com/KSP-KOS/KOS/issues/1801 and https://github.com/KSP-KOS/KOS/pull/1811)
  • lock steering no longer throws an exception inside of an anonymous functions (https://github.com/KSP-KOS/KOS/issues/1784 and https://github.com/KSP-KOS/KOS/pull/1811)
  • Compiled programs that include a large number of named functions should no longer throw an error (https://github.com/KSP-KOS/KOS/issues/1796 and https://github.com/KSP-KOS/KOS/pull/1812)
  • Fixed the first call to wait after the cpu boots (https://github.com/KSP-KOS/KOS/issues/1785)
  • Various documentation fixes (https://github.com/KSP-KOS/KOS/pull/1810, https://github.com/KSP-KOS/KOS/pull/1823, and https://github.com/KSP-KOS/KOS/pull/1834)


Version 1.0.0 for Kerbal Space Program 1.1.3

Released on 2016-08-15

Hey let's stop calling it Beta

@Dunbaratu Dunbaratu released this 3 hours ago About the name:

kOS has been around long enough that we figured it was long overdue for us to stop calling it 0.something. Lots of people are using it, and we're worried about backward compatibility enough that we're not really treating it like a Beta anymore. This version contains mostly a few things that we knew might break backward compatibility so we'd been putting them off for a long time. A jump to 1.0 seems a good time to add those changes.

Of course, it has lots of other changes for whatever else was being worked on since the last release. BREAKING CHANGES

As always, if you use the compiler feature to make KSM files, you should recompile the KSM files when using a new release of kOS or results will be unpredictable.
New Subdirectories ability has deprecated several filename commands such as delete, copy, and rename. They will still work, but will complain with a message every time you use them, as we may be removing them eventually. The new commands deletepath, copypath, and movepath described below are meant to replace them.
When using a RemoteTech antenna that requires directional aiming, in the past you could aim it at mission control with SETFIELD("target", "mission-control") and now you have to say SETFIELD("target", "Mission Control") instead, due to changes in RT's naming schemes.
Previously the Y and Z axes of SUN:VELOCITY:ORBIT were swapped. (#1764) This has been fixed so it is now the same as for any other body, however scripts might exist that had previously been swapping them back to compensate for this, and if there were they would now break since that swapping is no longer needed.


Subdirectories: (http://ksp-kos.github.io/KOS_DOC/commands/files.html) You are now able to store subdirectories ("folders") in your volumes, both in the archive and in local volumes. To accomodate the new feature new versions of the file manipulation commands had to be made (please go over the documentation in the link given above). In the Archive, which is really your Ships/Script/ directory on your computer, these subdirectories are stored as actual directories in your computer filesystem. (For example, the file 0:/dir1/dir2/file.ks would be stored at Kerbal Space Program/Shipts/Script/dir1/dir2.file.ks on your real computer.) In local volumes, they are stored in the persistence.sfs savegame file like usual. (Pull Request discussion record: #1567)
    Boot subdirectory: (http://ksp-kos.github.io/KOS_DOC/general/volumes.html#special-handling-of-files-in-the-boot-directory) To go with Subdirectories, now you make a subdirectory in your archive called boot/, and put all the candidate boot files there. When selecting a boot file in the VAB or SPH, the selections are taken from there and need not contain the "boot_" prefix to the filename anymore. Old boot files will be grandfathered in that are named the old way, however.
    CORE:BOOTFILENAME is now a full path. i.e. boot/myfile.ks.
    PATH structure now allows you to get information about the new full subdirectories system from your scripts. (http://ksp-kos.github.io/KOS_DOC/structures/volumes_and_files/path.html)
    New RUNPATH command now allows any arbitrary string expression to be used as the name of the file to be run. i.e. set basename to "prog". set num to 1. runpath(basename+num, arg1). // same as run prog1(arg1). As part of the support for this, programs with a large number of RUN commands (or RUNPATH commands) should now take up a bit less of a memory footprint than they used to in their compiled form (and thus in KSM files too). (http://ksp-kos.github.io/KOS_DOC/commands/files.html#runpath-and-runoncepath)
Communication between scripts on different CPUs of the same vessel or between different vessels. (http://ksp-kos.github.io/KOS_DOC/commands/communication.html)
    A new structure, the Message, contains some arbitrary piece of data you choose (a number, a string, a list collection, etc), and some header information kOS will add to it that describes where it came from, when it was sent, and so on. What you choose to do with these arbitrary chunks of data is up to you. kOS only lets you send them. You design your own protocol for what the data means.
    If RemoteTech is installed, a connection is needed to send a message to another vessel (but not to a CPU on the same vessel). And, the message won't actually show up in the other vessel's queue until the required lightspeed delay.
    To handle KSP's inability to have different vessels far away from each other both fully loaded and active, you do have to switch scenes back and forth between distant vessels if you want them to have a conversation back and forth. Messages that were meant to arrive on a vessel while it wasn't within active loading range will wait in the recever's vessel queue until you switch to it, so you don't have to hurry and switch "in time" to get the message.
Added anonymous functions : (http://ksp-kos.github.io/KOS_DOC/language/anonymous.html) By placing arbitrary braces containing the body of a function anywhere within the script that an expression is expected, the compiler builds the function code right there and then returns a delegate of it as the value of the expression.
New 3rd-party addon framework (https://github.com/KSP-KOS/KOS/tree/develop/src/kOS/AddOns/Addon%20Readme.md) allows authors of other KSP mods to add hooks into kOS so that kOS scripts can interface with their mods more directly, without kOS developers having to maintain that code themselves in the kOS repository. (Pull Request discussion record: #1667)
allow scripted vessel launches KUNIVERSE:GETCRAFT(), KUNIVERSE:LAUNCHCRAFT(), KUNIVERSE:CRAFTLIST(), and KUNIVERSE:LAUNCHCRAFTFROM() allow you to script the changing of scenes and loading of vessels into those scenes. While this breaks the 4th wall quite a bit (how would an autopilot choose to manufacture an instance of the plane?), it's meant to help with script testing and scripts that try to repeatedly run the same mission unattended. (http://ksp-kos.github.io/KOS_DOC/structures/misc/kuniverse.html)
eta to SOI change: Added SHIP:OBT:NEXTPATCHETA to get the time to the next orbit patch transition (SOI change). (http://ksp-kos.github.io/KOS_DOC/structures/orbits/orbit.html#attribute:ORBIT:NEXTPATCHETA)
get control-from: Added SHIP:CONTROLPART to return the Part of the vessel that is currently set as its "control from here" part. (http://ksp-kos.github.io/KOS_DOC/structures/vessels/vessel.html#attribute:VESSEL:CONTROLPART)
maneuver nodes as a list:( New ALLNODES bound variable that returns a list of all the currently planned manuever nodes (the nodes you could iterate through with NEXTNODE, but rendered into one list structure). (http://ksp-kos.github.io/KOS_DOC/bindings#allnodes)
Several new pseudo-action-groups (akin to "panels on", that aren't action groups as far as stock KSP is concerned, but kOS treats them like action groups) were added. (http://ksp-kos.github.io/KOS_DOC/commands/flight/systems#kos-pseudo-action-groups)
Ability to get/set the navball mode (surface, orbital, target) with the NAVMODE bound variable: i.e. SET NAVMODE TO "SURFACE"..
UniqueSet structure. (http://ksp-kos.github.io/KOS_DOC/structures/collections/uniqueset.html) A collection intended for when all you care about is whether a equivalent object exists or doesn't exist yet in the collection, and everything else (order, etc) doesn't matter.


In some cases (#1661) the program wouldn't stop immediately when you execute a kuniverse command that reloads a save or switches scenes. It would instead finish out the remainder of the IPU instructions in the current physics tick. After the fix, causing a scene change (or reload) automatically stops the program right there since anything it does after that would be moot as the game is about to remove everything it's talking about from memory.
If using "Start on archive", with Remote Tech, a misleading "power starved" error was thrown when you reboot a probe that's out of antenna range. (#1363)
unchar("a") was apparently broken for a few months and we hadn't noticed. The root cause was that its implementation had to be edited to comply with the change that enforced the VM to only use kOS Structure types on the stack. The need for that change had been missed. (#1692)
Previously Infernal Robotics allowed you to move servos that weren't even on your own vessel and you shouldn't have direct control over. This has been fixed. (#1540)
Refactored previous non-working technique for quicksave/quickload to turn it into something that works. (#1372)
There were cases where using CTRL-C to abort a program would cause some old cruft to still be leftover in the VM's stack. This made the system fail to clear out the names of functions that were no longer loaded in memory, making it act like they were still reachable and call-able. (#1610)
Some types of Resource didn't contain the :DENSITY suffix like the documentation claimed they would. (#1623)


Version v0.20.1 for Kerbal Space Program 1.1.2

Released on 2016-05-16

v0.20.1 KSP 1.1.2 and bug repair

The biggest reason for this release is to handle two game-breaking problems caused by recent alterations in the API that kOS hadn't adapted to correctly yet.

The "remit" of this release is purely to fix a few bugs, and patch up a few things where KSP 1.1 had changes we didn't catch. Mostly, that's cases where previously working code in kOS had now become a bug, but it also includes a few other bug fixes not related to KSP 1.1.

But any new features (rather than bug fixes) in the pipeline not directly related to that "remit" are not in this release.




  • Infinitely growing mass: Realism Overhaul users could not use kOS anymore, because kOS was re-adding its small module mass to the part again and again each physics tick. Even though the mass of kOS is small, adding it to the part 25 times a second quickly made the vessel grow too massive to do anything with. The bug was not caught earlier because it only happened if kOS was added to parts other than the parts kOS ships with (i.e. by using ModuleManager), and those parts also had other mass-affecting modules on them. Although discovered in Realism Overhaul, the problem could have been affecting any users who used kOS in that same fashion. The cause was traced to an incorrect use of the new mass API by kOS and has been fixed. (https://github.com/KSP-KOS/KOS/pull/1644).
  • "SET TARGET TO FOO." while the terminal is open was failing. Now it works. (The kOS terminal locks out all other inputs so your keypresses don't affect the ship, but as of KSP 1.1 the "all" input lock it was using to do so also includes the ability to set target, which it didn't before.) (https://github.com/KSP-KOS/KOS/pull/1636)
  • Incorrect value for MeanAnomalyAtEpoch fixed. It was multiplying the value by the conversion factor for radians-to-degrees twice, rather than just once. (https://github.com/KSP-KOS/KOS/pull/1642)
  • GeoCoordinates were not serializing properly. Now they are. (https://github.com/KSP-KOS/KOS/pull/1615).
  • Finally fully obsoleted the years-old suffixes for trying to do antenna range the old way (before we just relied on Remote Tech to do antenna work for us). (https://github.com/KSP-KOS/KOS/pull/1607).
  • Bug fixes for catching a few more cases where staging or decoupling part of the craft away was still confusing SteeringManager into trying to lock out, or take control of, the wrong half of the craft. (https://github.com/KSP-KOS/KOS/pull/1544).


  • KSP 1.1 now allows you to lock the gimbals for the three pitch/yaw/roll axes individually on engines, as 3 different settings, rather than just lock the whole gimbal for all directions. kOS now lets you access this ability (https://github.com/KSP-KOS/KOS/pull/1622).


Version v0.20.0 for Kerbal Space Program 1.1

Released on 2016-04-20

v0.20.0 KSP 1.1 Hype!

for KSP v1.1.0 Downloads this release

This release is functionally identical to v0.19.3, it is recompiled against the KSP 1.1 release binaries (build 1230)


  • [KSP1.1] Removing a node leaves an artifact (https://github.com/KSP-KOS/KOS/issues/1572 https://github.com/KSP-KOS/KOS/issues/1576)
  • [KSP1.1] Toolbar button doesn't display (https://github.com/KSP-KOS/KOS/issues/1573 https://github.com/KSP-KOS/KOS/issues/1569)


Version v0.19.3 for Kerbal Space Program 1.0.5

Released on 2016-04-05

for KSP v1.0.5 Downloads this release

v0.19.3 Last (intended) 1.0.5 update.

(This is the last planned update to work with KSP 1.0.5 unless it breaks something big that requires an emergency patch.)


  • Triggers may now go beyond the limits of the IPU (https://github.com/KSP-KOS/KOS/pull/1542) but are no longer guaranteed to execute within a single update frame. See http://ksp-kos.github.io/KOS_DOC/general/cpu_hardware.html#triggers and http://ksp-kos.github.io/KOS_DOC/general/cpu_hardware.html#cpu-update-loop for more details.


  • Profiling output via ProfileResult() (https://github.com/KSP-KOS/KOS/pull/1534)


  • Removed delay when enabling/disabling auto changeover for multi mode engines (https://github.com/KSP-KOS/KOS/pull/1451)
  • Improve performance of various math functions (https://github.com/KSP-KOS/KOS/issues/1553 https://github.com/KSP-KOS/KOS/pull/1523 https://github.com/KSP-KOS/KOS/pull/1563)
  • on logic now evaluates expressions and suffixes, instead of requiring a raw variable (https://github.com/KSP-KOS/KOS/issues/1376 https://github.com/KSP-KOS/KOS/pull/1542)
  • Documentation no longer inserts a space around highlighted search terms (https://github.com/KSP-KOS/KOS/pull/1548)
  • You can now use lock objects with the same identifier from within compiled scripts, like lock throttle... (https://github.com/KSP-KOS/KOS/issues/691 https://github.com/KSP-KOS/KOS/issues/1253 https://github.com/KSP-KOS/KOS/issues/1557 https://github.com/KSP-KOS/KOS/pull/1561)
  • The script parsing logic has been updated to improve compile times by roughly 50% (https://github.com/KSP-KOS/KOS/pull/1566)


Version v0.19.2 for Kerbal Space Program 1.0.5

Released on 2016-03-08

This release is here primarily to fix a problem that made the new v0.19.1 terminal unusable for users who have to use low resolution texture settings in the Unity graphics configuration panel.


  • Nothing new breaking in this version is known about.


  • New alias KUNIVERSE:FORCEACTIVE() can be used instead of the longer name KUNIVERSE:FORCESETACTIVEVESSEL().
  • More robust use of the font_sml.png file allows for replacement of font_sml.png by the end-user. (However this may only be useful for a limited time, as Unity5 might make us implement the font differently anyway.)


  • New terminal now works again at low texture resolution settings (https://github.com/KSP-KOS/KOS/issues/1513).
  • New terminal shows grey color on power-off again (https://github.com/KSP-KOS/KOS/issues/1525).
  • Terminal now shows a boot message that mentions the documentation URL (https://github.com/KSP-KOS/KOS/issues/1527).
  • Fixed a situation that could make KSP itself crash if a script attempted to perform an equality comparison on types that hadn't had a meaningful implementation of equality defined. (Instead of a proper error message about it from kOS, kOS got stuck in recursion.)


Version v0.19.1 for Kerbal Space Program 1.0.5

Released on 2016-03-06

This release is a patch to v0.19.0, fixing some things found by the user community in the two days shortly after v0.19.0 released.

It also happens to contain a few terminal window features that were being worked on before v0.19.0 but were not deemed ready yet when 0.19.0 was released.


  • PIDLoop tutorial section in the docs edited to mention new PIDLoop() function that did not exist back when that page was first written. (http://ksp-kos.github.io/KOS_DOC/tutorials/pidloops.html)
  • New Terminal GUI doodads and widgets: A brightness slider, and the ability to zoom the character width and height. Also made the transparency and dimming of the 'non-active' terminals a bit less severe so you can still read them when un-focused. Also, these new features can be script controlled by new suffixes, however it is unclear if that feature (doing it from a script) will remain in the future so use it with care: (http://ksp-kos.github.io/KOS_DOC/structures/misc/terminal.html)


  • Fixed file rename bug on local hard disks: (https://github.com/KSP-KOS/KOS/issues/1498)
  • Fixed boot files can be larger than the local disk (https://github.com/KSP-KOS/KOS/issues/1094)
  • Fixed a bug where Infernal Robotics would break when switching vessels or reverting. (https://github.com/KSP-KOS/KOS/issues/1501)
  • Fixes problems with using PartModule's SetField(), and infernal Robotics which had been failing for all cases where the field was a "float". (https://github.com/KSP-KOS/KOS/issues/1503). There may have been other places this bug affected, but this is where it was noticed. Hypothetically, anywhere the stock game's library insists on only accepting a single-precision float and not a double would have had the problem.
  • Improve steering when small control magnitudes are required. (https://github.com/KSP-KOS/KOS/issues/1512)


Version 0.19.0 for Kerbal Space Program 1.0.5

Released on 2016-03-02


  • As usual, you must recompile any KSM files when using the new version.
  • Vecdraw :SCALE no longer applied to :START. Only applied to :VEC.
  • Varying power consumption might make it so if you have high IPU settings some designs might run out of power when they didn't before. (in most cases it should draw less power for most people).
  • !!!! Default extension of ".ks" is no longer applied to all new filenames created. But it still will be looked for when reading existing files if you leave the extension off !!!!
  • FileInfo information now moved to Volume (http://ksp-kos.github.io/KOS_DOC/structures/volumes_and_files/volume.html).
  • VOLUME:FILES was returning a LIST(), now it returns a LEXICON who's keys are the filename.
  • String sort-order comparisons with "<" and ">" operators were implemented wrongly and just compared lengths. Now they do a character-by-character comparison (case-insensitively). On the off chance that anyone was actually trying to use the previous weird length-comparison behavior, that would break.


  • Art asset rework. The meshes and textures of the kOS CPU parts have recieved an update, and a new KAL9000 high-end computer part was included.
  • Varying power consumption. Units of electric charge used now varies depending on CPU speed and how much the CPU is being actually used. If your IPU setting is low, or if your program isn't doing very much and is just stuck on a wait statement, it won't use as much power. (http://ksp-kos.github.io/KOS_DOC/general/cpu_hardware#electricdrain)
  • Ability to read and write whole files at a time as one big string. (http://ksp-kos.github.io/KOS_DOC/structures/volumes_and_files/volumefile.html)
  • User Functions can now be referred to with function pointers, or "delegates". (http://ksp-kos.github.io/KOS_DOC/language/delegates.html)
  • Automatic serialization system to save/load some kinds of data values to JSON-format files (http://ksp-kos.github.io/KOS_DOC/commands/files.html#writejson-object-filename)
  • User Programs and Functions now allow trailing optional parameters with defaulted values. (http://ksp-kos.github.io/KOS_DOC/language/user_functions.html#optional-parameters-parameter-defaults).
  • There are now some suffixes that work on all value types, even primitive scalars. To accomplish this, a new "encapsulation" system has wrapped all kOS structures and primitive types inside a generic base type. (http://ksp-kos.github.io/KOS_DOC/structures/reflection.html)
  • ENGINE type now supports multi-mode cases and has its gimbal accessible through :GIMBAL suffix (http://ksp-kos.github.io/KOS_DOC/structures/vessels/engine.html)
  • Added GIMBAL:LIMIT suffix. (http://ksp-kos.github.io/KOS_DOC/structures/vessels/gimbal.html)
  • Better support for DMagic's Orbital Science mod (http://ksp-kos.github.io/KOS_DOC/addons/OrbitalScience.html)
  • Char() and Unchar() functions for translating unicode numbers to characters and visa versa (http://ksp-kos.github.io/KOS_DOC/math/basic.html#function:CHAR)
  • New Range type for iterating over hardcoded lists (http://ksp-kos.github.io/KOS_DOC/structures/collections/range.html).
  • Ability to iterate over the characters in a string using a FOR loop, as if the string was a LIST() of chars.
  • New higher level cpu part. (https://github.com/KSP-KOS/KOS/pull/1380)
  • HASTARGET and HASNODE functions (http://ksp-kos.github.io/KOS_DOC/bindings.html?highlight=hastarget)
  • :JOIN suffix for LIST to make a string of the elements (http://ksp-kos.github.io/KOS_DOC/structures/collections/list.html#method:LIST:JOIN)
  • KUNIVERSE now lets you read hours per day setting (http://ksp-kos.github.io/KOS_DOC/structures/misc/kuniverse.html#attribute:KUNIVERSE:HOURSPERDAY)
  • The reserved word ARCHIVE is now a first-class citizen with proper binding, so you can do SET FOO TO ARCHIVE and it will work like you'd expect.
  • New Lexicon creation syntax to make a Lexicon and populate it all in one statement. (http://ksp-kos.github.io/KOS_DOC/structures/collections/lexicon.html?highlight=lexicon#constructing-a-lexicon)


  • Numerous additional checks to prevent control of other vessels the kOS CPU isn't attached to.
  • The error beep and keyboard click sounds now obey game's UI volume settings. (https://github.com/KSP-KOS/KOS/pull/1287)
  • Fixed two bugs with obtaining waypoints by name. (https://github.com/KSP-KOS/KOS/issues/1313) (https://github.com/KSP-KOS/KOS/pull/1319)
  • Removed unnecessary rounding of THRUSTLIMIT to nearest 0.5%, now it can be more precise. (https://github.com/KSP-KOS/KOS/pull/1329)
  • Removed the ability to activate both modes on multi-mode engine simultaneously.
  • LIST ENGINES now lists all engines and displays part names instead of module names. (https://github.com/KSP-KOS/issues/1251)
  • Fixed bug that caused hitting ESC to crash the telnet server. (https://github.com/KSP-KOS/KOS/issues/1328)
  • Some exceptions didn't cause beep, now they all do. (https://github.com/KSP-KOS/KOS/issues/1317)
  • Vecdraw :SCALE no longer applied to :START. Only applied to :VEC. (https://github.com/KSP-KOS/KOS/issues/1200)
  • Fixed bug that made up-arrow work incorrectly when the cursor is at the bottom of the terminal window. (https://github.com/KSP-KOS/KOS/issues/1289)
  • A multitude of small documentation fixes (https://github.com/KSP-KOS/KOS/pull/1341)
  • Fixed a bug when performing an undock (https://github.com/KSP-KOS/KOS/issues/1321)
  • IR:AVAILABLE was reporting incorrectly ()
  • Boot files now wait until the ship is fully unpacked and ready (https://github.com/KSP-KOS/KOS/issues/1280)
  • The Vessel :HASBODY (aliases :HASOBT and :HASORBIT) suffix was in the documentation, but had been lost in a refactor last year. It is put back now.
  • String sort-order comparisons with "<" and ">" operators were implemented wrongly and just compared lengths. Now they do a character-by-character comparison (case-insensitively)
  • Small documentation edits and clarifications all over the place.

KNOWN issues

  • Using lock variables in compiled scripts with a duplicate identifier (like "throttle") throws an error (https://github.com/KSP-KOS/KOS/issues/1347 and https://github.com/KSP-KOS/KOS/issues/1253).
  • Occasionally staging with a probe core or root part in the ejected stage will break cooked steering (https://github.com/KSP-KOS/KOS/issues/1492).
  • The limitations of RemoteTech integration can be bypassed by storing a volume in a variable before the ship looses a connection to the KSC (https://github.com/KSP-KOS/KOS/issues/1464).


(These are generated from records on Github of anyone who's Pull Requests are part of this release.) (Names are simply listed here alphabetically, not by code contribution size. Anyone who even had so much as one line of change is mentioned.)

Stephan Andreev (ZiwKerman) https://github.com/ZiwKerman Bert Cotton (BertCotton) https://github.com/BertCotton Kevin Gisi (gisikw) https://github.com/gisikw Peter Goddard (pgodd) https://github.com/pgodd Steven Mading (Dunbaratu) https://github.com/Dunbaratu Eric A. Meyer (meyerweb) https://github.com/meyerweb Tomek Piotrowski (tomekpiotrowski) https://github.com/tomekpiotrowski Brad White (hvacengi) https://github.com/hvacengi Chris Woerz (erendrake) https://github.com/erendrake (repository owner) (name not public in github profile) (alchemist_ch) https://github.com/AlchemistCH (name not public in github profile) (tdw89) https://github.com/TDW89


Version 0.18.2 for Kerbal Space Program 1.0.5

Released on 2016-02-17

[Insert witty title here :-P]


  • As usual, you MUST recompile all KSM files before running them on the new version. Some of the changes have altered how the VM works.
  • Nothing else... we hope.


  • Compatibility with KSP version 1.0.5
  • run once ... syntax to run a script only once per session ( http://ksp-kos.github.io/KOS_DOC/commands/files.html#run-once-program )
  • Volumes and processors have better integration ( http://ksp-kos.github.io/structures/vessels/volume.html#structure:VOLUME )
  • Volume titles default to the name tag of the Processor part (only on launch) ( http://ksp-kos.github.io/KOS_DOC/general/volumes.html#naming-volumes )
  • New suffixes for interacting with kOS Processor modules (including core) ( http://ksp-kos.github.io/KOS_DOC/commands/processors.html )
  • debuglog(...) function to print directly to the KSP log file ( http://ksp-kos.github.io/KOS_DOC/structures/misc/kuniverse.html#method:KUNIVERSE:DEBUGLOG )
  • New queue and stack data structures ( http://ksp-kos.github.io/KOS_DOC/structures/misc/queue.html and http://ksp-kos.github.io/KOS_DOC/structures/misc/stack.html )


  • The processor's mode (on/off/starved) is now saved and restored ( https://github.com/KSP-KOS/KOS/issues/1172 )
  • Fixed stage resources again to address a change in KSP 1.0.5 ( https://github.com/KSP-KOS/KOS/issues/1242 )
  • Fix occasional instances of flight controls getting disabled during a docking/undocking/staging event ( https://github.com/KSP-KOS/KOS/issues/1205 )
  • kOS can now trigger module events with RemoteTech installed and no KSC connection ( https://github.com/RemoteTechnologiesGroup/RemoteTech/issues/437 )
  • Fixed handling of multiple thrust/gimbal transforms and corrected some of their directions ( https://github.com/KSP-KOS/KOS/issues/1259 )59 )


Stats for kOS: Scriptable Autopilot System

Downloads over time

    New followers per day

    Top Referrers

    1. spacedock.info
    2. forum.kerbalspaceprogram.com
    3. ksp-kos.github.io
    4. www.spacedock.info
    5. www.google.com
    6. www.reddit.com
    7. yandex.ru
    8. www.google.de
    9. www.google.fr
    10. www.google.co.uk

    Export Raw Stats

    Export Downloads

    Export Followers

    Export Referrals

    Raw stats are from the beginning of time until now. Each follower and download entry represents one hour of data. Uneventful hours are omitted.