Nani’s Opensimulator version

I have some OpenSim code lower on this page for those who want it. This version branched off from the original OpenSim 0.9.1 Dev Master on May 5 2018. It has been worked on ever since.

Please backup your configuration files, ini-files and region files any others you need for your grid or simulator. These zips contain the default configuration files. You will want to make sure you use your own.

THIS VERSION NEEDS TO BE PREBUILD! Make sure you are building in Release mode and not in Debug mode. And on Linux please make sure you are using a recent version of Mono. Please always READ the release notes lower on this page for extra instructions.

Look lower on this page for BINARY versions that have already been build for you.

WARNING: if you are using a MS Windows server/pc with an older .Net version, below 4.8, then you may need to remove the line:
<useLegacyJit enabled="1" />
from the OpenSim.exe.config, OpenSim32.exe.config and Robust.exe.config files. But if your Windows has been updated and has .Net version 4.8 or higher, then you need to leave that line in the mentioned files.


The Project! This contains all the code used to make the whole thing, including the code for the http server dll and open metaverse dlls. Its is not just skeleton code, it already has meat on it.

The Binary! This contains a pre-compiled version of the /bin folder from The Project. It is ready to run, has default config files for OSGrid but you can use your own.

The 2021 Project!

  • 9 August 2021: tweaked the fix for seeing online friends to improve performance.
  • 6 August 2021: added a fix to get a more complete list of the online status of remote friends on other grids.
  • 25 July 2021: increased the max allowed viewer type version numbers, which fixes an issue of some avatars being unable to enter because of having an outfit that the sim did not support.
  • 27 June 2021: fixed a possible deadlock in the friends module and improved caching of friends data.
  • 25 June2021: performance tweaks in llClientView.
  • 23 June 2021: Continuation of previous version. Hides the Creator and Last Onwer data of worn objects from the viewer. This makes rezzing and teleporting of avatars faster, because the Creator and Last owner data need not be fetched. No other grid need be contacted for that data, which means no extra DNS look ups and no attempts to ask potentially dead grids. This does not change the actual Creator and Last Owner of the object. It stays on the object in the inventory Properties and on the asset.
  • 21 June 2021: WOW a new year. This version will make rezzing of avatars faster by not sending the Creator data with the appearance to the viewer. The creator will still be on the object, but only visible in Properties in the inventory. So creators are actually NOT removed, just not send to the viewer. Except when the owner is the creator, you will always see your own name in Edit if you made the thing you wear. On other things you wear you will see (nobody) as Creator. This is only for stuff you wear, not for things on the land. And the creators are not removed, just check Properties in the inventory. Why do this? Because looking up the creators of things we wear and bought on other grids is a major cause of lag.
  • 19 October 2020: fixed a small bug, and improved querying of the online status of HG friends. It doesn’t solve all issues with not seeing friends on other grids who are online, but it helps.
  • 8 October 2020: More work on the BOM feature, making it more compatible with the SL version and the FireStorm 6.3.9 (and above) viewers.
  • 6 October 2020: Hyacinth added support for the LSL AUX texture constants used in SL style BOM scripts.
  • 5 October 2020: a common annoyance in OpenSim is that animations, like dances, do not always load for visitors. You just see everyone frozen. Hyacinth came up with a fix for that that should help in most cases.
  • 16 September 2020: changed the way terrain loads / rezzes when you arrive. From now on terrain loads in circles around the spot you arrive at.
  • 19 August 2020: improved rezzing of the scene (region)
  • 18 August 2020: a few more tweaks and put in a correct ScriptSyntax.xml.
  • 16 August2020: Hyacinth rewrote our homegrown BOM code. Plus minor fixes and tweaks.
  • 1 August 2020: added the latest Open Metaverse libraries. And tweaked some other things.
  • 23 June 2020: Improved the cicular ripple methos used to rez objects in the scene some more. Added an extra send of avatar animations after arrival.
  • 19 June 2020: updated the BulletSim physics engine to the latest OS master dev code. Improved the circular ripple method used to rez objects in the scene.
  • 12 June 2020: some rezzed animesh objects needed an extra kick to get started.
  • 11 June 2020: some big changes in how the scene (region) rezzes when an avatar arrives. We are now using a circular ripple method where the objects rez in circles around you, in steps of 16 feet/meter expanding around you. The closest objects first, the furthest objects last. Another big change is in the Opensim version number. From now on it will reflect the release date. For this release the version number is 20.6.11 Because, this has not really been in a long time but is not the same as the official either. Our Opensim branch is its own thing.
  • 27 May: fixed and issue with rezzed animesh objects on the ground not being visible. This happened then the animesh object had a normal prim as root prim, instead of the root being animesh itself. Also worked on view distance culling of objects, adjusted the default values.
  • 2 May: worked on the UDP pipeline, simplified the unacked packets collection.
  • 21 April: worked on showing groups in other avatars profiles, they did not always show. Also improved rezzing from inventory.
  • 5 April: Hyacinth fixed an issue with animesh objects not rezzing in a region.
  • 3 April: did some work on the AvatarFactoryModule to improve loading of appearances/outfits on arrival.
  • 30 March 2020: did some more work on the scene heartbeat: moving the scene object updates into a signaled thread which improved overall performance.
  • 26 March 2020: by request, added OSSL function osResetAllScripts().
  • 25 March 2020: did some more work on the scene heartbeat, introducing parallel processing and spread out object updates. Instead of cramming all updates into 1 beat of the heart, and potentially freezing the scene, the updates are spread out into batches of 100 object updates per beat (per frame). Also fixed some exception handling in llclientview.
  • 12 March 2020: did some work on the scene heartbeat function, made it beat more consistent and more stable. Also tweaked the update processor to run more efficient.
  • 3 March 2020: made linking and unlinking of prims more efficient, so faster. Also removed some pointless error messages from UUIDGatherer.
  • 26 February 2020: Improved rezzing on arrival in a region, plus a small bug fix on calls to request UserProfileProperties.
  • 22 February 2020: A new year, finally a new release. This version was developed in collaboration with Hyacinth Jewell of HG Luv Grid, in which Hyacinth did most of the heavy lifting. What is new? Not the .Net version, we still use .Net 4.0, deal with it. What is new and exciting? ANIMESH (animated mesh objects) and BOM (bakes on mesh) support, and all that without adding bloated code. This version is still lean and mean, and ready for the future!

