A crossplatform Electron desktop application that will act as a local file sharing server using Express web server, with Multer storage.
Upload files through the desktop app or web interface and share them across your local network. Perfect for quick file transfers between devices without cloud dependencies or complex setup.
- Download the installer
- Run as administrator (for proper installation)
- Follow the setup wizard
- Launch from Start Menu or desktop shortcut
-
Clone the repository
git clone https://github.com/KristupasJon/LocalServerDrop.git cd LocalServerDrop -
Install dependencies
npm install
-
Build CSS (required - output.css is not tracked in git)
npm run buildcss
Note
The CSS build step is required because output.css is not tracked in git. You must run this command before starting the application.
- Start the application
npm start
npm run devBuild for your current platform:
npm run buildBuild for specific platforms:
npm run build:win # Windows
npm run build:mac # macOS
npm run build:linux # LinuxBuilt applications will be available in the dist/ directory.
- Launch LocalServerDrop
- Drag and drop files onto the upload zone, or click to browse
- Files are automatically uploaded to the local server
- Use the "File Vault" section to manage uploaded files
- Click the server button to open the web interface. The button shows your device IPv4 address
- Open any web browser
- Navigate to
http://localhost:8080on the same machine, orhttp://<your-device-ip>:8080from other devices on the same network - Upload and download files through the web interface
- Perfect for sharing with other devices on your network
- The Electron UI shows your device IPv4 so others can connect (for example,
http://192.168.1.50:8080) - Other devices on your network can access files by visiting
http://[YOUR-IP]:8080 - Find your IP address using
ipconfig(Windows) orifconfig(Mac/Linux)
Important
Windows Firewall may block inbound connections the first time the server runs. Approve the prompt when Windows asks to allow access. If needed, you can add a rule to allow TCP 8080.
Windows PowerShell (run as Administrator):
New-NetFirewallRule -DisplayName "LocalServerDrop 8080" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080To remove later:
Remove-NetFirewallRule -DisplayName "LocalServerDrop 8080"- Local Network Ready: Server binds to listens on all interfaces by default. Use a trusted network or change binding to
127.0.0.1to restrict to the local machine only although that would defeat the purpose of the app - Admin Token Authentication: File deletion requires admin token
- Path Traversal Protection: Prevents unauthorized file access
Note
Security Notes:
- Per-session admin token: A new admin token is generated on each app start and passed to the server via
X-Admin-Tokenheader for delete operations. Restarting the app changes the token. - Upload safety: Filenames are sanitized to their basename (no path components). No explicit file size limit is enforced by default; add a Multer limit in code if you need one.
POST /upload- Upload a fileGET /list- List all uploaded files- Returns an array of objects:
{ name: string, size: number }(sizein bytes)
- Returns an array of objects:
GET /files/:filename- Download a specific fileDELETE /delete/:filename- Delete a file (admin token required)- Requires header:
X-Admin-Token: <token>
- Requires header:
GET /- Serve the web interface
- Port can be configured via environment variable:
LSD_PORT(default:8080)
- Binding host can be configured via environment variable:
LSD_BIND_HOST(default:0.0.0.0to listen on all interfaces)- Set to
127.0.0.1to restrict access to the local machine only
- Admin token is managed automatically by the Electron app:
LSD_ADMIN_TOKENis set by the Electron main process per run. You typically do not need to set this manually unless you’re running the server outside the app.
For testing with Postman or curl:
# Replace TOKEN_HERE with your actual admin token
curl -X DELETE "http://127.0.0.1:8080/delete/filename.ext" \
-H "X-Admin-Token: TOKEN_HERE"
- 403 Forbidden on delete:
- The admin token likely doesn’t match. Restart the Electron app and try the delete again from within the app UI.
- Ensure you’re sending the correct
X-Admin-Tokenfor the current session.