MCPcopy Index your code
hub / github.com/MuhamedUsman/letshare

github.com/MuhamedUsman/letshare @v1.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.1 ↗ · + Follow
554 symbols 1,512 edges 40 files 120 documented · 22%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Letshare Logo

OS Latest Release downloads

About

Letshare is a terminal-based file sharing application that creates a local web server and uses mDNS for automatic network discovery. Easily share files and folders across your local network using a simple, intuitive TUI — no complex setup needed.

Letshare

Who is it for?

Letshare is built for anyone who wants to share files fast, hassle-free, and locally. - Developers — Instantly share your build artifacts or test files with teammates without uploading to the cloud - Teachers & Professors — Distribute course material to students in a lab or classroom, all connected to the same Wi-Fi or LAN. - Teams on the same network — Share resources in offices, co-working spaces, or home labs without dealing with network drives or external servers.

Features

  • Instant file sharing over local network
  • Access via IP or .local hostname
  • Automatic peer discovery with mDNS
  • Intuitive TUI interface
  • Runs locally — no internet required
  • Cross-platform support (Linux, Windows, macOS)
  • Mobile-friendly with QR codes
  • Includes Preferences section for customized behaviour
  • Built-in download manager with pause, resume, delete options
  • Automatically zip directories (with or without compression) before sharing
  • Graceful shutdown — the server continues serving active downloads even after the server is shut down

Requirements

  • Administrator/Root privileges (required to bind to port 80)
  • Why port 80, so users don't have to write :port when they write the URL

Installation

Go

go go install github.com/MuhamedUsman/letshare

Linux

### Debian/Ubuntu (amd64) bash # Download the .deb file from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_amd64.deb # Install the package with automatic dependency resolution sudo apt install ./letshare_1.0.1_linux_amd64.deb

### Debian/Ubuntu (arm64) bash # Download the .deb file from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_arm64.deb # Install the package with automatic dependency resolution sudo apt install ./letshare_1.0.1_linux_arm64.deb

### Red Hat/Fedora/CentOS (amd64) bash # Download the .rpm file from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_amd64.rpm # Install the package with automatic dependency resolution sudo dnf install letshare_1.0.1_linux_amd64.rpm # Fedora/RHEL 8+ # or sudo yum install letshare_1.0.1_linux_amd64.rpm # CentOS/RHEL 7

### Red Hat/Fedora/CentOS (arm64) bash # Download the .rpm file from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_arm64.rpm # Install the package with automatic dependency resolution sudo dnf install letshare_1.0.1_linux_arm64.rpm # Fedora/RHEL 8+ # or sudo yum install letshare_1.0.1_linux_arm64.rpm # CentOS/RHEL 7

### Alpine Linux (amd64) bash # Download the .apk file from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_amd64.apk # Install dependencies first, then the package sudo apk add avahi avahi-tools sudo apk add --allow-untrusted letshare_1.0.1_linux_amd64.apk

### Alpine Linux (arm64) bash # Download the .apk file from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_arm64.apk # Install dependencies first, then the package sudo apk add avahi avahi-tools sudo apk add --allow-untrusted letshare_1.0.1_linux_arm64.apk

### Arch Linux (amd64) bash # Download the package from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_amd64.pkg.tar.zst # Install the package with automatic dependency resolution sudo pacman -U letshare_1.0.1_linux_amd64.pkg.tar.zst

### Arch Linux (arm64) bash # Download the package from releases wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_1.0.1_linux_arm64.pkg.tar.zst # Install the package with automatic dependency resolution sudo pacman -U letshare_1.0.1_linux_arm64.pkg.tar.zst

### Manual Binary Installation (All Distributions) If you prefer not to use package managers or encounter dependency issues: ```bash # Install mDNS dependencies manually based on your distribution:

# Debian/Ubuntu: sudo apt update && sudo apt install avahi-daemon avahi-utils

# Red Hat/Fedora/CentOS: sudo dnf install avahi avahi-tools # or use yum on older systems

# Alpine: sudo apk add avahi avahi-tools

# Arch: sudo pacman -S avahi

# Then download and install the binary: wget https://github.com/MuhamedUsman/letshare/releases/latest/download/letshare_Linux_x86_64.tar.gz tar -xzf letshare_Linux_x86_64.tar.gz sudo mv Letshare /usr/local/bin/ sudo chmod +x /usr/local/bin/letshare ```

Windows

powershell winget install MuhamedUsman.Letshare

