All apps · 0 apps
localsend-nas
Docker app from alexindigo's Repository
Overview
Readme
View on GitHub
localsend-nas
A LocalSend node with a web UI, built for NAS-style deployments: browse host-mounted share directories in a browser, assemble a basket of files, pick a discovered device, and the server sends the files directly to the recipient's LocalSend app — the files never round-trip through your laptop. Receiving works too: a desktop-app-style dialog lets you accept inbound files straight into a share.
Speaks LocalSend Protocol v2.2 over HTTPS (port 53317 by default) and announces itself via multicast, so it shows up in other devices' lists.
Receiving
On by default. When a device sends files to the NAS, every open UI tab pops a dialog with the sender, file list, a destination picker (any configured share), and a countdown (default 30 s):
- Accept / Decline — your call, per transfer.
- Countdown expires — with a dropbox configured, files are auto-accepted into that share; otherwise the request is politely rejected.
--read-only(envLOCALSEND_NAS_READ_ONLY=1) — restores the strict v1 send-only posture: no receiving at all (senders get a clean 403).
Countdown length and the dropbox share live in the settings menu (gear icon,
top right) and persist server-side in <data-dir>/settings.json. The menu
also has a toggle for showing NAS metadata files (@eaDir, .DS_Store,
#recycle, …) — hidden by default.
Received files keep their folder structure, never overwrite existing files
(name (1).ext dedupe), and land in shares as normal files — browsable and
re-sendable immediately.
Single static Go binary, no runtime dependencies, embedded web UI.
Running
Binary (see releases):
localsend-nas --listen :80 --share movies=/srv/movies --share books=/srv/books
Docker (alexindigo/localsend-nas on Docker Hub — also on
GHCR;
Docker Hub is the one Synology Container Manager can browse):
docker run -d --name localsend-nas --network host \
-v /volume1/movies:/srv/movies:ro \
-v /volume1/books:/srv/books:ro \
-v localsend-nas-data:/data \
-e PUID=1026 -e PGID=100 \
-e LOCALSEND_NAS_SHARES="movies=/srv/movies,books=/srv/books" \
alexindigo/localsend-nas:latest
(Volume syntax is -v host-path:container-path; shares stay read-only in
the container. On PUID/PGID see the permissions note below.)
--network host is recommended: LocalSend discovery rides multicast UDP
53317, which NAT/bridge networking breaks. All flags have
LOCALSEND_NAS_* env equivalents (--listen → LOCALSEND_NAS_LISTEN,
repeatable --share → comma-separated LOCALSEND_NAS_SHARES, …).
docker-compose equivalent:
services:
localsend-nas:
# use `alexindigo/localsend-nas` for the Docker Hub based image
image: ghcr.io/alexindigo/localsend-nas:latest
container_name: localsend-nas
network_mode: host # required for multicast discovery
restart: unless-stopped
environment:
# Your host user's uid/gid (`id` over SSH; Synology default user is
# typically 1026:100). DSM's permission-manager abstraction doesn't
# exist inside containers, but the underlying POSIX ACLs are enforced
# by the kernel — the process's uid/gid must match the grant.
PUID: "1026"
PGID: "100"
LOCALSEND_NAS_SHARES: movies=/srv/movies,books=/srv/books
# LOCALSEND_NAS_LISTEN: ":8080" # image default; :80 needs root
# LOCALSEND_NAS_ALIAS: "Nas living-room"
volumes:
# host path : container path (shares stay read-only inside the container)
- /volume1/movies:/srv/movies:ro
- /volume1/books:/srv/books:ro
- localsend-nas-data:/data # named volume for the persistent device identity
volumes:
localsend-nas-data:
With network_mode: host the web UI lands on the host's port 8080
directly; change LOCALSEND_NAS_LISTEN if that clashes.
Permissions: the image follows the linuxserver.io PUID/PGID
convention — the container starts as root, renumbers the built-in
localsend user, then drops privileges. Defaults are 1000/1000; set
them to the uid/gid that owns your shares (id on the host). The app never
writes to :ro mounts; received files land owned by that uid/gid.
Operability (for scripts and monitoring)
GET /api/health— liveness + identity:{"version","protocol","alias","fingerprint","lsPort"}. Always 200 when the process serves HTTP.GET /api/selftest— subsystem diagnostics: share roots re-stat'd, LocalSend port self-dial, multicast listener state, known-device count.200 {"ok":true,…}when healthy,503with per-check error strings otherwise — socurl -sf …/api/selftestworks as an install gate.
Status
Early development. See the commit history and the plan document for scope.
Logo: web/logo.svg (source) / web/logo.png (rendered) — the LocalSend
"device + broadcast ring" motif, squared: a NAS box at the center of the
local network. Style derived from the LocalSend logo (© Tien Do Nam,
Apache-2.0) as an ecosystem
homage — this is not an official LocalSend project.
License
GNU Lesser General Public License v3.0 (LGPL-3.0). See LICENSE.
Install localsend-nas on Unraid in a few clicks.
Find localsend-nas in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
alexindigo/localsend-nasRuntime arguments
- Web UI
http://[IP]:[PORT:8080]- Network
host- Shell
sh- Privileged
- false
Template configuration
Web UI port. Host networking: no mapping, container port = host port.
- Target
- 8080
- Default
- 8080
- Value
- 8080
LocalSend protocol port (HTTPS). Must be reachable by other devices.
- Target
- 53317
- Default
- 53317
- Value
- 53317
LocalSend discovery (multicast UDP). Required for auto-discovery.
- Target
- 53317
- Default
- 53317
- Value
- 53317
Device identity, settings.json and saved targets.
- Target
- /data
- Default
- /mnt/user/appdata/localsend-nas
- Value
- /mnt/user/appdata/localsend-nas
Your Unraid shares, mounted 1:1 (host path = container path). rw so received files can be written. All entries in the Shares variable live under this mount.
- Target
- /mnt/user
- Default
- /mnt/user
- Value
- /mnt/user
Comma-separated name=path pairs shown as shares in the web UI. Because /mnt/user is mounted 1:1, paths match Unraid share paths — e.g. media=/mnt/user/media,photos=/mnt/user/photos. Edit this list to add or rename shares; no extra Path mappings needed.
- Target
- LOCALSEND_NAS_SHARES
- Default
- media=/mnt/user/media
- Value
- media=/mnt/user/media
Web UI listen address. Change the port if 8080 clashes with another app on the host; keep the WebUI Port entry in sync.
- Target
- LOCALSEND_NAS_LISTEN
- Default
- :8080
- Value
- :8080
Name this NAS shows as in other devices' LocalSend lists.
- Target
- LOCALSEND_NAS_ALIAS
- Default
- Unraid NAS
- Value
- Unraid NAS
User the app runs as (Unraid default 99 = nobody). Must have read access to your shares, and write access wherever you receive files.
- Target
- PUID
- Default
- 99
- Value
- 99
Group the app runs as (Unraid default 100 = users).
- Target
- PGID
- Default
- 100
- Value
- 100