A decentralized Facebook-style social feed where you own your data
Solid Timeline is a Facebook-style social feed built on Solid - Tim Berners-Lee's project to re-decentralize the web. Your posts, likes, and comments are stored on your Solid pod, not a corporate server.
Your Data → Your Pod → Your Control
- Decentralized - Posts stored on your Solid pod, not our servers
- Facebook-style UI - Familiar feed with posts, likes, and comments
- No build step - Pure HTML/JS, just open and use
- Solid OIDC auth - Login with any Solid identity provider
- Real RDF data - Uses SIOC vocabulary for semantic interoperability
- Works offline - Static files, host anywhere
- Go to solid-social.github.io/timeline
- Click Login and enter your Solid IDP (e.g.,
solidweb.org) - Start posting!
# Clone and serve
git clone https://github.com/solid-social/timeline.git
cd timeline
npx serve .
# Open http://localhost:3000No npm install. No build. Just files.
┌─────────────────┐ ┌─────────────────┐
│ Your Browser │────▶│ Your Pod │
│ │ │ │
│ Solid Timeline │ │ /public/ │
│ (static HTML) │ │ timeline/ │
│ │ │ 2024-01-03.ttl
└─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Solid IDP │
│ (auth only) │
└─────────────────┘
Posts are stored as RDF in daily files on your pod:
https://you.solidweb.org/public/timeline/
├── 2024-01-01.ttl
├── 2024-01-02.ttl
└── 2024-01-03.ttl ← Today's posts
Posts use the SIOC vocabulary:
@prefix sioc: <http://rdfs.org/sioc/ns#>.
@prefix dct: <http://purl.org/dc/terms/>.
<#post-1704307200000> a sioc:Post ;
sioc:content "Hello, decentralized world!" ;
dct:created "2024-01-03T12:00:00Z"^^xsd:dateTime ;
dct:creator <https://you.solidweb.org/profile/card#me> .This means your posts are:
- Portable - Move to any Solid pod
- Interoperable - Other apps can read them
- Queryable - Use SPARQL to search
- Yours - Delete anytime, no trace left behind
| Layer | Technology |
|---|---|
| UI | Preact + htm |
| Auth | solid-oidc |
| RDF | rdflib.js |
| Build | None (ESM imports from esm.sh) |
Zero build step. Everything loads from CDN via ES modules.
The app auto-discovers your timeline from your WebID profile:
- Looks for
solid:timelinepredicate - Falls back to
{pim:storage}/public/timeline/
To set a custom location, add to your WebID:
<#me> <http://www.w3.org/ns/solid/terms#timeline>
<https://you.pod/custom/timeline/> .Don't have a pod? Get one free:
- solidweb.org - Community server
- solidcommunity.net - Inrupt's community server
- inrupt.net - Inrupt's pod service
PRs welcome! Some ideas:
- Image/media uploads
- Real-time updates via WebSocket
- Following other timelines
- End-to-end encryption
- Mobile PWA
- Solid Chat - Decentralized WhatsApp-style chat
- Solid Project - The Solid specification
- rdflib.js - RDF library for JavaScript
MIT - Do whatever you want.
Your data. Your pod. Your timeline.