The Old Project!

– 22 December 2019: HAPPY HOLIDAYS! Tweaked for better rezzing performance. Enjoy.

– 3 December 2019: this is a tweaked version based on the 28 October version. It has some minor improvements. This is a recommended update. My experiments in November and my attempts to tame the Yetti version did not go well. So lets scrap that for now and continue with a good working version. Hope you will enjoy it.

– 26 November 2019: I have added a stable older version, 28 October 2019. I recommend using it instead of the 24 November version.

– Version 24 November 2019: A final update, maybe the last version on this branch of opensim. It is getting harder to keep up with the changes in new viewers, and also making changes to the opensim code that actually have value. I think I am on a thin branch now and need to let go of it. The current official opensimulator master version has gone in a direction that I do not want to try work towards on this (my) branch. I either should start over, basing my work on the current opensimulator master, or give up. Thank you all for using my code when you did, I hope you enjoyed it. For now i will stop updating this branch here.

– Version 23 November 2019: Recommended update. Better rezzing. “Rebake” in OpenSim used to only rebake the textures of the layers on the classic (system) avatar, without really doing anything for the attachments, the things you wear, like your mesh avatar. NOW as of this version, a rebake will also send updates of your attachments, plus it will send your appearance to all other avatars in the region, and their appearance to you. Meaning “rebake” actually does something for a mesh avatar.

– Version 22 November 2019: update. After experimenting and testing the for a week I finally have rezzing on arrival in a region working as I want. .. or not. Ok back to the drawing table.

– Version 19B November 2019: unhappy with how some things rez when we arrive in a region, I have done some more work on that.

– Version 19 November 2019: Based on some feedback from VPS users I rewrote some that used parallel processing. It did not work well on a VPS server.

– Version 17 November 2019: recommended update. Did some more work on login and teleporting. Also improved the threads Watchdog and the Memory Watchdog.

– Version 2 November 2019: recommended update. Did some work on login and teleporting between regions and to other grids. Improved initial loading / rezzing of the scene on arrival. This should be up to 4 times faster. Cleaned up the source code zips some more to made sure the source compiles well with the command line compiler.

