Improved Offline IMs and Friend Requests

We updated Kitely today with a few bug fixes that should solve several problems that people reported in our forums.

We fixed a couple of problems that happened when you entered a world through a Transfer Station, but spent only a very short amount of time in the Transfer Station. First, if you had pending Offline IMs then the notification about these IMs wasn’t shown. Second, if you had pending friend requests, then although these requests were shown, clicking Accept or Decline didn’t actually take effect. The reason for both of these problems was that the viewer got confused because you switched worlds too quickly. The fix is that we simply don’t send these notifications while you’re in the Transfer Station anymore: we wait until you arrive at the destination world and only then do we send these messages.

Today’s update also includes a bug fix that should solve the problem that caused Kitely to become unresponsive a few days ago.

And finally, we increased the maximum range in which we show Kitely Market analytics to 3 years. It was originally set at 2 years, but Kitely Market has now been operational for longer than that :)

A Minute of Your Time Can Help Bring More People to Kitely

The website Hypergrid Business is now holding its sixth annual OpenSim grid survey. Please help us attract additional people to the Kitely community by answering this short multiple choice survey.

Last year many of you participated in the survey and, as a result, Kitely came out on top for “Best Technology” with a close-to-perfect score of 4.95. Your support helped Kitely attract more users and keep its position as the leading commercial provider of Hypergrid-enabled regions. It also helped convince content creators to list their items in Kitely Market, and now there are more than 11,000 product variations listed in our marketplace, making it the biggest marketplace serving the Hypergrid. Your continued support is crucial for helping us grow both our marketplace and the Kitely user community.

Please take the time to complete this survey. Thank you!

Maintenance Release

We updated the system today with several bug fixes and features that were requested by our users.

In the previous update, we enabled world managers to monitor world performance and shut down their active worlds by clicking “Stop” in the World Page. We’ve now added a confirmation dialog before stopping the world, to prevent shutting down worlds by accident.

We’ve updated the default viewer that we provide on our website to Firestorm 4.7.3.

We now allow links to YouTube and Flickr in Kitely Market product listings.

We fixed the following bug: if a user had set his or her Home region to a Megaregion, then attempting to go Home from another grid would fail. Now it will succeed. Users who have set their Home region to a Megaregion should set it again. (It’s okay to not do this, but in that case going Home will only work inside Kitely, but not from other grids.)

Monitor World Performance

We added a new tool for monitoring world performance. We also wrote a new guide for detecting and fixing world performance problems, and added an option to manually stop a running world.

Monitor World Performance

OpenSim provides world owners with the freedom to create large worlds with many prims and complex scripts, but this freedom can come at the cost of performance. As a world owner it’s important to make sure that your worlds perform well, because slow worlds cause a bad user experience: the world appears slowly around the user; animations are choppy; and moving in the world is frustrating because the avatar appears to jump from place to place instead of moving smoothly.

You can now check the performance of your world using the Active World panel, which appears in the world’s World Page while the world is active. This panel contains the following information:

  • Active Time – how long the world has been active in the current session.
  • Visitors – the current number of avatars in the world.
  • CPU (Number) – the current CPU usage of the world.
  • CPU (Graph) – a history of the CPU usage.
  • Packets (Graph) – the number of networking packets sent between the world and the viewers that are connected to it.

Active World

The graphs appear shortly after the world has started, and they update automatically every 30 seconds.

  • In both graphs, the horizontal axis shows the time (in the UTC time zone).
  • In both graphs, the left vertical axis shows the number of visitors in the world. This statistic is drawn using the yellow line.
  • In the CPU graph, the right vertical axis shows the CPU usage.
  • In the Packets graph, the right vertical axis shows the number of packets.

These graphs make it easy to see how the number of visitors in the world affects the CPU and bandwidth usage. It’s natural for worlds to use more CPU resources as the number of visitors increases. However, if the world is using a lot of CPU resources even when it has few visitors then the world probably needs to be optimized.

Stop world

You can use the Stop world link to force the world to stop. This is rarely needed, since worlds automatically stop a few minutes after the last visitor has left them. However, sometimes you might believe that the world is behaving badly and you want to restart it, and in that case stopping the world explicitly saves the normal delay that occurs between the time that the last visitor has left the world and when the world is stopped. This also enables you to stop a world even if there are avatars inside it.

