Tu proyecto. Solo lo que importa.
ProjectZipper

Tu proyecto, listopara compartir.

Empaquetado selectivo de código y assets, listo para enviar o guardar.

Una app de Windows que empaqueta tus proyectos: el código va, lo pesado queda fuera, y el informe dice qué.Empaqueta tus proyectos: el código va, lo pesado queda fuera.

App de escritorioCopia de proyectosHerramienta propia

  • Tauri 2
  • Rust
  • React 18.3
  • TypeScript 5.9
  • Vite 5.4
  • Tailwind CSS 3.4
  • Framer Motion 11
  • Crates zip 2 · walkdir 2
Tu proyecto. Solo lo que importa.
ProjectZipper

Tu proyecto, listopara compartir.

Empaquetado selectivo de código y assets, listo para enviar o guardar.

Una app de Windows que empaqueta tus proyectos: el código va, lo pesado queda fuera, y el informe dice qué.Empaqueta tus proyectos: el código va, lo pesado queda fuera.

App de escritorioCopia de proyectosHerramienta propia

  • Tauri 2
  • Rust
  • React 18.3
  • TypeScript 5.9
  • Vite 5.4
  • Tailwind CSS 3.4
  • Framer Motion 11
  • Crates zip 2 · walkdir 2

El peso

Lo pesado se queda fuera. El código va.

Antes de comprimir, la app muestra el proyecto como pesa en el disco: cada carpeta con su tamaño y su cantidad de archivos. Aquí, las carpetas más grandes de un proyecto Tauri real, como las mostró la vista previa de la app.

Un proyecto Tauri realMarcados: 682 de 750 archivosFuera del paquete: 55 elementos

src-tauri/56,26 MB · 108 archivos
7-noites-na-cabana/55,6 MB · 67 archivosDesmarcada por el dueño: queda fuera
src/11,12 MB · 432 archivos
src-tauri/target/No recorridaRegenerable, no hace falta en la copia. La app ni entra en la carpeta; el tamaño solo se mide si lo pides.
  • Marcada
  • Desmarcada
  • No recorrida
  1. 01El árbol entero, con el tamaño de cada carpeta.
  2. 02La carpeta target/ ni se recorre: está entre las 35 carpetas pesadas que la app conoce.
  3. 03La carpeta desmarcada cierra la cremallera y queda fuera.
  4. 04Lo que sigue marcado es lo que va al paquete.

Las carpetas de salida de la propia herramienta también quedan fuera: en un proyecto, 57.162 de 57.790 rutas (98,91 %) eran copias antiguas. El proyecto de verdad tenía 628.

La vista previa

Marca, desmarca. El peso aparece antes.

Cada carpeta y cada archivo tienen su casilla. La carpeta madre queda parcial (—) cuando solo va una parte de los hijos, y la estimación del paquete se rehace con cada clic. Haz clic para probar.

Estimación del paquete

14,98 MB491 archivos

De 65,94 MB · 508 archivos

Con las carpetas de la vista previa de la app. En la app, la cuenta recorre el proyecto entero, sin comprimir nada.

  • Tres estadosMarcado, desmarcado o parcial: la carpeta muestra lo que decidieron los hijos.
  • Estimación sin comprimirLa app recorre el proyecto con los mismos filtros de la copia y devuelve tamaño y cantidad, sin grabar nada.
  • Sin atropellosLa cuenta sale 700 ms después del último clic, y la respuesta vieja se descarta.
  • Lo nuevo apareceLo que no existía en la última configuración guardada recibe la etiqueta NUEVO en el árbol.
ProjectZipper con la ventana de progreso de la copia abierta y la consola listando los archivos

Tú decides qué entra en el ZIP.

Código, assets y archivos pesados, organizados con criterio.

Selección por archivo y carpetaResumen de carpetas regenerablesAssets en paquetes separadosAlertas de archivos sensibles.