– Version 28 October 2019: recommended update. Did some work on teleporting between regions and to other grids. Also made sure the source compiles well with the command line compiler.

– Version 1 October 2019: a recent .Net 4.8 update caused some problems on windows pcs and servers running opensim. This release contains new OpenSim.exe.config, OpenSim32.exe.config and Robust.exe.config files that solve that issue. If you want to keep using your own version of those files, please add the line
<useLegacyJit enabled="1" />
after the line <runtime> but before the line </runtime> in your versions of those 3 files.

– Version 19 September 2019: Hyacinth Jewell of HGLuv grid contributed a fix for an obscure issue most may never have noticed; when you login the hover height slider used to be grayed out (disabled) until you teleported elsewhere. That is fixed now. Thanks Hyacinth 🙂

– Version 12 September 2019: Removed pointless exception error logging for closed HTTP socket connections. This reduces log spam caused by port scanners and such when they happen to target your TCP port.

– Version 29 August 2019: Improved timing for teleporting between regions on different servers, especially from a high speed server to a slower. Hopefully this will result is less failed teleports. Obviously no guarantees that this helps teleporting to and from regions on other versions of Opensim. This is a recommended update. Enjoy.

– Version 19 July 2019: Updated the avatarfactory and scene modules. Avatars should rez faster now on arrival. This is a recommended update. Enjoy.

– Version 17 July 2019: Updated the fsassetcache module, slight performance increase. Redid the way terrain is loaded when an avatar arrives, this should improve appearance of land on arrival at bigger var regions.

– Version 22 May 2019: introducing: compressed update (UDP) packets. When possible compressed (smaller) update packets will be send to the viewer instead of full size packets. Lets hope that the overhead of compressing the packets will still lead to performance benefits for the viewer. So far it seems so. Also worked on safely dealing with assets with an invalid XML format.

– Version 15 May 2019: tweaked the Httpserver code and added the Httpserver code tree to the source code Zips. This version includes a code contribution from Hyacinth Jewell ( ) which added an optional error message for insufficient rights to upload assets, which is (only) used when putting a user level limit on uploading assets.

– Version 10 May 2019: tweaked the Workpool.Watchdog code. Noticed a possible deadlock situation could occur, so fixed that.

– Version 9 May 2019: after digging up the current source code for the httpserver_opensim.dll, i updated it and updated some modules referencing it.

– Version 8 May 2019: ran into a difference between Windows .Net and Linux Mono 🙂 had to fix that so the code would also compile correctly on Mono. It is fixed in this version.

– Version 7 May 2019: worked on reducing memory use in general and the asset service in particular, by re-using XmlSerializers instead of creating new ones. Try it out 🙂

– Version 3 May 2019: This is a RECOMENDED UPDATE. Worked on overall performance some more and fixed some instances of CPU spikes. PLUS fixed a crash bug that occurred on Mono but not on Windows.

– Version 2 May 2019: Worked on overall performance and fixed some instances of CPU spikes.

– Version 30 April 2019: End of a month with a lot of experimental code. This version is stable, fast, and the end result of all that experimenting.

– Version 29 April 2019: Fixed some UDP timing issues. AND redid, yes again, the way mesh and textures are fetched. Also added some needed exception handling.

– Version 26 April 2019: BACK FROM THE FUTURE! After going back and forth between different solutions to boost performance without increasing CPU use, I have finally settled the matter by reverting some code to the version of 14 April, while keeping some of the newer code. Thanks to several users who have tested the versions this month. Your feedback was really helpful.

– Version 24 April 2019: A 2nd day early but some tweaks were needed. CPU spikes are normal when starting a simulator but they should even out quickly. I have worked on reducing CPU use.

– Version 23 April 2019: A day early but some tweaks were needed.

– Version 22 April 2019: BUG FIX: Robust would not start, sorry about that 🙂 Fixed that in this version.

– Version 20 April 2019: New option for OpenSim.ini and Robust.ini in section [Startup] you can turn the use of Nagle’s algorithm on or off. You can turn it on by adding
UseNagleAlgorithm = true
to section [Startup]. It is off by default, as it used to be in older versions.
“The Nagle algorithm is used to reduce network traffic by buffering small packets of data and transmitting them as a single packet. This process is also referred to as “nagling” it is widely used because it reduces the number of packets transmitted and lowers the overhead per packet. “
Beware turning this on for sims and/or robusts is best tested for a while to see if it benefits your particular setup.

