Skip to content

Releases: Baaaki/PureSend

v2.0.7

Choose a tag to compare

@github-actions github-actions released this 28 Sep 11:49

PureSend v2.0.7

End-to-end encrypted, direct peer-to-peer (P2P) file and folder transfer system built with Go.

Fixed

  • Linter and format compliance. Fixed gofmt tab alignment in client constants
    and split disk space checking across OS-specific files (disk_linux.go, disk_darwin.go,
    disk_windows.go) to satisfy unconvert and nilerr.

⚡ Quick Install (One-Line)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
    curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
    irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Download (Assets)

  • 🪟 Windows (x86_64): Extract the .zip archive and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install by double-clicking or running sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run directly from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper displays an "unverified developer" warning on first launch, you can remove the quarantine attribute by running:
xattr -d com.apple.quarantine puresend

v2.0.6

Choose a tag to compare

@github-actions github-actions released this 28 Sep 11:16

PureSend v2.0.6

End-to-end encrypted, direct peer-to-peer (P2P) file and folder transfer system built with Go.

Added

  • Structured CLI error handling and actionable suggestions. CLI and
    headless modes now run errors through i18n.Explain. Rather than
    leaking raw libp2p or system stack traces, errors present clear localized
    summaries with bulleted suggestions ("What you can do" / "Ne yapabilirsin").
  • Typed sentinel errors across all packages. Exported distinct error
    sentinels (rendezvous.ErrRoomNotFound, transfer.ErrChecksumMismatch,
    transfer.ErrTransferDeclined, transfer.ErrFileModified,
    transfer.ErrInsufficientDiskSpace, transfer.ErrConnectionLost,
    p2p.ErrRoomExpired, p2p.ErrRendezvousUnreachable,
    p2p.ErrPeerUnreachable, p2p.ErrRelayLimitExceeded), allowing robust
    programmatic checks with errors.Is / errors.As.
  • Early file and destination validation. Sender now verifies that files
    exist and are readable before bringing up the P2P network stack. Receiver
    eagerly validates that the target destination directory is writable and safe.
  • Disk space pre-check. Receiver verifies available disk capacity
    (transfer.CheckAvailableSpace) before initiating incoming payload writes.
  • Multilingual headless experience. CLI flags -lang tr and -lang en
    now fully translate terminal transfer prompts, acceptance queries, and
    progress output.
  • Structured exit codes. Client returns standard exit codes (0 for success,
    2 for bad syntax or flags, 3 for network unreachable, 4 for wrong code or
    expired room, 5 for declined transfer, 6 for I/O and checksum errors, 130
    for interrupt).
  • CLI flag validation and guidance. Detects and warns about positional
    arguments (e.g. puresend send file instead of -send) and conflicting
    flags (-yes or -out used with -send).
  • Server diagnostics. Server checks socket availability before listening,
    provides clear port collision guidance (e.g. port 4001 in use), validates
    announcement multiaddresses, and checks private key file permissions.

⚡ Quick Install (One-Line)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
    curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
    irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Download (Assets)

  • 🪟 Windows (x86_64): Extract the .zip archive and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install by double-clicking or running sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run directly from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper displays an "unverified developer" warning on first launch, you can remove the quarantine attribute by running:
xattr -d com.apple.quarantine puresend

v2.0.5

Choose a tag to compare

@github-actions github-actions released this 27 Sep 13:03

PureSend v2.0.5

End-to-end encrypted, direct peer-to-peer (P2P) file and folder transfer system built with Go.

Fixed

  • Hole punching works behind routers that do not keep ports. Many
    home routers give an outgoing socket a port of their own — local port
    60982 goes out as 2332 — and keep it for every destination, which hole
    punching can work with. But a peer told the other side its public IP
    with its local port, since STUN was asked from a throwaway socket and
    only its IP was used. The other side punched towards a port nobody was
    on, every attempt failed, and transfers went through the relay. STUN is
    now asked from the QUIC socket itself, and the port the router gave it
    is what goes out for QUIC. The query is repeated every 15 seconds, which
    keeps the router from forgetting the mapping while a sender waits, and
    catches it if the port moves anyway. Each peer offers its own address,
    so every peer behind such a router needs this version.
  • Dependabot's Go module runs failed: the Go proxy lists an old
    go-libp2p tag as v6.0.23+incompatible, Dependabot took it for the
    newest release, and it cannot be resolved. Versions of go-libp2p from 2
    up are now ignored; all of them are those pre-module tags.

Added

  • make test-holepunch (test/holepunch/netns-holepunch-test.sh), run by
    CI: two peers behind routers that move ports, built from network
    namespaces, with the meeting point behind a proxy as it is behind
    Cloudflare in production. The receiver must connect directly and the
    relay must not carry the files. 2.0.4 fails it; with routers that keep
    ports, both versions pass.

