{"_id":"@0xsarwagya/handoff","name":"@0xsarwagya/handoff","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@0xsarwagya/handoff","version":"0.1.0","description":"Move application state between devices without an account or cloud sync.","type":"module","license":"MIT","repository":{"type":"git","url":"git+https://github.com/0xsarwagya/handoff.git"},"homepage":"https://oss.sarwagya.wtf/handoff","keywords":["state-transfer","handoff","qr-code","url-fragment","local-first","devices","typescript"],"sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"publishConfig":{"access":"public"},"devDependencies":{"@playwright/test":"1.61.1","@types/node":"^22.15.3","tsup":"^8.3.5","typescript":"5.9.2","vite":"^5.4.11","vitest":"^3.0.0"},"scripts":{"build":"tsup && tsc -p tsconfig.build.json","check-types":"tsc --noEmit","test":"vitest run","test:unit":"vitest run","test:e2e":"playwright test","test:e2e:transfer":"playwright test --project=chromium-transfer --project=firefox-transfer --project=webkit-transfer","test:e2e:unsupported":"playwright test --project=chromium-unsupported","test:e2e:install":"playwright install --with-deps"},"_id":"@0xsarwagya/handoff@0.1.0","bugs":{"url":"https://github.com/0xsarwagya/handoff/issues"},"_integrity":"sha512-vm30G+FTMbVXC3/xfO4GG3M36NhxkyYUVUKCMwyObx4wTrWD+PhW9ObZqURPX4hDT7AaW00DmrFGSc++YEpQ/w==","_resolved":"/tmp/51d76519f3a8178d445045899de9a5c2/0xsarwagya-handoff-0.1.0.tgz","_from":"file:0xsarwagya-handoff-0.1.0.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-vm30G+FTMbVXC3/xfO4GG3M36NhxkyYUVUKCMwyObx4wTrWD+PhW9ObZqURPX4hDT7AaW00DmrFGSc++YEpQ/w==","shasum":"5d79dbef050f905a91b7a8f68c755cea0f3bc778","tarball":"https://registry.npmjs.org/@0xsarwagya/handoff/-/handoff-0.1.0.tgz","fileCount":25,"unpackedSize":63929,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC6qOGX3SxRNc199lO5NrKZKsmJk7KfLbg7Hrl6RNfGxQIhAOCWRWYa4aS84F3SOCT2i0HmZ2BBKXUtZ786QqOcr9T1"}]},"_npmUser":{"name":"0xsarwagya","email":"sarwagyasingh69@gmail.com"},"directories":{},"maintainers":[{"name":"0xsarwagya","email":"sarwagyasingh69@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/handoff_0.1.0_1783285504737_0.9245894853340899"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-05T21:05:04.525Z","0.1.0":"2026-07-05T21:05:04.872Z","modified":"2026-07-05T21:05:05.038Z"},"maintainers":[{"name":"0xsarwagya","email":"sarwagyasingh69@gmail.com"}],"description":"Move application state between devices without an account or cloud sync.","homepage":"https://oss.sarwagya.wtf/handoff","keywords":["state-transfer","handoff","qr-code","url-fragment","local-first","devices","typescript"],"repository":{"type":"git","url":"git+https://github.com/0xsarwagya/handoff.git"},"bugs":{"url":"https://github.com/0xsarwagya/handoff/issues"},"license":"MIT","readme":"# Handoff\n\nMove application state between devices without an account or cloud sync.\n\nA TypeScript library for the moment something is *here* and should be\n*there* — once. The state becomes a self-contained URL artifact; show it as\na QR code or send the link. No account, no sync engine, no Handoff server.\n\nTransfer is not sync.\n\n## Install\n\n```sh\npnpm add @0xsarwagya/handoff\n```\n\n## The whole API\n\nOn the device that has the state:\n\n```ts\nimport { createHandoff } from \"@0xsarwagya/handoff\";\n\nconst handoff = createHandoff({ receiveUrl: \"https://app.example/receive\" });\n\nconst offer = await handoff.create({ type: \"draft\", text: \"finish on my phone\" });\n\noffer.url;        // https://app.example/receive#handoff=ho1_…\noffer.artifact;   // render this as a QR code\noffer.qrFriendly; // true while it will actually scan\n```\n\nOn the device that wants it:\n\n```ts\nconst state = await handoff.receive(); // reads the current location\n```\n\nThe whole artifact is the capability: anyone with the complete link or QR\npayload can receive its contents. Treat it like the state itself.\n\n## Status\n\nExperimental. The v1 wire protocol is versioned and pinned by test\nvectors; inline transfer is proven across Chromium, Firefox, and WebKit in\nCI. Physical-device QR testing is tracked in the\n[compatibility docs](https://oss.sarwagya.wtf/handoff/docs/compatibility).\n\n## Documentation\n\nhttps://oss.sarwagya.wtf/handoff/docs\n\n## License\n\n[MIT](./LICENSE)\n","readmeFilename":"README.md","_rev":"1-c749728626a9d55bb11bed3a9dbd3376"}