– Version 19 April 2019: RECOMMENDED UPDATE. Fixed a possible dead end in the code. It was unlikely to happen but better be safe than sorry.

– Version 18 April 2019: replaced the original polling mechanism for http requests for mesh, textures and inventory description, with a new mechanism. This results in faster loading and a better viewing experience.

– Version 14 April 2019: slowed down the OAR web download a bit to fix an issue with users on slow connections.

– Version 13 April 2019: Some more work on the new features mentioned below.

– Version 12 April 2019: NEW FEATURES! For region owners there are now nearby chat commands to make and download a OAR copy of their region. This features is turned off by default. To activate it add AllowOARcommands = true to the [Startup] section of the OpenSim.ini file. This will need a restart of the simulator. When its is active, the region owner can use /#save oar password (where password is the region owner’s login password) to create OAR copy of their region. They have to be in the region to do this. A URL to download the OAR file will be offered to the region owner when the OAR has been created. A previously saved OAR file can be loaded (at own risk) onto the region using /#load oar password. Use these commands with care, and activate the use of them with care as well.

– Version 10 April 2019: Added the InventoryEmpty flag to primitives with no inventory or an empty one. Turns out it was not set. Plus some other minor bug fixes.

– Version 9 April 2019: improved loading parcel details on arrival after teleport and login. Also improved rezzing avatars on arrival.

– Version 6 April 2019: worked on UDP and Job engine, things will load faster. PLUS a new feature which is disabled by default. To enable it add the setting AllowOARcommands = true to the [StartUp] section of OpenSim.ini. This option allows region owners to use Raw terrain upload/download option of a region to upload/download a OAR file. It will also add nearby chat commands /#save oar and /#load oar. These features are still highly experimental. Try at your own risk. Thanks go to Hyacinth Jewell of HG Luv Grid for coming up with this new feature.

– Version 31 March 2019: changed LSL llDialog function to allow for an empty button list. It will then simply add a default Ok button instead of throwing an error.

– Version 30 March 2019: some more tweaking for performance. Worked on the UDP client, the XEngine and replaced the busy waiting LocklessQueue with a smarter mechanism that uses less CPU.

– Version 21 March 2019: some more tweaking for performance. Worked on the UDP server, the job engine and concurrent queuing, among other things. 🙂

– Version 17 March 2019: some more tweaking for performance. Worked on the UDP server, among other things. 🙂

– Version 13 March 2019: some more tweaking for performance. AND added the OpenSim search module v4.0, used by OSGrid, also to the versions that are not for OSGrid.

– Version 12 March 2019: worked on the inventory access module, user management module and user profile module to trigger it to get the creator name when you get an item from the inventory.

– Version 11 March 2019: worked on the inventory access module to trigger it to get the creator name when you get an item from the inventory.

– Version 10 March 2019: worked on the user management module to get names loaded faster. Re-activated pre-caching of creator data of all objects in the regions on region start. This will mean a bit more memory use at start up.

– Version 9 March 2019: worked on the user management module to get names loaded faster.

– Version 8 March 2019: Replaced the central request chain with a action chain. One chain for textures, one for mesh and one for inventory description requests. Having one single central pipe, even with multiple threads processing the requests, had some side effects like a different experiences for different visitors. So, I replaced it with the separate action chains.

– Version 3 March 2019: created a new central request chain mechanism that will deal with all mesh and texture requests. Also worked on the Asset service, plugging some potential memory leaks and adding explicit flushing of IO buffers to disk.

– Version 25 February 2019: worked on a new NConcurrentQueue and tried to explicitly release memory used by the AssetService (robust/server side) in the hopes to fix an issue some grids seem to be having.

– Version 20 February 2019: includes a NEW osslEnable.ini, use it or at least take a good look at it. Have fixed and improved the threat/permission check for OSSL script functions. Its faster and uses less memory to store the permissions.

– Version 15 February 2019: RECOMMENDED update. Tweaked the UDP client/server some more and worked on the friends module (on the sim side). If you have an older version then I highly recommend upgrading to this one.

– Version 14 February 2019: Tweaked the UDP client/server and added a temporary cache for converted images to avoid converting the same image multiple times.

– Version 7 February 2019: added a fix for

