{"_id":"@0x0contact/c0x0","_rev":"4-43c96637c766a099d705fc4e1b01f95c","name":"@0x0contact/c0x0","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.3":{"name":"@0x0contact/c0x0","version":"1.0.3","_id":"@0x0contact/c0x0@1.0.3","maintainers":[{"name":"tiida-tech","email":"queensquay228209@gmail.com"}],"bin":{"c0x0":"bin/c0x0.js"},"dist":{"shasum":"483e4fca07383020f929a948b2c485d34593f306","tarball":"https://registry.npmjs.org/@0x0contact/c0x0/-/c0x0-1.0.3.tgz","fileCount":32,"integrity":"sha512-G1bvg27JkjoAd574XHBB7aJ9UeVgkJR4BYDoko7pZJ9SbQMmu78rompfbqMzSr/hRQ7R63pfsn8QzlHLrtyujg==","signatures":[{"sig":"MEQCIA29m6dQmbmXQPt+Bp1IkdIFOtn/tKNOUqJFgDt4u1KpAiBx2nqgl9hvLEXdQWO/Jlek7egTDdoC+pNu5n41ew6LpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90631},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"1ddbf97892c001f1247c21c5377f06d956105931","scripts":{"start":"node bin/0x0.js","dev:web":"vite web-ui","build:web":"vite build web-ui"},"_npmUser":{"name":"tiida-tech","email":"queensquay228209@gmail.com"},"_npmVersion":"11.6.2","description":"P2P disposable number messenger","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.16.0","ora":"^8.0.1","open":"^10.1.0","uuid":"^9.0.0","chalk":"^5.3.0","express":"^4.18.0","commander":"^12.0.0","hyperswarm":"^4.7.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.0","typescript":"^5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/c0x0_1.0.3_1771801349956_0.5526877706543492","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@0x0contact/c0x0","version":"1.0.5","_id":"@0x0contact/c0x0@1.0.5","maintainers":[{"name":"tiida-tech","email":"queensquay228209@gmail.com"}],"bin":{"c0x0":"bin/c0x0.js"},"dist":{"shasum":"f373311dd64b5d822b30bfc2af94eee939efa297","tarball":"https://registry.npmjs.org/@0x0contact/c0x0/-/c0x0-1.0.5.tgz","fileCount":36,"integrity":"sha512-sBWXagC7gFbGVXZ3LLkBLxFU2SMCHUH9aju0qj25HAG6cuux8ZiKOuqLchwQgnaT3UdoI9lhd5XLEWl+Sf45Fg==","signatures":[{"sig":"MEUCIGY/Exvy2IOnL3Fpk9ttq0GOjOXu7q1tsLIDgghtujjtAiEArOuIOeGmIbt+pBBRAOmVcohWufXYsgjamqHyypxXHo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117390},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"54d74c48c1a9f553180d8ec963646c485e4aaa44","scripts":{"start":"node bin/0x0.js","dev:web":"vite web-ui","build:web":"vite build web-ui"},"_npmUser":{"name":"tiida-tech","email":"queensquay228209@gmail.com"},"_npmVersion":"11.6.2","description":"P2P disposable number messenger","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","ora":"^9.0.0","open":"^11.0.0","chalk":"^5.3.0","express":"^5.0.0","commander":"^14.0.0","hyperswarm":"^4.7.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","typescript":"^5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/c0x0_1.0.5_1771883967534_0.11459291457730747","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@0x0contact/c0x0","version":"1.0.6","_id":"@0x0contact/c0x0@1.0.6","maintainers":[{"name":"tiida-tech","email":"queensquay228209@gmail.com"}],"bin":{"c0x0":"bin/c0x0.js"},"dist":{"shasum":"757d07f0857bf6b383146b890c1795ff88243d93","tarball":"https://registry.npmjs.org/@0x0contact/c0x0/-/c0x0-1.0.6.tgz","fileCount":36,"integrity":"sha512-ufiDmlHqGkMMWzw74SUKKuYDqzcNRfJqXk8a2dCBbjFPmB9UtviDFuHXXYAI9NvGvLtpd56pB2QQdTD8VOOyAQ==","signatures":[{"sig":"MEUCIHa53egKmL9ElYcEKznD5uLj9nSQ7BIHpBPzY25yW0nHAiEAyxRRPEUKMopUlVma3gnjzMA8iqtNJBfyM5J7OkbcHYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118073},"type":"module","engines":{"node":">=18.0.0"},"gitHead":"54d74c48c1a9f553180d8ec963646c485e4aaa44","scripts":{"start":"node bin/0x0.js","dev:web":"vite web-ui","build:web":"vite build web-ui"},"_npmUser":{"name":"tiida-tech","email":"queensquay228209@gmail.com"},"_npmVersion":"11.6.2","description":"P2P disposable number messenger","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","ora":"^9.0.0","open":"^11.0.0","chalk":"^5.3.0","express":"^5.0.0","commander":"^14.0.0","hyperswarm":"^4.7.0","qrcode-terminal":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.0","typescript":"^5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/c0x0_1.0.6_1771885267973_0.7609457958148595","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@0x0contact/c0x0","version":"1.0.7","description":"P2P disposable number messenger","type":"module","bin":{"c0x0":"bin/c0x0.js"},"scripts":{"start":"node bin/0x0.js","build:web":"vite build web-ui","dev:web":"vite web-ui"},"dependencies":{"chalk":"^5.3.0","commander":"^14.0.0","express":"^5.0.0","hyperswarm":"^4.7.0","open":"^11.0.0","ora":"^9.0.0","qrcode-terminal":"^0.12.0","ws":"^8.18.0"},"devDependencies":{"typescript":"^5.3.0","vite":"^7.0.0"},"engines":{"node":">=18.0.0"},"gitHead":"54d74c48c1a9f553180d8ec963646c485e4aaa44","_id":"@0x0contact/c0x0@1.0.7","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-+fwqDPZnIEAC6MjrJdEaekjkN+7y60vu5F0/MaGtXO68GbMEbSGT0LwXs5v9Re5+OZB3pqqN6Niw4R+qwySiNg==","shasum":"220b3df4d3fc13c74d6730e671671c2415c75af7","tarball":"https://registry.npmjs.org/@0x0contact/c0x0/-/c0x0-1.0.7.tgz","fileCount":36,"unpackedSize":118204,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCqRtluR7CzsOd7uhI/8gg+OCfw/EMh7MIfb5qx6fM2ogIhAKY2NiOcaI7XJ/VoiKWZCiAedwn9DDEuzjoR8GJg+uMo"}]},"_npmUser":{"name":"tiida-tech","email":"queensquay228209@gmail.com"},"directories":{},"maintainers":[{"name":"tiida-tech","email":"queensquay228209@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/c0x0_1.0.7_1771885444777_0.5368103818003864"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-22T23:02:29.854Z","modified":"2026-02-23T22:24:05.051Z","1.0.3":"2026-02-22T23:02:30.336Z","1.0.5":"2026-02-23T21:59:27.699Z","1.0.6":"2026-02-23T22:21:08.110Z","1.0.7":"2026-02-23T22:24:04.928Z"},"description":"P2P disposable number messenger","maintainers":[{"name":"tiida-tech","email":"queensquay228209@gmail.com"}],"readme":"# 0x0\r\n\r\n> P2P disposable number messenger — no servers, no logs, no trace.\r\n\r\nShare a number and a PIN. Message. Forget it ever happened.\r\n\r\n---\r\n\r\n## install\r\n\r\n```bash\r\nnpm install -g @0x0contact/c0x0\r\n```\r\n\r\nrequires Node.js 18+\r\n\r\n---\r\n\r\n## quick start\r\n\r\n```bash\r\n# initialize (generates your number)\r\nc0x0 init\r\n\r\n# --- share your number + PIN with someone ---\r\nc0x0 pin new --label \"for sale\"   # creates e.g. \"a3f9\"\r\nc0x0 whoami                       # shows your number to share\r\n\r\n# --- or connect to someone who shared their number + PIN ---\r\nc0x0 chat 0x0-293-4471-0038 a3f9\r\n\r\n# done — revoke your PIN when finished\r\nc0x0 pin revoke a3f9\r\n```\r\n\r\n---\r\n\r\n## commands\r\n\r\n### setup\r\n\r\n```bash\r\nc0x0 init          # generate your number\r\nc0x0 whoami        # show your number\r\nc0x0 renew         # generate a new number (resets all PINs)\r\n```\r\n\r\n### PIN management\r\n\r\n```bash\r\nc0x0 pin new                          # create a PIN\r\nc0x0 pin new --label \"label\"          # with label\r\nc0x0 pin new --expires 24h            # expires in 24h (also: 1w)\r\nc0x0 pin new --public                 # create a public PIN (for requests)\r\nc0x0 pin list                         # list all PINs\r\nc0x0 pin rotate <pin>                 # change PIN value\r\nc0x0 pin revoke <pin>                 # permanently revoke\r\n```\r\n\r\n### messaging\r\n\r\n```bash\r\nc0x0 chat <number> <pin>              # interactive chat\r\nc0x0 send <number> <pin> \"message\"    # send once and exit\r\nc0x0 inbox                            # view all inboxes\r\nc0x0 read <pin>                       # read messages for a PIN\r\nc0x0 listen                           # wait for incoming messages\r\nc0x0 queue                            # show offline message queue\r\n```\r\n\r\n### requests (public PIN)\r\n\r\nShare a public PIN openly — anyone can message you without knowing your number.\r\nFirst reply creates a dedicated private channel automatically.\r\n\r\n```bash\r\nc0x0 pin new --public --label \"open\"  # create a public PIN to share\r\nc0x0 requests                         # list incoming requests\r\nc0x0 approve <pin> <pubkey>           # reply and convert to private chat\r\n```\r\n\r\n### contacts\r\n\r\n```bash\r\nc0x0 contact add 0x0://NUMBER/PIN     # add from URI\r\nc0x0 contact add NUMBER PIN           # add manually\r\nc0x0 contact list                     # list contacts\r\nc0x0 contact label <id> \"label\"       # set label\r\nc0x0 contact remove <id>              # remove\r\n```\r\n\r\n### QR code\r\n\r\n```bash\r\nc0x0 qr <pin>    # show QR code in terminal (scan to connect)\r\n```\r\n\r\n### web UI\r\n\r\n```bash\r\nc0x0 web              # open browser UI at localhost:3000\r\nc0x0 web --port 8080\r\nc0x0 web --lan        # expose on LAN (accessible from mobile on same WiFi)\r\nc0x0 web --no-open\r\n```\r\n\r\nStarts a local web server with a chat interface.\r\n\r\n---\r\n\r\n## how it works\r\n\r\n```\r\nyour number:  0x0-816-8172-8198   (generated locally, never sent anywhere)\r\nyour PIN:     a3f9                (you create and revoke it)\r\n\r\nconnection:   sha256(\"0x0:{number}:{pin}:0x0-v1-2026\") → Hyperswarm topic\r\ntransport:    Hyperswarm (DHT-based P2P, Noise protocol)\r\nstorage:      ~/.0x0/ (local only)\r\n```\r\n\r\nNo accounts. No servers. No registration. Messages route peer-to-peer via [Hyperswarm](https://github.com/holepunchto/hyperswarm).\r\n\r\n---\r\n\r\n## URI scheme\r\n\r\n```\r\n0x0://0x0-816-8172-8198/a3f9\r\n```\r\n\r\nShare as a link, QR code, or copy-paste. The other person adds it as a contact and connects directly.\r\n\r\n---\r\n\r\n## agent / pipe mode\r\n\r\nFor AI agents and automation:\r\n\r\n```bash\r\nc0x0 pipe <number> <pin>\r\n```\r\n\r\nReads JSON commands from stdin, emits JSON events to stdout:\r\n\r\n```bash\r\n# stdin\r\n{\"type\": \"message\", \"content\": \"task complete\"}\r\n\r\n# stdout\r\n{\"type\": \"connected\", \"peer\": \"0x0-293-4471-0038\", \"pin\": \"a3f9\"}\r\n{\"type\": \"message\", \"from\": \"0x0-293-4471-0038\", \"content\": \"got it\"}\r\n```\r\n\r\n```python\r\nimport subprocess, json\r\n\r\nproc = subprocess.Popen(\r\n    [\"c0x0\", \"pipe\", \"0x0-293-4471-0038\", \"a3f9\"],\r\n    stdin=subprocess.PIPE,\r\n    stdout=subprocess.PIPE,\r\n)\r\nproc.stdin.write(json.dumps({\"type\": \"message\", \"content\": \"done\"}).encode() + b\"\\n\")\r\nproc.stdin.flush()\r\n```\r\n\r\n---\r\n\r\n## data\r\n\r\nEverything lives in `~/.0x0/`:\r\n\r\n```\r\n~/.0x0/\r\n├── identity.json       # your number\r\n├── pins.json           # your PINs\r\n├── contacts.json       # saved contacts\r\n├── queue.jsonl         # offline message queue (TTL: 72h)\r\n└── messages/           # message history (per PIN)\r\n```\r\n\r\nDelete `~/.0x0/` to erase all traces.\r\n\r\n---\r\n\r\n## mobile\r\n\r\nAndroid app available on Google Play. iOS coming soon.\r\nThe CLI and mobile apps are fully compatible — same number, same PINs, same P2P network.\r\n\r\n[0x0.contact](https://0x0.contact)\r\n\r\n---\r\n\r\n## license\r\n\r\nMIT\r\n","readmeFilename":"README.md"}