⚡ Quick Install (One-Line)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
    curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
    irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Download (Assets)

  • 🪟 Windows (x86_64): Extract the .zip archive and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install by double-clicking or running sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run directly from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper displays an "unverified developer" warning on first launch, you can remove the quarantine attribute by running:
xattr -d com.apple.quarantine puresend

v2.0.4

Choose a tag to compare

@github-actions github-actions released this 23 Sep 14:01

PureSend v2.0.4

End-to-end encrypted, direct peer-to-peer (P2P) file and folder transfer system built with Go.

Security

  • golang.org/x/crypto 0.54.0 → 0.57.0, which fixes GO-2026-6303,
    GO-2026-6354 and GO-2026-6355. govulncheck found none of them
    reachable from PureSend's code; the update takes them out of the build.

Changed

  • go-libp2p 0.49.0 → 0.50.0 (quic-go 0.62.0). It carries a hole-punching
    fix: the attempt's timeout is set before the connection notifications
    that can start it.
  • The terminal interface runs on Bubble Tea v2, Lip Gloss v2 and
    Bubbles v2.
    The screens and keys are the same. Colours now follow the
    background the terminal reports when asked, and the code box keeps the
    terminal's own text colour for its prompt and cursor, which the new
    defaults would have drawn in a grey that is hard to see on a light
    background. A pasted code still lands in the code box: v2 delivers a
    paste as one message rather than as keys, and it is routed there.
  • pion/stun 3.1.7 → 4.0.1.
  • Go 1.27.1: go.mod names it as the toolchain, so a machine with an older
    1.27 fetches it, and the server image builds on golang:1.27.1-alpine3.24
    rather than whatever 1.27-alpine a builder has cached. The server
    image runs on Alpine 3.24 instead of 3.22.
  • The rest of the dependency tree is current as of September 2026, except
    libp2p's own network stack (quic-go, webtransport-go, the pion WebRTC
    packages), which stays at the versions go-libp2p 0.50.0 is built and
    tested against; newer pion releases do not even compile together.
  • CI and the release job run on ubuntu-26.04.
  • The release page's install notes and the .deb package description are
    in English.
  • Dependabot groups the charm.land modules with the rest of Charm.

Fixed

  • Something a library logged — quic-go's warning about UDP buffer sizes,
    on most Linux machines — was written over the terminal interface, and
    the new renderer, which redraws only the cells it changed, would have
    left it there. Log output is now kept off the screen while the
    interface runs.
  • make deb stamped every package it built as 2.0.1, whatever the code
    was. It now takes the version from the latest release tag, and builds
    in the release signing key, so a locally built package checks update
    signatures the way the released one does.

⚡ Quick Install (One-Line)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
    curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
    irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Download (Assets)

  • 🪟 Windows (x86_64): Extract the .zip archive and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install by double-clicking or running sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run directly from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper displays an "unverified developer" warning on first launch, you can remove the quarantine attribute by running:
xattr -d com.apple.quarantine puresend

v2.0.3

Choose a tag to compare

@github-actions github-actions released this 23 Sep 10:15

PureSend v2.0.3

An end-to-end encrypted, direct peer-to-peer (P2P) file and directory transfer system built with Go.

Nothing in the program changed; the binaries differ from 2.0.2 only in
their version stamp. This release is the first one built by the updated
release workflow below.

Fixed

  • The AUR PKGBUILD was still at 2.0.0 after 2.0.1 went out; it now
    follows each release, with that release's archive digest.

Changed

  • CI and the release workflow run on the Node 24 versions of their
    actions (checkout, setup-go, upload-artifact, goreleaser-action)
    instead of the Node 20 ones GitHub has deprecated, and on
    ubuntu-24.04 rather than ubuntu-latest, which is about to move to
    a new Ubuntu under every job at once.

⚡ Quick Install (One-Liner)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Downloads (Assets)

  • 🪟 Windows (x86_64): Download the .zip archive, extract it, and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install it via double-click or run sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run it directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run it from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper shows an "unverified developer" warning on first launch, remove the quarantine flag by running the following command in your terminal:
xattr -d com.apple.quarantine puresend

v2.0.2

Choose a tag to compare

@github-actions github-actions released this 23 Sep 09:52

PureSend v2.0.2

An end-to-end encrypted, direct peer-to-peer (P2P) file and directory transfer system built with Go.