Para enviar un proyecto grande, la app lo divide: el código en un ZIP y los assets en paquetes del tamaño que elijas (de 1 a 500 MB; el estándar es 29), o el proyecto entero en partes. La división es un First-Fit-Decreasing: ordena de mayor a menor y pone cada archivo en la primera caja donde cabe.

El código va al -code.zip; los assets de public/ van a -assets-01.zip, -assets-02.zip… guardados sin compresión, porque imagen y video ya vienen comprimidos.

Cola ordenada, de mayor a menor

    1. { }
      projeto-code.zip
    2. Límite − 1 %
      .mp4
      projeto-assets-01.zipMayor que el límite: va solo, con aviso
    3. Límite − 1 %
      .mp4.psd
      projeto-assets-02.zip
    4. Límite − 1 %
      .png.glb.png
      projeto-assets-03.zip
    5. Límite − 1 %
      .jpg.webp.svg
      projeto-assets-04.zip
    • La caja se llena hasta el 99 % del límite: queda 1 % de margen.
    • El archivo mayor que el límite recibe un paquete solo para él, con aviso.
    • Cada parte se abre sola: son ZIP independientes, no un ZIP en trozos (.z01, .z02).

    Los sensibles

    Claves, .env, credenciales: la app señala cada uno.

    Antes de que el ZIP salga de la máquina, la regla pasa por todos los nombres. Lo que parece credencial se lista al final de la copia y se cuenta en el informe, y llevarlo o no es decisión tuya, con un interruptor.

    • package.json
    • src/App.tsx
    • .env.localVa en el paquete
    • tailwind.config.js
    • id_rsaVa en el paquete
    • README.md
    • vite.config.ts
    • credentials.jsonVa en el paquete
    • Cargo.toml
    • src-tauri/tauri.conf.json
    • certificado.pemVa en el paquete
    • index.html
    • .npmrcVa en el paquete
    • public/logo.png
    • .aws/configVa en el paquete
    • src-tauri/src/main.rs
    • .env.productionVa en el paquete
    • tsconfig.json
    • 17Nombres exactos.npmrc · .netrc · id_rsa · credentials.json · secrets.json · terraform.tfvars…
    • 9Extensiones.pem · .key · .p12 · .pfx · .jks · .keystore · .ppk · .asc · .gpg
    • 5Carpetas de credenciales.aws · .ssh · .gnupg · .docker · .kube
    • .env*Todo nombre que empieza con .env.env · .env.local · .env.production…
      Sensíveis .....: 7 arquivo(s) (.env, chaves, credenciais), ESTÃO no backup

    La comparación ignora mayúsculas y mira la ruta entera: un archivo dentro de .ssh/ cuenta, tenga el nombre que tenga.

    El informe

    Dentro de cada ZIP, el mapa de lo que quedó.

    Cada copia lleva un ESTRUTURA.txt (estructura) en la raíz: el árbol entero del proyecto, con tamaño y fecha en cada línea, y la marca de lo que quedó fuera y por qué. Quien abre el paquete sabe lo que falta antes de buscarlo.

    ROBLOX-APP-ASSETS-ESTRUTURA.txt
    ══════════════════════════════════════════════════════════
    ESTRUTURA COMPLETA · ROBLOX-APP-ASSETS
    ══════════════════════════════════════════════════════════
    Caminho .......: D:\Projetos\ROBLOX-APP-ASSETS
    Gerado em .....: 19/09/2026 às 12:58
    Arquivos ......: …
    Modo ..........: pastas regeneráveis RESUMIDAS
    Fora do pacote : … item(ns), marcados com [FORA] abaixo
    ══════════════════════════════════════════════════════════
    POR EXTENSÃO (as 20 que mais pesam)
    …
    ══════════════════════════════════════════════════════════
    LEGENDA
    [FORA: motivo] o arquivo existe no disco mas não entrou no backup
    [RESUMIDA] pasta regenerável mostrada só com o total
    ══════════════════════════════════════════════════════════
     
    ROBLOX-APP-ASSETS/
    ├── src-tauri/ 56.26 MB 03/09/2026 12:16
    │ ├── binaries/ 50.96 MB 08/07/2026 15:37
    │ ├── icons/ 2.44 MB 03/09/2026 12:16
    │ ├── target/ … arq · … [RESUMIDA]
    │ └── Cargo.lock 142 KB 03/09/2026 12:16
    ├── 7-noites-na-cabana/ 55.6 MB 03/06/2026 09:44
    │ └── BIBLIA_VISUAL/ 55.6 MB 02/06/2026 23:22
    └── src/ 11.12 MB 19/09/2026 11:06
    ├── data/ 6.14 MB 18/09/2026 20:20
    └── components/ 2.62 MB 19/09/2026 12:35
    1. 1El encabezadoRuta, fecha, cuántos archivos, el modo y cuántos elementos quedaron fuera: el resumen antes del árbol.
    2. 2Por extensiónLas 20 extensiones que más pesan, con cantidad y tamaño. Todo .env.local o .env.production cuenta como .env, para ver de un vistazo cuántos hay.
    3. 3La leyendaDos marcas: [FORA: motivo] (fuera: motivo), para lo que existe en el disco y no entró, y [RESUMIDA] (resumida), para la carpeta regenerable.
    4. 4Tamaño y fecha en cada líneaLa columna tiene ancho fijo: la carpeta resumida, que trae la cantidad junto, no empuja la fecha hacia el lado.
    5. 5Regenerable en una sola líneaLas carpetas target, node_modules, .venv y 17 nombres más se vuelven una línea con el total de archivos y de bytes.

    El mismo archivo también se guarda en la raíz del proyecto en cada copia, y el botón Exportar Estructura genera solo ese. Fragmento en el formato de la app (que lo escribe en portugués), con las carpetas de la vista previa; los puntos suspensivos marcan lo que se cortó.

    Por dentro

    Rust donde pesa, medido donde importa.

    El trabajo pesado corre en Rust, fuera del hilo de la interfaz; la interfaz en React solo pide y muestra. Las medidas de abajo están en los comentarios del código, junto al cambio que cada una justificó.

    La decisión

    Una sola regla para los tres caminos

    119 MBEstimados en pantalla

    500 MBEn el ZIP de verdad

    La regla de lo que entra en el paquete vivía en tres copias: en la copia entera, en la copia en partes y en la estimación. Las copias se desviaron. Hoy las tres llaman a las mismas dos funciones, y quien cambia un filtro lo cambia en las tres.

    passa_pre_filtros() · motivo_para_ficar_de_fora()

    12comandos

    Entre la interfaz y Rust

    Los 7 más pesados corren en un hilo aparte (spawn_blocking): la ventana no se congela.

    64KiB

    Bloque a bloque

    Cada archivo entra al ZIP en bloques de 64 KiB, sin subir entero a la memoria. Deflate nivel 3; 30 formatos ya comprimidos entran sin recompresión.

    868.500consultas

    Al disco, ahorradas

    En un árbol de 6.081 carpetas: ordenar por el tipo que el sistema ya entrega, en vez de preguntarle al disco en cada comparación.

    127ms

    Para escribir la estructura

    Eran 1.208 ms en el mismo árbol (51.709 archivos): la salida de la propia herramienta pasó a resumirse, con la misma cantidad.

    Las tecnologías

    De qué está hecho, pieza por pieza

    Un programa de Windows que elige qué entra en el paquete y qué queda afuera. La ventana está hecha como un sitio; Rust recorre las carpetas y arma el .zip. Elige una pieza para ver qué hace aquí y en qué archivo está.

    14tecnologías, en 3 capas

    Pantalla

    Núcleo

    Windows

    Las pantallas

    La app, del proyecto al paquete.

    De la lista de proyectos a la copia lista, con la configuración guardada en el propio proyecto.