Understanding Bonafide
FAQ
The basics
What is Bonafide?
The Bona Fide Connection Protocol ("Bonafide") is an open protocol that gives each person their own database, their own connections, and control over what they share and with whom. Apps are built on top of it. See What is Bonafide?.
Is Bonafide an app?
No. Bonafide is the protocol, and apps are built on it. Pools is the first one. Think of how email is a set of protocols and Gmail is an app that uses it.
Is this a blockchain or a cryptocurrency?
No. They're apples to oranges. A blockchain is a shared ledger that many parties maintain and agree on. Bonafide has no shared ledger. Each person holds their own database, and messages go between two people, encrypted with standard cryptography and relayed by routers. Nothing in the protocol uses a blockchain or a token.
Is Bonafide decentralized?
Yes, in design, but not fully in operation today. Each person's data sits in their own database, and connections are between two people directly, with no central account system. But today one organization, Bonafide Technologies, runs the router and hosts every app. Router federation, which lets independent organizations run their own infrastructure and interoperate, is planned for the end of 2026.
Who's behind it?
Bonafide Technologies Inc. is the current steward of the protocol. Bonafide Technologies came out of Protegra, our company since 1998. We've been building software for a long time and care about this a lot. We plan to transition stewardship to a non-profit Bonafide Foundation. See Foundation.
How is it different from AT Protocol, ActivityPub, or Solid?
Each of those works with an addressable identity, such as a handle, a server address, or a WebID. That's a reasonable choice for public networks. We chose to build around connections, where two people exchange a one-time code and have no address a stranger can look up. That changes who can contact you, how private communication can work, and how the network deals with spam. That doesn't rule out being public. A business, a publisher, or a person who wants a public presence can have one, because Bonafide supports public nodes alongside private connections. Starting from connections lets us do what those projects do and also the private, controlled sharing they weren't designed around, so we think it can solve a wider range of problems. We also care about interoperability across many domains, and not only social. We're glad those projects exist, and we think they show real demand for alternatives.
What does "bonafide" mean?
We called it the Bona Fide Connection Protocol, or "Bonafide" for short. Bona fide is an English phrase from Latin meaning genuine or in good faith, and it pretty nicely sums up the kind of technology we're building.
Privacy and security
Who can read my messages?
The two people in the connection, and nobody else. Each connection has its own encryption keys, created by the two parties using a Diffie-Hellman exchange (X25519) so the shared secret is never sent anywhere. Content is encrypted with AES-256-GCM. A connection's keys are never reused for another connection.
What can the router see?
No content. It only sees routing information, as it relays encrypted messages between two people. It looks up an opaque key and a domain, forwards the message, and has no key to read it. It holds nothing that identifies a person.
Is there a weak spot?
There's one known gap, and the spec documents it. The first two messages of a connection handshake are encrypted with a key shared across every deployment in the ecosystem, because the per-connection secret doesn't exist yet. The router can't read them. But another deployment holding that key could in principle read another pair's handshake if it could see that traffic. Everything after the handshake is unaffected. The fix is to embed key material in the connection code itself, and we expect it by the end of 2026, alongside router federation.
What happens if a host is breached?
First, a breach stays small, which makes it unattractive to hackers. An attacker gets one person's database at a time. Each person has a separate database, so there's no shared users table to dump and no way to pivot from one person's data to another's. Credentials live inside the same isolated database, so there's no central login store to steal either. Even if an attacker gets someone's connections, they can't send or receive data, because that has to go through the router, which won't communicate with untrusted actors. It is simply way too much work for a hacker for very little reward.
Can anyone send me a message?
Only people you've connected with. A connection needs a deliberate exchange of a code, so there's no address a stranger can use. If you decide to publish a code publicly, you always control the number of uses it can have. Anyone entering that code can connect with you, and that's your decision to make. But because Bonafide is connection-based and not address-based, if you disconnect from that person, they have no way of reaching you again unless they get a new valid code. Connecting with someone once doesn't mean they can reach you forever. Imagine that!
What if I remove a connection?
Either person can end a connection at any time without the other agreeing. When one does, the other is notified, and both sides delete all the content that was shared over that connection.
Can someone I shared something with copy it?
Yes. Bonafide controls who receives your content and how far it travels inside the network. It can't stop a person from taking a screenshot of what they were allowed to see. That's true of every system. What the protocol does guarantee is that apps honor the hop limit you set, so content doesn't travel further inside Bonafide than you allowed.
Do my connections know I'm the same person across them?
Not unless you or your app tells them. The protocol itself never gives anyone a way to link two of your connections. Individual apps can choose to be different. Pools, for example, uses one alias across all of a person's connections so that it can recognize the same person when content has traveled several hops. That means two of your connections who compared notes directly could realize they both know you.
Using Bonafide apps
Do I need an account?
You need a login for the app you use, and that login only gets you into your own database. It's never shared with other people and plays no part in how you connect. If you use more than one Bonafide app against the same database, each one has its own login.
How do I connect with someone?
One of you creates a one-time expiring code and shares it with the other in person or over any channel you trust. The other person enters it, and the two apps complete the connection.
Can I use more than one app with the same data?
Yes, as long as the apps implement the same domain. Your connections and data are in your database. A different app on the same domain can work with them.
Can I change hosts?
That's the direction of the design, and it's one of the main reasons for it. Today, Bonafide Technologies hosts everything, so there isn't another host to move to yet. Router federation lets other organizations host. Moving an account between independently run hosts isn't specified in v0.1 and is a future piece of work. We'd rather be clear about that than imply it works today.
What's Pools?
The first app on Bonafide. It's for sharing with different groups of people in different contexts, with threaded conversations under posts. It's not social media and it's not a group chat. It sits somewhere in between. It's available on iOS and Android. Get Pools →
Building on Bonafide
What do I need to build an app?
A schema for what your app shares, a few handlers for the four message types (connection, subscription, content, command), and the reference agent library. We've built a robust decentralized and distributed system and hidden much of the complexity, so building an app isn't nearly as complicated as that sounds. See Getting Started.
What language is the reference library written in?
JavaScript.
Do I need to read the whole spec?
No. The library is meant to hide that complexity behind a small registration API. The spec is there when you want the ground truth.
Can I run my own router?
Not yet. Today, building a Bonafide app means building on our hosted infrastructure. Independent operators running their own routers is what federation will allow.
What's a domain?
A shared contract for what a kind of app can exchange: the content types, how access to them is controlled, and the commands that act on them. See Domains & Interoperability.
Can I define a new domain?
Yes. You can propose it as a GitHub issue or pull request, or just reach out and we'll talk it through. See Adding new domains.
Is the reference implementation open source?
The specification text is CC-BY-4.0. Code and machine-readable schemas in the spec repository are MPL-2.0. See License.
The bigger picture
What happens with AI agents?
They're bound by the same rules as everyone else. An agent has to be connected to someone to interact with them, can only see what it was given access to, and can only share what it's allowed to. That limits spam and data scraping at the protocol level instead of leaving it to each app to police.
Is there a Bonafide Foundation?
We plan to create one. It would take over stewardship of the specification from Bonafide Technologies, and run the change process with wider participation. It depends on finding sponsors and donors. Support the Foundation →
How do I contribute to the spec?
Open a GitHub issue or a pull request. To keep the process manageable, a proposal needs to show real engagement with the spec. See the change process.