Save VRChat Avatar Toggle States

The Saved option on a custom Expression Parameter tells VRChat to restore that parameter when the same avatar is loaded again. Use it for wearer customizations that should persist, such as an outfit selection, accessory visibility, or a preferred color control.

Saved, Default, and Synced control different parts of the behavior. Configure each one deliberately and test the avatar after leaving and returning to it.

Saved Toggle Configuration

Set one consistent Bool across the Expression Parameters asset, Expressions Menu, and Animator Controller.

  1. Set Default to the state used when the avatar is reset or has no stored value.
  2. Enable Saved when VRChat should restore the wearer's last value.
  3. Enable Synced only when other players need the current value over the network.
Saved and Synced are independent

Saved persistence is local to the wearer. Synced sends the current parameter state to other players. A parameter can be saved without being synced, synced without being saved, both, or neither.

Video Walkthrough

Use DedZedOffishal's video for the Unity workflow, then use the persistence matrix and reload tests below.

Creator: DedZedOffishal
Video: Saving Toggles | VRC Avatars for Dummies

What Each Parameter Setting Controls

Setting Controls Does not control
Default Value used when the avatar is reset or no saved value is restored Whether the value persists
Saved Whether VRChat restores the wearer's stored value when the avatar loads Whether remote players receive it
Synced Whether VRChat sends the current value to other players Whether it survives loading the avatar again

VRChat stores saved parameters locally and per avatar ID. Two uploads with different avatar IDs do not share one saved parameter state.

Use the Four Persistence Modes

Saved Synced Behavior Example
Off Off Resets to Default and remains local Local editor or wearer-only helper state
Off On Resets to Default but remote players receive changes Temporary prop or short-lived mode
On Off Restores locally but is not sent to other players Wearer-only preference
On On Restores locally and remote players receive the active value Persistent outfit, accessory, or material choice

The toggle's visual effect may still be visible remotely only when the controlling parameter and animation are configured correctly. Saved does not replace the network sync setting.

Configure a Saved Bool

This example uses Clothing/Hoodie.

In the VRC Expression Parameters asset:

Field Value
Name Clothing/Hoodie
Type Bool
Default false if the hoodie should begin off after reset
Saved On
Synced On when other players should see the hoodie state

The / in the name is an organizational separator supported by VRChat. The same full name, including capitalization and slash, must appear in the Animator Controller.

A synced Bool uses one bit of the avatar's 256-bit synchronized custom-parameter budget.

Configure the Menu Toggle

Add a control to the Expressions Menu assigned to the avatar:

Menu field Value
Name Hoodie
Type Toggle
Parameter Clothing/Hoodie

Current VRChat SDK versions treat a Bool Toggle as enabled when activated and false when deactivated. The editor hides the Value field for Bool targets because no alternate activation value is valid.

The menu controls the parameter. The Saved checkbox remains on the Expression Parameters asset, not the menu control.

Align the Default State

Three places must describe the same initial appearance:

Scene or prefab state
        │
        ├── Expression Parameter Default
        │
        └── Animator layer default state

For a hoodie that should be off after an avatar reset:

Location Expected state
Hoodie GameObject in the uploaded prefab Inactive
Clothing/Hoodie Default False
FX layer default state Hoodie Off

For an on-by-default feature, reverse all three values.

Saved values can override this default when the avatar loads. The default remains essential because it is the reset value and the value used before a saved choice exists.

Build Reversible Animator Transitions

The FX Animator needs exits in both directions:

Hoodie Off
  └── Clothing/Hoodie == true ──► Hoodie On

Hoodie On
  └── Clothing/Hoodie == false ─► Hoodie Off

Disable Has Exit Time on both transitions so the Bool can change the state immediately. Assign an Off clip that holds the hoodie inactive and an On clip that holds it active.

VRChat advises treating parameters as values that can change at any time. A one-way transition can leave the Animator stuck when a saved or synced value changes.

Choose What Should Persist

Enable Saved when restoring the previous state is part of the feature:

