A lightweight, self-hosted web file manager built for speed, security, and a quiet technical aesthetic.
Nodi is a LAN-first personal file hub for moving files across your own devices. It is designed around large browser uploads, drag-and-drop folders, mobile sending, safe sharing, and simple WebDAV access without becoming a full Nextcloud-style collaboration suite.
- Authenticate securely via BCrypt-backed login
- Browse directories with zero-latency SPA navigation
- Manage assets with async Rename, Create, and Delete actions
- Upload large files with resumable chunked transfers
- Send files from phone or laptop with a mobile-friendly upload screen
- Share read-only links or upload dropboxes on your trusted network
- Mount storage through WebDAV from desktop and mobile tools
- Backend: Go (standard library +
http.ServeMux) - Frontend: Preact + Signals (lightweight React alternative)
- Styling: Tailwind CSS v4
- Packaging: Multi-stage Docker build
- OS: Alpine Linux
Active remake. The project is being rebuilt toward a practical home-network Drive alternative. The current focus is reliability for large uploads, mobile-first sending, safe sharing, WebDAV, trash/restore, health checks, and packaging that does not break 20GB-100GB transfers.
Run the one-click installer on any Linux server with Docker installed. It always builds from the latest source and creates a systemd service so Nodi auto-starts on boot.
bash <(curl -fsSL https://raw.githubusercontent.com/Twarga/Nodi/main/install.sh)The installer clones the repo, builds a fresh Docker image, starts Nodi on port 7319, and registers it with systemd. It generates a one-time admin password and prints it at the end of installation. Save it, log in, then change the password from Settings before exposing Nodi outside a trusted network.
Nodi is safest as a LAN-only app. If you expose it remotely, put it behind HTTPS and a firewall/reverse proxy you understand.
Custom install directory:
INSTALL_DIR=/opt/nodi bash <(curl -fsSL https://raw.githubusercontent.com/Twarga/Nodi/main/install.sh)Manage Nodi:
sudo systemctl status nodi # check status
sudo systemctl stop nodi # stop
sudo systemctl start nodi # start
sudo systemctl restart nodi # restartRemove completely:
sudo systemctl stop nodi && sudo systemctl disable nodi
sudo rm /etc/systemd/system/nodi.service
sudo systemctl daemon-reload
cd nodi-app && docker compose down -v && cd .. && rm -rf nodi-appRun from a clone:
cp .env.example nodi.env
docker compose up -dThe compose file uses named volumes mounted at /nodi_files and /tmp. Large uploads stream to disk; the default compose intentionally avoids tmpfs upload storage and tight memory caps.
Optional HTTPS reverse proxy with Caddy:
cp Caddyfile.example Caddyfile
# Edit Caddyfile and replace nodi.example.com with your hostname.
docker compose -f docker-compose.yml -f docker-compose.caddy.yml up -dUse the Caddy setup only when you have DNS, firewall, and exposure rules under control. For home-only use, http://server-ip:7319 is simpler.
Prerequisites:
Run the full app with one command:
./run.shThis installs frontend dependencies, builds the UI, scaffolds a default .env, and starts the Go server.
Requires: Go 1.24+, Node.js 20+, npm
Default credentials: admin / admin — change these before exposing to a network.
MIT License. Created by Twarga.
