How a shared list works with no server
We Need Bananas has no accounts and no database. Here's how your list gets from your kitchen to the person at the shop.
The three words are the list
When you start a list you get three random words, like lemon.fork.bulb, picked from about 1,600 everyday words. That's around four billion possible lists. The words are the list's name, its address (weneedbananas.com/lemon.fork.bulb) and its key.
On your device the words are stretched into a secret key (PBKDF2 with 600,000 rounds). That key produces a scrambled room id, which lets devices with the same list find each other, and a password that encrypts the connection handshake.
Every device keeps the whole list
Your list is saved in your browser's own storage. You can close the tab, lose signal or put your phone in airplane mode and it's still there. The site works offline once you've opened it.
Devices sync directly with each other
When two devices have the same list open, they connect peer-to-peer over WebRTC, the same technology used for video calls in the browser, and swap changes directly. To find each other they use free public Nostr relays, which only ever see the scrambled room id and an encrypted handshake. Your items go straight from device to device.
The list is a CRDT (we use Yjs). That means two people can edit offline at the same time and their changes merge cleanly when they reconnect. Nobody's edits get lost.
The one trade-off
With no server holding the list, two devices need to have it open at the same time for changes to pass between them. In practice that happens naturally: open the list when you get to the shop and anyone at home with it open syncs instantly. The badge at the top of the list always tells you whether you're live with someone or only saved on this device.
Tip: if you're adding things for someone else to buy, open the list once while they have it open too, even for a few seconds, and everything comes across.
Built for shopping
- Items sort into aisle order automatically, and you can reorder the aisles to match your shop.
- Quantities are understood: "2 milk", "500g mince", "bananas x6". Duplicates merge.
- Shop mode keeps your screen awake with big tick targets and a count of what's left.
- "Couldn't find it" keeps an item for next time. "Done shopping" clears what you bought.
- Things you buy often come back as one-tap usuals.