Separate lives, one device.
Contacts never learn the others exist · web, desktop and extension
Boo: Is anyone out there?
Ghostly connects you straight to the people you invite. Chat one to one or as a group, send files and sats, call, and share what runs on your computer.
Peer to peer · No account to createNothing to install · Free and open source
Boo makes an invitation for one person. It holds the keys, not an account.
A link, a QR code or a text code. Send it only to the person you want to meet.
Casper opens it, both apps find each other and confirm. You're talking.
The apps meet on the Mainline DHT, which millions of BitTorrent users already share. There is no Ghostly server in the middle.
The desktop app reads it directly. Browsers use public Pkarr relays.
Boo leaves a few tiny signed records in the network. What matters inside is encrypted.
Casper knows where to look and how to read them. Anyone else sees sealed records.
They are refreshed only while you're online. Stop, and they age out. Copies someone already made are not erased.
Boo's desktop app and Casper's browser each list what they support.
Only what is on both lists is used. The rest stays off.
Here: chat, files and Cashu over WebRTC. Other apps, another plan.
Chats with Ghostly 0.4 contacts keep a fixed set.
Once they know how to reach each other, the conversation moves off the DHT.
Messages, files and payments travel over a live connection between the two devices: WebRTC, Iroh or HyperDHT.
Public STUN servers help find a way through home routers. If the direct path drops, short texts keep going over the DHT.
You can add your own TURN relay in settings.
Here is what the app does.
Private one-to-one conversations. Reply to a message, edit what you sent, react with an emoji, see when they are typing or recording. No phone number, no public profile.
Voice messages you can lock, pause and play at 2x. Delivery marks beside the time, local history, and messages held for a contact who is away.

Rich text with lists, quotes and links, and a card for what you paste: an invite, a payment request, a Nostr profile, a link with its preview.
Your app makes the preview, so your contact's app never opens the link. A seed or a private key asks before it goes.

Paste a screenshot or drop a file into the chat. It goes straight from your device to theirs, checked on arrival.
Any size, with both of you online. Videos play right in the chat. A big file picks up where it stopped, and a stuck one can be sent again.

Voice, video and screen sharing, one to one. Turn the camera on or share your screen without calling again.
In the browser, the extension and the desktop app, Linux included. Screen sharing needs a computer, not Linux yet. A call rings while the chat is live, not over the DHT. No group calls yet.

Send or request sats right in the conversation: ecash, a Lightning invoice, or from the wallet you already use.
Real and test wallets side by side, one tab per network, test coins a tap away. Several Lightning cards (NWC, LND, Core Lightning, WebLN, Breez), Lightning addresses, Ark, Spark, Fedimint, USDT and on-chain bitcoin. The BDK on-chain wallet runs on test networks only.

A private group of up to 32, or a community of up to 256 that anyone with its link can join. Invite people from your chats or share the link.
Text, @mentions, replies, edits, reactions, a group picture and payments between members. Files, photos and voice messages too, up to 100 MB each, fetched from whoever in the group has them. Typing shows in private groups. No calls yet.

Attach an outside identity to your profile once (a Nostr or Pubky key, a domain, an OpenPGP or SSH key, a Bitcoin address, a DID) and share it with one contact at a time. Their app verifies it on the device.
A shared card lands in the chat with its public profile: picture, name, posts. Never required to talk. Withdraw it from one chat, or revoke it everywhere.

While you're online, let a contact open a web app running on your computer: a photo gallery, a dashboard, a prototype.
Desktop app or browser extension at both ends; plain HTTP, no WebSockets. You choose which contacts see each app.

The app's own engine without a screen, for scripts, bots and agents: chats, groups, files, payments and voice calls, with every event as a JSON line.
Needs Node: npm install -g @ghostlytools/cli.
CLI guide →$ ghostly daemon --detach
$ ghostly invite create --label casper
{"invite":"ghostly1…","link":"https://ghostly.tools/#ghostly1…"}
$ ghostly send casper "Boo! 👻"
$ ghostly listen --type message.received
{"type":"message.received","message":{"text":"deploy?"}}Chats, keys, wallets and services live in the app. No server of ours.

Contacts never learn the others exist · web, desktop and extension
One device active at a time · up to 4 · both online to move · web, desktop and extension
Sealed with your passphrase · restoring creates a new profile, nothing is overwritten
Four themes · light or dark · eight languages · sounds · app lock
Each payment method is its own card, with its own rules. Pick one to see what it does and how ready it is.
Private ecash tokens you can pass along in a chat. A mint you choose holds the funds.
Trust the mint you pick: it can see its own operations and holds the backing sats.
Real and test wallets live side by side, one tab per network. On Testnet, a button brings free test coins.
Show a contact that a key or an account elsewhere is yours. Each kind of proof is its own card: pick one to see what it proves and how ready it is.
Proves you hold a Nostr key: your signer signs once, and the key never leaves it.
A browser extension (NIP-07) or a remote signer (NIP-46) signs. The proof is never published to a relay, and it is not permission to post.
Never required. Each proof is made once and shared only with the contacts you pick, who check it themselves. You can withdraw it at any time.
…is one app composing independent pieces: a small rendezvous core, transports, and abilities like chat, files and payments.
Each piece is described in a WISP, a public draft contract. Another app can implement only the pieces it needs and still meet Ghostly halfway.
Open Ghostly in your browser and invite someone you know. Or take it with you on your desktop.
Open app.ghostly.toolsChrome, Brave, Edge
For bots and agents. Needs Node; on npm as @ghostlytools/cli.
Free and open source (MIT). Using Ghostly means you accept the Terms of Service and have read the Privacy Policy.