Catalog npm
Back to packageRELEASE DETAILS

1.0.8

npm

@0x0contact/c0x0

P2P disposable number messenger

Published16 Oct 2026
Direct dependencies12
Transitive dependenciesNot calculated

README

Current package documentation

0x0

P2P disposable number messenger — no servers, no logs, no trace.

Share a number and a PIN. Message. Forget it ever happened.


install

npm install -g @0x0contact/c0x0

requires Node.js 20.19 or later


quick start

# initialize (generates your number)
c0x0 init

# --- share your number + PIN with someone ---
c0x0 pin new --label "for sale"   # creates e.g. "a3f9"
c0x0 whoami                       # shows your number to share

# --- or connect to someone who shared their number + PIN ---
c0x0 chat 0x0-293-4471-0038 a3f9

# done — revoke your PIN when finished
c0x0 pin revoke a3f9

commands

setup

c0x0 init          # generate your number
c0x0 whoami        # show your number
c0x0 renew         # generate a new number (resets all PINs)

local identity migration

c0x0 migrate identity --json          # read-only migration preview
c0x0 migrate identity --apply --json  # create the additive local sidecar
c0x0 migrate preflight --json         # read-only legacy data inventory

These migration tools are local and do not publish an ID, create an account, or change P2P routing. The preflight command reports aggregate counts and blocking categories only; it has no apply mode.

PIN management

c0x0 pin new                          # create a PIN
c0x0 pin new --label "label"          # with label
c0x0 pin new --expires 24h            # expires in 24h (also: 1w)
c0x0 pin new --public                 # create a public PIN (for requests)
c0x0 pin list                         # list all PINs
c0x0 pin rotate <pin>                 # change PIN value
c0x0 pin revoke <pin>                 # permanently revoke

messaging

c0x0 chat <number> <pin>              # interactive chat
c0x0 send <number> <pin> "message"    # send once and exit
c0x0 inbox                            # view all inboxes
c0x0 read <pin>                       # read messages for a PIN
c0x0 listen                           # wait for incoming messages
c0x0 queue                            # show offline message queue

requests (public PIN)

Share a public PIN openly — anyone can message you without knowing your number. First reply creates a dedicated private channel automatically.

c0x0 pin new --public --label "open"  # create a public PIN to share
c0x0 requests                         # list incoming requests
c0x0 approve <pin> <pubkey>           # reply and convert to private chat

contacts

c0x0 contact add 0x0://NUMBER/PIN     # add from URI
c0x0 contact add NUMBER PIN           # add manually
c0x0 contact list                     # list contacts
c0x0 contact label <id> "label"       # set label
c0x0 contact remove <id>              # remove

QR code

c0x0 qr <pin>    # show QR code in terminal (scan to connect)

web UI

c0x0 web              # open browser UI at localhost:3000
c0x0 web --port 8080
c0x0 web --lan        # expose on LAN (accessible from mobile on same WiFi)
c0x0 web --no-open

Starts a local web server with a chat interface. Open the full URL printed by the command; its #session= fragment authenticates the WebSocket and is removed from the address bar after loading. --lan accepts only that session plus an exact local-network origin, so do not reuse a token-free bookmark.


how it works

your number:  0x0-816-8172-8198   (generated locally, never sent anywhere)
your PIN:     a3f9                (you create and revoke it)

connection:   sha256("0x0:{number}:{pin}:0x0-v1-2026") → Hyperswarm topic
transport:    Hyperswarm (DHT-based P2P, Noise protocol)
storage:      ~/.0x0/ (local only)

No accounts. No servers. No registration. Messages route peer-to-peer via Hyperswarm.


URI scheme

0x0://0x0-816-8172-8198/a3f9

Share as a link, QR code, or copy-paste. The other person adds it as a contact and connects directly.


agent / pipe mode

For AI agents and automation:

c0x0 pipe <number> <pin>

Reads JSON commands from stdin, emits JSON events to stdout:

# stdin
{"type": "message", "content": "task complete"}

# stdout
{"type": "connected", "peer": "0x0-293-4471-0038", "pin": "a3f9"}
{"type": "message", "from": "0x0-293-4471-0038", "content": "got it"}
import subprocess, json

proc = subprocess.Popen(
    ["c0x0", "pipe", "0x0-293-4471-0038", "a3f9"],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
)
proc.stdin.write(json.dumps({"type": "message", "content": "done"}).encode() + b"\n")
proc.stdin.flush()

data

Everything lives in ~/.0x0/:

~/.0x0/
├── identity.json       # your number
├── pins.json           # your PINs
├── contacts.json       # saved contacts
├── queue.jsonl         # offline message queue (TTL: 72h)
└── messages/           # message history (per PIN)

Delete ~/.0x0/ to erase all traces.


mobile

Android app available on Google Play. iOS coming soon. The CLI and mobile apps are fully compatible — same number, same PINs, same P2P network.

0x0.contact


license

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 12

Native requirements
12 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
ws
Environment
{
  "local_name": "ws",
  "alias": false,
  "peer_metadata": null
}
^8.18.0runtime
ora
Environment
{
  "local_name": "ora",
  "alias": false,
  "peer_metadata": null
}
^9.0.0runtime
open
Environment
{
  "local_name": "open",
  "alias": false,
  "peer_metadata": null
}
^11.0.0runtime
bip39
Environment
{
  "local_name": "bip39",
  "alias": false,
  "peer_metadata": null
}
^3.1.0runtime
chalk
Environment
{
  "local_name": "chalk",
  "alias": false,
  "peer_metadata": null
}
^5.3.0runtime
express
Environment
{
  "local_name": "express",
  "alias": false,
  "peer_metadata": null
}
^5.0.0runtime
commander
Environment
{
  "local_name": "commander",
  "alias": false,
  "peer_metadata": null
}
^14.0.0runtime
hyperswarm
Environment
{
  "local_name": "hyperswarm",
  "alias": false,
  "peer_metadata": null
}
^4.7.0runtime
qrcode-terminal
Environment
{
  "local_name": "qrcode-terminal",
  "alias": false,
  "peer_metadata": null
}
^0.12.0runtime
vite
Environment
{
  "local_name": "vite",
  "alias": false,
  "peer_metadata": null
}
^7.0.0development
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^5.3.0development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^22.20.5development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "fb8bd03463f31a0276b282084ff37407f8c7d4d6",
  "tarball": "https://registry.npmjs.org/@0x0contact/c0x0/-/c0x0-1.0.8.tgz",
  "fileCount": 50,
  "integrity": "sha512-MwRxCuebcEKnjK28X9LDxDhi9bfwISy4kpbauh0itxRFN+vwTEf+/zwG5j+d8lQ2zwaEs9pcaBB+mSn858Y/Dw==",
  "signatures": [
    {
      "sig": "MEQCIGv6XiBICQ/H0BHcXpqpgaYC4dD9A/09FZjdLJInPzB0AiBAl16wuOff4IBP9EOYTRr0W9eM9siBnUef4L1LmWQtQw==",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    },
    {
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U",
      "sig": "MEUCID2Lz+0Jf0VX6jXdKsSVTJTYxlRJfNYKTpdOe4m9QpQ3AiEA/PBA/D5s6QA2VUfvnPEr5XM+HUfK1DQFvuf/4T20NZ8="
    }
  ],
  "unpackedSize": 190226
}

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:33 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:c5d6210acc726dad222ac2f2fb130d3d836cf59860075eedc11f9e39bae528ee

Other collected versions

1.0.723 Feb1.0.623 Feb1.0.523 Feb1.0.322 FebView all collected versions →