MCPcopy Index your code
hub / github.com/tonyantony300/alt-sendme

github.com/tonyantony300/alt-sendme @v0.4.2 sqlite

repository ↗ · DeepWiki ↗ · release v0.4.2 ↗
582 symbols 1,353 edges 178 files 7 documented · 1%
README

File transfer doesn't need to be complicated

AltSendme Header

AltSendme working demo

Discord Version Website Platforms Sponsor

A free and open-source file transfer tool that harnesses the power of cutting-edge peer-to-peer networking, letting you transfer files directly without storing them on cloud servers.

Why rely on WeTransfer, Dropbox, or Google Drive when you can reliably and easily transfer files directly, end-to-end encrypted and without revealing any personal information?

Join our Discord to contribute

Features

  • Send anywhere – Works seamlessly on local networks or across continents.
  • Transfer anything – Send files or directories of any size or any format, verified with BLAKE3-based integrity checks.
  • No accounts or personal info – Transfer files without sign-ups or exposing personal info.
  • Peer-to-peer direct transfer – Send files straight between devices, with no cloud storage in between.
  • Authentication - Tickets contains cryptographic identity info for authentication.
  • End-to-end encryption – Always-on protection with QUIC + TLS 1.3 for forward and backward secrecy.
  • Resumable transfers – Interrupted downloads automatically resume where they left off.
  • Broadcast - Share same file/folder with any number of peers.
  • Preview - View and verify before downloading
  • Fast & reliable – Capable of saturating multi-gigabit connections for lightning-fast transfers.
  • NAT traversal via QUIC – Secure, low-latency connections using QUIC hole punching with encrypted relay fallback.
  • CLI integration – Interoperable with the Sendme CLI.
  • Free & open source – No upload costs, no size limits, and fully community-driven.
  • Coming Soon – Mobile and Web versions

Installation

The easiest way to get started is by downloading one of the following versions for your respective operating system:

Platform Download
Windows AltSendme.exe (x64)
macOS AltSendme.dmg
Linux AltSendme.deb
Android AltSendme.apk

Windows on ARM (Snapdragon / Copilot+ PC): use AltSendme_*_aarch64-setup.exe from GitHub Releases.

Windows (Scoop)

scoop bucket add extras
scoop install extras/altsendme

More download options in GitHub Releases.

Partners

<img src="https://www.altsendme.com/assets/sponsors/testmu-dark.svg" height="80" alt="TestMuAI">

We're looking for Partners to join our mission! Partner with us and support while we push the boundaries of peer-to-peer file transfer.

LET'S CHAT

Supported Languages

🇺🇸 🇷🇺 🇫🇷 🇨🇳 🇩🇪 🇯🇵 🇮🇳 🇹🇭 🇮🇹 🇨🇿 🇪🇸 🇧🇷 🇸🇦 🇮🇷 🇰🇷 🇵🇱 🇺🇦 🇹🇷 🇳🇴 🇧🇩 🇭🇺 🇷🇸 🇹🇼 🇰🇭

How it works

  1. Drop your file or folder - AltSendme creates a one-time share code (called a "ticket").
  2. Share the ticket via chat, email, or text.
  3. Your friend pastes the ticket in their app, and the transfer begins.

Under the hood ⚙️🛠️

AltSendme uses Iroh under the hood to enable peer-to-peer file transfer. It is a modern modular alternative to technologies like WebRTC and libp2p.

Important concepts

  • Blobs
  • Tickets
  • Peer Discovery, Hole-punching & NAT traversal
  • QUIC & End-to-end encryption
  • Relays

1. Blobs

Content-addressed blob storage and transfer. iroh-blobs implements request/response and streaming transfers of arbitrary-sized byte blobs, using BLAKE3-verified streams and content-addressed links.

  • Blob: an opaque sequence of bytes (no embedded metadata).
  • Link: a 32-byte BLAKE3 hash that identifies a blob.
  • HashSeq: a blob that contains a sequence of links (useful for chunking/trees).
  • Provider / Requester: provider serves data; requester fetches it. An endpoint can be both.

2. Tickets

