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.
Set one consistent Bool across the Expression Parameters asset, Expressions Menu, and Animator Controller.
- Set Default to the state used when the avatar is reset or has no stored value.
- Enable Saved when VRChat should restore the wearer's last value.
- Enable Synced only when other players need the current value over the network.
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:
- Record the currently stored value.
- Upload the avatar with a different Default.
- Wear the avatar again.
- If Saved is enabled, expect the stored value to take precedence.
- Reset the avatar to evaluate the new Default.
- 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
- Expressions Menu and Controls
- Animator Parameters
- State Behaviors
- Contacts
- PhysBones
- SDK 3.10.2 expression editor changes
Related Avatar Guides
- Toggle an Avatar Object
- Toggle PhysBones from the Expressions Menu
- RGB Radial Slider
- Material Swap
- Exclusive Tags
- Avatar Creation Guides
Topics: saved parameters, toggle persistence, Expressions Menu, avatar customization