¿Confuso con AppData
en Windows? Aquí tienes una guía práctica y a fondo para entender qué guardan exactamente Roaming, Local y LocalLow, cuándo conviene usarlas, cómo limpiarlas con seguridad y qué deben hacer usuarios, soporte y desarrolladores.
Resumen de la pregunta
¿Cuál es la diferencia entre las carpetas Local, LocalLow y Roaming bajo C:\Users\%user%\AppData
y qué tipo de datos se guarda en cada una? En pocas palabras, las tres guardan datos por usuario, pero cambian su ámbito (si viajan con el usuario o no), su relación con el equipo y el nivel de integridad con el que la aplicación puede escribir.
Respuesta y solución en una frase
Roaming es para configuraciones pequeñas que pueden sincronizarse en dominios; Local es para datos voluminosos o dependientes del equipo (no viajan); LocalLow es para procesos en modo restringido (integridad baja) que no deben escribir en las otras dos.
Comparativa rápida
Carpeta | Ruta típica | ¿“Roaming” / sincroniza? | Datos recomendados | Cuándo usarla |
---|---|---|---|---|
Roaming | C:\Users\%user%\AppData\Roaming (%APPDATA% ) | Sí, en dominios (perfiles móviles / redirección). En equipos domésticos normalmente no. | Preferencias ligeras, listas recientes, plantillas pequeñas, perfiles de usuario poco pesados. | Cuando la configuración debe acompañar al usuario en distintos equipos del dominio. |
Local | C:\Users\%user%\AppData\Local (%LOCALAPPDATA% ) | No; permanece en el equipo. | Cachés, archivos temporales, bases locales grandes, descargas de componentes, miniaturas e índices. | Cuando los datos no deben sincronizarse por tamaño o dependencia del hardware/sistema. |
LocalLow | C:\Users\%user%\AppData\LocalLow (shell:LocalAppDataLow ) | No; local como Local. | Datos de apps en modo protegido o sandbox (integridad baja), visores restringidos, navegadores endurecidos. | Cuando la app tiene permisos limitados y no puede escribir en Local o Roaming. |
Por qué existen tres carpetas
Windows separa los datos de aplicación por usuario y por contexto para equilibrar portabilidad, rendimiento y seguridad:
- Portabilidad (Roaming): en entornos corporativos con Active Directory, los administradores pueden habilitar perfiles móviles o redirigir carpetas. La carpeta Roaming puede copiarse a un servidor y reaplicarse al iniciar sesión en otro equipo, trasladando preferencias y ajustes. Esto evita volver a configurar la aplicación en cada puesto de trabajo.
- Rendimiento y tamaño (Local): las cachés, índices y archivos pesados no deben copiarse por red en cada inicio/cierre de sesión. Guardarlos en Local reduce tiempos de logon/logoff y congestión en la red.
- Seguridad (LocalLow): algunos procesos se ejecutan con integridad baja (sandbox), por ejemplo navegadores en modo protegido o visores de documentos restringidos. Para minimizar el daño en caso de compromiso, esos procesos escriben en LocalLow, aislando sus datos del resto.
Cómo decide Windows dónde escribir
El sistema y los frameworks exponen ubicaciones estándar para cada tipo de datos. Las aplicaciones bien diseñadas no escriben rutas “a mano”, sino que consultan las carpetas conocidas:
- .NET/WinForms/WPF:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
→ Roaming;LocalApplicationData
→ Local;CommonApplicationData
→C:\ProgramData
(datos por equipo, no por usuario). - Win32:
SHGetKnownFolderPath
con Known Folder IDs comoFOLDERIDRoamingAppData
,FOLDERIDLocalAppData
yFOLDERID_LocalAppDataLow
. - UWP/WinUI:
Windows.Storage.ApplicationData
conLocalFolder
,LocalCacheFolder
yRoamingFolder
.
Además, el Mandatory Integrity Control de Windows asigna niveles de integridad (bajo, medio, alto). Los procesos de integridad baja no pueden escribir en ubicaciones de integridad media, de ahí que utilicen LocalLow.
Cuándo usar cada carpeta
Para usuarios y soporte
- Usa Roaming para configuraciones que quieras conservar al cambiar de equipo dentro del dominio: preferencias de apps, paneles personalizados, listas recientes, diccionarios personalizados, firmas de Outlook, plantillas ligeras.
- Usa Local para cachés y datos generados automáticamente: miniaturas, indexadores, paquetes descargados, catálogos grandes, bases locales (por ejemplo, catálogos de fotos o caches de navegadores).
- Usa LocalLow cuando la aplicación esté en modo protegido o restringido; no lo fuerces manualmente salvo que la app lo requiera.
Para desarrolladores
- Roaming: preferencias pequeñas (key-value), perfiles, archivos de configuración. Evita exceder “decenas” de MB; pon límites y estrategias de compresión/rotación.
- Local: todo lo que sea grande, recompilable o dependiente del entorno (cachés, paquetes, blobs, bases SQLite, logs voluminosos). Proporciona un botón de “Vaciar caché” y maneja recreación de datos.
- LocalLow: usa cuando tu proceso opere con integridad baja (extensiones de navegador endurecidas, visores seguros). Mantén trayectorias separadas y evita mezclar formatos entre Local y LocalLow.
Rutas y accesos rápidos
- Abrir Roaming desde el Explorador: escribe
%APPDATA%
. - Abrir Local:
%LOCALAPPDATA%
. - Abrir LocalLow:
shell:LocalAppDataLow
.
Variables de entorno útiles: %USERPROFILE%
, %TEMP%
/%TMP%
(suelen apuntar a Local\Temp
), %ProgramData%
para datos por equipo.
Ejemplos reales por aplicación
- Microsoft Office: firmas de Outlook en
%APPDATA%\Microsoft\Signatures
; plantillas de Word (comoNormal.dotm
) en%APPDATA%\Microsoft\Templates
; diccionario personalizado en%APPDATA%\Microsoft\UProof
. Todo esto viaja con el usuario si hay roaming. - Navegadores:
- Perfiles y cachés en
%LOCALAPPDATA%
(por ejemplo,Google\Chrome\User Data
,Microsoft\Edge\User Data
), porque son pesados. - Componentes de modo protegido pueden usar
LocalLow
para aislar datos de procesos restringidos.
- Perfiles y cachés en
- Editores y herramientas: VS Code guarda extensiones y cachés en
%USERPROFILE%\.vscode
y%APPDATA%\Code
(Roaming) para configuraciones, mientras que cachés pesados viven en%LOCALAPPDATA%
. - Aplicaciones multimedia: catálogos, previsualizaciones y cachés de proxies se ubican en
Local
por tamaño; presets ligeros enRoaming
para portabilidad.
Buenas prácticas de mantenimiento
- Prioriza limpiar Local: subcarpetas como
Temp
, cachés de navegador y de aplicaciones. Muchas apps regeneran automáticamente estos archivos. - Evita borrar “a ciegas” en Roaming: contiene configuraciones valiosas (plantillas, firmas, perfiles). Haz copia previa si no estás seguro.
- Con LocalLow: si lo limpias, algunas apps en modo protegido pueden restablecer ajustes o volver a pedir permisos. Tenlo en cuenta.
- En entornos corporativos: respeta cuotas de perfil y políticas de redirección definidas por TI; no muevas manualmente datos entre carpetas sin validarlo.
Guía rápida de decisión
Si debe viajar con el usuario y pesa poco → Roaming.
Si es pesado o dependiente del equipo → Local.
Si el proceso está en sandbox o modo protegido → LocalLow.
Scripts y fragmentos útiles
PowerShell para abrir y medir tamaño
$roaming = $env:APPDATA
$local = $env:LOCALAPPDATA
$low = (New-Object -ComObject Shell.Application).NameSpace('shell:LocalAppDataLow').Self.Path
Abrir en el Explorador
ii \$roaming
ii \$local
ii \$low
Función para medir tamaño de carpeta
function Get-FolderSizeMB(\$path){
"{0\:N2}" -f ((Get-ChildItem -LiteralPath \$path -Recurse -Force -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1MB) + " MB"
}
Write-Host "Roaming: " (Get-FolderSizeMB \$roaming)
Write-Host "Local: " (Get-FolderSizeMB \$local)
Write-Host "LocalLow: " (Get-FolderSizeMB \$low)
PowerShell para limpieza segura de temporales en Local
$temp = Join-Path $env:LOCALAPPDATA 'Temp'
Write-Host "Limpiando $temp ..."
Get-ChildItem -LiteralPath $temp -Force -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-3) } |
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
.NET (C#) para ubicar carpetas correctas
using System;
using System.IO;
class Paths
{
static void Main()
{
string roaming = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string local = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string common = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); // C:\ProgramData```
Console.WriteLine($"Roaming: {roaming}");
Console.WriteLine($"Local: {local}");
Console.WriteLine($"Common: {common}");
// Ejemplo: guardar preferencias pequeñas en Roaming
Directory.CreateDirectory(Path.Combine(roaming, "MiApp"));
File.WriteAllText(Path.Combine(roaming, "MiApp", "settings.json"), "{{}}");
}
```
}
Win32 con Known Folders
// FOLDERID_RoamingAppData: 3EB685DB-65F9-4CF6-A03A-E3EF65729F3D
// FOLDERID_LocalAppData: F1B32785-6FBA-4FCF-9D55-7B8E7F157091
// FOLDERID_LocalAppDataLow: A520A1A4-1780-4FF6-BD18-167343C5AF16
PWSTR path = nullptr;
SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &path);
// ...usar 'path' y luego:
CoTaskMemFree(path);
UWP/WinUI
var roaming = Windows.Storage.ApplicationData.Current.RoamingFolder;
var local = Windows.Storage.ApplicationData.Current.LocalFolder;
var cache = Windows.Storage.ApplicationData.Current.LocalCacheFolder;
Errores comunes que conviene evitar
- Guardar cachés grandes en Roaming: impacta el tiempo de inicio/cierre de sesión y puede sobrepasar cuotas.
- Escribir configuraciones críticas en Local: al cambiar de equipo se pierden y el usuario cree “que la app olvidó todo”.
- Dar por hecho que Roaming siempre viaja: en equipos domésticos sin dominio, Roaming no se sincroniza por sí mismo.
- Limpiar sin copia: si tienes dudas, respalda
Roaming<Proveedor><App>
antes de borrar. - Mezclar formatos entre Local y LocalLow: separa claramente la ubicación y la compatibilidad de versiones.
Orientación para entornos corporativos
Si administras flotas de Windows en empresa:
- Redirección de AppData (Roaming): evalúa cuidadosamente; no todas las apps toleran bien que Roaming esté en red. Considera listas de inclusión/exclusión y cuotas estrictas.
- Perfiles móviles vs. perfiles locales: limita el tamaño de Roaming con políticas y documentación para equipos de usuario. Educa a los proveedores de software internos a no guardar “blobs” en Roaming.
- VDI/Citrix/RDS: usa perfiles portátiles o perfiles FSLogix y excluye caches pesadas (Local) para mantener tiempos de inicio aceptables.
- Resiliencia: proporciona rutas de fallback cuando la red no esté disponible; que la app degrade funcionalmente pero no pierda datos.
Qué suele haber dentro de cada carpeta
Roaming
- Archivos de configuración (
.json
,.xml
), perfiles de usuario, plantillas y preferencias personales. - Elementos de productividad: snippets, firmas, diccionarios, listas MRU (Most Recently Used) ligeras.
Local
- Subcarpetas como
Temp
,Microsoft\Windows\INetCache
, compilaciones temporales, descargas de componentes. - Carpetas específicas de apps (por ejemplo,
Packages
para apps modernas y datos auxiliares pesados).
LocalLow
- Datos de navegadores o visores en modo protegido, almacenes aislados de extensiones, trazas de sandbox.
Checklist rápido para decidir dónde guardar
- ¿El dato es esencial para la experiencia del usuario en otros equipos? → Roaming.
- ¿El dato puede regenerarse o depende del equipo? → Local.
- ¿El proceso corre con integridad baja o en sandbox? → LocalLow.
- ¿Cuánto pesa ahora y cuánto puede crecer? Mantén Roaming pequeño.
- ¿Necesitas limpieza periódica? Coloca datos purgables en Local y expón controles al usuario.
Procedimiento seguro de limpieza
- Audita tamaño de Roaming, Local y LocalLow con el script anterior o con el Explorador.
- Respalda Roaming antes de tocarlo (carpetas de la app crítica).
- Limpia Local empezando por
Temp
y cachés identificadas. Cierra la app antes de borrar. - Verifica que la app arranque y regenere las cachés sin errores.
- Revisa LocalLow solo si hay problemas con procesos en modo protegido.
Preguntas frecuentes
¿Roaming siempre sincroniza? No. En casa, sin dominio ni políticas, Roaming es solo otra carpeta local. En empresas, TI puede habilitar perfiles móviles o redirección.
¿Puedo mover manualmente datos de Local a Roaming? No es recomendable. La aplicación debe soportarlo y conocer la ubicación; forzarlo puede romper actualizaciones o permisos.
¿Es seguro borrar Local\Temp? Generalmente sí si la app está cerrada, pero algunos instaladores usan archivos bloqueados temporalmente. El script de ejemplo salta errores y archivos en uso.
¿En qué se diferencia %ProgramData%
? Es para datos por equipo (no por usuario). Úsalo para recursos compartidos entre usuarios, como catálogos o configuraciones globales.
¿Qué límite de tamaño debo respetar en Roaming? No hay un número universal; la práctica común es mantenerlo en el orden de decenas de MB como máximo, especialmente en entornos con perfil móvil.
¿Qué pasa si borro LocalLow? Las apps en sandbox pueden perder preferencias locales y pedir permisos de nuevo. No debería comprometer datos críticos si están bien diseñadas.
Consejos de diseño para desarrolladores
- Idempotencia: si borras cachés de Local, que la app se recupere sola y regenere el estado.
- Separación clara: configura rutas distintas para preferencias (Roaming) y datos pesados (Local). Documenta tamaños esperados.
- Telemetría y límites: monitoriza el crecimiento de Roaming; rota archivos de log y establece cotas.
- Compatibilidad de versión: versiona esquemas de archivos en ambas ubicaciones para permitir rollback.
- Privacidad: evita almacenar secretos en texto plano; usa el almacén de credenciales o DPAPI.
Resumen práctico
- Roaming para preferencias pequeñas que deben “viajar”.
- Local para cachés y datos grandes ligados al equipo.
- LocalLow para procesos restringidos/sandbox.
Si operas en empresa, coordina con TI por cuotas y redirección. Si eres usuario avanzado, limpia primero Local y evita tocar Roaming sin copia. Si desarrollas, usa las APIs del sistema para obtener las rutas correctas y diseña con portabilidad, rendimiento y seguridad en mente.
Accesos rápidos
- Abrir Roaming:
%APPDATA%
- Abrir Local:
%LOCALAPPDATA%
- Abrir LocalLow:
shell:LocalAppDataLow
Conclusión
Usa Roaming para que la configuración “viaje” con el usuario en dominios, Local para datos grandes o vinculados al equipo, y LocalLow cuando la aplicación opere con permisos restringidos. Esta separación mejora la experiencia del usuario, acelera los inicios de sesión y refuerza la seguridad del sistema.