Tickets are a way to share dialing information between iroh endpoints. They're a single token that contains everything needed to connect to another endpoint, or to fetch a blob in this case. Contains Ed25519 NodeIds: Your device's cryptographic identity for authentication.They're also very powerful. It's worth pointing out this setup is considerably better than full peer-2-peer systems, which broadcast your IP to peers. Instead in iroh, tickets are used to form a "cozy network" between peers you explicitly want to connect with. It's possible to go "full p2p" & configure your app to broadcast dialing details, but tickets represent a better middle-ground default.

3. Peer Discovery, NAT Traversal & Hole Punching

Peers register with an open-source public relay servers at startup to help traverse firewalls and NATs, enabling connection setup. Once connected, Iroh uses QUIC hole punching to try and establish a direct peer-to-peer connection, bypassing the relay. If direct connection is possible, communication happens directly between peers with end-to-end encryption; otherwise, the relay operates only temporarily as a fallback. This enables smooth reliable connections between peers within local-network and across the internet.

4. QUIC & Encryption

QUIC is a modern transport protocol built on UDP, designed to reduce latency and improve web performance over TCP. Developed originally by Google and now standardized by the IETF as HTTP/3's foundation, it integrates TLS 1.3 encryption directly into the protocol.

QUIC allows following super-powers: * encryption & authentication * stream multiplexing * no head-of-line blocking issues * stream priorities * one shared congestion controller * an encrypted, unreliable datagram transport * zero round trip time connection establishment if you've connected to another endpoint before

5. Relays

AltSendme uses open-source public relay servers to support establishing direct connections, to speed up initial connection times, and to provide a fallback should direct connections between two endpoints fail or be impossible otherwise. All connections are end-to-end encrypted. The relay is “just another UDP socket” for sending encrypted packets around. Read more.

Self-hosting relays

You can run your own iroh relay and point AltSendme at it instead of the public infrastructure:

  1. Deploy a relay using the assets in deploy/relay/ (Docker Compose on a VPS or Fly.io).
  2. In the app, open Settings → Network and choose Custom self-hosted.
  3. Add your relay URL(s) and optional auth token if you enabled access.shared_token on the server.
  4. Use Test connection to verify registration.

For a fully private setup, configure the same relay URLs on both sender and receiver devices.

What if only one person uses a self-hosted relay?

Transfers can still work when one side uses custom relays and the other uses the default public relays. Here's the simple version:

Your relay setting controls where your device registers. When you share a file, the ticket includes your relay URL. The other person connects using that ticket — they don't need to match your settings.

Who shares Sender uses Receiver uses Usually works?
Alice Custom (open relay) Public relays Yes — receiver reaches Alice via the relay URL in the ticket
Alice Custom (auth token required) Public relays, no token Often no — receiver can't authenticate to Alice's private relay
Alice Custom (auth token required) Same relay + same token Yes
Either side Any Any, same LAN or good NAT Yes — direct peer-to-peer may skip relays entirely

Direction matters for privacy, not just connectivity:

  • You share, they use public relays: If a relay is needed, traffic may go through your relay. They still use public relays for their own device.
  • They share, you use a self-hosted relay: If a relay is needed, traffic may go through their public relay — yours isn't used for that path.

So mixed setups are fine for getting files across, but they're not fully private unless both people use the same self-hosted relay(s) (or connect directly without relay fallback).

Quick rules of thumb:

  • Just want it to work? An open self-hosted relay (no auth token) is enough; the other person can keep default public relays.
  • Want a private relay? Both people need your relay URL and the auth token in Settings → Network.
  • Want zero public relay use? Both people must set Custom self-hosted to the same relay(s).
  • Want no relays at all? Both people set Disabled — only works when a direct connection is possible (e.g. same network).

Roadmap 🚧

  • Cross-platform Mobile versions
  • Phrase-based Addressing via Iroh-gossip and PAKE
  • Web version (Send and receive from browser)
  • Better system/network insights into transfer process

📫 Drop your Email to recieve updates

Development Setup

Prerequisites

  • Rust 1.91+
  • Node.js 18+
  • npm or yarn

