AjaxLife = SecondLife in a browser w/everything minus 3D - SLUniverse Forums
Navigation » SLUniverse Forums > Blogs > Psyke Phaeton » AjaxLife = SecondLife in a browser w/everything minus 3D

Rating: 2 votes, 5.00 average.

AjaxLife = SecondLife in a browser w/everything minus 3D

Posted 07-20-2008 at 11:38 AM by Psyke Phaeton
Updated 07-01-2010 at 02:08 PM by Psyke Phaeton (More detailed info)

What is it?

AjaxLife is a program by Katharine Berry that, using a web page interface (the site is sometimes down), logs you into SL by using libsecondlife and lets you do almost anything you can normally do in SL which does not require you to see the 3D environment.

* Basic Map
* Teleports
* Accepting/declining teleport offers
* Local chat, Group chat, Instant messages
* Inventory receive and send, with notifications
* Friends List with on/offline notifications
* Balance change notifications, etc.
* Person search
* Partial profile viewing
* Notecard editing

It is the perfect tool for running your SL business, for example, while at work behind a firewall.

The web browser interface looks much like the SL client login screen.

It is a good idea not to give other people your passwords but no one has yet reported problems using AjaxLife

I can haz on my server??

It is also possible to obtain your own version and compile it.
However I am not really sure how to set it up after it is compiled. So I am putting here what I have learned and I am hoping the geekier people amongst you can advise me on the next steps.

My instructions require you to have Windows
It is possible to do this on a Mac and Linux MonoDevelop. After compiling, AjaxLife can run with Mono (Linux/Mac/Windows) or .NET (Windows).

You will need a modern version of Mono or .Net

Debian users may need to do: This ensures we get the latest mono from backports.org and that we get the updates from debian so we can see images from inventories.

Linux users will need to install:

and perhaps monodevelop

A) Follow these instructions to install libsecondlife:
Getting Started - libsecondlife
However I replaced svn://opensecondlife.org/libsl/trunk
with svn://opensecondlife.org/libsl/tags/0.4.1 to make sure I had a stable working version. By the time you try there may be newer stable versions.

You should have a compiled version of libsecondlife. Now we need some other things AjaxLife depends upon:

The You can either;

1) Get them from ajaxlife - Google Code


you can compile your own:

These instructiions assume you are using Windows but Linux and Mac should be similar.

1) Download this Json.NET - Release: Json.NET 1.3.1 (version 1.3.1 not version 2) and extract Newtonsoft.Json.dll and Newtonsoft.Json.xml from the archive's /bin to the /dev/ directory you put libsecondlife in.

2) Download MiniHttpd from CodeProject: MiniHttpd: an HTTP web server library you will need to make a fake account using a fake email address, you won't need to verify the email address so use anything. Extract it into /dev/MiniHttpd directory then go into the directory and double click 'MiniHttpd.csproj' and compile it using the skills you used to compile libsecondlife

3) Make a directory in /dev/ called 'S3-sharp' then right click the directory and use TortoiseSVN, change the address from the libsecondlife address to "http://s3-sharp.googlecode.com/svn/trunk/" (without the quotes) and then download the files. Move into the Affirma.ThreeSharp directory and double click Affirma.ThreeSharp.csproj and then build the program like you did for libsecondlife.

4) Browse to Revision 186: /tags and look for the latest version numbers.
Make a directory in /dev called AjaxLife then right click and use TortoiseSVN to download the files from "http://ajaxlife.googlecode.com/svn/tags/X.X.X" (without the quotes and where X.X.X is the latest version)

5) Go into /dev/AjaxLife/server Double click on AjaxLife.sln. On the right you will see the pane called the Solution Explorer. Right click References and choose Add then add the following files libsecondlife.dll, Newtonsoft.Json.dll, MiniHttpd.dll, Affirma.ThreeSharp.dll which you will find in the various directories you have created. You may have to hunt for them a little. Look especially for bin sub-directories.

Finally we can compile AjaxLife

6) Right-click the item labelled “Solution” and select Build. After a little while you will have an AjaxLife.exe in server/bin/Release. In Windows you can double click on this to run it. On Linux you can install Mono and in a console do: mono AjaxLife.exe


B) Then look at Katharine's post below for how to set it up on your own system.

Originally Posted by Katharine Berry View Post

In response to the original post:

