Limpiador y optimizador de espacio en disco de alto rendimiento y grado profesional enfocado a entornos de desarrollo de software y contenedores Docker.
Características • Arquitectura • Capas de Seguridad • Instalación • Uso CLI • Interfaz Gráfica • Docker • Compilación
Durante el ciclo de desarrollo diario con múltiples pilas tecnológicas (Node.js, Python, Java/Kotlin, Rust, Go, C/C++, .NET y Docker), los entornos de compilación y los gestores de paquetes acumulan decenas o cientos de gigabytes en artefactos prescindibles (node_modules, .venv, target/, cachés de compilación, contenedores huérfanos...).
CleanStack ha sido diseñado desde cero por Luis Lázaro Pimentel como una solución nativa, rápida y ante todo segura:
- Rendimiento extremo: Escaneo multihilo (
ThreadPoolExecutor) optimizado para SSDs NVMe y CPUs multinúcleo con paralelismo en el cómputo de tamaños. - Seguridad integral: Verificación del estado de Git (
git status --porcelain), protección de rutas críticas del sistema y uso de la Papelera de Reciclaje (send2trash) para evitar borrados irreversibles accidentales. - Experiencia dual: Potente CLI con tablas y barras de progreso interactivas con
Rich, o GUI moderna en modo oscuro nativo conCustomTkinter. - Zero-Spam & Anti-Falsos Positivos: Carpetas ambiguas como
target/odist/solo se consideran prescindibles si existen marcadores probatorios en el proyecto (ej.Cargo.toml,package.jsonopom.xml).
CleanStack adopta una arquitectura desacoplada en capas donde el núcleo del motor (Engine Core) es totalmente independiente de la interfaz gráfica y de la consola:
graph TD
subgraph UI_Layer ["Capa de Presentación"]
CLI["CLI (Rich Console & Tables)"]
GUI["GUI (CustomTkinter Dark Slate/Indigo)"]
end
subgraph Core_Engine ["Engine Core (Backend)"]
Scanner["Multi-Threaded Scanner<br/>(ThreadPoolExecutor + Work-Stealing)"]
RuleSet["Rules & Marker Engine<br/>(Node, Python, Java, Rust, Docker...)"]
GitCheck["Git Safety Checker<br/>(git status & ls-files porcelain)"]
Cleaner["Safe Purge Engine<br/>(send2trash + Path Protection)"]
DockerClean["Docker Engine SDK<br/>(Containers, Images, Cache, Volumes)"]
end
subgraph Config_Utils ["Utilidades & Configuración"]
Config["Cascada YAML & .cleanignore"]
Formatters["Formatters (Bytes, Tiempos, Rutas)"]
end
CLI --> Scanner
CLI --> Cleaner
CLI --> DockerClean
GUI --> Scanner
GUI --> Cleaner
GUI --> DockerClean
Scanner --> RuleSet
Scanner --> Config
Cleaner --> GitCheck
Cleaner --> Config
- Modo Simulación (
--dry-run): Calcula con exactitud quirúrgica los bytes liberables, archivos afectados y tiempos sin realizar ninguna modificación en disco. - Borrado Seguro (
send2trash): En lugar de unrmtreedestructivo e irreversible, los elementos se trasladan a la Papelera de Reciclaje del sistema operativo. Si la ruta pertenece a una unidad de red o WSL sin soporte de papelera, CleanStack bloquea la operación y solicita confirmación de borrado permanente. - Git Safety Check (
GitPython/subprocess): Comprueba automáticamentegit status --porcelainen el proyecto ygit ls-files. Si el proyecto tiene cambios pendientes no commiteados o si el artefacto está versionado en el repositorio, se marca en alerta roja y se omite de la purga a menos que se use--force. - Reglas Anti-Falsos Positivos (Markers): Carpetas con nombres estándar (
target,build,bin,dist) no se tocan a menos que en el directorio exista el archivo de manifiesto correspondiente (Cargo.tomlpara Rust,package.jsonpara Node,pom.xmlpara Java,CMakeLists.txtpara C++). - Protección de Rutas del Sistema: Raíces de unidad (
C:\,/), directorios de usuario base (%USERPROFILE%), carpetas de Windows y directorios del sistema operativo están protegidos en el núcleo. - Soporte de Exclusiones (
.cleanignore& YAML): Reglas globales y por proyecto para proteger carpetas sensibles utilizando la sintaxis estándar tipo.gitignore.
| Ecosistema | Artefactos Detectados | Marcador de Verificación Requerido | Riesgo |
|---|---|---|---|
| Node.js / Web | node_modules, .next, .nuxt, .cache, build, dist |
package.json |
Medio / Alto |
| Python | .venv, venv, __pycache__, .pytest_cache, .mypy_cache, *.pyc, build, *.egg-info |
pyvenv.cfg, setup.py, pyproject.toml |
Bajo / Medio |
| Java / Kotlin | target/, .gradle/, build/, .out/, out/ |
pom.xml, build.gradle, *.iml |
Bajo / Medio |
| Rust | target/ |
Cargo.toml |
Medio |
| Go | bin/ |
go.mod |
Alto |
| .NET | bin/, obj/ |
*.csproj, *.fsproj, *.sln |
Medio |
| C / C++ | bin/, obj/, cmake-build-*, *.o, *.exe, *.dll, *.so |
CMakeLists.txt, Makefile, *.vcxproj |
Medio / Alto |
| Docker | Contenedores detenidos, imágenes huérfanas (dangling), build cache, volúmenes sin usar |
Docker Daemon API | Configurable |
- Python 3.11, 3.12 o 3.13 (64-bit).
- Windows 11 / WSL2 o Linux.
- Opcional: Docker Desktop en ejecución para las funcionalidades de Docker.
# 1. Clonar el repositorio o situarse en la carpeta
cd CleanStack
# 2. Crear y activar el entorno virtual
python -m venv .venv
.\.venv\Scripts\activate
# 3. Instalar dependencias
pip install -r requirements.txtCleanStack incorpora una interfaz de línea de comandos ultrarrápida impulsada por Rich.
Analiza el directorio actual o las rutas indicadas sin modificar nada:
# Escaneo de la carpeta actual
python -m src.main scan
# Escaneo de una o varias rutas de proyectos
python -m src.main scan C:\Users\Luis\dev D:\Workspace
# Filtrar por un ecosistema concreto y tamaño mínimo
python -m src.main scan ~/dev -e node -e python --min-size 50MB
# Agrupar el reporte por proyecto en lugar de por artefacto
python -m src.main scan ~/dev --by-project
# Salida estructurada en JSON para automatizaciones
python -m src.main scan ~/dev --json# Modo Simulación (Dry-Run): calcula exactamente qué se liberaría
python -m src.main purge ~/dev --dry-run
# Purga segura interactiva (los elementos van a la Papelera de Reciclaje)
python -m src.main purge ~/dev
# Purgar sin confirmación interactiva (los artefactos con riesgo Git se omiten)
python -m src.main purge ~/dev -y
# Forzar la inclusión de proyectos con cambios pendientes en Git
python -m src.main purge ~/dev --force# Ver todas las reglas y marcadores activos
python -m src.main rules
# Ver la configuración efectiva actual
python -m src.main config --show
# Crear el fichero de configuración de usuario en %APPDATA%/CleanStack/cleanstack.yaml
python -m src.main config --initCleanStack se comunica de forma nativa con el socket o named pipe del daemon de Docker (docker system df y endpoints de prune):
# Analizar espacio recuperable en Docker (modo simulación)
python -m src.main docker -n
# Purgar contenedores parados, imágenes huérfanas y build cache
python -m src.main docker
# Ver detalle individual de cada contenedor o imagen
python -m src.main docker --details
# Incluir volúmenes sin usar (¡precaución con bases de datos persistentes!)
python -m src.main docker --volumesPara iniciar la interfaz de escritorio en Dark Mode:
python -m src.main gui
# O simplemente:
python -m src.main- Dashboard Métrico: Indicadores de GB recuperables, total de artefactos y capacidad disponible en disco en tiempo real.
- Barra de Distribución: Gráfico segmentado por colores representativos de cada tecnología (Node en verde, Python en amarillo, Docker en azul, etc.).
- Filtros Dinámicos: Búsqueda en vivo por texto y selector de stack tecnológico.
- Selección Selectiva: Checkboxes independientes para cada artefacto, con botones de "Seleccionar Todo" y "Deseleccionar".
- Acceso Directo: Botón 📂 para abrir de inmediato la carpeta del artefacto en el Explorador de Windows.
- Modal de Confirmación: Diálogo informativo previo a cualquier purga con advertencias de repositorios Git sucios.
- Pestaña Docker: Tarjetas con switches individuales para purgar contenedores, imágenes huérfanas, caché de build y volúmenes.
La suite de pruebas automatizadas garantiza la integridad del escáner multihilo, el motor de reglas y la seguridad de borrado:
.\.venv\Scripts\python -m pytest tests/ -vResultado:
tests/test_cleaner.py::test_cleaner_dry_run PASSED
tests/test_cleaner.py::test_cleaner_trash_mode PASSED
tests/test_cleaner.py::test_cleaner_git_safety_blocks_dirty_project PASSED
tests/test_cleaner.py::test_cleaner_protected_paths PASSED
tests/test_cleaner.py::test_docker_cleaner_analysis_with_mock PASSED
tests/test_config.py::test_formatters PASSED
tests/test_config.py::test_shorten_path PASSED
tests/test_config.py::test_default_config_loading PASSED
tests/test_config.py::test_config_merge_with_explicit_yaml PASSED
tests/test_config.py::test_config_invalid_file PASSED
tests/test_config.py::test_cleanignore_patterns PASSED
tests/test_scanner.py::test_scanner_node_project PASSED
tests/test_scanner.py::test_scanner_rust_marker_protection PASSED
tests/test_scanner.py::test_scanner_python_venv_and_pycache PASSED
tests/test_scanner.py::test_scanner_with_cleanignore PASSED
tests/test_scanner.py::test_scanner_min_size_filter PASSED
tests/test_scanner.py::test_scanner_cancellation PASSED
============================== 17 passed in 0.15s ==============================
CleanStack incluye un script de compilación automatizado basado en PyInstaller:
# 1. Compilar binario autónomo para Windows sin consola auxiliar (Windowed GUI)
python build.py
# 2. Compilar binario con soporte de consola CLI
python build.py --console
# 3. Generar distribución en directorio (arranque instantáneo)
python build.py --onedirEl ejecutable final se genera en la carpeta dist/CleanStack.exe, completamente empaquetado con todos los recursos de configuración y temas de CustomTkinter incluidos.
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
Autor: Luis Lázaro Pimentel (Software & Systems Developer)