# URI reference

> Every secondlife:// and secondlife:///app/ URI form from the wiki's Viewer URI Name Space page, with syntax, parameters and descriptions.

<div class="wide-page" hidden></div>

The full list of viewer URI forms, from the Second Life Wiki's [Viewer URI Name Space](https://wiki.secondlife.com/wiki/Viewer_URI_Name_Space) page (revision 1219168, 6 October 2026), with the wording as written. Numbers in parentheses, such as (2.0), are the viewer version the wiki gives for a form. Part of the [Viewer URIs](/features/viewer-uris/) feature.

## Overview

The SL client supports [links](https://en.wikipedia.org/wiki/URI) of the format `secondlife://Region/123/45/67/<region name>`, which have traditionally specified a region name and `x/y/z` location. This means "run Second Life viewer and show Region on the world map".

The new [URL scheme](https://en.wikipedia.org/wiki/URI) has 3 slashes[^rfc3986], and allows direct control of the user interface and login. For example, `secondlife:///app/login`

Most `secondlife:///app` URLs only work from browser instances running inside Second Life because of a denial-of-service attack using `secondlife:///app/teleport` links to force repeated teleports. [SLURL](https://wiki.secondlife.com/wiki/SLURL)s that work with external browsers include:

- `secondlife://<region name>`
- `secondlife:///app/login`

In chat, dialogs and other user interface elements, these URLs will be highlighted as clickable links, often with custom formatting including icons. The full functionality is available in Viewer 2.0 and up. Clickable links without formatting were available only in older versions' chat and [IM](https://wiki.secondlife.com/wiki/Instant_Message) history.

These links also may be known as *Viewer URL Namespace*, *SLAPP URLs* or *Application [SLURL](https://wiki.secondlife.com/wiki/SLURL)*.

## Syntax

Each row shows the URI up to the part it describes. Parts in angle brackets are parameters.

### Region locations

| URI | Description |
| --- | --- |
| `secondlife://<region_name>` | log in to this region or, if logged in, show information and offer teleport |
| `secondlife://<region_name>/<local_x>` | optional X position, defaults to 128 |
| `secondlife://<region_name>/<local_x>/<local_y>` | optional Y position, defaults to 128 |
| `secondlife://<region_name>/<local_x>/<local_y>/<local_z>` | optional Z position, defaults to 0 |

### app/add_folder

*(see **wear_folder**)*

| URI | Description |
| --- | --- |
| `secondlife:///app/add_folder/?folder_id=<inventory_folder_uuid>` | add contents of specified folder to outfit (7.1) |
| `secondlife:///app/add_folder/?folder_name=<library_folder_name>` | add contents of named Library folder to outfit |

### app/agent

| URI | Description |
| --- | --- |
| `secondlife:///app/agent/<agent_id>/about` | open agent's profile, with 2nd Life tab selected |
| `secondlife:///app/agent/<agent_id>/completename` | replaces the URL with the avatar's display and user names, e.g., "hmm `secondlife:///app/agent/eea40b5a-553d-4a07-b1ca-9f6e2f867814/complete` wow" in chat becomes "hmm Cerise (cerise.sorbet) wow" (2.4); see [Avatar/Name](https://wiki.secondlife.com/wiki/Category:LSL_Avatar/Name) for more details. |
| `secondlife:///app/agent/<agent_id>/displayname` | replaces the URL with the avatar's display name (2.4) |
| `secondlife:///app/agent/<agent_id>/im` | starts an IM session with the agent (2.0) |
| `secondlife:///app/agent/<agent_id>/inspect` | displays info dialog for agent (2.0) |
| `secondlife:///app/agent/<agent_id>/mention` | creates a link for the agent; the agent's viewer may notify them with sound and highlight if they hear the message. (7?) |
| `secondlife:///app/agent/<agent_id>/offerteleport` | displays the teleport offer dialog (2.0) |
| `secondlife:///app/agent/<agent_id>/pay` | displays the resident pay dialog (2.0) |
| `secondlife:///app/agent/<agent_id>/requestfriend` | displays the friendship offer dialog (2.0) |
| `secondlife:///app/agent/<agent_id>/mute` | add to block list (2.0) |
| `secondlife:///app/agent/<agent_id>/unmute` | remove from block list (2.0) |
| `secondlife:///app/agent/<agent_id>/username` | replaces the URL with the avatar's username e.g. "user.name" (2.4) |

### app/appearance

| URI | Description |
| --- | --- |
| `secondlife:///app/appearance/show` | displays the sidebar appearance tab (2.0) |

### app/balance

| URI | Description |
| --- | --- |
| `secondlife:///app/balance/request` | request a [L$](https://wiki.secondlife.com/wiki/L$) balance update from the server (2.0) |

### app/chat

| URI | Description |
| --- | --- |
| `secondlife:///app/chat/<channel>` | any channel number greater than 0[^public-channel] except [`DEBUG_CHANNEL`](/constants/DEBUG_CHANNEL/). |
| `secondlife:///app/chat/<channel>/<text>` | |

### app/classified

| URI | Description |
| --- | --- |
| `secondlife:///app/classified/<classified_id>/about` | open floater describing classified |

### app/event

| URI | Description |
| --- | --- |
| `secondlife:///app/event/<event_id>/about` | open floater describing event |

### app/experience

| URI | Description |
| --- | --- |
| `secondlife:///app/experience/<experience_id>/profile` | open floater describing experience |

### app/group

| URI | Description |
| --- | --- |
| `secondlife:///app/group/<group_id>/about` | open floater describing group |
| `secondlife:///app/group/create` | opens the create group dialog (1.20) |
| `secondlife:///app/group/<group_id>/inspect` | displays info dialog for group (2.0) |
| `secondlife:///app/group/list/show` | opens the list of groups to which the user belongs (1.20) |

In the wiki's indented list, **/inspect** sits one level below **/create**; it is shown here under `<group_id>`, like the agent form.

### app/help

| URI | Description |
| --- | --- |
| `secondlife:///app/help/<help_query>` | optional help topic (2.0) |

### app/inventory

| URI | Description |
| --- | --- |
| `secondlife:///app/inventory/<inventory_id>/select` | inventory offer (2.0) |
| `secondlife:///app/inventory/show` | opens the inventory sidebar tab (2.0) |

### app/keybinding

Every action below takes the form `secondlife:///app/keybinding/<action>`.

| Action | Description |
| --- | --- |
| **Movement controls** | |
| `/walk_to` | Walk to location mouse cursor points to |
| `/teleport_to` | Teleport to the location the mouse cursor points to, but not all locations allow direct teleportation, so you might be teleported closer to the destination instead |
| `/push_forward` | Move Forward |
| `/push_backward` | Move Backward |
| `/turn_left` | Left |
| `/turn_right` | Right |
| `/slide_left` | Strafe left |
| `/slide_right` | Strafe right |
| `/jump` | Jump/Up |
| `/push_down` | Down |
| `/run_forward` | Run Forward |
| `/run_backward` | Run Backward |
| `/run_left` | Run Left |
| `/run_right` | Run Right |
| `/toggle_run` | Toggle Run |
| `/toggle_fly` | Fly/Stop flying |
| `/toggle_sit` | Sit/Stand |
| `/stop_moving` | Stop Moving |
| **Camera controls** | |
| `/look_up` | Look Up |
| `/look_down` | Look Down |
| `/move_forward` | Camera Forward |
| `/move_backward` | Camera Backward |
| `/move_forward_fast` | Camera Forward Fast |
| `/move_backward_fast` | Camera Backward Fast |
| `/spin_over` | Camera Spin Over |
| `/spin_under` | Camera Spin Under |
| `/pan_up` | Camera Pan Up |
| `/pan_down` | Camera Pan Down |
| `/pan_left` | Camera Pan Left |
| `/pan_right` | Camera Pan Right |
| `/pan_in` | Camera Pan In |
| `/pan_out` | Camera Pan Out |
| `/spin_around_ccw` | Camera spins around counterclockwise |
| `/spin_around_cw` | Camera spins around clockwise |
| `/move_forward_sitting` | Camera Forward Sitting |
| `/move_backward_sitting` | Camera Backward Sitting |
| `/spin_over_sitting` | Camera Spin Over Sitting |
| `/spin_under_sitting` | Camera Spin Under Sitting |
| `/spin_around_ccw_sitting` | Camera spins around counterclockwise while sitting |
| `/spin_around_cw_sitting` | Camera spins around clockwise while sitting |
| **Editing controls** | |
| `/edit_avatar_move_backward` | Camera Backward |
| `/edit_avatar_move_forward` | Camera Forward |
| `/edit_avatar_spin_ccw` | Camera spins around avatar counterclockwise |
| `/edit_avatar_spin_cw` | Camera spins around avatar clockwise |
| `/edit_avatar_spin_over` | Camera spins over avatar |
| `/edit_avatar_spin_under` | Camera spins under avatar |
| **Sound and Media controls** | |
| `/script_trigger_lbutton` | Interact (Script LMB 🖰) |
| `/start_chat` | Start Chat |
| `/start_gesture` | Start Gesture |
| `/toggle_enable_media` | Play/Stop All Media |
| `/toggle_pause_media` | Play/Pause Media |
| `/voice_follow_key` | Voice |
| `/toggle_voice` | Toggle Voice |

**Control modes**

| Parameter | Description |
| --- | --- |
| `?mode=` | "first_person" or 0, "third_person" or 1, "edit_avatar" or 2, "sitting" or 3. |

e.g., `secondlife:///app/keybinding/push_forward?mode=sitting`

### app/login

| URI | Description |
| --- | --- |
| `secondlife:///app/login` | log in on launch. External and internal browsers. |

See below for query parameters; of course, values are URL-escaped. See [Login Query Parameters](#login-query-parameters).

### app/maptrackavatar

| URI | Description |
| --- | --- |
| `secondlife:///app/maptrackavatar/<friend_id>` | finds a friend on the world map, requires permission (2.4) |

### app/objectim

| URI | Description |
| --- | --- |
| `secondlife:///app/objectim/<object_id>` | displays an info dialog for the object sending this message (2.0) |
| `?name=<object_name>` | |
| `&owner=<owner_id>` | |
| `&groupowned=true` | (add if the object is deeded to a group) |
| `&slurl=<region>/<x>/<y>/<z>` | |

### app/openfloater

| URI | Description |
| --- | --- |
| `secondlife:///app/openfloater/<floater_name>` | e.g., "preferences", "people", "places", "picks", "destinations", "profile" |

### app/parcel

| URI | Description |
| --- | --- |
| `secondlife:///app/parcel/<parcel_id>/about` | open floater describing place |

### app/region

The wiki shows this form struck through.

| URI | Description |
| --- | --- |
| ~~`secondlife:///app/region/<region_id>/about`~~ | ~~information from the database about that region? list of parcels? covenant?~~ |

### app/remove_folder

*(see **wear_folder**)*

| URI | Description |
| --- | --- |
| `secondlife:///app/remove_folder/?folder_id=<inventory_folder_uuid>` | remove contents of specified folder from outfit (7.1) |
| `secondlife:///app/remove_folder/?folder_name=<library_folder_name>` | remove contents of named Library folder from outfit |

### app/search

| URI | Description |
| --- | --- |
| `secondlife:///app/search/<category>` | "all", "people", "places", "events", "groups", "wiki", "destinations", "classifieds" |
| `secondlife:///app/search/<category>/<search_term>` | opens a search floater with matching results (2.0) |

### app/sharewithavatar

| URI | Description |
| --- | --- |
| `secondlife:///app/sharewithavatar/<agent_id>` | open an inventory share/IM window for the agent (2.4) |

### app/teleport

| URI | Description |
| --- | --- |
| `secondlife:///app/teleport/<region_name>` | teleport instantly to this region, no dialog |
| `secondlife:///app/teleport/<region_name>/<local_x>` | optional X position, defaults to 128 |
| `secondlife:///app/teleport/<region_name>/<local_x>/<local_y>` | optional Y position, defaults to 128 |
| `secondlife:///app/teleport/<region_name>/<local_x>/<local_y>/<local_z>` | optional Z position, defaults to 0 |

### app/voicecallavatar

| URI | Description |
| --- | --- |
| `secondlife:///app/voicecallavatar/<agent_id>` | start a private voice session (2.4) |

### app/wear_folder

| URI | Description |
| --- | --- |
| `secondlife:///app/wear_folder/?folder_id=<inventory_folder_uuid>` | replace outfit with contents of specified folder (2.6) |
| `secondlife:///app/wear_folder/?folder_name=<library_folder_name>` | replace outfit with contents of named Library folder |

### app/worldmap

| URI | Description |
| --- | --- |
| `secondlife:///app/worldmap` | open the map with this destination selected (2.0) |
| `secondlife:///app/worldmap/<region_name>` | |
| `secondlife:///app/worldmap/<region_name>/<local_x>` | optional X position, defaults to 128 |
| `secondlife:///app/worldmap/<region_name>/<local_x>/<local_y>` | optional Y position, defaults to 128 |
| `secondlife:///app/worldmap/<region_name>/<local_x>/<local_y>/<local_z>` | optional Z position, defaults to 0 |

### Possible extensions

This could be extended to things like:

| URI | Description |
| --- | --- |
| `/app/event/<event_id>/subscribe` | to register for notifications |
| `/app/parcel/<parcel_id>/teleport` | to teleport to a specific location |

## Login Query Parameters

| Parameter | Description |
| --- | --- |
| `first` | the account first name |
| `last` | the account last name |
| `session` | the secure session id |
| `location` | login location, format TBD, optional |

## Second Life Wiki formatting

When adding `secondlife://` links using the above syntax to a Second Life Wiki page, you can enclose your links in squared brackets (thus turning them into a standard Wiki external link), which also gives you the chance of changing the displayed text. Example:

```text
[secondlife:///app/objectim/190f571d-fdf1-8f6c-4e9d-973e9b5e0566?name=ObjectName&owner=c93c3129-2250-4c79-a5f7-8c755ca2707e&groupowned=true&slurl=Location/128/128/27 ObjectName]
```

will display as a link labelled "ObjectName".

In this case you will also need to ensure the object name has been escaped.

Sometimes, having the link clickable (which will attempt to launch the Second Life Viewer to open it), is not desirable. Instead, to display the [URI](https://en.wikipedia.org/wiki/URI) itself without making it clickable, surround it with `<nowiki>...</nowiki>`. For example:

```text
<nowiki>secondlife:///app/group/8db35111-979b-14a7-6a74-b47be86ce04f/about</nowiki>
```

will display as `secondlife:///app/group/8db35111-979b-14a7-6a74-b47be86ce04f/about` (not clickable), whereas

```text
secondlife:///app/group/8db35111-979b-14a7-6a74-b47be86ce04f/about
```

will display the whole link and make it clickable.

## LSL Examples

```lsl
string Who(key id)
{
    return "secondlife:///app/agent/" + (string)id + "/inspect";
}

default
{
    touch_start(integer num)
    {
        llSay(0, "Touched by " + Who(llDetectedKey(0)) + "." );
    }
}
```

[^rfc3986]: Two slashes for the beginning of the authority section — for HTTP requests, this is the name of the server (optionally with the port) — here it's empty; followed by a third slash, terminating the authority section. See [https://www.rfc-editor.org/rfc/rfc3986#section-3.2](https://www.rfc-editor.org/rfc/rfc3986#section-3.2) . Because Second Life is omitting the 'authority' part, that section is empty, thus the three slashes; note that Second Life is *not* the only example of an 'authorityless' communications protocol; there are plenty of other examples.

[^public-channel]: The public (chat) channel, also written as [`PUBLIC_CHANNEL`](/constants/PUBLIC_CHANNEL/)

*Adapted from the Second Life Wiki [Viewer URI Name Space](https://wiki.secondlife.com/wiki/Viewer_URI_Name_Space), by Second Life Wiki contributors, under [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/).*

---

From lsl.dev: https://lsl.dev/features/viewer-uris/reference/
