{"_id":"4b-react-mdns","_rev":"17-a1d4a9c013bf1fcd8fcde79751596381","name":"4b-react-mdns","dist-tags":{"latest":"1.7.0"},"versions":{"0.1.0":{"name":"4b-react-mdns","version":"0.1.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.1.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"bin":{"scan-net":"bin/cli.js"},"dist":{"shasum":"529ae3d474e982bd6a36f98bc6b50840782c9502","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.1.0.tgz","fileCount":16,"integrity":"sha512-ieXnigtyONzVlzGa/e8Vy+32qCl9ErgjUACHJl5+pUuLLSjmqvV8cEK9jAwvUnQ86stdvdoRu5kbrjjvcAkCuA==","signatures":[{"sig":"MEUCIQCJWBxwBT1pmthdp5sapKSt7ARtvW7EcccvEoGg9OYDAAIgJk/QPuDre3+J9DeJnl4nEaIaoct+4brjPTI6LA/tvPc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291780},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced9cdc5786fb401dfb8e03923e5e16687683a01","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mDNS.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.1.0_1788955840722_0.13590249231539486","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"4b-react-mdns","version":"0.2.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.2.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"bin":{"scan-net":"bin/cli.js"},"dist":{"shasum":"62a22fe7d558a763defc3c028b4cd55e2766aaee","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.2.0.tgz","fileCount":16,"integrity":"sha512-vhBnCKTBtB83BBW8ZkERBBa94+r6bU+WpAFjJG8f8km7LeK8WmSxYqpde8wrH+6CXP646PNVoqOeRxn/lytp6g==","signatures":[{"sig":"MEUCIQCKe5WIPBss1pVuc6p2hAbN2guaZ1GJTjTx7v3XlYd0bAIgVp7SzhrAA+CZCWwnKWNWWpXEKWQ7bSGzMfvltQevgkA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294996},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced9cdc5786fb401dfb8e03923e5e16687683a01","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mDNS.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.2.0_1789021453588_0.35616939656094515","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"4b-react-mdns","version":"0.3.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.3.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"bin":{"scan-net":"bin/cli.js"},"dist":{"shasum":"c555c50b69fdd8c04d438dd60238851c8cfbc09a","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.3.0.tgz","fileCount":16,"integrity":"sha512-j9MvA+zue/tDVGCCskhvZPvO34QVj5q7S4dAvJZLh9XMhqQ2WuhDiZh41+YVz4qPZiycvsbYbtevPRGHQatTAg==","signatures":[{"sig":"MEYCIQD67DrTcG8/mpemMOXs7msE00I13lbB67ePEaUKwWlgZAIhAK39phYz8yh3vR7xElDSx8I21o2VEezYZIgyEKqOg/hF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296536},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced9cdc5786fb401dfb8e03923e5e16687683a01","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mDNS.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.3.0_1789033052581_0.5100487457640608","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"4b-react-mdns","version":"0.4.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.4.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"e3ed4666c31a8d4e58785401114d217320a97ac5","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.4.0.tgz","fileCount":18,"integrity":"sha512-gbg2A8pFoFLqZJAtjil+58nU3fnaPQ0yOUsUp6ykbFc5DuSQb00DK8wkEiyh9BTSp02GBUYPKHEkLChOAQfdLg==","signatures":[{"sig":"MEQCIG/cjrfIJQaOxhkcJ1UQE5GV9bpkChJX77vUEjqeYusNAiAsGD0+Ha2OkPsWVFmpSryyV6faKSdBud9Q5Vhc3ylz8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":307664},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mDNS.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.4.0_1789034367867_0.18123279930047964","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"4b-react-mdns","version":"0.5.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.5.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"08543f560d223700da4b2bfa5271cc308738c62f","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.5.0.tgz","fileCount":18,"integrity":"sha512-bl7RFJInkLxdRYcJ8l1L+wz8oYLYp5v3N57OLqHDSgo+iu1VcoM705PYzcUsQu7rw47M1U7bjMt8yeAYg7blNw==","signatures":[{"sig":"MEUCIFxmh1YgTrZe0oOcui25+Ps09XEfYo9jpoa/qcwZbrX5AiEA8DBxWVM6K20O9cD6E2U3k/E2NhuOwr9iCSsD8TX6cfQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":308744},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mDNS.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.5.0_1789035149919_0.5589020742489728","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"4b-react-mdns","version":"0.6.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.6.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"e4d1ee03d1dd16572c9bb7188f1e00a4c1a6efb1","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.6.0.tgz","fileCount":18,"integrity":"sha512-AxpMngXdlaKp0rJRubHa+Z6W8NBIojbkVg3UQYKHFs0aCfC83X7F7TNjHheV3eBg/+EWFcwXsBH0KhqZHGTsvQ==","signatures":[{"sig":"MEUCIQDTW0Yxu1aQVx/ZvYN6ZK3tjzVdz8wbjQjjUUzDI45NvwIgNBtQ0X4GphH08GGeQdQt0M3IqZKGggVZ13NR90P30Zw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":310311},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mDNS.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.6.0_1789035595577_0.21944083264093428","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"4b-react-mdns","version":"0.7.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.7.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"4dda91cc3ab6bcc8a62f7e177a2034f8eead8192","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.7.0.tgz","fileCount":18,"integrity":"sha512-+t4Un3Qz4yKXzMXlwSk4lMbAqqIqO2vELsS55FtR1IjWG9SJF8DF1lS/hSUG4jNyM50KWJQjgJE9Pb2ZD5+etg==","signatures":[{"sig":"MEUCIE4GVtKJdH2kiv865b8jlZdr9/1CGCwAFk/qOi3D6bvOAiEAzCEn+tg9gqm3r0b9KK+2SUgfwElyDfiHRLpB5FWQj1Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314585},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mDNS.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.7.0_1789045669458_0.2881741807023066","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"4b-react-mdns","version":"0.7.1","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.7.1","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"dd7829866bf4c67021d6d53dac0af44195bffc3a","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.7.1.tgz","fileCount":18,"integrity":"sha512-SewLswEZ8F3053QArj4VeeMibIUsCwWczgr0Y68qs+r4kqIeDXrswDC0jZUASMhZfYszNERo9qvCnFbJkz5iMA==","signatures":[{"sig":"MEQCIGnesa4JuDMRIJcEb9qxdcqA8MvyqLk6cg1qsH+Czi9zAiBdV5iCLQFuL6NrQgEKMUjxmaWxtpGmkVJ5/9TaZtW3oA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315933},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.7.1_1789046196813_0.08732869054555392","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"4b-react-mdns","version":"0.7.2","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.7.2","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"167aa4dcc8f4cd459856c2ccc187772a14a39c13","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.7.2.tgz","fileCount":18,"integrity":"sha512-jsjc+tPJwesNwZBxYRAlbdY+fYjA03VntjKJJ4YqPr53mM61jDUA4BNHggk9ENEskFmzm/fRxbuQXRr3s6nE8w==","signatures":[{"sig":"MEUCIAPDvRs9A6UKl1SZn1aBhHrt1vJboVNSkTIS6Hg4EUNzAiEApdVMVkx5/859i4HyXaGfZ5VYtfSoclV4luqwPbm/8lo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315933},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.7.2_1789046507977_0.0951929423888942","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"4b-react-mdns","version":"0.8.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.8.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"1342ed3f14e238aba490555ca9e07e81f8da8039","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.8.0.tgz","fileCount":18,"integrity":"sha512-yRFcQeMGKWSZlCEE8P5pb7GX3OiNX8Bb/pJ+71L0srkuaI9YZbMdYaABkU/HHS8HC/GSKb0XpSo2OmX2pqRklg==","signatures":[{"sig":"MEUCIHsxWYSo36Iycdt6Qt10n+MBPio7A9vGAacQ1wY+klI4AiEApkgSPPJbOKZg5jSZGn2ZtNGyAmf0rnMfxPHWDXw1fcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":317423},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"12.0.2","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.7.0","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.8.0_1789208414004_0.5384766949064357","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"4b-react-mdns","version":"0.8.1","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@0.8.1","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"a10f99e874396be064d603936db1e8676cd354c6","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-0.8.1.tgz","fileCount":18,"integrity":"sha512-N29zFhYWnazIP3ZYxu8SCfCzLMBlsHvk6XKI4shtGnhTw5dN5mC0McS1jlJjRnZwB8JGuApj2aOUQ0MOGNji7A==","signatures":[{"sig":"MEQCIFch79kpiL5Z1pwqwNoqpwDKllCbKm9/OFLYupWZPr2vAiAOUWrd4THBMYhnVBAKExakdU5rtU8AbhN6T3vOvr7b5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDSXN8LVqdRxzMyDsui/e1g090pdAW8t/9Z9NePC3B14QIhAL4kGObrfOIOC8Thtvx4pPeokQhKdPTjYXXKQQJfvnbx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321022},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"11.19.1","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.8.2","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_0.8.1_1789812668602_0.29142089087462764","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"4b-react-mdns","version":"1.1.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@1.1.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"02a6a81bfd4829528633d957fc83ab8bae252235","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-1.1.0.tgz","fileCount":18,"integrity":"sha512-+9+IhkJo44lp5ir4SfDvCRzeXWNXIBD9XsvmC8GURsxtKa+rqBMRXvJ6Is+8QE9NwiNE8Zw4/Gqst7NaMqIF5g==","signatures":[{"sig":"MEUCIQCidjUSzuJBUFtIaPMtn8A8rZPWxN6/vPqVjSe1s26++gIgeDrMPJ9tuF11pUeZiL+rX98j3rQduk6ZW0yfo9JJaJE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC8Naup06aiofEIFA7KadA17OQyVbVFT977Vc5IxI9XlAiAW/Zm1C04GSxwf0eUyFiVdgMjmUulRFSqQhiyKTiWX4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333181},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"11.19.1","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.8.2","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_1.1.0_1790590378874_0.9844978276885017","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"4b-react-mdns","version":"1.4.4","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@1.4.4","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"4be12e6c82302afd69e1ad4561d19bf532c4728a","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-1.4.4.tgz","fileCount":18,"integrity":"sha512-NZem0p5hc4acLDXitPdWMiGO7Vi2Y1Li+wgsJtn/3p3C9G4R6lp0Pu66WBdZit7IBFigZ7qHZBstVk+IMKnN/Q==","signatures":[{"sig":"MEUCIQDZv+AFLWgtJsukJphR3t0m+jQIO6RsojlfjUhpwTD8zwIgIFik0VqJP1vzUnaI8ZDTv1gLc80C2OwrG8NEAI2Z1pY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDhjjnf+lZFh+gtba6GCzzkotY3uTPo3NTeMVJxbwmMPQIhAJn1pf0qSj0hY5MgkRihOUn3A8q37XbZqRD7K2Z5WRFn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339058},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"11.19.1","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.8.2","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_1.4.4_1790593580927_0.016478676336586284","host":"s3://npm-registry-packages-npm-production"}},"1.4.8":{"name":"4b-react-mdns","version":"1.4.8","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@1.4.8","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"507fdd3dba351eafa838a48f61393bbace5f1daf","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-1.4.8.tgz","fileCount":18,"integrity":"sha512-EOZleBf4k7yLmCDVIuDhYE8hF1mnRbM82chLcU+jBWBFdYde6bXbfwKeSSiWgRLwRejPU6qr6pirxXSJiPwdvQ==","signatures":[{"sig":"MEQCIET0ljGum67FY0iCEr6YV7sa1qT9KWVAD/r/O9et6oSQAiAFKJEXVqlPylXLqPg0QMN2zu13rrrDo4DvPq71x6QzCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDSEhxn8QhNR25yT19PYn8FwgJWiKPzg9kcrlFgN7PShQIgZOQclZsgfwJq0MGT5A/Gk/7CmGpDPqDB0P1wGXhDzPY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339958},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"11.19.1","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.8.2","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_1.4.8_1790594555094_0.4296922825964353","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"4b-react-mdns","version":"1.5.0","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@1.5.0","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"e8c9b0a27df0489dd7eda31b19584a3a367b68c4","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-1.5.0.tgz","fileCount":19,"integrity":"sha512-EGiyxxPzhS/487s/UMCU2H62kXb6amIwz2XBQuaf2TvU5Qv8s9G8iQUH40NuoMzO6ps5x+l8qa4c6y4bDgCbVg==","signatures":[{"sig":"MEUCIGgIPNPw3SEuMTatqZqJ5MTxKcBPRXiAPpJT/01HPAI2AiEAzoWX5arwGhhctD0UAF9z2FIPcBpDnFeMjRsaS5J/oKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGgj6IjQaMM/+YRlTazbe9kSaG/7V56TMMHAzOa3ErvWAiEA3ExrdrHf5aEEKUE00keVz+QMWmMkCOwGUQBCZAUMy5U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":386038},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"11.19.1","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.8.2","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18","socket.io-client":">=4"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"socket.io-client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_1.5.0_1790690922110_0.9597835077711532","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"4b-react-mdns","version":"1.6.1","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"license":"MIT","_id":"4b-react-mdns@1.6.1","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"dist":{"shasum":"d1a5d22a727af457862723992b90adb2224f2716","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-1.6.1.tgz","fileCount":19,"integrity":"sha512-bZZiQLZLbkUIQ9dQNxBzn8XSu5XcE0cxvrI+1+4B0/P1Ho/YTDUEmUBTyLJxUwi1eOYYBIgFgkZ9Zn+FLn2gvQ==","signatures":[{"sig":"MEUCIQDgFN6cRh4gWYar3y7nKvgXa22gB8kN/ZCFytk/AvHzIgIgY9OUz7QOVG7gZnBodaqmj3pN6I31jAbL0QRYspnwLgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC4dymjTpbU8KBAnukajEkLty2YRNk5rcv/DxI2ghNtKQIgJYai4/w3c+ma6tkNwcEnvra41Ldzo3oG9EVEH/H8YHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407416},"main":"./server/index.js","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","scripts":{"dev":"vite --host","lint":"oxlint","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"11.19.1","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"_nodeVersion":"26.8.2","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18","socket.io-client":">=4"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"socket.io-client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/4b-react-mdns_1.6.1_1790693681831_0.9308140456054437","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"_id":"4b-react-mdns@1.7.0","bin":{"4bmdns":"bin/cli.js","scan-net":"bin/cli.js"},"bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"dist":{"shasum":"c8ba1955bed9967353b43738b39dc7d9e0aa226e","tarball":"https://registry.npmjs.org/4b-react-mdns/-/4b-react-mdns-1.7.0.tgz","fileCount":19,"integrity":"sha512-7ggGs1n3qE4BAGEx2QtCi4J1tbYKNKAgZGSiqPtHgLNCEXEVUDnVVAaI+X2GrQ35/75sjujyOUJwtKuulfNaVA==","signatures":[{"sig":"MEYCIQD/vEZCq22ojzng1HIi0FaKeOkr3lniwu8IriidU/oTKgIhAKoiDkY/7JxeZayb1EAE5x5Mx4Axy45uAmQLIySLtaqL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH6n7NGJtvvHZzLYliQqJJNPyTX3+wEBLP1lT7xknckNAiB99hgRMcVMeW2+btcgttAAFX+BoNhnSG43CyTJxPpxRg=="}],"unpackedSize":416175},"main":"./server/index.js","name":"4b-react-mdns","type":"module","engines":{"node":">=20"},"exports":{".":"./server/index.js","./vite":"./server/vitePluginMdns.js","./react":"./dist/react/index.js","./package.json":"./package.json"},"gitHead":"ced4f7aedc2a777dfb3b1cba04b6db81d1940875","license":"MIT","scripts":{"dev":"vite --host","lint":"oxlint","test":"node --test \"test/**/*.test.js\"","build":"vite build && vite build --config vite.lib.config.js","start":"node bin/cli.js","prepack":"npm run build","preview":"vite preview","build:app":"vite build","build:react":"vite build --config vite.lib.config.js"},"version":"1.7.0","_npmUser":{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"},"homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"_npmVersion":"11.19.1","description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","directories":{},"maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"_nodeVersion":"26.8.2","dependencies":{"bonjour-service":"^1.4.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.1","react":"^19.2.7","oxlint":"^1.71.0","react-dom":"^19.2.7","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3"},"peerDependencies":{"react":">=18","react-dom":">=18","socket.io-client":">=4"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"socket.io-client":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/4b-react-mdns_1.7.0_1790699837550_0.1196805815863009"}}},"time":{"created":"2026-09-09T12:10:40.621Z","modified":"2026-09-29T16:37:17.835Z","0.1.0":"2026-09-09T12:10:40.892Z","0.2.0":"2026-09-10T06:24:13.749Z","0.3.0":"2026-09-10T09:37:32.721Z","0.4.0":"2026-09-10T09:59:28.001Z","0.5.0":"2026-09-10T10:12:30.090Z","0.6.0":"2026-09-10T10:19:55.709Z","0.7.0":"2026-09-10T13:07:49.593Z","0.7.1":"2026-09-10T13:16:36.951Z","0.7.2":"2026-09-10T13:21:48.201Z","0.8.0":"2026-09-12T10:20:14.148Z","0.8.1":"2026-09-19T10:11:08.708Z","1.1.0":"2026-09-28T10:12:58.950Z","1.4.4":"2026-09-28T11:06:21.032Z","1.4.8":"2026-09-28T11:22:35.184Z","1.5.0":"2026-09-29T14:08:42.250Z","1.6.1":"2026-09-29T14:54:41.923Z","1.7.0":"2026-09-29T16:37:17.676Z"},"bugs":{"url":"https://git.4brains.in/shailesh.gautam/react-mdns-package/issues"},"license":"MIT","homepage":"https://git.4brains.in/shailesh.gautam/react-mdns-package","keywords":["mdns","bonjour","dns-sd","zeroconf","discovery","lan","react","provider","cli"],"repository":{"url":"git+https://git.4brains.in/shailesh.gautam/react-mdns-package.git","type":"git"},"description":"Discover mDNS/Bonjour servers on your LAN from a React overlay or CLI, and remember the one you pick.","maintainers":[{"name":"connect.console","email":"shaileshkumargautam7783@gmail.com"}],"readme":"# 4b-react-mdns\n\nLet people pick a server off the local network from inside your React app, and remember which one\nthey chose.\n\n[npm](https://www.npmjs.com/package/4b-react-mdns) ·\n[source](https://git.4brains.in/shailesh.gautam/react-mdns-package) ·\n[changelog](./CHANGELOG.md)\n\nBrowsers can't speak mDNS — it's UDP multicast on `:5353` — so discovery runs in Node and the React\nside consumes a small HTTP + Server-Sent-Events API. The package ships both halves: a Vite plugin\n(or standalone server) for the Node side, and a provider and hooks for the browser side.\n\n## Quick start\n\n```bash\nnpm install 4b-react-mdns\nnpx 4bmdns config\n```\n\n`config` wires both halves — it adds `mdnsPlugin()` to your Vite config and wraps whatever your\nentry point renders in `<MdnsProvider>`, above every route — then asks whether the provider\nshould also hold a live connection to the server you pick:\n\n```\n  ┌─ 4B-mDNS 1.5.0 • config ──────────────────────────────────────────────┐\n  │                                                                       │\n  │  Configuring ~/code/my-app                                            │\n  │                                                                       │\n  │  ✔ vite config  vite.config.js    added mdnsPlugin({ httpOnly: true })│\n  │  ✔ entry point  src/main.jsx      wrapped the rendered tree in        │\n  │                                   <MdnsProvider httpOnly={true}       │\n  │                                   launcher={false}>                   │\n  │                                                                       │\n  │  Live link to the picked server?                                      │\n  │  ❯ None         just the picker — add one later with --ws or --socket │\n  │    WebSocket    ws://<picked server>/ — reconnecting, no dependency   │\n  │    Socket.IO    socket.io-client — you install it, we wire io()       │\n  │    Both         a WebSocket and a Socket.IO connection                │\n  │                                                                       │\n  │  ✔ Done. Restart the dev server and the picker is live.               │\n  └───────────────────────────────────────────────────────────────────────┘\n                                          --- 4brains technologies (2026)\n```\n\nNothing socket-related is written unless you pick it here or pass `--ws` / `--socket`. The\nquestion only appears in a real terminal; a pipe or CI run gets the result and no prompt. Changed\nyour mind later? `npx 4bmdns link` switches it — see [Switching later](#switching-later).\n\n```jsx\ncreateRoot(document.getElementById('root')).render(\n  <MdnsProvider httpOnly={true} launcher={false}>\n    <StrictMode>\n      <App />\n    </StrictMode>\n  </MdnsProvider>,\n)\n```\n\nThe two props are always written out with their values, so whoever reads the file later sees\nwhat was decided and can flip it. The defaults filter to web servers and skip the launcher pill:\nrestart the dev server, press **Space** (or call `useMdns().open()` from your own button) and the\npicker opens. Pick a server and it's saved.\n\n| Flag | |\n| --- | --- |\n| `--http-only` / `--all` | `httpOnly={true}` (default) / `httpOnly={false}` |\n| `--no-launcher` / `--launcher` | `launcher={false}` (default) / `launcher={true}` — show the pill |\n| `--ws` / `--no-ws` | `ws={true} onWsMessage={pushRelay}` plus a `src/mdnsRelay.js` helper / `ws={false}` |\n| `--socket` / `--no-socket` | `socket={true} socketClient={io}` / `socket={false}` — Socket.IO |\n| `--dry-run` | Show the plan without writing |\n\n```bash\nnpx 4bmdns config --launcher --ws\n```\n\nRe-running is safe. A bare `config` leaves an existing setup alone; pass a flag and it updates\n**that prop in place**, keeping every other prop on the tag (`baseUrl`, `onSelect`, `position` …)\nand the formatting — a props-per-line tag stays props-per-line. If it doesn't recognise a file it\nleaves it alone and prints the snippet to paste rather than guessing.\n\n<details>\n<summary>Wiring it by hand instead</summary>\n\n```js\n// vite.config.js\nimport { mdnsPlugin } from '4b-react-mdns/vite'\n\nexport default defineConfig({\n  plugins: [react(), mdnsPlugin({ httpOnly: true })],\n  server: { host: true }, // optional: reachable from a phone on the same Wi-Fi\n})\n```\n\n```jsx\n// src/main.jsx\nimport { MdnsProvider } from '4b-react-mdns/react'\n\ncreateRoot(document.getElementById('root')).render(\n  <MdnsProvider httpOnly={true} launcher={false}>\n    <App />\n  </MdnsProvider>\n)\n```\n\n</details>\n\n## Reading the pick\n\nAnywhere inside the provider:\n\n```jsx\nimport { useMdns } from '4b-react-mdns/react'\n\nfunction Player() {\n  const { address, open } = useMdns()\n  if (!address) return <button onClick={open}>Choose a server</button>\n  return <video src={`http://${address}/stream`} />\n}\n```\n\nOutside React — in a plain api client, say:\n\n```js\nimport { getSelectedAddress } from '4b-react-mdns/react'\n\nconst base = `http://${getSelectedAddress()}` // \"192.168.0.224:3000\"\n```\n\nThe pick is stored in three places, and you can read any of them:\n\n| Where | What |\n| --- | --- |\n| `localStorage[\"4b_mDNS_ip\"]` | the plain `ip:port` string |\n| `localStorage[\"4b_mDNS_selection\"]` | the full record as JSON |\n| `~/.scan-net/selection.json` | the same record, on the machine running the scanner |\n\nThe file is the durable copy — it survives a cleared browser, is shared by every app pointing at\nthat scanner, and is readable from shell scripts and Node.\n\n### When discovery can't see the server\n\nmDNS only reaches the local subnet, and some networks block multicast outright. The panel has an\n**Enter an address by hand** box at the bottom for that case: type `192.168.0.10:3000` (or a\nhostname, a bracketed IPv6 literal, or a full URL — the scheme and path are dropped) and press\nSave. It is stored exactly like a pick from the list, so `localStorage[\"4b_mDNS_ip\"]` and the\nJSON file both update, and `useMdns().address` changes the same way. The record carries\n`manual: true` so you can tell it apart.\n\nSaving is browser-first: the pick is written to localStorage before the API is asked to persist\nit, so it survives the scanner being unreachable. In that case the panel keeps the browser copy\nand shows a banner saying the disk copy is missing.\n\nHide the box with `<ScannerPanel showManualEntry={false}>`. To build your own form, use the pieces:\n\n```jsx\nimport { ManualEntry, parseAddress, manualService, useMdns } from '4b-react-mdns/react'\n\nconst { select } = useMdns()\nconst parsed = parseAddress('http://nas.local:8080/admin') // { host: 'nas.local', port: 8080 }\nif (!parsed.error) select(manualService(parsed.host, parsed.port))\n```\n\n## `<MdnsProvider>`\n\nWraps your app and layers the picker over it. Children render untouched — the provider adds no\nwrapper element. The panel is portalled to `<body>` at `z-index: 2147483000`, so it sits above\nrouted content no matter where the provider is mounted or what stacking contexts your app creates.\nStyles are injected at runtime and every selector is scoped under `.snet-root`, so there's no\nstylesheet to import and nothing bleeds either way.\n\nEverything inside the panel is sized in `em` off a single custom property, so the whole thing\nscales as one piece. `--snet-fs` is flat at `15px` up to roughly 1920px of viewport width and\ngrows beyond it — a 4K screen at 100% scaling gets a panel sized for it instead of a postage\nstamp. Pin it to opt out:\n\n```css\n.snet-root { --snet-fs: 15px }   /* or whatever size you want the panel to sit at */\n```\n\n| Prop | Default | |\n| --- | --- | --- |\n| `baseUrl` | `/api` | Where the scanner API is mounted |\n| `httpOnly` | server default | `true` = only `_http`/`_https._tcp`, `false` = every service. Omit to follow the CLI's `--http-only` flag |\n| `filterToggle` | `false` when `httpOnly` is set | Show the **HTTP only** switch in the panel |\n| `launcher` | `true` | Show the built-in launcher pill. `false` removes it entirely |\n| `launcherLabel` | `Scan network` | Its text |\n| `position` | `bottom-right` | Its corner — also `bottom-left`, `top-right`, `top-left` |\n| `open` | — | Pass a boolean to control visibility yourself |\n| `onOpenChange` | — | Called with `true`/`false` when the user opens or dismisses the panel |\n| `defaultOpen` | `false` | Starting state when `open` isn't passed |\n| `closeOnEscape` / `closeOnBackdrop` | `true` | Dismiss behaviour |\n| `hotkey` | `\" \"` (Space) | Key that toggles the panel when focus isn't in a field or on a button. Any `KeyboardEvent.key` value, or `false` to disable |\n| `onSelect` | — | Called with the record whenever the pick changes |\n| `disconnectNotice` | `true` | Pop up a notice in the launcher's corner when a socket drops, with Retry and Check server buttons. `false` to turn it off |\n| `ws` | `false` | Keep a reconnecting WebSocket open to the picked server. `true`, or an options object — see [Sockets](#sockets-to-the-picked-server) |\n| `wsPath` | `/` | Path the WebSocket dials on the pick, e.g. `/live` |\n| `wsUrl` | — | Dial this instead: a string, or `(selection) => url` |\n| `wsProtocols` | — | `Sec-WebSocket-Protocol`, a string or array |\n| `wsReconnect` | `true` | `false` to reconnect never, or `{ maxAttempts, baseDelay, maxDelay, factor, jitter }` |\n| `wsDecode` | `auto` | `auto` parses JSON when it is JSON, `json` always tries, `raw` leaves the string alone |\n| `wsLastMessage` | `true` | Keep `ws.lastMessage` up to date. `false` for a chatty server: messages then reach `ws.on()`, `onWsMessage` and the relay only, and nothing re-renders per message |\n| `onWsMessage` / `onWsStatus` / `onWsOpen` / `onWsClose` / `onWsError` | — | WebSocket callbacks. `onWsMessage(data, message, event)`; `onWsStatus(status, snapshot)` |\n| `socket` | `false` | Keep a Socket.IO connection open to the picked server. `true`, or an options object |\n| `socketClient` | `window.io` | The `io` export of `socket.io-client`. The library is not bundled |\n| `socketPath` | `/socket.io` | Socket.IO path on the server |\n| `socketUrl` | — | Dial this instead: a string, or `(selection) => url` |\n| `socketOptions` | — | Passed to `io(url, options)` — `transports`, `auth`, `reconnectionAttempts` … |\n| `socketLastEvent` | `true` | Keep `socket.lastEvent` up to date. `false` for a busy server; events then reach `socket.on()` and `onSocketEvent` only |\n| `onSocketStatus` / `onSocketEvent` / `onSocketConnect` / `onSocketDisconnect` | — | Socket.IO callbacks. `onSocketEvent(event, ...args)` fires for every server event |\n\n### `useMdns()`\n\n```js\nconst {\n  selection, ip, address, url,   // the pick\n  select, clear,                 // change it\n  services, connected, rescan,   // the scan\n  httpOnly, setHttpOnly,         // the filter\n  open, close, toggle, isOpen,   // the panel\n  ws, socket,                    // sockets to the pick — see below\n} = useMdns()\n```\n\n### Your own button\n\nDrop the built-in pill and open the panel from anywhere:\n\n```jsx\nfunction ServerButton() {\n  const { open, address } = useMdns()\n  return <button onClick={open}>{address ?? 'Pick a server'}</button>\n}\n\n<MdnsProvider launcher={false}>\n  <Header><ServerButton /></Header>\n  <Routes />\n</MdnsProvider>\n```\n\nTo hold the state yourself — driving it from a router, a menu, a keyboard shortcut — pass `open`\nand it becomes a controlled component:\n\n```jsx\nconst [scanning, setScanning] = useState(false)\n\n<MdnsProvider launcher={false} open={scanning} onOpenChange={setScanning} httpOnly>\n  <button onClick={() => setScanning(true)}>Scan network</button>\n  <Routes />\n</MdnsProvider>\n```\n\nWhile `open` is a boolean the provider never changes it on its own: Escape, the ✕ and a backdrop\nclick all report through `onOpenChange` and leave the decision to you. Omit `open` and it manages\nitself again.\n\n### `<MdnsList>`\n\nRenders the scanned services on your own page instead of behind the launcher:\n\n```jsx\n<MdnsProvider httpOnly>\n  <h2>Pick a streaming server</h2>\n  <MdnsList />\n</MdnsProvider>\n```\n\n| Prop | Default | |\n| --- | --- | --- |\n| `httpOnly` | provider's value | Override the filter for this list only |\n| `query` | `''` | Substring filter over name, type, host, addresses |\n| `limit` | — | Show at most this many |\n| `columns` | `true` | `false` renders a single column |\n| `emptyLabel` | — | Text when nothing matches |\n| `onSelect` | — | Called after a card is picked |\n\nSelecting from the list saves exactly as the overlay does. For full control over the markup, read\n`useMdns().services` and render the rows yourself.\n\n## Sockets to the picked server\n\nMost apps that pick a LAN server go on to hold a live connection to it, and a browser\n`WebSocket` closes once and stays closed — a server restart or a phone changing Wi-Fi leaves the\napp talking to nothing. The provider can own that connection for you. Both kinds are off by\ndefault; turn one on and it dials the pick, follows it when the pick changes, reconnects when it\ndrops, and shows its status in the panel and as an extra dot on the launcher.\n\n```jsx\n<MdnsProvider ws={true}>            {/* ws://<address>/ */}\n<MdnsProvider ws={{ path: '/live', reconnect: { maxAttempts: 10, maxDelay: 5000 } }}>\n```\n\n```jsx\nfunction Readings() {\n  const { ws } = useMdns()\n  // 'off' | 'connecting' | 'open' | 'reconnecting' | 'closed' | 'error'\n  if (ws.status !== 'open') return <p>{ws.status}{ws.attempt ? ` (attempt ${ws.attempt})` : ''}</p>\n  return (\n    <>\n      <pre>{JSON.stringify(ws.lastMessage?.data)}</pre>\n      <button onClick={() => ws.send({ cmd: 'refresh' })}>Refresh</button>\n    </>\n  )\n}\n```\n\n`ws` carries `status`, `connected`, `attempt`, `error`, `url`, `lastMessage` (`{ data, raw, at }`,\nwith `data` already parsed when the server sent JSON), `nextRetryAt`, `queued`, and the actions\n`send`, `on`, `connect`, `disconnect`, `reconnect`, `getSocket`. `send()` takes an object and JSON-encodes\nit, or a string / `ArrayBuffer` / `Blob` as-is; while the link is down the message waits in a small\noutbox and goes out on open. `disconnect()` closes on purpose — no retries until `connect()`.\nReconnection is exponential back-off from `baseDelay` to `maxDelay` with jitter, restarted the\nmoment the browser fires `online`. The scheme follows the pick: an `_https._tcp` service gets\n`wss://`. (A page served over `https://` cannot open a plain `ws://` socket — browsers block mixed\ncontent — so serve the app over `http://` on the LAN or give the server TLS.)\n\n**Socket.IO** is the same shape. The client library is yours to install, since bundling it here\nwould force it on apps that use plain WebSockets:\n\n```bash\nnpm install socket.io-client\nnpx 4bmdns config --socket     # writes socket={true} socketClient={io} and the import\n```\n\n```jsx\nimport { io } from 'socket.io-client'\n\n<MdnsProvider socket={true} socketClient={io} socketOptions={{ auth: { token } }}>\n```\n\n```jsx\nfunction Room() {\n  const { socket } = useMdns()\n  const [state, setState] = useState()\n  // on() returns the unsubscribe, so it drops straight into useEffect.\n  useEffect(() => socket.on('state', setState), [socket.on, socket.status])\n  return <button onClick={() => socket.emit('join', 'lobby')}>{socket.status}</button>\n}\n```\n\n`socket` carries `status`, `connected`, `attempt`, `error`, `id`, `url`, `lastEvent`\n(`{ event, args, at }`) and the actions `emit`, `on`, `connect`, `disconnect`, `reconnect`,\n`getSocket`. Socket.IO runs its own reconnection; the provider mirrors its `connect`,\n`disconnect`, `connect_error` and `reconnect_attempt` events into the same status words the\nWebSocket uses, so one status component serves both. Without a client it reports `status: 'error'`\nand says what to pass.\n\n### Listening and sending\n\nBoth connections live in the provider, so any component reads them from `useMdns()` — no prop\ndrilling, no second connection. Here is a component that shows live readings over the WebSocket\nand sends commands back:\n\n```jsx\nimport { useEffect, useState } from 'react'\nimport { useMdns } from '4b-react-mdns/react'\n\nfunction Readings() {\n  const { ws } = useMdns()\n  const [reading, setReading] = useState(null)\n\n  // Every message, as it arrives. `data` is already parsed when the server sent JSON.\n  useEffect(() => {\n    if (ws.lastMessage) setReading(ws.lastMessage.data)\n  }, [ws.lastMessage])\n\n  const refresh = () => ws.send({ cmd: 'refresh' })          // objects are JSON-encoded\n  const raw = () => ws.send('PING')                          // strings go through as-is\n\n  return (\n    <section>\n      <p>\n        {ws.status === 'open' && '● live'}\n        {ws.status === 'reconnecting' && `● reconnecting (attempt ${ws.attempt})`}\n        {ws.status === 'error' && `● ${ws.error}`}\n        {ws.status === 'off' && '○ pick a server first'}\n      </p>\n      <pre>{JSON.stringify(reading, null, 2)}</pre>\n      <button onClick={refresh} disabled={!ws.connected}>Refresh</button>\n      <button onClick={raw}>Ping</button>\n    </section>\n  )\n}\n```\n\nReading `ws.lastMessage` re-renders on every message — and because it lives in the provider's\ncontext, so does every component that calls `useMdns()`, whether it reads it or not. That is fine\nfor a reading a few times a second and wrong for a server that streams sensor frames or cursor\npositions. For those, turn the tracking off and subscribe instead — no re-render anywhere, and the\nsubscription survives reconnects and a change of pick:\n\n```jsx\n<MdnsProvider ws={true} wsLastMessage={false}>\n```\n\n```jsx\nfunction Cursor() {\n  const { ws } = useMdns()\n  const pos = useRef({ x: 0, y: 0 })\n  // on() returns the unsubscribe, so it drops straight into useEffect.\n  useEffect(() => ws.on((data) => { pos.current = data }), [ws.on])\n  ...\n}\n```\n\n`config --ws` scaffolds the same idea as a file, `src/mdnsRelay.js`, and wires it with\n`onWsMessage={pushRelay}` on the provider. Any module — React or not — can then listen:\n\n```js\nimport { onRelay } from './mdnsRelay'\n\nuseEffect(() => onRelay((data) => handle(data)), [])\n```\n\nThe file is generated once and never rewritten, so it is yours to edit. Delete the prop and the\nimport if you would rather use `ws.on()` or `onWsMessage` directly.\n\nThe same with Socket.IO — named events in, named events out:\n\n```jsx\nfunction Room({ name }) {\n  const { socket } = useMdns()\n  const [members, setMembers] = useState([])\n  const [chat, setChat] = useState([])\n\n  // socket.on() returns the unsubscribe, so it drops straight into useEffect.\n  // Re-run on status so a fresh connection is subscribed again.\n  useEffect(() => socket.on('members', setMembers), [socket.on, socket.status])\n  useEffect(\n    () => socket.on('chat', (msg) => setChat((c) => [...c, msg])),\n    [socket.on, socket.status]\n  )\n\n  // Join when connected — and again after every reconnect, since the server forgot us.\n  useEffect(() => {\n    if (socket.connected) socket.emit('join', name)\n  }, [socket.connected, name])\n\n  const say = (text) => socket.emit('chat', { name, text })\n\n  return (\n    <section>\n      <p>{socket.connected ? `● in ${name} as ${socket.id}` : `○ ${socket.status}`}</p>\n      <ul>{members.map((m) => <li key={m}>{m}</li>)}</ul>\n      <ul>{chat.map((m, i) => <li key={i}><b>{m.name}</b> {m.text}</li>)}</ul>\n      <button onClick={() => say('hi')}>Say hi</button>\n    </section>\n  )\n}\n```\n\n`socket.emit()` takes the same arguments as Socket.IO's own, acknowledgements included:\n\n```js\nsocket.emit('save', payload, (ack) => console.log('server said', ack))\n```\n\nFor anything the wrappers don't cover, `ws.getSocket()` returns the browser `WebSocket` and\n`socket.getSocket()` the Socket.IO `Socket` — the current one, so read it when you need it rather\nthan holding on to it across a reconnect.\n\n### Switching later\n\nWired Socket.IO and now want a WebSocket, or the other way round? Run `link` in the app:\n\n```bash\nnpx 4bmdns link ws        # Socket.IO → WebSocket\nnpx 4bmdns link socket    # WebSocket → Socket.IO\nnpx 4bmdns link both      # keep both\nnpx 4bmdns link none      # picker only\nnpx 4bmdns link           # a menu, with the current setup marked\n```\n\n```\n  ┌─ 4B-mDNS 1.5.0 • link ────────────────────────────────────────────────┐\n  │                                                                       │\n  │  Live link in ~/code/my-app                                           │\n  │                                                                       │\n  │  Now: Socket.IO  src/main.jsx                                         │\n  │                                                                       │\n  │  ✔ entry point  src/main.jsx      set ws={true} socket={false} on     │\n  │                                   <MdnsProvider>                      │\n  │                                                                       │\n  │  ✔ Switched Socket.IO ❯ WebSocket. Restart the dev server.            │\n  └───────────────────────────────────────────────────────────────────────┘\n                                          --- 4brains technologies (2026)\n```\n\nIt edits only the `ws` and `socket` props on the tag and leaves everything else — `baseUrl`,\n`onSelect`, your callbacks — as it was. Turning Socket.IO off also removes the `socketClient={io}`\nprop and the `import { io } from 'socket.io-client'` line it came with (only if nothing else in\nthe file uses `io`), so you can `npm uninstall socket.io-client` without a dangling import.\nTurning the WebSocket off likewise removes `onWsMessage={pushRelay}` and its import; the\n`mdnsRelay` file stays, since you may have edited it. An `onWsMessage` you wrote yourself is\nnever touched. The flags `config --ws` / `--socket` still work but are additive; `link` replaces.\n\n### When the connection drops\n\nA socket that was up and is now retrying pops a small notice in the launcher's corner:\n\n> **WebSocket disconnected**\n> Trying to reconnect — attempt 3. Check the server is running.\n> `ws://192.168.0.10:3000/`  [Retry now] [Check server]\n\n**Retry now** skips the back-off and dials immediately. **Check server** opens the picker, where\nthe connections row shows the same status and you can pick another server or rescan. The notice\ndismisses itself when the link is back, after a short green \"reconnected\" flash, or when you close\nit for this outage. A link that never connected says \"can't reach the server\" instead. It stays\nout of the way while the picker is open, and `disconnectNotice={false}` turns it off entirely if\nyou show the status your own way.\n\nThe pieces are exported for use on their own, inside or outside the provider:\n\n```js\nimport { useWebSocket, useSocketIo, ReconnectingSocket, linkUrl } from '4b-react-mdns/react'\n\nconst link = useWebSocket('ws://192.168.0.10:3000/live', { onMessage: setReading })\nconst sio = useSocketIo(linkUrl(selection, { scheme: 'http', path: '' }), { client: io })\n\n// No React: the class the hook is built on.\nconst rs = new ReconnectingSocket('ws://192.168.0.10:3000/')\nrs.on('message', ({ data }) => console.log(data))\nrs.connect()\n```\n\n## Filtering to web servers\n\nMost networks are noisy — printers, AirPlay targets, every laptop. `httpOnly` narrows the list to\n`_http._tcp` and `_https._tcp`:\n\n```\nmDNS: advertising \"streaming-server\" at Mac.local:3000 (_http._tcp.local)\nmDNS: advertising \"4bnode-app (4brains)\" at 4brains.local:4021 (_http._tcp.local)\n```\n\nIt's settable at every level, each overriding the one above:\n\n```bash\nnpx 4bmdns --http-only              # the server default\n```\n\n```jsx\n<MdnsProvider httpOnly={true}>      {/* the app's default */}\n<MdnsList httpOnly={false} />       {/* just this list */}\n```\n\nThe **HTTP only** toggle in the panel flips it live. The UI streams every service and filters in\nthe browser, which is what lets the toggle switch both ways instantly.\n\nPassing `httpOnly` hides that toggle — the app has decided, so offering a switch that contradicts\nit only invites confusion. Pass `filterToggle` to bring it back:\n\n```jsx\n<MdnsProvider httpOnly>                      {/* filtered, no toggle */}\n<MdnsProvider httpOnly filterToggle>         {/* filtered, toggle shown */}\n<MdnsProvider>                               {/* server default, toggle shown */}\n```\n\n## Serving the API\n\nThe provider needs the scanner API on `baseUrl`. Three ways to get it there.\n\n**The Vite plugin** covers `npm run dev` and `npm run preview`:\n\n```js\nimport { mdnsPlugin } from '4b-react-mdns/vite'\n\nexport default defineConfig({ plugins: [react(), mdnsPlugin({ httpOnly: true })] })\n```\n\n**A separate process** — for production, or when your app already serves its own `/api/*` and the\nroutes would collide:\n\n```bash\nnpx 4bmdns -p 4173\n```\n\n```jsx\n<MdnsProvider baseUrl=\"http://localhost:4173/api\">\n```\n\n**Embedded in your own server:**\n\n```js\nimport { createServer } from '4b-react-mdns'\n\nconst { urls, storeFile, close } = await createServer({ port: 4173, httpOnly: true })\n```\n\nIf the API isn't reachable the panel says so — a 404 reports that the plugin is missing rather than\npretending the connection dropped.\n\n## CLI\n\n`4bmdns` and `scan-net` are the same command.\n\n```bash\nnpx 4bmdns              # start the scanner UI on :4173\nnpx 4bmdns config       # wire the scanner into the app in this directory\nnpx 4bmdns link ws      # switch the live link: ws, socket, both or none\nnpx 4bmdns which        # print the selected server\nnpx 4bmdns forget       # clear it\n```\n\n```bash\n$ 4bmdns which\nstreaming-server  ->  192.168.0.224:3000\nhttp://192.168.0.224:3000\n```\n\n| Flag | Default | |\n| --- | --- | --- |\n| `-p, --port <number>` | `4173` | Port to listen on |\n| `-H, --host <host>` | `0.0.0.0` | Interface to bind |\n| `--http-only` | off | List only `_http._tcp` / `_https._tcp` |\n| `--all` | on | List every advertised service |\n| `--store <dir>` | `~/.scan-net` | Where the selection is saved |\n| `--dry-run` | — | For `config`: show the plan without writing |\n| `--launcher` / `--no-launcher` | off | For `config`: write `launcher={true}` / `launcher={false}` |\n| `--ws` / `--no-ws` | — | For `config`: write `ws={true}` / `ws={false}` |\n| `--socket` / `--no-socket` | — | For `config`: write `socket={true} socketClient={io}` / `socket={false}` |\n| `--json` | — | Machine-readable output for `which` |\n| `--no-open` | — | Don't open a browser |\n\n`SCAN_NET_HOME` overrides the store directory too, so you can scope a selection per project.\n\n## Node API\n\n```js\nimport { SelectionStore, createServer, MdnsScanner } from '4b-react-mdns'\n\nconst { ip, port, url } = new SelectionStore().read() ?? {}\n```\n\n`selection.json` looks like this:\n\n```json\n{\n  \"id\": \"Living Room Pi._http._tcp.local\",\n  \"name\": \"Living Room Pi\",\n  \"kind\": \"Web server\",\n  \"type\": \"http\",\n  \"protocol\": \"tcp\",\n  \"host\": \"livingroom.local\",\n  \"ip\": \"192.168.1.42\",\n  \"port\": 8080,\n  \"address\": \"192.168.1.42:8080\",\n  \"url\": \"http://livingroom.local:8080\",\n  \"txt\": null,\n  \"savedAt\": \"2026-09-09T10:31:07.482Z\"\n}\n```\n\n`ip` prefers IPv4, falls back to IPv6, then to the advertised `.local` hostname.\n\n## HTTP API\n\n| Endpoint | |\n| --- | --- |\n| `GET /api/status` | `{ scanning, count, startedAt }` |\n| `GET /api/config` | `{ httpOnly }` — the server's default filter |\n| `GET /api/services` | services discovered so far; `?httpOnly=` overrides the default |\n| `GET /api/stream` | SSE: `snapshot`, then `up` / `update` / `down`; `?httpOnly=` too |\n| `POST /api/scan` | start scanning, or re-query to refresh |\n| `POST /api/stop` | stop scanning and drop results |\n| `GET /api/selection` | `{ selection, file }` |\n| `POST /api/selection` | save a service as the selection |\n| `DELETE /api/selection` | clear it |\n\n## Using it from another device\n\nWith `server: { host: true }` (or the standalone CLI, which binds `0.0.0.0`), the UI works from a\nphone or laptop on the same Wi-Fi at `http://<your-ip>:5173`. Selecting there writes to the JSON\nfile on the machine running the scanner, which is usually what you want.\n\nOne caveat: a plain-HTTP LAN origin isn't a *secure context*, so browsers hide the async clipboard\nAPI entirely. **Copy IP** falls back to a legacy copy, and if that's blocked too it highlights the\naddress so you can copy it manually. Clicking the address selects it as well.\n\nThere's no authentication on the API, so run it on networks you trust — or bind the standalone\nserver to loopback with `-H 127.0.0.1`.\n\n## Requirements\n\nNode 20+. React 18 or 19 as a peer dependency, needed only for the `/react` entry.\n`socket.io-client` 4+ is an optional peer, needed only when `socket` is on.\n\n## Develop\n\n```bash\ngit clone https://git.4brains.in/shailesh.gautam/react-mdns-package.git\ncd react-mdns-package\nnpm install\n```\n\n```bash\nnpm run dev      # Vite + the mDNS API on :5173\nnpm run build    # emit dist/ (standalone UI) and dist/react/ (the library)\nnpm start        # serve the built UI the way the published package does\nnpm run lint     # oxlint\n```\n\n`npm run build` runs twice: once for the standalone page in `dist/`, once for the embeddable\nlibrary in `dist/react/` with React left external. `prepack` runs it automatically, so `npm publish`\nalways ships a current build.\n\nTo try unreleased changes in a host app, link the working copy and rebuild after each edit — Vite\nwon't hot-reload a linked dependency's server code:\n\n```bash\ncd ../your-app && npm install ../react-mdns-package\n```\n\n### Layout\n\n| | |\n| --- | --- |\n| `server/` | scanner, HTTP API, Vite plugin, standalone server, `config` codemod |\n| `src/lib/` | the embeddable React entry — provider, hooks, panel, styles |\n| `src/` | the standalone page served by the CLI |\n| `bin/cli.js` | `4bmdns` / `scan-net` |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}