{"_id":"@amoshydra/davison","_rev":"5-06dba8568fb2381a7b06afc27048f95f","name":"@amoshydra/davison","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@amoshydra/davison","version":"0.0.1","_id":"@amoshydra/davison@0.0.1","maintainers":[{"name":"amoshydra","email":"amoswwj@gmail.com"}],"bin":{"davison":"bin/davison.js"},"dist":{"shasum":"9f85ca95c0a3c8e77309ce0cc93bafb6cdba711a","tarball":"https://registry.npmjs.org/@amoshydra/davison/-/davison-0.0.1.tgz","fileCount":18,"integrity":"sha512-N2SPcxeZMFoXKv4Klrf/q5fHxv15MD+HvsJ+jBkBvBi3nz2anukbWXZApJqzU29VGCTkLr55yRFgQqNEmNzLFg==","signatures":[{"sig":"MEYCIQCuiJ3KDXhCtOb0Bt4EHcFcQUKVoLAHHCdgqFWaQv3W0QIhAL95WC7afJcPMP8XMaj7aZQ3u3UMJ/6qFYM/CrT79PUK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269920},"pnpm":{"patchedDependencies":{"nephele":"patches/nephele.patch"},"onlyBuiltDependencies":["esbuild"]},"type":"module","gitHead":"5d06ee85d6921d7bb7575599e15b1bfdb8dc944c","scripts":{"dev":"tsx watch --ignore './vite.config.ts.timestamp-*' --ignore ./src --ignore ./node_modules server/index.ts","build":"npm run build:server && npm run build:frontend","serve":"NODE_ENV=production node dist-server/index.js","typecheck":"tsc --noEmit","docker:run":"docker run --network host -v $(pwd)/music:/music:ro davison --path /music","build:server":"tsc -p tsconfig.server.json","docker:build":"docker build -t davison .","build:frontend":"vite build"},"_npmUser":{"name":"amoshydra","email":"amoswwj@gmail.com"},"_npmVersion":"11.16.0","description":"WebDAV music server + Sonos controller. npx @amoshydra/davison --path /music","directories":{},"_nodeVersion":"26.3.1","dependencies":{"mime":"^4.1.0","uuid":"^10.0.0","sonos":"^1.14.3","express":"^4.21.0","nephele":"1.0.0-alpha.67","commander":"^12.1.0","vite-express":"^0.22.1","music-metadata":"^10.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.0","vite":"^5.4.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.5.4","@types/mime":"^4.0.0","@types/node":"^22.5.0","@types/uuid":"^10.0.0","@types/react":"^18.3.5","lucide-react":"^1.23.0","@types/express":"^4.17.21","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1"},"_npmOperationalInternal":{"tmp":"tmp/davison_0.0.1_1783277152224_0.27588720601656647","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@amoshydra/davison","version":"0.0.2","_id":"@amoshydra/davison@0.0.2","maintainers":[{"name":"amoshydra","email":"amoswwj@gmail.com"}],"bin":{"davison":"bin/davison.js"},"dist":{"shasum":"45235e4a0f9483fe262952d8bfa072a0e65277c5","tarball":"https://registry.npmjs.org/@amoshydra/davison/-/davison-0.0.2.tgz","fileCount":18,"integrity":"sha512-zGGT+11TvxBZPUOLvGIFywYAOsaEiPOaPX5ur+lsxw2drwIcs5vLvp8ogT7lX9zQ/68exBxT80ps5P5f2/pHzQ==","signatures":[{"sig":"MEUCIQDpNxvgOHWUbZ4TyNhW3hAMyhclzLxvppwt9sOKBxblvgIgReN6gWBh9PhEG2eqFtLt0Q6nQ/x/bKkvyUvNZFCO7lM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269761},"type":"module","gitHead":"e7b9ac458fa0a73c15a4cd65dd6f22331fa0073a","scripts":{"dev":"tsx watch --ignore './vite.config.ts.timestamp-*' --ignore ./src --ignore ./node_modules server/index.ts","build":"npm run build:server && npm run build:frontend","serve":"NODE_ENV=production node dist-server/index.js","typecheck":"tsc --noEmit","docker:run":"docker run --network host -v $(pwd)/music:/music:ro davison --path /music","build:server":"tsc -p tsconfig.server.json","docker:build":"docker build -t davison .","build:frontend":"vite build"},"_npmUser":{"name":"amoshydra","email":"amoswwj@gmail.com"},"_npmVersion":"11.16.0","description":"WebDAV music server + Sonos controller. npx @amoshydra/davison --path /music","directories":{},"_nodeVersion":"26.3.1","dependencies":{"mime":"^4.1.0","uuid":"^10.0.0","sonos":"^1.14.3","express":"^4.21.0","nephele":"1.0.0-alpha.67","commander":"^12.1.0","vite-express":"^0.22.1","music-metadata":"^10.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.0","vite":"^5.4.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.5.4","@types/mime":"^4.0.0","@types/node":"^22.5.0","@types/uuid":"^10.0.0","@types/react":"^18.3.5","lucide-react":"^1.23.0","@types/express":"^4.17.21","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1"},"_npmOperationalInternal":{"tmp":"tmp/davison_0.0.2_1783278087533_0.0804325603592273","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@amoshydra/davison","version":"0.0.3","_id":"@amoshydra/davison@0.0.3","maintainers":[{"name":"amoshydra","email":"amoswwj@gmail.com"}],"homepage":"https://github.com/amoshydra/davison#readme","bugs":{"url":"https://github.com/amoshydra/davison/issues"},"bin":{"davison":"bin/davison.js"},"dist":{"shasum":"c1e6cc140cee48fb54e889e18a46bcc1afbd52cb","tarball":"https://registry.npmjs.org/@amoshydra/davison/-/davison-0.0.3.tgz","fileCount":18,"integrity":"sha512-wtszGrSkdNxue+hdaXNq0y7XSgE/6ZVtPiPwefTPTc/cqv764t1fuV1TYwgQK4SzMfQeDRDf+4bKJ5MVPdWtwg==","signatures":[{"sig":"MEYCIQCsAtXSnrXKxe+263/Wb5Cu6ee42UayhkONQGLvYXWzpgIhAOhTjb+Q/gn34TopYVA+TlWVJhFADpohS53a8RodBfWo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amoshydra%2fdavison@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":270227},"type":"module","gitHead":"6648adb0bdcb6f5c1a1eb6d7da4f8677c2660cbd","scripts":{"dev":"tsx watch --ignore './vite.config.ts.timestamp-*' --ignore ./src --ignore ./node_modules server/index.ts","build":"npm run build:server && npm run build:frontend","serve":"NODE_ENV=production node dist-server/index.js","typecheck":"tsc --noEmit","docker:run":"docker run --network host -v $(pwd)/music:/music:ro davison --path /music","build:server":"tsc -p tsconfig.server.json","docker:build":"docker build -t davison .","build:frontend":"vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:97da6825-c94a-4d6b-925b-3106bd81fc2b"}},"repository":{"url":"git+https://github.com/amoshydra/davison.git","type":"git"},"_npmVersion":"11.17.0","description":"WebDAV music server + Sonos controller. npx @amoshydra/davison --path /music","directories":{},"_nodeVersion":"26.4.0","dependencies":{"mime":"^4.1.0","uuid":"^10.0.0","sonos":"^1.14.3","express":"^4.21.0","nephele":"1.0.0-alpha.67","commander":"^12.1.0","vite-express":"^0.22.1","music-metadata":"^10.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.0","vite":"^5.4.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.5.4","@types/mime":"^4.0.0","@types/node":"^22.5.0","@types/uuid":"^10.0.0","@types/react":"^18.3.5","lucide-react":"^1.23.0","@types/express":"^4.17.21","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1"},"_npmOperationalInternal":{"tmp":"tmp/davison_0.0.3_1783278421366_0.36359668217550833","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@amoshydra/davison","version":"0.0.4","_id":"@amoshydra/davison@0.0.4","maintainers":[{"name":"amoshydra","email":"amoswwj@gmail.com"}],"homepage":"https://github.com/amoshydra/davison#readme","bugs":{"url":"https://github.com/amoshydra/davison/issues"},"bin":{"davison":"bin/davison.js"},"dist":{"shasum":"d0c1196291464d063f034e258809bacda36e6634","tarball":"https://registry.npmjs.org/@amoshydra/davison/-/davison-0.0.4.tgz","fileCount":18,"integrity":"sha512-kCOOxO8aUN2d7u9fKlnT6HecmRHLd56UUckEEGIpqvhNuo/1v4F5NrvIZU/5I41xpY+Pu++MiTKXxsuIkdfeGA==","signatures":[{"sig":"MEUCIQDmfhtLYqXFUdgatubvIh3SQt127P8fGwewuX7tB3x8yAIgD1VsjnL9tlbtfZgXsOU3NBwCJC+oqARbhpPzEQhk864=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amoshydra%2fdavison@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":270440},"type":"module","gitHead":"ba535364ad32c91ddc1c82bf6fdae8623802cac7","scripts":{"dev":"tsx watch --ignore './vite.config.ts.timestamp-*' --ignore ./src --ignore ./node_modules server/index.ts","build":"npm run build:server && npm run build:frontend","serve":"NODE_ENV=production node dist-server/index.js","typecheck":"tsc --noEmit","docker:run":"docker run --network host -v $(pwd)/music:/music:ro davison --path /music","build:server":"tsc -p tsconfig.server.json","docker:build":"docker build -t davison .","build:frontend":"vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:97da6825-c94a-4d6b-925b-3106bd81fc2b"}},"repository":{"url":"git+https://github.com/amoshydra/davison.git","type":"git"},"_npmVersion":"11.17.0","description":"WebDAV music server + Sonos controller. npx @amoshydra/davison --path /music","directories":{},"_nodeVersion":"26.4.0","dependencies":{"mime":"^4.1.0","uuid":"^10.0.0","sonos":"^1.14.3","express":"^4.21.0","nephele":"1.0.0-alpha.67","commander":"^12.1.0","vite-express":"^0.22.1","music-metadata":"^10.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.0","vite":"^5.4.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.5.4","@types/mime":"^4.0.0","@types/node":"^22.5.0","@types/uuid":"^10.0.0","@types/react":"^18.3.5","lucide-react":"^1.23.0","@types/express":"^4.17.21","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1"},"_npmOperationalInternal":{"tmp":"tmp/davison_0.0.4_1783278938203_0.8418289093071902","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@amoshydra/davison","version":"0.1.0","description":"WebDAV music server + Sonos controller. npx @amoshydra/davison --path /music","type":"module","bin":{"davison":"bin/davison.js"},"scripts":{"dev":"tsx watch --ignore './vite.config.ts.timestamp-*' --ignore ./src --ignore ./node_modules server/index.ts","build:frontend":"vite build","build:server":"tsc -p tsconfig.server.json","build":"npm run build:server && npm run build:frontend","serve":"NODE_ENV=production node dist-server/index.js","typecheck":"tsc --noEmit","docker:build":"docker build -t davison .","docker:run":"docker run --network host -v $(pwd)/music:/music:ro davison --path /music"},"dependencies":{"commander":"^12.1.0","express":"^4.21.0","mime":"^4.1.0","music-metadata":"^10.6.0","nephele":"1.0.0-alpha.67","sonos":"^1.14.3","vite-express":"^0.22.1"},"devDependencies":{"@types/express":"^4.17.21","@types/mime":"^4.0.0","@types/node":"^22.5.0","@types/react":"^18.3.5","@types/react-dom":"^18.3.0","@types/uuid":"^10.0.0","@vitejs/plugin-react":"^4.3.1","lucide-react":"^1.23.0","react":"^18.3.1","react-dom":"^18.3.1","tsx":"^4.23.0","typescript":"^5.5.4","vite":"^5.4.3"},"repository":{"type":"git","url":"git+https://github.com/amoshydra/davison.git"},"bugs":{"url":"https://github.com/amoshydra/davison/issues"},"homepage":"https://github.com/amoshydra/davison#readme","gitHead":"fbb92db511daa5e41867ad9660c0471515cf1b68","_id":"@amoshydra/davison@0.1.0","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-NPlrY7juABbneoMU0NApeveKxAqpwemtNnN8Axp3N0IiKWt5DVh/h8Nu8yJiibrnPbWGa19q4ckCouhHgv7PMQ==","shasum":"2a54d58ef5d91967aa4bbd685dadd71f237e1dfa","tarball":"https://registry.npmjs.org/@amoshydra/davison/-/davison-0.1.0.tgz","fileCount":19,"unpackedSize":271887,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amoshydra%2fdavison@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEscds8vybiOl8VUX8wlYgNgi5US1dkwTdk9syUXnQBvAiEAtS8j2o0P8nBldaYjMMjSgeXpGCfUGL09J0di9rLpolg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:97da6825-c94a-4d6b-925b-3106bd81fc2b"}},"directories":{},"maintainers":[{"name":"amoshydra","email":"amoswwj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/davison_0.1.0_1783280823512_0.5065797514690424"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-05T18:45:52.053Z","modified":"2026-07-05T19:47:04.067Z","0.0.1":"2026-07-05T18:45:52.418Z","0.0.2":"2026-07-05T19:01:27.682Z","0.0.3":"2026-07-05T19:07:01.509Z","0.0.4":"2026-07-05T19:15:38.366Z","0.1.0":"2026-07-05T19:47:03.763Z"},"bugs":{"url":"https://github.com/amoshydra/davison/issues"},"homepage":"https://github.com/amoshydra/davison#readme","repository":{"type":"git","url":"git+https://github.com/amoshydra/davison.git"},"description":"WebDAV music server + Sonos controller. npx @amoshydra/davison --path /music","maintainers":[{"name":"amoshydra","email":"amoswwj@gmail.com"}],"readme":"# davison\n\nA standalone music server that streams your local music library to Sonos speakers and serves it via WebDAV for tools like Music Assistant.\n\n## Features\n\n- **Sonos control** — discover Sonos speakers on your LAN, stream music directly to them\n- **Mobile-first web UI** — browse your music library by folder, control playback, manage queues and playlists\n- **WebDAV server** — expose your music library over WebDAV for Music Assistant, file managers, or any WebDAV client\n- **Direct streaming** — HTTP range-request streaming with album art extraction\n- **Zero configuration** — point it at your music folders and go\n- **No cloud dependency** — everything runs on your local network\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js 22+ (or Docker)\n- Music files on a local or mounted drive\n\n### Via npx\n\n```bash\nnpx davison --path /path/to/music\n```\n\nOpen http://localhost:4534 in your browser.\n\n### Via Docker\n\n```bash\ndocker run -d \\\n  --name davison \\\n  --network host \\\n  -v /path/to/music:/music:ro \\\n  ghcr.io/your-username/davison \\\n  --path /music\n```\n\n> `--network host` is required for Sonos UPnP discovery to work.\n\n### Via Docker Compose\n\n```yaml\nversion: \"3.8\"\nservices:\n  davison:\n    image: ghcr.io/your-username/davison\n    network_mode: host\n    volumes:\n      - /path/to/music:/music:ro\n    command: [\"--path\", \"/music\"]\n```\n\n## Usage\n\n### Command-line options\n\n| Option | Description |\n|--------|-------------|\n| `-p, --path <paths...>` | One or more music directories (required) |\n| `--port <number>` | Server port (default: 4534) |\n| `--host <address>` | LAN address (auto-detected if omitted) |\n\n### Web UI\n\n| Tab | Description |\n|-----|-------------|\n| **Library** | Browse music by folder structure |\n| **Queue** | View and manage the current playback queue |\n| **Now Playing** | Full-screen player with album art, vinyl animation, swipe gestures |\n| **Playlists** | Create, edit, and load playlists |\n| **Settings** | Discover and select Sonos devices |\n\n### WebDAV\n\nThe WebDAV server is available at `/webdav` (e.g., `http://<your-server-ip>:4534/webdav/`). It mirrors your music folder structure.\n\n#### Authentication\n\nDisabled by default. To require Basic authentication, set the `DAVISON_WEBDAV_USER` and `DAVISON_WEBDAV_PASS` environment variables:\n\n```bash\nDAVISON_WEBDAV_USER=davison DAVISON_WEBDAV_PASS=\"your-password\" npx davison --path /music\n```\n\nEnvironment variables are recommended over CLI flags because they do not appear in process listings (`ps aux`) or shell history. When authentication is enabled, the server logs `WebDAV auth enabled for user \"<username>\"` on startup.\n\nTo use with Music Assistant:\n1. Add a **WebDAV** provider\n2. URL: `http://<your-server-ip>:4534/webdav/`\n3. Username/Password: set them if you configured auth, leave blank otherwise\n\n### Sonos\n\ndavison discovers Sonos speakers on your LAN automatically via SSDP multicast. Select a speaker from the **Settings** tab and start playing.\n\n## Development\n\n```bash\ngit clone https://github.com/your-username/davison.git\ncd davison\npnpm install\npnpm run dev -- --path /path/to/music\n```\n\nThe dev server hot-reloads on file changes.\n\n## Architecture\n\n```\n                   ┌──────────────────────┐\n                   │    Web Browser       │\n                   │  (React + Vite)      │\n                   └──────────┬───────────┘\n                              │ HTTP (port 4534)\n                   ┌──────────▼───────────┐\n                   │   Express Server     │\n                   │  ┌─────────────────┐ │\n                   │  │ REST API (/api) │ │\n                   │  │ Queue Manager   │ │\n                   │  │ Sonos Controller│ │\n                   │  │ Playlist Store  │ │\n                   │  ├─────────────────┤ │\n                   │  │ WebDAV (/webdav)│ │\n                   │  │ (Nephele VFS)   │ │\n                   │  └─────────────────┘ │\n                   └──────────┬───────────┘\n                              │\n          ┌───────────────────┼───────────────────┐\n          │                   │                   │\n   ┌──────▼──────┐     ┌──────▼──────┐    ┌───────▼──────┐\n   │ Sonos       │     │ Music Files │    │ Music        │\n   │ Speakers    │     │  (on disk)  │    │ Assistant    │\n   │ (UPnP/HTTP) │     │             │    │ (via WebDAV) │\n   └─────────────┘     └─────────────┘    └──────────────┘\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}