AD SPACE AVAILABLE · BRAND PARTNERS WELCOME

Relocating Steam Deck Internal Shader Cache and Compatdata to MicroSD via Btrfs Symlinks

365Finds Editorial
Indexed 11,430 Wiki articles

Put 365 Wiki to work with your AI

Copy the prompt below, paste it into the AI you already use, then ask your question.

Download full Skill

Try it with the prompt first. If you use 365 Wiki often, install the full 365Wiki Skill so you do not have to paste it again. No regular AI? Gemini or Microsoft Copilot on the web will work.

365Wiki Skill

Why Steam Deck Internal Storage Fills Up Rapidly

On SteamOS (Arch Linux-based), every installed Windows game creates two hidden directories inside the internal eMMC/NVMe SSD: compatdata/[AppID] (a dedicated Proton WINE prefix containing virtual Windows registry hives and dependencies) and shadercache/[AppID] (pre-compiled Vulkan and DXVK shader binaries). Even when large game libraries are installed directly onto external MicroSD cards, these companion caches remain on internal storage by default, consuming 30GB to 60GB of non-game storage.

Directory NameFile ContentsAverage Size per GameSafe to Delete Directly?
compatdata/[AppID]Virtual C: drive, local game saves, DirectX runtimes500 MB - 3.5 GBNo; local saves not synced to cloud will be lost forever
shadercache/[AppID]Pre-compiled DXVK / VKD3D shader binaries1 GB - 8 GBYes; Steam will re-download, but causes launch stutter
Orphaned AppIDsLeftover prefixes of uninstalled titlesVariable (can exceed 20GB)Yes; completely safe to prune using zshader or Decky

Step 1: Identifying Cache Hogs via Desktop Mode Terminal

Switch to Desktop Mode (Power > Switch to Desktop) and open Konsole terminal to audit cache space:

du -sh ~/.local/share/Steam/steamapps/shadercache/* | sort -h
du -sh ~/.local/share/Steam/steamapps/compatdata/* | sort -h

Cross-reference suspicious AppID folder numbers against SteamDB (e.g., 1091500 for Cyberpunk 2077) to determine which specific games are consuming internal drive capacity.


Step 2: Creating External Storage Directory Structure

To relocate caches to your formatted MicroSD card (mounted under /run/media/mmcblk0p1/ or similar):

  1. Create target directories on the MicroSD card:
mkdir -p /run/media/mmcblk0p1/SteamDeck_ExternalCaches/shadercache
mkdir -p /run/media/mmcblk0p1/SteamDeck_ExternalCaches/compatdata
  1. Move target game folder to MicroSD (example using AppID 1091500):
mv ~/.local/share/Steam/steamapps/shadercache/1091500 /run/media/mmcblk0p1/SteamDeck_ExternalCaches/shadercache/
mv ~/.local/share/Steam/steamapps/compatdata/1091500 /run/media/mmcblk0p1/SteamDeck_ExternalCaches/compatdata/

Step 3: Creating Linux Symbolic Links (Symlinks)

Link the external MicroSD directory back to the internal path expected by Proton and Steam:

ln -s /run/media/mmcblk0p1/SteamDeck_ExternalCaches/shadercache/1091500 ~/.local/share/Steam/steamapps/shadercache/1091500
ln -s /run/media/mmcblk0p1/SteamDeck_ExternalCaches/compatdata/1091500 ~/.local/share/Steam/steamapps/compatdata/1091500

Verify the symlink creation:

ls -ld ~/.local/share/Steam/steamapps/shadercache/1091500

The terminal should output a link pointer arrow indicating that the internal path resolves seamlessly to the MicroSD mount point.


Step 4: Automating with Decky Loader Storage Cleaner

For users who prefer avoiding manual terminal scripts:

  1. Install Decky Loader in Desktop Mode via the official curl installer.
  2. Return to Gaming Mode and open the Decky plugin store.
  3. Install Storage Cleaner.
  4. Scan internal storage: it automatically identifies orphaned prefixes belonging to games no longer installed, allowing single-click reclamation of gigabytes of disk space without risking cloud-synced game configurations.