Security

  • A room allows 3 guesses at its code, however they are timed. Wrong
    codes were counted when a handshake ended, so a guesser who held several
    handshakes open at once, each waiting only on its verdict, had every one
    of them judged before the count caught up: 4 guesses instead of 3, and
    the fourth, if right, got the files. Each proof is now counted as it is
    judged, and once a room has had its 3 wrong codes, no further proof is
    judged at all. Only guesses that are judged count; a handshake that
    breaks off before its proof, or sends a malformed message, tells the
    guesser nothing and uses up nothing.
  • Releases are signed. checksums.txt now comes with a minisign
    signature. Clients built from this release on refuse an update whose
    checksum list is not signed with the project's key, and the install
    scripts carry the same key. The public key is in SECURITY.md.

Added

  • docs/DEPLOYMENT.md lists every secret the project holds — where each
    one lives, what losing or leaking it costs, how to store it and how to
    replace it — and the order a release goes out in: the tag first, main
    once the signed release is live, and the website's downloads taken from
    the release itself rather than built again.

⚡ Quick Install (One-Liner)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Downloads (Assets)

  • 🪟 Windows (x86_64): Download the .zip archive, extract it, and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install it via double-click or run sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run it directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run it from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper shows an "unverified developer" warning on first launch, remove the quarantine flag by running the following command in your terminal:
xattr -d com.apple.quarantine puresend

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 22 Sep 22:35

PureSend v2.0.1

An end-to-end encrypted, direct peer-to-peer (P2P) file and directory transfer system built with Go.

Security

  • A refused transfer no longer tells the sender where the receiver saves
    files.
    A failure to write to disk was passed on word for word, local
    path included — and with it, on most machines, the account name. The
    sender now hears the reason ("no space left on device"), not the path.
  • The server never replaces an identity key it cannot read. Any read
    error other than a missing file used to mean "generate a new key", which
    on a file that could still be written changed the peer ID and stranded
    every client already released. It is now a reason to stop, and a new key
    is only ever written to a file that does not exist yet.
  • install.ps1 checks the release signature when minisign is installed,
    as install.sh already did. Neither does until signing is set up
    (docs/DEPLOYMENT.md).

Fixed

  • The security policy no longer says the relay hides IP addresses. A
    waiting sender's public and local addresses go to anyone who looks up its
    nameplate, and libp2p's identify protocol shares them over a relayed
    connection too. SECURITY.md now says so.
  • Release notes come from this changelog. .goreleaser.yaml carried
    the 2.0.0 notes as a fixed header that every later release would have
    repeated, with claims the code does not bear out: that the server's
    ability to impersonate a peer was gone entirely (it is down to 3 guesses
    in 65,536 per room), that the room table has no cap (it has,
    -max-rooms), and that install.ps1 checks signatures. The release
    workflow now publishes the version's section of this file and refuses a
    tag that has none.
  • The release workflow checks the server address it bakes in. The step
    named "Check the server address is configured" only printed it. It now
    refuses to build when the address is missing from the published
    server.txt, which is how a default left behind after a key change
    would show. The tests in that job no longer see the production address.
  • The installers no longer fall back to a hard-coded v2.0.0 when the
    GitHub API does not answer — the next release would have quietly
    installed an old one. They ask the /releases/latest redirect instead,
    and stop if that fails too.
  • puresend -update speaks the user's language instead of always Turkish,
    and leaves a copy installed by the .deb or the AUR package to that
    package manager instead of replacing a file it owns.
  • The AUR PKGBUILD downloads the versioned release archive from GitHub,
    checked against the same digest as checksums.txt, instead of an
    unversioned binary on the website that was still 1.0.0.
  • A sender connected through the relay is no longer told the relay's limit
    is "0 B"; only the receiver learns the limit.
  • The 2.0.0 notes below said room scaling removed the cap on concurrent
    rooms; it did not.
  • Notices follow the language switch. The wrong-code warning, the
    "attempt was interrupted" notice and the update banner were stored as
    finished sentences, so a sender who pressed [L] kept reading them in the
    old language. They are now kept as facts and put into words when drawn;
    the code entry placeholder follows the switch from any screen too.
  • Performance documentation now reports measurements only. The README
    claimed "100% bandwidth", a 2.5G line rate that was never measured, and
    called the handshake "zero-knowledge"; BENCHMARK.md listed a 0-allocation
    result for safetext.Clean that the code has never had (it is ~650 ns and
    4 allocations). Both now carry measured numbers with the command behind
    each, and say what has not been measured.
  • The handshake is described as what it is — a SPAKE2-style exchange from
    schollz/pake, not RFC 9382 SPAKE2 — everywhere, as auth.go already did.
  • The AUR package no longer describes PureSend as WebRTC.

Added

  • make bench-e2e (scripts/bench-e2e.sh): throughput and peak memory of
    the real binaries end to end on loopback. On a Ryzen 7 5700X: 360–390 MB/s,
    35–41 MB of RAM from 256 MiB up to 8 GiB.
  • BenchmarkHandshake: the room-code handshake takes ~0.6 ms of CPU.
  • make cover counts the client binary the integration tests start, so
    flag handling and headless mode show up in coverage (72% → 77% overall).
    CI reports the same number.
  • A test that every message exists in both languages.
  • The folder picker warns immediately on screen when [s] is pressed on a forbidden destination (such as the home folder itself or drive root), instead of waiting for a transfer to fail.