macOS

```bash # Add the tap (only needed once) brew tap MuhamedUsman/homebrew-letshare

# Install Letshare brew install --cask letshare ```

For macOS users you may need to allow letshare access to port 80, I can't help you with that much because I don't own a mac, I can give you some un-tested solution, but I really don't want to do that.

So, if you do find a solution where user don't have to write sudo each time they run this app, feel free to open an issue and document your solution. It may help non-technical users.

Quick Start

  • Run letshare in your terminal
  • Navigate to the directory you want to share
  • Select files/folders using the TUI
  • Share the displayed URL with others on your network
  • Access files via TUI or Browser at http://[instance-name].local or the IP address

Caveats

  • Older Android devices (pre-Android 12) have problems resolving multicast DNS (.local domains). While newer Android versions support mDNS, network configuration and device-specific implementations may still cause issues. Using IP addresses ensures compatibility across all devices, which is why the QR code feature exists in the app.
  • Some download managers (including IDM) may not properly resolve .local domains due to limited mDNS support in their networking implementation. Using direct IP addresses ensures reliable downloads across different client applications.
  • If you're connected to a VPN, Letshare may bind to your VPN-assigned IP (e.g., 172.x.x.x), which is not accessible to devices on your local network, make sure you're disconnected from the VPN before starting the server.

Extras

Terminal Colors

For Linux and macOS users if you're not seeing true colors;

bash echo 'export COLORTERM=truecolor' >> ~/.profile Then restart your terminal.

Terminal Size

  • Coloumns: 145
  • Rows: 35

Terminal Font

  • Download and Install all the fonts from Recursive.zip
  • Set the terminal font face to RecMonoCasual Nerd Font Propo and font size to 10

Terminal Theme (Windows Specific Guide)

  • Enable Acrylic Material and set the opacity to 85%
  • Add this your windows terminal app settings.json file, in the schemes array
{
  "background": "#272822",
  "black": "#3E3D32",
  "blue": "#03395C",
  "brightBlack": "#272822",
  "brightBlue": "#66D9EF",
  "brightCyan": "#66D9EF",
  "brightGreen": "#A6E22E",
  "brightPurple": "#AE81FF",
  "brightRed": "#F92672",
  "brightWhite": "#F8F8F2",
  "brightYellow": "#FD971F",
  "cursorColor": "#FFFFFF",
  "cyan": "#66D9EF",
  "foreground": "#F8F8F2",
  "green": "#A6E22E",
  "name": "Monokai",
  "purple": "#AE81FF",
  "red": "#F92672",
  "selectionBackground": "#FFFFFF",
  "white": "#F8F8F2",
  "yellow": "#FFE792"
}

Feedback and Contributions

I've done my best to build this project thoughtfully, but there's always room for improvement. Your contributions play a vital role in helping it grow and get better.

Feel free to contribute by submitting an issue, suggesting ideas, or opening a pull request. Feedback and contributions are always welcomed and appreciated!

License

This product is distributed under MIT license.

Free for Commercial and Non-Commercial Use.

Extension points exported contracts — how you extend this code

Option (FuncType)
Option is used to set options in New. For example: table := New(WithColumns([]Column{{Title: "ID", Width: 10}}))
internal/tui/table/table.go

Core symbols most depended-on inside this repo

msgToCmd
called by 78
internal/tui/msg.go
Width
called by 70
internal/tui/table/table.go
Height
called by 28
internal/tui/table/table.go
Error
called by 18
internal/server/server.go
Close
called by 17
internal/zipr/zipr.go
Focus
called by 15
internal/tui/table/table.go
max
called by 15
internal/tui/table/table.go
getDownloadIDs
called by 14
internal/tui/download.go

Shape

Method 332
Function 111
Struct 75
TypeAlias 34
FuncType 1
Interface 1

Languages

Go100%

Modules by API surface

internal/tui/table/table.go48 symbols
internal/tui/download.go44 symbols
internal/tui/msg.go40 symbols
internal/tui/preference.go39 symbols
internal/tui/send.go32 symbols
internal/tui/processfiles.go32 symbols
internal/tui/extdirnav.go32 symbols
internal/tui/dirnav.go29 symbols
internal/tui/extReceive.go28 symbols
internal/server/server.go26 symbols
internal/tui/receive.go22 symbols
internal/client/client.go21 symbols

For agents

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

⬇ download graph artifact

Ask about this repo answers extend the page