Android Solid Services¶
Single sign-in to Solid for Android. One app holds the user's pod accounts. Every other app on the device reaches those pods through it — with the user's permission, and without ever handling a credential.
For your app, that is one dependency and no authentication code at all.
-
Sign a user in and write to their pod, in about ten minutes.
-
The one decision to make up front. Takes a minute.
-
Contacts, sharing, resources, notifications — one page each.
-
For people who just want Solid on their phone.
The problem¶
Solid gives people their own data. But on Android, every app that wants to use a pod has to become an identity client in its own right: run the OIDC flow, mint and rotate DPoP tokens, store them safely — and then the next app does all of it again.
The user signs in separately in each app. Each app's mistakes with those credentials are its own to make.
How this solves it¶
Android Solid Services owns the login. Tokens are DPoP-bound to keys generated in the Android Keystore, encrypted at rest, and they never leave the app. Other apps talk to it over AIDL and get results, never credentials.
The user signs in once, grants each app access explicitly, and can revoke it at any time.
// The whole of your authentication code.
val authorize = registerForActivityResult(AuthorizeWithSolid()) { result ->
if (result is SolidSignInResult.Authorized) onSignedIn(result.webId)
}
What you get¶
Several accounts at once
Accounts from different pod providers, all signed in, all usable. Every call names the WebID it is for, so routing is explicit.
No dangerous permissions
Sign-in launches from your own activity, so nothing needs overlay or contacts permissions. Solid accounts appear in Android Settings like any other.
Sharing that pods understand
View / Add / Edit access over Web Access Control or Access Control Policy, share links, and a Linked Data Notifications inbox for offers and requests.
Data modules, not just bytes
Contacts and tickets as standard RDF, laid out so other Solid apps read the same data.
See it in action¶
Tap any screen to enlarge it.
| Sign in | Signed in | Accounts | Granted apps |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Any Solid provider, or your own server | The WebID and its storages | Several accounts, all live at once | Every grant, revocable |
The pieces¶
| Component | Role | Published |
|---|---|---|
| Android Solid Services | The app that holds the accounts and exposes the IPC services | GitHub Releases |
client |
For apps that go through Android Solid Services | Maven Central |
api |
For apps that talk to pods directly | Maven Central |
There is also a sample app that runs every SDK call against a live pod, each shown beside the code that made it — the fastest way to watch a call behave before you write it.
New to Solid?¶
Solid is an open standard, led by Sir Tim Berners-Lee, that puts people in control of their own data. Instead of living inside an app's servers, your data lives in a pod you own. Apps ask for permission to read or write it, and you can withdraw that permission at any time.
The result is that data and applications come apart: you can switch apps without losing anything, and two apps can use the same data without copying it between them.
Questions, bugs, contributions¶
Please open an issue — including compatibility reports against a particular pod server, which have led to several fixes. Contributing covers building from source.
Acknowledgments¶
Funded by NLnet.




