Project
MAR 2026

Pavan Dhadge

GoLocalShare

Instant, Secure File & Folder Sharing – One Command, No Accounts

GoLocalShare is a lightweight, privacy-first file sharing server written in Go.

Run one command → it starts a minimal HTTP server on your machine → generates a unique, time-limited access token → prints a shareable URL.

Recipients open the link, enter the token, and can browse/download files or folders — all without accounts, sign-ups, or permanent cloud storage.

It’s perfect for quick LAN transfers (blazing fast, no internet needed) or short-term remote sharing (via optional Cloudinary upload with auto-delete).


Live Demo / Docs

View on GitHub

Why GoLocalShare?

Cloud services like Dropbox/WeTransfer are convenient but slow for large files, raise privacy concerns, and require uploads even for local sharing.
AirDrop is Apple-only. USB drives are physical hassle.

GoLocalShare solves this with:

  • LAN speed — direct P2P-like transfers on your local network (no internet bottleneck)
  • Token security — unique, expiring access token per session
  • Optional cloud fallback — temporary Cloudinary upload for remote recipients (auto-deletes after expiry)
  • Zero setup — one binary, one command, no accounts or persistent storage

It’s built for real scenarios: sharing a video with family on Wi-Fi, sending docs to a colleague on the same LAN, or securely dropping a file to a remote friend for 1 hour.

How It Works

  1. Run the binary with your file/folder path and optional flags.
  2. It starts an HTTP server (default port 8090) and generates a random session token.
  3. Prints the access URL (e.g., http://192.168.1.100:8090) and token.
  4. Share the link + token with recipients.
  5. Recipients open the link → enter token → see file list → browse/download.
  6. Session auto-expires after your chosen duration (files inaccessible, cloud copies deleted if used).

LAN mode — files stay on your machine; access limited to local network (or port-forwarded).
Cloud mode (—cloud) — file uploads to Cloudinary temporarily; generates a public-ish URL; deleted on expiry (credentials stored locally in ~/.gofileserver_cloudinary.json after first use).

Owner panel (/) shows token and reset option.
User page (/token) is the entry point for recipients.

Example Usage

Share a single file on LAN for 2 hours:

./goLocalShare --duration 2h /path/to/video.mp4

Share a whole directory for 30 minutes:

./goLocalShare --dir --duration 30m /path/to/project-folder

Cloud upload for remote access (1 hour, first time):

./goLocalShare --cloud \
  --cloud-name your-cloud-name \
  --cloud-key your-api-key \
  --cloud-secret your-api-secret \
  --duration 1h /path/to/document.pdf

(Next time: just --cloud --duration 1h ... — creds load automatically.)

Security Focus

Designed with real threats in mind:

  • Unique session tokens — cryptographically random, time-limited
  • Rate limiting — 100 requests/min per IP
  • Brute-force protection — 2-second delay after failed token attempts
  • Path & symlink restrictions — only files inside shared path accessible
  • Security headers — CSP, XSS-Protection, X-Content-Type-Options: nosniff, etc.
  • No persistent storage — files never saved beyond session
  • Cloud auto-cleanup — Cloudinary files deleted post-expiry

No telemetry. No accounts. No logs beyond what you enable.

Tech Stack & Build

  • Language: Go (cross-platform: Linux/Windows/macOS)
  • Frontend: Minimal HTML + JavaScript + Tailwind (for owner/user pages)
  • Cloud (optional): Cloudinary API (credentials stored locally)
  • Build: go build or ./build.sh for binaries

Install — Grab pre-built binaries from Releases, or:

git clone https://github.com/pavandhadge/goLocalShare.git
cd goLocalShare
go build -o goLocalShare main.go

Closing Thoughts

GoLocalShare taught me how to balance speed, security, and simplicity in a networked tool.
One binary, one command, strong defaults — and users never feel the complexity underneath.

It’s not trying to replace enterprise file servers.
It’s for the moments you need to share something now, securely, without friction.

Try it next time you need to drop a file across the room or across the city for an hour.

Feedback, bugs, or feature ideas → open an issue or DM @pavan_dhadge.

“GoLocalShare taught me how to design for speed, security, and simplicity in a networked application — all while keeping the user experience effortless.”