Stopping a world is also useful for fixing the rare error of “ghosted avatars”. Avatar ghosting occurs when the simulator fails to detect that a user has closed their viewer. This leaves their avatar in the world, and prevents them from entering it again. Restarting the world removes the ghosted avatar.

After the world has stopped, enter the world again in order to restart it.

A Guide for Optimizing World Performance

We wrote a detailed new guide that describes all the tools available for checking the world’s performance, and how to fix various performance problems. See: Optimize World Performance. The guide contains the information that was included in this blog post, and much more.

If you see that your world is using a lot of CPU then you should consult this guide to find how to make the world perform better, which will improve the experience of your visitors.

New Tools for Fixing Slow Scripts

We updated our system today with several new features. First, we vastly improved the ability to find and fix slow scripts; this has a big impact on world performance. We’ll contribute this feature to the OpenSim project soon. Next, we continued to improve support for items that were obtained in other grids. Finally, we added a few features that improve usability.

How to Fix Slow Worlds

Don’t you hate it when you visit a slow world, where every step you take causes rubber-banding, and chatting is slow and jerky? When worlds are slow, that’s almost always caused by either slow physics or slow scripts. World Managers are responsible for making sure that their worlds are fast and provide a good experience to visitors. But how can you, the world manager, know if your world is fast or slow?

The first thing you need to check is the Statistics panel. You can open this panel by pressing Ctrl+Shift+1 in the viewer. The panel shows many statistics, but the two most important statistics are the Physics Time and Script Time. If they show high values then that tells you that you have a problem that needs to be fixed.


This screenshot was taken in the Kitely Welcome Center, which is a highly optimized world: a Script Time under 1 ms is a good result. However, if you see a high Script Time or Physics Time then the next step is to find which objects are causing the slowdown. In the Region/Estate dialog you can open one of two dialogs: Top Colliders and Top Scripts. The Top Colliders dialog shows the objects that use the most physics time, and the Top Scripts dialog shows the scripts that take the most time. With this information you can decide what to do: optimize the objects, or disable them.

Debug Region

We’ve already improved the Top Colliders dialog significantly in the past, and today we made a similar improvement for Scripts.

Find and Fix Slow Scripts

Until today, the Script Time shown in the Statistics panel was always 0! That statistic had never been implemented in OpenSim. Today’s update, at last, implements the statistic. The “Script Time” value now shows the amount of time spent executing the world’s scripts in the last frame. This value should usually be very low: ideally under 1 ms. Some worlds might legitimately need more Script Time, if they have many scripts or many animations, but usually if the Script Time is higher than a few ms then you should try to optimize some of the slowest scripts in your world.

By the way, the Script Time shown in the Statistics panel is independent from all the other times shown in this panel. That’s because scripts execute on separate threads, outside of the frame processing time. This has two important implications. First, because scripts execute outside of the frame, it’s possible that the frame time will appear to be good, even though in fact the world is operating slowly due to heavy scripts activity. Therefore, if you have a high Script Time then you should optimize your scripts, regardless of what the other statistics show. Second, it’s possible for the Script Time to be very high, in some cases even hundreds of ms, i.e. longer than the frame time.

If you see that your world is using a lot of script time then the next step is to find which scripts are causing the problem. To do this, open the Top Scripts dialog. This dialog has been vastly improved in today’s update. Previously, the values it had shown were practically useless. But now, this dialog shows an accurate list of the slowest scripts in the world, and measures their execution time precisely. The value shown for each script is the total time spent executing that script in the last 30 seconds. (Note that 30 seconds is much longer than a single frame, and therefore the times shown here have little correlation with the Script Time shown in the statistics panel.)

Top Scripts

This screenshot was also taken in the Kitely Welcome Center. The top scripts here are pretty fast: the slowest script took just 5 ms, and remember that this is the total execution time over a 30-second period.

If your world contains slow scripts then they’ll appear at the top of the list in this dialog, and you’ll be able to see that they take much more time than the rest of the scripts. Alternatively, another cause of slow performance is if your scripts are efficient, but you have thousands of them. In that case you should consider why you need so many scripts, and whether you can reduce their number. (Note that this dialog won’t show thousands of scripts, but if you see a hundred identical scripts then you may assume that there are thousands more behind them…)