– Version 3 February 2019: Fixed script permission issues of a few osFunctions.

– Version 2 February 2019: tweaks and fixes and thoughts about “unknown region” isuue being related to regions that do not make a new map tile once in a while. So re-registering with Grid once in a while even regions that do not make map tile.

– Version 25 January 2019: Only small change to the NConcurrentQueue, but it makes things run smoother.

– Version 24 January 2019: BACK TO THE FUTURE! Well not really, more like back to the past. The new Open Metaverse libraries resulted in weird side effects and vague bugs. SO! Back to the old Open Metaverse libs. That needed a view code changes but no worries. All is well now 🙂

– Version 21 January 2019: Added missing support for setting alpha modes via script functions like llSetPrimitiveParams. Seemed only the llGet version was fully implemented. Also tweaked the AvatarFactory once again.

– Version 18 January 2019: Again hard to summarize. Lets see, another new approach to the GetMesh/texture modules. And an attempt to fix a tail spin that could happen when an avatar’s baxed textures could not be cached. A possible fix for land textures not always loading on all parts of a large region. Which does seem user or connection specific. Other users can see the same land just fine. AND as requested by some of you I will add a OSgrid pre-compiled binary version. Since I only have settings for OSgrid, I only made the binary for OSgrid.

– Version 10 January 2019: Done so much hard to fit in a few word. Beware this version does need a new PREBUILD! Last thing I did was make sure the command line compile was error free. Seems that building in VS2017 did not reveal that the command line compile did not like some new syntax like declaring out variables inline. So I changed that syntax. What else? I worked on AvatarFactory, GetMesh/Texture/ related modules, and on the presence animator. Plus put in some initial code for “aniMesh” aka “Mesh2” requests support. If you have not updated in a while, do look at the warning mentioned below for de 15 December 2018 version. It still applies if you are using the MySQLAssetDataCache module.

– Version 29 December 2018: improved the EventQueueGetModule and some other minor things.

– Version 24 December 2018: improved the Asset Service Connector and changed the NConcurrentQueue (again), now using “swapping chains”. Very happy with this concept. BEWARE the warning of the previous version still applies if you are using an older version.

– Version 15 December 2018: WARNING if you use the MySQLDataAssetCache module, this version uses a new format for the tables in the cache database. You will have to drop and recreate an empty cache database before using this version. This version uses Tasks in the JobEngine and a new “swapping queue” algorithm in NConcurrentQueue. This improves performance and concurrency.

– Version 7 December 2018: the fight continues 🙂 This version should be fast and release memory sooner. Some changes to Flosam and MysqlAssetData cache modules with as goal to make them use less memory. Plus some more tweaks on the NConcurrentQueue. Time-outs for bad DNS and unresolved HG user names changed from 5 seconds to 30 to allow for slow networks. Beware you do need an recent Mono on Linux as this involves using Tasks which requires a recent Mono version.

– Version 30 November 2018: [RETRACTED due to issues on Mono] Major changes. Switched to a new NConcurrentQueue and a new NExpiringCache. This touched many modules.

– Version 15 November 2018: keeping it simple: a Queue, a Lock and a ManualResetEvent. And that is how we almost come full circle 🙂

– Version 13 November 2018: after experimenting with Pulse/Wait and ManualResetEvent, the winner is ManualResetEvent

– Version 12 November 2018: Having fun with simple chain links in NConcurrentQueue.

– Version 07 November 2018: further improvements on the JobEngine 🙂 and some other things

– Version 02 November 2018: fixed a wrong reference that made prebuild/compile fail. And! Introducing new JobEngine based on NConcurrentQueue

– Version 30 October 2018: created a concurrent queue class which can wait for a signal. This way reducing the need for a blocking mechanism. Threads who enqueu objects will no longer need to be blocked. Replaced the instances of BlockingQueue with this new NConcurrentQueue. You need to prebuild before you can compile this new version, or it will be missing the NConcurrentQueue.

– Version 27 October 2018: fixed a bug in the MySQL Asset Cache module that could prevent caching from working.

– Version 19 October 2018: among other things, all instances of the Opensim “home made” BlockingQueue have been replaced by .Net native BlockingCollection instancesStarted

– Earlier Versions: started tinkering in 2017. Slowly “improving” things as I was reading the master code base.