About Splintr

A federated social network where you own your data and your server.

Nodes and clusters

In Splintr, each user account is called a node. A node is your identity on the network — it holds your profile, your posts, your friend connections, and your privacy settings.

A Splintr server can be set up in two ways. A single-node server is a personal site where one person owns the whole domain. A cluster is a server that hosts multiple nodes — several people each with their own account, like splintr.net/alice and splintr.net/dan. Under the hood, both run the same software and speak the same federation protocol.

What is federation?

Most social networks are centralized — one company runs the servers, stores your data, and decides the rules. Splintr is different. Anyone can run their own server, and servers talk to each other so nodes on different servers can connect as friends, see each other's posts, and interact — all without needing accounts on every server.

Think of it like email: you can send a message from Gmail to Outlook because they speak the same protocol. Splintr servers work the same way. Your node lives on your home server, and federation handles the rest.

How servers discover each other

Every Splintr server publishes a discovery endpoint at /.well-known/splintr. This is a small JSON file containing the server's public key and basic metadata. When one server needs to talk to another for the first time, it fetches this endpoint to learn how to verify that server's identity.

Public keys are cached for 24 hours to reduce network traffic. This follows a trust-on-first-use (TOFU) model — once a server has seen another server's key, it remembers it. For stronger assurance, a server administrator can publish their public key in a DNS TXT record. When present, receiving servers will cross-check the handshake key against the DNS-published key and reject any mismatch, catching impersonation attempts that TOFU alone would miss.

The friend request handshake

Adding a friend across servers involves a multi-step handshake between the two servers that ensures both users consent and that identities are genuine.

Step 1 — You visit a remote profile

You are logged into your home server (say, alpha.example) and you visit a node's profile on beta.example. Your server generates a single-use federation token that proves you are who you say you are.

Step 2 — The handoff

Your browser is redirected to the remote server with a signed handoff token. The remote server contacts your home server to verify the token is valid and hasn't been used before. This prevents replay attacks — each token works exactly once.

Step 3 — You send the friend request

Once your identity is verified, you can view the remote user's public profile and send a friend request. The request is signed with your home server's private key so the remote server can confirm it's authentic.

Step 4 — The remote user accepts

When the other user accepts, their server notifies yours (again, with a signed request). Both servers now record the friendship between your nodes, and posts shared between friends will flow across the federation link.

Security model

All communication between servers happens over HTTPS, and every request is cryptographically signed using RSA keys. Beyond transport security, Splintr protects data at rest and verifies content authenticity.

Identity verification

When a server receives a request claiming to be from another server, it checks the RSA signature against that server's public key. A forged request from an impersonator would fail verification. Servers can optionally publish their public key in a DNS TXT record (_splintr.domain.com), which lets any server verify their identity independently — even without prior contact.

Replay protection

Every signed request includes a timestamp. Requests older than 5 minutes are rejected. Federation handoff tokens are single-use and invalidated immediately after verification.

Privacy boundaries

Servers only share content that the node's owner has marked as visible to the requesting party. Friends-only posts are only sent when a verified friendship exists between the two nodes. A remote server cannot access private content just by asking. You can also restrict visibility to specific friend groups or hand-picked users.

Content signing

Every post is signed with the author's Ed25519 key at the moment it is created. The signature travels with the post across federation, so any server holding a copy can verify that the content is exactly what the author wrote and has not been altered in transit or storage.

Encryption at rest

Sensitive profile fields such as email addresses are encrypted in the database with per-user keys. Private messages use hybrid encryption — each message body is encrypted with a random session key, and the session key is encrypted individually for each participant using their public key.

Forward secrecy

Servers that communicate frequently can negotiate ephemeral key exchanges, so that even if a server's long-term key were compromised in the future, past conversations could not be decrypted. This is negotiated automatically when both servers support it and falls back gracefully when they do not.

What Splintr doesn't do

Splintr is not trying to be everything. It focuses on direct connections between people you know, not on algorithmic feeds, advertising, or viral content. There is no central authority that can shut down your node or change the rules. If you disagree with how a particular server is run, you can move to another one or start your own.

Want to run your own server? See the Download page for setup instructions.