Once you’ve found the slow scripts, edit them to make them faster. How to do this is out of scope for this blog post; if you need help, try asking in our Scripting Forum. Whenever you save the script, the new version starts executing immediately. Click “Refresh” in the Top Scripts dialog to see if your changes made the script faster. Keep in mind that this dialog shows the total execution time in the last 30 seconds, so it will take some time for your changes to have an effect.

Once you’ve optimized enough of the slow scripts, check the Script Time in the Statistics panel to see if it has dropped significantly.

If you don’t want to take the time to edit the scripts, or you’re in the middle of an event and you need to improve the world’s performance quickly, then you can use the “Return Selected” or “Disable Selected” buttons in the dialog. “Return Selected” removes the selected objects from the world and adds them to your inventory. “Disable Selected” disables scripts and physics on the selected objects. After using either of these buttons, you can immediately check the Statistics panel to see if the Script Time has dropped. If you Disabled the objects then remember to re-enable their scripts (and possibly their physics, if they’re physical objects) after you have optimized the scripts.

We’re very proud of this feature. One area in which OpenSim has lagged behind Second Life is in ensuring a good (i.e., fast) experience for users. Every ex-Second Life user who switches to OpenSim enjoys the freedom to create large worlds with many prims and complex scripts, but this freedom can come at the cost of performance. At Kitely we’ve done a lot of work to make sure that our side of the service is fast, by using powerful servers and optimized asset and inventory systems. But slow scripts can bring any world to its knees, no matter how fast the hardware it’s running on. Today’s update gives world managers the information they need to ensure that their worlds are snappy and enjoyable.

Contributing the New Script Features to OpenSim

After we’ve had some time to test this new feature on Kitely and ensure its quality, we’ll contribute this patch to the OpenSim project. This should improve the performance of scripts everywhere in the Metaverse, to the benefit of the entire OpenSim community.

Other Improvements

We continued improving support for taking items from other grids and having them remain Exportable. This is a continuation of the work described in our last update. If you encountered problems after the previous update then please get the affected objects from the third-party grid again now.

When you view the list of members in a Group, the list now shows for each member whether they’re online, or otherwise the last time that they were online.

The OSSL function osKey2Name now returns the full name (including grid) for HG users. For example, local users return a name such as “First Last”, while Hypergrid users return a name such as “First.Last”. (Previously Hypergrid users also returned a name such as “First Last”, so they couldn’t be differentiated from local users.)

Improved Item Exchange with Other Grids

We updated the system today with a change that makes it easier to take items from other grids into Kitely, and then take them with you when you leave Kitely to visit other grids.

This update also includes several bug fixes, including a bug that sometimes prevented Hypergrid users from teleporting into Kitely.

Improved Item Exchange with Other Grids

Kitely is a Content-Filtered open grid. Unlike unfiltered open grids, Kitely enables content creators to decide whether the items they create may be taken to other grids, or will be treated as unexportable content. There are two ways that content creators can specify this preference. The first method is used only for items in Kitely Market: such items have an explicit “Export” flag, which determines whether they can be taken out of Kitely. This method hasn’t changed, and will not be discussed in this blog post. For any objects not acquired from Kitely Market, we use the following rule: if the object has Copy + Transfer (CT) permissions then it may be exported out of Kitely. Otherwise, it may not leave Kitely.

If an item isn’t allowed to be exported then users may not:

  • Wear it while teleporting to other grids
  • Store it in their “My Suitcase” folder while teleporting to other grids
  • Have it included in exported OAR files

But what happens if a Kitely user, while visiting another grid, picks up an item that doesn’t have CT permissions? Since that item clearly came from another grid, there’s no reason to prevent it from leaving Kitely. For this reason, we added the “Foreign Grid” flag: if an object came to Kitely from another grid then we turn this flag on, and that allows the object to be exported from Kitely even if it doesn’t have CT permissions.

And now we get to the problem that today’s update fixes. Until today, we had an exception to the “Foreign Grid” rule: if the item already existed in Kitely before the user picked it up in the foreign grid, then we wouldn’t turn on the “Foreign Grid” flag. This meant that the user still couldn’t export the item out of Kitely (e.g., by wearing it), despite the fact that we had already seen the item in a different grid.

