Erfan.
← All posts
·6 min read

What Is the Solid Protocol and Why I Built an Android Library for It

Most developers haven't heard of Solid. Here's what it is, why it matters for data ownership, and what I built during my M.S. thesis to bring it to Android.

Solid ProtocolOpen SourceAndroidPrivacy

Most Android developers haven't heard of Solid. That's a shame, because it's one of the more interesting ideas in software today.

Let me explain what it is, why I think it matters, and what I built around it.

The problem Solid is solving

Right now, your data lives in silos. Your contacts are in Google. Your photos are in iCloud. Your health data is in Apple Health or Google Fit. Your messages are in WhatsApp.

You don't own any of it in a meaningful sense. You can export it (sometimes), but you can't take it somewhere else and have the apps you use follow. The data is locked to the platform.

Solid is Tim Berners-Lee's attempt to fix this. The idea is simple:

Separate your data from the applications that use it.

In the Solid model, you have a Pod — a personal data store you control. It lives on a server you choose (or host yourself). Apps request permission to read/write your Pod. You decide what each app can access. You can revoke access any time.

It's like OAuth, but instead of the app storing your data after you log in, it reads and writes directly to your Pod.

The technical reality

A Solid Pod is essentially a file system exposed over HTTP with access control. Data is stored as RDF (a graph data format), though you can also store arbitrary files.

Authentication uses OpenID Connect + OAuth2 + DPoP (Demonstration of Proof of Possession) — a token binding mechanism that prevents token theft.

Access control is defined per-resource using ACL or ACP policies.

What I built

For my M.S. thesis at Politecnico di Torino (funded by NLnet), I built Android Solid Services — a three-part ecosystem:

1. The Services App

A background Android app that acts as a system-level Solid authentication gateway. Think of it like a keychain manager, but for Solid pods. Any app on the device can bind to it via IPC and get authenticated access to a user's pod — without each app implementing auth from scratch.

// Third-party app connecting to the Services app
val connection = SolidAndroidClient.connect(context)
val profile = connection.readProfile() // reads from user's pod

2. The Solid Android Client Library

An IPC client library (published to Maven Central) for third-party apps to use the Services app. Handles the AIDL binding, permission verification, and CRUD operations on pod resources.

3. The Solid Android API Library

A standalone library for apps that want to talk to a Solid pod directly, without going through the Services app.

Why this is hard on Android

The tricky parts weren't the Solid protocol itself — they were Android-specific:

IPC across app boundaries — using AIDL/Binder to safely pass auth tokens between apps without exposing them to the OS.

RDF on mobile — most RDF libraries are JVM-focused and heavy. Getting efficient RDF parsing on Android took work.

DPoP token binding — generating and validating DPoP proofs tied to the device's keypair, on-device, with proper key management.

Contacts sync — I built a ContactsDataModule that syncs Android's native contacts ecosystem with a user's Solid pod. Reading/writing VCard data as RDF, keeping them in sync bidirectionally.

Is Solid mainstream yet?

No. Adoption is still limited, mostly to research and privacy-focused communities. But the infrastructure is maturing. Inrupt (Tim Berners-Lee's company) ships an enterprise Pod server. The spec is stable.

I think the interesting space is in tools that make it easy for regular users — not just developers — to actually use their pod. That's what Solid Share is trying to do.

If you're building anything in the decentralized data space, the Solid ecosystem is worth a look. And if you want to build an Android app that integrates with Solid, Android Solid Services is on Maven Central.