Getting Started

  1. Fork and clone the repository: bash git clone https://github.com/your-username/alt-sendme.git cd alt-sendme

  2. Install frontend dependencies: bash npm install

  3. Install Tauri: bash cargo install tauri-cli

  4. Run in development mode: bash cargo tauri dev

  5. (Optional) Setup android project: bash rm src-tauri/gen/android cargo tauri android init git checkout src-tauri/gen/android cargo tauri android dev

  6. Build locally : bash cargo tauri build --no-bundle

  7. Install on Android : ``` npm run android:build -- --debug --apk

adb install -r src-tauri/gen/android/app/build/outputs/apk/universal/debug/app-universal-debug.apk ```

Testing Locally

Install Sendme CLI tool and you can share files within same device to test the whole transfer process. Files don't leave your device it works like a copy operation.

Join our Discord to contribute

The best way to contribute is to join our Discord and say hi. Introduce yourself and share what skills or interests you have - whether that’s coding, testing, design, or something else. You can also raise issues, suggest fixes, or pitch ideas. Maintainers are there to guide you every step of the way.

It’s the best place to get context, align on direction, and collaborate with the community.

License

AGPL-3.0

Privacy Policy

See PRIVACY.md for information about how AltSendme handles your data and privacy.

Sponsor Buy Me Coffee

Contributors

Contact

Reach me here for suggestions, feedback or media related communication.

Thank you for checking out this project! If you find it useful, consider giving it a star and helping spread the word.

Built on

iroh

Extension points exported contracts — how you extend this code

ImportMetaEnv (Interface)
(no doc)
web-app/src/vite-env.d.ts
ImportMeta (Interface)
(no doc)
web-app/src/vite-env.d.ts
ReceiverState (Interface)
(no doc)
web-app/src/types/receiver.ts
TicketInputProps (Interface)
(no doc)
web-app/src/types/receiver.ts
TransferMetadata (Interface)
(no doc)
web-app/src/types/transfer.ts

Core symbols most depended-on inside this repo

cn
called by 256
web-app/src/lib/utils.ts
useTranslation
called by 47
web-app/src/i18n/react-i18next-compat.ts
mergeProps
called by 20
web-app/src/components/animate-ui/primitives/animate/slot.tsx
reset
called by 9
web-app/src/utils/etaUtils.ts
useSidebar
called by 5
web-app/src/components/ui/sidebar.tsx
registerListener
called by 5
web-app/src/hooks/useReceiver.ts
safeUnlisten
called by 5
web-app/src/hooks/useSender.ts
getPathBaseName
called by 4
web-app/src/components/sender/Dropzone.tsx

Shape

Function 511
Interface 60
Method 7
Class 4

Languages

TypeScript100%

Modules by API surface

web-app/src/components/ui/sidebar.tsx25 symbols
web-app/src/components/ui/combobox.tsx19 symbols
web-app/src/hooks/useReceiver.ts16 symbols
web-app/src/components/ui/command.tsx16 symbols
web-app/src/components/ui/autocomplete.tsx14 symbols
web-app/src/components/common/UploadBox.tsx14 symbols
web-app/src/components/ui/menu.tsx13 symbols
web-app/src/hooks/useSender.ts12 symbols
web-app/src/components/settings/relay/relay-settings.tsx11 symbols
web-app/src/components/ui/sheet.tsx10 symbols
web-app/src/components/ui/dialog.tsx10 symbols
web-app/src/components/sender/Dropzone.tsx10 symbols

Dependencies from manifests, versioned

@base-ui/react1.1.0 · 1×
@biomejs/biome2.3.11 · 1×
@phosphor-icons/react2.1.10 · 1×
@radix-ui/react-alert-dialog1.1.15 · 1×
@tanstack/react-query5.90.21 · 1×
@tauri-apps/api2.10.0 · 1×
@tauri-apps/cli2.10.0 · 1×
@tauri-apps/plugin-dialog2.7.0 · 1×
@tauri-apps/plugin-notification2.3.3 · 1×
@tauri-apps/plugin-opener2.5.2 · 1×
@tauri-apps/plugin-os2.3.2 · 1×

For agents

$ claude mcp add alt-sendme \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact