The restraint RLV relay is the standard ARES method of interacting with RLV furniture using the RLV Relay Specification. It is a multi-source relay that integrates with the ARES permissions system.

restraint is not installed by default, although it is part of the Differentiation feature set for some main controller models.


To install restraint, visit a region with a trusted primary package mirror, and run the following commands:

  1. @ax update
  2. @ax install restraint

The installation procedure will take around 10–20 seconds. After installation is complete, enable the relay with the command:

restraint on

Since restraint uses pipes to listen for incoming RLV requests, you can verify that the relay is listening for incoming messages with the input debug command, which will report the status of current pipes:

@input debug
· 00000000-0000-0000-0000-000000000010 · 0 · 2 · · · 00000000-0000-0000-0000-000000000020 · 0 · 2 · · · 00000000-0000-0000-0000-000000000100 · 0 · 2 · · · 00000000-0000-0000-0000-000000000001 · 309 · 1 · _input · d69ca06e-aa22-49e4-86e1-42677e26f3f5 · 43524553-5841-4e41-4455-48414e444c45 · 311 · 1 · _pkg · 00000000-0000-0000-0000-000000000000 · 000369b6-0003-69b6-0003-69b6000369b6 · 312 · 1 · nav · 00000000-0000-0000-0000-000000000000 · 10000000-0000-0000-0000-001812221819 · 314 · 1 · restraint · 00000000-0000-0000-0000-000000000000 · 00000000-0000-0000-0000-000000000b01 · 0 · 8 · · 00000000-0000-0000-0000-000000000b02 · 00000000-0000-0000-0000-000000000b02 · 0 · 4 · _input input · d69ca06e-aa22-49e4-86e1-42677e26f3f5

The emphasized line is the RLV relay's input pipe, which monitors the RLV relay channel (-1812221819) for incoming messages. The UUID of the pipe (10000000-0000-0000-0000-001812221819) is always the same, and was chosen as a mnemonic.

In the unlikely event that the io daemon is reset and the input handler is lost, restraint should recreate it, just like _input recreates the chat redirect without intervention. However, technology is never perfect, so you may recreate it manually with:

@restraint reset

Other restraint command options

@restraint off
Disables the RLV relay.
@restraint toggle
Switches the RLV relay between on and off states.
@restraint auto on
Switches the RLV relay into auto-accept mode, in which all security mechanisms are bypassed, and even objects belonging to users who have been banned from the unit may apply RLV restrictions.
@restraint auto off
Switches the RLV relay into normal mode. The restrain security rule governs who may apply RLV restraints through the relay.
@restraint auto toggle
Toggles between the above two behaviors.
@restraint safeword
Attempts to shut down all RLV interactions. This may also be abbreviated to just @safeword by the unit.

The 'restrain' security rule

Since restraint is not part of the base OS, its dedicated security rule, restrain, is not in the menus. It must be set manually using the command line:

@security restrain 0
Automatically rejects any attempt to activate the RLV relay.
@security restrain 1
Permits all RLV relay interactions automatically, except those initiated by objects belonging to banned avatars. (The "better" auto mode.)
@security restrain 2
Normal consent behavior—bans are enforced and objects belonging to previously-authorized guests are automatically permitted. Objects owned by unfamiliar avatars generate a prompt for the unit.
@security restrain 3
Only objects owned by registered users may initiate RLV relay sessions; others are ignored.
@security restrain 4
Only objects owned by managers and owners may initiate RLV relay sessions; others are ignored.
@security restrain 5
Only objects owned by the unit's owners may initiate RLV relay sessions; others are ignored.
@security restrain 6
Only objects owned by the unit itself may initiate RLV relay sessions; others are ignored.


Although rare, cases where restraint crashes during startup (e.g. on TP) have been known to occur due extremely large session tables being stored in the database. If repeated crashes affect your unit, try the commands:

  1. @db set restraint.session {}
  2. @reset restraint

This should restore normal function.


In the event you no longer want the restraint package on your system, run:

  1. @ax remove restraint
  2. @input restart

This will remove the RLV relay, and then restart the io daemon to ensure its input handler is properly disposed of.