The idea behind this logic was that even if the item already exists in one foreign grid, perhaps we shouldn’t allow it to proliferate any further. But this turned out to be a mistake. In the vast majority of cases, it prevented users from taking legitimate free content out of Kitely. It came down to randomness: if a certain common item without CT permissions (e.g., a Linda Kellie item) was first imported directly into Kitely by any Kitely user (e.g., using Load OAR), then we would never allow it to leave. But if the same item first came into Kitely from another grid, then it would be allowed to leave. This made no sense. It also didn’t add much to security, since we still couldn’t prevent items from being taken out using Copybots.

After consulting with our users we decided to change this logic, by removing the exception described above. Now, if we see an item in a foreign grid, then we always enable the “Foreign Grid” flag on the item, even if it already exists in Kitely. This change will make it much easier to pick up items in other grids and be sure that they will be allowed to enter and leave Kitely freely.

Please note that this change won’t affect existing items in your inventory, so if you had any items that suffered from this problem (you couldn’t leave Kitely with them) then you should pick up a new copy of the item from the foreign grid. We’re sorry for this inconvenience, but this will only need to be done once.

A note to Kitely Market merchants: this change doesn’t affect the exportability of products that were bought from Kitely Market. The explicit “Export” flag on such items takes precedence over everything else, so No-Export items won’t be allowed to leave Kitely even if they have CT permissions, and even if they have the “Foreign Grid” flag.

OSSL Permissions

When we recently updated to OpenSim 0.8.2 Dev we changed the permissions of a few OSSL functions, allowing fewer people to use them (e.g., only World Managers vs. Everyone). These changes were originally made in the core version of OpenSim, because the developers have come to consider some functions to be more dangerous than previously thought. We chose to accept these changes in order to maintain security and compatibility with other grids that are using the latest version of OpenSim. We’ve updated the list of Supported OSSL Functions to reflect the new functions and permissions.

Bug Fixes

This release also includes a number of bug fixes:

There was a bug that prevented Transfer Stations from working for users that came in from other grids. This meant that if users on other grids tried to visit a Kitely world, and that world was offline, then the teleport failed. Now the teleport will succeed, and the user will be sent to the Transfer Station while the world is being started. (This is how Kitely had worked up until we upgraded to OpenSim 0.8.2 earlier this month; that’s when this bug started.)

Kitely allows restricting access to Kitely worlds to users who belong to a certain OpenSim Group. Until today, such restrictions only worked for Kitely users. While you could add Hypergrid users to your Groups, they still weren’t allowed to enter restricted worlds. This bug has been fixed, so now Hypergrid users who belong to Groups will be allowed to visit worlds that are restricted to members of those Groups.

