Cómo funciona FlyingFiles
Esta página es para los curiosos y para los administradores que quieren saber qué hace la aplicación con los archivos, las contraseñas y la red antes de instalarla.
En resumen
FlyingFiles es una aplicación nativa para macOS, Windows y Linux. Se ejecuta únicamente en tu ordenador.
No hay servidor intermediario ni cuenta. Los archivos van directamente entre tu ordenador, tus discos y tus servidores, y la configuración y los archivos de los ordenadores emparejados, directamente entre esos ordenadores de tu red local.
El sitio web
nci.plsirve para descargar la aplicación para macOS y Linux y para buscar actualizaciones: al iniciar la aplicación (se puede desactivar) y cuando tú lo pides. La versión para Windows la distribuye y la actualiza Microsoft Store.
flowchart LR
subgraph PC["Tu ordenador"]
APP["FlyingFiles"]
DISK["Discos, memorias USB,<br/>recursos de red"]
KEY["Llavero /<br/>Administrador de credenciales"]
TERM["Programas del sistema<br/>Terminal, FFmpeg,<br/>grabación de discos"]
end
SRV["Tus servidores<br/>FTP · FTPS · SFTP"]
PEER["Tus ordenadores emparejados<br/>en la red local"]
NCI["nci.pl<br/>descarga y actualizaciones<br/>de macOS y Linux"]
STORE["Microsoft Store<br/>instalación y actualizaciones de Windows"]
APP <--> DISK
APP <--> KEY
APP --> TERM
APP <--> SRV
APP <-. "TLS, tras emparejarlos" .-> PEER
APP -. "al iniciar y a petición" .-> NCI
STORE -. "Windows" .-> APP
Cómo está construida la aplicación
FlyingFiles está escrito en C# sobre .NET 10, con una interfaz de usuario en Avalonia 12. El mismo código se ejecuta en los tres sistemas; el código específico de cada sistema está separado, en un solo lugar.
La aplicación consta de tres capas:
| Capa | Se encarga de |
|---|---|
| Core | sistemas de archivos (disco, archivos comprimidos), copiar y mover, búsqueda de conflictos, archivos comprimidos, vista previa y edición de archivos de cualquier tamaño, Markdown, búsqueda, comparación, estadísticas, reglas .ffignore, reducción de archivos, comandos para FFmpeg, configuración, sincronización de la configuración y el archivo .ffsync, traducciones |
| Network | FTP y FTPS (biblioteca FluentFTP), SFTP (SSH.NET), lectura y guardado de contraseñas en el almacén del sistema, emparejamiento de ordenadores y conexiones en la red local (configuración y archivos de los ordenadores emparejados) |
| App | ventanas y paneles (patrón MVVM), teclado y atajos propios, arrastrar con el ratón, integración con el sistema: Papelera, Finder y Explorador de archivos, aplicaciones asociadas a los archivos, Terminal, FFmpeg, grabación de discos, formateo de volúmenes, instalación y actualizaciones |
Compilada a código nativo
La aplicación se compila por adelantado (Native AOT) en un ejecutable para un procesador concreto. Como resultado:
no necesitas instalar .NET,
la aplicación arranca en una fracción de segundo,
usa menos memoria que una aplicación con intérprete.
Una interfaz que no se bloquea
Todas las operaciones de disco y de red se ejecutan en segundo plano, y la interfaz solo muestra el progreso. Ni siquiera listar una carpeta de un recurso de red que no responde bloquea la ventana. Toda operación que puede tardar tiene una ventana de progreso y un botón Cancelar que funciona.
La vista previa (F3) y el editor (F4) leen entero un archivo de texto de hasta 4 MB. Un texto mayor y cualquier archivo binario los leen por partes, solo lo que se ve en la pantalla, así que un archivo del disco de varios gigabytes se abre al instante; si un archivo así está en un servidor (con una ventana de progreso) o en un archivo comprimido, la aplicación lo copia antes a un archivo temporal. Los números de línea y la búsqueda se calculan en segundo plano, y al guardar un archivo del disco sin cambiar su longitud solo se sobrescriben en su sitio los bytes modificados.
Un solo modelo para todas las ubicaciones
El disco local, un archivo comprimido, un servidor FTP, un servidor SFTP y las unidades de un ordenador emparejado comparten en la aplicación una interfaz común de sistema de archivos: listar, leer, escribir, crear carpetas, eliminar, renombrar. El panel, la copia, la vista previa, la búsqueda y la comparación usan únicamente esta interfaz. Por eso:
la copia funciona en cualquier combinación: disco → servidor, servidor → archivo comprimido, servidor → servidor;
un archivo comprimido se comporta como una carpeta: la aplicación lo extrae a una carpeta temporal privada y vuelve a empaquetar los cambios cuando sales de él;
la búsqueda y las estadísticas funcionan igual en un disco, en un archivo comprimido y en un servidor.
Cómo funciona la copia
Reglas
.ffignore: se descartan los elementos afectados por las reglas del origen y del destino.Comprobación del destino: no puedes copiar un elemento sobre sí mismo ni una carpeta dentro de su propia subcarpeta, tampoco cuando el mismo lugar se escribe de otra forma: a través de un enlace, con otras mayúsculas y minúsculas o, en Windows, con la letra de una unidad de red. En un disco, la aplicación compara la identidad de los archivos en el sistema, no el texto de la ruta, así que mover un archivo «sobre sí mismo» no borrará su única copia.
Examen: en una sola pasada, la aplicación reúne la lista de archivos, el número total de bytes y los conflictos. Con servidores, recuerda los listados de las carpetas de destino para no preguntar al servidor por cada archivo por separado.
Decisión sobre los conflictos: un cuadro de diálogo para elegir entre sobrescribir todo, sobrescribir los antiguos, omitir los duplicados o cancelar.
Copia en bloques de 256 KB, con progreso:
mover dentro de un mismo disco es un cambio de nombre: instantáneo;
la escritura en disco va a un archivo temporal junto al destino, que sustituye al archivo de destino solo al final, de modo que una interrupción no deja medio archivo;
mover un enlace a una carpeta nunca vacía la carpeta a la que apunta;
un error en un archivo no detiene toda la operación: el archivo pasa a la lista de elementos fallidos, con el motivo.
Al terminar: limpieza opcional de los archivos de metadatos de macOS, actualización de los paneles, un resumen, la lista de elementos fallidos y una entrada en el registro de transferencias.
Con servidores
Reintento tras agotarse el tiempo de espera y reconexión tras una conexión interrumpida, volviendo a la misma carpeta.
Comprobación de completitud: tras un error, la aplicación compara el tamaño del archivo en el servidor. Un archivo completo lo da por terminado y, cuando no se puede determinar el estado, no reintenta a ciegas, para no sobrescribir una copia buena.
Verificación SHA-256 (opcional): la suma de comprobación del archivo de origen se compara con la de la copia. En SFTP, la aplicación intenta calcular la suma de comprobación en el servidor (
sha256sum,shasum,openssl) y, cuando la cuenta no lo permite, vuelve a leer la copia.Cancelación: un archivo subido a medias se elimina del servidor, y una descarga no deja restos en el disco.
Reducir archivos antes de enviarlos
La casilla Reducir archivos de la ventana Confirmar cambios funciona dentro de la propia aplicación, en tu ordenador, sin herramientas externas ni servicios en la red:
la aplicación lee el archivo PHP del origen, quita del código los comentarios, las líneas vacías, las sangrías y los espacios innecesarios y escribe el resultado directamente en el destino: en un disco, de forma atómica, igual que una copia normal, y en un servidor, como una subida normal;
el archivo de origen queda intacto, y el HTML fuera de las etiquetas PHP, las cadenas de texto y los bloques heredoc pasan byte a byte;
un archivo del que la aplicación no está segura (p. ej. con la etiqueta corta
<?) y un archivo de más de 32 MB llegan sin cambios, y el motivo queda en el registro de transferencias.
Arrastrar con el ratón
Arrastrar usa el mecanismo de arrastrar y soltar del sistema, el mismo que usan el Finder, el Explorador de archivos y otras aplicaciones.
Soltar en un panel pone en marcha el mismo proceso que F5 o F6: reglas
.ffignore, comprobación del destino, examen, conflictos y ventana de progreso.Las entradas de servidores FTP/SFTP y de archivos comprimidos viajan en un formato que no sale de la aplicación, así que otra aplicación no las ve. Solo se pueden soltar en los paneles de la ventana de la que proceden.
Los archivos del disco viajan además como archivos normales del sistema, así que el Finder, el Explorador de archivos, el escritorio y otras aplicaciones los ven como cualquier otro archivo y los copian o los mueven según sus propias reglas. En Windows, FlyingFiles pide copiar: el Explorador de archivos copia sin teclas y solo mueve con Shift.
A los archivos arrastrados desde otra aplicación, FlyingFiles siempre les indica copiar, así que esa aplicación nunca elimina los originales por su cuenta. Si eliges mover, el traslado lo hace FlyingFiles, igual que con F6.
Cómo funciona la grabación de un disco
FlyingFiles no tiene un controlador de grabadora propio. El disco lo graba la herramienta que ofrece el sistema: en macOS, drutil (la misma que usa el Finder); en Windows, IMAPI, el mecanismo de grabación integrado en Windows; en Linux, xorriso. La aplicación prepara los datos, vigila el espacio y lee el progreso en la salida de la herramienta.
Estimación de la imagen: a partir de la lista de archivos, la aplicación calcula cuánto ocupará la imagen del disco: sectores completos de 2048 bytes para cada archivo, las carpetas y los nombres en varios sistemas de archivos (ISO 9660, Joliet, UDF) y el mapa de ocupación, que crece con la imagen. La misma estimación calcula la barra de la plantilla de disco.
Comprobación del disco: justo antes de grabar, otra vez: si en la unidad está el mismo disco y si tiene espacio suficiente.
Imagen exacta: la herramienta del sistema compone la imagen e indica su tamaño exacto, al sector; si no cabe, la grabación no empieza.
Grabación, con barra de progreso, velocidad y registro.
Comprobación (opcional, activada de forma predeterminada): los datos grabados se leen del disco y se comparan con la imagen.
Cierre del disco y expulsión.
En Windows, un BD-R vacío no pasa por el camino habitual de IMAPI, que siempre lo formatea con un área de repuesto (salvo que actives el área de repuesto en la configuración): la aplicación compone la imagen con la herramienta de IMAPI y la escribe en el disco sector a sector, y al comprobarla compara cada sector con la imagen. Gracias a ello, el mismo disco admite en Windows lo mismo que en macOS y Linux. Nada de esto sale de tu ordenador.
Cómo funciona la conversión de vídeo
FlyingFiles no codifica los vídeos por sí mismo ni incluye FFmpeg en sus paquetes. Usa FFmpeg, un programa gratuito instalado en el sistema, y lo ejecuta como un proceso aparte.
Búsqueda de FFmpeg: primero, la ruta de la configuración (el campo Programa FFmpeg: de la pestaña Vista previa y vídeo); después, las carpetas de
PATH, y por último, los lugares de instalación habituales: Homebrew y MacPorts en macOS; winget, Chocolatey, Scoop yC:\ffmpeg\binen Windows;/usr/bin,/usr/local/biny/snap/binen Linux. Si no lo encuentra, la aplicación muestra cómo instalarlo.Descripción del vídeo:
ffprobe, que suele venir con FFmpeg, indica la resolución, la duración, los códecs y el audio. Sin él, la aplicación solo conoce la duración y la resolución de la cabecera de los archivos MP4 y MOV.Codificadores disponibles: la aplicación pregunta a FFmpeg qué sabe codificar (
ffmpeg -encoders) y solo propone eso. La codificación por hardware aparece solo después de una prueba correcta con un fotograma.Conversión: el comando es una lista de argumentos que se pasa directamente al proceso, sin el shell del sistema, así que el nombre de un archivo no puede convertirse en un comando. FFmpeg recibe la orden de no sobrescribir nada (
-n), y la aplicación elige un nombre libre para el resultado.Progreso: la aplicación lo lee en la salida de FFmpeg. El archivo está listo solo si FFmpeg termina sin error e indica que ha acabado el trabajo.
Cancelación o error: el archivo a medio hacer se elimina y, si hay un error, la ventana muestra los últimos mensajes de FFmpeg.
Solo se pueden convertir archivos del disco local. El vídeo no sale de tu ordenador: FFmpeg lo lee del disco y guarda el resultado junto al original o en la carpeta del otro panel.
Sincronización de la configuración y red local
Desde la versión 1.5.0, la configuración pasa de un ordenador a otro con un archivo o por la red local (manual). En ambos casos no pasa nada por ningún servidor de internet.
Qué ha cambiado desde la última vez
Cada elemento —un servidor, un terminal, una categoría, una ruta favorita, un ajuste concreto, el conjunto de atajos de teclado— tiene una versión: la hora del cambio con un contador y el identificador del ordenador. La aplicación detecta los cambios comparando la configuración actual con las huellas guardadas en el archivo sync-state.toml (sin los propios valores; las huellas de las contraseñas se calculan con una clave guardada en el llavero). Por eso detecta también los cambios escritos a mano en settings.toml, y el formato de ese archivo no cambia. Una eliminación deja una marca con su versión, así que se transfiere a los demás ordenadores. Cuando el mismo elemento cambia en dos sitios, gana el cambio más reciente.
El archivo .ffsync
El contenido se cifra con AES-256-GCM con una clave derivada de tu contraseña mediante PBKDF2-HMAC-SHA256 (600 000 iteraciones, sal aleatoria de 16 bytes). Antes, la contraseña se normaliza (NFC), para que los mismos caracteres escritos en sistemas distintos den la misma clave.
La cabecera del archivo —el identificador del formato, la versión, los parámetros de la función de derivación de la clave y la sal— está cubierta por la autenticación del cifrado, así que el cambio de un solo byte se detecta al cargar el archivo.
Sin la contraseña no se puede leer nada: ni los servidores, ni el nombre del ordenador, ni la fecha del guardado; solo la cabecera y el tamaño del archivo están a la vista. El nombre propuesto para el archivo contiene el nombre del ordenador y la fecha: puedes cambiarlo al guardar. La contraseña no se puede recuperar.
La aplicación rechaza un archivo ajeno o guardado por una versión más reciente del formato antes de pedir la contraseña.
Emparejamiento
Cada instalación tiene su propia clave (ECDSA P-256) con un certificado que no contiene el nombre del ordenador. El emparejamiento guarda el hash (SHA-256) de la clave del otro lado.
El código de seis cifras se calcula a partir de las claves de ambos ordenadores, de los bytes exactos de sus saludos y de números aleatorios de ambos lados. El ordenador que responde se compromete primero con su número aleatorio (envía su hash), así que un intermediario en la red tiene una posibilidad entre un millón de que los códigos coincidan, y cada intento requiere hacer clic en Continuar en el otro ordenador. En una misma apertura de la ventana hay como máximo tres intentos fallidos (los emparejamientos logrados no cuentan), y tras cada intento fallido hay una pausa de 3 segundos.
Mientras se muestra el código, la ventana no muestra el nombre indicado por el otro ordenador, solo su dirección y su sistema, y los botones se activan al cabo de un segundo y medio.
Conexiones
Cada conexión es TLS 1.2 o 1.3 con los certificados de ambos lados. Al obtener la configuración y los archivos, ambos lados comprueban que la clave del otro coincide con la guardada al emparejarlos; en el propio emparejamiento, esa función la cumple la comparación del código.
Mientras la ventana de emparejamiento está cerrada, un ordenador no emparejado recibe un rechazo antes de que la aplicación lea un solo byte de su solicitud. Con la ventana abierta, la aplicación lee una sola solicitud suya y solo acepta una petición de emparejamiento. La aplicación solo acepta conexiones de las subredes de las tarjetas Ethernet y Wi-Fi activas; omite los túneles, las conexiones PPP y las tarjetas conocidas de VPN y de máquinas virtuales. Es una lista de tarjetas conocidas, no una garantía: frente a un ordenador ajeno protege de todos modos la clave fijada. Como máximo, 8 conexiones a la vez y 2 desde una misma dirección.
Puertos: UDP 28217 (anuncios mientras la ventana de emparejamiento está abierta y consultas de la dirección de un ordenador emparejado, en cada conexión con él, junto al intento en la última dirección conocida) y TCP 28217–28220 (el primero libre). Solo direcciones IPv4.
La consulta de la dirección de un ordenador emparejado lleva una marca derivada de la clave acordada al emparejarlos, así que solo responde ese ordenador. El anuncio que se envía mientras la ventana de emparejamiento está abierta (512 bytes) contiene el nombre del ordenador, el sistema, el puerto TCP y el comienzo de la huella de la clave. Fuera de la ventana de emparejamiento, la aplicación no anuncia nada sobre sí misma; el nombre del ordenador solo llega a un ordenador emparejado, por una conexión cifrada. El certificado con la clave pública (sin el nombre) forma parte de cada conexión TLS; en TLS 1.2 —que se usa siempre que el servidor es un Mac— se transmite sin cifrar.
El servicio solo funciona si hay emparejamientos guardados o la ventana de emparejamiento está abierta. Quien no empareja ordenadores no tiene, por este motivo, ningún puerto abierto ni lecturas del llavero. El servicio lo lleva un solo proceso de la aplicación a la vez.
La configuración se obtiene siempre a petición (Sincronizar ahora) y en un solo sentido: de ese ordenador a este. Se transfieren los grupos marcados en ambos ordenadores, y las contraseñas de los servidores, solo a los ordenadores a los que se ha permitido. El ordenador que comparte lee las contraseñas sin ventanas del sistema (en macOS, de su propia copia cifrada).
La identidad del ordenador y la lista de emparejamientos se guardan en el archivo
sync-lan.bin, cifrado (AES-256-GCM) con una clave derivada de la clave de sincronización del llavero. Contenido: el certificado y la clave privada de este ordenador, el interruptor para compartir la configuración y, para cada ordenador emparejado, la huella de su clave pública, el nombre, el sistema, la fecha del emparejamiento, la clave de detección de la pareja, el permiso para compartir las contraseñas, la última dirección y el último puerto, y las fechas de las últimas obtenciones.
Archivos del ordenador emparejado
Compartir los archivos es un permiso aparte, desactivado de forma predeterminada. Cada solicitud y cada fragmento de una transferencia comprueban que el permiso y el emparejamiento siguen vigentes: desactivar el uso compartido (tras Aceptar) o eliminar el emparejamiento en el ordenador que comparte los archivos interrumpe la transferencia en curso.
Los archivos van en fragmentos de hasta 128 KiB, sin límite de tamaño. Copiar y mover desde el disco de este ordenador y entre ordenadores emparejados no carga el archivo en memoria; entre dos ordenadores emparejados, el archivo pasa por una copia temporal en el disco de este ordenador. La vista previa F3, la edición F4 y la copia desde un servidor FTP/SFTP a un ordenador emparejado cargan el archivo entero.
La escritura en el destino es atómica: una cancelación, una conexión cortada, una longitud de datos incorrecta o un permiso desactivado dejan el archivo anterior, y el archivo temporal se elimina.
El ordenador que tiene las unidades comprueba por sí mismo las rutas y la identidad de los archivos, así que no se puede mover un archivo sobre sí mismo ni copiar una carpeta dentro de su propia subcarpeta, tampoco por otra ruta que lleve al mismo lugar. Las raíces de las unidades no se pueden eliminar, mover ni sobrescribir.
Datos y seguridad
Qué guarda la aplicación
| Qué | Dónde |
|---|---|
| configuración (también los atajos de teclado cambiados), conexiones guardadas (sin contraseñas), rutas favoritas, terminales | settings.toml en la carpeta de configuración; macOS: ~/Library/Application Support/FlyingFiles/, Windows: %APPDATA%\FlyingFiles\, Linux: ~/.config/FlyingFiles/ |
| copias de seguridad de la configuración | settings.toml.bak.0 … .bak.5 junto a él |
| contraseñas de servidores FTP/SFTP | Llavero de macOS / Administrador de credenciales de Windows / depósito de claves en Linux (GNOME Keyring, KWallet), servicio FlyingFiles FTP |
| registro de transferencias | logs/transfers.log en la carpeta de configuración |
| direcciones de recursos de red (macOS) | network-mounts.toml en la carpeta de configuración |
| archivos comprimidos extraídos | la carpeta temporal privada del sistema; se elimina al cerrar el archivo comprimido |
| archivos de más de 4 MB de un servidor o de un archivo comprimido abiertos en la vista previa o en el editor | una copia en la carpeta temporal del sistema; se elimina al cerrar la ventana |
| estado de la sincronización de la configuración (huellas y versiones de los elementos, sin los valores) | sync-state.toml en la carpeta de configuración |
| copia cifrada de las contraseñas para la sincronización (solo macOS) | sync-passwords.bin en la carpeta de configuración |
| la clave de este ordenador y la lista de ordenadores emparejados, cifradas | sync-lan.bin en la carpeta de configuración (Windows: %LOCALAPPDATA%\FlyingFiles\) |
| clave de sincronización de la configuración | Llavero / Administrador de credenciales, servicio FlyingFiles Sync |
Contraseñas
Las contraseñas se guardan en el almacén de contraseñas del sistema: el Llavero de macOS, el Administrador de credenciales de Windows o el depósito de claves de Linux (GNOME Keyring, KWallet). El sistema las cifra y, en macOS, también controla qué aplicaciones pueden leerlas.
Fuera del almacén del sistema, las contraseñas solo van a los archivos de sincronización cifrados: al archivo
.ffsync, si lo guardas con contraseñas, y, en macOS, a la copiasync-passwords.bin, cifrada con una clave del llavero, gracias a la cual la sincronización no pide al llavero cada contraseña por separado.El archivo de configuración nunca contiene contraseñas.
La aplicación lee una contraseña solo cuando se conecta a ese servidor, cuando se edita la conexión o al sincronizar la configuración con contraseñas, no al arrancar.
En el registro de la conversación con el servidor, la contraseña aparece enmascarada (
PASS ********).
El archivo de configuración
El guardado es atómico (un archivo temporal y después un intercambio), con un bloqueo que protege frente a dos ventanas que guarden a la vez.
En macOS, el archivo tiene permisos solo para el propietario (
0600), porque contiene direcciones de servidores y nombres de usuario.Al leer, la aplicación tolera claves ausentes y desconocidas y, al guardar, conserva las claves que no conoce: los añadidos manuales y los ajustes de versiones anteriores no se pierden.
Las copias de seguridad se hacen antes de guardar.
Terminales
La dirección y el nombre de usuario de un terminal solo pueden contener caracteres seguros (letras, dígitos, ., -, _, : y los corchetes de las direcciones IPv6). Así, una entrada guardada no puede colar un comando adicional en el terminal.
Limitaciones de seguridad conocidas
El certificado del servidor FTPS no se verifica, y la clave de host SFTP se acepta sin contrastarla con una lista de hosts conocidos. El cifrado protege frente a la escucha, pero no frente a un servidor impostor.
El FTP simple no cifra nada: ni la contraseña ni los archivos.
Distribución y actualizaciones
macOS
La aplicación está firmada con un certificado Developer ID, se ejecuta con el Hardened Runtime activado y está notarizada por Apple. El tique de notarización va adjunto a la aplicación y a la imagen de disco
.dmg, de modo que el sistema puede comprobarlo sin conexión de red.La aplicación tiene un permiso adicional: controlar otras aplicaciones (Apple Events), únicamente para abrir una conexión SSH o Telnet en la aplicación Terminal. macOS pide consentimiento la primera vez que se usa.
Iniciada desde la imagen de disco, la aplicación se copia a
~/Applications. Instalarla en la carpeta del usuario hace que las actualizaciones no requieran contraseña de administrador.Las actualizaciones (biblioteca Velopack) llegan desde
https://nci.pl/flyingfiles/releases/osx-arm64/por HTTPS. La aplicación consulta la lista de versiones al iniciarse (se puede desactivar en la configuración) y a petición; descarga el paquete, se sustituye a sí misma y se reinicia solo con tu consentimiento. La aplicación que va dentro del paquete está firmada con el mismo certificado Developer ID y notarizada, igual que en la primera instalación.La aplicación incluye una descripción del acceso a la red local: macOS puede pedir permiso cuando FlyingFiles se conecta por primera vez a un dispositivo de la red local, por ejemplo al emparejar ordenadores.
La aplicación no está en la Mac App Store: el entorno aislado (sandbox) de la tienda no permite moverse libremente por todo el disco ni controlar Terminal, que es justo para lo que sirve un gestor de archivos.
Windows
La aplicación se publica como paquete MSIX en Microsoft Store. El paquete está firmado por Microsoft, así que la instalación transcurre sin advertencias de SmartScreen.
Las actualizaciones las instala Microsoft Store. La aplicación detecta que se ejecuta desde un paquete de la Store y desactiva su propio mecanismo de actualización. En su lugar consulta a la Store —desde la versión 1.5.0, también al iniciarse—, y Ayuda → Buscar actualizaciones… muestra el progreso de la descarga e instala la actualización; cuando la Store falla, la aplicación ofrece abrir su página de la Store.
El paquete declara reglas del firewall para los puertos de la red local (UDP 28217, TCP 28217–28220). Windows las crea al instalar el paquete y las elimina al desinstalarlo, sin ventana del firewall y sin permisos de administrador.
La aplicación se ejecuta como una aplicación normal de Windows, con los permisos de tu cuenta. No necesita ningún consentimiento especial para acceder a los archivos y guarda su configuración en la carpeta habitual
%APPDATA%\FlyingFiles.
Privacidad desde el diseño
Sin telemetría, analíticas, cuentas ni anuncios.
Las únicas conexiones de red de la aplicación son: tus servidores FTP/FTPS/SFTP, tus recursos de red, los ordenadores de tu red local cuando emparejas ordenadores o tienes alguno emparejado, y
nci.pl, al iniciarse (se puede desactivar) y cuando eliges Buscar actualizaciones… (macOS y Linux). La versión para Windows de la Store consulta a Microsoft Store, no a nuestro servidor.La vista previa de vídeo usa la Vista Rápida (Quick Look) del sistema en tu ordenador; no se envía nada a ninguna parte.
La conversión de vídeo ejecuta FFmpeg en tu ordenador, y Reducir archivos modifica los archivos en la memoria de la aplicación antes de que lleguen al destino. Ninguna de estas funciones usa servicios de internet.
La vista de Markdown no descarga imágenes de internet: solo muestra imágenes del disco del ordenador, y un enlace se abre solo cuando haces clic en él.
Texto completo: política de privacidad.
Idiomas
Todos los textos de la interfaz están en un único archivo de traducciones, en polaco, inglés, español, alemán y francés. Cada texto existe en los cinco idiomas, algo que comprueban las pruebas automáticas. En el primer inicio, la aplicación elige el idioma de tu sistema (inglés cuando el sistema usa un idioma que la aplicación no conoce); después, tu elección en el menú Idioma se conserva en el archivo de configuración. El idioma cambia de inmediato, sin reiniciar la aplicación.
Calidad
Más de 3700 pruebas automáticas comprueban la lógica y las ventanas de la aplicación (también sin pantalla) en macOS y en Windows. El emparejamiento y las conexiones en la red local se prueban en la interfaz de bucle local (loopback) del ordenador.
Cada corrección de un error empieza con una prueba que lo reproduce.
La compatibilidad con FTP y SFTP se comprueba además en servidores reales con una herramienta aparte que recorre una lista de operaciones: conexión, listado, subida, descarga, verificación, cancelación y reconexión.
Historia
Hasta la versión 0.1.0, FlyingFiles era una aplicación en Python con interfaz Qt. En septiembre de 2026, la aplicación se reescribió desde cero en C#, siguiendo una especificación detallada del comportamiento de la versión anterior, para conseguir un arranque nativo rápido, firma y notarización en macOS, un paquete para Microsoft Store y una única base de código para ambos sistemas. La primera versión estable de la nueva aplicación es la 1.0.0, del 13 de septiembre de 2026, y la versión con funciones nuevas es la 1.1.0, del 16 de septiembre de 2026. Historial de cambios.
Bibliotecas de código abierto
| Biblioteca | Licencia | Uso |
|---|---|---|
| .NET 10 | MIT | entorno de ejecución |
| Avalonia, Avalonia.Themes.Fluent | MIT | interfaz de usuario |
| CommunityToolkit.Mvvm | MIT | patrón MVVM |
| Tomlyn | BSD-2-Clause | archivo de configuración TOML |
| SharpCompress | MIT | archivos comprimidos bzip2, xz, 7z, RAR |
| Joveler.Compression.XZ, liblzma | MIT; dominio público / 0BSD | escritura de archivos comprimidos xz |
| FluentFTP | MIT | FTP y FTPS |
| SSH.NET, BouncyCastle.Cryptography | MIT | SFTP |
| Microsoft.Extensions.Logging.Abstractions | MIT | dependencia de SSH.NET |
| Avalonia.AvaloniaEdit | MIT | editor de texto |
| SkiaSharp | MIT | imágenes |
| Velopack | MIT | actualizaciones en macOS |
FFmpeg no forma parte de la aplicación ni de los paquetes: FlyingFiles lo ejecuta como un programa aparte cuando está instalado en el sistema. Lo mismo ocurre con las herramientas de grabación de discos: drutil en macOS y xorriso en Linux.
Las versiones actuales se muestran en la ventana Ayuda → Acerca de.