Changed

  • The terminal interface is split by concern (tui.go, update.go,
    view.go, format.go), and its key handling into one function per screen.
  • Receiver status steps are shared constants of p2p, not strings the
    interface had to spell the same way.

Removed

  • The room code screen and its messages, unused since the sender's waiting
    screen took its place.

⚡ Quick Install (One-Liner)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Downloads (Assets)

  • 🪟 Windows (x86_64): Download the .zip archive, extract it, and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install it via double-click or run sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run it directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run it from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper shows an "unverified developer" warning on first launch, remove the quarantine flag by running the following command in your terminal:
xattr -d com.apple.quarantine puresend

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 11:45

PureSend v2.0.0 🚀

An end-to-end encrypted, direct peer-to-peer (P2P) file and directory transfer system built with Go.

⚠️ Breaking Changes (Why v2.0.0?)

This is a major release resulting from a comprehensive security audit of version 1.0.0. The rendezvous protocol has been upgraded to /puresend/rendezvous/2.0.0 and is not backward-compatible with v1.0.0 clients/servers.

🛡️ Security and Architectural Updates:

  • Server No Longer Sees the Password (Magic-Wormhole Model): Codes are now split; the server only sees the public room number (nameplate: 42), while the secret words (kiraz-liman) are never transmitted to the server and are strictly used in the peer-to-peer PAKE handshake. The risk of server-side MITM is completely eliminated.
  • Dynamic Room Scaling: Room numbers start at a minimum of 2 digits (10..99) and dynamically expand to 3, 4, 5+ digits as server occupancy increases to preserve sparsity rules. The concurrent room limit has been removed.
  • Brute-Force Protection: After 3 incorrect code attempts, the room deletes itself from the server and self-destructs. The confirmation tag is not presented until the remote peer verifies their key.
  • DoS and Resource Protection: The server-wide global minute registration budget (-register-budget) has been removed; when the table is full, disconnected rooms are evicted.
  • Integrity and Signature Verification: puresend -update, install.sh, and install.ps1 now perform SHA-256 integrity checks via checksums.txt and digital signature verification via minisign.
  • Filesystem Security: Prevented downloading directly to the home directory (CheckDestination), blocked file exfiltration through symlinks (checkNoLinks), and mitigated TOCTOU race conditions via atomic hard links (place()).

⚡ Quick Install (One-Liner)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manual Installation & Direct Downloads (Assets)

  • 🪟 Windows (x86_64): Download the .zip archive, extract it, and run puresend.exe.
  • 📦 Debian / Ubuntu (amd64): Download the .deb package and install it via double-click or run sudo dpkg -i puresend_*.deb.
  • 🐧 Linux (x86_64): Extract the .tar.gz archive and run it directly from the terminal (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): Extract the .tar.gz archive and run it from the terminal (./puresend).

💡 macOS Note: If macOS Gatekeeper shows an "unverified developer" warning on first launch, remove the quarantine flag by running the following command in your terminal:
xattr -d com.apple.quarantine puresend

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 14:21

PureSend 🚀

Go ile geliştirilmiş, uçtan uca şifreli (Zero-Trust) ve doğrudan eşler arası (P2P) dosya ve klasör transfer sistemi.

⚡ Hızlı Kurulum (Tek Satır)

  • Linux & macOS (Arch, Ubuntu, Fedora, Debian, macOS):
    curl -fsSL https://raw.githubusercontent.com/Baaaki/PureSend/main/install.sh | sh
  • Windows (PowerShell):
    irm https://raw.githubusercontent.com/Baaaki/PureSend/main/install.ps1 | iex

📦 Manuel Kurulum & Doğrudan İndirme (Assets)

  • 🪟 Windows (x86_64): .zip arşivini indirip çıkartın ve puresend.exeyi çalıştırın.
  • 📦 Debian / Ubuntu (amd64): .deb paketini indirip çift tıklayarak veya sudo dpkg -i puresend_*.deb komutu ile kurun.
  • 🐧 Linux (x86_64): .tar.gz arşivini çıkartıp doğrudan terminalden çalıştırın (./puresend).
  • 🍏 macOS (Apple Silicon - M1/M2/M3/M4): .tar.gz arşivini çıkartıp terminalden çalıştırın (./puresend).


💡 macOS Notu: macOS Gatekeeper ilk açılışta "geliştirici doğrulanamadı" uyarısı verirse, terminalde şu komutu çalıştırarak karantina bayrağını kaldırabilirsiniz:
xattr -d com.apple.quarantine puresend