Firstly, you don't actually have to grab all those DLLs from everywhere - you can find them neatly bundled in the zip file you can download from AjaxLife's download page - if you extract that into the "server" directory of AjaxLife's svn, all the dependencies needed will be found where the project file expects them to be. Secondly, I'd suggest - as you did with libsecondlife - taking the most recent tagged version from Revision 184: /tags (although note that up to 0.3.6 inclusive, you may have to create an empty file called "robots.txt" in the server directory to make it happy). The trunk is sometimes broken.

To remove the dependency on static.ajaxlife.net, you can place the contents of the "client" directory on a webserver, and make a note of the URL.

To remove the dependency on ajaxlife.net/login, you have two choices: either put the "loginscreen" directory on a webserver supporting PHP, or just don't use it (it's purely aesthetic). If you opt for the former, change the URL in index.html pointing to Second Life Login to the URL you placed the loginscreen in.

Having compiled it, hopefully successfully, there are a number of command-line options which can be helpful, some of which I will post here:

--port [num] - changes the port number it listens on
--root [address] - change the address the static files are expected to be on.
--mac [mac address] - Change the mac address it claims (to avoid LL's periodic inadvertent blocks on anything libsl based)
--id0 [number] - Change the id0 hash to something else for avoid blocks on libsl
--debug - attacks you with debug spam.
There are others but they're less useful.

So, for instance, if you had uploaded the contents of the "client" directory to http://example.com/ajaxlife, you might start it with something like this:

AjaxLife.exe --root http://example.com/ajaxlife/ --mac 01:23:45:67:89:AB --id0 42
Something like this should appear:
Reading grids from Grids.txt
Loaded grid Main Grid "Agni" (Linden Lab) (https://login.agni.lindenlab.com/cgi-bin/login.cgi)
Loaded grid Beta Grid "Aditi" (Linden Lab) (https://login.aditi.lindenlab.com/cgi-bin/login-llsd.cgi)
Loaded grid OSGrid (Non-LL) (http://osgrid.org:8002/)
Loaded grid OpenLifeGrid (Non-LL) (http://logingrid.net:8002/)
Default grid: Main Grid "Agni" (Linden Lab)
Static root: http://example.com/ajaxlife/
Using MAC address: 01:23:45:67:89:AB
Using id0: 42
Handling content encoding: No
Debug mode: Off
Checking texture cache...
Not found; Attempting to create texture cache...
Created texture cache.
Initialising RSA service...
Generated 1024-bit key.
RSA ready.
Using internal server for textures:
        Texture root: textures/
Setting up pages...
Starting server...
Server: MiniHttpd/
CLR: 2.0.50727.42
Server running at http://macbook.local:8080/
If you opted not to have the loginscreen, you can skip that by going to http://localhost:8080/ajaxlife.kat?noframes, otherwise just use http://localhost:8080/ - changing localhost to the server address if you aren't on the same computer.

I think that should basically cover it. As I said, I strongly advise you use a tagged version (the latest is 0.3.6 as of this writing) - otherwise the code may be unusable (although it rarely actually is).

Ask me if you have more problems.

To everyone else: I don't steal your passwords. But it's probably a bad idea to trust me on that, because trusting anyone with your password is a bad idea. So use an alt or change your password or something.
Amazon S3 references are for caching image files and optional.

Helpful Linux software to run this on a remote server then logout with it still running:

GNU Screen - Jonathan McPherson

authbind - Run Linux software on low ports non-root - Scroll down to authbind


Install and Configure Apache2 with PHP5 and SSL Support in Debian Etch -- Debian Admin
Posted in libsecondlife , ajaxlife
Views 10542 Comments 2 Email Blog Entry
Total Comments 2


  1. Old Comment
    Katharine Berry's Avatar
    There's some more of a hint as to what the S3 references are doing at CommandLineArguments - ajaxlife - Google Code - basically, the version I host at ajaxlife.net uploads textures to S3 (specifically, http://textures.ajaxlife.net) and lets the user download them from there. If you choose not to enable this, they are simply served locally.

    I could probably make the S3 Sharp dependency optional with some code restructuring.
    Posted 07-20-2008 at 03:41 PM by Katharine Berry Katharine Berry is offline
  2. Old Comment
    Psyke Phaeton's Avatar
    Thanks Katharine. I notice you are adding instructions at Compiling - ajaxlife - Google Code thanks also for that.
    Posted 07-21-2008 at 06:53 AM by Psyke Phaeton Psyke Phaeton is offline
    Updated 07-21-2008 at 07:04 AM by Psyke Phaeton