It is now possible to visit Kitely from other grids by entering in the World Map. The correct address for Kitely is actually, so until today if anyone tried to visit by entering just “” then they received an error. But now we allow this address to work. However, we still recommend entering the full address (, because foreign grids may cache these addresses and we prefer that they cache the correct address.

Updated to OpenSim 0.8.2 Dev

We updated the system today, bringing in updates from OpenSim 0.8.1 and 0.8.2 (Dev).

You can see the full list of changes in OpenSim 0.8.1 here:

Since OpenSim 0.8.2 hasn’t been officially released yet, there’s no comparable page that shows which changes it contains. However, we’ve noted some of the important changes in this release below (changes in both OpenSim 0.8.1 and 0.8.2).

All of the Scripts Need to Be Recompiled

Scripts in OpenSim are written in the LSL programming language, but before they can be used they need to be compiled into a DLL. Compiling scripts is a slow operation, so we compile each script only once and from then on we reuse the compiled DLL.

The new version of OpenSim has changed the format of compiled scripts. (This was done to make scripts more reliable if they need to be terminated; this is called setting “ScriptStopStrategy” to “co-op”.) Therefore, all of the scripts in Kitely now need to be recompiled. The first time any world is started after this update it will spend some time recompiling its scripts. During this time the world will perform slower than usual, and scripts will be slow to start. This will take a few minutes, and it will only happen once.

Scripting Changes

This release contains a couple of new OSSL functions:

There are also some new and improved LSL functions:

Other Notable Changes

In order to make it easier to change terrain, terrain updates are now sent first for the area the user is near. This makes terrain editing faster. However, it means that far away terrain changes may not be displayed as quickly.

The algorithm used to calculate performance metrics such as frame time, fps, etc. has changed. If you’re used to the old performance metrics then the new metrics will look very different. The performance of OpenSim hasn’t actually changed (well, except for improving a bit): only the numbers shown have changed, to be more accurate. If you would like more technical information about this change then see this post:

World managers can now Kick a user using the Estate Management dialog.

You can now “Grab” objects: use Ctrl+Drag to move them, and Ctrl+Shift+Drag to rotate them.

And finally, there have been numerous changes to many aspects of OpenSim that are too small to mention here, but together can have a big impact. Please let us know if you encounter any problems.

Downloadable Account History Report

We updated the system today with several bug fixes, and one new feature that was requested by our users.

You can now download a report of your account history in CSV format. To do so, click on the link “Download report” in the Account History page:

Download History Report

All event times listed in this report are in the GMT time zone.


60% Off Large Worlds, and a Dedicated Memory Guarantee

New World Prices, and Dedicated Memory

Kitely has always provided great performance for low prices, and today we’re happy to announce that we’ve reduced the price of large worlds by 60%! Standard Worlds have been reduced in price from $49.95 to $19.95 per month, and Advanced Worlds have been reduced in price from $99.95 to $39.95 per month.

In addition, all Kitely worlds now get a large amount of dedicated memory: between 1024 MB and 4096 MB, depending on the world type. Previously worlds were not guaranteed any particular amount of memory. Having a lot of dedicated memory is important to ensure that worlds with many prims, scripts or avatars run fast and lag-free.

Here’s the new price list, and how much dedicated memory each type of world gets:

Starter World Standard World Advanced World
Maximum world size 1 Region 4 Regions 16 Regions
Maximum prims 15,000 60,000 120,000
Avatar capacity 10 40 80
Dedicated memory (RAM) 1024 MB 2048 MB 4096 MB
World speed Fast Faster Fastest
Price $14.95 / month $19.95 / month $39.95 / month

How Does This Affect You?

If you have an existing Starter World then you don’t need to do anything, since the price of the world hasn’t changed, and you’ll get the new dedicated memory automatically. However, you might want to consider upgrading to a Standard World, since for only $5/month more than what you’re paying now you’ll get significantly more server resources, be able to build a world that is 4 times as large, and allow 4 times as many avatars into your world.

If you have an old-price Standard World ($49.95/month) or Advanced World ($99.95/month) then we encourage you to switch to the new world types now, and thus save a lot of money. This is necessary because these discounts aren’t applied automatically to existing worlds.

High Performance Worlds

The introduction of dedicated memory is just the latest step in our mission to provide the fastest, highest-quality OpenSim hosting service. Kitely worlds are fast for a number of reasons:

First, we run OpenSim on powerful servers with Intel Xeon E5-2670 CPUs and SSD hard drives. Each world gets a generous amount of dedicated memory: between 1024 MB and 4096 MB, depending on the world type. Each world also gets fast and unlimited bandwidth.

We place no more than 4 worlds on each server. This ensures that each world gets plenty of RAM and CPU power. Even better: as a world gets more visitors we automatically scale up the amount of CPU, network, and I/O resources it gets in order to maintain good performance, at no additional price! This means that a world with many visitors can get an entire server all to itself. Only Kitely, with our on-demand, cloud-based architecture, can offer such a service. Advanced Worlds are especially privileged: they get more server resources than other world types at all times (even when they have only a single avatar in them).

Another important way that we offer high performance is our proprietary and highly optimized version of OpenSim. Kitely users benefit from more than 400 OpenSim optimization and stability patches that we’ve created that don’t exist in regular OpenSim (totaling more than 30,000 lines of code). In addition, we use our own cloud-based Asset and Inventory services, which are much faster than the services that come with regular OpenSim. These enhancements ensure that Kitely worlds start up much faster than they can on regular OpenSim; that they take significantly less time to rezz; and that they’re more stable while many people are using them. Our enhancements also enable Kitely users to have large inventories that perform well both while in Kitely, and during their Hypergrid visits to other grids.

No More Premium Accounts

As we announced last month, as of today we no longer offer Premium Accounts: all new users get a Regular Account. However, users who already have a Premium Account or Gold Plan can keep it for as long as they continue paying for it.

Kitely Provides the Best Value for Your Money

Are you interested in getting your own virtual world? Get a Kitely world now. There are no setup fees, and no delays. When you buy a Kitely world it’s ready to use immediately. If you’re a new user then you can even create a Trial World for free and use it for 6 hours, all without giving us your billing information.

Secure Browsing and Better Hypergrid Support in Kitely Market

Secure Browsing using SSL

All communications with the Kitely website are now encrypted using SSL. This means that you can visit our website from anywhere, even over public Wi-Fi networks, and have your private information remain secure from eavesdroppers.


Simpler Delivery Options

We changed the Kitely Market shopping cart to make it easier to understand which avatar will receive the items that you purchase. Previously there were three delivery options: “Me”, “Gift” and “Other Grid”. This confused some of our marketplace shoppers, who thought that “Me” referred to their avatar on another grid, when in fact it referred to their Kitely avatar (we automatically create an avatar on our grid for anyone who signs up for a Kitely account).

Therefore, we’ve changed the shopping cart so that now it includes only two delivery options:

  • My Kitely Avatar – the items will be delivered to the Kitely avatar that belongs to the Kitely account that you are logged in with.
  • Other Avatar – the items will be delivered to a different avatar. That avatar may be a Kitely avatar (one of your alts, or another Kitely user’s avatar), or an avatar that belongs to a different grid altogether.

Market Delivery Options

Easier Delivery to Other Grids

We added a feature that’s intended for grid owners, and makes it easier for their users to buy from Kitely Market. The problem is that in order for Hypergrid users to buy from Kitely Market, their grid needs to be included in the list of grids in the Shopping Cart. Only a few widely-used grids are automatically included in everyone’s grids list, e.g. OSGrid. All other grids need to be added manually using the Grid Manager (you can see the link to the Grid Manager in the screenshot above).

In order to make adding a custom grid easier, it’s now possible to create links to Kitely Market that automatically add a custom grid to the user’s grids list. This is done by adding a parameter called “grid” to the URL. When we see this parameter, we find the specified grid; add it to the user’s grids list; and make it the currently-selected grid. The value of this parameter is the grid’s Grid URI (sometimes called the Home URI).

For example, suppose you want to buy items for your avatar in the OpenSimulator Community Conference grid. Now you can simply click on this link: Do this now, and you’ll see that the grid has been added to your grids list in the shopping cart. This works even if you’re not logged-in yet, and even if you haven’t signed-up! (The grid will be added to your grids list once you login and/or signup.)

We created an image that grid owners can use in order to help their users access Kitely Market:


To use this image, first open it in an image editing program and add your grid’s logo at the bottom. If you don’t have a grid logo then you can add your grid name as text. If you do that, and you want your grid name to appear similar to the rest of the text in this image, then use this font: typeface Meiryo; regular; size 18px or more; color #082e6c. If you don’t have the Meiryo font then use whatever else looks similar, e.g. Helvetica.

Once you’ve finished preparing the image, upload it to your website. Then, add a link in your website to Kitely Market, using the special URL that adds your grid to the user’s list of grids. For example (replace YOURGRID.EXAMPLE.COM:8002 with your real Grid URI):

<a href=""><img src="kitely-market-metaverse-marketplace.png" title="Kitely Market" width="200" height="200"></a>

Please note that this will only work if the grid is already known to us and verified for use with Kitely Market.

Increased the Idle Visitors Timeout

We increased the Idle Visitors Timeout from 30 minutes to 1 hour. This timeout determines when we disconnect avatars who have been in-world for a long time without doing anything (i.e. without moving, chatting, etc.).

Please note that in some cases we use a longer timeout of 2 hours:

  • For World Managers, when they’re in one of their own worlds.
  • For users with a Premium Account or Gold Plan, when they’re in any world.

Better Error Checking of OAR Files

People get OAR files from many different sources, and sometimes those OAR files contain problems which prevent them from being imported into OpenSim. In order to help people handle these cases, we improved our validation of uploaded OAR files. We now detect problems in OAR files faster than before, and when we detect a problem we show error messages that are easier to understand.