A small server tool to easily upload songs to Navidrome without SSH/FTP
  • TypeScript 64.9%
  • CSS 30.7%
  • JavaScript 2.7%
  • HTML 1.7%
Find a file
2026-05-01 17:05:08 +03:00
client Sway-like UI 2026-04-30 23:13:27 +03:00
src Open CORS 2026-05-01 17:05:08 +03:00
.gitignore refactor: migrate to typescript and react ui 2026-04-30 08:51:32 +00:00
LICENSE Initial commit 2026-04-30 09:56:54 +03:00
package-lock.json chore: use express-rate-limit 2026-04-30 08:56:42 +00:00
package.json Sway-like UI 2026-04-30 23:13:27 +03:00
pnpm-lock.yaml Sway-like UI 2026-04-30 23:13:27 +03:00
pnpm-workspace.yaml Sway-like UI 2026-04-30 23:13:27 +03:00
README.md Open CORS 2026-05-01 17:05:08 +03:00
tsconfig.json refactor: migrate to typescript and react ui 2026-04-30 08:51:32 +00:00

Naviload - Navidrome Upload Server

A small server tool to easily upload songs to Navidrome without SSH/FTP.

Setup

  1. Install server dependencies:
    pnpm i
    
  2. Install client dependencies:
    pnpm --prefix client i
    
  3. Set the upload password:
    export UPLOAD_PASSWORD="your-strong-password"
    
  4. Build the client and server:
    pnpm build
    
  5. Start the server:
    pnpm start
    
  6. On first run, the server creates config/destination-path.txt. Add the absolute destination path (one line):
    /absolute/path/to/your/navidrome/music
    

Development

Run the API and UI in separate terminals:

pnpm dev:server
pnpm --prefix client dev

Uploading

Open http://localhost:3000 in a browser to use the simple UI.

API example

curl -X POST \
  -H "x-upload-password: your-strong-password" \
  -H "x-upload-subdir: rock/2024" \
  -F "file=@song.mp3" \
  http://localhost:3000/upload

Uploads are always constrained to the configured destination path; subfolders are created automatically.