尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Website
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Aplicativo desktop multiplataforma (Windows, Linux, macOS) para compactar e transferir arquivos e pastas direto entre dois computadores (P2P), sem armazenar nada em nuvem e com criptografia ponta a ponta (E2EE).
Downloads); nunca sobrescreve — usa nome (1), nome (2)....zpp2 localmente, sem rede.[App Origem] ──DataChannel P2P (libdatachannel)── [App Destino]
│ │
└────── SignalR (sinalização) ────────────────┘
│
[Servidor de sinalização]
+ coturn (TURN/STUN, fallback)
O servidor só pareia os dois lados (troca de SDP/candidatos ICE; no máximo 2 dispositivos por código). O arquivo vai direto entre as máquinas (ou via relay TURN quando o P2P direto é bloqueado), sempre cifrado com AES-256-GCM.
Cada pacote .zpp2 (zstd em chunks com SHA-256) é enviado em mensagens de até 60 KiB:
Ack) o que gravou em disco e, ao final, envia Done.O estado das transferências em andamento fica em %LOCALAPPDATA%/ZipStream/transfers (Linux: ~/.local/share/ZipStream/transfers; macOS: ~/Library/Application Support/ZipStream/transfers).
| Projeto | Papel |
|---|---|
src/ZipP2P.Core | Motor de compressão (zstd streaming, formato .zpp2) + criptografia (ECDH/AES-GCM/SAS) |
src/ZipP2P.P2P | Transporte (libdatachannel), sinalização, protocolo de transferência, reconexão e estado persistido |
src/ZipP2P.Contracts | DTOs compartilhados (cliente/servidor) |
src/ZipP2P.Server | Servidor de sinalização (ASP.NET Core + SignalR) |
src/ZipP2P.App | Aplicativo desktop (Avalonia) |
tests/ZipP2P.Core.Tests | Testes do motor e da criptografia |
tests/ZipP2P.P2P.Tests | Protocolo, retomada, reconexão e integração ponta a ponta via WebRTC |
tests/ZipP2P.App.Tests | Log, linha de comando e integração com o menu de contexto |
dotnet run --project src/ZipP2P.Server
Escuta em http://0.0.0.0:5000 (hub em /signaling). Para a mesma rede, também dá para usar o servidor embutido no app: ⚙️ Configurações → Iniciar servidor local.
dotnet run --project src/ZipP2P.App
Linha de comando:
| Argumento | Efeito |
|---|---|
--send <caminho> | Abre o painel compacto e já começa a enviar (usado pelo menu de contexto) |
--receive <código> | Abre a aba Receber com o código preenchido |
<caminho> | Igual a --send |
As configurações ficam em SQLite (%LOCALAPPDATA%/ZipStream/settings.db) e são editadas em ⚙️ Configurações: URL do servidor, porta do servidor local, menu de contexto. A pasta de destino é lembrada pela aba Receber.
http://192.168.0.10:5000/signaling).Cada release (tag v*) gera pelo GitHub Actions:
| Arquivo | Sistema |
|---|---|
ZipStream-Setup-<versão>-win-x64.exe | Windows — instalador (Inno Setup), por usuário, sem administrador; opção de já adicionar o menu de contexto |
zipstream_<versão>_amd64.deb | Debian/Ubuntu/Mint — sudo apt install ./zipstream_<versão>_amd64.deb; instala em /opt/zipstream, atalho no menu e comando zipstream |
ZipStream-win-x64.zip, ZipStream-linux-x64.tar.gz, ZipStream-osx-x64.tar.gz | Versões portáteis |
Para gerar uma release: git tag v1.2.3 && git push origin v1.2.3. Rodando o workflow manualmente (Actions → Release → Run workflow), os pacotes ficam nos artefatos da execução, sem criar release.
deploy/docker-compose.yml sobe o servidor de sinalização e o coturn (TURN). O HTTPS fica com um reverse proxy que já rode na VPS (ex.: Caddy): o servidor entra na network externa proxy (docker network create proxy, se ainda não existir) com o alias zipstream-server. No Caddyfile, com o proxy também nessa network:
zipstream.seudominio.com {
reverse_proxy zipstream-server:5000
}
git clone https://github.com/igoreusttaquio/ZipStream-P2P.git && cd ZipStream-P2P/deploy
cp .env.example .env # PUBLIC_IP e TURN_PASSWORD
docker compose up -d --build # atualizar: git pull && docker compose up -d --build
Firewall: liberar 3478/tcp+udp e 49160-49200/udp (80/443 já são do Caddy). Teste: https://zipstream.seudominio.com responde "ZipStream signaling server".
https://zipstream.seudominio.com/signaling.zipstream.seudominio.com:3478, usuário zipstream e a senha do TURN_PASSWORD → Salvar. Sem usuário, o servidor vale só como STUN. Sem nada configurado, o app usa o STUN público do Google (stun.l.google.com:19302), suficiente para a maioria das redes; o TURN só é necessário quando a conexão direta é bloqueada.⚙️ Configurações → Menu de contexto → Instalar / Remover.
| Sistema | Como é instalado | Observações |
|---|---|---|
| Windows | HKCU\Software\Classes\*\shell e Directory\shell (sem administrador) | No Windows 11 fica em "Mostrar mais opções" |
| Linux | Scripts do Nautilus e Caja, ação do Nemo, service menu do Dolphin | Melhor esforço; pode ser preciso reiniciar o gerenciador (nautilus -q) |
| macOS | Ação Rápida do Automator em ~/Library/Services | Experimental; melhor com o app em /Applications |
Se o app mudar de lugar, Configurações mostra que a entrada aponta para outra cópia — é só clicar em Instalar de novo.
No Linux, o ícone da bandeja usa o protocolo StatusNotifierItem (KDE, Cinnamon, XFCE...); no GNOME é preciso a extensão AppIndicator. Sem bandeja, abrir o app de novo traz a janela de volta.
Microsoft.NETCore.App e Microsoft.AspNetCore.App (servidor embutido). Instalar só o ASP.NET Core de uma versão mais nova que o .NET Runtime quebra a resolução — instale o .NET Runtime da mesma versão (dotnet --list-runtimes mostra o que há). Os pacotes do release já trazem o runtime.dotnet test
Detalhes no plan.md.