Feature Saved behavior
Outfit selection Returns to the wearer's selected outfit
Accessory visibility Restores the preferred accessory state
Material or color choice Restores the chosen appearance
Accessibility setting Restores the wearer's selected presentation

Leave Saved off when the parameter represents a temporary event:

Feature Unsaved behavior
Momentary prop Returns to the uploaded default
One-session interaction mode Does not remain armed on the next load
Debug control Does not silently persist after testing
Contact receiver output Follows the Contact system rather than stored persistence
PhysBone generated parameter Follows current grabbing, posing, angle, stretch, or squish state

Contact Receiver parameters do not need entries in the VRC Expression Parameters asset. PhysBone-generated parameters also update from the component on each client. Do not add Saved entries for those live Avatar Dynamics outputs.

Cross-Platform Avatar Versions

When one avatar ID has PC and mobile versions, VRChat synchronizes custom parameters by their list position and type rather than by name.

Use the same VRC Expression Parameters asset for both versions. If a mobile version does not render the hoodie, keep Clothing/Hoodie in the same position and with the same Bool type so later parameters do not shift into the wrong slots.

PC list Mobile list
1. Clothing/Hoodie — Bool 1. Clothing/Hoodie — Bool
2. Hair/Color — Float 2. Hair/Color — Float
3. Props/Glasses — Bool 3. Props/Glasses — Bool

Changing the list order or type between platform versions can synchronize the wrong values.

Run the Persistence Test

Test a private upload with a value different from the Default:

Step Expected result when Saved is on
Wear the avatar Default appears if no value has been stored
Turn the toggle on Animator enters the On state
Switch to another avatar Current value is stored locally
Return to the test avatar Previous toggle value is restored
Change to another world Previous toggle value remains available
Close and reopen VRChat Previous toggle value is restored when the avatar loads
Reset the avatar Parameter returns to its configured Default
Ask another user to observe Current value is visible remotely only when Synced is on

Repeat the same sequence with Saved off. After the avatar reloads, the parameter should use its Default instead of the previous value.

Test a Changed Default

Saved data can conceal a new uploaded Default during testing:

  1. Record the currently stored value.
  2. Upload the avatar with a different Default.
  3. Wear the avatar again.
  4. If Saved is enabled, expect the stored value to take precedence.
  5. Reset the avatar to evaluate the new Default.
  6. Test again with a value different from the new Default.

This separates “the new default is wrong” from “the existing saved value was restored.”

Troubleshooting

Help! The toggle resets when I return to the avatar.

Confirm Saved is enabled on the correct parameter in the VRC Expression Parameters asset assigned to the Avatar Descriptor. Then verify the menu and Animator use the same full parameter name and type.

Help! My new Default does not appear after uploading.

An existing saved value can override the new Default when the avatar loads. Reset the avatar to return the parameter to its configured Default before judging the upload.

Help! The menu shows on but the object is off.

Check the FX transition conditions and animation clips. The true condition must lead to the On clip, and the false condition must lead back to the Off clip.

Help! Other players do not see the saved choice.

Enable Synced for the parameter when remote users need the value. Saved only restores the wearer's local value; it does not send that value over the network.

Help! The PC and mobile versions show different toggles.

Use the same Expression Parameters asset for both versions. VRChat matches cross-platform parameters by list position and type, so inserted, removed, or reordered entries can misalign the values.

Help! A temporary effect keeps returning.

Disable Saved for that effect and set a suitable Default. Temporary effects should return through their reversible Animator transition rather than rely on stored persistence.

Help! The saved value changes but the Animator gets stuck.

Confirm the FX layer has both true and false transitions with Has Exit Time disabled. A saved parameter can restore either value when the avatar loads, so both states need a valid exit.

Help! I saved an Avatar Dynamics output parameter.

Remove the unnecessary Expression Parameters entry. Contact Receiver and PhysBone-generated outputs are supplied by those components and should represent the current interaction, not a stored menu preference.

Official VRChat References

Related Avatar Guides

Topics: saved parameters, toggle persistence, Expressions Menu, avatar customization