Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LANShare

Drop a file in a browser tab, grab it from any other device on the same WiFi. No internet required, no cloud, no size cap beyond your disk space.

laptop ──┐
phone  ──┼── same WiFi router ── one of you runs LANShare ── everyone gets a link / QR
tablet ──┘

How it works

One device on the network runs a small Node server. It serves a web page and accepts uploads, storing files straight to disk (never buffered fully in memory, so multi-GB files are fine even on machines with limited RAM). Every other device on the same WiFi opens the printed URL — or scans the QR code — in any browser, and can upload or download files from there.

Nothing leaves the local network. There's no auth, by design — treat it as a temporary local drop point, not a permanent service.

Setup

Requires Node 18+ (works great with the Node 22 / nvm setup most of you already have).

cd lanshare
npm install
npm start

You'll see output like:

  LANShare is running

  →  http://192.168.1.42:3000

  Open one of the addresses above on any device connected
  to the same WiFi network. Press Ctrl+C to stop.

Open that address on the host machine to confirm it works, then open the same address (or scan the QR code shown on the page) from any other device on the same network.

Usage

  • Send a file: drag it onto the drop zone, or click browse. Progress bar shows live upload percentage.
  • Get a file: anyone on the network sees it appear in the file list (the page polls every 4 seconds) and can hit download.
  • Remove a file: delete button on any row — removes it for everyone.
  • Connect a new device: scan the QR code in the top panel, or copy the link and send it however's easiest (AirDrop, text, whatever).

Configuration

Change the port if 3000 is already taken on your machine:

PORT=4000 npm start

Default per-file upload limit is 10 GB. To change it, edit the fileSize limit in server.js:

const upload = multer({
  storage,
  limits: {
    fileSize: 10 * 1024 * 1024 * 1024 // change this
  }
});

Notes on flaky WiFi

If your network drops connections mid-transfer (unstable WiFi cards, AP isolation, weak signal), a large upload can fail partway through. This version does plain single-shot uploads — if you need resumable/chunked uploads for big files over an unreliable link, look at swapping the upload endpoint for tus-node-server (resumable upload protocol), which is a drop-in-ish replacement for the /upload route.

Also worth checking once: some routers enable AP / client isolation, which blocks device-to-device traffic on the same WiFi even though everyone's connected to the same network. If a second device can't load the page at all, that's the first thing to rule out (router admin settings, usually under WiFi or guest network options).

Project structure

lanshare/
├── server.js          Express server: upload, list, delete, QR/connection info
├── package.json
├── public/
│   ├── index.html     Page structure
│   ├── style.css      Dark / neon-green styling
│   └── app.js         Drag-drop, upload progress, file list polling
└── uploads/           Files land here (gitignored, kept via .gitkeep)

Stack

Vanilla JS frontend, Express + Multer backend, qrcode for the connect QR. No frameworks, no build step — clone it, npm install, run it.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages